@nikovirtala/projen-constructs 0.1.8 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/.jsii +2021 -157
  2. package/API.md +769 -52
  3. package/README.md +37 -8
  4. package/docs/api/.nojekyll +1 -0
  5. package/docs/api/assets/hierarchy.js +1 -0
  6. package/docs/api/assets/highlight.css +99 -0
  7. package/docs/api/assets/icons.js +18 -0
  8. package/docs/api/assets/icons.svg +1 -0
  9. package/docs/api/assets/main.js +60 -0
  10. package/docs/api/assets/navigation.js +1 -0
  11. package/docs/api/assets/search.js +1 -0
  12. package/docs/api/assets/style.css +1633 -0
  13. package/docs/api/classes/AwsCdkConstructLibraryProject.html +308 -0
  14. package/docs/api/classes/AwsCdkTypeScriptAppProject.html +306 -0
  15. package/docs/api/classes/JsiiProject.html +294 -0
  16. package/docs/api/classes/ProjectGenerator.html +38 -0
  17. package/docs/api/classes/TypeDoc.html +37 -0
  18. package/docs/api/classes/TypeScriptProject.html +294 -0
  19. package/docs/api/classes/Vitest.html +38 -0
  20. package/docs/api/enums/CommentStyle.html +11 -0
  21. package/docs/api/enums/CoverageProvider.html +7 -0
  22. package/docs/api/enums/CoverageReporter.html +11 -0
  23. package/docs/api/enums/EntryPointStrategy.html +11 -0
  24. package/docs/api/enums/Environment.html +12 -0
  25. package/docs/api/enums/LogLevel.html +13 -0
  26. package/docs/api/enums/Pool.html +17 -0
  27. package/docs/api/enums/ProjectType.html +47 -0
  28. package/docs/api/enums/Visibility.html +9 -0
  29. package/docs/api/functions/applyDefaults.html +1 -0
  30. package/docs/api/functions/toJson_TypeDocConfiguration.html +2 -0
  31. package/docs/api/hierarchy.html +1 -0
  32. package/docs/api/index.html +86 -0
  33. package/docs/api/interfaces/AwsCdkConstructLibraryProjectOptions.html +1075 -0
  34. package/docs/api/interfaces/AwsCdkTypeScriptAppProjectOptions.html +1026 -0
  35. package/docs/api/interfaces/Component.html +13 -0
  36. package/docs/api/interfaces/ComponentOptions.html +8 -0
  37. package/docs/api/interfaces/JsiiProjectOptions.html +1003 -0
  38. package/docs/api/interfaces/ProjectGeneratorOptions.html +49 -0
  39. package/docs/api/interfaces/TypeDocConfiguration.html +141 -0
  40. package/docs/api/interfaces/TypeDocOptions.html +9 -0
  41. package/docs/api/interfaces/TypeScriptProjectOptions.html +899 -0
  42. package/docs/api/interfaces/ValidationOptions.html +9 -0
  43. package/docs/api/interfaces/VitestConfigOptions.html +111 -0
  44. package/docs/api/interfaces/VitestOptions.html +13 -0
  45. package/docs/api/modules.html +1 -0
  46. package/docs/api/variables/defaultOptions.html +1 -0
  47. package/docs/api/variables/defaults.html +1 -0
  48. package/docs/api/variables/projectDefaultOptions.html +1 -0
  49. package/lib/components/typedoc-config.d.ts +321 -0
  50. package/lib/components/typedoc-config.js +73 -1
  51. package/lib/components/typedoc.d.ts +19 -0
  52. package/lib/components/typedoc.js +14 -1
  53. package/lib/components/vitest.d.ts +197 -0
  54. package/lib/components/vitest.js +72 -2
  55. package/lib/config.d.ts +4 -4
  56. package/lib/errors.d.ts +16 -0
  57. package/lib/errors.js +26 -2
  58. package/lib/index.d.ts +2 -0
  59. package/lib/index.js +3 -1
  60. package/lib/project-generator.d.ts +87 -63
  61. package/lib/project-generator.js +344 -60
  62. package/lib/project-type.d.ts +78 -16
  63. package/lib/project-type.js +79 -17
  64. package/lib/projects/awscdk-construct-library.generated.js +4 -4
  65. package/lib/projects/awscdk-typescript-app.generated.js +4 -4
  66. package/lib/projects/jsii-options.generated.d.ts +11 -1
  67. package/lib/projects/jsii-options.generated.js +1 -1
  68. package/lib/projects/jsii.generated.js +5 -4
  69. package/lib/projects/typescript.generated.js +4 -4
  70. package/lib/utils.d.ts +2 -2
  71. package/lib/utils.js +3 -3
  72. package/package.json +3 -1
  73. package/scripts/generate-project-types.ts +103 -0
  74. package/typedoc.jsonc +10 -0
@@ -20,14 +20,14 @@ class TypeScriptProject extends projen_1.typescript.TypeScriptProject {
20
20
  */
21
21
  constructor(options) {
22
22
  /* Separate component configuration from base Projen options */
23
- const { mise, vitest, vitestOptions, ...baseOptions } = options;
23
+ const { mise, vitest, ...baseOptions } = options;
24
24
  /* Merge default configuration with user options and initialize base class */
25
25
  super((0, utils_1.deepMerge)(config_1.defaultOptions.typescript.TypeScriptProject, baseOptions));
26
26
  /* Apply component defaults and instantiate enabled components */
27
- (0, config_1.applyDefaults)(this, [{ component: mise_1.Mise, enabled: mise }, { component: vitest_1.Vitest, enabled: vitest, options: vitestOptions }]);
27
+ (0, config_1.applyDefaults)(this, [{ component: mise_1.Mise, enabled: mise }, { component: vitest_1.Vitest, enabled: vitest }]);
28
28
  }
29
29
  }
30
30
  exports.TypeScriptProject = TypeScriptProject;
31
31
  _a = JSII_RTTI_SYMBOL_1;
32
- TypeScriptProject[_a] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.1.8" };
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvdHlwZXNjcmlwdC5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2RUFBNkU7QUFDN0UsbUNBQW9DO0FBQ3BDLDZDQUEwQztBQUMxQyxpREFBOEM7QUFDOUMsc0NBQTBEO0FBQzFELG9DQUFxQztBQU9yQzs7OztHQUlHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjtJQUMvRDs7T0FFRztJQUNILFlBQVksT0FBaUM7UUFDekMsK0RBQStEO1FBQy9ELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVoRSw2RUFBNkU7UUFDN0UsS0FBSyxDQUFDLElBQUEsaUJBQVMsRUFBc0MsdUJBQWMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVoSCxpRUFBaUU7UUFDakUsSUFBQSxzQkFBYSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5SCxDQUFDOztBQWJMLDhDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0IHsgdHlwZXNjcmlwdCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IE1pc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9taXNlXCI7XG5pbXBvcnQgeyBWaXRlc3QgfSBmcm9tIFwiLi4vY29tcG9uZW50cy92aXRlc3RcIjtcbmltcG9ydCB7IGFwcGx5RGVmYXVsdHMsIGRlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2NvbmZpZ1wiO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzY3JpcHQtb3B0aW9ucy5nZW5lcmF0ZWRcIjtcblxuXG5leHBvcnQgeyBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc2NyaXB0LW9wdGlvbnMuZ2VuZXJhdGVkXCI7XG5cblxuLyoqXG4gKiBUeXBlU2NyaXB0UHJvamVjdCB3aXRoIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gYW5kIGNvbXBvbmVudCBpbnRlZ3JhdGlvblxuICpcbiAqIEV4dGVuZHMgUHJvamVuJ3MgYmFzZSBjbGFzcyB3aXRoIG9waW5pb25hdGVkIGRlZmF1bHRzIGFuZCBhdXRvbWF0aWMgY29tcG9uZW50IHNldHVwLlxuICovXG5leHBvcnQgY2xhc3MgVHlwZVNjcmlwdFByb2plY3QgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFByb2plY3QgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucykge1xuICAgICAgICAvKiBTZXBhcmF0ZSBjb21wb25lbnQgY29uZmlndXJhdGlvbiBmcm9tIGJhc2UgUHJvamVuIG9wdGlvbnMgKi9cbiAgICAgICAgY29uc3QgeyBtaXNlLCB2aXRlc3QsIHZpdGVzdE9wdGlvbnMsIC4uLmJhc2VPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIC8qIE1lcmdlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aXRoIHVzZXIgb3B0aW9ucyBhbmQgaW5pdGlhbGl6ZSBiYXNlIGNsYXNzICovXG4gICAgICAgIHN1cGVyKGRlZXBNZXJnZTx0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucz4oZGVmYXVsdE9wdGlvbnMudHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCwgYmFzZU9wdGlvbnMpKTtcblxuICAgICAgICAvKiBBcHBseSBjb21wb25lbnQgZGVmYXVsdHMgYW5kIGluc3RhbnRpYXRlIGVuYWJsZWQgY29tcG9uZW50cyAqL1xuICAgICAgICBhcHBseURlZmF1bHRzKHRoaXMsIFt7IGNvbXBvbmVudDogTWlzZSwgZW5hYmxlZDogbWlzZSB9LCB7IGNvbXBvbmVudDogVml0ZXN0LCBlbmFibGVkOiB2aXRlc3QsIG9wdGlvbnM6IHZpdGVzdE9wdGlvbnMgfV0pO1xuICAgIH1cbn1cbiJdfQ==
32
+ TypeScriptProject[_a] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.2.1" };
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvdHlwZXNjcmlwdC5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2RUFBNkU7QUFDN0UsbUNBQW9DO0FBQ3BDLDZDQUEwQztBQUMxQyxpREFBOEM7QUFDOUMsc0NBQTBEO0FBQzFELG9DQUFxQztBQUtyQzs7OztHQUlHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjtJQUMvRDs7T0FFRztJQUNILFlBQVksT0FBaUM7UUFDekMsK0RBQStEO1FBQy9ELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWpELDZFQUE2RTtRQUM3RSxLQUFLLENBQUMsSUFBQSxpQkFBUyxFQUFzQyx1QkFBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWhILGlFQUFpRTtRQUNqRSxJQUFBLHNCQUFhLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RyxDQUFDOztBQWJMLDhDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0IHsgdHlwZXNjcmlwdCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IE1pc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9taXNlXCI7XG5pbXBvcnQgeyBWaXRlc3QgfSBmcm9tIFwiLi4vY29tcG9uZW50cy92aXRlc3RcIjtcbmltcG9ydCB7IGFwcGx5RGVmYXVsdHMsIGRlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2NvbmZpZ1wiO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzY3JpcHQtb3B0aW9ucy5nZW5lcmF0ZWRcIjtcblxuZXhwb3J0IHsgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNjcmlwdC1vcHRpb25zLmdlbmVyYXRlZFwiO1xuXG4vKipcbiAqIFR5cGVTY3JpcHRQcm9qZWN0IHdpdGggc3RhbmRhcmQgY29uZmlndXJhdGlvbiBhbmQgY29tcG9uZW50IGludGVncmF0aW9uXG4gKlxuICogRXh0ZW5kcyBQcm9qZW4ncyBiYXNlIGNsYXNzIHdpdGggb3BpbmlvbmF0ZWQgZGVmYXVsdHMgYW5kIGF1dG9tYXRpYyBjb21wb25lbnQgc2V0dXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlU2NyaXB0UHJvamVjdCBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gUHJvamVjdCBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogVHlwZVNjcmlwdFByb2plY3RPcHRpb25zKSB7XG4gICAgICAgIC8qIFNlcGFyYXRlIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIGZyb20gYmFzZSBQcm9qZW4gb3B0aW9ucyAqL1xuICAgICAgICBjb25zdCB7IG1pc2UsIHZpdGVzdCwgLi4uYmFzZU9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgLyogTWVyZ2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIHdpdGggdXNlciBvcHRpb25zIGFuZCBpbml0aWFsaXplIGJhc2UgY2xhc3MgKi9cbiAgICAgICAgc3VwZXIoZGVlcE1lcmdlPHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3RPcHRpb25zPihkZWZhdWx0T3B0aW9ucy50eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0LCBiYXNlT3B0aW9ucykpO1xuXG4gICAgICAgIC8qIEFwcGx5IGNvbXBvbmVudCBkZWZhdWx0cyBhbmQgaW5zdGFudGlhdGUgZW5hYmxlZCBjb21wb25lbnRzICovXG4gICAgICAgIGFwcGx5RGVmYXVsdHModGhpcywgW3sgY29tcG9uZW50OiBNaXNlLCBlbmFibGVkOiBtaXNlIH0sIHsgY29tcG9uZW50OiBWaXRlc3QsIGVuYWJsZWQ6IHZpdGVzdCB9XSk7XG4gICAgfVxufSJdfQ==
package/lib/utils.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const deepMerge: <T>(target: Partial<T>, source: Partial<T>) => T;
2
- export declare const mergeAll: <T extends object>(...items: Partial<T>[]) => Partial<T>;
1
+ export declare const deepMerge: <T>(target: Partial<T> | undefined, source: Partial<T> | undefined) => T;
2
+ export declare const mergeAll: <T extends object>(...items: (Partial<T> | undefined)[]) => Partial<T> | undefined;
package/lib/utils.js CHANGED
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mergeAll = exports.deepMerge = void 0;
4
4
  const deepMerge = (target, source) => {
5
- const result = structuredClone(target);
6
- const src = source;
5
+ const result = structuredClone(target ?? {});
6
+ const src = (source ?? {});
7
7
  for (const key in src) {
8
8
  if (src[key] && typeof src[key] === "object" && !Array.isArray(src[key])) {
9
9
  result[key] = (0, exports.deepMerge)((result[key] || {}), src[key]);
@@ -17,4 +17,4 @@ const deepMerge = (target, source) => {
17
17
  exports.deepMerge = deepMerge;
18
18
  const mergeAll = (...items) => items.reduce((acc, item) => (0, exports.deepMerge)(acc, item), {});
19
19
  exports.mergeAll = mergeAll;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxTQUFTLEdBQUcsQ0FBSSxNQUFrQixFQUFFLE1BQWtCLEVBQUssRUFBRTtJQUN0RSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUE0QixDQUFDO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLE1BQWlDLENBQUM7SUFDOUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUEsaUJBQVMsRUFDbkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUE0QixFQUM5QyxHQUFHLENBQUMsR0FBRyxDQUE0QixDQUN0QyxDQUFDO1FBQ04sQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE1BQVcsQ0FBQztBQUN2QixDQUFDLENBQUM7QUFkVyxRQUFBLFNBQVMsYUFjcEI7QUFFSyxNQUFNLFFBQVEsR0FBRyxDQUFtQixHQUFHLEtBQW1CLEVBQUUsRUFBRSxDQUNqRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFPLENBQUMsQ0FBQztBQURsRCxRQUFBLFFBQVEsWUFDMEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZGVlcE1lcmdlID0gPFQ+KHRhcmdldDogUGFydGlhbDxUPiwgc291cmNlOiBQYXJ0aWFsPFQ+KTogVCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3RydWN0dXJlZENsb25lKHRhcmdldCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgc3JjID0gc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNyYykge1xuICAgICAgICBpZiAoc3JjW2tleV0gJiYgdHlwZW9mIHNyY1trZXldID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHNyY1trZXldKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UoXG4gICAgICAgICAgICAgICAgKHJlc3VsdFtrZXldIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICBzcmNba2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3JjW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59O1xuXG5leHBvcnQgY29uc3QgbWVyZ2VBbGwgPSA8VCBleHRlbmRzIG9iamVjdD4oLi4uaXRlbXM6IFBhcnRpYWw8VD5bXSkgPT5cbiAgICBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gZGVlcE1lcmdlKGFjYywgaXRlbSksIHt9IGFzIFQpO1xuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxTQUFTLEdBQUcsQ0FBSSxNQUE4QixFQUFFLE1BQThCLEVBQUssRUFBRTtJQUM5RixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBNEIsQ0FBQztJQUN4RSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQTRCLENBQUM7SUFDdEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUEsaUJBQVMsRUFDbkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUE0QixFQUM5QyxHQUFHLENBQUMsR0FBRyxDQUE0QixDQUN0QyxDQUFDO1FBQ04sQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE1BQVcsQ0FBQztBQUN2QixDQUFDLENBQUM7QUFkVyxRQUFBLFNBQVMsYUFjcEI7QUFFSyxNQUFNLFFBQVEsR0FBRyxDQUFtQixHQUFHLEtBQWlDLEVBQUUsRUFBRSxDQUMvRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFPLENBQUMsQ0FBQztBQURsRCxRQUFBLFFBQVEsWUFDMEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZGVlcE1lcmdlID0gPFQ+KHRhcmdldDogUGFydGlhbDxUPiB8IHVuZGVmaW5lZCwgc291cmNlOiBQYXJ0aWFsPFQ+IHwgdW5kZWZpbmVkKTogVCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3RydWN0dXJlZENsb25lKHRhcmdldCA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgc3JjID0gKHNvdXJjZSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3JjKSB7XG4gICAgICAgIGlmIChzcmNba2V5XSAmJiB0eXBlb2Ygc3JjW2tleV0gPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoc3JjW2tleV0pKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZShcbiAgICAgICAgICAgICAgICAocmVzdWx0W2tleV0gfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgICAgIHNyY1trZXldIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcmNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbn07XG5cbmV4cG9ydCBjb25zdCBtZXJnZUFsbCA9IDxUIGV4dGVuZHMgb2JqZWN0PiguLi5pdGVtczogKFBhcnRpYWw8VD4gfCB1bmRlZmluZWQpW10pID0+XG4gICAgaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IGRlZXBNZXJnZShhY2MsIGl0ZW0pLCB7fSBhcyBUKTtcbiJdfQ==
package/package.json CHANGED
@@ -27,6 +27,7 @@
27
27
  "jsii-rosetta": "~5.9.3",
28
28
  "projen": "^0.98.11",
29
29
  "tsx": "^4.20.6",
30
+ "typedoc": "^0.28",
30
31
  "typescript": "5.9.3",
31
32
  "vitest": "^4"
32
33
  },
@@ -50,7 +51,7 @@
50
51
  "publishConfig": {
51
52
  "access": "public"
52
53
  },
53
- "version": "0.1.8",
54
+ "version": "0.2.1",
54
55
  "types": "lib/index.d.ts",
55
56
  "stability": "stable",
56
57
  "jsii": {
@@ -86,6 +87,7 @@
86
87
  "test": "npx projen test",
87
88
  "test:update": "npx projen test:update",
88
89
  "test:watch": "npx projen test:watch",
90
+ "typedoc": "npx projen typedoc",
89
91
  "unbump": "npx projen unbump",
90
92
  "update-versions": "npx projen update-versions",
91
93
  "upgrade": "npx projen upgrade",
@@ -0,0 +1,103 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import type { Assembly, ClassType } from "@jsii/spec";
4
+
5
+ const BASE_CLASS = "projen.Project";
6
+
7
+ function loadProjenManifest(): Assembly {
8
+ const projenPackageJson = require.resolve("projen/package.json");
9
+ const projenRoot = dirname(projenPackageJson);
10
+ const jsiiPath = join(projenRoot, ".jsii");
11
+ return JSON.parse(readFileSync(jsiiPath, "utf-8"));
12
+ }
13
+
14
+ function extendsBase(classType: ClassType, manifest: Assembly): boolean {
15
+ if (classType.inheritancePath) {
16
+ return classType.inheritancePath.includes(BASE_CLASS);
17
+ }
18
+
19
+ let currentBase = classType.base;
20
+ while (currentBase) {
21
+ if (currentBase === BASE_CLASS) {
22
+ return true;
23
+ }
24
+ const baseType = manifest.types?.[currentBase];
25
+ if (!baseType || baseType.kind !== "class") {
26
+ break;
27
+ }
28
+ currentBase = (baseType as ClassType).base;
29
+ }
30
+
31
+ return false;
32
+ }
33
+
34
+ function toEnumName(className: string): string {
35
+ return className
36
+ .replace(/([A-Z])/g, "_$1")
37
+ .toUpperCase()
38
+ .replace(/^_/, "");
39
+ }
40
+
41
+ function discoverProjectTypes(manifest: Assembly): Array<[string, string, string]> {
42
+ const projectTypes: Array<[string, string, string]> = [];
43
+
44
+ for (const [fqn, type] of Object.entries(manifest.types ?? {})) {
45
+ if (type.kind !== "class") {
46
+ continue;
47
+ }
48
+
49
+ const classType = type as ClassType;
50
+
51
+ if (classType.abstract) {
52
+ continue;
53
+ }
54
+
55
+ if (!extendsBase(classType, manifest)) {
56
+ continue;
57
+ }
58
+
59
+ const parts = fqn.split(".");
60
+ if (parts.length < 3 || parts[0] !== "projen") {
61
+ continue;
62
+ }
63
+
64
+ const module = parts[1];
65
+ const className = parts.slice(2).join(".");
66
+ const enumName = toEnumName(className);
67
+ const value = `${module}.${className}`;
68
+ const docs = classType.docs?.summary ?? className;
69
+
70
+ projectTypes.push([enumName, value, docs]);
71
+ }
72
+
73
+ return projectTypes.sort((a, b) => a[0].localeCompare(b[0]));
74
+ }
75
+
76
+ function generateEnum(): string {
77
+ const manifest = loadProjenManifest();
78
+ const projectTypes = discoverProjectTypes(manifest);
79
+
80
+ const lines: string[] = [];
81
+ lines.push("/**");
82
+ lines.push(" * Enum defining all supported project types");
83
+ lines.push(" *");
84
+ lines.push(" * Each project type corresponds to a generated project class and its configuration");
85
+ lines.push(" * in the defaultOptions structure.");
86
+ lines.push(" *");
87
+ lines.push(" * @generated Automatically generated from Projen's JSII manifest");
88
+ lines.push(" */");
89
+ lines.push("export enum ProjectType {");
90
+
91
+ for (const [enumName, value, docs] of projectTypes) {
92
+ lines.push(" /**");
93
+ lines.push(` * ${docs}`);
94
+ lines.push(" */");
95
+ lines.push(` ${enumName} = "${value}",`);
96
+ lines.push("");
97
+ }
98
+
99
+ lines.push("}");
100
+ return lines.join("\n");
101
+ }
102
+
103
+ console.log(generateEnum());
package/typedoc.jsonc ADDED
@@ -0,0 +1,10 @@
1
+ // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
2
+ {
3
+ "entryPointStrategy": "expand",
4
+ "exclude": [
5
+ "**/*.test.ts"
6
+ ],
7
+ "excludePrivate": true,
8
+ "out": "docs/api",
9
+ "disableSources": true
10
+ }