Skip to content

Commit 848631c

Browse files
committed
handle node: prefix package imports
1 parent 14aa3af commit 848631c

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/TypeScriptWriter.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,11 @@
1616
package software.amazon.smithy.typescript.codegen;
1717

1818
import java.nio.file.Path;
19-
import java.util.List;
2019
import java.util.Set;
2120
import java.util.function.BiFunction;
2221
import java.util.function.UnaryOperator;
2322
import software.amazon.smithy.codegen.core.CodegenException;
2423
import software.amazon.smithy.codegen.core.Symbol;
25-
import software.amazon.smithy.codegen.core.SymbolDependency;
2624
import software.amazon.smithy.codegen.core.SymbolReference;
2725
import software.amazon.smithy.codegen.core.SymbolWriter;
2826
import software.amazon.smithy.model.Model;
@@ -144,19 +142,27 @@ public TypeScriptWriter addIgnoredDefaultImport(String name, String from, String
144142
*/
145143
@Deprecated
146144
public TypeScriptWriter addImport(String name, String as, String from) {
145+
boolean isNodePackage = from.startsWith("node:");
146+
boolean isNamespacePackage = from.startsWith("@");
147+
boolean isRelativeImport = from.startsWith("/") || from.startsWith(".");
148+
147149
final boolean isPackageImport =
148-
from.startsWith("@")
149-
|| (!from.startsWith("/") && !from.startsWith("."));
150+
isNodePackage
151+
|| isNamespacePackage
152+
|| !isRelativeImport;
150153

151154
if (isPackageImport) {
152155
String[] packageNameSegments = from.split("/");
153-
String packageName =
154-
from.startsWith("@")
155-
? packageNameSegments[0] + "/" + packageNameSegments[1]
156-
: packageNameSegments[0];
157-
List<SymbolDependency> dependencies = getDependencies();
156+
String packageName;
157+
if (isNodePackage) {
158+
packageName = from.substring("node:".length(), from.indexOf('/'));
159+
} else if (isNamespacePackage) {
160+
packageName = packageNameSegments[0] + "/" + packageNameSegments[1];
161+
} else {
162+
packageName = packageNameSegments[0];
163+
}
158164
if (!EXEMPT_DEPENDENCIES.contains(packageName)
159-
&& dependencies.stream().noneMatch(dep -> dep.getPackageName().equals(packageName))) {
165+
&& getDependencies().stream().noneMatch(dep -> dep.getPackageName().equals(packageName))) {
160166
throw new CodegenException(
161167
"""
162168
The import %s does not correspond to a registered dependency.

0 commit comments

Comments
 (0)