@decohere/create 0.0.1-dev.19 → 0.0.1-dev.20261105.46

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 (96) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +254 -0
  3. package/commonjs/src/cli.js +1 -34
  4. package/commonjs/src/index.js +26 -0
  5. package/commonjs/src/resolve-launch.js +100 -0
  6. package/commonjs/src/runner.js +63 -14
  7. package/commonjs/src/version.js +25 -9
  8. package/es6/src/cli.js +1 -34
  9. package/es6/src/index.js +2 -0
  10. package/es6/src/resolve-launch.js +87 -0
  11. package/es6/src/runner.js +67 -24
  12. package/es6/src/version.js +14 -6
  13. package/pack-builder-tgz.mjs +177 -0
  14. package/package.json +23 -11
  15. package/types/src/index.d.ts +3 -0
  16. package/types/src/resolve-launch.d.ts +20 -0
  17. package/types/src/runner.d.ts +3 -11
  18. package/types/src/version.d.ts +1 -1
  19. package/commonjs/src/domain/prompt.js +0 -55
  20. package/commonjs/src/models/compose.model.js +0 -82
  21. package/commonjs/src/models/config-yaml.model.js +0 -34
  22. package/commonjs/src/models/const.js +0 -29
  23. package/commonjs/src/models/container-image.model.js +0 -88
  24. package/commonjs/src/models/dev-container.model.js +0 -73
  25. package/commonjs/src/models/env-file.model.js +0 -33
  26. package/commonjs/src/models/gitignore.model.js +0 -32
  27. package/commonjs/src/models/launch-json.model.js +0 -52
  28. package/commonjs/src/models/package-json.model.js +0 -64
  29. package/commonjs/src/models/project.model.js +0 -126
  30. package/commonjs/src/models/source-file.js +0 -6
  31. package/commonjs/src/models/tsconfig.model.js +0 -34
  32. package/commonjs/src/models/vscode-settings.model.js +0 -31
  33. package/commonjs/src/services/scaffold.service.js +0 -62
  34. package/commonjs/src/webapi/create-api.js +0 -169
  35. package/commonjs/src/webapi/features/auth.feature.js +0 -166
  36. package/commonjs/src/webapi/features/auth0-cli.js +0 -151
  37. package/commonjs/src/webapi/features/database.feature.js +0 -151
  38. package/commonjs/src/webapi/features/finalize.feature.js +0 -51
  39. package/commonjs/src/webapi/features/postman.feature.js +0 -309
  40. package/commonjs/src/webapi/models/api-package-json.model.js +0 -57
  41. package/commonjs/src/webapi/models/auth-config.model.js +0 -23
  42. package/commonjs/src/webapi/models/controller-source-file.model.js +0 -180
  43. package/commonjs/src/webapi/models/main-source-file.model.js +0 -132
  44. package/commonjs/src/webapi/models/sample-files.model.js +0 -60
  45. package/es6/src/domain/prompt.js +0 -37
  46. package/es6/src/models/compose.model.js +0 -77
  47. package/es6/src/models/config-yaml.model.js +0 -30
  48. package/es6/src/models/const.js +0 -19
  49. package/es6/src/models/container-image.model.js +0 -84
  50. package/es6/src/models/dev-container.model.js +0 -68
  51. package/es6/src/models/env-file.model.js +0 -29
  52. package/es6/src/models/gitignore.model.js +0 -22
  53. package/es6/src/models/launch-json.model.js +0 -42
  54. package/es6/src/models/package-json.model.js +0 -60
  55. package/es6/src/models/project.model.js +0 -111
  56. package/es6/src/models/source-file.js +0 -3
  57. package/es6/src/models/tsconfig.model.js +0 -24
  58. package/es6/src/models/vscode-settings.model.js +0 -21
  59. package/es6/src/services/scaffold.service.js +0 -52
  60. package/es6/src/webapi/create-api.js +0 -151
  61. package/es6/src/webapi/features/auth.feature.js +0 -115
  62. package/es6/src/webapi/features/auth0-cli.js +0 -116
  63. package/es6/src/webapi/features/database.feature.js +0 -141
  64. package/es6/src/webapi/features/finalize.feature.js +0 -41
  65. package/es6/src/webapi/features/postman.feature.js +0 -258
  66. package/es6/src/webapi/models/api-package-json.model.js +0 -52
  67. package/es6/src/webapi/models/auth-config.model.js +0 -19
  68. package/es6/src/webapi/models/controller-source-file.model.js +0 -171
  69. package/es6/src/webapi/models/main-source-file.model.js +0 -128
  70. package/es6/src/webapi/models/sample-files.model.js +0 -42
  71. package/types/src/domain/prompt.d.ts +0 -2
  72. package/types/src/models/compose.model.d.ts +0 -32
  73. package/types/src/models/config-yaml.model.d.ts +0 -16
  74. package/types/src/models/const.d.ts +0 -17
  75. package/types/src/models/container-image.model.d.ts +0 -15
  76. package/types/src/models/dev-container.model.d.ts +0 -21
  77. package/types/src/models/env-file.model.d.ts +0 -14
  78. package/types/src/models/gitignore.model.d.ts +0 -6
  79. package/types/src/models/launch-json.model.d.ts +0 -5
  80. package/types/src/models/package-json.model.d.ts +0 -18
  81. package/types/src/models/project.model.d.ts +0 -55
  82. package/types/src/models/source-file.d.ts +0 -11
  83. package/types/src/models/tsconfig.model.d.ts +0 -5
  84. package/types/src/models/vscode-settings.model.d.ts +0 -7
  85. package/types/src/services/scaffold.service.d.ts +0 -22
  86. package/types/src/webapi/create-api.d.ts +0 -7
  87. package/types/src/webapi/features/auth.feature.d.ts +0 -7
  88. package/types/src/webapi/features/auth0-cli.d.ts +0 -22
  89. package/types/src/webapi/features/database.feature.d.ts +0 -5
  90. package/types/src/webapi/features/finalize.feature.d.ts +0 -2
  91. package/types/src/webapi/features/postman.feature.d.ts +0 -7
  92. package/types/src/webapi/models/api-package-json.model.d.ts +0 -17
  93. package/types/src/webapi/models/auth-config.model.d.ts +0 -18
  94. package/types/src/webapi/models/controller-source-file.model.d.ts +0 -42
  95. package/types/src/webapi/models/main-source-file.model.d.ts +0 -36
  96. package/types/src/webapi/models/sample-files.model.d.ts +0 -7
@@ -1,132 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "MainSourceFile", {
6
- enumerable: true,
7
- get: function() {
8
- return MainSourceFile;
9
- }
10
- });
11
- const _const = require("../../models/const.js");
12
- /** Tracks named imports from a single module path, split into values and types. */ class ImportGroup {
13
- _values = [];
14
- _types = [];
15
- add(name, typeOnly = false) {
16
- if (typeOnly) {
17
- // Value import already present — value wins, skip
18
- if (!this._values.includes(name) && !this._types.includes(name)) {
19
- this._types.push(name);
20
- }
21
- } else {
22
- // Promote: remove from types if it was previously type-only
23
- const typeIdx = this._types.indexOf(name);
24
- if (typeIdx !== -1) this._types.splice(typeIdx, 1);
25
- if (!this._values.includes(name)) this._values.push(name);
26
- }
27
- return this;
28
- }
29
- render(from) {
30
- const values = [
31
- ...this._values
32
- ].sort();
33
- const types = [
34
- ...this._types
35
- ].sort().map((n)=>`type ${n}`);
36
- return `import { ${[
37
- ...values,
38
- ...types
39
- ].join(", ")} } from "${from}";`;
40
- }
41
- }
42
- class MainSourceFile {
43
- appName;
44
- key = _const.WELL_KNOWN_FILES.MAIN_TS;
45
- _sideEffectImports = [];
46
- _extraImports = new Map();
47
- _builderCalls = [];
48
- _entities = [];
49
- _repositories = [];
50
- constructor(appName){
51
- this.appName = appName;
52
- }
53
- /** Adds a bare side-effect import, e.g. `@decohere/cortex/auth`. */ addSideEffectImport(path) {
54
- if (!this._sideEffectImports.includes(path)) this._sideEffectImports.push(path);
55
- return this;
56
- }
57
- /** Adds a named import, e.g. `import { Foo } from "bar"`. */ addImport(name, from, typeOnly = false) {
58
- const group = this._extraImports.get(from) ?? new ImportGroup();
59
- group.add(name, typeOnly);
60
- this._extraImports.set(from, group);
61
- return this;
62
- }
63
- /**
64
- * Adds a builder call inserted after `.withConfiguration()` and before
65
- * `.withServices()`. Pass the call without leading dot, e.g. `.withAuth()`.
66
- */ addBuilderCall(call) {
67
- this._builderCalls.push(call);
68
- return this;
69
- }
70
- /** Adds a TypeORM entity — import and entry in `withTypeOrm({ entities })`. */ addEntity(entity) {
71
- this._entities.push(entity);
72
- return this;
73
- }
74
- /** Adds a TypeORM repository — import and entry in `withTypeOrm({ repositories })`. */ addRepository(repo) {
75
- this._repositories.push(repo);
76
- return this;
77
- }
78
- files() {
79
- const imports = [
80
- 'import "@decohere/scribe-pino";',
81
- 'import "@decohere/cortex/http";'
82
- ];
83
- for (const path of this._sideEffectImports){
84
- imports.push(`import "${path}";`);
85
- }
86
- imports.push('import "@decohere/protocol";', 'import { YamlDataSource } from "@decohere/protocol";', 'import { Builder } from "@decohere/cortex";', 'import { FastifyProvider } from "@decohere/cortex/providers";', 'import { scribe } from "@decohere/scribe";', 'import { SampleService } from "./services/sample.service.js";');
87
- for (const e of this._entities){
88
- imports.push(`import { ${e.className} } from "${e.importPath}";`);
89
- }
90
- for (const r of this._repositories){
91
- imports.push(`import { ${r.className} } from "${r.importPath}";`);
92
- }
93
- for (const [from, group] of this._extraImports){
94
- imports.push(group.render(from));
95
- }
96
- imports.push('import { HelloController } from "./controllers/hello.controller.js";');
97
- const builderCalls = [
98
- `\t.withHttpProvider(FastifyProvider)`,
99
- `\t.withConfiguration(YamlDataSource)`,
100
- ...this._builderCalls.map((c)=>`\t${c}`),
101
- `\t.withServices((cb) => { cb.registerSingleton(SampleService); })`
102
- ];
103
- if (this._entities.length > 0) {
104
- const entities = this._entities.map((e)=>e.className).join(", ");
105
- const repos = this._repositories.map((r)=>r.className).join(", ");
106
- builderCalls.push(`\t.withTypeOrm({ entities: [${entities}], repositories: [${repos}] })`);
107
- }
108
- builderCalls.push(`\t.withControllers(HelloController)`);
109
- const content = [
110
- ...imports,
111
- "",
112
- "scribe.extend.withPinoPretty();",
113
- "",
114
- `const app = await Builder.create({ applicationName: "${this.appName}" })`,
115
- ...builderCalls,
116
- `\t.build();`,
117
- "",
118
- "await app.start({ port: 3000 });",
119
- "",
120
- "export default app;",
121
- ""
122
- ].join("\n");
123
- return [
124
- {
125
- filePath: "src/main.ts",
126
- content
127
- }
128
- ];
129
- }
130
- }
131
-
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFR5cGVPcm1JbXBvcnQgPSB7IGNsYXNzTmFtZTogc3RyaW5nOyBpbXBvcnRQYXRoOiBzdHJpbmcgfTtcblxuLyoqIFRyYWNrcyBuYW1lZCBpbXBvcnRzIGZyb20gYSBzaW5nbGUgbW9kdWxlIHBhdGgsIHNwbGl0IGludG8gdmFsdWVzIGFuZCB0eXBlcy4gKi9cbmNsYXNzIEltcG9ydEdyb3VwIHtcblx0cHJpdmF0ZSByZWFkb25seSBfdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90eXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRwdWJsaWMgYWRkKG5hbWU6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IHRoaXMge1xuXHRcdGlmICh0eXBlT25seSkge1xuXHRcdFx0Ly8gVmFsdWUgaW1wb3J0IGFscmVhZHkgcHJlc2VudCDigJQgdmFsdWUgd2lucywgc2tpcFxuXHRcdFx0aWYgKCF0aGlzLl92YWx1ZXMuaW5jbHVkZXMobmFtZSkgJiYgIXRoaXMuX3R5cGVzLmluY2x1ZGVzKG5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuX3R5cGVzLnB1c2gobmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFByb21vdGU6IHJlbW92ZSBmcm9tIHR5cGVzIGlmIGl0IHdhcyBwcmV2aW91c2x5IHR5cGUtb25seVxuXHRcdFx0Y29uc3QgdHlwZUlkeCA9IHRoaXMuX3R5cGVzLmluZGV4T2YobmFtZSk7XG5cdFx0XHRpZiAodHlwZUlkeCAhPT0gLTEpIHRoaXMuX3R5cGVzLnNwbGljZSh0eXBlSWR4LCAxKTtcblx0XHRcdGlmICghdGhpcy5fdmFsdWVzLmluY2x1ZGVzKG5hbWUpKSB0aGlzLl92YWx1ZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgcmVuZGVyKGZyb206IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVzID0gWy4uLnRoaXMuX3ZhbHVlc10uc29ydCgpO1xuXHRcdGNvbnN0IHR5cGVzID0gWy4uLnRoaXMuX3R5cGVzXS5zb3J0KCkubWFwKChuKSA9PiBgdHlwZSAke259YCk7XG5cdFx0cmV0dXJuIGBpbXBvcnQgeyAke1suLi52YWx1ZXMsIC4uLnR5cGVzXS5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7ZnJvbX1cIjtgO1xuXHR9XG59XG5cbi8qKlxuICogTW9kZWwgZm9yIGBwcm9qZWN0cy9hcGkvc3JjL21haW4udHNgLlxuICpcbiAqIFN0YXJ0cyB3aXRoIHRoZSBtaW5pbWFsIEhUVFAgKyBZQU1MIGNvbmZpZyBzZXR1cC4gRmVhdHVyZXMgbXV0YXRlIHRoZSBtb2RlbFxuICogYnkgY2FsbGluZyBhZGRTaWRlRWZmZWN0SW1wb3J0IC8gYWRkSW1wb3J0IC8gYWRkQnVpbGRlckNhbGwgLyBhZGRFbnRpdHkgL1xuICogYWRkUmVwb3NpdG9yeS4gZmlsZXMoKSByZW5kZXJzIHdoYXRldmVyIGhhcyBiZWVuIGFjY3VtdWxhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgTWFpblNvdXJjZUZpbGUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuTUFJTl9UUztcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9zaWRlRWZmZWN0SW1wb3J0czogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfZXh0cmFJbXBvcnRzID0gbmV3IE1hcDxzdHJpbmcsIEltcG9ydEdyb3VwPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9idWlsZGVyQ2FsbHM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VudGl0aWVzOiBUeXBlT3JtSW1wb3J0W10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfcmVwb3NpdG9yaWVzOiBUeXBlT3JtSW1wb3J0W10gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHBOYW1lOiBzdHJpbmcpIHt9XG5cblx0LyoqIEFkZHMgYSBiYXJlIHNpZGUtZWZmZWN0IGltcG9ydCwgZS5nLiBgQGRlY29oZXJlL2NvcnRleC9hdXRoYC4gKi9cblx0cHVibGljIGFkZFNpZGVFZmZlY3RJbXBvcnQocGF0aDogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9zaWRlRWZmZWN0SW1wb3J0cy5pbmNsdWRlcyhwYXRoKSkgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMucHVzaChwYXRoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGRzIGEgbmFtZWQgaW1wb3J0LCBlLmcuIGBpbXBvcnQgeyBGb28gfSBmcm9tIFwiYmFyXCJgLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KG5hbWU6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0eXBlT25seSA9IGZhbHNlKTogdGhpcyB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLl9leHRyYUltcG9ydHMuZ2V0KGZyb20pID8/IG5ldyBJbXBvcnRHcm91cCgpO1xuXHRcdGdyb3VwLmFkZChuYW1lLCB0eXBlT25seSk7XG5cdFx0dGhpcy5fZXh0cmFJbXBvcnRzLnNldChmcm9tLCBncm91cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGJ1aWxkZXIgY2FsbCBpbnNlcnRlZCBhZnRlciBgLndpdGhDb25maWd1cmF0aW9uKClgIGFuZCBiZWZvcmVcblx0ICogYC53aXRoU2VydmljZXMoKWAuIFBhc3MgdGhlIGNhbGwgd2l0aG91dCBsZWFkaW5nIGRvdCwgZS5nLiBgLndpdGhBdXRoKClgLlxuXHQgKi9cblx0cHVibGljIGFkZEJ1aWxkZXJDYWxsKGNhbGw6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2J1aWxkZXJDYWxscy5wdXNoKGNhbGwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIGVudGl0eSDigJQgaW1wb3J0IGFuZCBlbnRyeSBpbiBgd2l0aFR5cGVPcm0oeyBlbnRpdGllcyB9KWAuICovXG5cdHB1YmxpYyBhZGRFbnRpdHkoZW50aXR5OiBUeXBlT3JtSW1wb3J0KTogdGhpcyB7XG5cdFx0dGhpcy5fZW50aXRpZXMucHVzaChlbnRpdHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIHJlcG9zaXRvcnkg4oCUIGltcG9ydCBhbmQgZW50cnkgaW4gYHdpdGhUeXBlT3JtKHsgcmVwb3NpdG9yaWVzIH0pYC4gKi9cblx0cHVibGljIGFkZFJlcG9zaXRvcnkocmVwbzogVHlwZU9ybUltcG9ydCk6IHRoaXMge1xuXHRcdHRoaXMuX3JlcG9zaXRvcmllcy5wdXNoKHJlcG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXG5cdFx0XHQnaW1wb3J0IFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI7Jyxcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvY29ydGV4L2h0dHBcIjsnLFxuXHRcdF07XG5cblx0XHRmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IFwiJHtwYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGltcG9ydHMucHVzaChcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvcHJvdG9jb2xcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IFlhbWxEYXRhU291cmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9wcm90b2NvbFwiOycsXG5cdFx0XHQnaW1wb3J0IHsgQnVpbGRlciB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBGYXN0aWZ5UHJvdmlkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleC9wcm92aWRlcnNcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvc2FtcGxlLnNlcnZpY2UuanNcIjsnLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGUgb2YgdGhpcy5fZW50aXRpZXMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IHsgJHtlLmNsYXNzTmFtZX0gfSBmcm9tIFwiJHtlLmltcG9ydFBhdGh9XCI7YCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByIG9mIHRoaXMuX3JlcG9zaXRvcmllcykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgeyAke3IuY2xhc3NOYW1lfSB9IGZyb20gXCIke3IuaW1wb3J0UGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtmcm9tLCBncm91cF0gb2YgdGhpcy5fZXh0cmFJbXBvcnRzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goZ3JvdXAucmVuZGVyKGZyb20pKTtcblx0XHR9XG5cblx0XHRpbXBvcnRzLnB1c2goJ2ltcG9ydCB7IEhlbGxvQ29udHJvbGxlciB9IGZyb20gXCIuL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIuanNcIjsnKTtcblxuXHRcdGNvbnN0IGJ1aWxkZXJDYWxsczogc3RyaW5nW10gPSBbXG5cdFx0XHRgXFx0LndpdGhIdHRwUHJvdmlkZXIoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgXFx0LndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHQuLi50aGlzLl9idWlsZGVyQ2FsbHMubWFwKChjKSA9PiBgXFx0JHtjfWApLFxuXHRcdFx0YFxcdC53aXRoU2VydmljZXMoKGNiKSA9PiB7IGNiLnJlZ2lzdGVyU2luZ2xldG9uKFNhbXBsZVNlcnZpY2UpOyB9KWAsXG5cdFx0XTtcblxuXHRcdGlmICh0aGlzLl9lbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzLm1hcCgoZSkgPT4gZS5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGNvbnN0IHJlcG9zID0gdGhpcy5fcmVwb3NpdG9yaWVzLm1hcCgocikgPT4gci5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRgXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFske2VudGl0aWVzfV0sIHJlcG9zaXRvcmllczogWyR7cmVwb3N9XSB9KWAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJ1aWxkZXJDYWxscy5wdXNoKGBcXHQud2l0aENvbnRyb2xsZXJzKEhlbGxvQ29udHJvbGxlcilgKTtcblxuXHRcdGNvbnN0IGNvbnRlbnQgPSBbXG5cdFx0XHQuLi5pbXBvcnRzLFxuXHRcdFx0XCJcIixcblx0XHRcdFwic2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1wiLFxuXHRcdFx0XCJcIixcblx0XHRcdGBjb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke3RoaXMuYXBwTmFtZX1cIiB9KWAsXG5cdFx0XHQuLi5idWlsZGVyQ2FsbHMsXG5cdFx0XHRgXFx0LmJ1aWxkKCk7YCxcblx0XHRcdFwiXCIsXG5cdFx0XHRcImF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJleHBvcnQgZGVmYXVsdCBhcHA7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdF0uam9pbihcIlxcblwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJNYWluU291cmNlRmlsZSIsIkltcG9ydEdyb3VwIiwiX3ZhbHVlcyIsIl90eXBlcyIsImFkZCIsIm5hbWUiLCJ0eXBlT25seSIsImluY2x1ZGVzIiwicHVzaCIsInR5cGVJZHgiLCJpbmRleE9mIiwic3BsaWNlIiwicmVuZGVyIiwiZnJvbSIsInZhbHVlcyIsInNvcnQiLCJ0eXBlcyIsIm1hcCIsIm4iLCJqb2luIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIk1BSU5fVFMiLCJfc2lkZUVmZmVjdEltcG9ydHMiLCJfZXh0cmFJbXBvcnRzIiwiTWFwIiwiX2J1aWxkZXJDYWxscyIsIl9lbnRpdGllcyIsIl9yZXBvc2l0b3JpZXMiLCJhcHBOYW1lIiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsInBhdGgiLCJhZGRJbXBvcnQiLCJncm91cCIsImdldCIsInNldCIsImFkZEJ1aWxkZXJDYWxsIiwiY2FsbCIsImFkZEVudGl0eSIsImVudGl0eSIsImFkZFJlcG9zaXRvcnkiLCJyZXBvIiwiZmlsZXMiLCJpbXBvcnRzIiwiZSIsImNsYXNzTmFtZSIsImltcG9ydFBhdGgiLCJyIiwiYnVpbGRlckNhbGxzIiwiYyIsImxlbmd0aCIsImVudGl0aWVzIiwicmVwb3MiLCJjb250ZW50IiwiZmlsZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7K0JBdUNhQTs7O2VBQUFBOzs7dUJBdkNvQjtBQUtqQyxpRkFBaUYsR0FDakYsTUFBTUM7SUFDWUMsVUFBb0IsRUFBRSxDQUFDO0lBQ3ZCQyxTQUFtQixFQUFFLENBQUM7SUFFaENDLElBQUlDLElBQVksRUFBRUMsV0FBVyxLQUFLLEVBQVE7UUFDaEQsSUFBSUEsVUFBVTtZQUNi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
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get SampleConfigModel () {
13
- return SampleConfigModel;
14
- },
15
- get SampleServiceModel () {
16
- return SampleServiceModel;
17
- }
18
- });
19
- const SAMPLE_CONFIG_CONTENT = `export class SampleConfig {\n\tpublic greeting: string = "";\n}\n`;
20
- const SAMPLE_SERVICE_CONTENT = [
21
- `import { inject, injectable } from "@decohere/crucible/decorators";`,
22
- `import { ConfigurationServiceToken } from "@decohere/nexus/configuration";`,
23
- `import type { IConfigurationService } from "@decohere/nexus/configuration";`,
24
- `import { SampleConfig } from "../sample.config.js";`,
25
- ``,
26
- `@injectable()`,
27
- `export class SampleService {`,
28
- `\tpublic constructor(`,
29
- `\t\t@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,`,
30
- `\t) {}`,
31
- ``,
32
- `\tpublic async getGreeting(): Promise<string> {`,
33
- `\t\tconst config = await this.config.get(SampleConfig);`,
34
- `\t\treturn config.greeting;`,
35
- `\t}`,
36
- `}`,
37
- ``
38
- ].join("\n");
39
- class SampleConfigModel {
40
- files() {
41
- return [
42
- {
43
- filePath: "src/sample.config.ts",
44
- content: SAMPLE_CONFIG_CONTENT
45
- }
46
- ];
47
- }
48
- }
49
- class SampleServiceModel {
50
- files() {
51
- return [
52
- {
53
- filePath: "src/services/sample.service.ts",
54
- content: SAMPLE_SERVICE_CONTENT
55
- }
56
- ];
57
- }
58
- }
59
-
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTb3VyY2VGaWxlLCBTb3VyY2VGaWxlUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmNvbnN0IFNBTVBMRV9DT05GSUdfQ09OVEVOVCA9IGBleHBvcnQgY2xhc3MgU2FtcGxlQ29uZmlnIHtcXG5cXHRwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZyA9IFwiXCI7XFxufVxcbmA7XG5cbmNvbnN0IFNBTVBMRV9TRVJWSUNFX0NPTlRFTlQgPSBbXG5cdGBpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtgLFxuXHRgaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2VUb2tlbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO2AsXG5cdGBpbXBvcnQgdHlwZSB7IElDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO2AsXG5cdGBpbXBvcnQgeyBTYW1wbGVDb25maWcgfSBmcm9tIFwiLi4vc2FtcGxlLmNvbmZpZy5qc1wiO2AsXG5cdGBgLFxuXHRgQGluamVjdGFibGUoKWAsXG5cdGBleHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZSB7YCxcblx0YFxcdHB1YmxpYyBjb25zdHJ1Y3RvcihgLFxuXHRgXFx0XFx0QGluamVjdChDb25maWd1cmF0aW9uU2VydmljZVRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogSUNvbmZpZ3VyYXRpb25TZXJ2aWNlLGAsXG5cdGBcXHQpIHt9YCxcblx0YGAsXG5cdGBcXHRwdWJsaWMgYXN5bmMgZ2V0R3JlZXRpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtgLFxuXHRgXFx0XFx0Y29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0KFNhbXBsZUNvbmZpZyk7YCxcblx0YFxcdFxcdHJldHVybiBjb25maWcuZ3JlZXRpbmc7YCxcblx0YFxcdH1gLFxuXHRgfWAsXG5cdGBgLFxuXS5qb2luKFwiXFxuXCIpO1xuXG5leHBvcnQgY2xhc3MgU2FtcGxlQ29uZmlnTW9kZWwgaW1wbGVtZW50cyBTb3VyY2VGaWxlUHJvdmlkZXIge1xuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJzcmMvc2FtcGxlLmNvbmZpZy50c1wiLFxuXHRcdFx0XHRjb250ZW50OiBTQU1QTEVfQ09ORklHX0NPTlRFTlQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFNhbXBsZVNlcnZpY2VNb2RlbCBpbXBsZW1lbnRzIFNvdXJjZUZpbGVQcm92aWRlciB7XG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9zZXJ2aWNlcy9zYW1wbGUuc2VydmljZS50c1wiLFxuXHRcdFx0XHRjb250ZW50OiBTQU1QTEVfU0VSVklDRV9DT05URU5ULFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiU2FtcGxlQ29uZmlnTW9kZWwiLCJTYW1wbGVTZXJ2aWNlTW9kZWwiLCJTQU1QTEVfQ09ORklHX0NPTlRFTlQiLCJTQU1QTEVfU0VSVklDRV9DT05URU5UIiwiam9pbiIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQXdCYUE7ZUFBQUE7O1FBV0FDO2VBQUFBOzs7QUFqQ2IsTUFBTUMsd0JBQXdCLENBQUMsaUVBQWlFLENBQUM7QUFFakcsTUFBTUMseUJBQXlCO0lBQzlCLENBQUMsbUVBQW1FLENBQUM7SUFDckUsQ0FBQywwRUFBMEUsQ0FBQztJQUM1RSxDQUFDLDJFQUEyRSxDQUFDO0lBQzdFLENBQUMsbURBQW1ELENBQUM7SUFDckQsRUFBRTtJQUNGLENBQUMsYUFBYSxDQUFDO0lBQ2YsQ0FBQyw0QkFBNEIsQ0FBQztJQUM5QixDQUFDLHFCQUFxQixDQUFDO0lBQ3ZCLENBQUMsc0ZBQXNGLENBQUM7SUFDeEYsQ0FBQyxNQUFNLENBQUM7SUFDUixFQUFFO0lBQ0YsQ0FBQywrQ0FBK0MsQ0FBQztJQUNqRCxDQUFDLHVEQUF1RCxDQUFDO0lBQ3pELENBQUMsMkJBQTJCLENBQUM7SUFDN0IsQ0FBQyxHQUFHLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUU7Q0FDRixDQUFDQyxJQUFJLENBQUM7QUFFQSxNQUFNSjtJQUNMSyxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVNMO1lBQ1Y7U0FDQTtJQUNGO0FBQ0Q7QUFFTyxNQUFNRDtJQUNMSSxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVNKO1lBQ1Y7U0FDQTtJQUNGO0FBQ0QifQ==
@@ -1,37 +0,0 @@
1
- import { createInterface } from "node:readline";
2
- // readline/promises rl.question() has a race condition with piped (non-TTY) stdin
3
- // in Node ≥ 22: after the first line is read, stdin emits 'end', readline closes,
4
- // and all subsequent question() calls resolve to "".
5
- // Fix: use the async-iterator API, which buffers all lines before the close event fires.
6
- let _lines = null;
7
- function getLines() {
8
- if (_lines == null) {
9
- const rl = createInterface({
10
- input: process.stdin,
11
- terminal: false
12
- });
13
- _lines = rl[Symbol.asyncIterator]();
14
- }
15
- return _lines;
16
- }
17
- async function readLine(prompt) {
18
- process.stdout.write(prompt);
19
- const { value, done } = await getLines().next();
20
- return done ? "" : value.trim();
21
- }
22
- export async function ask(question, fallback = "") {
23
- const answer = await readLine(question);
24
- return answer || fallback;
25
- }
26
- export async function pick(label, items, display) {
27
- console.log(label.trimEnd());
28
- for (const [i, item] of items.entries()){
29
- console.log(` ${i + 1}. ${display(item)}`);
30
- }
31
- const answer = await readLine(" > ");
32
- const idx = Number.parseInt(answer, 10);
33
- if (Number.isNaN(idx) || idx < 1 || idx > items.length) return null;
34
- return items[idx - 1];
35
- }
36
-
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvZG9tYWluL3Byb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVJbnRlcmZhY2UgfSBmcm9tIFwibm9kZTpyZWFkbGluZVwiO1xuXG4vLyByZWFkbGluZS9wcm9taXNlcyBybC5xdWVzdGlvbigpIGhhcyBhIHJhY2UgY29uZGl0aW9uIHdpdGggcGlwZWQgKG5vbi1UVFkpIHN0ZGluXG4vLyBpbiBOb2RlIOKJpSAyMjogYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgaXMgcmVhZCwgc3RkaW4gZW1pdHMgJ2VuZCcsIHJlYWRsaW5lIGNsb3Nlcyxcbi8vIGFuZCBhbGwgc3Vic2VxdWVudCBxdWVzdGlvbigpIGNhbGxzIHJlc29sdmUgdG8gXCJcIi5cbi8vIEZpeDogdXNlIHRoZSBhc3luYy1pdGVyYXRvciBBUEksIHdoaWNoIGJ1ZmZlcnMgYWxsIGxpbmVzIGJlZm9yZSB0aGUgY2xvc2UgZXZlbnQgZmlyZXMuXG5cbmxldCBfbGluZXM6IEFzeW5jSXRlcmF0b3I8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRMaW5lcygpOiBBc3luY0l0ZXJhdG9yPHN0cmluZz4ge1xuXHRpZiAoX2xpbmVzID09IG51bGwpIHtcblx0XHRjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCB0ZXJtaW5hbDogZmFsc2UgfSk7XG5cdFx0X2xpbmVzID0gcmxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cdH1cblx0cmV0dXJuIF9saW5lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZExpbmUocHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShwcm9tcHQpO1xuXHRjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBnZXRMaW5lcygpLm5leHQoKTtcblx0cmV0dXJuIGRvbmUgPyBcIlwiIDogdmFsdWUudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcsIGZhbGxiYWNrID0gXCJcIik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IHJlYWRMaW5lKHF1ZXN0aW9uKTtcblx0cmV0dXJuIGFuc3dlciB8fCBmYWxsYmFjaztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBpY2s8VD4oXG5cdGxhYmVsOiBzdHJpbmcsXG5cdGl0ZW1zOiBUW10sXG5cdGRpc3BsYXk6IChpdGVtOiBUKSA9PiBzdHJpbmcsXG4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG5cdGNvbnNvbGUubG9nKGxhYmVsLnRyaW1FbmQoKSk7XG5cdGZvciAoY29uc3QgW2ksIGl0ZW1dIG9mIGl0ZW1zLmVudHJpZXMoKSkge1xuXHRcdGNvbnNvbGUubG9nKGAgICAgJHtpICsgMX0uICR7ZGlzcGxheShpdGVtKX1gKTtcblx0fVxuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCByZWFkTGluZShcIiAgPiBcIik7XG5cdGNvbnN0IGlkeCA9IE51bWJlci5wYXJzZUludChhbnN3ZXIsIDEwKTtcblx0aWYgKE51bWJlci5pc05hTihpZHgpIHx8IGlkeCA8IDEgfHwgaWR4ID4gaXRlbXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIGl0ZW1zW2lkeCAtIDFdO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUludGVyZmFjZSIsIl9saW5lcyIsImdldExpbmVzIiwicmwiLCJpbnB1dCIsInByb2Nlc3MiLCJzdGRpbiIsInRlcm1pbmFsIiwiU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInJlYWRMaW5lIiwicHJvbXB0Iiwic3Rkb3V0Iiwid3JpdGUiLCJ2YWx1ZSIsImRvbmUiLCJuZXh0IiwidHJpbSIsImFzayIsInF1ZXN0aW9uIiwiZmFsbGJhY2siLCJhbnN3ZXIiLCJwaWNrIiwibGFiZWwiLCJpdGVtcyIsImRpc3BsYXkiLCJjb25zb2xlIiwibG9nIiwidHJpbUVuZCIsImkiLCJpdGVtIiwiZW50cmllcyIsImlkeCIsIk51bWJlciIsInBhcnNlSW50IiwiaXNOYU4iLCJsZW5ndGgiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsUUFBUSxnQkFBZ0I7QUFFaEQsa0ZBQWtGO0FBQ2xGLGtGQUFrRjtBQUNsRixxREFBcUQ7QUFDckQseUZBQXlGO0FBRXpGLElBQUlDLFNBQXVDO0FBRTNDLFNBQVNDO0lBQ1IsSUFBSUQsVUFBVSxNQUFNO1FBQ25CLE1BQU1FLEtBQUtILGdCQUFnQjtZQUFFSSxPQUFPQyxRQUFRQyxLQUFLO1lBQUVDLFVBQVU7UUFBTTtRQUNuRU4sU0FBU0UsRUFBRSxDQUFDSyxPQUFPQyxhQUFhLENBQUM7SUFDbEM7SUFDQSxPQUFPUjtBQUNSO0FBRUEsZUFBZVMsU0FBU0MsTUFBYztJQUNyQ04sUUFBUU8sTUFBTSxDQUFDQyxLQUFLLENBQUNGO0lBQ3JCLE1BQU0sRUFBRUcsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBRyxNQUFNYixXQUFXYyxJQUFJO0lBQzdDLE9BQU9ELE9BQU8sS0FBS0QsTUFBTUcsSUFBSTtBQUM5QjtBQUVBLE9BQU8sZUFBZUMsSUFBSUMsUUFBZ0IsRUFBRUMsV0FBVyxFQUFFO0lBQ3hELE1BQU1DLFNBQVMsTUFBTVgsU0FBU1M7SUFDOUIsT0FBT0UsVUFBVUQ7QUFDbEI7QUFFQSxPQUFPLGVBQWVFLEtBQ3JCQyxLQUFhLEVBQ2JDLEtBQVUsRUFDVkMsT0FBNEI7SUFFNUJDLFFBQVFDLEdBQUcsQ0FBQ0osTUFBTUssT0FBTztJQUN6QixLQUFLLE1BQU0sQ0FBQ0MsR0FBR0MsS0FBSyxJQUFJTixNQUFNTyxPQUFPLEdBQUk7UUFDeENMLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRUUsSUFBSSxFQUFFLEVBQUUsRUFBRUosUUFBUUssT0FBTztJQUM3QztJQUNBLE1BQU1ULFNBQVMsTUFBTVgsU0FBUztJQUM5QixNQUFNc0IsTUFBTUMsT0FBT0MsUUFBUSxDQUFDYixRQUFRO0lBQ3BDLElBQUlZLE9BQU9FLEtBQUssQ0FBQ0gsUUFBUUEsTUFBTSxLQUFLQSxNQUFNUixNQUFNWSxNQUFNLEVBQUUsT0FBTztJQUMvRCxPQUFPWixLQUFLLENBQUNRLE1BQU0sRUFBRTtBQUN0QiJ9
@@ -1,77 +0,0 @@
1
- import { WELL_KNOWN_FILES } from "./const.js";
2
- /**
3
- * Live builder for `docker-compose.yml`.
4
- *
5
- * Features call `addService` / `addVolume` in their `configure` phases.
6
- * The devcontainer `render` phase calls `render()` and writes the file.
7
- */ export class DockerCompose {
8
- key = WELL_KNOWN_FILES.DOCKER_COMPOSE;
9
- _services = new Map();
10
- _volumes = new Set();
11
- addService(name, config) {
12
- this._services.set(name, config);
13
- return this;
14
- }
15
- files() {
16
- return [
17
- {
18
- filePath: ".devcontainer/docker-compose.yml",
19
- content: this.getContent()
20
- }
21
- ];
22
- }
23
- addVolume(name) {
24
- this._volumes.add(name);
25
- return this;
26
- }
27
- /** Append an env_file path to an existing service. */ addEnvFile(serviceName, filePath) {
28
- const svc = this._services.get(serviceName);
29
- if (svc) svc.env_file = [
30
- ...svc.env_file ?? [],
31
- filePath
32
- ];
33
- return this;
34
- }
35
- getContent() {
36
- const lines = [
37
- "services:"
38
- ];
39
- for (const [name, svc] of this._services){
40
- lines.push(` ${name}:`);
41
- if (svc.build) lines.push(` build: ${svc.build}`);
42
- if (svc.image) lines.push(` image: ${svc.image}`);
43
- if (svc.command) lines.push(` command: ${svc.command}`);
44
- if (svc.restart) lines.push(` restart: ${svc.restart}`);
45
- if (svc.env_file && svc.env_file.length > 0) {
46
- lines.push(" env_file:");
47
- for (const f of svc.env_file)lines.push(` - ${f}`);
48
- }
49
- if (svc.environment && Object.keys(svc.environment).length > 0) {
50
- lines.push(" environment:");
51
- for (const [k, v] of Object.entries(svc.environment)){
52
- lines.push(` ${k}: ${v}`);
53
- }
54
- }
55
- if (svc.ports && svc.ports.length > 0) {
56
- lines.push(" ports:");
57
- for (const p of svc.ports)lines.push(` - "${p}"`);
58
- }
59
- if (svc.volumes && svc.volumes.length > 0) {
60
- lines.push(" volumes:");
61
- for (const v of svc.volumes)lines.push(` - ${v}`);
62
- }
63
- if (svc.depends_on && svc.depends_on.length > 0) {
64
- lines.push(" depends_on:");
65
- for (const d of svc.depends_on)lines.push(` - ${d}`);
66
- }
67
- }
68
- if (this._volumes.size > 0) {
69
- lines.push("");
70
- lines.push("volumes:");
71
- for (const v of this._volumes)lines.push(` ${v}:`);
72
- }
73
- return `${lines.join("\n")}\n`;
74
- }
75
- }
76
-
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbXBvc2UubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2VTZXJ2aWNlIHtcblx0YnVpbGQ/OiBzdHJpbmc7XG5cdGltYWdlPzogc3RyaW5nO1xuXHRlbnZfZmlsZT86IHN0cmluZ1tdO1xuXHRlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHBvcnRzPzogc3RyaW5nW107XG5cdHZvbHVtZXM/OiBzdHJpbmdbXTtcblx0Y29tbWFuZD86IHN0cmluZztcblx0cmVzdGFydD86IHN0cmluZztcblx0ZGVwZW5kc19vbj86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIExpdmUgYnVpbGRlciBmb3IgYGRvY2tlci1jb21wb3NlLnltbGAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBgYWRkU2VydmljZWAgLyBgYWRkVm9sdW1lYCBpbiB0aGVpciBgY29uZmlndXJlYCBwaGFzZXMuXG4gKiBUaGUgZGV2Y29udGFpbmVyIGByZW5kZXJgIHBoYXNlIGNhbGxzIGByZW5kZXIoKWAgYW5kIHdyaXRlcyB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY2tlckNvbXBvc2UgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuRE9DS0VSX0NPTVBPU0U7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3NlcnZpY2VzOiBNYXA8c3RyaW5nLCBDb21wb3NlU2VydmljZT4gPSBuZXcgTWFwKCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZvbHVtZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHB1YmxpYyBhZGRTZXJ2aWNlKG5hbWU6IHN0cmluZywgY29uZmlnOiBDb21wb3NlU2VydmljZSk6IHRoaXMge1xuXHRcdHRoaXMuX3NlcnZpY2VzLnNldChuYW1lLCBjb25maWcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvZG9ja2VyLWNvbXBvc2UueW1sXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG5cblx0cHVibGljIGFkZFZvbHVtZShuYW1lOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl92b2x1bWVzLmFkZChuYW1lKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBcHBlbmQgYW4gZW52X2ZpbGUgcGF0aCB0byBhbiBleGlzdGluZyBzZXJ2aWNlLiAqL1xuXHRwdWJsaWMgYWRkRW52RmlsZShzZXJ2aWNlTmFtZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogdGhpcyB7XG5cdFx0Y29uc3Qgc3ZjID0gdGhpcy5fc2VydmljZXMuZ2V0KHNlcnZpY2VOYW1lKTtcblx0XHRpZiAoc3ZjKSBzdmMuZW52X2ZpbGUgPSBbLi4uKHN2Yy5lbnZfZmlsZSA/PyBbXSksIGZpbGVQYXRoXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1wic2VydmljZXM6XCJdO1xuXG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgc3ZjXSBvZiB0aGlzLl9zZXJ2aWNlcykge1xuXHRcdFx0bGluZXMucHVzaChgICAke25hbWV9OmApO1xuXHRcdFx0aWYgKHN2Yy5idWlsZCkgbGluZXMucHVzaChgICAgIGJ1aWxkOiAke3N2Yy5idWlsZH1gKTtcblx0XHRcdGlmIChzdmMuaW1hZ2UpIGxpbmVzLnB1c2goYCAgICBpbWFnZTogJHtzdmMuaW1hZ2V9YCk7XG5cdFx0XHRpZiAoc3ZjLmNvbW1hbmQpIGxpbmVzLnB1c2goYCAgICBjb21tYW5kOiAke3N2Yy5jb21tYW5kfWApO1xuXHRcdFx0aWYgKHN2Yy5yZXN0YXJ0KSBsaW5lcy5wdXNoKGAgICAgcmVzdGFydDogJHtzdmMucmVzdGFydH1gKTtcblxuXHRcdFx0aWYgKHN2Yy5lbnZfZmlsZSAmJiBzdmMuZW52X2ZpbGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIGVudl9maWxlOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBmIG9mIHN2Yy5lbnZfZmlsZSkgbGluZXMucHVzaChgICAgICAgLSAke2Z9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZW52aXJvbm1lbnQgJiYgT2JqZWN0LmtleXMoc3ZjLmVudmlyb25tZW50KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZW52aXJvbm1lbnQ6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdmMuZW52aXJvbm1lbnQpKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgICAgICAgJHtrfTogJHt2fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMucG9ydHMgJiYgc3ZjLnBvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBwb3J0czpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgcCBvZiBzdmMucG9ydHMpIGxpbmVzLnB1c2goYCAgICAgIC0gXCIke3B9XCJgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy52b2x1bWVzICYmIHN2Yy52b2x1bWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICB2b2x1bWVzOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIHN2Yy52b2x1bWVzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7dn1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5kZXBlbmRzX29uICYmIHN2Yy5kZXBlbmRzX29uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBkZXBlbmRzX29uOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBkIG9mIHN2Yy5kZXBlbmRzX29uKSBsaW5lcy5wdXNoKGAgICAgICAtICR7ZH1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fdm9sdW1lcy5zaXplID4gMCkge1xuXHRcdFx0bGluZXMucHVzaChcIlwiKTtcblx0XHRcdGxpbmVzLnB1c2goXCJ2b2x1bWVzOlwiKTtcblx0XHRcdGZvciAoY29uc3QgdiBvZiB0aGlzLl92b2x1bWVzKSBsaW5lcy5wdXNoKGAgICR7dn06YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuYDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJEb2NrZXJDb21wb3NlIiwia2V5IiwiRE9DS0VSX0NPTVBPU0UiLCJfc2VydmljZXMiLCJNYXAiLCJfdm9sdW1lcyIsIlNldCIsImFkZFNlcnZpY2UiLCJuYW1lIiwiY29uZmlnIiwic2V0IiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiYWRkVm9sdW1lIiwiYWRkIiwiYWRkRW52RmlsZSIsInNlcnZpY2VOYW1lIiwic3ZjIiwiZ2V0IiwiZW52X2ZpbGUiLCJsaW5lcyIsInB1c2giLCJidWlsZCIsImltYWdlIiwiY29tbWFuZCIsInJlc3RhcnQiLCJsZW5ndGgiLCJmIiwiZW52aXJvbm1lbnQiLCJPYmplY3QiLCJrZXlzIiwiayIsInYiLCJlbnRyaWVzIiwicG9ydHMiLCJwIiwidm9sdW1lcyIsImRlcGVuZHNfb24iLCJkIiwic2l6ZSIsImpvaW4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGdC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
@@ -1,30 +0,0 @@
1
- /**
2
- * Builder for a YAML config file (e.g. config/config.yaml or config/config.dev.yaml).
3
- *
4
- * Starts with a base section passed to the constructor. Features call
5
- * `addSection(yaml)` during their scaffold phase to append their own block.
6
- * `files()` joins all sections with a blank line separator.
7
- */ export class ConfigYaml {
8
- key;
9
- filePath;
10
- _sections = [];
11
- constructor(key, filePath, baseContent){
12
- this.key = key;
13
- this.filePath = filePath;
14
- this._sections.push(baseContent);
15
- }
16
- addSection(yaml) {
17
- this._sections.push(yaml);
18
- return this;
19
- }
20
- files() {
21
- return [
22
- {
23
- filePath: this.filePath,
24
- content: this._sections.join("\n")
25
- }
26
- ];
27
- }
28
- }
29
-
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgYSBZQU1MIGNvbmZpZyBmaWxlIChlLmcuIGNvbmZpZy9jb25maWcueWFtbCBvciBjb25maWcvY29uZmlnLmRldi55YW1sKS5cbiAqXG4gKiBTdGFydHMgd2l0aCBhIGJhc2Ugc2VjdGlvbiBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBGZWF0dXJlcyBjYWxsXG4gKiBgYWRkU2VjdGlvbih5YW1sKWAgZHVyaW5nIHRoZWlyIHNjYWZmb2xkIHBoYXNlIHRvIGFwcGVuZCB0aGVpciBvd24gYmxvY2suXG4gKiBgZmlsZXMoKWAgam9pbnMgYWxsIHNlY3Rpb25zIHdpdGggYSBibGFuayBsaW5lIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZ1lhbWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHJpdmF0ZSByZWFkb25seSBfc2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHB1YmxpYyByZWFkb25seSBrZXk6IHN0cmluZyxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmcsXG5cdFx0YmFzZUNvbnRlbnQ6IHN0cmluZyxcblx0KSB7XG5cdFx0dGhpcy5fc2VjdGlvbnMucHVzaChiYXNlQ29udGVudCk7XG5cdH1cblxuXHRwdWJsaWMgYWRkU2VjdGlvbih5YW1sOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9zZWN0aW9ucy5wdXNoKHlhbWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFt7IGZpbGVQYXRoOiB0aGlzLmZpbGVQYXRoLCBjb250ZW50OiB0aGlzLl9zZWN0aW9ucy5qb2luKFwiXFxuXCIpIH1dO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQ29uZmlnWWFtbCIsIl9zZWN0aW9ucyIsImtleSIsImZpbGVQYXRoIiwiYmFzZUNvbnRlbnQiLCJwdXNoIiwiYWRkU2VjdGlvbiIsInlhbWwiLCJmaWxlcyIsImNvbnRlbnQiLCJqb2luIl0sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1BOzs7SUFDS0MsWUFBc0IsRUFBRSxDQUFDO0lBRTFDLFlBQ0MsQUFBZ0JDLEdBQVcsRUFDM0IsQUFBaUJDLFFBQWdCLEVBQ2pDQyxXQUFtQixDQUNsQjthQUhlRixNQUFBQTthQUNDQyxXQUFBQTtRQUdqQixJQUFJLENBQUNGLFNBQVMsQ0FBQ0ksSUFBSSxDQUFDRDtJQUNyQjtJQUVPRSxXQUFXQyxJQUFZLEVBQVE7UUFDckMsSUFBSSxDQUFDTixTQUFTLENBQUNJLElBQUksQ0FBQ0U7UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsUUFBc0I7UUFDNUIsT0FBTztZQUFDO2dCQUFFTCxVQUFVLElBQUksQ0FBQ0EsUUFBUTtnQkFBRU0sU0FBUyxJQUFJLENBQUNSLFNBQVMsQ0FBQ1MsSUFBSSxDQUFDO1lBQU07U0FBRTtJQUN6RTtBQUNEIn0=
@@ -1,19 +0,0 @@
1
- export const WELL_KNOWN_FILES = {
2
- VSCODE_SETTINGS: "VSCODE_SETTINGS",
3
- LAUNCH_JSON: "LAUNCH_JSON",
4
- DOCKER_COMPOSE: "DOCKER_COMPOSE",
5
- DEVCONTAINER_JSON: "DEVCONTAINER_JSON",
6
- DOCKERFILE: "DOCKERFILE",
7
- PACKAGE_JSON: "PACKAGE_JSON",
8
- API_PACKAGE_JSON: "API_PACKAGE_JSON",
9
- TSCONFIG: "TSCONFIG",
10
- MAIN_TS: "MAIN_TS",
11
- CONTROLLER_TS: "CONTROLLER_TS",
12
- CONFIG_YAML: "CONFIG_YAML",
13
- CONFIG_DEV_YAML: "CONFIG_DEV_YAML",
14
- GITIGNORE: "GITIGNORE",
15
- AUTH_CONFIG: "AUTH_CONFIG",
16
- ENV_FILE: "ENV_FILE"
17
- };
18
-
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbnN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBXRUxMX0tOT1dOX0ZJTEVTID0ge1xuXHRWU0NPREVfU0VUVElOR1M6IFwiVlNDT0RFX1NFVFRJTkdTXCIsXG5cdExBVU5DSF9KU09OOiBcIkxBVU5DSF9KU09OXCIsXG5cdERPQ0tFUl9DT01QT1NFOiBcIkRPQ0tFUl9DT01QT1NFXCIsXG5cdERFVkNPTlRBSU5FUl9KU09OOiBcIkRFVkNPTlRBSU5FUl9KU09OXCIsXG5cdERPQ0tFUkZJTEU6IFwiRE9DS0VSRklMRVwiLFxuXHRQQUNLQUdFX0pTT046IFwiUEFDS0FHRV9KU09OXCIsXG5cdEFQSV9QQUNLQUdFX0pTT046IFwiQVBJX1BBQ0tBR0VfSlNPTlwiLFxuXHRUU0NPTkZJRzogXCJUU0NPTkZJR1wiLFxuXHRNQUlOX1RTOiBcIk1BSU5fVFNcIixcblx0Q09OVFJPTExFUl9UUzogXCJDT05UUk9MTEVSX1RTXCIsXG5cdENPTkZJR19ZQU1MOiBcIkNPTkZJR19ZQU1MXCIsXG5cdENPTkZJR19ERVZfWUFNTDogXCJDT05GSUdfREVWX1lBTUxcIixcblx0R0lUSUdOT1JFOiBcIkdJVElHTk9SRVwiLFxuXHRBVVRIX0NPTkZJRzogXCJBVVRIX0NPTkZJR1wiLFxuXHRFTlZfRklMRTogXCJFTlZfRklMRVwiLFxufTtcbiJdLCJuYW1lcyI6WyJXRUxMX0tOT1dOX0ZJTEVTIiwiVlNDT0RFX1NFVFRJTkdTIiwiTEFVTkNIX0pTT04iLCJET0NLRVJfQ09NUE9TRSIsIkRFVkNPTlRBSU5FUl9KU09OIiwiRE9DS0VSRklMRSIsIlBBQ0tBR0VfSlNPTiIsIkFQSV9QQUNLQUdFX0pTT04iLCJUU0NPTkZJRyIsIk1BSU5fVFMiLCJDT05UUk9MTEVSX1RTIiwiQ09ORklHX1lBTUwiLCJDT05GSUdfREVWX1lBTUwiLCJHSVRJR05PUkUiLCJBVVRIX0NPTkZJRyIsIkVOVl9GSUxFIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLG1CQUFtQjtJQUMvQkMsaUJBQWlCO0lBQ2pCQyxhQUFhO0lBQ2JDLGdCQUFnQjtJQUNoQkMsbUJBQW1CO0lBQ25CQyxZQUFZO0lBQ1pDLGNBQWM7SUFDZEMsa0JBQWtCO0lBQ2xCQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsZUFBZTtJQUNmQyxhQUFhO0lBQ2JDLGlCQUFpQjtJQUNqQkMsV0FBVztJQUNYQyxhQUFhO0lBQ2JDLFVBQVU7QUFDWCxFQUFFIn0=
@@ -1,84 +0,0 @@
1
- import { WELL_KNOWN_FILES } from "./const.js";
2
- // Everything before the final USER instruction. Features insert RUN steps here.
3
- const DOCKERFILE_BASE = `FROM node:24
4
-
5
- ARG USERNAME=node
6
-
7
- # System tools: jq + ripgrep for scripting/search, python3 for AI tooling,
8
- # gh for GitHub workflows, curl/gnupg for package sources.
9
- RUN apt-get update \\
10
- && apt-get install -y --no-install-recommends ca-certificates curl gnupg jq ripgrep python3 \\
11
- && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg -o /usr/share/keyrings/githubcli-archive-keyring.gpg \\
12
- && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \\
13
- && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list \\
14
- && apt-get update \\
15
- && apt-get install -y --no-install-recommends gh \\
16
- && rm -rf /var/lib/apt/lists/*
17
-
18
- RUN npm install --global npm@latest \\
19
- && npm add --global pnpm@10
20
-
21
- RUN mkdir -p /home/\${USERNAME}/.config/pnpm /home/\${USERNAME}/.pnpm-store \\
22
- && chown -R \${USERNAME}:\${USERNAME} /home/\${USERNAME}/.config /home/\${USERNAME}/.pnpm-store \\
23
- && printf "store-dir=/home/\${USERNAME}/.pnpm-store\\n" > /home/\${USERNAME}/.config/pnpm/rc
24
-
25
- # Pre-create workspace node_modules so the named volume mount is owned by the user
26
- RUN mkdir -p /workspace/node_modules && chown \${USERNAME}:\${USERNAME} /workspace/node_modules
27
-
28
- RUN mkdir /commandhistory && touch /commandhistory/.bash_history \\
29
- && chown -R \${USERNAME} /commandhistory
30
-
31
- RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \\
32
- && echo "$SNIPPET" >> "/home/\${USERNAME}/.bashrc"
33
-
34
- # VS Code js-debug bug: bootloader.js in workspaceStorage is only created when
35
- # the user manually toggles Auto Attach settings. On a fresh container it is
36
- # missing, which crashes every Node command. Fix: if the injected path is
37
- # missing, substitute the stable bootloader from the VS Code server extension
38
- # directory (always present once the server is installed).
39
- RUN cat <<'EOF' >> "/home/\${USERNAME}/.bashrc"
40
- if [[ -n "\${NODE_OPTIONS:-}" && "\${NODE_OPTIONS}" == *"bootloader.js"* ]]; then
41
- _bootloader_path="$(printf '%s\\n' "$NODE_OPTIONS" | sed -n 's/.*--require[= ]\\([^[:space:]]*bootloader\\.js\\).*/\\1/p')"
42
- if [[ -n "\${_bootloader_path}" && ! -f "\${_bootloader_path}" ]]; then
43
- _stable_bootloader="$(find /vscode/vscode-server /home/node/.vscode-server/extensions -name "bootloader.js" -path "*/ms-vscode.js-debug/*" 2>/dev/null | head -1)"
44
- if [[ -n "\${_stable_bootloader}" ]]; then
45
- NODE_OPTIONS="\${NODE_OPTIONS//\${_bootloader_path}/\${_stable_bootloader}}"
46
- else
47
- NODE_OPTIONS="$(printf '%s\\n' "$NODE_OPTIONS" | sed -E 's#(^| )--require(=| )[[:graph:]]*bootloader\\.js( |$)# #g; s# +# #g; s#^ ##; s# $##')"
48
- unset VSCODE_INSPECTOR_OPTIONS
49
- fi
50
- export NODE_OPTIONS
51
- if [[ -z "$NODE_OPTIONS" ]]; then
52
- unset NODE_OPTIONS
53
- fi
54
- fi
55
- unset _bootloader_path _stable_bootloader
56
- fi
57
- EOF
58
- `;
59
- const DOCKERFILE_USER = `\nUSER \${USERNAME}\n`;
60
- /**
61
- * Builder for `.devcontainer/Dockerfile`.
62
- *
63
- * Features call `addRunStep(cmd)` during their scaffold phase to append
64
- * additional `RUN` instructions before the final `USER` instruction.
65
- * `files()` assembles the complete Dockerfile content at render time.
66
- */ export class DockerfileModel {
67
- key = WELL_KNOWN_FILES.DOCKERFILE;
68
- _runSteps = [];
69
- /** Append a RUN instruction (pass the command, not the RUN keyword). */ addRunStep(cmd) {
70
- this._runSteps.push(cmd);
71
- return this;
72
- }
73
- files() {
74
- const extras = this._runSteps.length > 0 ? `\n${this._runSteps.map((s)=>`RUN ${s}`).join("\n\n")}\n` : "";
75
- return [
76
- {
77
- filePath: ".devcontainer/Dockerfile",
78
- content: DOCKERFILE_BASE + extras + DOCKERFILE_USER
79
- }
80
- ];
81
- }
82
- }
83
-
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbnRhaW5lci1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8vIEV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBmaW5hbCBVU0VSIGluc3RydWN0aW9uLiBGZWF0dXJlcyBpbnNlcnQgUlVOIHN0ZXBzIGhlcmUuXG5jb25zdCBET0NLRVJGSUxFX0JBU0UgPSBgRlJPTSBub2RlOjI0XG5cbkFSRyBVU0VSTkFNRT1ub2RlXG5cbiMgU3lzdGVtIHRvb2xzOiBqcSArIHJpcGdyZXAgZm9yIHNjcmlwdGluZy9zZWFyY2gsIHB5dGhvbjMgZm9yIEFJIHRvb2xpbmcsXG4jIGdoIGZvciBHaXRIdWIgd29ya2Zsb3dzLCBjdXJsL2dudXBnIGZvciBwYWNrYWdlIHNvdXJjZXMuXG5SVU4gYXB0LWdldCB1cGRhdGUgXFxcXFxuICAgICYmIGFwdC1nZXQgaW5zdGFsbCAteSAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBnbnVwZyBqcSByaXBncmVwIHB5dGhvbjMgXFxcXFxuICAgICYmIGN1cmwgLWZzU0wgaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9wYWNrYWdlcy9naXRodWJjbGktYXJjaGl2ZS1rZXlyaW5nLmdwZyAtbyAvdXNyL3NoYXJlL2tleXJpbmdzL2dpdGh1YmNsaS1hcmNoaXZlLWtleXJpbmcuZ3BnIFxcXFxcbiAgICAmJiBjaG1vZCBnbytyIC91c3Ivc2hhcmUva2V5cmluZ3MvZ2l0aHViY2xpLWFyY2hpdmUta2V5cmluZy5ncGcgXFxcXFxuICAgICYmIGVjaG8gXCJkZWIgW2FyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKSBzaWduZWQtYnk9L3Vzci9zaGFyZS9rZXlyaW5ncy9naXRodWJjbGktYXJjaGl2ZS1rZXlyaW5nLmdwZ10gaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9wYWNrYWdlcyBzdGFibGUgbWFpblwiID4gL2V0Yy9hcHQvc291cmNlcy5saXN0LmQvZ2l0aHViLWNsaS5saXN0IFxcXFxcbiAgICAmJiBhcHQtZ2V0IHVwZGF0ZSBcXFxcXG4gICAgJiYgYXB0LWdldCBpbnN0YWxsIC15IC0tbm8taW5zdGFsbC1yZWNvbW1lbmRzIGdoIFxcXFxcbiAgICAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLypcblxuUlVOIG5wbSBpbnN0YWxsIC0tZ2xvYmFsIG5wbUBsYXRlc3QgXFxcXFxuICAgICYmIG5wbSBhZGQgLS1nbG9iYWwgcG5wbUAxMFxuXG5SVU4gbWtkaXIgLXAgL2hvbWUvXFwke1VTRVJOQU1FfS8uY29uZmlnL3BucG0gL2hvbWUvXFwke1VTRVJOQU1FfS8ucG5wbS1zdG9yZSBcXFxcXG4gICAgJiYgY2hvd24gLVIgXFwke1VTRVJOQU1FfTpcXCR7VVNFUk5BTUV9IC9ob21lL1xcJHtVU0VSTkFNRX0vLmNvbmZpZyAvaG9tZS9cXCR7VVNFUk5BTUV9Ly5wbnBtLXN0b3JlIFxcXFxcbiAgICAmJiBwcmludGYgXCJzdG9yZS1kaXI9L2hvbWUvXFwke1VTRVJOQU1FfS8ucG5wbS1zdG9yZVxcXFxuXCIgPiAvaG9tZS9cXCR7VVNFUk5BTUV9Ly5jb25maWcvcG5wbS9yY1xuXG4jIFByZS1jcmVhdGUgd29ya3NwYWNlIG5vZGVfbW9kdWxlcyBzbyB0aGUgbmFtZWQgdm9sdW1lIG1vdW50IGlzIG93bmVkIGJ5IHRoZSB1c2VyXG5SVU4gbWtkaXIgLXAgL3dvcmtzcGFjZS9ub2RlX21vZHVsZXMgJiYgY2hvd24gXFwke1VTRVJOQU1FfTpcXCR7VVNFUk5BTUV9IC93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzXG5cblJVTiBta2RpciAvY29tbWFuZGhpc3RvcnkgJiYgdG91Y2ggL2NvbW1hbmRoaXN0b3J5Ly5iYXNoX2hpc3RvcnkgXFxcXFxuICAgICYmIGNob3duIC1SIFxcJHtVU0VSTkFNRX0gL2NvbW1hbmRoaXN0b3J5XG5cblJVTiBTTklQUEVUPVwiZXhwb3J0IFBST01QVF9DT01NQU5EPSdoaXN0b3J5IC1hJyAmJiBleHBvcnQgSElTVEZJTEU9L2NvbW1hbmRoaXN0b3J5Ly5iYXNoX2hpc3RvcnlcIiBcXFxcXG4gICAgJiYgZWNobyBcIiRTTklQUEVUXCIgPj4gXCIvaG9tZS9cXCR7VVNFUk5BTUV9Ly5iYXNocmNcIlxuXG4jIFZTIENvZGUganMtZGVidWcgYnVnOiBib290bG9hZGVyLmpzIGluIHdvcmtzcGFjZVN0b3JhZ2UgaXMgb25seSBjcmVhdGVkIHdoZW5cbiMgdGhlIHVzZXIgbWFudWFsbHkgdG9nZ2xlcyBBdXRvIEF0dGFjaCBzZXR0aW5ncy4gT24gYSBmcmVzaCBjb250YWluZXIgaXQgaXNcbiMgbWlzc2luZywgd2hpY2ggY3Jhc2hlcyBldmVyeSBOb2RlIGNvbW1hbmQuIEZpeDogaWYgdGhlIGluamVjdGVkIHBhdGggaXNcbiMgbWlzc2luZywgc3Vic3RpdHV0ZSB0aGUgc3RhYmxlIGJvb3Rsb2FkZXIgZnJvbSB0aGUgVlMgQ29kZSBzZXJ2ZXIgZXh0ZW5zaW9uXG4jIGRpcmVjdG9yeSAoYWx3YXlzIHByZXNlbnQgb25jZSB0aGUgc2VydmVyIGlzIGluc3RhbGxlZCkuXG5SVU4gY2F0IDw8J0VPRicgPj4gXCIvaG9tZS9cXCR7VVNFUk5BTUV9Ly5iYXNocmNcIlxuaWYgW1sgLW4gXCJcXCR7Tk9ERV9PUFRJT05TOi19XCIgJiYgXCJcXCR7Tk9ERV9PUFRJT05TfVwiID09ICpcImJvb3Rsb2FkZXIuanNcIiogXV07IHRoZW5cbiAgICBfYm9vdGxvYWRlcl9wYXRoPVwiJChwcmludGYgJyVzXFxcXG4nIFwiJE5PREVfT1BUSU9OU1wiIHwgc2VkIC1uICdzLy4qLS1yZXF1aXJlWz0gXVxcXFwoW15bOnNwYWNlOl1dKmJvb3Rsb2FkZXJcXFxcLmpzXFxcXCkuKi9cXFxcMS9wJylcIlxuICAgIGlmIFtbIC1uIFwiXFwke19ib290bG9hZGVyX3BhdGh9XCIgJiYgISAtZiBcIlxcJHtfYm9vdGxvYWRlcl9wYXRofVwiIF1dOyB0aGVuXG4gICAgICAgIF9zdGFibGVfYm9vdGxvYWRlcj1cIiQoZmluZCAvdnNjb2RlL3ZzY29kZS1zZXJ2ZXIgL2hvbWUvbm9kZS8udnNjb2RlLXNlcnZlci9leHRlbnNpb25zIC1uYW1lIFwiYm9vdGxvYWRlci5qc1wiIC1wYXRoIFwiKi9tcy12c2NvZGUuanMtZGVidWcvKlwiIDI+L2Rldi9udWxsIHwgaGVhZCAtMSlcIlxuICAgICAgICBpZiBbWyAtbiBcIlxcJHtfc3RhYmxlX2Jvb3Rsb2FkZXJ9XCIgXV07IHRoZW5cbiAgICAgICAgICAgIE5PREVfT1BUSU9OUz1cIlxcJHtOT0RFX09QVElPTlMvL1xcJHtfYm9vdGxvYWRlcl9wYXRofS9cXCR7X3N0YWJsZV9ib290bG9hZGVyfX1cIlxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM9XCIkKHByaW50ZiAnJXNcXFxcbicgXCIkTk9ERV9PUFRJT05TXCIgfCBzZWQgLUUgJ3MjKF58ICktLXJlcXVpcmUoPXwgKVtbOmdyYXBoOl1dKmJvb3Rsb2FkZXJcXFxcLmpzKCB8JCkjICNnOyBzIyAgKyMgI2c7IHMjXiAjIzsgcyMgJCMjJylcIlxuICAgICAgICAgICAgdW5zZXQgVlNDT0RFX0lOU1BFQ1RPUl9PUFRJT05TXG4gICAgICAgIGZpXG4gICAgICAgIGV4cG9ydCBOT0RFX09QVElPTlNcbiAgICAgICAgaWYgW1sgLXogXCIkTk9ERV9PUFRJT05TXCIgXV07IHRoZW5cbiAgICAgICAgICAgIHVuc2V0IE5PREVfT1BUSU9OU1xuICAgICAgICBmaVxuICAgIGZpXG4gICAgdW5zZXQgX2Jvb3Rsb2FkZXJfcGF0aCBfc3RhYmxlX2Jvb3Rsb2FkZXJcbmZpXG5FT0ZcbmA7XG5cbmNvbnN0IERPQ0tFUkZJTEVfVVNFUiA9IGBcXG5VU0VSIFxcJHtVU0VSTkFNRX1cXG5gO1xuXG4vKipcbiAqIEJ1aWxkZXIgZm9yIGAuZGV2Y29udGFpbmVyL0RvY2tlcmZpbGVgLlxuICpcbiAqIEZlYXR1cmVzIGNhbGwgYGFkZFJ1blN0ZXAoY21kKWAgZHVyaW5nIHRoZWlyIHNjYWZmb2xkIHBoYXNlIHRvIGFwcGVuZFxuICogYWRkaXRpb25hbCBgUlVOYCBpbnN0cnVjdGlvbnMgYmVmb3JlIHRoZSBmaW5hbCBgVVNFUmAgaW5zdHJ1Y3Rpb24uXG4gKiBgZmlsZXMoKWAgYXNzZW1ibGVzIHRoZSBjb21wbGV0ZSBEb2NrZXJmaWxlIGNvbnRlbnQgYXQgcmVuZGVyIHRpbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2NrZXJmaWxlTW9kZWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuRE9DS0VSRklMRTtcblx0cHJpdmF0ZSByZWFkb25seSBfcnVuU3RlcHM6IHN0cmluZ1tdID0gW107XG5cblx0LyoqIEFwcGVuZCBhIFJVTiBpbnN0cnVjdGlvbiAocGFzcyB0aGUgY29tbWFuZCwgbm90IHRoZSBSVU4ga2V5d29yZCkuICovXG5cdHB1YmxpYyBhZGRSdW5TdGVwKGNtZDogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fcnVuU3RlcHMucHVzaChjbWQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgZXh0cmFzID1cblx0XHRcdHRoaXMuX3J1blN0ZXBzLmxlbmd0aCA+IDBcblx0XHRcdFx0PyBgXFxuJHt0aGlzLl9ydW5TdGVwcy5tYXAoKHMpID0+IGBSVU4gJHtzfWApLmpvaW4oXCJcXG5cXG5cIil9XFxuYFxuXHRcdFx0XHQ6IFwiXCI7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9Eb2NrZXJmaWxlXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IERPQ0tFUkZJTEVfQkFTRSArIGV4dHJhcyArIERPQ0tFUkZJTEVfVVNFUixcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJET0NLRVJGSUxFX0JBU0UiLCJET0NLRVJGSUxFX1VTRVIiLCJEb2NrZXJmaWxlTW9kZWwiLCJrZXkiLCJET0NLRVJGSUxFIiwiX3J1blN0ZXBzIiwiYWRkUnVuU3RlcCIsImNtZCIsInB1c2giLCJmaWxlcyIsImV4dHJhcyIsImxlbmd0aCIsIm1hcCIsInMiLCJqb2luIiwiZmlsZVBhdGgiLCJjb250ZW50Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSxhQUFhO0FBRzlDLGdGQUFnRjtBQUNoRixNQUFNQyxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVEekIsQ0FBQztBQUVELE1BQU1DLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDO0FBRS9DOzs7Ozs7Q0FNQyxHQUNELE9BQU8sTUFBTUM7SUFDSUMsTUFBTUosaUJBQWlCSyxVQUFVLENBQUM7SUFDakNDLFlBQXNCLEVBQUUsQ0FBQztJQUUxQyxzRUFBc0UsR0FDdEUsQUFBT0MsV0FBV0MsR0FBVyxFQUFRO1FBQ3BDLElBQUksQ0FBQ0YsU0FBUyxDQUFDRyxJQUFJLENBQUNEO1FBQ3BCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFFBQXNCO1FBQzVCLE1BQU1DLFNBQ0wsSUFBSSxDQUFDTCxTQUFTLENBQUNNLE1BQU0sR0FBRyxJQUNyQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUNOLFNBQVMsQ0FBQ08sR0FBRyxDQUFDLENBQUNDLElBQU0sQ0FBQyxJQUFJLEVBQUVBLEdBQUcsRUFBRUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQzNEO1FBQ0osT0FBTztZQUNOO2dCQUNDQyxVQUFVO2dCQUNWQyxTQUFTaEIsa0JBQWtCVSxTQUFTVDtZQUNyQztTQUNBO0lBQ0Y7QUFDRCJ9
@@ -1,68 +0,0 @@
1
- import { WELL_KNOWN_FILES } from "./const.js";
2
- /**
3
- * Model for `.devcontainer/devcontainer.json`.
4
- *
5
- * Features call builder methods (`addExtension`, `forwardPort`, etc.) during
6
- * their configure phase. `MonoRepoScaffold` calls `files()` at render time.
7
- */ export class DevContainer {
8
- key = WELL_KNOWN_FILES.DEVCONTAINER_JSON;
9
- _extensions = [];
10
- _ports = [];
11
- _mounts;
12
- _postStartCommand;
13
- _useCompose = false;
14
- constructor(){
15
- this._mounts = [
16
- "source=..,target=/workspace,type=bind,consistency=cached"
17
- ];
18
- this.forwardPort(3000);
19
- }
20
- addExtension(...ids) {
21
- this._extensions.push(...ids);
22
- return this;
23
- }
24
- forwardPort(...ports) {
25
- this._ports.push(...ports);
26
- return this;
27
- }
28
- setPostStartCommand(cmd) {
29
- this._postStartCommand = cmd;
30
- return this;
31
- }
32
- useCompose() {
33
- this._useCompose = true;
34
- return this;
35
- }
36
- files() {
37
- const config = {};
38
- if (this._useCompose) {
39
- config.dockerComposeFile = "docker-compose.yml";
40
- config.service = "devcontainer";
41
- config.workspaceFolder = "/workspace";
42
- }
43
- if (this._mounts) {
44
- config.mounts = this._mounts;
45
- }
46
- if (this._extensions.length > 0) {
47
- config.customizations = {
48
- vscode: {
49
- extensions: this._extensions
50
- }
51
- };
52
- }
53
- if (this._ports.length > 0) {
54
- config.forwardPorts = this._ports;
55
- }
56
- if (this._postStartCommand) {
57
- config.postStartCommand = this._postStartCommand;
58
- }
59
- return [
60
- {
61
- filePath: ".devcontainer/devcontainer.json",
62
- content: JSON.stringify(config, null, 2)
63
- }
64
- ];
65
- }
66
- }
67
-
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2Rldi1jb250YWluZXIubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG4vKipcbiAqIE1vZGVsIGZvciBgLmRldmNvbnRhaW5lci9kZXZjb250YWluZXIuanNvbmAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBidWlsZGVyIG1ldGhvZHMgKGBhZGRFeHRlbnNpb25gLCBgZm9yd2FyZFBvcnRgLCBldGMuKSBkdXJpbmdcbiAqIHRoZWlyIGNvbmZpZ3VyZSBwaGFzZS4gYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhdCByZW5kZXIgdGltZS5cbiAqL1xuXG5leHBvcnQgY2xhc3MgRGV2Q29udGFpbmVyIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkRFVkNPTlRBSU5FUl9KU09OO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9leHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wb3J0czogbnVtYmVyW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfbW91bnRzOiBzdHJpbmdbXTtcblx0cHJpdmF0ZSBfcG9zdFN0YXJ0Q29tbWFuZD86IHN0cmluZztcblx0cHJpdmF0ZSBfdXNlQ29tcG9zZSA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9tb3VudHMgPSBbXCJzb3VyY2U9Li4sdGFyZ2V0PS93b3Jrc3BhY2UsdHlwZT1iaW5kLGNvbnNpc3RlbmN5PWNhY2hlZFwiXTtcblx0XHR0aGlzLmZvcndhcmRQb3J0KDMwMDApO1xuXHR9XG5cblx0cHVibGljIGFkZEV4dGVuc2lvbiguLi5pZHM6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0dGhpcy5fZXh0ZW5zaW9ucy5wdXNoKC4uLmlkcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZm9yd2FyZFBvcnQoLi4ucG9ydHM6IG51bWJlcltdKTogdGhpcyB7XG5cdFx0dGhpcy5fcG9ydHMucHVzaCguLi5wb3J0cyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0UG9zdFN0YXJ0Q29tbWFuZChjbWQ6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3Bvc3RTdGFydENvbW1hbmQgPSBjbWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgdXNlQ29tcG9zZSgpOiB0aGlzIHtcblx0XHR0aGlzLl91c2VDb21wb3NlID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdGNvbnN0IGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRcdGlmICh0aGlzLl91c2VDb21wb3NlKSB7XG5cdFx0XHRjb25maWcuZG9ja2VyQ29tcG9zZUZpbGUgPSBcImRvY2tlci1jb21wb3NlLnltbFwiO1xuXHRcdFx0Y29uZmlnLnNlcnZpY2UgPSBcImRldmNvbnRhaW5lclwiO1xuXHRcdFx0Y29uZmlnLndvcmtzcGFjZUZvbGRlciA9IFwiL3dvcmtzcGFjZVwiO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9tb3VudHMpIHtcblx0XHRcdGNvbmZpZy5tb3VudHMgPSB0aGlzLl9tb3VudHM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2V4dGVuc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uZmlnLmN1c3RvbWl6YXRpb25zID0geyB2c2NvZGU6IHsgZXh0ZW5zaW9uczogdGhpcy5fZXh0ZW5zaW9ucyB9IH07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3BvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbmZpZy5mb3J3YXJkUG9ydHMgPSB0aGlzLl9wb3J0cztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcG9zdFN0YXJ0Q29tbWFuZCkge1xuXHRcdFx0Y29uZmlnLnBvc3RTdGFydENvbW1hbmQgPSB0aGlzLl9wb3N0U3RhcnRDb21tYW5kO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvZGV2Y29udGFpbmVyLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJEZXZDb250YWluZXIiLCJrZXkiLCJERVZDT05UQUlORVJfSlNPTiIsIl9leHRlbnNpb25zIiwiX3BvcnRzIiwiX21vdW50cyIsIl9wb3N0U3RhcnRDb21tYW5kIiwiX3VzZUNvbXBvc2UiLCJmb3J3YXJkUG9ydCIsImFkZEV4dGVuc2lvbiIsImlkcyIsInB1c2giLCJwb3J0cyIsInNldFBvc3RTdGFydENvbW1hbmQiLCJjbWQiLCJ1c2VDb21wb3NlIiwiZmlsZXMiLCJjb25maWciLCJkb2NrZXJDb21wb3NlRmlsZSIsInNlcnZpY2UiLCJ3b3Jrc3BhY2VGb2xkZXIiLCJtb3VudHMiLCJsZW5ndGgiLCJjdXN0b21pemF0aW9ucyIsInZzY29kZSIsImV4dGVuc2lvbnMiLCJmb3J3YXJkUG9ydHMiLCJwb3N0U3RhcnRDb21tYW5kIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZ0JBQWdCLFFBQVEsYUFBYTtBQUc5Qzs7Ozs7Q0FLQyxHQUVELE9BQU8sTUFBTUM7SUFDSUMsTUFBTUYsaUJBQWlCRyxpQkFBaUIsQ0FBQztJQUN4Q0MsY0FBd0IsRUFBRSxDQUFDO0lBQzNCQyxTQUFtQixFQUFFLENBQUM7SUFDdEJDLFFBQWtCO0lBQzNCQyxrQkFBMkI7SUFDM0JDLGNBQWMsTUFBTTtJQUU1QixhQUFxQjtRQUNwQixJQUFJLENBQUNGLE9BQU8sR0FBRztZQUFDO1NBQTJEO1FBQzNFLElBQUksQ0FBQ0csV0FBVyxDQUFDO0lBQ2xCO0lBRU9DLGFBQWEsR0FBR0MsR0FBYSxFQUFRO1FBQzNDLElBQUksQ0FBQ1AsV0FBVyxDQUFDUSxJQUFJLElBQUlEO1FBQ3pCLE9BQU8sSUFBSTtJQUNaO0lBRU9GLFlBQVksR0FBR0ksS0FBZSxFQUFRO1FBQzVDLElBQUksQ0FBQ1IsTUFBTSxDQUFDTyxJQUFJLElBQUlDO1FBQ3BCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLG9CQUFvQkMsR0FBVyxFQUFRO1FBQzdDLElBQUksQ0FBQ1IsaUJBQWlCLEdBQUdRO1FBQ3pCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLGFBQW1CO1FBQ3pCLElBQUksQ0FBQ1IsV0FBVyxHQUFHO1FBQ25CLE9BQU8sSUFBSTtJQUNaO0lBRU9TLFFBQXNCO1FBQzVCLE1BQU1DLFNBQWtDLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUNWLFdBQVcsRUFBRTtZQUNyQlUsT0FBT0MsaUJBQWlCLEdBQUc7WUFDM0JELE9BQU9FLE9BQU8sR0FBRztZQUNqQkYsT0FBT0csZUFBZSxHQUFHO1FBQzFCO1FBRUEsSUFBSSxJQUFJLENBQUNmLE9BQU8sRUFBRTtZQUNqQlksT0FBT0ksTUFBTSxHQUFHLElBQUksQ0FBQ2hCLE9BQU87UUFDN0I7UUFFQSxJQUFJLElBQUksQ0FBQ0YsV0FBVyxDQUFDbUIsTUFBTSxHQUFHLEdBQUc7WUFDaENMLE9BQU9NLGNBQWMsR0FBRztnQkFBRUMsUUFBUTtvQkFBRUMsWUFBWSxJQUFJLENBQUN0QixXQUFXO2dCQUFDO1lBQUU7UUFDcEU7UUFFQSxJQUFJLElBQUksQ0FBQ0MsTUFBTSxDQUFDa0IsTUFBTSxHQUFHLEdBQUc7WUFDM0JMLE9BQU9TLFlBQVksR0FBRyxJQUFJLENBQUN0QixNQUFNO1FBQ2xDO1FBRUEsSUFBSSxJQUFJLENBQUNFLGlCQUFpQixFQUFFO1lBQzNCVyxPQUFPVSxnQkFBZ0IsR0FBRyxJQUFJLENBQUNyQixpQkFBaUI7UUFDakQ7UUFFQSxPQUFPO1lBQ047Z0JBQ0NzQixVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQUNkLFFBQVEsTUFBTTtZQUN2QztTQUNBO0lBQ0Y7QUFDRCJ9
@@ -1,29 +0,0 @@
1
- import { WELL_KNOWN_FILES } from "./const.js";
2
- /**
3
- * Accumulates key=value pairs and renders them as a `.env` file.
4
- *
5
- * Register once in the workspace; features call `addEntry` during their
6
- * scaffold phase to contribute environment variables. The final file is
7
- * written at render time when `workspace.scaffold()` is called.
8
- */ export class EnvFile {
9
- key = WELL_KNOWN_FILES.ENV_FILE;
10
- _entries = new Map();
11
- addEntry(key, value) {
12
- this._entries.set(key, value);
13
- return this;
14
- }
15
- files() {
16
- if (this._entries.size === 0) return [];
17
- const content = [
18
- ...this._entries.entries()
19
- ].map(([k, v])=>`${k}=${v}`).join("\n") + "\n";
20
- return [
21
- {
22
- filePath: ".env",
23
- content
24
- }
25
- ];
26
- }
27
- }
28
-
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2Vudi1maWxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBY2N1bXVsYXRlcyBrZXk9dmFsdWUgcGFpcnMgYW5kIHJlbmRlcnMgdGhlbSBhcyBhIGAuZW52YCBmaWxlLlxuICpcbiAqIFJlZ2lzdGVyIG9uY2UgaW4gdGhlIHdvcmtzcGFjZTsgZmVhdHVyZXMgY2FsbCBgYWRkRW50cnlgIGR1cmluZyB0aGVpclxuICogc2NhZmZvbGQgcGhhc2UgdG8gY29udHJpYnV0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoZSBmaW5hbCBmaWxlIGlzXG4gKiB3cml0dGVuIGF0IHJlbmRlciB0aW1lIHdoZW4gYHdvcmtzcGFjZS5zY2FmZm9sZCgpYCBpcyBjYWxsZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZGaWxlIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkVOVl9GSUxFO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2VudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG5cdHB1YmxpYyBhZGRFbnRyeShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2VudHJpZXMuc2V0KGtleSwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0aWYgKHRoaXMuX2VudHJpZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIFtdO1xuXHRcdGNvbnN0IGNvbnRlbnQgPVxuXHRcdFx0Wy4uLnRoaXMuX2VudHJpZXMuZW50cmllcygpXS5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiO1xuXHRcdHJldHVybiBbeyBmaWxlUGF0aDogXCIuZW52XCIsIGNvbnRlbnQgfV07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJXRUxMX0tOT1dOX0ZJTEVTIiwiRW52RmlsZSIsImtleSIsIkVOVl9GSUxFIiwiX2VudHJpZXMiLCJNYXAiLCJhZGRFbnRyeSIsInZhbHVlIiwic2V0IiwiZmlsZXMiLCJzaXplIiwiY29udGVudCIsImVudHJpZXMiLCJtYXAiLCJrIiwidiIsImpvaW4iLCJmaWxlUGF0aCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZ0JBQWdCLFFBQVEsYUFBYTtBQUc5Qzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1DO0lBQ0lDLE1BQU1GLGlCQUFpQkcsUUFBUSxDQUFDO0lBRS9CQyxXQUFXLElBQUlDLE1BQXNCO0lBRS9DQyxTQUFTSixHQUFXLEVBQUVLLEtBQWEsRUFBUTtRQUNqRCxJQUFJLENBQUNILFFBQVEsQ0FBQ0ksR0FBRyxDQUFDTixLQUFLSztRQUN2QixPQUFPLElBQUk7SUFDWjtJQUVPRSxRQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQ0wsUUFBUSxDQUFDTSxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUU7UUFDdkMsTUFBTUMsVUFDTDtlQUFJLElBQUksQ0FBQ1AsUUFBUSxDQUFDUSxPQUFPO1NBQUcsQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsR0FBR0MsRUFBRSxHQUFLLEdBQUdELEVBQUUsQ0FBQyxFQUFFQyxHQUFHLEVBQUVDLElBQUksQ0FBQyxRQUFRO1FBQ3hFLE9BQU87WUFBQztnQkFBRUMsVUFBVTtnQkFBUU47WUFBUTtTQUFFO0lBQ3ZDO0FBQ0QifQ==