@decohere/create 0.0.1-dev.17 → 0.0.1-dev.18

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 (186) hide show
  1. package/commonjs/src/cli.js +26 -5
  2. package/commonjs/src/models/compose.model.js +82 -0
  3. package/commonjs/src/models/config-yaml.model.js +34 -0
  4. package/commonjs/src/models/const.js +29 -0
  5. package/commonjs/src/models/container-image.model.js +88 -0
  6. package/commonjs/src/models/dev-container.model.js +73 -0
  7. package/commonjs/src/models/env-file.model.js +33 -0
  8. package/commonjs/src/models/gitignore.model.js +32 -0
  9. package/commonjs/src/models/launch-json.model.js +52 -0
  10. package/commonjs/src/models/package-json.model.js +64 -0
  11. package/commonjs/src/models/project.model.js +126 -0
  12. package/commonjs/src/models/source-file.js +6 -0
  13. package/commonjs/src/models/tsconfig.model.js +34 -0
  14. package/commonjs/src/models/vscode-settings.model.js +31 -0
  15. package/commonjs/src/services/scaffold.service.js +62 -0
  16. package/commonjs/src/webapi/create-api.js +169 -0
  17. package/commonjs/src/webapi/features/auth.feature.js +166 -0
  18. package/commonjs/src/webapi/features/auth0-cli.js +151 -0
  19. package/commonjs/src/webapi/features/database.feature.js +151 -0
  20. package/commonjs/src/webapi/features/finalize.feature.js +46 -0
  21. package/commonjs/src/webapi/features/postman.feature.js +309 -0
  22. package/commonjs/src/webapi/models/api-package-json.model.js +57 -0
  23. package/commonjs/src/webapi/models/auth-config.model.js +23 -0
  24. package/commonjs/src/webapi/models/controller-source-file.model.js +180 -0
  25. package/commonjs/src/webapi/models/main-source-file.model.js +132 -0
  26. package/commonjs/src/webapi/models/sample-files.model.js +60 -0
  27. package/commonjs/v1/cli.js +15 -0
  28. package/commonjs/v1/domain/class-model.js +106 -0
  29. package/commonjs/v1/domain/compose.model.js +74 -0
  30. package/commonjs/v1/domain/context.js +53 -0
  31. package/commonjs/v1/domain/devcontainer.model.js +116 -0
  32. package/commonjs/v1/domain/dockerfile.model.js +62 -0
  33. package/commonjs/v1/domain/feature.js +19 -0
  34. package/commonjs/v1/domain/import-map.js +74 -0
  35. package/commonjs/v1/domain/index.js +68 -0
  36. package/commonjs/v1/domain/prompt.js +45 -0
  37. package/commonjs/v1/domain/workflow.js +37 -0
  38. package/commonjs/v1/features/api-core/feature.js +103 -0
  39. package/commonjs/v1/features/api-core/hello-controller.model.js +100 -0
  40. package/commonjs/v1/features/api-core/main-ts.model.js +85 -0
  41. package/commonjs/v1/features/api-core/scaffold-files.template.js +158 -0
  42. package/commonjs/v1/features/auth0/auth0-cli.js +151 -0
  43. package/commonjs/v1/features/auth0/feature.js +187 -0
  44. package/commonjs/v1/features/auth0/models.js +14 -0
  45. package/commonjs/v1/features/auth0/prod-config.template.js +19 -0
  46. package/commonjs/v1/features/cli-core/feature.js +37 -0
  47. package/commonjs/v1/features/cli-core/scaffold-files.template.js +103 -0
  48. package/commonjs/v1/features/devcontainer/feature.js +38 -0
  49. package/commonjs/v1/features/finalize/feature.js +48 -0
  50. package/commonjs/v1/features/postgresql/feature.js +81 -0
  51. package/commonjs/v1/features/postgresql/models.js +14 -0
  52. package/commonjs/v1/features/postman/collection.template.js +80 -0
  53. package/commonjs/v1/features/postman/environment.template.js +24 -0
  54. package/commonjs/v1/features/postman/feature.js +192 -0
  55. package/commonjs/v1/features/typeorm/feature.js +66 -0
  56. package/commonjs/v1/features/typeorm/scaffold-files.template.js +80 -0
  57. package/commonjs/v1/scaffold.js +50 -0
  58. package/commonjs/v1/version.js +32 -0
  59. package/commonjs/v1/workflows/api.js +29 -0
  60. package/commonjs/v1/workflows/cli.js +19 -0
  61. package/es6/src/cli.js +26 -5
  62. package/es6/src/models/compose.model.js +77 -0
  63. package/es6/src/models/config-yaml.model.js +30 -0
  64. package/es6/src/models/const.js +19 -0
  65. package/es6/src/models/container-image.model.js +84 -0
  66. package/es6/src/models/dev-container.model.js +68 -0
  67. package/es6/src/models/env-file.model.js +29 -0
  68. package/es6/src/models/gitignore.model.js +22 -0
  69. package/es6/src/models/launch-json.model.js +42 -0
  70. package/es6/src/models/package-json.model.js +60 -0
  71. package/es6/src/models/project.model.js +111 -0
  72. package/es6/src/models/source-file.js +3 -0
  73. package/es6/src/models/tsconfig.model.js +24 -0
  74. package/es6/src/models/vscode-settings.model.js +21 -0
  75. package/es6/src/services/scaffold.service.js +52 -0
  76. package/es6/src/webapi/create-api.js +151 -0
  77. package/es6/src/webapi/features/auth.feature.js +115 -0
  78. package/es6/src/webapi/features/auth0-cli.js +116 -0
  79. package/es6/src/webapi/features/database.feature.js +141 -0
  80. package/es6/src/webapi/features/finalize.feature.js +36 -0
  81. package/es6/src/webapi/features/postman.feature.js +258 -0
  82. package/es6/src/webapi/models/api-package-json.model.js +52 -0
  83. package/es6/src/webapi/models/auth-config.model.js +19 -0
  84. package/es6/src/webapi/models/controller-source-file.model.js +171 -0
  85. package/es6/src/webapi/models/main-source-file.model.js +128 -0
  86. package/es6/src/webapi/models/sample-files.model.js +42 -0
  87. package/es6/v1/cli.js +11 -0
  88. package/es6/v1/domain/class-model.js +104 -0
  89. package/es6/v1/domain/compose.model.js +61 -0
  90. package/es6/v1/domain/context.js +37 -0
  91. package/es6/v1/domain/devcontainer.model.js +104 -0
  92. package/es6/v1/domain/dockerfile.model.js +52 -0
  93. package/es6/v1/domain/feature.js +9 -0
  94. package/es6/v1/domain/import-map.js +64 -0
  95. package/es6/v1/domain/index.js +11 -0
  96. package/es6/v1/domain/prompt.js +27 -0
  97. package/es6/v1/domain/workflow.js +24 -0
  98. package/es6/v1/features/api-core/feature.js +93 -0
  99. package/es6/v1/features/api-core/hello-controller.model.js +96 -0
  100. package/es6/v1/features/api-core/main-ts.model.js +74 -0
  101. package/es6/v1/features/api-core/scaffold-files.template.js +116 -0
  102. package/es6/v1/features/auth0/auth0-cli.js +116 -0
  103. package/es6/v1/features/auth0/feature.js +136 -0
  104. package/es6/v1/features/auth0/models.js +4 -0
  105. package/es6/v1/features/auth0/prod-config.template.js +9 -0
  106. package/es6/v1/features/cli-core/feature.js +27 -0
  107. package/es6/v1/features/cli-core/scaffold-files.template.js +73 -0
  108. package/es6/v1/features/devcontainer/feature.js +28 -0
  109. package/es6/v1/features/finalize/feature.js +38 -0
  110. package/es6/v1/features/postgresql/feature.js +71 -0
  111. package/es6/v1/features/postgresql/models.js +4 -0
  112. package/es6/v1/features/postman/collection.template.js +70 -0
  113. package/es6/v1/features/postman/environment.template.js +14 -0
  114. package/es6/v1/features/postman/feature.js +141 -0
  115. package/es6/v1/features/typeorm/feature.js +56 -0
  116. package/es6/v1/features/typeorm/scaffold-files.template.js +56 -0
  117. package/es6/v1/scaffold.js +40 -0
  118. package/es6/v1/version.js +22 -0
  119. package/es6/v1/workflows/api.js +25 -0
  120. package/es6/v1/workflows/cli.js +9 -0
  121. package/package.json +2 -2
  122. package/types/src/models/compose.model.d.ts +32 -0
  123. package/types/src/models/config-yaml.model.d.ts +16 -0
  124. package/types/src/models/const.d.ts +17 -0
  125. package/types/src/models/container-image.model.d.ts +15 -0
  126. package/types/src/models/dev-container.model.d.ts +21 -0
  127. package/types/src/models/env-file.model.d.ts +14 -0
  128. package/types/src/models/gitignore.model.d.ts +6 -0
  129. package/types/src/models/launch-json.model.d.ts +5 -0
  130. package/types/src/models/package-json.model.d.ts +18 -0
  131. package/types/src/models/project.model.d.ts +55 -0
  132. package/types/src/models/source-file.d.ts +11 -0
  133. package/types/src/models/tsconfig.model.d.ts +5 -0
  134. package/types/src/models/vscode-settings.model.d.ts +7 -0
  135. package/types/src/services/scaffold.service.d.ts +22 -0
  136. package/types/src/webapi/create-api.d.ts +7 -0
  137. package/types/src/webapi/features/auth.feature.d.ts +7 -0
  138. package/types/src/webapi/features/auth0-cli.d.ts +22 -0
  139. package/types/src/webapi/features/database.feature.d.ts +5 -0
  140. package/types/src/webapi/features/finalize.feature.d.ts +2 -0
  141. package/types/src/webapi/features/postman.feature.d.ts +7 -0
  142. package/types/src/webapi/models/api-package-json.model.d.ts +17 -0
  143. package/types/src/webapi/models/auth-config.model.d.ts +18 -0
  144. package/types/src/webapi/models/controller-source-file.model.d.ts +42 -0
  145. package/types/src/webapi/models/main-source-file.model.d.ts +36 -0
  146. package/types/src/webapi/models/sample-files.model.d.ts +7 -0
  147. package/types/v1/cli.d.ts +2 -0
  148. package/types/v1/domain/class-model.d.ts +70 -0
  149. package/types/v1/domain/compose.model.d.ts +25 -0
  150. package/types/v1/domain/context.d.ts +36 -0
  151. package/types/v1/domain/devcontainer.model.d.ts +35 -0
  152. package/types/v1/domain/dockerfile.model.d.ts +11 -0
  153. package/types/v1/domain/feature.d.ts +29 -0
  154. package/types/v1/domain/import-map.d.ts +24 -0
  155. package/types/v1/domain/index.d.ts +12 -0
  156. package/types/v1/domain/prompt.d.ts +2 -0
  157. package/types/v1/domain/workflow.d.ts +14 -0
  158. package/types/v1/features/api-core/feature.d.ts +2 -0
  159. package/types/v1/features/api-core/hello-controller.model.d.ts +9 -0
  160. package/types/v1/features/api-core/main-ts.model.d.ts +31 -0
  161. package/types/v1/features/api-core/scaffold-files.template.d.ts +10 -0
  162. package/types/v1/features/auth0/auth0-cli.d.ts +22 -0
  163. package/types/v1/features/auth0/feature.d.ts +2 -0
  164. package/types/v1/features/auth0/models.d.ts +5 -0
  165. package/types/v1/features/auth0/prod-config.template.d.ts +1 -0
  166. package/types/v1/features/cli-core/feature.d.ts +2 -0
  167. package/types/v1/features/cli-core/scaffold-files.template.d.ts +6 -0
  168. package/types/v1/features/devcontainer/feature.d.ts +2 -0
  169. package/types/v1/features/finalize/feature.d.ts +2 -0
  170. package/types/v1/features/postgresql/feature.d.ts +2 -0
  171. package/types/v1/features/postgresql/models.d.ts +6 -0
  172. package/types/v1/features/postman/collection.template.d.ts +1 -0
  173. package/types/v1/features/postman/environment.template.d.ts +6 -0
  174. package/types/v1/features/postman/feature.d.ts +2 -0
  175. package/types/v1/features/typeorm/feature.d.ts +2 -0
  176. package/types/v1/features/typeorm/scaffold-files.template.d.ts +9 -0
  177. package/types/v1/scaffold.d.ts +3 -0
  178. package/types/v1/version.d.ts +2 -0
  179. package/types/v1/workflows/api.d.ts +8 -0
  180. package/types/v1/workflows/cli.d.ts +1 -0
  181. package/commonjs/src/scaffold.js +0 -89
  182. package/commonjs/src/templates.js +0 -306
  183. package/es6/src/scaffold.js +0 -79
  184. package/es6/src/templates.js +0 -246
  185. package/types/src/scaffold.d.ts +0 -6
  186. package/types/src/templates.d.ts +0 -20
@@ -0,0 +1,132 @@
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/IG5ldyBJbXBvcnRHcm91cCgpO1xuXHRcdGdyb3VwLmFkZChuYW1lLCB0eXBlT25seSk7XG5cdFx0dGhpcy5fZXh0cmFJbXBvcnRzLnNldChmcm9tLCBncm91cCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGJ1aWxkZXIgY2FsbCBpbnNlcnRlZCBhZnRlciBgLndpdGhDb25maWd1cmF0aW9uKClgIGFuZCBiZWZvcmVcblx0ICogYC53aXRoU2VydmljZXMoKWAuIFBhc3MgdGhlIGNhbGwgd2l0aG91dCBsZWFkaW5nIGRvdCwgZS5nLiBgLndpdGhBdXRoKClgLlxuXHQgKi9cblx0cHVibGljIGFkZEJ1aWxkZXJDYWxsKGNhbGw6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX2J1aWxkZXJDYWxscy5wdXNoKGNhbGwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIGVudGl0eSDigJQgaW1wb3J0IGFuZCBlbnRyeSBpbiBgd2l0aFR5cGVPcm0oeyBlbnRpdGllcyB9KWAuICovXG5cdHB1YmxpYyBhZGRFbnRpdHkoZW50aXR5OiBUeXBlT3JtSW1wb3J0KTogdGhpcyB7XG5cdFx0dGhpcy5fZW50aXRpZXMucHVzaChlbnRpdHkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZHMgYSBUeXBlT1JNIHJlcG9zaXRvcnkg4oCUIGltcG9ydCBhbmQgZW50cnkgaW4gYHdpdGhUeXBlT3JtKHsgcmVwb3NpdG9yaWVzIH0pYC4gKi9cblx0cHVibGljIGFkZFJlcG9zaXRvcnkocmVwbzogVHlwZU9ybUltcG9ydCk6IHRoaXMge1xuXHRcdHRoaXMuX3JlcG9zaXRvcmllcy5wdXNoKHJlcG8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXG5cdFx0XHQnaW1wb3J0IFwiQGRlY29oZXJlL3NjcmliZS1waW5vXCI7Jyxcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvY29ydGV4L2h0dHBcIjsnLFxuXHRcdF07XG5cblx0XHRmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5fc2lkZUVmZmVjdEltcG9ydHMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IFwiJHtwYXRofVwiO2ApO1xuXHRcdH1cblxuXHRcdGltcG9ydHMucHVzaChcblx0XHRcdCdpbXBvcnQgXCJAZGVjb2hlcmUvcHJvdG9jb2xcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IFlhbWxEYXRhU291cmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9wcm90b2NvbFwiOycsXG5cdFx0XHQnaW1wb3J0IHsgQnVpbGRlciB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBGYXN0aWZ5UHJvdmlkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleC9wcm92aWRlcnNcIjsnLFxuXHRcdFx0J2ltcG9ydCB7IHNjcmliZSB9IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7Jyxcblx0XHRcdCdpbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvc2FtcGxlLnNlcnZpY2UuanNcIjsnLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGUgb2YgdGhpcy5fZW50aXRpZXMpIHtcblx0XHRcdGltcG9ydHMucHVzaChgaW1wb3J0IHsgJHtlLmNsYXNzTmFtZX0gfSBmcm9tIFwiJHtlLmltcG9ydFBhdGh9XCI7YCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByIG9mIHRoaXMuX3JlcG9zaXRvcmllcykge1xuXHRcdFx0aW1wb3J0cy5wdXNoKGBpbXBvcnQgeyAke3IuY2xhc3NOYW1lfSB9IGZyb20gXCIke3IuaW1wb3J0UGF0aH1cIjtgKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtmcm9tLCBncm91cF0gb2YgdGhpcy5fZXh0cmFJbXBvcnRzKSB7XG5cdFx0XHRpbXBvcnRzLnB1c2goZ3JvdXAucmVuZGVyKGZyb20pKTtcblx0XHR9XG5cblx0XHRpbXBvcnRzLnB1c2goJ2ltcG9ydCB7IEhlbGxvQ29udHJvbGxlciB9IGZyb20gXCIuL2NvbnRyb2xsZXJzL2hlbGxvLmNvbnRyb2xsZXIuanNcIjsnKTtcblxuXHRcdGNvbnN0IGJ1aWxkZXJDYWxsczogc3RyaW5nW10gPSBbXG5cdFx0XHRgXFx0LndpdGhIdHRwUHJvdmlkZXIoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgXFx0LndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHQuLi50aGlzLl9idWlsZGVyQ2FsbHMubWFwKChjKSA9PiBgXFx0JHtjfWApLFxuXHRcdFx0YFxcdC53aXRoU2VydmljZXMoKGNiKSA9PiB7IGNiLnJlZ2lzdGVyU2luZ2xldG9uKFNhbXBsZVNlcnZpY2UpOyB9KWAsXG5cdFx0XTtcblxuXHRcdGlmICh0aGlzLl9lbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzLm1hcCgoZSkgPT4gZS5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGNvbnN0IHJlcG9zID0gdGhpcy5fcmVwb3NpdG9yaWVzLm1hcCgocikgPT4gci5jbGFzc05hbWUpLmpvaW4oXCIsIFwiKTtcblx0XHRcdGJ1aWxkZXJDYWxscy5wdXNoKFxuXHRcdFx0XHRgXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFske2VudGl0aWVzfV0sIHJlcG9zaXRvcmllczogWyR7cmVwb3N9XSB9KWAsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJ1aWxkZXJDYWxscy5wdXNoKGBcXHQud2l0aENvbnRyb2xsZXJzKEhlbGxvQ29udHJvbGxlcilgKTtcblxuXHRcdGNvbnN0IGNvbnRlbnQgPSBbXG5cdFx0XHQuLi5pbXBvcnRzLFxuXHRcdFx0XCJcIixcblx0XHRcdFwic2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1wiLFxuXHRcdFx0XCJcIixcblx0XHRcdGBjb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke3RoaXMuYXBwTmFtZX1cIiB9KWAsXG5cdFx0XHQuLi5idWlsZGVyQ2FsbHMsXG5cdFx0XHRgXFx0LmJ1aWxkKCk7YCxcblx0XHRcdFwiXCIsXG5cdFx0XHRcImF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJleHBvcnQgZGVmYXVsdCBhcHA7XCIsXG5cdFx0XHRcIlwiLFxuXHRcdF0uam9pbihcIlxcblwiKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJNYWluU291cmNlRmlsZSIsIkltcG9ydEdyb3VwIiwiX3ZhbHVlcyIsIl90eXBlcyIsImFkZCIsIm5hbWUiLCJ0eXBlT25seSIsImluY2x1ZGVzIiwicHVzaCIsInR5cGVJZHgiLCJpbmRleE9mIiwic3BsaWNlIiwicmVuZGVyIiwiZnJvbSIsInZhbHVlcyIsInNvcnQiLCJ0eXBlcyIsIm1hcCIsIm4iLCJqb2luIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIk1BSU5fVFMiLCJfc2lkZUVmZmVjdEltcG9ydHMiLCJfZXh0cmFJbXBvcnRzIiwiTWFwIiwiX2J1aWxkZXJDYWxscyIsIl9lbnRpdGllcyIsIl9yZXBvc2l0b3JpZXMiLCJhcHBOYW1lIiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsInBhdGgiLCJhZGRJbXBvcnQiLCJncm91cCIsImdldCIsInNldCIsImFkZEJ1aWxkZXJDYWxsIiwiY2FsbCIsImFkZEVudGl0eSIsImVudGl0eSIsImFkZFJlcG9zaXRvcnkiLCJyZXBvIiwiZmlsZXMiLCJpbXBvcnRzIiwiZSIsImNsYXNzTmFtZSIsImltcG9ydFBhdGgiLCJyIiwiYnVpbGRlckNhbGxzIiwiYyIsImxlbmd0aCIsImVudGl0aWVzIiwicmVwb3MiLCJjb250ZW50IiwiZmlsZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7K0JBdUNhQTs7O2VBQUFBOzs7dUJBdkNvQjtBQUtqQyxpRkFBaUYsR0FDakYsTUFBTUM7SUFDWUMsVUFBb0IsRUFBRSxDQUFDO0lBQ3ZCQyxTQUFtQixFQUFFLENBQUM7SUFFaENDLElBQUlDLElBQVksRUFBRUMsV0FBVyxLQUFLLEVBQVE7UUFDaEQsSUFBSUEsVUFBVTtZQUNiLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDSixPQUFPLENBQUNLLFFBQVEsQ0FBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQ0YsTUFBTSxDQUFDSSxRQUFRLENBQUNGLE9BQU87Z0JBQ2hFLElBQUksQ0FBQ0YsTUFBTSxDQUFDSyxJQUFJLENBQUNIO1lBQ2xCO1FBQ0QsT0FBTztZQUNOLDREQUE0RDtZQUM1RCxNQUFNSSxVQUFVLElBQUksQ0FBQ04sTUFBTSxDQUFDTyxPQUFPLENBQUNMO1lBQ3BDLElBQUlJLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQ04sTUFBTSxDQUFDUSxNQUFNLENBQUNGLFNBQVM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ1AsT0FBTyxDQUFDSyxRQUFRLENBQUNGLE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUNNLElBQUksQ0FBQ0g7UUFDckQ7UUFDQSxPQUFPLElBQUk7SUFDWjtJQUVPTyxPQUFPQyxJQUFZLEVBQVU7UUFDbkMsTUFBTUMsU0FBUztlQUFJLElBQUksQ0FBQ1osT0FBTztTQUFDLENBQUNhLElBQUk7UUFDckMsTUFBTUMsUUFBUTtlQUFJLElBQUksQ0FBQ2IsTUFBTTtTQUFDLENBQUNZLElBQUksR0FBR0UsR0FBRyxDQUFDLENBQUNDLElBQU0sQ0FBQyxLQUFLLEVBQUVBLEdBQUc7UUFDNUQsT0FBTyxDQUFDLFNBQVMsRUFBRTtlQUFJSjtlQUFXRTtTQUFNLENBQUNHLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRU4sS0FBSyxFQUFFLENBQUM7SUFDeEU7QUFDRDtBQVNPLE1BQU1iOztJQUNJb0IsTUFBTUMsdUJBQWdCLENBQUNDLE9BQU8sQ0FBQztJQUU5QkMscUJBQStCLEVBQUUsQ0FBQztJQUNsQ0MsZ0JBQWdCLElBQUlDLE1BQTJCO0lBQy9DQyxnQkFBMEIsRUFBRSxDQUFDO0lBQzdCQyxZQUE2QixFQUFFLENBQUM7SUFDaENDLGdCQUFpQyxFQUFFLENBQUM7SUFFckQsWUFBbUIsQUFBaUJDLE9BQWUsQ0FBRTthQUFqQkEsVUFBQUE7SUFBa0I7SUFFdEQsa0VBQWtFLEdBQ2xFLEFBQU9DLG9CQUFvQkMsSUFBWSxFQUFRO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUNSLGtCQUFrQixDQUFDaEIsUUFBUSxDQUFDd0IsT0FBTyxJQUFJLENBQUNSLGtCQUFrQixDQUFDZixJQUFJLENBQUN1QjtRQUMxRSxPQUFPLElBQUk7SUFDWjtJQUVBLDJEQUEyRCxHQUMzRCxBQUFPQyxVQUFVM0IsSUFBWSxFQUFFUSxJQUFZLEVBQUVQLFdBQVcsS0FBSyxFQUFRO1FBQ3BFLE1BQU0yQixRQUFRLElBQUksQ0FBQ1QsYUFBYSxDQUFDVSxHQUFHLENBQUNyQixTQUFTLElBQUlaO1FBQ2xEZ0MsTUFBTTdCLEdBQUcsQ0FBQ0MsTUFBTUM7UUFDaEIsSUFBSSxDQUFDa0IsYUFBYSxDQUFDVyxHQUFHLENBQUN0QixNQUFNb0I7UUFDN0IsT0FBTyxJQUFJO0lBQ1o7SUFFQTs7O0VBR0MsR0FDRCxBQUFPRyxlQUFlQyxJQUFZLEVBQVE7UUFDekMsSUFBSSxDQUFDWCxhQUFhLENBQUNsQixJQUFJLENBQUM2QjtRQUN4QixPQUFPLElBQUk7SUFDWjtJQUVBLDZFQUE2RSxHQUM3RSxBQUFPQyxVQUFVQyxNQUFxQixFQUFRO1FBQzdDLElBQUksQ0FBQ1osU0FBUyxDQUFDbkIsSUFBSSxDQUFDK0I7UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFQSxxRkFBcUYsR0FDckYsQUFBT0MsY0FBY0MsSUFBbUIsRUFBUTtRQUMvQyxJQUFJLENBQUNiLGFBQWEsQ0FBQ3BCLElBQUksQ0FBQ2lDO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRU9DLFFBQXNCO1FBQzVCLE1BQU1DLFVBQW9CO1lBQ3pCO1lBQ0E7U0FDQTtRQUVELEtBQUssTUFBTVosUUFBUSxJQUFJLENBQUNSLGtCQUFrQixDQUFFO1lBQzNDb0IsUUFBUW5DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRXVCLEtBQUssRUFBRSxDQUFDO1FBQ2pDO1FBRUFZLFFBQVFuQyxJQUFJLENBQ1gsZ0NBQ0Esd0RBQ0EsK0NBQ0EsaUVBQ0EsOENBQ0E7UUFHRCxLQUFLLE1BQU1vQyxLQUFLLElBQUksQ0FBQ2pCLFNBQVMsQ0FBRTtZQUMvQmdCLFFBQVFuQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVvQyxFQUFFQyxTQUFTLENBQUMsU0FBUyxFQUFFRCxFQUFFRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pFO1FBRUEsS0FBSyxNQUFNQyxLQUFLLElBQUksQ0FBQ25CLGFBQWEsQ0FBRTtZQUNuQ2UsUUFBUW5DLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRXVDLEVBQUVGLFNBQVMsQ0FBQyxTQUFTLEVBQUVFLEVBQUVELFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDakU7UUFFQSxLQUFLLE1BQU0sQ0FBQ2pDLE1BQU1vQixNQUFNLElBQUksSUFBSSxDQUFDVCxhQUFhLENBQUU7WUFDL0NtQixRQUFRbkMsSUFBSSxDQUFDeUIsTUFBTXJCLE1BQU0sQ0FBQ0M7UUFDM0I7UUFFQThCLFFBQVFuQyxJQUFJLENBQUM7UUFFYixNQUFNd0MsZUFBeUI7WUFDOUIsQ0FBQyxvQ0FBb0MsQ0FBQztZQUN0QyxDQUFDLG9DQUFvQyxDQUFDO2VBQ25DLElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ1QsR0FBRyxDQUFDLENBQUNnQyxJQUFNLENBQUMsRUFBRSxFQUFFQSxHQUFHO1lBQ3pDLENBQUMsaUVBQWlFLENBQUM7U0FDbkU7UUFFRCxJQUFJLElBQUksQ0FBQ3RCLFNBQVMsQ0FBQ3VCLE1BQU0sR0FBRyxHQUFHO1lBQzlCLE1BQU1DLFdBQVcsSUFBSSxDQUFDeEIsU0FBUyxDQUFDVixHQUFHLENBQUMsQ0FBQzJCLElBQU1BLEVBQUVDLFNBQVMsRUFBRTFCLElBQUksQ0FBQztZQUM3RCxNQUFNaUMsUUFBUSxJQUFJLENBQUN4QixhQUFhLENBQUNYLEdBQUcsQ0FBQyxDQUFDOEIsSUFBTUEsRUFBRUYsU0FBUyxFQUFFMUIsSUFBSSxDQUFDO1lBQzlENkIsYUFBYXhDLElBQUksQ0FDaEIsQ0FBQyw0QkFBNEIsRUFBRTJDLFNBQVMsa0JBQWtCLEVBQUVDLE1BQU0sSUFBSSxDQUFDO1FBRXpFO1FBRUFKLGFBQWF4QyxJQUFJLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQztRQUV2RCxNQUFNNkMsVUFBVTtlQUNaVjtZQUNIO1lBQ0E7WUFDQTtZQUNBLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDO2VBQ3ZFbUI7WUFDSCxDQUFDLFdBQVcsQ0FBQztZQUNiO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7U0FDQSxDQUFDN0IsSUFBSSxDQUFDO1FBRVAsT0FBTztZQUNOO2dCQUNDbUMsVUFBVTtnQkFDVkQ7WUFDRDtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -0,0 +1,60 @@
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==
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ const _nodepath = require("node:path");
7
+ const _commander = require("commander");
8
+ const _scaffold = require("./scaffold.js");
9
+ const program = new _commander.Command();
10
+ program.name("decohere").description("Scaffold a new Decohere project").argument("[directory]", "Target directory (default: current directory)", ".").option("-y, --yes", "Skip confirmation prompts").option("-t, --template <template>", "Project template: api (default) or cli").option("-d, --database <provider>", "Database provider to include (api only): typeorm").option("-i, --idp <provider>", "Identity provider to configure (api only): auth0").option("-p, --postman", "Configure a Postman workspace, collection, and environment").action(async (directory, opts)=>{
11
+ await (0, _scaffold.scaffold)((0, _nodepath.resolve)(directory), opts);
12
+ });
13
+ program.parse();
14
+
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBzY2FmZm9sZCB9IGZyb20gXCIuL3NjYWZmb2xkLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIilcblx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIlNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIilcblx0Lm9wdGlvbihcIi10LCAtLXRlbXBsYXRlIDx0ZW1wbGF0ZT5cIiwgXCJQcm9qZWN0IHRlbXBsYXRlOiBhcGkgKGRlZmF1bHQpIG9yIGNsaVwiKVxuXHQub3B0aW9uKFwiLWQsIC0tZGF0YWJhc2UgPHByb3ZpZGVyPlwiLCBcIkRhdGFiYXNlIHByb3ZpZGVyIHRvIGluY2x1ZGUgKGFwaSBvbmx5KTogdHlwZW9ybVwiKVxuXHQub3B0aW9uKFwiLWksIC0taWRwIDxwcm92aWRlcj5cIiwgXCJJZGVudGl0eSBwcm92aWRlciB0byBjb25maWd1cmUgKGFwaSBvbmx5KTogYXV0aDBcIilcblx0Lm9wdGlvbihcIi1wLCAtLXBvc3RtYW5cIiwgXCJDb25maWd1cmUgYSBQb3N0bWFuIHdvcmtzcGFjZSwgY29sbGVjdGlvbiwgYW5kIGVudmlyb25tZW50XCIpXG5cdC5hY3Rpb24oXG5cdFx0YXN5bmMgKFxuXHRcdFx0ZGlyZWN0b3J5OiBzdHJpbmcsXG5cdFx0XHRvcHRzOiB7XG5cdFx0XHRcdHllcz86IGJvb2xlYW47XG5cdFx0XHRcdHRlbXBsYXRlPzogXCJhcGlcIiB8IFwiY2xpXCI7XG5cdFx0XHRcdGRhdGFiYXNlPzogXCJ0eXBlb3JtXCI7XG5cdFx0XHRcdGlkcD86IFwiYXV0aDBcIjtcblx0XHRcdFx0cG9zdG1hbj86IGJvb2xlYW47XG5cdFx0XHR9LFxuXHRcdCkgPT4ge1xuXHRcdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0XHR9LFxuXHQpO1xuXG5wcm9ncmFtLnBhcnNlKCk7XG4iXSwibmFtZXMiOlsicHJvZ3JhbSIsIkNvbW1hbmQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhcmd1bWVudCIsIm9wdGlvbiIsImFjdGlvbiIsImRpcmVjdG9yeSIsIm9wdHMiLCJzY2FmZm9sZCIsInJlc29sdmUiLCJwYXJzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7MEJBQ3dCOzJCQUNBOzBCQUNDO0FBRXpCLE1BQU1BLFVBQVUsSUFBSUMsa0JBQU87QUFFM0JELFFBQ0VFLElBQUksQ0FBQyxZQUNMQyxXQUFXLENBQUMsbUNBQ1pDLFFBQVEsQ0FBQyxlQUFlLGlEQUFpRCxLQUN6RUMsTUFBTSxDQUFDLGFBQWEsNkJBQ3BCQSxNQUFNLENBQUMsNkJBQTZCLDBDQUNwQ0EsTUFBTSxDQUFDLDZCQUE2QixvREFDcENBLE1BQU0sQ0FBQyx3QkFBd0Isb0RBQy9CQSxNQUFNLENBQUMsaUJBQWlCLDhEQUN4QkMsTUFBTSxDQUNOLE9BQ0NDLFdBQ0FDO0lBUUEsTUFBTUMsSUFBQUEsa0JBQVEsRUFBQ0MsSUFBQUEsaUJBQU8sRUFBQ0gsWUFBWUM7QUFDcEM7QUFHRlIsUUFBUVcsS0FBSyJ9
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ClassModel", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ClassModel;
9
+ }
10
+ });
11
+ const _importmap = require("./import-map.js");
12
+ class ClassModel {
13
+ className;
14
+ fileName;
15
+ _imports = new _importmap.ImportMap();
16
+ _classDecorators = [];
17
+ _constructorParams = [];
18
+ _bodyClasses = [];
19
+ _methods = [];
20
+ constructor(className, fileName){
21
+ this.className = className;
22
+ this.fileName = fileName;
23
+ }
24
+ // ── imports ──────────────────────────────────────────────────────────────
25
+ /**
26
+ * Add named value imports from `pkg`.
27
+ * Called with no names, registers a side-effect `import "pkg"`.
28
+ */ addImport(pkg, ...names) {
29
+ this._imports.add(pkg, ...names);
30
+ return this;
31
+ }
32
+ /** Add named type-only imports from `pkg`. */ addTypeImport(pkg, ...names) {
33
+ this._imports.addType(pkg, ...names);
34
+ return this;
35
+ }
36
+ // ── class-level ──────────────────────────────────────────────────────────
37
+ /** Prepend a class-level decorator (goes above any already-registered ones). */ decorateClass(decorator) {
38
+ if (!this._classDecorators.includes(decorator)) {
39
+ this._classDecorators.unshift(decorator);
40
+ }
41
+ return this;
42
+ }
43
+ addBodyClass(def) {
44
+ this._bodyClasses.push(def);
45
+ return this;
46
+ }
47
+ addConstructorParam(param) {
48
+ this._constructorParams.push(param);
49
+ return this;
50
+ }
51
+ // ── methods ──────────────────────────────────────────────────────────────
52
+ defineMethod(def) {
53
+ this._methods.push({
54
+ name: def.name,
55
+ decorators: [
56
+ ...def.decorators
57
+ ],
58
+ isAsync: def.isAsync ?? false,
59
+ params: def.params ?? [],
60
+ body: def.body
61
+ });
62
+ return this;
63
+ }
64
+ /**
65
+ * Prepend a decorator onto an existing method.
66
+ * Silently ignored if `methodName` is not found, so features are
67
+ * resilient to controllers that don't expose a particular method.
68
+ */ decorateMethod(methodName, ...decorators) {
69
+ const method = this._methods.find((m)=>m.name === methodName);
70
+ if (method) method.decorators.unshift(...decorators);
71
+ return this;
72
+ }
73
+ // ── rendering ─────────────────────────────────────────────────────────────
74
+ render() {
75
+ const importLines = this._imports.render();
76
+ const bodyClassBlocks = this._bodyClasses.map((bc)=>{
77
+ const fields = bc.fields.map((f)=>`\t${f.decorator}\n\tpublic ${f.name}!: ${f.typeName};`).join("\n");
78
+ return `class ${bc.name} {\n${fields}\n}`;
79
+ });
80
+ const constructorParams = this._constructorParams.map((p)=>{
81
+ const prefix = p.paramDecorators.length > 0 ? `${p.paramDecorators.join(" ")} ` : "";
82
+ const access = `${p.isPrivate ? "private " : ""}${p.isReadonly ? "readonly " : ""}`;
83
+ return `\t\t${prefix}${access}${p.name}: ${p.typeName},`;
84
+ }).join("\n");
85
+ const methodBlocks = this._methods.map((m)=>{
86
+ const decorators = m.decorators.map((d)=>`\t${d}`).join("\n");
87
+ const params = m.params.map((p)=>p.decorator ? `${p.decorator} ${p.name}: ${p.typeName}` : `${p.name}: ${p.typeName}`).join(", ");
88
+ const asyncKw = m.isAsync ? "async " : "";
89
+ return `${decorators}\n\tpublic ${asyncKw}${m.name}(${params}) {\n\t\t${m.body}\n\t}`;
90
+ });
91
+ const sections = [
92
+ importLines.join("\n"),
93
+ ...bodyClassBlocks,
94
+ [
95
+ ...this._classDecorators,
96
+ `export class ${this.className} {`
97
+ ].join("\n"),
98
+ `\tpublic constructor(\n${constructorParams}\n\t) {}`,
99
+ ...methodBlocks,
100
+ "}"
101
+ ];
102
+ return `${sections.join("\n\n")}\n`;
103
+ }
104
+ }
105
+
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9kb21haW4vY2xhc3MtbW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW1wb3J0TWFwIH0gZnJvbSBcIi4vaW1wb3J0LW1hcC5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cnVjdG9yUGFyYW0ge1xuXHQvKiogZS5nLiBbXCJAaW5qZWN0KElQcmluY2lwYWxQcm92aWRlclRva2VuKVwiXSAqL1xuXHRwYXJhbURlY29yYXRvcnM6IHN0cmluZ1tdO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHR5cGVOYW1lOiBzdHJpbmc7XG5cdGlzUHJpdmF0ZTogYm9vbGVhbjtcblx0aXNSZWFkb25seTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RQYXJhbSB7XG5cdC8qKiBlLmcuIGBAUXVlcnkoXCJmaWx0ZXJcIilgICovXG5cdGRlY29yYXRvcj86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZERlZiB7XG5cdC8qKiBCYXNlIEhUVFAgZGVjb3JhdG9yKHMpLCBlLmcuIFtcIkBHZXQoKVwiXS4gUmVuZGVyZWQgYm90dG9tLW1vc3QuICovXG5cdGRlY29yYXRvcnM6IHN0cmluZ1tdO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGlzQXN5bmM/OiBib29sZWFuO1xuXHRwYXJhbXM/OiBNZXRob2RQYXJhbVtdO1xuXHRib2R5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9keUNsYXNzRmllbGQge1xuXHRkZWNvcmF0b3I6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvZHlDbGFzc0RlZiB7XG5cdG5hbWU6IHN0cmluZztcblx0ZmllbGRzOiBCb2R5Q2xhc3NGaWVsZFtdO1xufVxuXG5pbnRlcmZhY2UgTWV0aG9kIGV4dGVuZHMgUmVxdWlyZWQ8TWV0aG9kRGVmPiB7fVxuXG4vKipcbiAqIEEgbGl2ZSwgbXV0YWJsZSBtb2RlbCBvZiBhIGdlbmVyYXRlZCBUeXBlU2NyaXB0IGNsYXNzLlxuICpcbiAqIEZlYXR1cmVzIGNhbGwgdGhlIGZsdWVudCBBUEkgdG8gY29udHJpYnV0ZSBpbXBvcnRzLCBkZWNvcmF0b3JzLCBjb25zdHJ1Y3RvclxuICogcGFyYW1zLCBhbmQgbWV0aG9kIGRlY29yYXRvcnMuICBXaGVuIGFsbCBjb25maWd1cmUgcGhhc2VzIGFyZSBkb25lLCBgcmVuZGVyKClgXG4gKiBwcm9kdWNlcyB0aGUgZmluYWwgVHlwZVNjcmlwdCBzb3VyY2UuXG4gKlxuICogU3ViY2xhc3MgdG8gbW9kZWwgY29udHJvbGxlcnMsIHNlcnZpY2VzLCByZXBvc2l0b3JpZXMsIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIENsYXNzTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmc7XG5cdHB1YmxpYyByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG5cdHByb3RlY3RlZCByZWFkb25seSBfaW1wb3J0cyA9IG5ldyBJbXBvcnRNYXAoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfY2xhc3NEZWNvcmF0b3JzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jb25zdHJ1Y3RvclBhcmFtczogQ29uc3RydWN0b3JQYXJhbVtdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX2JvZHlDbGFzc2VzOiBCb2R5Q2xhc3NEZWZbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9tZXRob2RzOiBNZXRob2RbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihjbGFzc05hbWU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZykge1xuXHRcdHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXHRcdHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblx0fVxuXG5cdC8vIOKUgOKUgCBpbXBvcnRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdC8qKlxuXHQgKiBBZGQgbmFtZWQgdmFsdWUgaW1wb3J0cyBmcm9tIGBwa2dgLlxuXHQgKiBDYWxsZWQgd2l0aCBubyBuYW1lcywgcmVnaXN0ZXJzIGEgc2lkZS1lZmZlY3QgYGltcG9ydCBcInBrZ1wiYC5cblx0ICovXG5cdHB1YmxpYyBhZGRJbXBvcnQocGtnOiBzdHJpbmcsIC4uLm5hbWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuXHRcdHRoaXMuX2ltcG9ydHMuYWRkKHBrZywgLi4ubmFtZXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBuYW1lZCB0eXBlLW9ubHkgaW1wb3J0cyBmcm9tIGBwa2dgLiAqL1xuXHRwdWJsaWMgYWRkVHlwZUltcG9ydChwa2c6IHN0cmluZywgLi4ubmFtZXM6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0dGhpcy5faW1wb3J0cy5hZGRUeXBlKHBrZywgLi4ubmFtZXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Ly8g4pSA4pSAIGNsYXNzLWxldmVsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdC8qKiBQcmVwZW5kIGEgY2xhc3MtbGV2ZWwgZGVjb3JhdG9yIChnb2VzIGFib3ZlIGFueSBhbHJlYWR5LXJlZ2lzdGVyZWQgb25lcykuICovXG5cdHB1YmxpYyBkZWNvcmF0ZUNsYXNzKGRlY29yYXRvcjogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9jbGFzc0RlY29yYXRvcnMuaW5jbHVkZXMoZGVjb3JhdG9yKSkge1xuXHRcdFx0dGhpcy5fY2xhc3NEZWNvcmF0b3JzLnVuc2hpZnQoZGVjb3JhdG9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkQm9keUNsYXNzKGRlZjogQm9keUNsYXNzRGVmKTogdGhpcyB7XG5cdFx0dGhpcy5fYm9keUNsYXNzZXMucHVzaChkZWYpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZENvbnN0cnVjdG9yUGFyYW0ocGFyYW06IENvbnN0cnVjdG9yUGFyYW0pOiB0aGlzIHtcblx0XHR0aGlzLl9jb25zdHJ1Y3RvclBhcmFtcy5wdXNoKHBhcmFtKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIOKUgOKUgCBtZXRob2RzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHB1YmxpYyBkZWZpbmVNZXRob2QoZGVmOiBNZXRob2REZWYpOiB0aGlzIHtcblx0XHR0aGlzLl9tZXRob2RzLnB1c2goe1xuXHRcdFx0bmFtZTogZGVmLm5hbWUsXG5cdFx0XHRkZWNvcmF0b3JzOiBbLi4uZGVmLmRlY29yYXRvcnNdLFxuXHRcdFx0aXNBc3luYzogZGVmLmlzQXN5bmMgPz8gZmFsc2UsXG5cdFx0XHRwYXJhbXM6IGRlZi5wYXJhbXMgPz8gW10sXG5cdFx0XHRib2R5OiBkZWYuYm9keSxcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBQcmVwZW5kIGEgZGVjb3JhdG9yIG9udG8gYW4gZXhpc3RpbmcgbWV0aG9kLlxuXHQgKiBTaWxlbnRseSBpZ25vcmVkIGlmIGBtZXRob2ROYW1lYCBpcyBub3QgZm91bmQsIHNvIGZlYXR1cmVzIGFyZVxuXHQgKiByZXNpbGllbnQgdG8gY29udHJvbGxlcnMgdGhhdCBkb24ndCBleHBvc2UgYSBwYXJ0aWN1bGFyIG1ldGhvZC5cblx0ICovXG5cdHB1YmxpYyBkZWNvcmF0ZU1ldGhvZChtZXRob2ROYW1lOiBzdHJpbmcsIC4uLmRlY29yYXRvcnM6IHN0cmluZ1tdKTogdGhpcyB7XG5cdFx0Y29uc3QgbWV0aG9kID0gdGhpcy5fbWV0aG9kcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IG1ldGhvZE5hbWUpO1xuXHRcdGlmIChtZXRob2QpIG1ldGhvZC5kZWNvcmF0b3JzLnVuc2hpZnQoLi4uZGVjb3JhdG9ycyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyDilIDilIAgcmVuZGVyaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHB1YmxpYyByZW5kZXIoKTogc3RyaW5nIHtcblx0XHRjb25zdCBpbXBvcnRMaW5lcyA9IHRoaXMuX2ltcG9ydHMucmVuZGVyKCk7XG5cblx0XHRjb25zdCBib2R5Q2xhc3NCbG9ja3MgPSB0aGlzLl9ib2R5Q2xhc3Nlcy5tYXAoKGJjKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZHMgPSBiYy5maWVsZHNcblx0XHRcdFx0Lm1hcCgoZikgPT4gYFxcdCR7Zi5kZWNvcmF0b3J9XFxuXFx0cHVibGljICR7Zi5uYW1lfSE6ICR7Zi50eXBlTmFtZX07YClcblx0XHRcdFx0LmpvaW4oXCJcXG5cIik7XG5cdFx0XHRyZXR1cm4gYGNsYXNzICR7YmMubmFtZX0ge1xcbiR7ZmllbGRzfVxcbn1gO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgY29uc3RydWN0b3JQYXJhbXMgPSB0aGlzLl9jb25zdHJ1Y3RvclBhcmFtc1xuXHRcdFx0Lm1hcCgocCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmVmaXggPSBwLnBhcmFtRGVjb3JhdG9ycy5sZW5ndGggPiAwID8gYCR7cC5wYXJhbURlY29yYXRvcnMuam9pbihcIiBcIil9IGAgOiBcIlwiO1xuXHRcdFx0XHRjb25zdCBhY2Nlc3MgPSBgJHtwLmlzUHJpdmF0ZSA/IFwicHJpdmF0ZSBcIiA6IFwiXCJ9JHtwLmlzUmVhZG9ubHkgPyBcInJlYWRvbmx5IFwiIDogXCJcIn1gO1xuXHRcdFx0XHRyZXR1cm4gYFxcdFxcdCR7cHJlZml4fSR7YWNjZXNzfSR7cC5uYW1lfTogJHtwLnR5cGVOYW1lfSxgO1xuXHRcdFx0fSlcblx0XHRcdC5qb2luKFwiXFxuXCIpO1xuXG5cdFx0Y29uc3QgbWV0aG9kQmxvY2tzID0gdGhpcy5fbWV0aG9kcy5tYXAoKG0pID0+IHtcblx0XHRcdGNvbnN0IGRlY29yYXRvcnMgPSBtLmRlY29yYXRvcnMubWFwKChkKSA9PiBgXFx0JHtkfWApLmpvaW4oXCJcXG5cIik7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBtLnBhcmFtc1xuXHRcdFx0XHQubWFwKChwKSA9PlxuXHRcdFx0XHRcdHAuZGVjb3JhdG9yID8gYCR7cC5kZWNvcmF0b3J9ICR7cC5uYW1lfTogJHtwLnR5cGVOYW1lfWAgOiBgJHtwLm5hbWV9OiAke3AudHlwZU5hbWV9YCxcblx0XHRcdFx0KVxuXHRcdFx0XHQuam9pbihcIiwgXCIpO1xuXHRcdFx0Y29uc3QgYXN5bmNLdyA9IG0uaXNBc3luYyA/IFwiYXN5bmMgXCIgOiBcIlwiO1xuXHRcdFx0cmV0dXJuIGAke2RlY29yYXRvcnN9XFxuXFx0cHVibGljICR7YXN5bmNLd30ke20ubmFtZX0oJHtwYXJhbXN9KSB7XFxuXFx0XFx0JHttLmJvZHl9XFxuXFx0fWA7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBzZWN0aW9uczogc3RyaW5nW10gPSBbXG5cdFx0XHRpbXBvcnRMaW5lcy5qb2luKFwiXFxuXCIpLFxuXHRcdFx0Li4uYm9keUNsYXNzQmxvY2tzLFxuXHRcdFx0Wy4uLnRoaXMuX2NsYXNzRGVjb3JhdG9ycywgYGV4cG9ydCBjbGFzcyAke3RoaXMuY2xhc3NOYW1lfSB7YF0uam9pbihcIlxcblwiKSxcblx0XHRcdGBcXHRwdWJsaWMgY29uc3RydWN0b3IoXFxuJHtjb25zdHJ1Y3RvclBhcmFtc31cXG5cXHQpIHt9YCxcblx0XHRcdC4uLm1ldGhvZEJsb2Nrcyxcblx0XHRcdFwifVwiLFxuXHRcdF07XG5cblx0XHRyZXR1cm4gYCR7c2VjdGlvbnMuam9pbihcIlxcblxcblwiKX1cXG5gO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiQ2xhc3NNb2RlbCIsImNsYXNzTmFtZSIsImZpbGVOYW1lIiwiX2ltcG9ydHMiLCJJbXBvcnRNYXAiLCJfY2xhc3NEZWNvcmF0b3JzIiwiX2NvbnN0cnVjdG9yUGFyYW1zIiwiX2JvZHlDbGFzc2VzIiwiX21ldGhvZHMiLCJhZGRJbXBvcnQiLCJwa2ciLCJuYW1lcyIsImFkZCIsImFkZFR5cGVJbXBvcnQiLCJhZGRUeXBlIiwiZGVjb3JhdGVDbGFzcyIsImRlY29yYXRvciIsImluY2x1ZGVzIiwidW5zaGlmdCIsImFkZEJvZHlDbGFzcyIsImRlZiIsInB1c2giLCJhZGRDb25zdHJ1Y3RvclBhcmFtIiwicGFyYW0iLCJkZWZpbmVNZXRob2QiLCJuYW1lIiwiZGVjb3JhdG9ycyIsImlzQXN5bmMiLCJwYXJhbXMiLCJib2R5IiwiZGVjb3JhdGVNZXRob2QiLCJtZXRob2ROYW1lIiwibWV0aG9kIiwiZmluZCIsIm0iLCJyZW5kZXIiLCJpbXBvcnRMaW5lcyIsImJvZHlDbGFzc0Jsb2NrcyIsIm1hcCIsImJjIiwiZmllbGRzIiwiZiIsInR5cGVOYW1lIiwiam9pbiIsImNvbnN0cnVjdG9yUGFyYW1zIiwicCIsInByZWZpeCIsInBhcmFtRGVjb3JhdG9ycyIsImxlbmd0aCIsImFjY2VzcyIsImlzUHJpdmF0ZSIsImlzUmVhZG9ubHkiLCJtZXRob2RCbG9ja3MiLCJkIiwiYXN5bmNLdyIsInNlY3Rpb25zIl0sIm1hcHBpbmdzIjoiOzs7OytCQWlEYUE7OztlQUFBQTs7OzJCQWpEYTtBQWlEbkIsTUFBTUE7SUFDSUMsVUFBa0I7SUFDbEJDLFNBQWlCO0lBRWRDLFdBQVcsSUFBSUMsb0JBQVMsR0FBRztJQUM3QkMsbUJBQTZCLEVBQUUsQ0FBQztJQUNoQ0MscUJBQXlDLEVBQUUsQ0FBQztJQUM1Q0MsZUFBK0IsRUFBRSxDQUFDO0lBQ2xDQyxXQUFxQixFQUFFLENBQUM7SUFFekMsWUFBbUJQLFNBQWlCLEVBQUVDLFFBQWdCLENBQUU7UUFDdkQsSUFBSSxDQUFDRCxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsUUFBUSxHQUFHQTtJQUNqQjtJQUVBLDRFQUE0RTtJQUU1RTs7O0VBR0MsR0FDRCxBQUFPTyxVQUFVQyxHQUFXLEVBQUUsR0FBR0MsS0FBZSxFQUFRO1FBQ3ZELElBQUksQ0FBQ1IsUUFBUSxDQUFDUyxHQUFHLENBQUNGLFFBQVFDO1FBQzFCLE9BQU8sSUFBSTtJQUNaO0lBRUEsNENBQTRDLEdBQzVDLEFBQU9FLGNBQWNILEdBQVcsRUFBRSxHQUFHQyxLQUFlLEVBQVE7UUFDM0QsSUFBSSxDQUFDUixRQUFRLENBQUNXLE9BQU8sQ0FBQ0osUUFBUUM7UUFDOUIsT0FBTyxJQUFJO0lBQ1o7SUFFQSw0RUFBNEU7SUFFNUUsOEVBQThFLEdBQzlFLEFBQU9JLGNBQWNDLFNBQWlCLEVBQVE7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQ1gsZ0JBQWdCLENBQUNZLFFBQVEsQ0FBQ0QsWUFBWTtZQUMvQyxJQUFJLENBQUNYLGdCQUFnQixDQUFDYSxPQUFPLENBQUNGO1FBQy9CO1FBQ0EsT0FB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
@@ -0,0 +1,74 @@
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 COMPOSE_KEY () {
13
+ return COMPOSE_KEY;
14
+ },
15
+ get ComposeModel () {
16
+ return ComposeModel;
17
+ }
18
+ });
19
+ const _context = require("./context.js");
20
+ const COMPOSE_KEY = (0, _context.modelKey)("compose");
21
+ class ComposeModel {
22
+ _services = new Map();
23
+ _volumes = new Set();
24
+ addService(name, config) {
25
+ this._services.set(name, config);
26
+ return this;
27
+ }
28
+ addVolume(name) {
29
+ this._volumes.add(name);
30
+ return this;
31
+ }
32
+ render() {
33
+ const lines = [
34
+ "services:"
35
+ ];
36
+ for (const [name, svc] of this._services){
37
+ lines.push(` ${name}:`);
38
+ if (svc.build) lines.push(` build: ${svc.build}`);
39
+ if (svc.image) lines.push(` image: ${svc.image}`);
40
+ if (svc.command) lines.push(` command: ${svc.command}`);
41
+ if (svc.restart) lines.push(` restart: ${svc.restart}`);
42
+ if (svc.env_file && svc.env_file.length > 0) {
43
+ lines.push(" env_file:");
44
+ for (const f of svc.env_file)lines.push(` - ${f}`);
45
+ }
46
+ if (svc.environment && Object.keys(svc.environment).length > 0) {
47
+ lines.push(" environment:");
48
+ for (const [k, v] of Object.entries(svc.environment)){
49
+ lines.push(` ${k}: ${v}`);
50
+ }
51
+ }
52
+ if (svc.ports && svc.ports.length > 0) {
53
+ lines.push(" ports:");
54
+ for (const p of svc.ports)lines.push(` - "${p}"`);
55
+ }
56
+ if (svc.volumes && svc.volumes.length > 0) {
57
+ lines.push(" volumes:");
58
+ for (const v of svc.volumes)lines.push(` - ${v}`);
59
+ }
60
+ if (svc.depends_on && svc.depends_on.length > 0) {
61
+ lines.push(" depends_on:");
62
+ for (const d of svc.depends_on)lines.push(` - ${d}`);
63
+ }
64
+ }
65
+ if (this._volumes.size > 0) {
66
+ lines.push("");
67
+ lines.push("volumes:");
68
+ for (const v of this._volumes)lines.push(` ${v}:`);
69
+ }
70
+ return `${lines.join("\n")}\n`;
71
+ }
72
+ }
73
+
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9kb21haW4vY29tcG9zZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbEtleSB9IGZyb20gXCIuL2NvbnRleHQuanNcIjtcblxuZXhwb3J0IGNvbnN0IENPTVBPU0VfS0VZID0gbW9kZWxLZXk8Q29tcG9zZU1vZGVsPihcImNvbXBvc2VcIik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zZVNlcnZpY2Uge1xuXHRidWlsZD86IHN0cmluZztcblx0aW1hZ2U/OiBzdHJpbmc7XG5cdGVudl9maWxlPzogc3RyaW5nW107XG5cdGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0cG9ydHM/OiBzdHJpbmdbXTtcblx0dm9sdW1lcz86IHN0cmluZ1tdO1xuXHRjb21tYW5kPzogc3RyaW5nO1xuXHRyZXN0YXJ0Pzogc3RyaW5nO1xuXHRkZXBlbmRzX29uPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTGl2ZSBidWlsZGVyIGZvciBgZG9ja2VyLWNvbXBvc2UueW1sYC5cbiAqXG4gKiBGZWF0dXJlcyBjYWxsIGBhZGRTZXJ2aWNlYCAvIGBhZGRWb2x1bWVgIGluIHRoZWlyIGBjb25maWd1cmVgIHBoYXNlcy5cbiAqIFRoZSBkZXZjb250YWluZXIgYHJlbmRlcmAgcGhhc2UgY2FsbHMgYHJlbmRlcigpYCBhbmQgd3JpdGVzIHRoZSBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9zZU1vZGVsIHtcblx0cHJpdmF0ZSByZWFkb25seSBfc2VydmljZXM6IE1hcDxzdHJpbmcsIENvbXBvc2VTZXJ2aWNlPiA9IG5ldyBNYXAoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfdm9sdW1lczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0cHVibGljIGFkZFNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25maWc6IENvbXBvc2VTZXJ2aWNlKTogdGhpcyB7XG5cdFx0dGhpcy5fc2VydmljZXMuc2V0KG5hbWUsIGNvbmZpZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkVm9sdW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3ZvbHVtZXMuYWRkKG5hbWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcigpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcInNlcnZpY2VzOlwiXTtcblxuXHRcdGZvciAoY29uc3QgW25hbWUsIHN2Y10gb2YgdGhpcy5fc2VydmljZXMpIHtcblx0XHRcdGxpbmVzLnB1c2goYCAgJHtuYW1lfTpgKTtcblx0XHRcdGlmIChzdmMuYnVpbGQpIGxpbmVzLnB1c2goYCAgICBidWlsZDogJHtzdmMuYnVpbGR9YCk7XG5cdFx0XHRpZiAoc3ZjLmltYWdlKSBsaW5lcy5wdXNoKGAgICAgaW1hZ2U6ICR7c3ZjLmltYWdlfWApO1xuXHRcdFx0aWYgKHN2Yy5jb21tYW5kKSBsaW5lcy5wdXNoKGAgICAgY29tbWFuZDogJHtzdmMuY29tbWFuZH1gKTtcblx0XHRcdGlmIChzdmMucmVzdGFydCkgbGluZXMucHVzaChgICAgIHJlc3RhcnQ6ICR7c3ZjLnJlc3RhcnR9YCk7XG5cblx0XHRcdGlmIChzdmMuZW52X2ZpbGUgJiYgc3ZjLmVudl9maWxlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBlbnZfZmlsZTpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgZiBvZiBzdmMuZW52X2ZpbGUpIGxpbmVzLnB1c2goYCAgICAgIC0gJHtmfWApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3ZjLmVudmlyb25tZW50ICYmIE9iamVjdC5rZXlzKHN2Yy5lbnZpcm9ubWVudCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIGVudmlyb25tZW50OlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc3ZjLmVudmlyb25tZW50KSkge1xuXHRcdFx0XHRcdGxpbmVzLnB1c2goYCAgICAgICR7a306ICR7dn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3ZjLnBvcnRzICYmIHN2Yy5wb3J0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgcG9ydHM6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHAgb2Ygc3ZjLnBvcnRzKSBsaW5lcy5wdXNoKGAgICAgICAtIFwiJHtwfVwiYCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMudm9sdW1lcyAmJiBzdmMudm9sdW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgdm9sdW1lczpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgdiBvZiBzdmMudm9sdW1lcykgbGluZXMucHVzaChgICAgICAgLSAke3Z9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZGVwZW5kc19vbiAmJiBzdmMuZGVwZW5kc19vbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZGVwZW5kc19vbjpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgZCBvZiBzdmMuZGVwZW5kc19vbikgbGluZXMucHVzaChgICAgICAgLSAke2R9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3ZvbHVtZXMuc2l6ZSA+IDApIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIik7XG5cdFx0XHRsaW5lcy5wdXNoKFwidm9sdW1lczpcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHYgb2YgdGhpcy5fdm9sdW1lcykgbGluZXMucHVzaChgICAke3Z9OmApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJDT01QT1NFX0tFWSIsIkNvbXBvc2VNb2RlbCIsIm1vZGVsS2V5IiwiX3NlcnZpY2VzIiwiTWFwIiwiX3ZvbHVtZXMiLCJTZXQiLCJhZGRTZXJ2aWNlIiwibmFtZSIsImNvbmZpZyIsInNldCIsImFkZFZvbHVtZSIsImFkZCIsInJlbmRlciIsImxpbmVzIiwic3ZjIiwicHVzaCIsImJ1aWxkIiwiaW1hZ2UiLCJjb21tYW5kIiwicmVzdGFydCIsImVudl9maWxlIiwibGVuZ3RoIiwiZiIsImVudmlyb25tZW50IiwiT2JqZWN0Iiwia2V5cyIsImsiLCJ2IiwiZW50cmllcyIsInBvcnRzIiwicCIsInZvbHVtZXMiLCJkZXBlbmRzX29uIiwiZCIsInNpemUiLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQUVhQTtlQUFBQTs7UUFvQkFDO2VBQUFBOzs7eUJBdEJZO0FBRWxCLE1BQU1ELGNBQWNFLElBQUFBLGlCQUFRLEVBQWU7QUFvQjNDLE1BQU1EO0lBQ0tFLFlBQXlDLElBQUlDLE1BQU07SUFDbkRDLFdBQXdCLElBQUlDLE1BQU07SUFFNUNDLFdBQVdDLElBQVksRUFBRUMsTUFBc0IsRUFBUTtRQUM3RCxJQUFJLENBQUNOLFNBQVMsQ0FBQ08sR0FBRyxDQUFDRixNQUFNQztRQUN6QixPQUFPLElBQUk7SUFDWjtJQUVPRSxVQUFVSCxJQUFZLEVBQVE7UUFDcEMsSUFBSSxDQUFDSCxRQUFRLENBQUNPLEdBQUcsQ0FBQ0o7UUFDbEIsT0FBTyxJQUFJO0lBQ1o7SUFFT0ssU0FBaUI7UUFDdkIsTUFBTUMsUUFBa0I7WUFBQztTQUFZO1FBRXJDLEtBQUssTUFBTSxDQUFDTixNQUFNTyxJQUFJLElBQUksSUFBSSxDQUFDWixTQUFTLENBQUU7WUFDekNXLE1BQU1FLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRVIsS0FBSyxDQUFDLENBQUM7WUFDdkIsSUFBSU8sSUFBSUUsS0FBSyxFQUFFSCxNQUFNRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUVELElBQUlFLEtBQUssRUFBRTtZQUNuRCxJQUFJRixJQUFJRyxLQUFLLEVBQUVKLE1BQU1FLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRUQsSUFBSUcsS0FBSyxFQUFFO1lBQ25ELElBQUlILElBQUlJLE9BQU8sRUFBRUwsTUFBTUUsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUFFRCxJQUFJSSxPQUFPLEVBQUU7WUFDekQsSUFBSUosSUFBSUssT0FBTyxFQUFFTixNQUFNRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUVELElBQUlLLE9BQU8sRUFBRTtZQUV6RCxJQUFJTCxJQUFJTSxRQUFRLElBQUlOLElBQUlNLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLEdBQUc7Z0JBQzVDUixNQUFNRSxJQUFJLENBQUM7Z0JBQ1gsS0FBSyxNQUFNTyxLQUFLUixJQUFJTSxRQUFRLENBQUVQLE1BQU1FLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRU8sR0FBRztZQUN4RDtZQUVBLElBQUlSLElBQUlTLFdBQVcsSUFBSUMsT0FBT0MsSUFBSSxDQUFDWCxJQUFJUyxXQUFXLEVBQUVGLE1BQU0sR0FBRyxHQUFHO2dCQUMvRFIsTUFBTUUsSUFBSSxDQUFDO2dCQUNYLEtBQUssTUFBTSxDQUFDVyxHQUFHQyxFQUFFLElBQUlILE9BQU9JLE9BQU8sQ0FBQ2QsSUFBSVMsV0FBVyxFQUFHO29CQUNyRFYsTUFBTUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFVyxFQUFFLEVBQUUsRUFBRUMsR0FBRztnQkFDOUI7WUFDRDtZQUVBLElBQUliLElBQUllLEtBQUssSUFBSWYsSUFBSWUsS0FBSyxDQUFDUixNQUFNLEdBQUcsR0FBRztnQkFDdENSLE1BQU1FLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU1lLEtBQUtoQixJQUFJZSxLQUFLLENBQUVoQixNQUFNRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUVlLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZEO1lBRUEsSUFBSWhCLElBQUlpQixPQUFPLElBQUlqQixJQUFJaUIsT0FBTyxDQUFDVixNQUFNLEdBQUcsR0FBRztnQkFDMUNSLE1BQU1FLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU1ZLEtBQUtiLElBQUlpQixPQUFPLENBQUVsQixNQUFNRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUVZLEdBQUc7WUFDdkQ7WUFFQSxJQUFJYixJQUFJa0IsVUFBVSxJQUFJbEIsSUFBSWtCLFVBQVUsQ0FBQ1gsTUFBTSxHQUFHLEdBQUc7Z0JBQ2hEUixNQUFNRSxJQUFJLENBQUM7Z0JBQ1gsS0FBSyxNQUFNa0IsS0FBS25CLElBQUlrQixVQUFVLENBQUVuQixNQUFNRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUVrQixHQUFHO1lBQzFEO1FBQ0Q7UUFFQSxJQUFJLElBQUksQ0FBQzdCLFFBQVEsQ0FBQzhCLElBQUksR0FBRyxHQUFHO1lBQzNCckIsTUFBTUUsSUFBSSxDQUFDO1lBQ1hGLE1BQU1FLElBQUksQ0FBQztZQUNYLEtBQUssTUFBTVksS0FBSyxJQUFJLENBQUN2QixRQUFRLENBQUVTLE1BQU1FLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRVksRUFBRSxDQUFDLENBQUM7UUFDcEQ7UUFFQSxPQUFPLEdBQUdkLE1BQU1zQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0I7QUFDRCJ9
@@ -0,0 +1,53 @@
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 FeatureModelStore () {
13
+ return FeatureModelStore;
14
+ },
15
+ get createContext () {
16
+ return createContext;
17
+ },
18
+ get modelKey () {
19
+ return modelKey;
20
+ }
21
+ });
22
+ const _nodepath = require("node:path");
23
+ function modelKey(name) {
24
+ return {
25
+ _sym: Symbol(name)
26
+ };
27
+ }
28
+ class FeatureModelStore {
29
+ _store;
30
+ constructor(store){
31
+ this._store = store ?? new Map();
32
+ }
33
+ get(key) {
34
+ return this._store.get(key._sym);
35
+ }
36
+ set(key, value) {
37
+ const next = new Map(this._store);
38
+ next.set(key._sym, value);
39
+ return new FeatureModelStore(next);
40
+ }
41
+ }
42
+ function createContext(targetDir, opts, template = "api") {
43
+ return {
44
+ projectName: (0, _nodepath.basename)(targetDir),
45
+ targetDir,
46
+ opts,
47
+ template,
48
+ models: new FeatureModelStore(),
49
+ controllers: []
50
+ };
51
+ }
52
+
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9kb21haW4vY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ2xhc3NNb2RlbCB9IGZyb20gXCIuL2NsYXNzLW1vZGVsLmpzXCI7XG5cbi8qKiBUeXBlLXNhZmUga2V5IGZvciBhIHZhbHVlIGluIHRoZSBGZWF0dXJlTW9kZWxTdG9yZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZU1vZGVsS2V5PFQ+IHtcblx0cmVhZG9ubHkgX3N5bTogc3ltYm9sO1xuXHRyZWFkb25seSBfdHlwZT86IFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbEtleTxUPihuYW1lPzogc3RyaW5nKTogRmVhdHVyZU1vZGVsS2V5PFQ+IHtcblx0cmV0dXJuIHsgX3N5bTogU3ltYm9sKG5hbWUpIH07XG59XG5cbi8qKlxuICogSW1tdXRhYmxlIHR5cGVkIHN0b3JlIG9mIGZlYXR1cmUgbW9kZWxzLiBFYWNoIGZlYXR1cmUgZGVmaW5lcyBpdHMgb3duIGtleXNcbiAqICh0eXBlZCB2aWEgYG1vZGVsS2V5PFQ+KClgKSBhbmQgd3JpdGVzIHRvIC8gcmVhZHMgZnJvbSB0aGUgc3RvcmUgZHVyaW5nIHRoZVxuICogYGNvbmZpZ3VyZWAgYW5kIGByZW5kZXJgIHBoYXNlcy4gVGhlIHN0b3JlIGlzIHRoZSBvbmx5IG1lY2hhbmlzbSBieSB3aGljaFxuICogZmVhdHVyZXMgY29tbXVuaWNhdGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBGZWF0dXJlTW9kZWxTdG9yZSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3N0b3JlOiBSZWFkb25seU1hcDxzeW1ib2wsIHVua25vd24+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihzdG9yZT86IFJlYWRvbmx5TWFwPHN5bWJvbCwgdW5rbm93bj4pIHtcblx0XHR0aGlzLl9zdG9yZSA9IHN0b3JlID8/IG5ldyBNYXAoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQ8VD4oa2V5OiBGZWF0dXJlTW9kZWxLZXk8VD4pOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RvcmUuZ2V0KGtleS5fc3ltKSBhcyBUIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIHNldDxUPihrZXk6IEZlYXR1cmVNb2RlbEtleTxUPiwgdmFsdWU6IFQpOiBGZWF0dXJlTW9kZWxTdG9yZSB7XG5cdFx0Y29uc3QgbmV4dCA9IG5ldyBNYXAodGhpcy5fc3RvcmUpO1xuXHRcdG5leHQuc2V0KGtleS5fc3ltLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIG5ldyBGZWF0dXJlTW9kZWxTdG9yZShuZXh0KTtcblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYWZmb2xkT3B0aW9ucyB7XG5cdHllcz86IGJvb2xlYW47XG5cdHRlbXBsYXRlPzogXCJhcGlcIiB8IFwiY2xpXCI7XG5cdGRhdGFiYXNlPzogXCJ0eXBlb3JtXCI7XG5cdGlkcD86IFwiYXV0aDBcIjtcblx0cG9zdG1hbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NhZmZvbGRDb250ZXh0IHtcblx0cHJvamVjdE5hbWU6IHN0cmluZztcblx0dGFyZ2V0RGlyOiBzdHJpbmc7XG5cdG9wdHM6IFNjYWZmb2xkT3B0aW9ucztcblx0dGVtcGxhdGU6IFwiYXBpXCIgfCBcImNsaVwiO1xuXHRtb2RlbHM6IEZlYXR1cmVNb2RlbFN0b3JlO1xuXHQvKiogTGl2ZSBjb250cm9sbGVyIG1vZGVscyB0aGF0IGZlYXR1cmVzIGNvbnRyaWJ1dGUgdG8gZHVyaW5nIGNvbmZpZ3VyZS4gKi9cblx0Y29udHJvbGxlcnM6IENsYXNzTW9kZWxbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoXG5cdHRhcmdldERpcjogc3RyaW5nLFxuXHRvcHRzOiBTY2FmZm9sZE9wdGlvbnMsXG5cdHRlbXBsYXRlOiBcImFwaVwiIHwgXCJjbGlcIiA9IFwiYXBpXCIsXG4pOiBTY2FmZm9sZENvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdHByb2plY3ROYW1lOiBiYXNlbmFtZSh0YXJnZXREaXIpLFxuXHRcdHRhcmdldERpcixcblx0XHRvcHRzLFxuXHRcdHRlbXBsYXRlLFxuXHRcdG1vZGVsczogbmV3IEZlYXR1cmVNb2RlbFN0b3JlKCksXG5cdFx0Y29udHJvbGxlcnM6IFtdLFxuXHR9O1xufVxuIl0sIm5hbWVzIjpbIkZlYXR1cmVNb2RlbFN0b3JlIiwiY3JlYXRlQ29udGV4dCIsIm1vZGVsS2V5IiwibmFtZSIsIl9zeW0iLCJTeW1ib2wiLCJfc3RvcmUiLCJzdG9yZSIsIk1hcCIsImdldCIsImtleSIsInNldCIsInZhbHVlIiwibmV4dCIsInRhcmdldERpciIsIm9wdHMiLCJ0ZW1wbGF0ZSIsInByb2plY3ROYW1lIiwiYmFzZW5hbWUiLCJtb2RlbHMiLCJjb250cm9sbGVycyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFtQmFBO2VBQUFBOztRQW9DR0M7ZUFBQUE7O1FBOUNBQztlQUFBQTs7OzBCQVRTO0FBU2xCLFNBQVNBLFNBQVlDLElBQWE7SUFDeEMsT0FBTztRQUFFQyxNQUFNQyxPQUFPRjtJQUFNO0FBQzdCO0FBUU8sTUFBTUg7SUFDS00sT0FBcUM7SUFFdEQsWUFBbUJDLEtBQW9DLENBQUU7UUFDeEQsSUFBSSxDQUFDRCxNQUFNLEdBQUdDLFNBQVMsSUFBSUM7SUFDNUI7SUFFT0MsSUFBT0MsR0FBdUIsRUFBaUI7UUFDckQsT0FBTyxJQUFJLENBQUNKLE1BQU0sQ0FBQ0csR0FBRyxDQUFDQyxJQUFJTixJQUFJO0lBQ2hDO0lBRU9PLElBQU9ELEdBQXVCLEVBQUVFLEtBQVEsRUFBcUI7UUFDbkUsTUFBTUMsT0FBTyxJQUFJTCxJQUFJLElBQUksQ0FBQ0YsTUFBTTtRQUNoQ08sS0FBS0YsR0FBRyxDQUFDRCxJQUFJTixJQUFJLEVBQUVRO1FBQ25CLE9BQU8sSUFBSVosa0JBQWtCYTtJQUM5QjtBQUNEO0FBb0JPLFNBQVNaLGNBQ2ZhLFNBQWlCLEVBQ2pCQyxJQUFxQixFQUNyQkMsV0FBMEIsS0FBSztJQUUvQixPQUFPO1FBQ05DLGFBQWFDLElBQUFBLGtCQUFRLEVBQUNKO1FBQ3RCQTtRQUNBQztRQUNBQztRQUNBRyxRQUFRLElBQUluQjtRQUNab0IsYUFBYSxFQUFFO0lBQ2hCO0FBQ0QifQ==
@@ -0,0 +1,116 @@
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 DEVCONTAINER_KEY () {
13
+ return DEVCONTAINER_KEY;
14
+ },
15
+ get DevcontainerModel () {
16
+ return DevcontainerModel;
17
+ }
18
+ });
19
+ const _context = require("./context.js");
20
+ const _dockerfilemodel = require("./dockerfile.model.js");
21
+ const DEVCONTAINER_KEY = (0, _context.modelKey)("devcontainer");
22
+ class DevcontainerModel {
23
+ _name;
24
+ _image;
25
+ _composeFile = null;
26
+ _composeService = "app";
27
+ _dockerfile = null;
28
+ _extensions = [];
29
+ _ports = [];
30
+ _postCreateCommands = [];
31
+ _postStartCommands = [];
32
+ _devcontainerFeatures = new Map();
33
+ constructor(name, image = "node:24"){
34
+ this._name = name;
35
+ this._image = image;
36
+ }
37
+ get image() {
38
+ return this._image;
39
+ }
40
+ setImage(image) {
41
+ this._image = image;
42
+ return this;
43
+ }
44
+ /** Switch to Docker Compose mode. Call from a feature that adds a compose service. */ useCompose(file = "docker-compose.yml", service = "devcontainer") {
45
+ this._composeFile = file;
46
+ this._composeService = service;
47
+ this._dockerfile = new _dockerfilemodel.DockerfileModel();
48
+ return this;
49
+ }
50
+ /** The Dockerfile model, available only when in compose mode. */ get dockerfile() {
51
+ return this._dockerfile;
52
+ }
53
+ addExtension(...ids) {
54
+ for (const id of ids){
55
+ if (!this._extensions.includes(id)) this._extensions.push(id);
56
+ }
57
+ return this;
58
+ }
59
+ forwardPort(...ports) {
60
+ for (const port of ports){
61
+ if (!this._ports.includes(port)) this._ports.push(port);
62
+ }
63
+ return this;
64
+ }
65
+ addPostCreateCommand(cmd) {
66
+ if (!this._postCreateCommands.includes(cmd)) this._postCreateCommands.push(cmd);
67
+ return this;
68
+ }
69
+ addPostStartCommand(cmd) {
70
+ if (!this._postStartCommands.includes(cmd)) this._postStartCommands.push(cmd);
71
+ return this;
72
+ }
73
+ /** Add a devcontainer Feature, e.g. `ghcr.io/devcontainers/features/node:1`. */ addFeature(id, options = {}) {
74
+ this._devcontainerFeatures.set(id, options);
75
+ return this;
76
+ }
77
+ render() {
78
+ const obj = {
79
+ name: this._name
80
+ };
81
+ if (this._composeFile) {
82
+ obj.dockerComposeFile = [
83
+ this._composeFile
84
+ ];
85
+ obj.service = this._composeService;
86
+ obj.workspaceFolder = "/workspace";
87
+ obj.mounts = [
88
+ "source=..,target=/workspace,type=bind,consistency=cached"
89
+ ];
90
+ } else {
91
+ obj.image = this._image;
92
+ }
93
+ if (this._devcontainerFeatures.size > 0) {
94
+ obj.features = Object.fromEntries(this._devcontainerFeatures);
95
+ }
96
+ if (this._extensions.length > 0) {
97
+ obj.customizations = {
98
+ vscode: {
99
+ extensions: this._extensions
100
+ }
101
+ };
102
+ }
103
+ if (this._ports.length > 0) {
104
+ obj.forwardPorts = this._ports;
105
+ }
106
+ if (this._postCreateCommands.length > 0) {
107
+ obj.postCreateCommand = this._postCreateCommands.length === 1 ? this._postCreateCommands[0] : this._postCreateCommands.join(" && ");
108
+ }
109
+ if (this._postStartCommands.length > 0) {
110
+ obj.postStartCommand = this._postStartCommands.length === 1 ? this._postStartCommands[0] : this._postStartCommands.join(" && ");
111
+ }
112
+ return `${JSON.stringify(obj, null, 2)}\n`;
113
+ }
114
+ }
115
+
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9kb21haW4vZGV2Y29udGFpbmVyLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsS2V5IH0gZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuaW1wb3J0IHsgRG9ja2VyZmlsZU1vZGVsIH0gZnJvbSBcIi4vZG9ja2VyZmlsZS5tb2RlbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgREVWQ09OVEFJTkVSX0tFWSA9IG1vZGVsS2V5PERldmNvbnRhaW5lck1vZGVsPihcImRldmNvbnRhaW5lclwiKTtcblxuLyoqXG4gKiBMaXZlIGJ1aWxkZXIgZm9yIGAuZGV2Y29udGFpbmVyL2RldmNvbnRhaW5lci5qc29uYC5cbiAqXG4gKiBUaGUgYXBpLWNvcmUgZmVhdHVyZSBjcmVhdGVzIGFuIGluc3RhbmNlIGluIGl0cyBgY29uZmlndXJlYCBwaGFzZS5cbiAqIE90aGVyIGZlYXR1cmVzICh0eXBlb3JtLCBhdXRoMCwg4oCmKSBjYWxsIGBhZGRFeHRlbnNpb25gIC8gYGFkZEZlYXR1cmVgIC8gZXRjLlxuICogaW4gdGhlaXIgb3duIGBjb25maWd1cmVgIHBoYXNlcy4gIFRoZSBkZXZjb250YWluZXIgYHJlbmRlcmAgcGhhc2UgY2FsbHMgYHJlbmRlcigpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIERldmNvbnRhaW5lck1vZGVsIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuXHRwcml2YXRlIF9pbWFnZTogc3RyaW5nO1xuXHRwcml2YXRlIF9jb21wb3NlRmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX2NvbXBvc2VTZXJ2aWNlID0gXCJhcHBcIjtcblx0cHJpdmF0ZSBfZG9ja2VyZmlsZTogRG9ja2VyZmlsZU1vZGVsIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2V4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BvcnRzOiBudW1iZXJbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wb3N0Q3JlYXRlQ29tbWFuZHM6IHN0cmluZ1tdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Bvc3RTdGFydENvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXZjb250YWluZXJGZWF0dXJlczogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gbmV3IE1hcCgpO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGltYWdlID0gXCJub2RlOjI0XCIpIHtcblx0XHR0aGlzLl9uYW1lID0gbmFtZTtcblx0XHR0aGlzLl9pbWFnZSA9IGltYWdlO1xuXHR9XG5cblx0cHVibGljIGdldCBpbWFnZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9pbWFnZTtcblx0fVxuXG5cdHB1YmxpYyBzZXRJbWFnZShpbWFnZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5faW1hZ2UgPSBpbWFnZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBTd2l0Y2ggdG8gRG9ja2VyIENvbXBvc2UgbW9kZS4gQ2FsbCBmcm9tIGEgZmVhdHVyZSB0aGF0IGFkZHMgYSBjb21wb3NlIHNlcnZpY2UuICovXG5cdHB1YmxpYyB1c2VDb21wb3NlKGZpbGUgPSBcImRvY2tlci1jb21wb3NlLnltbFwiLCBzZXJ2aWNlID0gXCJkZXZjb250YWluZXJcIik6IHRoaXMge1xuXHRcdHRoaXMuX2NvbXBvc2VGaWxlID0gZmlsZTtcblx0XHR0aGlzLl9jb21wb3NlU2VydmljZSA9IHNlcnZpY2U7XG5cdFx0dGhpcy5fZG9ja2VyZmlsZSA9IG5ldyBEb2NrZXJmaWxlTW9kZWwoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBUaGUgRG9ja2VyZmlsZSBtb2RlbCwgYXZhaWxhYmxlIG9ubHkgd2hlbiBpbiBjb21wb3NlIG1vZGUuICovXG5cdHB1YmxpYyBnZXQgZG9ja2VyZmlsZSgpOiBEb2NrZXJmaWxlTW9kZWwgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fZG9ja2VyZmlsZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRFeHRlbnNpb24oLi4uaWRzOiBzdHJpbmdbXSk6IHRoaXMge1xuXHRcdGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG5cdFx0XHRpZiAoIXRoaXMuX2V4dGVuc2lvbnMuaW5jbHVkZXMoaWQpKSB0aGlzLl9leHRlbnNpb25zLnB1c2goaWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmb3J3YXJkUG9ydCguLi5wb3J0czogbnVtYmVyW10pOiB0aGlzIHtcblx0XHRmb3IgKGNvbnN0IHBvcnQgb2YgcG9ydHMpIHtcblx0XHRcdGlmICghdGhpcy5fcG9ydHMuaW5jbHVkZXMocG9ydCkpIHRoaXMuX3BvcnRzLnB1c2gocG9ydCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFBvc3RDcmVhdGVDb21tYW5kKGNtZDogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9wb3N0Q3JlYXRlQ29tbWFuZHMuaW5jbHVkZXMoY21kKSkgdGhpcy5fcG9zdENyZWF0ZUNvbW1hbmRzLnB1c2goY21kKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRQb3N0U3RhcnRDb21tYW5kKGNtZDogc3RyaW5nKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLl9wb3N0U3RhcnRDb21tYW5kcy5pbmNsdWRlcyhjbWQpKSB0aGlzLl9wb3N0U3RhcnRDb21tYW5kcy5wdXNoKGNtZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQWRkIGEgZGV2Y29udGFpbmVyIEZlYXR1cmUsIGUuZy4gYGdoY3IuaW8vZGV2Y29udGFpbmVycy9mZWF0dXJlcy9ub2RlOjFgLiAqL1xuXHRwdWJsaWMgYWRkRmVhdHVyZShpZDogc3RyaW5nLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogdGhpcyB7XG5cdFx0dGhpcy5fZGV2Y29udGFpbmVyRmVhdHVyZXMuc2V0KGlkLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZW5kZXIoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lOiB0aGlzLl9uYW1lIH07XG5cblx0XHRpZiAodGhpcy5fY29tcG9zZUZpbGUpIHtcblx0XHRcdG9iai5kb2NrZXJDb21wb3NlRmlsZSA9IFt0aGlzLl9jb21wb3NlRmlsZV07XG5cdFx0XHRvYmouc2VydmljZSA9IHRoaXMuX2NvbXBvc2VTZXJ2aWNlO1xuXHRcdFx0b2JqLndvcmtzcGFjZUZvbGRlciA9IFwiL3dvcmtzcGFjZVwiO1xuXHRcdFx0b2JqLm1vdW50cyA9IFtcInNvdXJjZT0uLix0YXJnZXQ9L3dvcmtzcGFjZSx0eXBlPWJpbmQsY29uc2lzdGVuY3k9Y2FjaGVkXCJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvYmouaW1hZ2UgPSB0aGlzLl9pbWFnZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fZGV2Y29udGFpbmVyRmVhdHVyZXMuc2l6ZSA+IDApIHtcblx0XHRcdG9iai5mZWF0dXJlcyA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLl9kZXZjb250YWluZXJGZWF0dXJlcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2V4dGVuc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b2JqLmN1c3RvbWl6YXRpb25zID0ge1xuXHRcdFx0XHR2c2NvZGU6IHtcblx0XHRcdFx0XHRleHRlbnNpb25zOiB0aGlzLl9leHRlbnNpb25zLFxuXHRcdFx0XHR9LFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcG9ydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0b2JqLmZvcndhcmRQb3J0cyA9IHRoaXMuX3BvcnRzO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wb3N0Q3JlYXRlQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0b2JqLnBvc3RDcmVhdGVDb21tYW5kID1cblx0XHRcdFx0dGhpcy5fcG9zdENyZWF0ZUNvbW1hbmRzLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdD8gdGhpcy5fcG9zdENyZWF0ZUNvbW1hbmRzWzBdXG5cdFx0XHRcdFx0OiB0aGlzLl9wb3N0Q3JlYXRlQ29tbWFuZHMuam9pbihcIiAmJiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3Bvc3RTdGFydENvbW1hbmRzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9iai5wb3N0U3RhcnRDb21tYW5kID1cblx0XHRcdFx0dGhpcy5fcG9zdFN0YXJ0Q29tbWFuZHMubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0PyB0aGlzLl9wb3N0U3RhcnRDb21tYW5kc1swXVxuXHRcdFx0XHRcdDogdGhpcy5fcG9zdFN0YXJ0Q29tbWFuZHMuam9pbihcIiAmJiBcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke0pTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMil9XFxuYDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkRFVkNPTlRBSU5FUl9LRVkiLCJEZXZjb250YWluZXJNb2RlbCIsIm1vZGVsS2V5IiwiX25hbWUiLCJfaW1hZ2UiLCJfY29tcG9zZUZpbGUiLCJfY29tcG9zZVNlcnZpY2UiLCJfZG9ja2VyZmlsZSIsIl9leHRlbnNpb25zIiwiX3BvcnRzIiwiX3Bvc3RDcmVhdGVDb21tYW5kcyIsIl9wb3N0U3RhcnRDb21tYW5kcyIsIl9kZXZjb250YWluZXJGZWF0dXJlcyIsIk1hcCIsIm5hbWUiLCJpbWFnZSIsInNldEltYWdlIiwidXNlQ29tcG9zZSIsImZpbGUiLCJzZXJ2aWNlIiwiRG9ja2VyZmlsZU1vZGVsIiwiZG9ja2VyZmlsZSIsImFkZEV4dGVuc2lvbiIsImlkcyIsImlkIiwiaW5jbHVkZXMiLCJwdXNoIiwiZm9yd2FyZFBvcnQiLCJwb3J0cyIsInBvcnQiLCJhZGRQb3N0Q3JlYXRlQ29tbWFuZCIsImNtZCIsImFkZFBvc3RTdGFydENvbW1hbmQiLCJhZGRGZWF0dXJlIiwib3B0aW9ucyIsInNldCIsInJlbmRlciIsIm9iaiIsImRvY2tlckNvbXBvc2VGaWxlIiwid29ya3NwYWNlRm9sZGVyIiwibW91bnRzIiwic2l6ZSIsImZlYXR1cmVzIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJsZW5ndGgiLCJjdXN0b21pemF0aW9ucyIsInZzY29kZSIsImV4dGVuc2lvbnMiLCJmb3J3YXJkUG9ydHMiLCJwb3N0Q3JlYXRlQ29tbWFuZCIsImpvaW4iLCJwb3N0U3RhcnRDb21tYW5kIiwiSlNPTiIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFHYUE7ZUFBQUE7O1FBU0FDO2VBQUFBOzs7eUJBWlk7aUNBQ087QUFFekIsTUFBTUQsbUJBQW1CRSxJQUFBQSxpQkFBUSxFQUFvQjtBQVNyRCxNQUFNRDtJQUNLRSxNQUFjO0lBQ3ZCQyxPQUFlO0lBQ2ZDLGVBQThCLEtBQUs7SUFDbkNDLGtCQUFrQixNQUFNO0lBQ3hCQyxjQUFzQyxLQUFLO0lBQ2xDQyxjQUF3QixFQUFFLENBQUM7SUFDM0JDLFNBQW1CLEVBQUUsQ0FBQztJQUN0QkMsc0JBQWdDLEVBQUUsQ0FBQztJQUNuQ0MscUJBQStCLEVBQUUsQ0FBQztJQUNsQ0Msd0JBQThELElBQUlDLE1BQU07SUFFekYsWUFBbUJDLElBQVksRUFBRUMsUUFBUSxTQUFTLENBQUU7UUFDbkQsSUFBSSxDQUFDWixLQUFLLEdBQUdXO1FBQ2IsSUFBSSxDQUFDVixNQUFNLEdBQUdXO0lBQ2Y7SUFFQSxJQUFXQSxRQUFnQjtRQUMxQixPQUFPLElBQUksQ0FBQ1gsTUFBTTtJQUNuQjtJQUVPWSxTQUFTRCxLQUFhLEVBQVE7UUFDcEMsSUFBSSxDQUFDWCxNQUFNLEdBQUdXO1FBQ2QsT0FBTyxJQUFJO0lBQ1o7SUFFQSxvRkFBb0YsR0FDcEYsQUFBT0UsV0FBV0MsT0FBTyxvQkFBb0IsRUFBRUMsVUFBVSxjQUFj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