@@ -53,6 +53,7 @@ public final class TypeScriptSettings {
53
53
private static final String SERVICE = "service" ;
54
54
private static final String PROTOCOL = "protocol" ;
55
55
private static final String PRIVATE = "private" ;
56
+ private static final String PACKAGE_MANAGER = "packageManager" ;
56
57
57
58
private String packageName ;
58
59
private String packageDescription = "" ;
@@ -64,6 +65,7 @@ public final class TypeScriptSettings {
64
65
private boolean isPrivate ;
65
66
private ArtifactType artifactType = ArtifactType .CLIENT ;
66
67
private boolean disableDefaultValidation = false ;
68
+ private PackageManager packageManager = PackageManager .YARN ;
67
69
68
70
@ Deprecated
69
71
public static TypeScriptSettings from (Model model , ObjectNode config ) {
@@ -95,6 +97,10 @@ public static TypeScriptSettings from(Model model, ObjectNode config, ArtifactTy
95
97
settings .packageJson = config .getObjectMember (PACKAGE_JSON ).orElse (Node .objectNode ());
96
98
config .getStringMember (PROTOCOL ).map (StringNode ::getValue ).map (ShapeId ::from ).ifPresent (settings ::setProtocol );
97
99
settings .setPrivate (config .getBooleanMember (PRIVATE ).map (BooleanNode ::getValue ).orElse (false ));
100
+ settings .setPackageManager (
101
+ config .getStringMember (PACKAGE_MANAGER )
102
+ .map (s -> PackageManager .fromString (s .getValue ()))
103
+ .orElse (PackageManager .YARN ));
98
104
99
105
if (artifactType == ArtifactType .SSDK ) {
100
106
settings .setDisableDefaultValidation (config .getBooleanMemberOrDefault (DISABLE_DEFAULT_VALIDATION ));
@@ -275,6 +281,19 @@ public void setDisableDefaultValidation(boolean disableDefaultValidation) {
275
281
this .disableDefaultValidation = disableDefaultValidation ;
276
282
}
277
283
284
+ /**
285
+ * Returns the package manager used by the generated package.
286
+ *
287
+ * @return the configured package manager. Defaults to {@link PackageManager#YARN}
288
+ */
289
+ public PackageManager getPackageManager () {
290
+ return packageManager ;
291
+ }
292
+
293
+ public void setPackageManager (PackageManager packageManager ) {
294
+ this .packageManager = packageManager ;
295
+ }
296
+
278
297
/**
279
298
* Gets the corresponding {@link ServiceShape} from a model.
280
299
*
@@ -347,10 +366,10 @@ public void setProtocol(ShapeId protocol) {
347
366
*/
348
367
public enum ArtifactType {
349
368
CLIENT (SymbolVisitor ::new ,
350
- Arrays .asList (PACKAGE , PACKAGE_DESCRIPTION , PACKAGE_JSON , PACKAGE_VERSION ,
369
+ Arrays .asList (PACKAGE , PACKAGE_DESCRIPTION , PACKAGE_JSON , PACKAGE_VERSION , PACKAGE_MANAGER ,
351
370
SERVICE , PROTOCOL , TARGET_NAMESPACE , PRIVATE )),
352
371
SSDK ((m , s ) -> new ServerSymbolVisitor (m , new SymbolVisitor (m , s )),
353
- Arrays .asList (PACKAGE , PACKAGE_DESCRIPTION , PACKAGE_JSON , PACKAGE_VERSION ,
372
+ Arrays .asList (PACKAGE , PACKAGE_DESCRIPTION , PACKAGE_JSON , PACKAGE_VERSION , PACKAGE_MANAGER ,
354
373
SERVICE , PROTOCOL , TARGET_NAMESPACE , PRIVATE , DISABLE_DEFAULT_VALIDATION ));
355
374
356
375
private final BiFunction <Model , TypeScriptSettings , SymbolProvider > symbolProviderFactory ;
@@ -373,4 +392,29 @@ public SymbolProvider createSymbolProvider(Model model, TypeScriptSettings setti
373
392
return symbolProviderFactory .apply (model , settings );
374
393
}
375
394
}
395
+
396
+ public enum PackageManager {
397
+ YARN ("yarn" ),
398
+ NPM ("npm run-script" );
399
+
400
+ private final String command ;
401
+
402
+ PackageManager (String command ) {
403
+ this .command = command ;
404
+ }
405
+
406
+ public String getCommand () {
407
+ return command ;
408
+ }
409
+
410
+ public static PackageManager fromString (String s ) {
411
+ if ("yarn" .equals (s )) {
412
+ return YARN ;
413
+ }
414
+ if ("npm" .equals (s )) {
415
+ return NPM ;
416
+ }
417
+ throw new CodegenException (String .format ("Unsupported package manager: %s" , s ));
418
+ }
419
+ }
376
420
}
0 commit comments