@decohere/scaffold 0.0.1-dev.18 → 0.0.1-dev.81

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 (240) hide show
  1. package/commonjs/src/add-api.action.js +39 -0
  2. package/commonjs/src/add-api.command.js +41 -0
  3. package/commonjs/src/add.command.js +24 -0
  4. package/commonjs/src/add.module.js +26 -0
  5. package/commonjs/src/cli.js +9 -0
  6. package/commonjs/src/create.command.js +24 -0
  7. package/commonjs/src/create.module.js +26 -0
  8. package/commonjs/src/domain/prompt.js +64 -0
  9. package/commonjs/src/index.js +38 -0
  10. package/commonjs/src/models/compose.model.js +150 -0
  11. package/commonjs/src/models/config-yaml.model.js +88 -0
  12. package/commonjs/src/models/const.js +32 -0
  13. package/commonjs/src/models/dev-container.model.js +116 -0
  14. package/commonjs/src/models/docker-image.model.js +259 -0
  15. package/commonjs/src/models/env-file.model.js +50 -0
  16. package/commonjs/src/models/gitignore.model.js +43 -0
  17. package/commonjs/src/models/launch-json.model.js +74 -0
  18. package/commonjs/src/models/package-json.model.js +149 -0
  19. package/commonjs/src/models/project.model.js +134 -0
  20. package/commonjs/src/models/source-file.js +6 -0
  21. package/commonjs/src/models/tsconfig.model.js +34 -0
  22. package/commonjs/src/models/vitest-config.model.js +35 -0
  23. package/commonjs/src/models/vscode-settings.model.js +31 -0
  24. package/commonjs/src/program.js +57 -0
  25. package/commonjs/src/resolve-target-dir.js +19 -0
  26. package/commonjs/src/services/scaffold.service.js +62 -0
  27. package/commonjs/src/version.js +57 -0
  28. package/commonjs/src/webapi/api-name.js +95 -0
  29. package/commonjs/src/webapi/cli-options.js +101 -0
  30. package/commonjs/src/webapi/const.js +50 -0
  31. package/commonjs/src/webapi/create-api.js +237 -0
  32. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +166 -0
  33. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  34. package/commonjs/src/webapi/devcontainer/host-scripts.js +52 -0
  35. package/commonjs/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  36. package/commonjs/src/webapi/devcontainer/templates/initialize.sh +169 -0
  37. package/commonjs/src/webapi/devcontainer/templates/post-create.sh +35 -0
  38. package/commonjs/src/webapi/devcontainer/templates/post-start.sh +65 -0
  39. package/commonjs/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  40. package/commonjs/src/webapi/features/auth.feature.js +441 -0
  41. package/commonjs/src/webapi/features/auth0-cli.js +435 -0
  42. package/commonjs/src/webapi/features/biome-format.js +49 -0
  43. package/commonjs/src/webapi/features/database.feature.js +433 -0
  44. package/commonjs/src/webapi/features/finalize.feature.js +95 -0
  45. package/commonjs/src/webapi/features/postman.feature.js +324 -0
  46. package/commonjs/src/webapi/models/api-package-json.model.js +60 -0
  47. package/commonjs/src/webapi/models/auth-config.model.js +26 -0
  48. package/commonjs/src/webapi/models/controller-source-file.model.js +193 -0
  49. package/commonjs/src/webapi/models/github-ci.model.js +193 -0
  50. package/commonjs/src/webapi/models/main-source-file.model.js +167 -0
  51. package/commonjs/src/webapi/models/production-dockerfile.model.js +157 -0
  52. package/commonjs/src/webapi/models/sample-files.model.js +60 -0
  53. package/commonjs/src/webapi/models/webapi-image.model.js +27 -0
  54. package/commonjs/src/webapi/postman/hello-openapi.js +175 -0
  55. package/commonjs/src/webapi/postman/local-view.js +184 -0
  56. package/commonjs/src/webapi/postman/openapi-to-postman.js +202 -0
  57. package/commonjs/src/webapi/workspace-readme.js +110 -0
  58. package/commonjs/src/webapi.action.js +30 -0
  59. package/commonjs/src/webapi.command.js +45 -0
  60. package/es6/src/add-api.action.js +29 -0
  61. package/es6/src/add-api.command.js +31 -0
  62. package/es6/src/add.command.js +14 -0
  63. package/es6/src/add.module.js +16 -0
  64. package/es6/src/cli.js +5 -0
  65. package/es6/src/create.command.js +14 -0
  66. package/es6/src/create.module.js +16 -0
  67. package/es6/src/domain/prompt.js +43 -0
  68. package/es6/src/index.js +8 -0
  69. package/es6/src/models/compose.model.js +144 -0
  70. package/es6/src/models/config-yaml.model.js +76 -0
  71. package/es6/src/models/const.js +22 -0
  72. package/es6/src/models/dev-container.model.js +106 -0
  73. package/es6/src/models/docker-image.model.js +217 -0
  74. package/es6/src/models/env-file.model.js +46 -0
  75. package/es6/src/models/gitignore.model.js +33 -0
  76. package/es6/src/models/launch-json.model.js +64 -0
  77. package/es6/src/models/package-json.model.js +137 -0
  78. package/es6/src/models/project.model.js +119 -0
  79. package/es6/src/models/source-file.js +3 -0
  80. package/es6/src/models/tsconfig.model.js +24 -0
  81. package/es6/src/models/vitest-config.model.js +25 -0
  82. package/es6/src/models/vscode-settings.model.js +21 -0
  83. package/es6/src/program.js +39 -0
  84. package/es6/src/resolve-target-dir.js +9 -0
  85. package/es6/src/services/scaffold.service.js +52 -0
  86. package/es6/src/version.js +36 -0
  87. package/es6/src/webapi/api-name.js +59 -0
  88. package/es6/src/webapi/cli-options.js +36 -0
  89. package/es6/src/webapi/const.js +20 -0
  90. package/es6/src/webapi/create-api.js +217 -0
  91. package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +156 -0
  92. package/es6/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  93. package/es6/src/webapi/devcontainer/host-scripts.js +31 -0
  94. package/es6/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  95. package/es6/src/webapi/devcontainer/templates/initialize.sh +169 -0
  96. package/es6/src/webapi/devcontainer/templates/post-create.sh +35 -0
  97. package/es6/src/webapi/devcontainer/templates/post-start.sh +65 -0
  98. package/es6/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  99. package/es6/src/webapi/features/auth.feature.js +390 -0
  100. package/es6/src/webapi/features/auth0-cli.js +375 -0
  101. package/es6/src/webapi/features/biome-format.js +42 -0
  102. package/es6/src/webapi/features/database.feature.js +423 -0
  103. package/es6/src/webapi/features/finalize.feature.js +85 -0
  104. package/es6/src/webapi/features/postman.feature.js +258 -0
  105. package/es6/src/webapi/models/api-package-json.model.js +55 -0
  106. package/es6/src/webapi/models/auth-config.model.js +22 -0
  107. package/es6/src/webapi/models/controller-source-file.model.js +184 -0
  108. package/es6/src/webapi/models/github-ci.model.js +186 -0
  109. package/es6/src/webapi/models/main-source-file.model.js +163 -0
  110. package/es6/src/webapi/models/production-dockerfile.model.js +148 -0
  111. package/es6/src/webapi/models/sample-files.model.js +42 -0
  112. package/es6/src/webapi/models/webapi-image.model.js +20 -0
  113. package/es6/src/webapi/postman/hello-openapi.js +168 -0
  114. package/es6/src/webapi/postman/local-view.js +169 -0
  115. package/es6/src/webapi/postman/openapi-to-postman.js +179 -0
  116. package/es6/src/webapi/workspace-readme.js +89 -0
  117. package/es6/src/webapi.action.js +20 -0
  118. package/es6/src/webapi.command.js +35 -0
  119. package/package.json +8 -8
  120. package/types/src/add-api.action.d.ts +13 -0
  121. package/types/src/add-api.command.d.ts +7 -0
  122. package/types/src/add.command.d.ts +6 -0
  123. package/types/src/add.module.d.ts +14 -0
  124. package/types/src/cli.d.ts +2 -0
  125. package/types/src/create.command.d.ts +6 -0
  126. package/types/src/create.module.d.ts +14 -0
  127. package/types/src/domain/prompt.d.ts +4 -0
  128. package/types/src/models/compose.model.d.ts +64 -0
  129. package/types/src/models/config-yaml.model.d.ts +27 -0
  130. package/types/src/models/const.d.ts +20 -0
  131. package/types/src/models/dev-container.model.d.ts +37 -0
  132. package/types/src/models/docker-image.model.d.ts +84 -0
  133. package/types/src/models/env-file.model.d.ts +16 -0
  134. package/types/src/models/gitignore.model.d.ts +7 -0
  135. package/types/src/models/launch-json.model.d.ts +7 -0
  136. package/types/src/models/package-json.model.d.ts +35 -0
  137. package/types/src/models/project.model.d.ts +60 -0
  138. package/{src/models/source-file.ts → types/src/models/source-file.d.ts} +4 -6
  139. package/types/src/models/tsconfig.model.d.ts +5 -0
  140. package/types/src/models/vitest-config.model.d.ts +5 -0
  141. package/types/src/models/vscode-settings.model.d.ts +7 -0
  142. package/types/src/program.d.ts +3 -0
  143. package/{src/resolve-target-dir.ts → types/src/resolve-target-dir.d.ts} +1 -4
  144. package/types/src/services/scaffold.service.d.ts +22 -0
  145. package/types/src/version.d.ts +6 -0
  146. package/types/src/webapi/api-name.d.ts +14 -0
  147. package/types/src/webapi/cli-options.d.ts +6 -0
  148. package/{src/webapi/const.ts → types/src/webapi/const.d.ts} +7 -21
  149. package/types/src/webapi/create-api.d.ts +15 -0
  150. package/types/src/webapi/devcontainer/codebase-rag-mcp.d.ts +32 -0
  151. package/types/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  152. package/types/src/webapi/devcontainer/host-scripts.d.ts +7 -0
  153. package/types/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  154. package/types/src/webapi/devcontainer/templates/initialize.sh +169 -0
  155. package/types/src/webapi/devcontainer/templates/post-create.sh +35 -0
  156. package/types/src/webapi/devcontainer/templates/post-start.sh +65 -0
  157. package/types/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  158. package/types/src/webapi/features/auth.feature.d.ts +10 -0
  159. package/types/src/webapi/features/auth0-cli.d.ts +80 -0
  160. package/types/src/webapi/features/biome-format.d.ts +5 -0
  161. package/types/src/webapi/features/database.feature.d.ts +7 -0
  162. package/types/src/webapi/features/finalize.feature.d.ts +2 -0
  163. package/types/src/webapi/features/postman.feature.d.ts +16 -0
  164. package/types/src/webapi/models/api-package-json.model.d.ts +18 -0
  165. package/types/src/webapi/models/auth-config.model.d.ts +26 -0
  166. package/types/src/webapi/models/controller-source-file.model.d.ts +46 -0
  167. package/types/src/webapi/models/github-ci.model.d.ts +9 -0
  168. package/types/src/webapi/models/main-source-file.model.d.ts +54 -0
  169. package/types/src/webapi/models/production-dockerfile.model.d.ts +23 -0
  170. package/types/src/webapi/models/sample-files.model.d.ts +7 -0
  171. package/types/src/webapi/models/webapi-image.model.d.ts +12 -0
  172. package/types/src/webapi/postman/hello-openapi.d.ts +19 -0
  173. package/types/src/webapi/postman/local-view.d.ts +17 -0
  174. package/types/src/webapi/postman/openapi-to-postman.d.ts +62 -0
  175. package/types/src/webapi/workspace-readme.d.ts +18 -0
  176. package/types/src/webapi.action.d.ts +14 -0
  177. package/types/src/webapi.command.d.ts +11 -0
  178. package/src/add-api.action.ts +0 -25
  179. package/src/add-api.command.ts +0 -31
  180. package/src/add.command.ts +0 -20
  181. package/src/add.module.ts +0 -11
  182. package/src/cli.ts +0 -4
  183. package/src/create.command.ts +0 -20
  184. package/src/create.module.ts +0 -11
  185. package/src/domain/prompt.ts +0 -50
  186. package/src/models/compose.model.ts +0 -205
  187. package/src/models/config-yaml.model.ts +0 -83
  188. package/src/models/const.ts +0 -20
  189. package/src/models/dev-container.model.ts +0 -136
  190. package/src/models/docker-image.model.ts +0 -343
  191. package/src/models/env-file.model.ts +0 -45
  192. package/src/models/gitignore.model.ts +0 -35
  193. package/src/models/launch-json.model.ts +0 -60
  194. package/src/models/package-json.model.ts +0 -169
  195. package/src/models/project.model.ts +0 -141
  196. package/src/models/tsconfig.model.ts +0 -29
  197. package/src/models/vitest-config.model.ts +0 -26
  198. package/src/models/vscode-settings.model.ts +0 -24
  199. package/src/program.ts +0 -63
  200. package/src/services/scaffold.service.ts +0 -89
  201. package/src/version.ts +0 -56
  202. package/src/webapi/api-name.ts +0 -73
  203. package/src/webapi/cli-options.ts +0 -56
  204. package/src/webapi/create-api.ts +0 -275
  205. package/src/webapi/devcontainer/host-scripts.ts +0 -35
  206. package/src/webapi/features/auth.feature.ts +0 -454
  207. package/src/webapi/features/auth0-cli.ts +0 -421
  208. package/src/webapi/features/biome-format.ts +0 -34
  209. package/src/webapi/features/database.feature.ts +0 -522
  210. package/src/webapi/features/finalize.feature.ts +0 -112
  211. package/src/webapi/features/postman.feature.ts +0 -287
  212. package/src/webapi/models/api-package-json.model.ts +0 -60
  213. package/src/webapi/models/auth-config.model.ts +0 -36
  214. package/src/webapi/models/controller-source-file.model.ts +0 -232
  215. package/src/webapi/models/github-ci.model.ts +0 -188
  216. package/src/webapi/models/main-source-file.model.ts +0 -208
  217. package/src/webapi/models/production-dockerfile.model.ts +0 -162
  218. package/src/webapi/models/sample-files.model.ts +0 -45
  219. package/src/webapi/models/webapi-image.model.ts +0 -21
  220. package/src/webapi/postman/hello-openapi.ts +0 -92
  221. package/src/webapi/postman/local-view.ts +0 -195
  222. package/src/webapi/postman/openapi-to-postman.ts +0 -208
  223. package/src/webapi/workspace-readme.ts +0 -192
  224. package/src/webapi.action.ts +0 -22
  225. package/src/webapi.command.ts +0 -41
  226. package/tests/auth-postman.wiring.spec.ts +0 -263
  227. package/tests/auth0-cli.spec.ts +0 -232
  228. package/tests/biome-format.spec.ts +0 -49
  229. package/tests/cli.integration.spec.ts +0 -658
  230. package/tests/compose.model.spec.ts +0 -51
  231. package/tests/container-image.model.spec.ts +0 -162
  232. package/tests/dev-container.model.spec.ts +0 -29
  233. package/tests/devcontainer-base-image.spec.ts +0 -32
  234. package/tests/hello-di-inject.scaffold.spec.ts +0 -18
  235. package/tests/hello-route.contract.spec.ts +0 -94
  236. package/tests/package-json.order.spec.ts +0 -59
  237. package/tests/postman-from-openapi.spec.ts +0 -197
  238. package/tests/seed-devcontainer-templates.ts +0 -40
  239. package/tests/webapi/devcontainer/codebase-rag-mcp.spec.ts +0 -96
  240. /package/{src/index.ts → types/src/index.d.ts} +0 -0
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "WebapiCommand", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return WebapiCommand;
9
+ }
10
+ });
11
+ const _cli = require("@decohere/nexus/cli");
12
+ const _clioptions = require("./webapi/cli-options.js");
13
+ const _webapiaction = require("./webapi.action.js");
14
+ class WebapiCommand extends _cli.DecohereCommand {
15
+ get actions() {
16
+ return [
17
+ _webapiaction.WebapiAction
18
+ ];
19
+ }
20
+ constructor(name){
21
+ super(name);
22
+ this.description("Scaffold a Cortex web API workspace");
23
+ this.argument("[directory]", "Target directory (default: -d or current directory)");
24
+ this.option("-d <directory>", "Target directory (default: current directory)", ".");
25
+ this.option("--name <slug>", "API name under projects/ (repeatable; default: api)", _clioptions.collectName, []);
26
+ (0, _clioptions.addWebapiFeatureOptions)(this);
27
+ }
28
+ /**
29
+ * Commander passes positional args before options when `[directory]` is declared.
30
+ * ModuleFactory expects `(opts, cmd)` — stash the directory on the command.
31
+ */ action(fn) {
32
+ return super.action((...args)=>{
33
+ const cmd = args.at(-1);
34
+ const first = args[0];
35
+ const hasPositional = typeof first === "string" || first === undefined;
36
+ const opts = hasPositional ? args[1] : args[0];
37
+ if (typeof first === "string" && first !== "") {
38
+ cmd.setOptionValue("directory", first);
39
+ }
40
+ return fn(opts, cmd);
41
+ });
42
+ }
43
+ }
44
+
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNvaGVyZUNvbW1hbmQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBPcHRpb25WYWx1ZXMgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucywgY29sbGVjdE5hbWUgfSBmcm9tIFwiLi93ZWJhcGkvY2xpLW9wdGlvbnMuanNcIjtcbmltcG9ydCB7IFdlYmFwaUFjdGlvbiB9IGZyb20gXCIuL3dlYmFwaS5hY3Rpb24uanNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYmFwaUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7XG5cdFx0cmV0dXJuIFtXZWJhcGlBY3Rpb25dO1xuXHR9XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJTY2FmZm9sZCBhIENvcnRleCB3ZWIgQVBJIHdvcmtzcGFjZVwiKTtcblx0XHR0aGlzLmFyZ3VtZW50KFwiW2RpcmVjdG9yeV1cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiAtZCBvciBjdXJyZW50IGRpcmVjdG9yeSlcIik7XG5cdFx0dGhpcy5vcHRpb24oXCItZCA8ZGlyZWN0b3J5PlwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIik7XG5cdFx0dGhpcy5vcHRpb24oXG5cdFx0XHRcIi0tbmFtZSA8c2x1Zz5cIixcblx0XHRcdFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvIChyZXBlYXRhYmxlOyBkZWZhdWx0OiBhcGkpXCIsXG5cdFx0XHRjb2xsZWN0TmFtZSxcblx0XHRcdFtdIGFzIHN0cmluZ1tdLFxuXHRcdCk7XG5cdFx0YWRkV2ViYXBpRmVhdHVyZU9wdGlvbnModGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29tbWFuZGVyIHBhc3NlcyBwb3NpdGlvbmFsIGFyZ3MgYmVmb3JlIG9wdGlvbnMgd2hlbiBgW2RpcmVjdG9yeV1gIGlzIGRlY2xhcmVkLlxuXHQgKiBNb2R1bGVGYWN0b3J5IGV4cGVjdHMgYChvcHRzLCBjbWQpYCDigJQgc3Rhc2ggdGhlIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZC5cblx0ICovXG5cdHB1YmxpYyBvdmVycmlkZSBhY3Rpb24oZm46ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogdGhpcyB7XG5cdFx0cmV0dXJuIHN1cGVyLmFjdGlvbigoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRjb25zdCBjbWQgPSBhcmdzLmF0KC0xKSBhcyBEZWNvaGVyZUNvbW1hbmQ7XG5cdFx0XHRjb25zdCBmaXJzdCA9IGFyZ3NbMF07XG5cdFx0XHRjb25zdCBoYXNQb3NpdGlvbmFsID0gdHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiIHx8IGZpcnN0ID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvcHRzID0gaGFzUG9zaXRpb25hbCA/IChhcmdzWzFdIGFzIE9wdGlvblZhbHVlcykgOiAoYXJnc1swXSBhcyBPcHRpb25WYWx1ZXMpO1xuXHRcdFx0aWYgKHR5cGVvZiBmaXJzdCA9PT0gXCJzdHJpbmdcIiAmJiBmaXJzdCAhPT0gXCJcIikge1xuXHRcdFx0XHRjbWQuc2V0T3B0aW9uVmFsdWUoXCJkaXJlY3RvcnlcIiwgZmlyc3QpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuKG9wdHMsIGNtZCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJXZWJhcGlDb21tYW5kIiwiRGVjb2hlcmVDb21tYW5kIiwiYWN0aW9ucyIsIldlYmFwaUFjdGlvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50Iiwib3B0aW9uIiwiY29sbGVjdE5hbWUiLCJhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyIsImFjdGlvbiIsImZuIiwiYXJncyIsImNtZCIsImF0IiwiZmlyc3QiLCJoYXNQb3NpdGlvbmFsIiwidW5kZWZpbmVkIiwib3B0cyIsInNldE9wdGlvblZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7OytCQUthQTs7O2VBQUFBOzs7cUJBTG1COzRCQUVxQjs4QkFDeEI7QUFFdEIsTUFBTUEsc0JBQXNCQyxvQkFBZTtJQUNqRCxJQUFvQkMsVUFBVTtRQUM3QixPQUFPO1lBQUNDLDBCQUFZO1NBQUM7SUFDdEI7SUFFQSxZQUFtQkMsSUFBWSxDQUFFO1FBQ2hDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFdBQVcsQ0FBQztRQUNqQixJQUFJLENBQUNDLFFBQVEsQ0FBQyxlQUFlO1FBQzdCLElBQUksQ0FBQ0MsTUFBTSxDQUFDLGtCQUFrQixpREFBaUQ7UUFDL0UsSUFBSSxDQUFDQSxNQUFNLENBQ1YsaUJBQ0EsdURBQ0FDLHVCQUFXLEVBQ1gsRUFBRTtRQUVIQyxJQUFBQSxtQ0FBdUIsRUFBQyxJQUFJO0lBQzdCO0lBRUE7OztFQUdDLEdBQ0QsQUFBZ0JDLE9BQU9DLEVBQWdELEVBQVE7UUFDOUUsT0FBTyxLQUFLLENBQUNELE9BQU8sQ0FBQyxHQUFHRTtZQUN2QixNQUFNQyxNQUFNRCxLQUFLRSxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNQyxRQUFRSCxJQUFJLENBQUMsRUFBRTtZQUNyQixNQUFNSSxnQkFBZ0IsT0FBT0QsVUFBVSxZQUFZQSxVQUFVRTtZQUM3RCxNQUFNQyxPQUFPRixnQkFBaUJKLElBQUksQ0FBQyxFQUFFLEdBQXFCQSxJQUFJLENBQUMsRUFBRTtZQUNqRSxJQUFJLE9BQU9HLFVBQVUsWUFBWUEsVUFBVSxJQUFJO2dCQUM5Q0YsSUFBSU0sY0FBYyxDQUFDLGFBQWFKO1lBQ2pDO1lBQ0EsT0FBT0osR0FBR08sTUFBTUw7UUFDakI7SUFDRDtBQUNEIn0=
@@ -0,0 +1,29 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ import { injectable } from "@decohere/crucible/decorators";
8
+ import { ActionResponse } from "@decohere/nexus/cli";
9
+ import { runScaffoldApi, toApiOptions } from "./webapi/cli-options.js";
10
+ export class AddApiAction {
11
+ async run(options) {
12
+ const name = options.apiName;
13
+ if (name == null || name === "") {
14
+ return ActionResponse.Error("api", "API name is required");
15
+ }
16
+ await runScaffoldApi(toApiOptions(undefined, options, {
17
+ names: [
18
+ name
19
+ ],
20
+ add: true
21
+ }));
22
+ return ActionResponse.Success("api");
23
+ }
24
+ }
25
+ AddApiAction = _ts_decorate([
26
+ injectable()
27
+ ], AddApiAction);
28
+
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hZGQtYXBpLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgQWN0aW9uUmVzcG9uc2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgcnVuU2NhZmZvbGRBcGksIHRvQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jbGktb3B0aW9ucy5qc1wiO1xuXG5leHBvcnQgdHlwZSBBZGRBcGlPcHRpb25zID0ge1xuXHRhcGlOYW1lPzogc3RyaW5nO1xuXHRkPzogc3RyaW5nO1xuXHRkYXRhYmFzZT86IHN0cmluZztcblx0YXV0aD86IHN0cmluZztcblx0cG9zdG1hbj86IHN0cmluZztcblx0eWVzPzogYm9vbGVhbjtcblx0aW5zdGFsbD86IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZGRBcGlBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb248QWRkQXBpT3B0aW9ucz4ge1xuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IEFkZEFwaU9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdFx0Y29uc3QgbmFtZSA9IG9wdGlvbnMuYXBpTmFtZTtcblx0XHRpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUgPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5FcnJvcihcImFwaVwiLCBcIkFQSSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuXHRcdH1cblx0XHRhd2FpdCBydW5TY2FmZm9sZEFwaSh0b0FwaU9wdGlvbnModW5kZWZpbmVkLCBvcHRpb25zLCB7IG5hbWVzOiBbbmFtZV0sIGFkZDogdHJ1ZSB9KSk7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoXCJhcGlcIik7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJpbmplY3RhYmxlIiwiQWN0aW9uUmVzcG9uc2UiLCJydW5TY2FmZm9sZEFwaSIsInRvQXBpT3B0aW9ucyIsIkFkZEFwaUFjdGlvbiIsInJ1biIsIm9wdGlvbnMiLCJuYW1lIiwiYXBpTmFtZSIsIkVycm9yIiwidW5kZWZpbmVkIiwibmFtZXMiLCJhZGQiLCJTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUFTQSxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELFNBQXNCQyxjQUFjLFFBQVEsc0JBQXNCO0FBQ2xFLFNBQVNDLGNBQWMsRUFBRUMsWUFBWSxRQUFRLDBCQUEwQjtBQWF2RSxPQUFPLE1BQU1DO0lBQ1osTUFBYUMsSUFBSUMsT0FBc0IsRUFBMkI7UUFDakUsTUFBTUMsT0FBT0QsUUFBUUUsT0FBTztRQUM1QixJQUFJRCxRQUFRLFFBQVFBLFNBQVMsSUFBSTtZQUNoQyxPQUFPTixlQUFlUSxLQUFLLENBQUMsT0FBTztRQUNwQztRQUNBLE1BQU1QLGVBQWVDLGFBQWFPLFdBQVdKLFNBQVM7WUFBRUssT0FBTztnQkFBQ0o7YUFBSztZQUFFSyxLQUFLO1FBQUs7UUFDakYsT0FBT1gsZUFBZVksT0FBTyxDQUFDO0lBQy9CO0FBQ0QifQ==
@@ -0,0 +1,31 @@
1
+ import { DecohereCommand } from "@decohere/nexus/cli";
2
+ import { AddApiAction } from "./add-api.action.js";
3
+ import { addWebapiFeatureOptions } from "./webapi/cli-options.js";
4
+ export class AddApiCommand extends DecohereCommand {
5
+ get actions() {
6
+ return [
7
+ AddApiAction
8
+ ];
9
+ }
10
+ constructor(name){
11
+ super(name);
12
+ this.description("Add an API to an existing Decohere workspace");
13
+ this.argument("<name>", "API name under projects/");
14
+ this.option("-d <directory>", "Workspace directory (default: current directory)", ".");
15
+ addWebapiFeatureOptions(this);
16
+ }
17
+ action(fn) {
18
+ return super.action((...args)=>{
19
+ const cmd = args.at(-1);
20
+ const first = args[0];
21
+ const hasPositional = typeof first === "string" || first === undefined;
22
+ const opts = hasPositional ? args[1] : args[0];
23
+ if (typeof first === "string" && first !== "") {
24
+ cmd.setOptionValue("apiName", first);
25
+ }
26
+ return fn(opts, cmd);
27
+ });
28
+ }
29
+ }
30
+
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hZGQtYXBpLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb2hlcmVDb21tYW5kIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB0eXBlIHsgT3B0aW9uVmFsdWVzIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgQWRkQXBpQWN0aW9uIH0gZnJvbSBcIi4vYWRkLWFwaS5hY3Rpb24uanNcIjtcbmltcG9ydCB7IGFkZFdlYmFwaUZlYXR1cmVPcHRpb25zIH0gZnJvbSBcIi4vd2ViYXBpL2NsaS1vcHRpb25zLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBZGRBcGlDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbQWRkQXBpQWN0aW9uXTtcblx0fVxuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiQWRkIGFuIEFQSSB0byBhbiBleGlzdGluZyBEZWNvaGVyZSB3b3Jrc3BhY2VcIik7XG5cdFx0dGhpcy5hcmd1bWVudChcIjxuYW1lPlwiLCBcIkFQSSBuYW1lIHVuZGVyIHByb2plY3RzL1wiKTtcblx0XHR0aGlzLm9wdGlvbihcIi1kIDxkaXJlY3Rvcnk+XCIsIFwiV29ya3NwYWNlIGRpcmVjdG9yeSAoZGVmYXVsdDogY3VycmVudCBkaXJlY3RvcnkpXCIsIFwiLlwiKTtcblx0XHRhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBhY3Rpb24oZm46ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogdGhpcyB7XG5cdFx0cmV0dXJuIHN1cGVyLmFjdGlvbigoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRjb25zdCBjbWQgPSBhcmdzLmF0KC0xKSBhcyBEZWNvaGVyZUNvbW1hbmQ7XG5cdFx0XHRjb25zdCBmaXJzdCA9IGFyZ3NbMF07XG5cdFx0XHRjb25zdCBoYXNQb3NpdGlvbmFsID0gdHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiIHx8IGZpcnN0ID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvcHRzID0gaGFzUG9zaXRpb25hbCA/IChhcmdzWzFdIGFzIE9wdGlvblZhbHVlcykgOiAoYXJnc1swXSBhcyBPcHRpb25WYWx1ZXMpO1xuXHRcdFx0aWYgKHR5cGVvZiBmaXJzdCA9PT0gXCJzdHJpbmdcIiAmJiBmaXJzdCAhPT0gXCJcIikge1xuXHRcdFx0XHRjbWQuc2V0T3B0aW9uVmFsdWUoXCJhcGlOYW1lXCIsIGZpcnN0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbihvcHRzLCBjbWQpO1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRGVjb2hlcmVDb21tYW5kIiwiQWRkQXBpQWN0aW9uIiwiYWRkV2ViYXBpRmVhdHVyZU9wdGlvbnMiLCJBZGRBcGlDb21tYW5kIiwiYWN0aW9ucyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50Iiwib3B0aW9uIiwiYWN0aW9uIiwiZm4iLCJhcmdzIiwiY21kIiwiYXQiLCJmaXJzdCIsImhhc1Bvc2l0aW9uYWwiLCJ1bmRlZmluZWQiLCJvcHRzIiwic2V0T3B0aW9uVmFsdWUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsUUFBUSxzQkFBc0I7QUFFdEQsU0FBU0MsWUFBWSxRQUFRLHNCQUFzQjtBQUNuRCxTQUFTQyx1QkFBdUIsUUFBUSwwQkFBMEI7QUFFbEUsT0FBTyxNQUFNQyxzQkFBc0JIO0lBQ2xDLElBQW9CSSxVQUFVO1FBQzdCLE9BQU87WUFBQ0g7U0FBYTtJQUN0QjtJQUVBLFlBQW1CSSxJQUFZLENBQUU7UUFDaEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQ0MsUUFBUSxDQUFDLFVBQVU7UUFDeEIsSUFBSSxDQUFDQyxNQUFNLENBQUMsa0JBQWtCLG9EQUFvRDtRQUNsRk4sd0JBQXdCLElBQUk7SUFDN0I7SUFFZ0JPLE9BQU9DLEVBQWdELEVBQVE7UUFDOUUsT0FBTyxLQUFLLENBQUNELE9BQU8sQ0FBQyxHQUFHRTtZQUN2QixNQUFNQyxNQUFNRCxLQUFLRSxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNQyxRQUFRSCxJQUFJLENBQUMsRUFBRTtZQUNyQixNQUFNSSxnQkFBZ0IsT0FBT0QsVUFBVSxZQUFZQSxVQUFVRTtZQUM3RCxNQUFNQyxPQUFPRixnQkFBaUJKLElBQUksQ0FBQyxFQUFFLEdBQXFCQSxJQUFJLENBQUMsRUFBRTtZQUNqRSxJQUFJLE9BQU9HLFVBQVUsWUFBWUEsVUFBVSxJQUFJO2dCQUM5Q0YsSUFBSU0sY0FBYyxDQUFDLFdBQVdKO1lBQy9CO1lBQ0EsT0FBT0osR0FBR08sTUFBTUw7UUFDakI7SUFDRDtBQUNEIn0=
@@ -0,0 +1,14 @@
1
+ import { DecohereCommand } from "@decohere/nexus/cli";
2
+ export class AddCommand extends DecohereCommand {
3
+ constructor(commands, handler){
4
+ super(AddCommand);
5
+ this.description("Add to an existing Decohere workspace");
6
+ this.exitOverride();
7
+ this.registerSubcommand(commands, handler);
8
+ }
9
+ run(_actions, _options) {
10
+ return this.help();
11
+ }
12
+ }
13
+
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hZGQuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tYW5kSGFuZGxlcixcblx0dHlwZSBDb21tYW5kUmVzcG9uc2UsXG5cdHR5cGUgQ29tbWFuZFR5cGUsXG5cdERlY29oZXJlQ29tbWFuZCxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcblxuZXhwb3J0IGNsYXNzIEFkZENvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmRUeXBlPiwgaGFuZGxlcjogQ29tbWFuZEhhbmRsZXIpIHtcblx0XHRzdXBlcihBZGRDb21tYW5kKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiQWRkIHRvIGFuIGV4aXN0aW5nIERlY29oZXJlIHdvcmtzcGFjZVwiKTtcblx0XHR0aGlzLmV4aXRPdmVycmlkZSgpO1xuXHRcdHRoaXMucmVnaXN0ZXJTdWJjb21tYW5kKGNvbW1hbmRzLCBoYW5kbGVyKTtcblx0fVxuXG5cdHB1YmxpYyBydW4oX2FjdGlvbnM6IEFjdGlvbnMsIF9vcHRpb25zOiBuZXZlcik6IFByb21pc2U8Q29tbWFuZFJlc3BvbnNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuaGVscCgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRGVjb2hlcmVDb21tYW5kIiwiQWRkQ29tbWFuZCIsImNvbW1hbmRzIiwiaGFuZGxlciIsImRlc2NyaXB0aW9uIiwiZXhpdE92ZXJyaWRlIiwicmVnaXN0ZXJTdWJjb21tYW5kIiwicnVuIiwiX2FjdGlvbnMiLCJfb3B0aW9ucyIsImhlbHAiXSwibWFwcGluZ3MiOiJBQUNBLFNBSUNBLGVBQWUsUUFDVCxzQkFBc0I7QUFFN0IsT0FBTyxNQUFNQyxtQkFBbUJEO0lBQy9CLFlBQW1CRSxRQUFxQyxFQUFFQyxPQUF1QixDQUFFO1FBQ2xGLEtBQUssQ0FBQ0Y7UUFDTixJQUFJLENBQUNHLFdBQVcsQ0FBQztRQUNqQixJQUFJLENBQUNDLFlBQVk7UUFDakIsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0osVUFBVUM7SUFDbkM7SUFFT0ksSUFBSUMsUUFBaUIsRUFBRUMsUUFBZSxFQUE0QjtRQUN4RSxPQUFPLElBQUksQ0FBQ0MsSUFBSTtJQUNqQjtBQUNEIn0=
@@ -0,0 +1,16 @@
1
+ import { ModuleManifest } from "@decohere/nexus/cli";
2
+ import { AddCommand } from "./add.command.js";
3
+ import { AddApiAction } from "./add-api.action.js";
4
+ import { AddApiCommand } from "./add-api.command.js";
5
+ export class AddModule extends ModuleManifest {
6
+ id = "add";
7
+ command = AddCommand;
8
+ commands = {
9
+ api: AddApiCommand
10
+ };
11
+ actions = {
12
+ api: AddApiAction
13
+ };
14
+ }
15
+
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9hZGQubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZU1hbmlmZXN0IH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IEFkZENvbW1hbmQgfSBmcm9tIFwiLi9hZGQuY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgQWRkQXBpQWN0aW9uIH0gZnJvbSBcIi4vYWRkLWFwaS5hY3Rpb24uanNcIjtcbmltcG9ydCB7IEFkZEFwaUNvbW1hbmQgfSBmcm9tIFwiLi9hZGQtYXBpLmNvbW1hbmQuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFkZE1vZHVsZSBleHRlbmRzIE1vZHVsZU1hbmlmZXN0IHtcblx0cHVibGljIHJlYWRvbmx5IGlkID0gXCJhZGRcIjtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSBBZGRDb21tYW5kO1xuXHRwdWJsaWMgcmVhZG9ubHkgY29tbWFuZHMgPSB7IGFwaTogQWRkQXBpQ29tbWFuZCB9O1xuXHRwdWJsaWMgcmVhZG9ubHkgYWN0aW9ucyA9IHsgYXBpOiBBZGRBcGlBY3Rpb24gfTtcbn1cbiJdLCJuYW1lcyI6WyJNb2R1bGVNYW5pZmVzdCIsIkFkZENvbW1hbmQiLCJBZGRBcGlBY3Rpb24iLCJBZGRBcGlDb21tYW5kIiwiQWRkTW9kdWxlIiwiaWQiLCJjb21tYW5kIiwiY29tbWFuZHMiLCJhcGkiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxjQUFjLFFBQVEsc0JBQXNCO0FBQ3JELFNBQVNDLFVBQVUsUUFBUSxtQkFBbUI7QUFDOUMsU0FBU0MsWUFBWSxRQUFRLHNCQUFzQjtBQUNuRCxTQUFTQyxhQUFhLFFBQVEsdUJBQXVCO0FBRXJELE9BQU8sTUFBTUMsa0JBQWtCSjtJQUNkSyxLQUFLLE1BQU07SUFDWEMsVUFBVUwsV0FBVztJQUNyQk0sV0FBVztRQUFFQyxLQUFLTDtJQUFjLEVBQUU7SUFDbENNLFVBQVU7UUFBRUQsS0FBS047SUFBYSxFQUFFO0FBQ2pEIn0=
package/es6/src/cli.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./program.js";
3
+ void runCli();
4
+
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgcnVuQ2xpIH0gZnJvbSBcIi4vcHJvZ3JhbS5qc1wiO1xuXG52b2lkIHJ1bkNsaSgpO1xuIl0sIm5hbWVzIjpbInJ1bkNsaSJdLCJtYXBwaW5ncyI6IjtBQUNBLFNBQVNBLE1BQU0sUUFBUSxlQUFlO0FBRXRDLEtBQUtBIn0=
@@ -0,0 +1,14 @@
1
+ import { DecohereCommand } from "@decohere/nexus/cli";
2
+ export class CreateCommand extends DecohereCommand {
3
+ constructor(commands, handler){
4
+ super(CreateCommand);
5
+ this.description("Create a new Decohere workspace");
6
+ this.exitOverride();
7
+ this.registerSubcommand(commands, handler);
8
+ }
9
+ run(_actions, _options) {
10
+ return this.help();
11
+ }
12
+ }
13
+
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9jcmVhdGUuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tYW5kSGFuZGxlcixcblx0dHlwZSBDb21tYW5kUmVzcG9uc2UsXG5cdHR5cGUgQ29tbWFuZFR5cGUsXG5cdERlY29oZXJlQ29tbWFuZCxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcblxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmRUeXBlPiwgaGFuZGxlcjogQ29tbWFuZEhhbmRsZXIpIHtcblx0XHRzdXBlcihDcmVhdGVDb21tYW5kKTtcblx0XHR0aGlzLmRlc2NyaXB0aW9uKFwiQ3JlYXRlIGEgbmV3IERlY29oZXJlIHdvcmtzcGFjZVwiKTtcblx0XHR0aGlzLmV4aXRPdmVycmlkZSgpO1xuXHRcdHRoaXMucmVnaXN0ZXJTdWJjb21tYW5kKGNvbW1hbmRzLCBoYW5kbGVyKTtcblx0fVxuXG5cdHB1YmxpYyBydW4oX2FjdGlvbnM6IEFjdGlvbnMsIF9vcHRpb25zOiBuZXZlcik6IFByb21pc2U8Q29tbWFuZFJlc3BvbnNlPiB7XG5cdFx0cmV0dXJuIHRoaXMuaGVscCgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRGVjb2hlcmVDb21tYW5kIiwiQ3JlYXRlQ29tbWFuZCIsImNvbW1hbmRzIiwiaGFuZGxlciIsImRlc2NyaXB0aW9uIiwiZXhpdE92ZXJyaWRlIiwicmVnaXN0ZXJTdWJjb21tYW5kIiwicnVuIiwiX2FjdGlvbnMiLCJfb3B0aW9ucyIsImhlbHAiXSwibWFwcGluZ3MiOiJBQUNBLFNBSUNBLGVBQWUsUUFDVCxzQkFBc0I7QUFFN0IsT0FBTyxNQUFNQyxzQkFBc0JEO0lBQ2xDLFlBQW1CRSxRQUFxQyxFQUFFQyxPQUF1QixDQUFFO1FBQ2xGLEtBQUssQ0FBQ0Y7UUFDTixJQUFJLENBQUNHLFdBQVcsQ0FBQztRQUNqQixJQUFJLENBQUNDLFlBQVk7UUFDakIsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0osVUFBVUM7SUFDbkM7SUFFT0ksSUFBSUMsUUFBaUIsRUFBRUMsUUFBZSxFQUE0QjtRQUN4RSxPQUFPLElBQUksQ0FBQ0MsSUFBSTtJQUNqQjtBQUNEIn0=
@@ -0,0 +1,16 @@
1
+ import { ModuleManifest } from "@decohere/nexus/cli";
2
+ import { CreateCommand } from "./create.command.js";
3
+ import { WebapiAction } from "./webapi.action.js";
4
+ import { WebapiCommand } from "./webapi.command.js";
5
+ export class CreateModule extends ModuleManifest {
6
+ id = "create";
7
+ command = CreateCommand;
8
+ commands = {
9
+ webapi: WebapiCommand
10
+ };
11
+ actions = {
12
+ webapi: WebapiAction
13
+ };
14
+ }
15
+
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9jcmVhdGUubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZU1hbmlmZXN0IH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IENyZWF0ZUNvbW1hbmQgfSBmcm9tIFwiLi9jcmVhdGUuY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgV2ViYXBpQWN0aW9uIH0gZnJvbSBcIi4vd2ViYXBpLmFjdGlvbi5qc1wiO1xuaW1wb3J0IHsgV2ViYXBpQ29tbWFuZCB9IGZyb20gXCIuL3dlYmFwaS5jb21tYW5kLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVNb2R1bGUgZXh0ZW5kcyBNb2R1bGVNYW5pZmVzdCB7XG5cdHB1YmxpYyByZWFkb25seSBpZCA9IFwiY3JlYXRlXCI7XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gQ3JlYXRlQ29tbWFuZDtcblx0cHVibGljIHJlYWRvbmx5IGNvbW1hbmRzID0geyB3ZWJhcGk6IFdlYmFwaUNvbW1hbmQgfTtcblx0cHVibGljIHJlYWRvbmx5IGFjdGlvbnMgPSB7IHdlYmFwaTogV2ViYXBpQWN0aW9uIH07XG59XG4iXSwibmFtZXMiOlsiTW9kdWxlTWFuaWZlc3QiLCJDcmVhdGVDb21tYW5kIiwiV2ViYXBpQWN0aW9uIiwiV2ViYXBpQ29tbWFuZCIsIkNyZWF0ZU1vZHVsZSIsImlkIiwiY29tbWFuZCIsImNvbW1hbmRzIiwid2ViYXBpIiwiYWN0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBYyxRQUFRLHNCQUFzQjtBQUNyRCxTQUFTQyxhQUFhLFFBQVEsc0JBQXNCO0FBQ3BELFNBQVNDLFlBQVksUUFBUSxxQkFBcUI7QUFDbEQsU0FBU0MsYUFBYSxRQUFRLHNCQUFzQjtBQUVwRCxPQUFPLE1BQU1DLHFCQUFxQko7SUFDakJLLEtBQUssU0FBUztJQUNkQyxVQUFVTCxjQUFjO0lBQ3hCTSxXQUFXO1FBQUVDLFFBQVFMO0lBQWMsRUFBRTtJQUNyQ00sVUFBVTtRQUFFRCxRQUFRTjtJQUFhLEVBQUU7QUFDcEQifQ==
@@ -0,0 +1,43 @@
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 _rl = null;
7
+ let _lines = null;
8
+ function getLines() {
9
+ if (_lines == null) {
10
+ _rl = createInterface({
11
+ input: process.stdin,
12
+ terminal: false
13
+ });
14
+ _lines = _rl[Symbol.asyncIterator]();
15
+ }
16
+ return _lines;
17
+ }
18
+ /** Release stdin so the process can exit after interactive prompts. */ export function closePrompt() {
19
+ _rl?.close();
20
+ _rl = null;
21
+ _lines = null;
22
+ }
23
+ async function readLine(prompt) {
24
+ process.stdout.write(prompt);
25
+ const { value, done } = await getLines().next();
26
+ return done ? "" : value.trim();
27
+ }
28
+ export async function ask(question, fallback = "") {
29
+ const answer = await readLine(question);
30
+ return answer || fallback;
31
+ }
32
+ export async function pick(label, items, display) {
33
+ console.log(label.trimEnd());
34
+ for (const [i, item] of items.entries()){
35
+ console.log(` ${i + 1}. ${display(item)}`);
36
+ }
37
+ const answer = await readLine(" > ");
38
+ const idx = Number.parseInt(answer, 10);
39
+ if (Number.isNaN(idx) || idx < 1 || idx > items.length) return null;
40
+ return items[idx - 1];
41
+ }
42
+
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9kb21haW4vcHJvbXB0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSwgdHlwZSBJbnRlcmZhY2UgfSBmcm9tIFwibm9kZTpyZWFkbGluZVwiO1xuXG4vLyByZWFkbGluZS9wcm9taXNlcyBybC5xdWVzdGlvbigpIGhhcyBhIHJhY2UgY29uZGl0aW9uIHdpdGggcGlwZWQgKG5vbi1UVFkpIHN0ZGluXG4vLyBpbiBOb2RlIOKJpSAyMjogYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgaXMgcmVhZCwgc3RkaW4gZW1pdHMgJ2VuZCcsIHJlYWRsaW5lIGNsb3Nlcyxcbi8vIGFuZCBhbGwgc3Vic2VxdWVudCBxdWVzdGlvbigpIGNhbGxzIHJlc29sdmUgdG8gXCJcIi5cbi8vIEZpeDogdXNlIHRoZSBhc3luYy1pdGVyYXRvciBBUEksIHdoaWNoIGJ1ZmZlcnMgYWxsIGxpbmVzIGJlZm9yZSB0aGUgY2xvc2UgZXZlbnQgZmlyZXMuXG5cbmxldCBfcmw6IEludGVyZmFjZSB8IG51bGwgPSBudWxsO1xubGV0IF9saW5lczogQXN5bmNJdGVyYXRvcjxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldExpbmVzKCk6IEFzeW5jSXRlcmF0b3I8c3RyaW5nPiB7XG5cdGlmIChfbGluZXMgPT0gbnVsbCkge1xuXHRcdF9ybCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCB0ZXJtaW5hbDogZmFsc2UgfSk7XG5cdFx0X2xpbmVzID0gX3JsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXHR9XG5cdHJldHVybiBfbGluZXM7XG59XG5cbi8qKiBSZWxlYXNlIHN0ZGluIHNvIHRoZSBwcm9jZXNzIGNhbiBleGl0IGFmdGVyIGludGVyYWN0aXZlIHByb21wdHMuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VQcm9tcHQoKTogdm9pZCB7XG5cdF9ybD8uY2xvc2UoKTtcblx0X3JsID0gbnVsbDtcblx0X2xpbmVzID0gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZExpbmUocHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShwcm9tcHQpO1xuXHRjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBnZXRMaW5lcygpLm5leHQoKTtcblx0cmV0dXJuIGRvbmUgPyBcIlwiIDogdmFsdWUudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcsIGZhbGxiYWNrID0gXCJcIik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IHJlYWRMaW5lKHF1ZXN0aW9uKTtcblx0cmV0dXJuIGFuc3dlciB8fCBmYWxsYmFjaztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBpY2s8VD4oXG5cdGxhYmVsOiBzdHJpbmcsXG5cdGl0ZW1zOiBUW10sXG5cdGRpc3BsYXk6IChpdGVtOiBUKSA9PiBzdHJpbmcsXG4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG5cdGNvbnNvbGUubG9nKGxhYmVsLnRyaW1FbmQoKSk7XG5cdGZvciAoY29uc3QgW2ksIGl0ZW1dIG9mIGl0ZW1zLmVudHJpZXMoKSkge1xuXHRcdGNvbnNvbGUubG9nKGAgICAgJHtpICsgMX0uICR7ZGlzcGxheShpdGVtKX1gKTtcblx0fVxuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCByZWFkTGluZShcIiAgPiBcIik7XG5cdGNvbnN0IGlkeCA9IE51bWJlci5wYXJzZUludChhbnN3ZXIsIDEwKTtcblx0aWYgKE51bWJlci5pc05hTihpZHgpIHx8IGlkeCA8IDEgfHwgaWR4ID4gaXRlbXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIGl0ZW1zW2lkeCAtIDFdO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUludGVyZmFjZSIsIl9ybCIsIl9saW5lcyIsImdldExpbmVzIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJ0ZXJtaW5hbCIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJjbG9zZVByb21wdCIsImNsb3NlIiwicmVhZExpbmUiLCJwcm9tcHQiLCJzdGRvdXQiLCJ3cml0ZSIsInZhbHVlIiwiZG9uZSIsIm5leHQiLCJ0cmltIiwiYXNrIiwicXVlc3Rpb24iLCJmYWxsYmFjayIsImFuc3dlciIsInBpY2siLCJsYWJlbCIsIml0ZW1zIiwiZGlzcGxheSIsImNvbnNvbGUiLCJsb2ciLCJ0cmltRW5kIiwiaSIsIml0ZW0iLCJlbnRyaWVzIiwiaWR4IiwiTnVtYmVyIiwicGFyc2VJbnQiLCJpc05hTiIsImxlbmd0aCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZUFBZSxRQUF3QixnQkFBZ0I7QUFFaEUsa0ZBQWtGO0FBQ2xGLGtGQUFrRjtBQUNsRixxREFBcUQ7QUFDckQseUZBQXlGO0FBRXpGLElBQUlDLE1BQXdCO0FBQzVCLElBQUlDLFNBQXVDO0FBRTNDLFNBQVNDO0lBQ1IsSUFBSUQsVUFBVSxNQUFNO1FBQ25CRCxNQUFNRCxnQkFBZ0I7WUFBRUksT0FBT0MsUUFBUUMsS0FBSztZQUFFQyxVQUFVO1FBQU07UUFDOURMLFNBQVNELEdBQUcsQ0FBQ08sT0FBT0MsYUFBYSxDQUFDO0lBQ25DO0lBQ0EsT0FBT1A7QUFDUjtBQUVBLHFFQUFxRSxHQUNyRSxPQUFPLFNBQVNRO0lBQ2ZULEtBQUtVO0lBQ0xWLE1BQU07SUFDTkMsU0FBUztBQUNWO0FBRUEsZUFBZVUsU0FBU0MsTUFBYztJQUNyQ1IsUUFBUVMsTUFBTSxDQUFDQyxLQUFLLENBQUNGO0lBQ3JCLE1BQU0sRUFBRUcsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBRyxNQUFNZCxXQUFXZSxJQUFJO0lBQzdDLE9BQU9ELE9BQU8sS0FBS0QsTUFBTUcsSUFBSTtBQUM5QjtBQUVBLE9BQU8sZUFBZUMsSUFBSUMsUUFBZ0IsRUFBRUMsV0FBVyxFQUFFO0lBQ3hELE1BQU1DLFNBQVMsTUFBTVgsU0FBU1M7SUFDOUIsT0FBT0UsVUFBVUQ7QUFDbEI7QUFFQSxPQUFPLGVBQWVFLEtBQ3JCQyxLQUFhLEVBQ2JDLEtBQVUsRUFDVkMsT0FBNEI7SUFFNUJDLFFBQVFDLEdBQUcsQ0FBQ0osTUFBTUssT0FBTztJQUN6QixLQUFLLE1BQU0sQ0FBQ0MsR0FBR0MsS0FBSyxJQUFJTixNQUFNTyxPQUFPLEdBQUk7UUFDeENMLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRUUsSUFBSSxFQUFFLEVBQUUsRUFBRUosUUFBUUssT0FBTztJQUM3QztJQUNBLE1BQU1ULFNBQVMsTUFBTVgsU0FBUztJQUM5QixNQUFNc0IsTUFBTUMsT0FBT0MsUUFBUSxDQUFDYixRQUFRO0lBQ3BDLElBQUlZLE9BQU9FLEtBQUssQ0FBQ0gsUUFBUUEsTUFBTSxLQUFLQSxNQUFNUixNQUFNWSxNQUFNLEVBQUUsT0FBTztJQUMvRCxPQUFPWixLQUFLLENBQUNRLE1BQU0sRUFBRTtBQUN0QiJ9
@@ -0,0 +1,8 @@
1
+ export { AddModule } from "./add.module.js";
2
+ export { AddApiAction } from "./add-api.action.js";
3
+ export { CreateModule } from "./create.module.js";
4
+ export { runCli } from "./program.js";
5
+ export { scaffoldApi } from "./webapi/create-api.js";
6
+ export { WebapiAction } from "./webapi.action.js";
7
+
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBZGRNb2R1bGUgfSBmcm9tIFwiLi9hZGQubW9kdWxlLmpzXCI7XG5leHBvcnQgdHlwZSB7IEFkZEFwaU9wdGlvbnMgfSBmcm9tIFwiLi9hZGQtYXBpLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHsgQWRkQXBpQWN0aW9uIH0gZnJvbSBcIi4vYWRkLWFwaS5hY3Rpb24uanNcIjtcbmV4cG9ydCB7IENyZWF0ZU1vZHVsZSB9IGZyb20gXCIuL2NyZWF0ZS5tb2R1bGUuanNcIjtcbmV4cG9ydCB7IHJ1bkNsaSB9IGZyb20gXCIuL3Byb2dyYW0uanNcIjtcbmV4cG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5leHBvcnQgeyBzY2FmZm9sZEFwaSB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5leHBvcnQgdHlwZSB7IFdlYmFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkuYWN0aW9uLmpzXCI7XG5leHBvcnQgeyBXZWJhcGlBY3Rpb24gfSBmcm9tIFwiLi93ZWJhcGkuYWN0aW9uLmpzXCI7XG4iXSwibmFtZXMiOlsiQWRkTW9kdWxlIiwiQWRkQXBpQWN0aW9uIiwiQ3JlYXRlTW9kdWxlIiwicnVuQ2xpIiwic2NhZmZvbGRBcGkiLCJXZWJhcGlBY3Rpb24iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSxrQkFBa0I7QUFFNUMsU0FBU0MsWUFBWSxRQUFRLHNCQUFzQjtBQUNuRCxTQUFTQyxZQUFZLFFBQVEscUJBQXFCO0FBQ2xELFNBQVNDLE1BQU0sUUFBUSxlQUFlO0FBRXRDLFNBQVNDLFdBQVcsUUFBUSx5QkFBeUI7QUFFckQsU0FBU0MsWUFBWSxRQUFRLHFCQUFxQiJ9
@@ -0,0 +1,144 @@
1
+ import { WELL_KNOWN_FILES } from "./const.js";
2
+ /**
3
+ * Live builder for `docker-compose.yml`.
4
+ *
5
+ * Features call `addService` / `addVolume` / `addNetwork` in their scaffold phases.
6
+ */ export class DockerCompose {
7
+ key = WELL_KNOWN_FILES.DOCKER_COMPOSE;
8
+ _projectName;
9
+ _headerComments = [];
10
+ _services = new Map();
11
+ _volumes = new Set();
12
+ _networks = new Map();
13
+ /** Compose project name (`name:` top-level) — isolates containers/volumes. */ setProjectName(name) {
14
+ this._projectName = name;
15
+ return this;
16
+ }
17
+ /** File-level `#` comments rendered above `name:` / `services:`. */ addHeaderComment(...lines) {
18
+ this._headerComments.push(...lines);
19
+ return this;
20
+ }
21
+ addService(name, config) {
22
+ this._services.set(name, config);
23
+ return this;
24
+ }
25
+ files() {
26
+ return [
27
+ {
28
+ filePath: ".devcontainer/docker-compose.yml",
29
+ content: this.getContent()
30
+ }
31
+ ];
32
+ }
33
+ addVolume(name) {
34
+ this._volumes.add(name);
35
+ return this;
36
+ }
37
+ addNetwork(key, network) {
38
+ this._networks.set(key, network);
39
+ return this;
40
+ }
41
+ /** Append an env_file path to an existing service. */ addEnvFile(serviceName, filePath) {
42
+ const svc = this._services.get(serviceName);
43
+ if (svc) svc.env_file = [
44
+ ...svc.env_file ?? [],
45
+ filePath
46
+ ];
47
+ return this;
48
+ }
49
+ getContent() {
50
+ const lines = [];
51
+ for (const comment of this._headerComments){
52
+ lines.push(comment.startsWith("#") ? comment : `# ${comment}`);
53
+ }
54
+ if (this._headerComments.length > 0) {
55
+ lines.push("");
56
+ }
57
+ if (this._projectName) {
58
+ lines.push(`name: ${this._projectName}`, "");
59
+ }
60
+ lines.push("services:");
61
+ for (const [name, svc] of this._services){
62
+ lines.push(` ${name}:`);
63
+ if (svc.build) lines.push(` build: ${svc.build}`);
64
+ if (svc.image) lines.push(` image: ${svc.image}`);
65
+ if (svc.container_name) lines.push(` container_name: ${svc.container_name}`);
66
+ if (svc.command) lines.push(` command: ${svc.command}`);
67
+ if (svc.user) lines.push(` user: "${svc.user}"`);
68
+ if (svc.restart) lines.push(` restart: ${svc.restart}`);
69
+ if (svc.profiles && svc.profiles.length > 0) {
70
+ lines.push(" profiles:");
71
+ for (const p of svc.profiles)lines.push(` - ${p}`);
72
+ }
73
+ if (svc.env_file && svc.env_file.length > 0) {
74
+ lines.push(" env_file:");
75
+ for (const f of svc.env_file)lines.push(` - ${f}`);
76
+ }
77
+ if (svc.environment && Object.keys(svc.environment).length > 0) {
78
+ lines.push(" environment:");
79
+ for (const [k, v] of Object.entries(svc.environment)){
80
+ lines.push(` ${k}: ${v}`);
81
+ }
82
+ }
83
+ if (svc.ports && svc.ports.length > 0) {
84
+ lines.push(" ports:");
85
+ for (const p of svc.ports)lines.push(` - "${p}"`);
86
+ }
87
+ if (svc.volumes && svc.volumes.length > 0) {
88
+ lines.push(" volumes:");
89
+ for (const v of svc.volumes)lines.push(` - ${v}`);
90
+ }
91
+ if (svc.networks && svc.networks.length > 0) {
92
+ const onlyStrings = svc.networks.every((n)=>typeof n === "string");
93
+ if (onlyStrings) {
94
+ lines.push(" networks:");
95
+ for (const n of svc.networks)lines.push(` - ${n}`);
96
+ } else {
97
+ lines.push(" networks:");
98
+ for (const n of svc.networks){
99
+ if (typeof n === "string") {
100
+ lines.push(` ${n}:`);
101
+ } else {
102
+ for (const [netKey, cfg] of Object.entries(n)){
103
+ lines.push(` ${netKey}:`);
104
+ if (cfg.aliases && cfg.aliases.length > 0) {
105
+ lines.push(" aliases:");
106
+ for (const a of cfg.aliases)lines.push(` - ${a}`);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+ if (svc.depends_on && svc.depends_on.length > 0) {
114
+ lines.push(" depends_on:");
115
+ for (const d of svc.depends_on)lines.push(` - ${d}`);
116
+ }
117
+ if (svc.healthcheck) {
118
+ const hc = svc.healthcheck;
119
+ lines.push(" healthcheck:");
120
+ lines.push(` test: ${JSON.stringify(hc.test)}`);
121
+ if (hc.interval) lines.push(` interval: ${hc.interval}`);
122
+ if (hc.timeout) lines.push(` timeout: ${hc.timeout}`);
123
+ if (hc.retries != null) lines.push(` retries: ${hc.retries}`);
124
+ }
125
+ }
126
+ if (this._networks.size > 0) {
127
+ lines.push("");
128
+ lines.push("networks:");
129
+ for (const [key, net] of this._networks){
130
+ lines.push(` ${key}:`);
131
+ lines.push(` name: ${net.name}`);
132
+ if (net.external) lines.push(" external: true");
133
+ }
134
+ }
135
+ if (this._volumes.size > 0) {
136
+ lines.push("");
137
+ lines.push("volumes:");
138
+ for (const v of this._volumes)lines.push(` ${v}:`);
139
+ }
140
+ return `${lines.join("\n")}\n`;
141
+ }
142
+ }
143
+
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvY29tcG9zZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIENvbXBvc2VOZXR3b3JrUmVmID1cblx0fCBzdHJpbmdcblx0fCB7XG5cdFx0XHQvKiogTmV0d29yayBrZXkgdW5kZXIgYG5ldHdvcmtzOmAgb24gdGhpcyBzZXJ2aWNlICovXG5cdFx0XHRbbmV0d29ya0tleTogc3RyaW5nXTogeyBhbGlhc2VzPzogc3RyaW5nW10gfTtcblx0ICB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2VIZWFsdGhjaGVjayB7XG5cdHRlc3Q6IHN0cmluZ1tdO1xuXHRpbnRlcnZhbD86IHN0cmluZztcblx0dGltZW91dD86IHN0cmluZztcblx0cmV0cmllcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb3NlU2VydmljZSB7XG5cdGJ1aWxkPzogc3RyaW5nO1xuXHRpbWFnZT86IHN0cmluZztcblx0Y29udGFpbmVyX25hbWU/OiBzdHJpbmc7XG5cdC8qKiBRdW90ZWQgaW4gWUFNTCAoYDA6MGAgbXVzdCBub3QgcGFyc2UgYXMgYSBudW1iZXIpLiAqL1xuXHR1c2VyPzogc3RyaW5nO1xuXHRlbnZfZmlsZT86IHN0cmluZ1tdO1xuXHRlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHBvcnRzPzogc3RyaW5nW107XG5cdHZvbHVtZXM/OiBzdHJpbmdbXTtcblx0Y29tbWFuZD86IHN0cmluZztcblx0cmVzdGFydD86IHN0cmluZztcblx0ZGVwZW5kc19vbj86IHN0cmluZ1tdO1xuXHQvKiogQ29tcG9zZSBwcm9maWxlcyAoc2VydmljZSBvbmx5IHN0YXJ0cyB3aGVuIHByb2ZpbGUgaXMgZW5hYmxlZCkuICovXG5cdHByb2ZpbGVzPzogc3RyaW5nW107XG5cdC8qKiBBdHRhY2ggdG8gY29tcG9zZSBuZXR3b3JrcyAoc3RyaW5nIG5hbWUgb3IgbWFwIHdpdGggYWxpYXNlcykuICovXG5cdG5ldHdvcmtzPzogQ29tcG9zZU5ldHdvcmtSZWZbXTtcblx0aGVhbHRoY2hlY2s/OiBDb21wb3NlSGVhbHRoY2hlY2s7XG59XG5cbmV4cG9ydCB0eXBlIENvbXBvc2VOZXR3b3JrID0ge1xuXHQvKiogRml4ZWQgRG9ja2VyIG5ldHdvcmsgbmFtZSAoc2hhcmVhYmxlIGFjcm9zcyBjb21wb3NlIHByb2plY3RzKS4gKi9cblx0bmFtZTogc3RyaW5nO1xuXHRleHRlcm5hbD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIExpdmUgYnVpbGRlciBmb3IgYGRvY2tlci1jb21wb3NlLnltbGAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBgYWRkU2VydmljZWAgLyBgYWRkVm9sdW1lYCAvIGBhZGROZXR3b3JrYCBpbiB0aGVpciBzY2FmZm9sZCBwaGFzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21wb3NlIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkRPQ0tFUl9DT01QT1NFO1xuXHRwcml2YXRlIF9wcm9qZWN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJDb21tZW50czogc3RyaW5nW10gPSBbXTtcblx0cHJpdmF0ZSByZWFkb25seSBfc2VydmljZXM6IE1hcDxzdHJpbmcsIENvbXBvc2VTZXJ2aWNlPiA9IG5ldyBNYXAoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfdm9sdW1lczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtzOiBNYXA8c3RyaW5nLCBDb21wb3NlTmV0d29yaz4gPSBuZXcgTWFwKCk7XG5cblx0LyoqIENvbXBvc2UgcHJvamVjdCBuYW1lIChgbmFtZTpgIHRvcC1sZXZlbCkg4oCUIGlzb2xhdGVzIGNvbnRhaW5lcnMvdm9sdW1lcy4gKi9cblx0cHVibGljIHNldFByb2plY3ROYW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3Byb2plY3ROYW1lID0gbmFtZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBGaWxlLWxldmVsIGAjYCBjb21tZW50cyByZW5kZXJlZCBhYm92ZSBgbmFtZTpgIC8gYHNlcnZpY2VzOmAuICovXG5cdHB1YmxpYyBhZGRIZWFkZXJDb21tZW50KC4uLmxpbmVzOiBzdHJpbmdbXSk6IHRoaXMge1xuXHRcdHRoaXMuX2hlYWRlckNvbW1lbnRzLnB1c2goLi4ubGluZXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25maWc6IENvbXBvc2VTZXJ2aWNlKTogdGhpcyB7XG5cdFx0dGhpcy5fc2VydmljZXMuc2V0KG5hbWUsIGNvbmZpZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9kb2NrZXItY29tcG9zZS55bWxcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cblxuXHRwdWJsaWMgYWRkVm9sdW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3ZvbHVtZXMuYWRkKG5hbWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZE5ldHdvcmsoa2V5OiBzdHJpbmcsIG5ldHdvcms6IENvbXBvc2VOZXR3b3JrKTogdGhpcyB7XG5cdFx0dGhpcy5fbmV0d29ya3Muc2V0KGtleSwgbmV0d29yayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQXBwZW5kIGFuIGVudl9maWxlIHBhdGggdG8gYW4gZXhpc3Rpbmcgc2VydmljZS4gKi9cblx0cHVibGljIGFkZEVudkZpbGUoc2VydmljZU5hbWU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IHRoaXMge1xuXHRcdGNvbnN0IHN2YyA9IHRoaXMuX3NlcnZpY2VzLmdldChzZXJ2aWNlTmFtZSk7XG5cdFx0aWYgKHN2Yykgc3ZjLmVudl9maWxlID0gWy4uLihzdmMuZW52X2ZpbGUgPz8gW10pLCBmaWxlUGF0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgY29tbWVudCBvZiB0aGlzLl9oZWFkZXJDb21tZW50cykge1xuXHRcdFx0bGluZXMucHVzaChjb21tZW50LnN0YXJ0c1dpdGgoXCIjXCIpID8gY29tbWVudCA6IGAjICR7Y29tbWVudH1gKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2hlYWRlckNvbW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIik7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9wcm9qZWN0TmFtZSkge1xuXHRcdFx0bGluZXMucHVzaChgbmFtZTogJHt0aGlzLl9wcm9qZWN0TmFtZX1gLCBcIlwiKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaChcInNlcnZpY2VzOlwiKTtcblxuXHRcdGZvciAoY29uc3QgW25hbWUsIHN2Y10gb2YgdGhpcy5fc2VydmljZXMpIHtcblx0XHRcdGxpbmVzLnB1c2goYCAgJHtuYW1lfTpgKTtcblx0XHRcdGlmIChzdmMuYnVpbGQpIGxpbmVzLnB1c2goYCAgICBidWlsZDogJHtzdmMuYnVpbGR9YCk7XG5cdFx0XHRpZiAoc3ZjLmltYWdlKSBsaW5lcy5wdXNoKGAgICAgaW1hZ2U6ICR7c3ZjLmltYWdlfWApO1xuXHRcdFx0aWYgKHN2Yy5jb250YWluZXJfbmFtZSkgbGluZXMucHVzaChgICAgIGNvbnRhaW5lcl9uYW1lOiAke3N2Yy5jb250YWluZXJfbmFtZX1gKTtcblx0XHRcdGlmIChzdmMuY29tbWFuZCkgbGluZXMucHVzaChgICAgIGNvbW1hbmQ6ICR7c3ZjLmNvbW1hbmR9YCk7XG5cdFx0XHRpZiAoc3ZjLnVzZXIpIGxpbmVzLnB1c2goYCAgICB1c2VyOiBcIiR7c3ZjLnVzZXJ9XCJgKTtcblx0XHRcdGlmIChzdmMucmVzdGFydCkgbGluZXMucHVzaChgICAgIHJlc3RhcnQ6ICR7c3ZjLnJlc3RhcnR9YCk7XG5cblx0XHRcdGlmIChzdmMucHJvZmlsZXMgJiYgc3ZjLnByb2ZpbGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBwcm9maWxlczpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgcCBvZiBzdmMucHJvZmlsZXMpIGxpbmVzLnB1c2goYCAgICAgIC0gJHtwfWApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3ZjLmVudl9maWxlICYmIHN2Yy5lbnZfZmlsZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZW52X2ZpbGU6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGYgb2Ygc3ZjLmVudl9maWxlKSBsaW5lcy5wdXNoKGAgICAgICAtICR7Zn1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5lbnZpcm9ubWVudCAmJiBPYmplY3Qua2V5cyhzdmMuZW52aXJvbm1lbnQpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBlbnZpcm9ubWVudDpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHN2Yy5lbnZpcm9ubWVudCkpIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKGAgICAgICAke2t9OiAke3Z9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5wb3J0cyAmJiBzdmMucG9ydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIHBvcnRzOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBwIG9mIHN2Yy5wb3J0cykgbGluZXMucHVzaChgICAgICAgLSBcIiR7cH1cImApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3ZjLnZvbHVtZXMgJiYgc3ZjLnZvbHVtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIHZvbHVtZXM6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2Ygc3ZjLnZvbHVtZXMpIGxpbmVzLnB1c2goYCAgICAgIC0gJHt2fWApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3ZjLm5ldHdvcmtzICYmIHN2Yy5uZXR3b3Jrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9ubHlTdHJpbmdzID0gc3ZjLm5ldHdvcmtzLmV2ZXJ5KChuKSA9PiB0eXBlb2YgbiA9PT0gXCJzdHJpbmdcIik7XG5cdFx0XHRcdGlmIChvbmx5U3RyaW5ncykge1xuXHRcdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgbmV0d29ya3M6XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgbiBvZiBzdmMubmV0d29ya3MpIGxpbmVzLnB1c2goYCAgICAgIC0gJHtuIGFzIHN0cmluZ31gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIG5ldHdvcmtzOlwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG4gb2Ygc3ZjLm5ldHdvcmtzKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIG4gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0bGluZXMucHVzaChgICAgICAgJHtufTpgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgW25ldEtleSwgY2ZnXSBvZiBPYmplY3QuZW50cmllcyhuKSkge1xuXHRcdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2goYCAgICAgICR7bmV0S2V5fTpgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY2ZnLmFsaWFzZXMgJiYgY2ZnLmFsaWFzZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGluZXMucHVzaChcIiAgICAgICAgYWxpYXNlczpcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGEgb2YgY2ZnLmFsaWFzZXMpIGxpbmVzLnB1c2goYCAgICAgICAgICAtICR7YX1gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5kZXBlbmRzX29uICYmIHN2Yy5kZXBlbmRzX29uLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBkZXBlbmRzX29uOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBkIG9mIHN2Yy5kZXBlbmRzX29uKSBsaW5lcy5wdXNoKGAgICAgICAtICR7ZH1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5oZWFsdGhjaGVjaykge1xuXHRcdFx0XHRjb25zdCBoYyA9IHN2Yy5oZWFsdGhjaGVjaztcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBoZWFsdGhjaGVjazpcIik7XG5cdFx0XHRcdGxpbmVzLnB1c2goYCAgICAgIHRlc3Q6ICR7SlNPTi5zdHJpbmdpZnkoaGMudGVzdCl9YCk7XG5cdFx0XHRcdGlmIChoYy5pbnRlcnZhbCkgbGluZXMucHVzaChgICAgICAgaW50ZXJ2YWw6ICR7aGMuaW50ZXJ2YWx9YCk7XG5cdFx0XHRcdGlmIChoYy50aW1lb3V0KSBsaW5lcy5wdXNoKGAgICAgICB0aW1lb3V0OiAke2hjLnRpbWVvdXR9YCk7XG5cdFx0XHRcdGlmIChoYy5yZXRyaWVzICE9IG51bGwpIGxpbmVzLnB1c2goYCAgICAgIHJldHJpZXM6ICR7aGMucmV0cmllc31gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fbmV0d29ya3Muc2l6ZSA+IDApIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIik7XG5cdFx0XHRsaW5lcy5wdXNoKFwibmV0d29ya3M6XCIpO1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCBuZXRdIG9mIHRoaXMuX25ldHdvcmtzKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goYCAgJHtrZXl9OmApO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGAgICAgbmFtZTogJHtuZXQubmFtZX1gKTtcblx0XHRcdFx0aWYgKG5ldC5leHRlcm5hbCkgbGluZXMucHVzaChcIiAgICBleHRlcm5hbDogdHJ1ZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fdm9sdW1lcy5zaXplID4gMCkge1xuXHRcdFx0bGluZXMucHVzaChcIlwiKTtcblx0XHRcdGxpbmVzLnB1c2goXCJ2b2x1bWVzOlwiKTtcblx0XHRcdGZvciAoY29uc3QgdiBvZiB0aGlzLl92b2x1bWVzKSBsaW5lcy5wdXNoKGAgICR7dn06YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuYDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJEb2NrZXJDb21wb3NlIiwia2V5IiwiRE9DS0VSX0NPTVBPU0UiLCJfcHJvamVjdE5hbWUiLCJfaGVhZGVyQ29tbWVudHMiLCJfc2VydmljZXMiLCJNYXAiLCJfdm9sdW1lcyIsIlNldCIsIl9uZXR3b3JrcyIsInNldFByb2plY3ROYW1lIiwibmFtZSIsImFkZEhlYWRlckNvbW1lbnQiLCJsaW5lcyIsInB1c2giLCJhZGRTZXJ2aWNlIiwiY29uZmlnIiwic2V0IiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiYWRkVm9sdW1lIiwiYWRkIiwiYWRkTmV0d29yayIsIm5ldHdvcmsiLCJhZGRFbnZGaWxlIiwic2VydmljZU5hbWUiLCJzdmMiLCJnZXQiLCJlbnZfZmlsZSIsImNvbW1lbnQiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiYnVpbGQiLCJpbWFnZSIsImNvbnRhaW5lcl9uYW1lIiwiY29tbWFuZCIsInVzZXIiLCJyZXN0YXJ0IiwicHJvZmlsZXMiLCJwIiwiZiIsImVudmlyb25tZW50IiwiT2JqZWN0Iiwia2V5cyIsImsiLCJ2IiwiZW50cmllcyIsInBvcnRzIiwidm9sdW1lcyIsIm5ldHdvcmtzIiwib25seVN0cmluZ3MiLCJldmVyeSIsIm4iLCJuZXRLZXkiLCJjZmciLCJhbGlhc2VzIiwiYSIsImRlcGVuZHNfb24iLCJkIiwiaGVhbHRoY2hlY2siLCJoYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0IiwiaW50ZXJ2YWwiLCJ0aW1lb3V0IiwicmV0cmllcyIsInNpemUiLCJuZXQiLCJleHRlcm5hbCIsImpvaW4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGdCQUFnQixRQUFRLGFBQWE7QUEyQzlDOzs7O0NBSUMsR0FDRCxPQUFPLE1BQU1DO0lBQ0lDLE1BQU1GLGlCQUFpQkcsY0FBYyxDQUFDO0lBQzlDQyxhQUFpQztJQUN4QkMsa0JBQTRCLEVBQUUsQ0FBQztJQUMvQkMsWUFBeUMsSUFBSUMsTUFBTTtJQUNuREMsV0FBd0IsSUFBSUMsTUFBTTtJQUNsQ0MsWUFBeUMsSUFBSUgsTUFBTTtJQUVwRSw0RUFBNEUsR0FDNUUsQUFBT0ksZUFBZUMsSUFBWSxFQUFRO1FBQ3pDLElBQUksQ0FBQ1IsWUFBWSxHQUFHUTtRQUNwQixPQUFPLElBQUk7SUFDWjtJQUVBLGtFQUFrRSxHQUNsRSxBQUFPQyxpQkFBaUIsR0FBR0MsS0FBZSxFQUFRO1FBQ2pELElBQUksQ0FBQ1QsZUFBZSxDQUFDVSxJQUFJLElBQUlEO1FBQzdCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFdBQVdKLElBQVksRUFBRUssTUFBc0IsRUFBUTtRQUM3RCxJQUFJLENBQUNYLFNBQVMsQ0FBQ1ksR0FBRyxDQUFDTixNQUFNSztRQUN6QixPQUFPLElBQUk7SUFDWjtJQUVPRSxRQUFRO1FBQ2QsT0FBTztZQUNOO2dCQUNDQyxVQUFV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
@@ -0,0 +1,76 @@
1
+ import { readFileSync } from "node:fs";
2
+ /**
3
+ * Builder for a YAML config file (e.g. config/config.yaml or config/config.dev.yaml).
4
+ *
5
+ * Starts with a base section passed to the constructor. Features call
6
+ * `addSection(yaml)` during their scaffold phase to append their own block.
7
+ * `files()` joins all sections with a blank line separator.
8
+ */ export class ConfigYaml {
9
+ key;
10
+ filePath;
11
+ _sections = [];
12
+ constructor(key, filePath, baseContent){
13
+ this.key = key;
14
+ this.filePath = filePath;
15
+ this._sections.push(baseContent);
16
+ }
17
+ addSection(yaml) {
18
+ this._sections.push(yaml);
19
+ return this;
20
+ }
21
+ /** True when a datasource with this `name:` already appears in the file. */ hasDataSource(name) {
22
+ return this._sections.join("\n").includes(`name: ${name}\n`);
23
+ }
24
+ hasDataSources() {
25
+ return this._sections.join("\n").includes("dataSources:");
26
+ }
27
+ /**
28
+ * Insert a `dataSources` list item. Used by `webapi add` so we do not write a
29
+ * second top-level `database:` key (YAML last-key-wins).
30
+ */ appendDataSource(item) {
31
+ const current = this._sections.join("\n");
32
+ this._sections.length = 0;
33
+ this._sections.push(injectYamlDataSource(current, item));
34
+ return this;
35
+ }
36
+ static fromFile(key, relativePath, absolutePath) {
37
+ const content = readFileSync(absolutePath, "utf8");
38
+ return new ConfigYaml(key, relativePath, content);
39
+ }
40
+ files() {
41
+ return [
42
+ {
43
+ filePath: this.filePath,
44
+ content: this._sections.join("\n")
45
+ }
46
+ ];
47
+ }
48
+ }
49
+ /** Insert a YAML list item under `dataSources:`; append a new `database:` block if missing. */ export function injectYamlDataSource(yaml, item) {
50
+ const block = item.replace(/\n$/, "");
51
+ if (!yaml.includes("dataSources:")) {
52
+ const prefix = yaml.trimEnd();
53
+ const section = `database:\n dataSources:\n${block}\n`;
54
+ return prefix.length > 0 ? `${prefix}\n\n${section}` : section;
55
+ }
56
+ const lines = yaml.split("\n");
57
+ const dsIndex = lines.findIndex((line)=>/^\s*dataSources:\s*$/.test(line));
58
+ if (dsIndex < 0) {
59
+ return `${yaml.trimEnd()}\n\ndatabase:\n dataSources:\n${block}\n`;
60
+ }
61
+ let insertAt = lines.length;
62
+ for(let i = dsIndex + 1; i < lines.length; i++){
63
+ if (/^[A-Za-z]/.test(lines[i] ?? "")) {
64
+ insertAt = i;
65
+ break;
66
+ }
67
+ }
68
+ const insertLines = block.split("\n");
69
+ if (insertAt < lines.length && lines[insertAt - 1] !== "") {
70
+ insertLines.push("");
71
+ }
72
+ lines.splice(insertAt, 0, ...insertLines);
73
+ return lines.join("\n");
74
+ }
75
+
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvY29uZmlnLXlhbWwubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgYSBZQU1MIGNvbmZpZyBmaWxlIChlLmcuIGNvbmZpZy9jb25maWcueWFtbCBvciBjb25maWcvY29uZmlnLmRldi55YW1sKS5cbiAqXG4gKiBTdGFydHMgd2l0aCBhIGJhc2Ugc2VjdGlvbiBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBGZWF0dXJlcyBjYWxsXG4gKiBgYWRkU2VjdGlvbih5YW1sKWAgZHVyaW5nIHRoZWlyIHNjYWZmb2xkIHBoYXNlIHRvIGFwcGVuZCB0aGVpciBvd24gYmxvY2suXG4gKiBgZmlsZXMoKWAgam9pbnMgYWxsIHNlY3Rpb25zIHdpdGggYSBibGFuayBsaW5lIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZ1lhbWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHJpdmF0ZSByZWFkb25seSBfc2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHB1YmxpYyByZWFkb25seSBrZXk6IHN0cmluZyxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmcsXG5cdFx0YmFzZUNvbnRlbnQ6IHN0cmluZyxcblx0KSB7XG5cdFx0dGhpcy5fc2VjdGlvbnMucHVzaChiYXNlQ29udGVudCk7XG5cdH1cblxuXHRwdWJsaWMgYWRkU2VjdGlvbih5YW1sOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9zZWN0aW9ucy5wdXNoKHlhbWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIFRydWUgd2hlbiBhIGRhdGFzb3VyY2Ugd2l0aCB0aGlzIGBuYW1lOmAgYWxyZWFkeSBhcHBlYXJzIGluIHRoZSBmaWxlLiAqL1xuXHRwdWJsaWMgaGFzRGF0YVNvdXJjZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fc2VjdGlvbnMuam9pbihcIlxcblwiKS5pbmNsdWRlcyhgbmFtZTogJHtuYW1lfVxcbmApO1xuXHR9XG5cblx0cHVibGljIGhhc0RhdGFTb3VyY2VzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9zZWN0aW9ucy5qb2luKFwiXFxuXCIpLmluY2x1ZGVzKFwiZGF0YVNvdXJjZXM6XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluc2VydCBhIGBkYXRhU291cmNlc2AgbGlzdCBpdGVtLiBVc2VkIGJ5IGB3ZWJhcGkgYWRkYCBzbyB3ZSBkbyBub3Qgd3JpdGUgYVxuXHQgKiBzZWNvbmQgdG9wLWxldmVsIGBkYXRhYmFzZTpgIGtleSAoWUFNTCBsYXN0LWtleS13aW5zKS5cblx0ICovXG5cdHB1YmxpYyBhcHBlbmREYXRhU291cmNlKGl0ZW06IHN0cmluZyk6IHRoaXMge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9zZWN0aW9ucy5qb2luKFwiXFxuXCIpO1xuXHRcdHRoaXMuX3NlY3Rpb25zLmxlbmd0aCA9IDA7XG5cdFx0dGhpcy5fc2VjdGlvbnMucHVzaChpbmplY3RZYW1sRGF0YVNvdXJjZShjdXJyZW50LCBpdGVtKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIGZyb21GaWxlKGtleTogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZywgYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBDb25maWdZYW1sIHtcblx0XHRjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGFic29sdXRlUGF0aCwgXCJ1dGY4XCIpO1xuXHRcdHJldHVybiBuZXcgQ29uZmlnWWFtbChrZXksIHJlbGF0aXZlUGF0aCwgY29udGVudCk7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW3sgZmlsZVBhdGg6IHRoaXMuZmlsZVBhdGgsIGNvbnRlbnQ6IHRoaXMuX3NlY3Rpb25zLmpvaW4oXCJcXG5cIikgfV07XG5cdH1cbn1cblxuLyoqIEluc2VydCBhIFlBTUwgbGlzdCBpdGVtIHVuZGVyIGBkYXRhU291cmNlczpgOyBhcHBlbmQgYSBuZXcgYGRhdGFiYXNlOmAgYmxvY2sgaWYgbWlzc2luZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RZYW1sRGF0YVNvdXJjZSh5YW1sOiBzdHJpbmcsIGl0ZW06IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IGJsb2NrID0gaXRlbS5yZXBsYWNlKC9cXG4kLywgXCJcIik7XG5cdGlmICgheWFtbC5pbmNsdWRlcyhcImRhdGFTb3VyY2VzOlwiKSkge1xuXHRcdGNvbnN0IHByZWZpeCA9IHlhbWwudHJpbUVuZCgpO1xuXHRcdGNvbnN0IHNlY3Rpb24gPSBgZGF0YWJhc2U6XFxuICBkYXRhU291cmNlczpcXG4ke2Jsb2NrfVxcbmA7XG5cdFx0cmV0dXJuIHByZWZpeC5sZW5ndGggPiAwID8gYCR7cHJlZml4fVxcblxcbiR7c2VjdGlvbn1gIDogc2VjdGlvbjtcblx0fVxuXHRjb25zdCBsaW5lcyA9IHlhbWwuc3BsaXQoXCJcXG5cIik7XG5cdGNvbnN0IGRzSW5kZXggPSBsaW5lcy5maW5kSW5kZXgoKGxpbmUpID0+IC9eXFxzKmRhdGFTb3VyY2VzOlxccyokLy50ZXN0KGxpbmUpKTtcblx0aWYgKGRzSW5kZXggPCAwKSB7XG5cdFx0cmV0dXJuIGAke3lhbWwudHJpbUVuZCgpfVxcblxcbmRhdGFiYXNlOlxcbiAgZGF0YVNvdXJjZXM6XFxuJHtibG9ja31cXG5gO1xuXHR9XG5cdGxldCBpbnNlcnRBdCA9IGxpbmVzLmxlbmd0aDtcblx0Zm9yIChsZXQgaSA9IGRzSW5kZXggKyAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoL15bQS1aYS16XS8udGVzdChsaW5lc1tpXSA/PyBcIlwiKSkge1xuXHRcdFx0aW5zZXJ0QXQgPSBpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGluc2VydExpbmVzID0gYmxvY2suc3BsaXQoXCJcXG5cIik7XG5cdGlmIChpbnNlcnRBdCA8IGxpbmVzLmxlbmd0aCAmJiBsaW5lc1tpbnNlcnRBdCAtIDFdICE9PSBcIlwiKSB7XG5cdFx0aW5zZXJ0TGluZXMucHVzaChcIlwiKTtcblx0fVxuXHRsaW5lcy5zcGxpY2UoaW5zZXJ0QXQsIDAsIC4uLmluc2VydExpbmVzKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG59XG4iXSwibmFtZXMiOlsicmVhZEZpbGVTeW5jIiwiQ29uZmlnWWFtbCIsIl9zZWN0aW9ucyIsImtleSIsImZpbGVQYXRoIiwiYmFzZUNvbnRlbnQiLCJwdXNoIiwiYWRkU2VjdGlvbiIsInlhbWwiLCJoYXNEYXRhU291cmNlIiwibmFtZSIsImpvaW4iLCJpbmNsdWRlcyIsImhhc0RhdGFTb3VyY2VzIiwiYXBwZW5kRGF0YVNvdXJjZSIsIml0ZW0iLCJjdXJyZW50IiwibGVuZ3RoIiwiaW5qZWN0WWFtbERhdGFTb3VyY2UiLCJmcm9tRmlsZSIsInJlbGF0aXZlUGF0aCIsImFic29sdXRlUGF0aCIsImNvbnRlbnQiLCJmaWxlcyIsImJsb2NrIiwicmVwbGFjZSIsInByZWZpeCIsInRyaW1FbmQiLCJzZWN0aW9uIiwibGluZXMiLCJzcGxpdCIsImRzSW5kZXgiLCJmaW5kSW5kZXgiLCJsaW5lIiwidGVzdCIsImluc2VydEF0IiwiaSIsImluc2VydExpbmVzIiwic3BsaWNlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLFFBQVEsVUFBVTtBQUd2Qzs7Ozs7O0NBTUMsR0FDRCxPQUFPLE1BQU1DOzs7SUFDS0MsWUFBc0IsRUFBRSxDQUFDO0lBRTFDLFlBQ0MsQUFBZ0JDLEdBQVcsRUFDM0Is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
@@ -0,0 +1,22 @@
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
+ PRODUCTION_DOCKERFILE: "PRODUCTION_DOCKERFILE",
8
+ GITHUB_CI: "GITHUB_CI",
9
+ PACKAGE_JSON: "PACKAGE_JSON",
10
+ API_PACKAGE_JSON: "API_PACKAGE_JSON",
11
+ TSCONFIG: "TSCONFIG",
12
+ VITEST_CONFIG: "VITEST_CONFIG",
13
+ MAIN_TS: "MAIN_TS",
14
+ CONTROLLER_TS: "CONTROLLER_TS",
15
+ CONFIG_YAML: "CONFIG_YAML",
16
+ CONFIG_DEV_YAML: "CONFIG_DEV_YAML",
17
+ GITIGNORE: "GITIGNORE",
18
+ AUTH_CONFIG: "AUTH_CONFIG",
19
+ ENV_FILE: "ENV_FILE"
20
+ };
21
+
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy9tb2RlbHMvY29uc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFdFTExfS05PV05fRklMRVMgPSB7XG5cdFZTQ09ERV9TRVRUSU5HUzogXCJWU0NPREVfU0VUVElOR1NcIixcblx0TEFVTkNIX0pTT046IFwiTEFVTkNIX0pTT05cIixcblx0RE9DS0VSX0NPTVBPU0U6IFwiRE9DS0VSX0NPTVBPU0VcIixcblx0REVWQ09OVEFJTkVSX0pTT046IFwiREVWQ09OVEFJTkVSX0pTT05cIixcblx0RE9DS0VSRklMRTogXCJET0NLRVJGSUxFXCIsXG5cdFBST0RVQ1RJT05fRE9DS0VSRklMRTogXCJQUk9EVUNUSU9OX0RPQ0tFUkZJTEVcIixcblx0R0lUSFVCX0NJOiBcIkdJVEhVQl9DSVwiLFxuXHRQQUNLQUdFX0pTT046IFwiUEFDS0FHRV9KU09OXCIsXG5cdEFQSV9QQUNLQUdFX0pTT046IFwiQVBJX1BBQ0tBR0VfSlNPTlwiLFxuXHRUU0NPTkZJRzogXCJUU0NPTkZJR1wiLFxuXHRWSVRFU1RfQ09ORklHOiBcIlZJVEVTVF9DT05GSUdcIixcblx0TUFJTl9UUzogXCJNQUlOX1RTXCIsXG5cdENPTlRST0xMRVJfVFM6IFwiQ09OVFJPTExFUl9UU1wiLFxuXHRDT05GSUdfWUFNTDogXCJDT05GSUdfWUFNTFwiLFxuXHRDT05GSUdfREVWX1lBTUw6IFwiQ09ORklHX0RFVl9ZQU1MXCIsXG5cdEdJVElHTk9SRTogXCJHSVRJR05PUkVcIixcblx0QVVUSF9DT05GSUc6IFwiQVVUSF9DT05GSUdcIixcblx0RU5WX0ZJTEU6IFwiRU5WX0ZJTEVcIixcbn07XG4iXSwibmFtZXMiOlsiV0VMTF9LTk9XTl9GSUxFUyIsIlZTQ09ERV9TRVRUSU5HUyIsIkxBVU5DSF9KU09OIiwiRE9DS0VSX0NPTVBPU0UiLCJERVZDT05UQUlORVJfSlNPTiIsIkRPQ0tFUkZJTEUiLCJQUk9EVUNUSU9OX0RPQ0tFUkZJTEUiLCJHSVRIVUJfQ0kiLCJQQUNLQUdFX0pTT04iLCJBUElfUEFDS0FHRV9KU09OIiwiVFNDT05GSUciLCJWSVRFU1RfQ09ORklHIiwiTUFJTl9UUyIsIkNPTlRST0xMRVJfVFMiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsIkdJVElHTk9SRSIsIkFVVEhfQ09ORklHIiwiRU5WX0ZJTEUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsbUJBQW1CO0lBQy9CQyxpQkFBaUI7SUFDakJDLGFBQWE7SUFDYkMsZ0JBQWdCO0lBQ2hCQyxtQkFBbUI7SUFDbkJDLFlBQVk7SUFDWkMsdUJBQXVCO0lBQ3ZCQyxXQUFXO0lBQ1hDLGNBQWM7SUFDZEMsa0JBQWtCO0lBQ2xCQyxVQUFVO0lBQ1ZDLGVBQWU7SUFDZkMsU0FBUztJQUNUQyxlQUFlO0lBQ2ZDLGFBQWE7SUFDYkMsaUJBQWlCO0lBQ2pCQyxXQUFXO0lBQ1hDLGFBQWE7SUFDYkMsVUFBVTtBQUNYLEVBQUUifQ==