@decohere/create 0.0.1-dev.48 → 0.0.1-dev.5

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 (127) hide show
  1. package/commonjs/src/cli.js +9 -3
  2. package/commonjs/src/scaffold.js +48 -0
  3. package/commonjs/src/templates.js +64 -0
  4. package/es6/src/cli.js +9 -3
  5. package/es6/src/scaffold.js +38 -0
  6. package/es6/src/templates.js +40 -0
  7. package/package.json +3 -8
  8. package/types/src/scaffold.d.ts +4 -0
  9. package/types/src/templates.d.ts +4 -0
  10. package/commonjs/src/domain/prompt.js +0 -64
  11. package/commonjs/src/models/compose.model.js +0 -138
  12. package/commonjs/src/models/config-yaml.model.js +0 -88
  13. package/commonjs/src/models/const.js +0 -31
  14. package/commonjs/src/models/dev-container.model.js +0 -100
  15. package/commonjs/src/models/docker-image.model.js +0 -221
  16. package/commonjs/src/models/env-file.model.js +0 -47
  17. package/commonjs/src/models/gitignore.model.js +0 -31
  18. package/commonjs/src/models/launch-json.model.js +0 -74
  19. package/commonjs/src/models/package-json.model.js +0 -133
  20. package/commonjs/src/models/project.model.js +0 -134
  21. package/commonjs/src/models/source-file.js +0 -6
  22. package/commonjs/src/models/tsconfig.model.js +0 -34
  23. package/commonjs/src/models/vscode-settings.model.js +0 -31
  24. package/commonjs/src/program.js +0 -135
  25. package/commonjs/src/resolve-target-dir.js +0 -19
  26. package/commonjs/src/runner.js +0 -144
  27. package/commonjs/src/services/scaffold.service.js +0 -62
  28. package/commonjs/src/version.js +0 -50
  29. package/commonjs/src/webapi/api-name.js +0 -95
  30. package/commonjs/src/webapi/const.js +0 -50
  31. package/commonjs/src/webapi/create-api.js +0 -285
  32. package/commonjs/src/webapi/features/auth.feature.js +0 -463
  33. package/commonjs/src/webapi/features/auth0-cli.js +0 -406
  34. package/commonjs/src/webapi/features/biome-format.js +0 -49
  35. package/commonjs/src/webapi/features/database.feature.js +0 -273
  36. package/commonjs/src/webapi/features/finalize.feature.js +0 -91
  37. package/commonjs/src/webapi/features/postman.feature.js +0 -319
  38. package/commonjs/src/webapi/models/api-package-json.model.js +0 -63
  39. package/commonjs/src/webapi/models/auth-config.model.js +0 -26
  40. package/commonjs/src/webapi/models/controller-source-file.model.js +0 -188
  41. package/commonjs/src/webapi/models/github-ci.model.js +0 -193
  42. package/commonjs/src/webapi/models/main-source-file.model.js +0 -165
  43. package/commonjs/src/webapi/models/production-dockerfile.model.js +0 -138
  44. package/commonjs/src/webapi/models/sample-files.model.js +0 -60
  45. package/commonjs/src/webapi/models/webapi-image.model.js +0 -22
  46. package/commonjs/src/webapi/postman/hello-openapi.js +0 -175
  47. package/commonjs/src/webapi/postman/local-view.js +0 -184
  48. package/commonjs/src/webapi/postman/openapi-to-postman.js +0 -202
  49. package/es6/src/domain/prompt.js +0 -43
  50. package/es6/src/models/compose.model.js +0 -132
  51. package/es6/src/models/config-yaml.model.js +0 -76
  52. package/es6/src/models/const.js +0 -21
  53. package/es6/src/models/dev-container.model.js +0 -90
  54. package/es6/src/models/docker-image.model.js +0 -185
  55. package/es6/src/models/env-file.model.js +0 -43
  56. package/es6/src/models/gitignore.model.js +0 -21
  57. package/es6/src/models/launch-json.model.js +0 -64
  58. package/es6/src/models/package-json.model.js +0 -129
  59. package/es6/src/models/project.model.js +0 -119
  60. package/es6/src/models/source-file.js +0 -3
  61. package/es6/src/models/tsconfig.model.js +0 -24
  62. package/es6/src/models/vscode-settings.model.js +0 -21
  63. package/es6/src/program.js +0 -76
  64. package/es6/src/resolve-target-dir.js +0 -9
  65. package/es6/src/runner.js +0 -146
  66. package/es6/src/services/scaffold.service.js +0 -52
  67. package/es6/src/version.js +0 -32
  68. package/es6/src/webapi/api-name.js +0 -59
  69. package/es6/src/webapi/const.js +0 -20
  70. package/es6/src/webapi/create-api.js +0 -265
  71. package/es6/src/webapi/features/auth.feature.js +0 -412
  72. package/es6/src/webapi/features/auth0-cli.js +0 -348
  73. package/es6/src/webapi/features/biome-format.js +0 -42
  74. package/es6/src/webapi/features/database.feature.js +0 -263
  75. package/es6/src/webapi/features/finalize.feature.js +0 -81
  76. package/es6/src/webapi/features/postman.feature.js +0 -253
  77. package/es6/src/webapi/models/api-package-json.model.js +0 -58
  78. package/es6/src/webapi/models/auth-config.model.js +0 -22
  79. package/es6/src/webapi/models/controller-source-file.model.js +0 -179
  80. package/es6/src/webapi/models/github-ci.model.js +0 -186
  81. package/es6/src/webapi/models/main-source-file.model.js +0 -161
  82. package/es6/src/webapi/models/production-dockerfile.model.js +0 -126
  83. package/es6/src/webapi/models/sample-files.model.js +0 -42
  84. package/es6/src/webapi/models/webapi-image.model.js +0 -12
  85. package/es6/src/webapi/postman/hello-openapi.js +0 -168
  86. package/es6/src/webapi/postman/local-view.js +0 -169
  87. package/es6/src/webapi/postman/openapi-to-postman.js +0 -179
  88. package/pack-builder-tgz.mjs +0 -177
  89. package/types/src/domain/prompt.d.ts +0 -4
  90. package/types/src/models/compose.model.d.ts +0 -59
  91. package/types/src/models/config-yaml.model.d.ts +0 -27
  92. package/types/src/models/const.d.ts +0 -19
  93. package/types/src/models/dev-container.model.d.ts +0 -33
  94. package/types/src/models/docker-image.model.d.ts +0 -56
  95. package/types/src/models/env-file.model.d.ts +0 -15
  96. package/types/src/models/gitignore.model.d.ts +0 -6
  97. package/types/src/models/launch-json.model.d.ts +0 -7
  98. package/types/src/models/package-json.model.d.ts +0 -32
  99. package/types/src/models/project.model.d.ts +0 -60
  100. package/types/src/models/source-file.d.ts +0 -11
  101. package/types/src/models/tsconfig.model.d.ts +0 -5
  102. package/types/src/models/vscode-settings.model.d.ts +0 -7
  103. package/types/src/program.d.ts +0 -3
  104. package/types/src/resolve-target-dir.d.ts +0 -5
  105. package/types/src/runner.d.ts +0 -15
  106. package/types/src/services/scaffold.service.d.ts +0 -22
  107. package/types/src/version.d.ts +0 -4
  108. package/types/src/webapi/api-name.d.ts +0 -14
  109. package/types/src/webapi/const.d.ts +0 -17
  110. package/types/src/webapi/create-api.d.ts +0 -15
  111. package/types/src/webapi/features/auth.feature.d.ts +0 -10
  112. package/types/src/webapi/features/auth0-cli.d.ts +0 -72
  113. package/types/src/webapi/features/biome-format.d.ts +0 -5
  114. package/types/src/webapi/features/database.feature.d.ts +0 -5
  115. package/types/src/webapi/features/finalize.feature.d.ts +0 -2
  116. package/types/src/webapi/features/postman.feature.d.ts +0 -16
  117. package/types/src/webapi/models/api-package-json.model.d.ts +0 -18
  118. package/types/src/webapi/models/auth-config.model.d.ts +0 -26
  119. package/types/src/webapi/models/controller-source-file.model.d.ts +0 -45
  120. package/types/src/webapi/models/github-ci.model.d.ts +0 -9
  121. package/types/src/webapi/models/main-source-file.model.d.ts +0 -54
  122. package/types/src/webapi/models/production-dockerfile.model.d.ts +0 -20
  123. package/types/src/webapi/models/sample-files.model.d.ts +0 -7
  124. package/types/src/webapi/models/webapi-image.model.d.ts +0 -5
  125. package/types/src/webapi/postman/hello-openapi.d.ts +0 -19
  126. package/types/src/webapi/postman/local-view.d.ts +0 -17
  127. package/types/src/webapi/postman/openapi-to-postman.d.ts +0 -62
@@ -3,7 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- const _program = require("./program.js");
7
- void (0, _program.runCli)();
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").action(async (directory, opts)=>{
11
+ await (0, _scaffold.scaffold)((0, _nodepath.resolve)(directory), opts);
12
+ });
13
+ program.parse();
8
14
 
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHJ1bkNsaSB9IGZyb20gXCIuL3Byb2dyYW0uanNcIjtcblxudm9pZCBydW5DbGkoKTtcbiJdLCJuYW1lcyI6WyJydW5DbGkiXSwibWFwcGluZ3MiOiI7Ozs7O3lCQUN1QjtBQUV2QixLQUFLQSxJQUFBQSxlQUFNIn0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBzY2FmZm9sZCB9IGZyb20gXCIuL3NjYWZmb2xkLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIilcblx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIlNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIilcblx0LmFjdGlvbihhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcsIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9KSA9PiB7XG5cdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0fSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdLCJuYW1lcyI6WyJwcm9ncmFtIiwiQ29tbWFuZCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50Iiwib3B0aW9uIiwiYWN0aW9uIiwiZGlyZWN0b3J5Iiwib3B0cyIsInNjYWZmb2xkIiwicmVzb2x2ZSIsInBhcnNlIl0sIm1hcHBpbmdzIjoiOzs7OzswQkFDd0I7MkJBQ0E7MEJBQ0M7QUFFekIsTUFBTUEsVUFBVSxJQUFJQyxrQkFBTztBQUUzQkQsUUFDRUUsSUFBSSxDQUFDLFlBQ0xDLFdBQVcsQ0FBQyxtQ0FDWkMsUUFBUSxDQUFDLGVBQWUsaURBQWlELEtBQ3pFQyxNQUFNLENBQUMsYUFBYSw2QkFDcEJDLE1BQU0sQ0FBQyxPQUFPQyxXQUFtQkM7SUFDakMsTUFBTUMsSUFBQUEsa0JBQVEsRUFBQ0MsSUFBQUEsaUJBQU8sRUFBQ0gsWUFBWUM7QUFDcEM7QUFFRFIsUUFBUVcsS0FBSyJ9
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "scaffold", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return scaffold;
9
+ }
10
+ });
11
+ const _nodefs = require("node:fs");
12
+ const _promises = require("node:fs/promises");
13
+ const _nodepath = require("node:path");
14
+ const _promises1 = require("node:readline/promises");
15
+ const _templates = require("./templates.js");
16
+ async function scaffold(targetDir, opts) {
17
+ const name = (0, _nodepath.basename)(targetDir);
18
+ if ((0, _nodefs.existsSync)(targetDir) && (0, _nodefs.readdirSync)(targetDir).length > 0 && !opts.yes) {
19
+ const rl = (0, _promises1.createInterface)({
20
+ input: process.stdin,
21
+ output: process.stdout
22
+ });
23
+ const answer = await rl.question(`Directory "${name}" is not empty. Continue? [y/N] `);
24
+ rl.close();
25
+ if (!answer.trim().toLowerCase().startsWith("y")) {
26
+ console.log("Aborted.");
27
+ process.exit(0);
28
+ }
29
+ }
30
+ await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "projects", "app", "src"), {
31
+ recursive: true
32
+ });
33
+ await Promise.all([
34
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "package.json"), (0, _templates.ROOT_PACKAGE_JSON)(name)),
35
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "tsconfig.json"), _templates.TSCONFIG),
36
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "app", "package.json"), (0, _templates.APP_PACKAGE_JSON)(name)),
37
+ (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "app", "src", "main.ts"), _templates.MAIN_TS)
38
+ ]);
39
+ console.log(`\nScaffolded ${name}. Next steps:\n`);
40
+ if ((0, _nodepath.basename)(targetDir) !== targetDir) {
41
+ console.log(` cd ${name}`);
42
+ }
43
+ console.log(" pnpm install");
44
+ console.log(" pnpm build # forge build");
45
+ console.log(" pnpm dev # flux serve\n");
46
+ }
47
+
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9zY2FmZm9sZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmUvcHJvbWlzZXNcIjtcbmltcG9ydCB7IEFQUF9QQUNLQUdFX0pTT04sIE1BSU5fVFMsIFJPT1RfUEFDS0FHRV9KU09OLCBUU0NPTkZJRyB9IGZyb20gXCIuL3RlbXBsYXRlcy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjYWZmb2xkT3B0aW9ucyB7XG5cdHllcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh0YXJnZXREaXI6IHN0cmluZywgb3B0czogU2NhZmZvbGRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG5hbWUgPSBiYXNlbmFtZSh0YXJnZXREaXIpO1xuXG5cdGlmIChleGlzdHNTeW5jKHRhcmdldERpcikgJiYgcmVhZGRpclN5bmModGFyZ2V0RGlyKS5sZW5ndGggPiAwICYmICFvcHRzLnllcykge1xuXHRcdGNvbnN0IHJsID0gY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBybC5xdWVzdGlvbihgRGlyZWN0b3J5IFwiJHtuYW1lfVwiIGlzIG5vdCBlbXB0eS4gQ29udGludWU/IFt5L05dIGApO1xuXHRcdHJsLmNsb3NlKCk7XG5cdFx0aWYgKCFhbnN3ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcInlcIikpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiQWJvcnRlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdFx0fVxuXHR9XG5cblx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicGFja2FnZS5qc29uXCIpLCBST09UX1BBQ0tBR0VfSlNPTihuYW1lKSksXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInRzY29uZmlnLmpzb25cIiksIFRTQ09ORklHKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJwYWNrYWdlLmpzb25cIiksIEFQUF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwcFwiLCBcInNyY1wiLCBcIm1haW4udHNcIiksIE1BSU5fVFMpLFxuXHRdKTtcblxuXHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke25hbWV9LiBOZXh0IHN0ZXBzOlxcbmApO1xuXHRpZiAoYmFzZW5hbWUodGFyZ2V0RGlyKSAhPT0gdGFyZ2V0RGlyKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgY2QgJHtuYW1lfWApO1xuXHR9XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGluc3RhbGxcIik7XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGJ1aWxkICAgICAjIGZvcmdlIGJ1aWxkXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBkZXYgICAgICAgIyBmbHV4IHNlcnZlXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbInNjYWZmb2xkIiwidGFyZ2V0RGlyIiwib3B0cyIsIm5hbWUiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkZGlyU3luYyIsImxlbmd0aCIsInllcyIsInJsIiwiY3JlYXRlSW50ZXJmYWNlIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJvdXRwdXQiLCJzdGRvdXQiLCJhbnN3ZXIiLCJxdWVzdGlvbiIsImNsb3NlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImNvbnNvbGUiLCJsb2ciLCJleGl0IiwibWtkaXIiLCJqb2luIiwicmVjdXJzaXZlIiwiUHJvbWlzZSIsImFsbCIsIndyaXRlRmlsZSIsIlJPT1RfUEFDS0FHRV9KU09OIiwiVFNDT05GSUciLCJBUFBfUEFDS0FHRV9KU09OIiwiTUFJTl9UUyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFVc0JBOzs7ZUFBQUE7Ozt3QkFWa0I7MEJBQ1A7MEJBQ0Y7MkJBQ0M7MkJBQ3VDO0FBTWhFLGVBQWVBLFNBQVNDLFNBQWlCLEVBQUVDLElBQXFCO0lBQ3RFLE1BQU1DLE9BQU9DLElBQUFBLGtCQUFRLEVBQUNIO0lBRXRCLElBQUlJLElBQUFBLGtCQUFVLEVBQUNKLGNBQWNLLElBQUFBLG1CQUFXLEVBQUNMLFdBQVdNLE1BQU0sR0FBRyxLQUFLLENBQUNMLEtBQUtNLEdBQUcsRUFBRTtRQUM1RSxNQUFNQyxLQUFLQyxJQUFBQSwwQkFBZSxFQUFDO1lBQzFCQyxPQUFPQyxRQUFRQyxLQUFLO1lBQ3BCQyxRQUFRRixRQUFRRyxNQUFNO1FBQ3ZCO1FBQ0EsTUFBTUMsU0FBUyxNQUFNUCxHQUFHUSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUVkLEtBQUssZ0NBQWdDLENBQUM7UUFDckZNLEdBQUdTLEtBQUs7UUFDUixJQUFJLENBQUNGLE9BQU9HLElBQUksR0FBR0MsV0FBVyxHQUFHQyxVQUFVLENBQUMsTUFBTTtZQUNqREMsUUFBUUMsR0FBRyxDQUFDO1lBQ1pYLFFBQVFZLElBQUksQ0FBQztRQUNkO0lBQ0Q7SUFFQSxNQUFNQyxJQUFBQSxlQUFLLEVBQUNDLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsWUFBWSxPQUFPLFFBQVE7UUFBRTBCLFdBQVc7SUFBSztJQUV6RSxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDakJDLElBQUFBLG1CQUFTLEVBQUNKLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsaUJBQWlCOEIsSUFBQUEsNEJBQWlCLEVBQUM1QjtRQUM3RDJCLElBQUFBLG1CQUFTLEVBQUNKLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsa0JBQWtCK0IsbUJBQVE7UUFDcERGLElBQUFBLG1CQUFTLEVBQUNKLElBQUFBLGNBQUksRUFBQ3pCLFdBQVcsWUFBWSxPQUFPLGlCQUFpQmdDLElBQUFBLDJCQUFnQixFQUFDOUI7UUFDL0UyQixJQUFBQSxtQkFBUyxFQUFDSixJQUFBQSxjQUFJLEVBQUN6QixXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVlpQyxrQkFBTztLQUN2RTtJQUVEWixRQUFRQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUVwQixLQUFLLGVBQWUsQ0FBQztJQUNqRCxJQUFJQyxJQUFBQSxrQkFBUSxFQUFDSCxlQUFlQSxXQUFXO1FBQ3RDcUIsUUFBUUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFcEIsTUFBTTtJQUMzQjtJQUNBbUIsUUFBUUMsR0FBRyxDQUFDO0lBQ1pELFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7QUFDYiJ9
@@ -0,0 +1,64 @@
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 APP_PACKAGE_JSON () {
13
+ return APP_PACKAGE_JSON;
14
+ },
15
+ get MAIN_TS () {
16
+ return MAIN_TS;
17
+ },
18
+ get ROOT_PACKAGE_JSON () {
19
+ return ROOT_PACKAGE_JSON;
20
+ },
21
+ get TSCONFIG () {
22
+ return TSCONFIG;
23
+ }
24
+ });
25
+ function ROOT_PACKAGE_JSON(name) {
26
+ return JSON.stringify({
27
+ name,
28
+ version: "0.0.1",
29
+ type: "module",
30
+ scripts: {
31
+ build: "forge build",
32
+ "build:watch": "forge build --watch",
33
+ dev: "flux serve"
34
+ },
35
+ devDependencies: {
36
+ "@decohere/terminal": "0.0.1-dev.14",
37
+ typescript: "^6.0.3"
38
+ }
39
+ }, null, 2);
40
+ }
41
+ function APP_PACKAGE_JSON(name) {
42
+ return JSON.stringify({
43
+ name: `@${name}/app`,
44
+ version: "0.0.1",
45
+ type: "module",
46
+ main: "src/main.ts"
47
+ }, null, 2);
48
+ }
49
+ const TSCONFIG = JSON.stringify({
50
+ compilerOptions: {
51
+ target: "ES2022",
52
+ module: "NodeNext",
53
+ moduleResolution: "NodeNext",
54
+ strict: true,
55
+ skipLibCheck: true
56
+ },
57
+ include: [
58
+ "projects"
59
+ ]
60
+ }, null, 2);
61
+ const MAIN_TS = `console.log("Hello from Decohere!");
62
+ `;
63
+
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy90ZW1wbGF0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIFJPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdHNjcmlwdHM6IHtcblx0XHRcdFx0YnVpbGQ6IFwiZm9yZ2UgYnVpbGRcIixcblx0XHRcdFx0XCJidWlsZDp3YXRjaFwiOiBcImZvcmdlIGJ1aWxkIC0td2F0Y2hcIixcblx0XHRcdFx0ZGV2OiBcImZsdXggc2VydmVcIixcblx0XHRcdH0sXG5cdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcdFx0XCJAZGVjb2hlcmUvdGVybWluYWxcIjogXCIwLjAuMS1kZXYuMTRcIixcblx0XHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBUFBfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lOiBgQCR7bmFtZX0vYXBwYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRtYWluOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBUU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHR9LFxuXHRcdGluY2x1ZGU6IFtcInByb2plY3RzXCJdLFxuXHR9LFxuXHRudWxsLFxuXHQyLFxuKTtcblxuZXhwb3J0IGNvbnN0IE1BSU5fVFMgPSBgY29uc29sZS5sb2coXCJIZWxsbyBmcm9tIERlY29oZXJlIVwiKTtcbmA7XG4iXSwibmFtZXMiOlsiQVBQX1BBQ0tBR0VfSlNPTiIsIk1BSU5fVFMiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlRTQ09ORklHIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2ZXJzaW9uIiwidHlwZSIsInNjcmlwdHMiLCJidWlsZCIsImRldiIsImRldkRlcGVuZGVuY2llcyIsInR5cGVzY3JpcHQiLCJtYWluIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImluY2x1ZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBcUJnQkE7ZUFBQUE7O1FBNEJIQztlQUFBQTs7UUFqREdDO2VBQUFBOztRQWtDSEM7ZUFBQUE7OztBQWxDTixTQUFTRCxrQkFBa0JFLElBQVk7SUFDN0MsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRjtRQUNBRyxTQUFTO1FBQ1RDLE1BQU07UUFDTkMsU0FBUztZQUNSQyxPQUFPO1lBQ1AsZUFBZTtZQUNmQyxLQUFLO1FBQ047UUFDQUMsaUJBQWlCO1lBQ2hCLHNCQUFzQjtZQUN0QkMsWUFBWTtRQUNiO0lBQ0QsR0FDQSxNQUNBO0FBRUY7QUFFTyxTQUFTYixpQkFBaUJJLElBQVk7SUFDNUMsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRixNQUFNLENBQUMsQ0FBQyxFQUFFQSxLQUFLLElBQUksQ0FBQztRQUNwQkcsU0FBUztRQUNUQyxNQUFNO1FBQ05NLE1BQU07SUFDUCxHQUNBLE1BQ0E7QUFFRjtBQUVPLE1BQU1YLFdBQVdFLEtBQUtDLFNBQVMsQ0FDckM7SUFDQ1MsaUJBQWlCO1FBQ2hCQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsa0JBQWtCO1FBQ2xCQyxRQUFRO1FBQ1JDLGNBQWM7SUFDZjtJQUNBQyxTQUFTO1FBQUM7S0FBVztBQUN0QixHQUNBLE1BQ0E7QUFHTSxNQUFNcEIsVUFBVSxDQUFDO0FBQ3hCLENBQUMifQ==
package/es6/src/cli.js CHANGED
@@ -1,5 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from "./program.js";
3
- void runCli();
2
+ import { resolve } from "node:path";
3
+ import { Command } from "commander";
4
+ import { scaffold } from "./scaffold.js";
5
+ const program = new Command();
6
+ program.name("decohere").description("Scaffold a new Decohere project").argument("[directory]", "Target directory (default: current directory)", ".").option("-y, --yes", "Skip confirmation prompts").action(async (directory, opts)=>{
7
+ await scaffold(resolve(directory), opts);
8
+ });
9
+ program.parse();
4
10
 
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHJ1bkNsaSB9IGZyb20gXCIuL3Byb2dyYW0uanNcIjtcblxudm9pZCBydW5DbGkoKTtcbiJdLCJuYW1lcyI6WyJydW5DbGkiXSwibWFwcGluZ3MiOiI7QUFDQSxTQUFTQSxNQUFNLFFBQVEsZUFBZTtBQUV0QyxLQUFLQSJ9
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBzY2FmZm9sZCB9IGZyb20gXCIuL3NjYWZmb2xkLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQuYXJndW1lbnQoXCJbZGlyZWN0b3J5XVwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIilcblx0Lm9wdGlvbihcIi15LCAtLXllc1wiLCBcIlNraXAgY29uZmlybWF0aW9uIHByb21wdHNcIilcblx0LmFjdGlvbihhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcsIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9KSA9PiB7XG5cdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0fSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdLCJuYW1lcyI6WyJyZXNvbHZlIiwiQ29tbWFuZCIsInNjYWZmb2xkIiwicHJvZ3JhbSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFyZ3VtZW50Iiwib3B0aW9uIiwiYWN0aW9uIiwiZGlyZWN0b3J5Iiwib3B0cyIsInBhcnNlIl0sIm1hcHBpbmdzIjoiO0FBQ0EsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsUUFBUSxRQUFRLGdCQUFnQjtBQUV6QyxNQUFNQyxVQUFVLElBQUlGO0FBRXBCRSxRQUNFQyxJQUFJLENBQUMsWUFDTEMsV0FBVyxDQUFDLG1DQUNaQyxRQUFRLENBQUMsZUFBZSxpREFBaUQsS0FDekVDLE1BQU0sQ0FBQyxhQUFhLDZCQUNwQkMsTUFBTSxDQUFDLE9BQU9DLFdBQW1CQztJQUNqQyxNQUFNUixTQUFTRixRQUFRUyxZQUFZQztBQUNwQztBQUVEUCxRQUFRUSxLQUFLIn0=
@@ -0,0 +1,38 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { basename, join } from "node:path";
4
+ import { createInterface } from "node:readline/promises";
5
+ import { APP_PACKAGE_JSON, MAIN_TS, ROOT_PACKAGE_JSON, TSCONFIG } from "./templates.js";
6
+ export async function scaffold(targetDir, opts) {
7
+ const name = basename(targetDir);
8
+ if (existsSync(targetDir) && readdirSync(targetDir).length > 0 && !opts.yes) {
9
+ const rl = createInterface({
10
+ input: process.stdin,
11
+ output: process.stdout
12
+ });
13
+ const answer = await rl.question(`Directory "${name}" is not empty. Continue? [y/N] `);
14
+ rl.close();
15
+ if (!answer.trim().toLowerCase().startsWith("y")) {
16
+ console.log("Aborted.");
17
+ process.exit(0);
18
+ }
19
+ }
20
+ await mkdir(join(targetDir, "projects", "app", "src"), {
21
+ recursive: true
22
+ });
23
+ await Promise.all([
24
+ writeFile(join(targetDir, "package.json"), ROOT_PACKAGE_JSON(name)),
25
+ writeFile(join(targetDir, "tsconfig.json"), TSCONFIG),
26
+ writeFile(join(targetDir, "projects", "app", "package.json"), APP_PACKAGE_JSON(name)),
27
+ writeFile(join(targetDir, "projects", "app", "src", "main.ts"), MAIN_TS)
28
+ ]);
29
+ console.log(`\nScaffolded ${name}. Next steps:\n`);
30
+ if (basename(targetDir) !== targetDir) {
31
+ console.log(` cd ${name}`);
32
+ }
33
+ console.log(" pnpm install");
34
+ console.log(" pnpm build # forge build");
35
+ console.log(" pnpm dev # flux serve\n");
36
+ }
37
+
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy9zY2FmZm9sZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmUvcHJvbWlzZXNcIjtcbmltcG9ydCB7IEFQUF9QQUNLQUdFX0pTT04sIE1BSU5fVFMsIFJPT1RfUEFDS0FHRV9KU09OLCBUU0NPTkZJRyB9IGZyb20gXCIuL3RlbXBsYXRlcy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjYWZmb2xkT3B0aW9ucyB7XG5cdHllcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh0YXJnZXREaXI6IHN0cmluZywgb3B0czogU2NhZmZvbGRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG5hbWUgPSBiYXNlbmFtZSh0YXJnZXREaXIpO1xuXG5cdGlmIChleGlzdHNTeW5jKHRhcmdldERpcikgJiYgcmVhZGRpclN5bmModGFyZ2V0RGlyKS5sZW5ndGggPiAwICYmICFvcHRzLnllcykge1xuXHRcdGNvbnN0IHJsID0gY3JlYXRlSW50ZXJmYWNlKHtcblx0XHRcdGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuXHRcdFx0b3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcblx0XHR9KTtcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBybC5xdWVzdGlvbihgRGlyZWN0b3J5IFwiJHtuYW1lfVwiIGlzIG5vdCBlbXB0eS4gQ29udGludWU/IFt5L05dIGApO1xuXHRcdHJsLmNsb3NlKCk7XG5cdFx0aWYgKCFhbnN3ZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcInlcIikpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiQWJvcnRlZC5cIik7XG5cdFx0XHRwcm9jZXNzLmV4aXQoMCk7XG5cdFx0fVxuXHR9XG5cblx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicGFja2FnZS5qc29uXCIpLCBST09UX1BBQ0tBR0VfSlNPTihuYW1lKSksXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInRzY29uZmlnLmpzb25cIiksIFRTQ09ORklHKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJwYWNrYWdlLmpzb25cIiksIEFQUF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwcFwiLCBcInNyY1wiLCBcIm1haW4udHNcIiksIE1BSU5fVFMpLFxuXHRdKTtcblxuXHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke25hbWV9LiBOZXh0IHN0ZXBzOlxcbmApO1xuXHRpZiAoYmFzZW5hbWUodGFyZ2V0RGlyKSAhPT0gdGFyZ2V0RGlyKSB7XG5cdFx0Y29uc29sZS5sb2coYCAgY2QgJHtuYW1lfWApO1xuXHR9XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGluc3RhbGxcIik7XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGJ1aWxkICAgICAjIGZvcmdlIGJ1aWxkXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBkZXYgICAgICAgIyBmbHV4IHNlcnZlXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkZGlyU3luYyIsIm1rZGlyIiwid3JpdGVGaWxlIiwiYmFzZW5hbWUiLCJqb2luIiwiY3JlYXRlSW50ZXJmYWNlIiwiQVBQX1BBQ0tBR0VfSlNPTiIsIk1BSU5fVFMiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlRTQ09ORklHIiwic2NhZmZvbGQiLCJ0YXJnZXREaXIiLCJvcHRzIiwibmFtZSIsImxlbmd0aCIsInllcyIsInJsIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJvdXRwdXQiLCJzdGRvdXQiLCJhbnN3ZXIiLCJxdWVzdGlvbiIsImNsb3NlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImNvbnNvbGUiLCJsb2ciLCJleGl0IiwicmVjdXJzaXZlIiwiUHJvbWlzZSIsImFsbCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxFQUFFQyxXQUFXLFFBQVEsVUFBVTtBQUNsRCxTQUFTQyxLQUFLLEVBQUVDLFNBQVMsUUFBUSxtQkFBbUI7QUFDcEQsU0FBU0MsUUFBUSxFQUFFQyxJQUFJLFFBQVEsWUFBWTtBQUMzQyxTQUFTQyxlQUFlLFFBQVEseUJBQXlCO0FBQ3pELFNBQVNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUVDLGlCQUFpQixFQUFFQyxRQUFRLFFBQVEsaUJBQWlCO0FBTXhGLE9BQU8sZUFBZUMsU0FBU0MsU0FBaUIsRUFBRUMsSUFBcUI7SUFDdEUsTUFBTUMsT0FBT1YsU0FBU1E7SUFFdEIsSUFBSVosV0FBV1ksY0FBY1gsWUFBWVcsV0FBV0csTUFBTSxHQUFHLEtBQUssQ0FBQ0YsS0FBS0csR0FBRyxFQUFFO1FBQzVFLE1BQU1DLEtBQUtYLGdCQUFnQjtZQUMxQlksT0FBT0MsUUFBUUMsS0FBSztZQUNwQkMsUUFBUUYsUUFBUUcsTUFBTTtRQUN2QjtRQUNBLE1BQU1DLFNBQVMsTUFBTU4sR0FBR08sUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFVixLQUFLLGdDQUFnQyxDQUFDO1FBQ3JGRyxHQUFHUSxLQUFLO1FBQ1IsSUFBSSxDQUFDRixPQUFPRyxJQUFJLEdBQUdDLFdBQVcsR0FBR0MsVUFBVSxDQUFDLE1BQU07WUFDakRDLFFBQVFDLEdBQUcsQ0FBQztZQUNaWCxRQUFRWSxJQUFJLENBQUM7UUFDZDtJQUNEO0lBRUEsTUFBTTdCLE1BQU1HLEtBQUtPLFdBQVcsWUFBWSxPQUFPLFFBQVE7UUFBRW9CLFdBQVc7SUFBSztJQUV6RSxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDakIvQixVQUFVRSxLQUFLTyxXQUFXLGlCQUFpQkgsa0JBQWtCSztRQUM3RFgsVUFBVUUsS0FBS08sV0FBVyxrQkFBa0JGO1FBQzVDUCxVQUFVRSxLQUFLTyxXQUFXLFlBQVksT0FBTyxpQkFBaUJMLGlCQUFpQk87UUFDL0VYLFVBQVVFLEtBQUtPLFdBQVcsWUFBWSxPQUFPLE9BQU8sWUFBWUo7S0FDaEU7SUFFRHFCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRWhCLEtBQUssZUFBZSxDQUFDO0lBQ2pELElBQUlWLFNBQVNRLGVBQWVBLFdBQVc7UUFDdENpQixRQUFRQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUVoQixNQUFNO0lBQzNCO0lBQ0FlLFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0FBQ2IifQ==
@@ -0,0 +1,40 @@
1
+ export function ROOT_PACKAGE_JSON(name) {
2
+ return JSON.stringify({
3
+ name,
4
+ version: "0.0.1",
5
+ type: "module",
6
+ scripts: {
7
+ build: "forge build",
8
+ "build:watch": "forge build --watch",
9
+ dev: "flux serve"
10
+ },
11
+ devDependencies: {
12
+ "@decohere/terminal": "0.0.1-dev.14",
13
+ typescript: "^6.0.3"
14
+ }
15
+ }, null, 2);
16
+ }
17
+ export function APP_PACKAGE_JSON(name) {
18
+ return JSON.stringify({
19
+ name: `@${name}/app`,
20
+ version: "0.0.1",
21
+ type: "module",
22
+ main: "src/main.ts"
23
+ }, null, 2);
24
+ }
25
+ export const TSCONFIG = JSON.stringify({
26
+ compilerOptions: {
27
+ target: "ES2022",
28
+ module: "NodeNext",
29
+ moduleResolution: "NodeNext",
30
+ strict: true,
31
+ skipLibCheck: true
32
+ },
33
+ include: [
34
+ "projects"
35
+ ]
36
+ }, null, 2);
37
+ export const MAIN_TS = `console.log("Hello from Decohere!");
38
+ `;
39
+
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9zcmMvcHJvamVjdHMvY3JlYXRlL3NyYy90ZW1wbGF0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIFJPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdHNjcmlwdHM6IHtcblx0XHRcdFx0YnVpbGQ6IFwiZm9yZ2UgYnVpbGRcIixcblx0XHRcdFx0XCJidWlsZDp3YXRjaFwiOiBcImZvcmdlIGJ1aWxkIC0td2F0Y2hcIixcblx0XHRcdFx0ZGV2OiBcImZsdXggc2VydmVcIixcblx0XHRcdH0sXG5cdFx0XHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcdFx0XCJAZGVjb2hlcmUvdGVybWluYWxcIjogXCIwLjAuMS1kZXYuMTRcIixcblx0XHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBUFBfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lOiBgQCR7bmFtZX0vYXBwYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRtYWluOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBUU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHR9LFxuXHRcdGluY2x1ZGU6IFtcInByb2plY3RzXCJdLFxuXHR9LFxuXHRudWxsLFxuXHQyLFxuKTtcblxuZXhwb3J0IGNvbnN0IE1BSU5fVFMgPSBgY29uc29sZS5sb2coXCJIZWxsbyBmcm9tIERlY29oZXJlIVwiKTtcbmA7XG4iXSwibmFtZXMiOlsiUk9PVF9QQUNLQUdFX0pTT04iLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInZlcnNpb24iLCJ0eXBlIiwic2NyaXB0cyIsImJ1aWxkIiwiZGV2IiwiZGV2RGVwZW5kZW5jaWVzIiwidHlwZXNjcmlwdCIsIkFQUF9QQUNLQUdFX0pTT04iLCJtYWluIiwiVFNDT05GSUciLCJjb21waWxlck9wdGlvbnMiLCJ0YXJnZXQiLCJtb2R1bGUiLCJtb2R1bGVSZXNvbHV0aW9uIiwic3RyaWN0Iiwic2tpcExpYkNoZWNrIiwiaW5jbHVkZSIsIk1BSU5fVFMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0Esa0JBQWtCQyxJQUFZO0lBQzdDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQ0Y7UUFDQUcsU0FBUztRQUNUQyxNQUFNO1FBQ05DLFNBQVM7WUFDUkMsT0FBTztZQUNQLGVBQWU7WUFDZkMsS0FBSztRQUNOO1FBQ0FDLGlCQUFpQjtZQUNoQixzQkFBc0I7WUFDdEJDLFlBQVk7UUFDYjtJQUNELEdBQ0EsTUFDQTtBQUVGO0FBRUEsT0FBTyxTQUFTQyxpQkFBaUJWLElBQVk7SUFDNUMsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRixNQUFNLENBQUMsQ0FBQyxFQUFFQSxLQUFLLElBQUksQ0FBQztRQUNwQkcsU0FBUztRQUNUQyxNQUFNO1FBQ05PLE1BQU07SUFDUCxHQUNBLE1BQ0E7QUFFRjtBQUVBLE9BQU8sTUFBTUMsV0FBV1gsS0FBS0MsU0FBUyxDQUNyQztJQUNDVyxpQkFBaUI7UUFDaEJDLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxrQkFBa0I7UUFDbEJDLFFBQVE7UUFDUkMsY0FBYztJQUNmO0lBQ0FDLFNBQVM7UUFBQztLQUFXO0FBQ3RCLEdBQ0EsTUFDQSxHQUNDO0FBRUYsT0FBTyxNQUFNQyxVQUFVLENBQUM7QUFDeEIsQ0FBQyxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/create",
3
- "version": "0.0.1-dev.48",
3
+ "version": "0.0.1-dev.5",
4
4
  "description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
5
5
  "keywords": [
6
6
  "decohere",
@@ -21,12 +21,7 @@
21
21
  "test": "echo \"Error: no test specified\" && exit 1"
22
22
  },
23
23
  "dependencies": {
24
- "@decohere/nexus": "0.0.1-dev.48",
25
- "commander": "^13.1.0",
26
- "openapi-to-postmanv2": "^5.0.0"
24
+ "commander": "^13.1.0"
27
25
  },
28
- "devDependencies": {},
29
- "decohere": {
30
- "dockerImageRepository": "ghcr.io/typesmiths/decohere/create"
31
- }
26
+ "devDependencies": {}
32
27
  }
@@ -0,0 +1,4 @@
1
+ export interface ScaffoldOptions {
2
+ yes?: boolean;
3
+ }
4
+ export declare function scaffold(targetDir: string, opts: ScaffoldOptions): Promise<void>;
@@ -0,0 +1,4 @@
1
+ export declare function ROOT_PACKAGE_JSON(name: string): string;
2
+ export declare function APP_PACKAGE_JSON(name: string): string;
3
+ export declare const TSCONFIG: string;
4
+ export declare const MAIN_TS = "console.log(\"Hello from Decohere!\");\n";
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get ask () {
13
- return ask;
14
- },
15
- get closePrompt () {
16
- return closePrompt;
17
- },
18
- get pick () {
19
- return pick;
20
- }
21
- });
22
- const _nodereadline = require("node:readline");
23
- // readline/promises rl.question() has a race condition with piped (non-TTY) stdin
24
- // in Node ≥ 22: after the first line is read, stdin emits 'end', readline closes,
25
- // and all subsequent question() calls resolve to "".
26
- // Fix: use the async-iterator API, which buffers all lines before the close event fires.
27
- let _rl = null;
28
- let _lines = null;
29
- function getLines() {
30
- if (_lines == null) {
31
- _rl = (0, _nodereadline.createInterface)({
32
- input: process.stdin,
33
- terminal: false
34
- });
35
- _lines = _rl[Symbol.asyncIterator]();
36
- }
37
- return _lines;
38
- }
39
- function closePrompt() {
40
- _rl?.close();
41
- _rl = null;
42
- _lines = null;
43
- }
44
- async function readLine(prompt) {
45
- process.stdout.write(prompt);
46
- const { value, done } = await getLines().next();
47
- return done ? "" : value.trim();
48
- }
49
- async function ask(question, fallback = "") {
50
- const answer = await readLine(question);
51
- return answer || fallback;
52
- }
53
- async function pick(label, items, display) {
54
- console.log(label.trimEnd());
55
- for (const [i, item] of items.entries()){
56
- console.log(` ${i + 1}. ${display(item)}`);
57
- }
58
- const answer = await readLine(" > ");
59
- const idx = Number.parseInt(answer, 10);
60
- if (Number.isNaN(idx) || idx < 1 || idx > items.length) return null;
61
- return items[idx - 1];
62
- }
63
-
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvZG9tYWluL3Byb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVJbnRlcmZhY2UsIHR5cGUgSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmVcIjtcblxuLy8gcmVhZGxpbmUvcHJvbWlzZXMgcmwucXVlc3Rpb24oKSBoYXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHBpcGVkIChub24tVFRZKSBzdGRpblxuLy8gaW4gTm9kZSDiiaUgMjI6IGFmdGVyIHRoZSBmaXJzdCBsaW5lIGlzIHJlYWQsIHN0ZGluIGVtaXRzICdlbmQnLCByZWFkbGluZSBjbG9zZXMsXG4vLyBhbmQgYWxsIHN1YnNlcXVlbnQgcXVlc3Rpb24oKSBjYWxscyByZXNvbHZlIHRvIFwiXCIuXG4vLyBGaXg6IHVzZSB0aGUgYXN5bmMtaXRlcmF0b3IgQVBJLCB3aGljaCBidWZmZXJzIGFsbCBsaW5lcyBiZWZvcmUgdGhlIGNsb3NlIGV2ZW50IGZpcmVzLlxuXG5sZXQgX3JsOiBJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbmxldCBfbGluZXM6IEFzeW5jSXRlcmF0b3I8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRMaW5lcygpOiBBc3luY0l0ZXJhdG9yPHN0cmluZz4ge1xuXHRpZiAoX2xpbmVzID09IG51bGwpIHtcblx0XHRfcmwgPSBjcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogcHJvY2Vzcy5zdGRpbiwgdGVybWluYWw6IGZhbHNlIH0pO1xuXHRcdF9saW5lcyA9IF9ybFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblx0fVxuXHRyZXR1cm4gX2xpbmVzO1xufVxuXG4vKiogUmVsZWFzZSBzdGRpbiBzbyB0aGUgcHJvY2VzcyBjYW4gZXhpdCBhZnRlciBpbnRlcmFjdGl2ZSBwcm9tcHRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlUHJvbXB0KCk6IHZvaWQge1xuXHRfcmw/LmNsb3NlKCk7XG5cdF9ybCA9IG51bGw7XG5cdF9saW5lcyA9IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRMaW5lKHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUocHJvbXB0KTtcblx0Y29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgZ2V0TGluZXMoKS5uZXh0KCk7XG5cdHJldHVybiBkb25lID8gXCJcIiA6IHZhbHVlLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzayhxdWVzdGlvbjogc3RyaW5nLCBmYWxsYmFjayA9IFwiXCIpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCByZWFkTGluZShxdWVzdGlvbik7XG5cdHJldHVybiBhbnN3ZXIgfHwgZmFsbGJhY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwaWNrPFQ+KFxuXHRsYWJlbDogc3RyaW5nLFxuXHRpdGVtczogVFtdLFxuXHRkaXNwbGF5OiAoaXRlbTogVCkgPT4gc3RyaW5nLFxuKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuXHRjb25zb2xlLmxvZyhsYWJlbC50cmltRW5kKCkpO1xuXHRmb3IgKGNvbnN0IFtpLCBpdGVtXSBvZiBpdGVtcy5lbnRyaWVzKCkpIHtcblx0XHRjb25zb2xlLmxvZyhgICAgICR7aSArIDF9LiAke2Rpc3BsYXkoaXRlbSl9YCk7XG5cdH1cblx0Y29uc3QgYW5zd2VyID0gYXdhaXQgcmVhZExpbmUoXCIgID4gXCIpO1xuXHRjb25zdCBpZHggPSBOdW1iZXIucGFyc2VJbnQoYW5zd2VyLCAxMCk7XG5cdGlmIChOdW1iZXIuaXNOYU4oaWR4KSB8fCBpZHggPCAxIHx8IGlkeCA+IGl0ZW1zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBpdGVtc1tpZHggLSAxXTtcbn1cbiJdLCJuYW1lcyI6WyJhc2siLCJjbG9zZVByb21wdCIsInBpY2siLCJfcmwiLCJfbGluZXMiLCJnZXRMaW5lcyIsImNyZWF0ZUludGVyZmFjZSIsImlucHV0IiwicHJvY2VzcyIsInN0ZGluIiwidGVybWluYWwiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiY2xvc2UiLCJyZWFkTGluZSIsInByb21wdCIsInN0ZG91dCIsIndyaXRlIiwidmFsdWUiLCJkb25lIiwibmV4dCIsInRyaW0iLCJxdWVzdGlvbiIsImZhbGxiYWNrIiwiYW5zd2VyIiwibGFiZWwiLCJpdGVtcyIsImRpc3BsYXkiLCJjb25zb2xlIiwibG9nIiwidHJpbUVuZCIsImkiLCJpdGVtIiwiZW50cmllcyIsImlkeCIsIk51bWJlciIsInBhcnNlSW50IiwiaXNOYU4iLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBK0JzQkE7ZUFBQUE7O1FBWk5DO2VBQUFBOztRQWlCTUM7ZUFBQUE7Ozs4QkFwQzBCO0FBRWhELGtGQUFrRjtBQUNsRixrRkFBa0Y7QUFDbEYscURBQXFEO0FBQ3JELHlGQUF5RjtBQUV6RixJQUFJQyxNQUF3QjtBQUM1QixJQUFJQyxTQUF1QztBQUUzQyxTQUFTQztJQUNSLElBQUlELFVBQVUsTUFBTTtRQUNuQkQsTUFBTUcsSUFBQUEsNkJBQWUsRUFBQztZQUFFQyxPQUFPQyxRQUFRQyxLQUFLO1lBQUVDLFVBQVU7UUFBTTtRQUM5RE4sU0FBU0QsR0FBRyxDQUFDUSxPQUFPQyxhQUFhLENBQUM7SUFDbkM7SUFDQSxPQUFPUjtBQUNSO0FBR08sU0FBU0g7SUFDZkUsS0FBS1U7SUFDTFYsTUFBTTtJQUNOQyxTQUFTO0FBQ1Y7QUFFQSxlQUFlVSxTQUFTQyxNQUFjO0lBQ3JDUCxRQUFRUSxNQUFNLENBQUNDLEtBQUssQ0FBQ0Y7SUFDckIsTUFBTSxFQUFFRyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHLE1BQU1kLFdBQVdlLElBQUk7SUFDN0MsT0FBT0QsT0FBTyxLQUFLRCxNQUFNRyxJQUFJO0FBQzlCO0FBRU8sZUFBZXJCLElBQUlzQixRQUFnQixFQUFFQyxXQUFXLEVBQUU7SUFDeEQsTUFBTUMsU0FBUyxNQUFNVixTQUFTUTtJQUM5QixPQUFPRSxVQUFVRDtBQUNsQjtBQUVPLGVBQWVyQixLQUNyQnVCLEtBQWEsRUFDYkMsS0FBVSxFQUNWQyxPQUE0QjtJQUU1QkMsUUFBUUMsR0FBRyxDQUFDSixNQUFNSyxPQUFPO0lBQ3pCLEtBQUssTUFBTSxDQUFDQyxHQUFHQyxLQUFLLElBQUlOLE1BQU1PLE9BQU8sR0FBSTtRQUN4Q0wsUUFBUUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFRSxJQUFJLEVBQUUsRUFBRSxFQUFFSixRQUFRSyxPQUFPO0lBQzdDO0lBQ0EsTUFBTVIsU0FBUyxNQUFNVixTQUFTO0lBQzlCLE1BQU1vQixNQUFNQyxPQUFPQyxRQUFRLENBQUNaLFFBQVE7SUFDcEMsSUFBSVcsT0FBT0UsS0FBSyxDQUFDSCxRQUFRQSxNQUFNLEtBQUtBLE1BQU1SLE1BQU1ZLE1BQU0sRUFBRSxPQUFPO0lBQy9ELE9BQU9aLEtBQUssQ0FBQ1EsTUFBTSxFQUFFO0FBQ3RCIn0=
@@ -1,138 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "DockerCompose", {
6
- enumerable: true,
7
- get: function() {
8
- return DockerCompose;
9
- }
10
- });
11
- const _const = require("./const.js");
12
- class DockerCompose {
13
- key = _const.WELL_KNOWN_FILES.DOCKER_COMPOSE;
14
- _projectName;
15
- _services = new Map();
16
- _volumes = new Set();
17
- _networks = new Map();
18
- /** Compose project name (`name:` top-level) — isolates containers/volumes. */ setProjectName(name) {
19
- this._projectName = name;
20
- return this;
21
- }
22
- addService(name, config) {
23
- this._services.set(name, config);
24
- return this;
25
- }
26
- files() {
27
- return [
28
- {
29
- filePath: ".devcontainer/docker-compose.yml",
30
- content: this.getContent()
31
- }
32
- ];
33
- }
34
- addVolume(name) {
35
- this._volumes.add(name);
36
- return this;
37
- }
38
- addNetwork(key, network) {
39
- this._networks.set(key, network);
40
- return this;
41
- }
42
- /** Append an env_file path to an existing service. */ addEnvFile(serviceName, filePath) {
43
- const svc = this._services.get(serviceName);
44
- if (svc) svc.env_file = [
45
- ...svc.env_file ?? [],
46
- filePath
47
- ];
48
- return this;
49
- }
50
- getContent() {
51
- const lines = [];
52
- if (this._projectName) {
53
- lines.push(`name: ${this._projectName}`, "");
54
- }
55
- lines.push("services:");
56
- for (const [name, svc] of this._services){
57
- lines.push(` ${name}:`);
58
- if (svc.build) lines.push(` build: ${svc.build}`);
59
- if (svc.image) lines.push(` image: ${svc.image}`);
60
- if (svc.container_name) lines.push(` container_name: ${svc.container_name}`);
61
- if (svc.command) lines.push(` command: ${svc.command}`);
62
- if (svc.restart) lines.push(` restart: ${svc.restart}`);
63
- if (svc.profiles && svc.profiles.length > 0) {
64
- lines.push(" profiles:");
65
- for (const p of svc.profiles)lines.push(` - ${p}`);
66
- }
67
- if (svc.env_file && svc.env_file.length > 0) {
68
- lines.push(" env_file:");
69
- for (const f of svc.env_file)lines.push(` - ${f}`);
70
- }
71
- if (svc.environment && Object.keys(svc.environment).length > 0) {
72
- lines.push(" environment:");
73
- for (const [k, v] of Object.entries(svc.environment)){
74
- lines.push(` ${k}: ${v}`);
75
- }
76
- }
77
- if (svc.ports && svc.ports.length > 0) {
78
- lines.push(" ports:");
79
- for (const p of svc.ports)lines.push(` - "${p}"`);
80
- }
81
- if (svc.volumes && svc.volumes.length > 0) {
82
- lines.push(" volumes:");
83
- for (const v of svc.volumes)lines.push(` - ${v}`);
84
- }
85
- if (svc.networks && svc.networks.length > 0) {
86
- const onlyStrings = svc.networks.every((n)=>typeof n === "string");
87
- if (onlyStrings) {
88
- lines.push(" networks:");
89
- for (const n of svc.networks)lines.push(` - ${n}`);
90
- } else {
91
- lines.push(" networks:");
92
- for (const n of svc.networks){
93
- if (typeof n === "string") {
94
- lines.push(` ${n}:`);
95
- } else {
96
- for (const [netKey, cfg] of Object.entries(n)){
97
- lines.push(` ${netKey}:`);
98
- if (cfg.aliases && cfg.aliases.length > 0) {
99
- lines.push(" aliases:");
100
- for (const a of cfg.aliases)lines.push(` - ${a}`);
101
- }
102
- }
103
- }
104
- }
105
- }
106
- }
107
- if (svc.depends_on && svc.depends_on.length > 0) {
108
- lines.push(" depends_on:");
109
- for (const d of svc.depends_on)lines.push(` - ${d}`);
110
- }
111
- if (svc.healthcheck) {
112
- const hc = svc.healthcheck;
113
- lines.push(" healthcheck:");
114
- lines.push(` test: ${JSON.stringify(hc.test)}`);
115
- if (hc.interval) lines.push(` interval: ${hc.interval}`);
116
- if (hc.timeout) lines.push(` timeout: ${hc.timeout}`);
117
- if (hc.retries != null) lines.push(` retries: ${hc.retries}`);
118
- }
119
- }
120
- if (this._networks.size > 0) {
121
- lines.push("");
122
- lines.push("networks:");
123
- for (const [key, net] of this._networks){
124
- lines.push(` ${key}:`);
125
- lines.push(` name: ${net.name}`);
126
- if (net.external) lines.push(" external: true");
127
- }
128
- }
129
- if (this._volumes.size > 0) {
130
- lines.push("");
131
- lines.push("volumes:");
132
- for (const v of this._volumes)lines.push(` ${v}:`);
133
- }
134
- return `${lines.join("\n")}\n`;
135
- }
136
- }
137
-
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbXBvc2UubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBDb21wb3NlTmV0d29ya1JlZiA9XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0LyoqIE5ldHdvcmsga2V5IHVuZGVyIGBuZXR3b3JrczpgIG9uIHRoaXMgc2VydmljZSAqL1xuXHRcdFx0W25ldHdvcmtLZXk6IHN0cmluZ106IHsgYWxpYXNlcz86IHN0cmluZ1tdIH07XG5cdCAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBDb21wb3NlSGVhbHRoY2hlY2sge1xuXHR0ZXN0OiBzdHJpbmdbXTtcblx0aW50ZXJ2YWw/OiBzdHJpbmc7XG5cdHRpbWVvdXQ/OiBzdHJpbmc7XG5cdHJldHJpZXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zZVNlcnZpY2Uge1xuXHRidWlsZD86IHN0cmluZztcblx0aW1hZ2U/OiBzdHJpbmc7XG5cdGNvbnRhaW5lcl9uYW1lPzogc3RyaW5nO1xuXHRlbnZfZmlsZT86IHN0cmluZ1tdO1xuXHRlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHBvcnRzPzogc3RyaW5nW107XG5cdHZvbHVtZXM/OiBzdHJpbmdbXTtcblx0Y29tbWFuZD86IHN0cmluZztcblx0cmVzdGFydD86IHN0cmluZztcblx0ZGVwZW5kc19vbj86IHN0cmluZ1tdO1xuXHQvKiogQ29tcG9zZSBwcm9maWxlcyAoc2VydmljZSBvbmx5IHN0YXJ0cyB3aGVuIHByb2ZpbGUgaXMgZW5hYmxlZCkuICovXG5cdHByb2ZpbGVzPzogc3RyaW5nW107XG5cdC8qKiBBdHRhY2ggdG8gY29tcG9zZSBuZXR3b3JrcyAoc3RyaW5nIG5hbWUgb3IgbWFwIHdpdGggYWxpYXNlcykuICovXG5cdG5ldHdvcmtzPzogQ29tcG9zZU5ldHdvcmtSZWZbXTtcblx0aGVhbHRoY2hlY2s/OiBDb21wb3NlSGVhbHRoY2hlY2s7XG59XG5cbmV4cG9ydCB0eXBlIENvbXBvc2VOZXR3b3JrID0ge1xuXHQvKiogRml4ZWQgRG9ja2VyIG5ldHdvcmsgbmFtZSAoc2hhcmVhYmxlIGFjcm9zcyBjb21wb3NlIHByb2plY3RzKS4gKi9cblx0bmFtZTogc3RyaW5nO1xuXHRleHRlcm5hbD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIExpdmUgYnVpbGRlciBmb3IgYGRvY2tlci1jb21wb3NlLnltbGAuXG4gKlxuICogRmVhdHVyZXMgY2FsbCBgYWRkU2VydmljZWAgLyBgYWRkVm9sdW1lYCAvIGBhZGROZXR3b3JrYCBpbiB0aGVpciBzY2FmZm9sZCBwaGFzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21wb3NlIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkRPQ0tFUl9DT01QT1NFO1xuXHRwcml2YXRlIF9wcm9qZWN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zZXJ2aWNlczogTWFwPHN0cmluZywgQ29tcG9zZVNlcnZpY2U+ID0gbmV3IE1hcCgpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF92b2x1bWVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfbmV0d29ya3M6IE1hcDxzdHJpbmcsIENvbXBvc2VOZXR3b3JrPiA9IG5ldyBNYXAoKTtcblxuXHQvKiogQ29tcG9zZSBwcm9qZWN0IG5hbWUgKGBuYW1lOmAgdG9wLWxldmVsKSDigJQgaXNvbGF0ZXMgY29udGFpbmVycy92b2x1bWVzLiAqL1xuXHRwdWJsaWMgc2V0UHJvamVjdE5hbWUobmFtZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fcHJvamVjdE5hbWUgPSBuYW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFNlcnZpY2UobmFtZTogc3RyaW5nLCBjb25maWc6IENvbXBvc2VTZXJ2aWNlKTogdGhpcyB7XG5cdFx0dGhpcy5fc2VydmljZXMuc2V0KG5hbWUsIGNvbmZpZyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9kb2NrZXItY29tcG9zZS55bWxcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cblxuXHRwdWJsaWMgYWRkVm9sdW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX3ZvbHVtZXMuYWRkKG5hbWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZE5ldHdvcmsoa2V5OiBzdHJpbmcsIG5ldHdvcms6IENvbXBvc2VOZXR3b3JrKTogdGhpcyB7XG5cdFx0dGhpcy5fbmV0d29ya3Muc2V0KGtleSwgbmV0d29yayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogQXBwZW5kIGFuIGVudl9maWxlIHBhdGggdG8gYW4gZXhpc3Rpbmcgc2VydmljZS4gKi9cblx0cHVibGljIGFkZEVudkZpbGUoc2VydmljZU5hbWU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IHRoaXMge1xuXHRcdGNvbnN0IHN2YyA9IHRoaXMuX3NlcnZpY2VzLmdldChzZXJ2aWNlTmFtZSk7XG5cdFx0aWYgKHN2Yykgc3ZjLmVudl9maWxlID0gWy4uLihzdmMuZW52X2ZpbGUgPz8gW10pLCBmaWxlUGF0aF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmICh0aGlzLl9wcm9qZWN0TmFtZSkge1xuXHRcdFx0bGluZXMucHVzaChgbmFtZTogJHt0aGlzLl9wcm9qZWN0TmFtZX1gLCBcIlwiKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaChcInNlcnZpY2VzOlwiKTtcblxuXHRcdGZvciAoY29uc3QgW25hbWUsIHN2Y10gb2YgdGhpcy5fc2VydmljZXMpIHtcblx0XHRcdGxpbmVzLnB1c2goYCAgJHtuYW1lfTpgKTtcblx0XHRcdGlmIChzdmMuYnVpbGQpIGxpbmVzLnB1c2goYCAgICBidWlsZDogJHtzdmMuYnVpbGR9YCk7XG5cdFx0XHRpZiAoc3ZjLmltYWdlKSBsaW5lcy5wdXNoKGAgICAgaW1hZ2U6ICR7c3ZjLmltYWdlfWApO1xuXHRcdFx0aWYgKHN2Yy5jb250YWluZXJfbmFtZSkgbGluZXMucHVzaChgICAgIGNvbnRhaW5lcl9uYW1lOiAke3N2Yy5jb250YWluZXJfbmFtZX1gKTtcblx0XHRcdGlmIChzdmMuY29tbWFuZCkgbGluZXMucHVzaChgICAgIGNvbW1hbmQ6ICR7c3ZjLmNvbW1hbmR9YCk7XG5cdFx0XHRpZiAoc3ZjLnJlc3RhcnQpIGxpbmVzLnB1c2goYCAgICByZXN0YXJ0OiAke3N2Yy5yZXN0YXJ0fWApO1xuXG5cdFx0XHRpZiAoc3ZjLnByb2ZpbGVzICYmIHN2Yy5wcm9maWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgcHJvZmlsZXM6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHAgb2Ygc3ZjLnByb2ZpbGVzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7cH1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5lbnZfZmlsZSAmJiBzdmMuZW52X2ZpbGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIGVudl9maWxlOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCBmIG9mIHN2Yy5lbnZfZmlsZSkgbGluZXMucHVzaChgICAgICAgLSAke2Z9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZW52aXJvbm1lbnQgJiYgT2JqZWN0LmtleXMoc3ZjLmVudmlyb25tZW50KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZW52aXJvbm1lbnQ6XCIpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdmMuZW52aXJvbm1lbnQpKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgICAgICAgJHtrfTogJHt2fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMucG9ydHMgJiYgc3ZjLnBvcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICBwb3J0czpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgcCBvZiBzdmMucG9ydHMpIGxpbmVzLnB1c2goYCAgICAgIC0gXCIke3B9XCJgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy52b2x1bWVzICYmIHN2Yy52b2x1bWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGluZXMucHVzaChcIiAgICB2b2x1bWVzOlwiKTtcblx0XHRcdFx0Zm9yIChjb25zdCB2IG9mIHN2Yy52b2x1bWVzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7dn1gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN2Yy5uZXR3b3JrcyAmJiBzdmMubmV0d29ya3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvbmx5U3RyaW5ncyA9IHN2Yy5uZXR3b3Jrcy5ldmVyeSgobikgPT4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIpO1xuXHRcdFx0XHRpZiAob25seVN0cmluZ3MpIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKFwiICAgIG5ldHdvcmtzOlwiKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG4gb2Ygc3ZjLm5ldHdvcmtzKSBsaW5lcy5wdXNoKGAgICAgICAtICR7biBhcyBzdHJpbmd9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChcIiAgICBuZXR3b3JrczpcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBuIG9mIHN2Yy5uZXR3b3Jrcykge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBuID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2goYCAgICAgICR7bn06YCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IFtuZXRLZXksIGNmZ10gb2YgT2JqZWN0LmVudHJpZXMobikpIHtcblx0XHRcdFx0XHRcdFx0XHRsaW5lcy5wdXNoKGAgICAgICAke25ldEtleX06YCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNmZy5hbGlhc2VzICYmIGNmZy5hbGlhc2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgICAgIGFsaWFzZXM6XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhIG9mIGNmZy5hbGlhc2VzKSBsaW5lcy5wdXNoKGAgICAgICAgICAgLSAke2F9YCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuZGVwZW5kc19vbiAmJiBzdmMuZGVwZW5kc19vbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgZGVwZW5kc19vbjpcIik7XG5cdFx0XHRcdGZvciAoY29uc3QgZCBvZiBzdmMuZGVwZW5kc19vbikgbGluZXMucHVzaChgICAgICAgLSAke2R9YCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdmMuaGVhbHRoY2hlY2spIHtcblx0XHRcdFx0Y29uc3QgaGMgPSBzdmMuaGVhbHRoY2hlY2s7XG5cdFx0XHRcdGxpbmVzLnB1c2goXCIgICAgaGVhbHRoY2hlY2s6XCIpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGAgICAgICB0ZXN0OiAke0pTT04uc3RyaW5naWZ5KGhjLnRlc3QpfWApO1xuXHRcdFx0XHRpZiAoaGMuaW50ZXJ2YWwpIGxpbmVzLnB1c2goYCAgICAgIGludGVydmFsOiAke2hjLmludGVydmFsfWApO1xuXHRcdFx0XHRpZiAoaGMudGltZW91dCkgbGluZXMucHVzaChgICAgICAgdGltZW91dDogJHtoYy50aW1lb3V0fWApO1xuXHRcdFx0XHRpZiAoaGMucmV0cmllcyAhPSBudWxsKSBsaW5lcy5wdXNoKGAgICAgICByZXRyaWVzOiAke2hjLnJldHJpZXN9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX25ldHdvcmtzLnNpemUgPiAwKSB7XG5cdFx0XHRsaW5lcy5wdXNoKFwiXCIpO1xuXHRcdFx0bGluZXMucHVzaChcIm5ldHdvcmtzOlwiKTtcblx0XHRcdGZvciAoY29uc3QgW2tleSwgbmV0XSBvZiB0aGlzLl9uZXR3b3Jrcykge1xuXHRcdFx0XHRsaW5lcy5wdXNoKGAgICR7a2V5fTpgKTtcblx0XHRcdFx0bGluZXMucHVzaChgICAgIG5hbWU6ICR7bmV0Lm5hbWV9YCk7XG5cdFx0XHRcdGlmIChuZXQuZXh0ZXJuYWwpIGxpbmVzLnB1c2goXCIgICAgZXh0ZXJuYWw6IHRydWVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX3ZvbHVtZXMuc2l6ZSA+IDApIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIik7XG5cdFx0XHRsaW5lcy5wdXNoKFwidm9sdW1lczpcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHYgb2YgdGhpcy5fdm9sdW1lcykgbGluZXMucHVzaChgICAke3Z9OmApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJEb2NrZXJDb21wb3NlIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIkRPQ0tFUl9DT01QT1NFIiwiX3Byb2plY3ROYW1lIiwiX3NlcnZpY2VzIiwiTWFwIiwiX3ZvbHVtZXMiLCJTZXQiLCJfbmV0d29ya3MiLCJzZXRQcm9qZWN0TmFtZSIsIm5hbWUiLCJhZGRTZXJ2aWNlIiwiY29uZmlnIiwic2V0IiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiYWRkVm9sdW1lIiwiYWRkIiwiYWRkTmV0d29yayIsIm5ldHdvcmsiLCJhZGRFbnZGaWxlIiwic2VydmljZU5hbWUiLCJzdmMiLCJnZXQiLCJlbnZfZmlsZSIsImxpbmVzIiwicHVzaCIsImJ1aWxkIiwiaW1hZ2UiLCJjb250YWluZXJfbmFtZSIsImNvbW1hbmQiLCJyZXN0YXJ0IiwicHJvZmlsZXMiLCJsZW5ndGgiLCJwIiwiZiIsImVudmlyb25tZW50IiwiT2JqZWN0Iiwia2V5cyIsImsiLCJ2IiwiZW50cmllcyIsInBvcnRzIiwidm9sdW1lcyIsIm5ldHdvcmtzIiwib25seVN0cmluZ3MiLCJldmVyeSIsIm4iLCJuZXRLZXkiLCJjZmciLCJhbGlhc2VzIiwiYSIsImRlcGVuZHNfb24iLCJkIiwiaGVhbHRoY2hlY2siLCJoYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0IiwiaW50ZXJ2YWwiLCJ0aW1lb3V0IiwicmV0cmllcyIsInNpemUiLCJuZXQiLCJleHRlcm5hbCIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7K0JBOENhQTs7O2VBQUFBOzs7dUJBOUNvQjtBQThDMUIsTUFBTUE7SUFDSUMsTUFBTUMsdUJBQWdCLENBQUNDLGNBQWMsQ0FBQztJQUM5Q0MsYUFBaUM7SUFDeEJDLFlBQXlDLElBQUlDLE1BQU07SUFDbkRDLFdBQXdCLElBQUlDLE1BQU07SUFDbENDLFlBQXlDLElBQUlILE1BQU07SUFFcEUsNEVBQTRFLEdBQzVFLEFBQU9JLGVBQWVDLElBQVksRUFBUTtRQUN6QyxJQUFJLENBQUNQLFlBQVksR0FBR087UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsV0FBV0QsSUFBWSxFQUFFRSxNQUFzQixFQUFRO1FBQzdELElB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
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get ConfigYaml () {
13
- return ConfigYaml;
14
- },
15
- get injectYamlDataSource () {
16
- return injectYamlDataSource;
17
- }
18
- });
19
- const _nodefs = require("node:fs");
20
- class ConfigYaml {
21
- key;
22
- filePath;
23
- _sections = [];
24
- constructor(key, filePath, baseContent){
25
- this.key = key;
26
- this.filePath = filePath;
27
- this._sections.push(baseContent);
28
- }
29
- addSection(yaml) {
30
- this._sections.push(yaml);
31
- return this;
32
- }
33
- /** True when a datasource with this `name:` already appears in the file. */ hasDataSource(name) {
34
- return this._sections.join("\n").includes(`name: ${name}\n`);
35
- }
36
- hasDataSources() {
37
- return this._sections.join("\n").includes("dataSources:");
38
- }
39
- /**
40
- * Insert a `dataSources` list item. Used by `webapi add` so we do not write a
41
- * second top-level `database:` key (YAML last-key-wins).
42
- */ appendDataSource(item) {
43
- const current = this._sections.join("\n");
44
- this._sections.length = 0;
45
- this._sections.push(injectYamlDataSource(current, item));
46
- return this;
47
- }
48
- static fromFile(key, relativePath, absolutePath) {
49
- const content = (0, _nodefs.readFileSync)(absolutePath, "utf8");
50
- return new ConfigYaml(key, relativePath, content);
51
- }
52
- files() {
53
- return [
54
- {
55
- filePath: this.filePath,
56
- content: this._sections.join("\n")
57
- }
58
- ];
59
- }
60
- }
61
- function injectYamlDataSource(yaml, item) {
62
- const block = item.replace(/\n$/, "");
63
- if (!yaml.includes("dataSources:")) {
64
- const prefix = yaml.trimEnd();
65
- const section = `database:\n dataSources:\n${block}\n`;
66
- return prefix.length > 0 ? `${prefix}\n\n${section}` : section;
67
- }
68
- const lines = yaml.split("\n");
69
- const dsIndex = lines.findIndex((line)=>/^\s*dataSources:\s*$/.test(line));
70
- if (dsIndex < 0) {
71
- return `${yaml.trimEnd()}\n\ndatabase:\n dataSources:\n${block}\n`;
72
- }
73
- let insertAt = lines.length;
74
- for(let i = dsIndex + 1; i < lines.length; i++){
75
- if (/^[A-Za-z]/.test(lines[i] ?? "")) {
76
- insertAt = i;
77
- break;
78
- }
79
- }
80
- const insertLines = block.split("\n");
81
- if (insertAt < lines.length && lines[insertAt - 1] !== "") {
82
- insertLines.push("");
83
- }
84
- lines.splice(insertAt, 0, ...insertLines);
85
- return lines.join("\n");
86
- }
87
-
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi9zb3VyY2UtZmlsZS5qc1wiO1xuXG4vKipcbiAqIEJ1aWxkZXIgZm9yIGEgWUFNTCBjb25maWcgZmlsZSAoZS5nLiBjb25maWcvY29uZmlnLnlhbWwgb3IgY29uZmlnL2NvbmZpZy5kZXYueWFtbCkuXG4gKlxuICogU3RhcnRzIHdpdGggYSBiYXNlIHNlY3Rpb24gcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gRmVhdHVyZXMgY2FsbFxuICogYGFkZFNlY3Rpb24oeWFtbClgIGR1cmluZyB0aGVpciBzY2FmZm9sZCBwaGFzZSB0byBhcHBlbmQgdGhlaXIgb3duIGJsb2NrLlxuICogYGZpbGVzKClgIGpvaW5zIGFsbCBzZWN0aW9ucyB3aXRoIGEgYmxhbmsgbGluZSBzZXBhcmF0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWdZYW1sIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3NlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwdWJsaWMgcmVhZG9ubHkga2V5OiBzdHJpbmcsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nLFxuXHRcdGJhc2VDb250ZW50OiBzdHJpbmcsXG5cdCkge1xuXHRcdHRoaXMuX3NlY3Rpb25zLnB1c2goYmFzZUNvbnRlbnQpO1xuXHR9XG5cblx0cHVibGljIGFkZFNlY3Rpb24oeWFtbDogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fc2VjdGlvbnMucHVzaCh5YW1sKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBUcnVlIHdoZW4gYSBkYXRhc291cmNlIHdpdGggdGhpcyBgbmFtZTpgIGFscmVhZHkgYXBwZWFycyBpbiB0aGUgZmlsZS4gKi9cblx0cHVibGljIGhhc0RhdGFTb3VyY2UobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3NlY3Rpb25zLmpvaW4oXCJcXG5cIikuaW5jbHVkZXMoYG5hbWU6ICR7bmFtZX1cXG5gKTtcblx0fVxuXG5cdHB1YmxpYyBoYXNEYXRhU291cmNlcygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fc2VjdGlvbnMuam9pbihcIlxcblwiKS5pbmNsdWRlcyhcImRhdGFTb3VyY2VzOlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnNlcnQgYSBgZGF0YVNvdXJjZXNgIGxpc3QgaXRlbS4gVXNlZCBieSBgd2ViYXBpIGFkZGAgc28gd2UgZG8gbm90IHdyaXRlIGFcblx0ICogc2Vjb25kIHRvcC1sZXZlbCBgZGF0YWJhc2U6YCBrZXkgKFlBTUwgbGFzdC1rZXktd2lucykuXG5cdCAqL1xuXHRwdWJsaWMgYXBwZW5kRGF0YVNvdXJjZShpdGVtOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5fc2VjdGlvbnMuam9pbihcIlxcblwiKTtcblx0XHR0aGlzLl9zZWN0aW9ucy5sZW5ndGggPSAwO1xuXHRcdHRoaXMuX3NlY3Rpb25zLnB1c2goaW5qZWN0WWFtbERhdGFTb3VyY2UoY3VycmVudCwgaXRlbSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHN0YXRpYyBmcm9tRmlsZShrZXk6IHN0cmluZywgcmVsYXRpdmVQYXRoOiBzdHJpbmcsIGFic29sdXRlUGF0aDogc3RyaW5nKTogQ29uZmlnWWFtbCB7XG5cdFx0Y29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhhYnNvbHV0ZVBhdGgsIFwidXRmOFwiKTtcblx0XHRyZXR1cm4gbmV3IENvbmZpZ1lhbWwoa2V5LCByZWxhdGl2ZVBhdGgsIGNvbnRlbnQpO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFt7IGZpbGVQYXRoOiB0aGlzLmZpbGVQYXRoLCBjb250ZW50OiB0aGlzLl9zZWN0aW9ucy5qb2luKFwiXFxuXCIpIH1dO1xuXHR9XG59XG5cbi8qKiBJbnNlcnQgYSBZQU1MIGxpc3QgaXRlbSB1bmRlciBgZGF0YVNvdXJjZXM6YDsgYXBwZW5kIGEgbmV3IGBkYXRhYmFzZTpgIGJsb2NrIGlmIG1pc3NpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0WWFtbERhdGFTb3VyY2UoeWFtbDogc3RyaW5nLCBpdGVtOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBibG9jayA9IGl0ZW0ucmVwbGFjZSgvXFxuJC8sIFwiXCIpO1xuXHRpZiAoIXlhbWwuaW5jbHVkZXMoXCJkYXRhU291cmNlczpcIikpIHtcblx0XHRjb25zdCBwcmVmaXggPSB5YW1sLnRyaW1FbmQoKTtcblx0XHRjb25zdCBzZWN0aW9uID0gYGRhdGFiYXNlOlxcbiAgZGF0YVNvdXJjZXM6XFxuJHtibG9ja31cXG5gO1xuXHRcdHJldHVybiBwcmVmaXgubGVuZ3RoID4gMCA/IGAke3ByZWZpeH1cXG5cXG4ke3NlY3Rpb259YCA6IHNlY3Rpb247XG5cdH1cblx0Y29uc3QgbGluZXMgPSB5YW1sLnNwbGl0KFwiXFxuXCIpO1xuXHRjb25zdCBkc0luZGV4ID0gbGluZXMuZmluZEluZGV4KChsaW5lKSA9PiAvXlxccypkYXRhU291cmNlczpcXHMqJC8udGVzdChsaW5lKSk7XG5cdGlmIChkc0luZGV4IDwgMCkge1xuXHRcdHJldHVybiBgJHt5YW1sLnRyaW1FbmQoKX1cXG5cXG5kYXRhYmFzZTpcXG4gIGRhdGFTb3VyY2VzOlxcbiR7YmxvY2t9XFxuYDtcblx0fVxuXHRsZXQgaW5zZXJ0QXQgPSBsaW5lcy5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSBkc0luZGV4ICsgMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKC9eW0EtWmEtel0vLnRlc3QobGluZXNbaV0gPz8gXCJcIikpIHtcblx0XHRcdGluc2VydEF0ID0gaTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpbnNlcnRMaW5lcyA9IGJsb2NrLnNwbGl0KFwiXFxuXCIpO1xuXHRpZiAoaW5zZXJ0QXQgPCBsaW5lcy5sZW5ndGggJiYgbGluZXNbaW5zZXJ0QXQgLSAxXSAhPT0gXCJcIikge1xuXHRcdGluc2VydExpbmVzLnB1c2goXCJcIik7XG5cdH1cblx0bGluZXMuc3BsaWNlKGluc2VydEF0LCAwLCAuLi5pbnNlcnRMaW5lcyk7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbIkNvbmZpZ1lhbWwiLCJpbmplY3RZYW1sRGF0YVNvdXJjZSIsIl9zZWN0aW9ucyIsImtleSIsImZpbGVQYXRoIiwiYmFzZUNvbnRlbnQiLCJwdXNoIiwiYWRkU2VjdGlvbiIsInlhbWwiLCJoYXNEYXRhU291cmNlIiwibmFtZSIsImpvaW4iLCJpbmNsdWRlcyIsImhhc0RhdGFTb3VyY2VzIiwiYXBwZW5kRGF0YVNvdXJjZSIsIml0ZW0iLCJjdXJyZW50IiwibGVuZ3RoIiwiZnJvbUZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJhYnNvbHV0ZVBhdGgiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwiZmlsZXMiLCJibG9jayIsInJlcGxhY2UiLCJwcmVmaXgiLCJ0cmltRW5kIiwic2VjdGlvbiIsImxpbmVzIiwic3BsaXQiLCJkc0luZGV4IiwiZmluZEluZGV4IiwibGluZSIsInRlc3QiLCJpbnNlcnRBdCIsImkiLCJpbnNlcnRMaW5lcyIsInNwbGljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFVYUE7ZUFBQUE7O1FBK0NHQztlQUFBQTs7O3dCQXpEYTtBQVV0QixNQUFNRDs7O0lBQ0tFLFlBQXNCLEVBQUUsQ0FBQztJQUUxQyxZQUNDLEFBQWdCQyxHQUFXLEVBQzNCLEFB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