@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.
- package/commonjs/src/cli.js +9 -3
- package/commonjs/src/scaffold.js +48 -0
- package/commonjs/src/templates.js +64 -0
- package/es6/src/cli.js +9 -3
- package/es6/src/scaffold.js +38 -0
- package/es6/src/templates.js +40 -0
- package/package.json +3 -8
- package/types/src/scaffold.d.ts +4 -0
- package/types/src/templates.d.ts +4 -0
- package/commonjs/src/domain/prompt.js +0 -64
- package/commonjs/src/models/compose.model.js +0 -138
- package/commonjs/src/models/config-yaml.model.js +0 -88
- package/commonjs/src/models/const.js +0 -31
- package/commonjs/src/models/dev-container.model.js +0 -100
- package/commonjs/src/models/docker-image.model.js +0 -221
- package/commonjs/src/models/env-file.model.js +0 -47
- package/commonjs/src/models/gitignore.model.js +0 -31
- package/commonjs/src/models/launch-json.model.js +0 -74
- package/commonjs/src/models/package-json.model.js +0 -133
- package/commonjs/src/models/project.model.js +0 -134
- package/commonjs/src/models/source-file.js +0 -6
- package/commonjs/src/models/tsconfig.model.js +0 -34
- package/commonjs/src/models/vscode-settings.model.js +0 -31
- package/commonjs/src/program.js +0 -135
- package/commonjs/src/resolve-target-dir.js +0 -19
- package/commonjs/src/runner.js +0 -144
- package/commonjs/src/services/scaffold.service.js +0 -62
- package/commonjs/src/version.js +0 -50
- package/commonjs/src/webapi/api-name.js +0 -95
- package/commonjs/src/webapi/const.js +0 -50
- package/commonjs/src/webapi/create-api.js +0 -285
- package/commonjs/src/webapi/features/auth.feature.js +0 -463
- package/commonjs/src/webapi/features/auth0-cli.js +0 -406
- package/commonjs/src/webapi/features/biome-format.js +0 -49
- package/commonjs/src/webapi/features/database.feature.js +0 -273
- package/commonjs/src/webapi/features/finalize.feature.js +0 -91
- package/commonjs/src/webapi/features/postman.feature.js +0 -319
- package/commonjs/src/webapi/models/api-package-json.model.js +0 -63
- package/commonjs/src/webapi/models/auth-config.model.js +0 -26
- package/commonjs/src/webapi/models/controller-source-file.model.js +0 -188
- package/commonjs/src/webapi/models/github-ci.model.js +0 -193
- package/commonjs/src/webapi/models/main-source-file.model.js +0 -165
- package/commonjs/src/webapi/models/production-dockerfile.model.js +0 -138
- package/commonjs/src/webapi/models/sample-files.model.js +0 -60
- package/commonjs/src/webapi/models/webapi-image.model.js +0 -22
- package/commonjs/src/webapi/postman/hello-openapi.js +0 -175
- package/commonjs/src/webapi/postman/local-view.js +0 -184
- package/commonjs/src/webapi/postman/openapi-to-postman.js +0 -202
- package/es6/src/domain/prompt.js +0 -43
- package/es6/src/models/compose.model.js +0 -132
- package/es6/src/models/config-yaml.model.js +0 -76
- package/es6/src/models/const.js +0 -21
- package/es6/src/models/dev-container.model.js +0 -90
- package/es6/src/models/docker-image.model.js +0 -185
- package/es6/src/models/env-file.model.js +0 -43
- package/es6/src/models/gitignore.model.js +0 -21
- package/es6/src/models/launch-json.model.js +0 -64
- package/es6/src/models/package-json.model.js +0 -129
- package/es6/src/models/project.model.js +0 -119
- package/es6/src/models/source-file.js +0 -3
- package/es6/src/models/tsconfig.model.js +0 -24
- package/es6/src/models/vscode-settings.model.js +0 -21
- package/es6/src/program.js +0 -76
- package/es6/src/resolve-target-dir.js +0 -9
- package/es6/src/runner.js +0 -146
- package/es6/src/services/scaffold.service.js +0 -52
- package/es6/src/version.js +0 -32
- package/es6/src/webapi/api-name.js +0 -59
- package/es6/src/webapi/const.js +0 -20
- package/es6/src/webapi/create-api.js +0 -265
- package/es6/src/webapi/features/auth.feature.js +0 -412
- package/es6/src/webapi/features/auth0-cli.js +0 -348
- package/es6/src/webapi/features/biome-format.js +0 -42
- package/es6/src/webapi/features/database.feature.js +0 -263
- package/es6/src/webapi/features/finalize.feature.js +0 -81
- package/es6/src/webapi/features/postman.feature.js +0 -253
- package/es6/src/webapi/models/api-package-json.model.js +0 -58
- package/es6/src/webapi/models/auth-config.model.js +0 -22
- package/es6/src/webapi/models/controller-source-file.model.js +0 -179
- package/es6/src/webapi/models/github-ci.model.js +0 -186
- package/es6/src/webapi/models/main-source-file.model.js +0 -161
- package/es6/src/webapi/models/production-dockerfile.model.js +0 -126
- package/es6/src/webapi/models/sample-files.model.js +0 -42
- package/es6/src/webapi/models/webapi-image.model.js +0 -12
- package/es6/src/webapi/postman/hello-openapi.js +0 -168
- package/es6/src/webapi/postman/local-view.js +0 -169
- package/es6/src/webapi/postman/openapi-to-postman.js +0 -179
- package/pack-builder-tgz.mjs +0 -177
- package/types/src/domain/prompt.d.ts +0 -4
- package/types/src/models/compose.model.d.ts +0 -59
- package/types/src/models/config-yaml.model.d.ts +0 -27
- package/types/src/models/const.d.ts +0 -19
- package/types/src/models/dev-container.model.d.ts +0 -33
- package/types/src/models/docker-image.model.d.ts +0 -56
- package/types/src/models/env-file.model.d.ts +0 -15
- package/types/src/models/gitignore.model.d.ts +0 -6
- package/types/src/models/launch-json.model.d.ts +0 -7
- package/types/src/models/package-json.model.d.ts +0 -32
- package/types/src/models/project.model.d.ts +0 -60
- package/types/src/models/source-file.d.ts +0 -11
- package/types/src/models/tsconfig.model.d.ts +0 -5
- package/types/src/models/vscode-settings.model.d.ts +0 -7
- package/types/src/program.d.ts +0 -3
- package/types/src/resolve-target-dir.d.ts +0 -5
- package/types/src/runner.d.ts +0 -15
- package/types/src/services/scaffold.service.d.ts +0 -22
- package/types/src/version.d.ts +0 -4
- package/types/src/webapi/api-name.d.ts +0 -14
- package/types/src/webapi/const.d.ts +0 -17
- package/types/src/webapi/create-api.d.ts +0 -15
- package/types/src/webapi/features/auth.feature.d.ts +0 -10
- package/types/src/webapi/features/auth0-cli.d.ts +0 -72
- package/types/src/webapi/features/biome-format.d.ts +0 -5
- package/types/src/webapi/features/database.feature.d.ts +0 -5
- package/types/src/webapi/features/finalize.feature.d.ts +0 -2
- package/types/src/webapi/features/postman.feature.d.ts +0 -16
- package/types/src/webapi/models/api-package-json.model.d.ts +0 -18
- package/types/src/webapi/models/auth-config.model.d.ts +0 -26
- package/types/src/webapi/models/controller-source-file.model.d.ts +0 -45
- package/types/src/webapi/models/github-ci.model.d.ts +0 -9
- package/types/src/webapi/models/main-source-file.model.d.ts +0 -54
- package/types/src/webapi/models/production-dockerfile.model.d.ts +0 -20
- package/types/src/webapi/models/sample-files.model.d.ts +0 -7
- package/types/src/webapi/models/webapi-image.model.d.ts +0 -5
- package/types/src/webapi/postman/hello-openapi.d.ts +0 -19
- package/types/src/webapi/postman/local-view.d.ts +0 -17
- package/types/src/webapi/postman/openapi-to-postman.d.ts +0 -62
package/commonjs/src/cli.js
CHANGED
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
const
|
|
7
|
-
|
|
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,
|
|
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 {
|
|
3
|
-
|
|
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,
|
|
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.
|
|
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
|
-
"
|
|
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
|
}
|
|
@@ -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+IDApIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIik7XG5cdFx0XHRsaW5lcy5wdXNoKFwidm9sdW1lczpcIik7XG5cdFx0XHRmb3IgKGNvbnN0IHYgb2YgdGhpcy5fdm9sdW1lcykgbGluZXMucHVzaChgICAke3Z9OmApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJEb2NrZXJDb21wb3NlIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIkRPQ0tFUl9DT01QT1NFIiwiX3Byb2plY3ROYW1lIiwiX3NlcnZpY2VzIiwiTWFwIiwiX3ZvbHVtZXMiLCJTZXQiLCJfbmV0d29ya3MiLCJzZXRQcm9qZWN0TmFtZSIsIm5hbWUiLCJhZGRTZXJ2aWNlIiwiY29uZmlnIiwic2V0IiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiYWRkVm9sdW1lIiwiYWRkIiwiYWRkTmV0d29yayIsIm5ldHdvcmsiLCJhZGRFbnZGaWxlIiwic2VydmljZU5hbWUiLCJzdmMiLCJnZXQiLCJlbnZfZmlsZSIsImxpbmVzIiwicHVzaCIsImJ1aWxkIiwiaW1hZ2UiLCJjb250YWluZXJfbmFtZSIsImNvbW1hbmQiLCJyZXN0YXJ0IiwicHJvZmlsZXMiLCJsZW5ndGgiLCJwIiwiZiIsImVudmlyb25tZW50IiwiT2JqZWN0Iiwia2V5cyIsImsiLCJ2IiwiZW50cmllcyIsInBvcnRzIiwidm9sdW1lcyIsIm5ldHdvcmtzIiwib25seVN0cmluZ3MiLCJldmVyeSIsIm4iLCJuZXRLZXkiLCJjZmciLCJhbGlhc2VzIiwiYSIsImRlcGVuZHNfb24iLCJkIiwiaGVhbHRoY2hlY2siLCJoYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0IiwiaW50ZXJ2YWwiLCJ0aW1lb3V0IiwicmV0cmllcyIsInNpemUiLCJuZXQiLCJleHRlcm5hbCIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7K0JBOENhQTs7O2VBQUFBOzs7dUJBOUNvQjtBQThDMUIsTUFBTUE7SUFDSUMsTUFBTUMsdUJBQWdCLENBQUNDLGNBQWMsQ0FBQztJQUM5Q0MsYUFBaUM7SUFDeEJDLFlBQXlDLElBQUlDLE1BQU07SUFDbkRDLFdBQXdCLElBQUlDLE1BQU07SUFDbENDLFlBQXlDLElBQUlILE1BQU07SUFFcEUsNEVBQTRFLEdBQzVFLEFBQU9JLGVBQWVDLElBQVksRUFBUTtRQUN6QyxJQUFJLENBQUNQLFlBQVksR0FBR087UUFDcEIsT0FBTyxJQUFJO0lBQ1o7SUFFT0MsV0FBV0QsSUFBWSxFQUFFRSxNQUFzQixFQUFRO1FBQzdELElBQUksQ0FBQ1IsU0FBUyxDQUFDUyxHQUFHLENBQUNILE1BQU1FO1FBQ3pCLE9BQU8sSUFBSTtJQUNaO0lBRU9FLFFBQVE7UUFDZCxPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVMsSUFBSSxDQUFDQyxVQUFVO1lBQ3pCO1NBQ0E7SUFDRjtJQUVPQyxVQUFVUixJQUFZLEVBQVE7UUFDcEMsSUFBSSxDQUFDSixRQUFRLENBQUNhLEdBQUcsQ0FBQ1Q7UUFDbEIsT0FBTyxJQUFJO0lBQ1o7SUFFT1UsV0FBV3BCLEdBQVcsRUFBRXFCLE9BQXVCLEVBQVE7UUFDN0QsSUFBSSxDQUFDYixTQUFTLENBQUNLLEdBQUcsQ0FBQ2IsS0FBS3FCO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRUEsb0RBQW9ELEdBQ3BELEFBQU9DLFdBQVdDLFdBQW1CLEVBQUVSLFFBQWdCLEVBQVE7UUFDOUQsTUFBTVMsTUFBTSxJQUFJLENBQUNwQixTQUFTLENBQUNxQixHQUFHLENBQUNGO1FBQy9CLElBQUlDLEtBQUtBLElBQUlFLFFBQVEsR0FBRztlQUFLRixJQUFJRSxRQUFRLElBQUksRUFBRTtZQUFHWDtTQUFTO1FBQzNELE9BQU8sSUFBSTtJQUNaO0lBRU9FLGFBQXFCO1FBQzNCLE1BQU1VLFFBQWtCLEVBQUU7UUFDMUIsSUFBSSxJQUFJLENBQUN4QixZQUFZLEVBQUU7WUFDdEJ3QixNQUFNQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDekIsWUFBWSxFQUFFLEVBQUU7UUFDMUM7UUFDQXdCLE1BQU1DLElBQUksQ0FBQztRQUVYLEtBQUssTUFBTSxDQUFDbEIsTUFBTWMsSUFBSSxJQUFJLElBQUksQ0FBQ3BCLFNBQVMsQ0FBRTtZQUN6Q3VCLE1BQU1DLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRWxCLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUljLElBQUlLLEtBQUssRUFBRUYsTUFBTUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFSixJQUFJSyxLQUFLLEVBQUU7WUFDbkQsSUFBSUwsSUFBSU0sS0FBSyxFQUFFSCxNQUFNQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUVKLElBQUlNLEtBQUssRUFBRTtZQUNuRCxJQUFJTixJQUFJTyxjQUFjLEVBQUVKLE1BQU1DLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFSixJQUFJTyxjQUFjLEVBQUU7WUFDOUUsSUFBSVAsSUFBSVEsT0FBTyxFQUFFTCxNQUFNQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUVKLElBQUlRLE9BQU8sRUFBRTtZQUN6RCxJQUFJUixJQUFJUyxPQUFPLEVBQUVOLE1BQU1DLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRUosSUFBSVMsT0FBTyxFQUFFO1lBRXpELElBQUlULElBQUlVLFFBQVEsSUFBSVYsSUFBSVUsUUFBUSxDQUFDQyxNQUFNLEdBQUcsR0FBRztnQkFDNUNSLE1BQU1DLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU1RLEtBQUtaLElBQUlVLFFBQVEsQ0FBRVAsTUFBTUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFUSxHQUFHO1lBQ3hEO1lBRUEsSUFBSVosSUFBSUUsUUFBUSxJQUFJRixJQUFJRSxRQUFRLENBQUNTLE1BQU0sR0FBRyxHQUFHO2dCQUM1Q1IsTUFBTUMsSUFBSSxDQUFDO2dCQUNYLEtBQUssTUFBTVMsS0FBS2IsSUFBSUUsUUFBUSxDQUFFQyxNQUFNQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUVTLEdBQUc7WUFDeEQ7WUFFQSxJQUFJYixJQUFJYyxXQUFXLElBQUlDLE9BQU9DLElBQUksQ0FBQ2hCLElBQUljLFdBQVcsRUFBRUgsTUFBTSxHQUFHLEdBQUc7Z0JBQy9EUixNQUFNQyxJQUFJLENBQUM7Z0JBQ1gsS0FBSyxNQUFNLENBQUNhLEdBQUdDLEVBQUUsSUFBSUgsT0FBT0ksT0FBTyxDQUFDbkIsSUFBSWMsV0FBVyxFQUFHO29CQUNyRFgsTUFBTUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFYSxFQUFFLEVBQUUsRUFBRUMsR0FBRztnQkFDOUI7WUFDRDtZQUVBLElBQUlsQixJQUFJb0IsS0FBSyxJQUFJcEIsSUFBSW9CLEtBQUssQ0FBQ1QsTUFBTSxHQUFHLEdBQUc7Z0JBQ3RDUixNQUFNQyxJQUFJLENBQUM7Z0JBQ1gsS0FBSyxNQUFNUSxLQUFLWixJQUFJb0IsS0FBSyxDQUFFakIsTUFBTUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFUSxFQUFFLENBQUMsQ0FBQztZQUN2RDtZQUVBLElBQUlaLElBQUlxQixPQUFPLElBQUlyQixJQUFJcUIsT0FBTyxDQUFDVixNQUFNLEdBQUcsR0FBRztnQkFDMUNSLE1BQU1DLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU1jLEtBQUtsQixJQUFJcUIsT0FBTyxDQUFFbEIsTUFBTUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFYyxHQUFHO1lBQ3ZEO1lBRUEsSUFBSWxCLElBQUlzQixRQUFRLElBQUl0QixJQUFJc0IsUUFBUSxDQUFDWCxNQUFNLEdBQUcsR0FBRztnQkFDNUMsTUFBTVksY0FBY3ZCLElBQUlzQixRQUFRLENBQUNFLEtBQUssQ0FBQyxDQUFDQyxJQUFNLE9BQU9BLE1BQU07Z0JBQzNELElBQUlGLGFBQWE7b0JBQ2hCcEIsTUFBTUMsSUFBSSxDQUFDO29CQUNYLEtBQUssTUFBTXFCLEtBQUt6QixJQUFJc0IsUUFBUSxDQUFFbkIsTUFBTUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFcUIsR0FBYTtnQkFDbEUsT0FBTztvQkFDTnRCLE1BQU1DLElBQUksQ0FBQztvQkFDWCxLQUFLLE1BQU1xQixLQUFLekIsSUFBSXNCLFFBQVEsQ0FBRTt3QkFDN0IsSUFBSSxPQUFPRyxNQUFNLFVBQVU7NEJBQzFCdEIsTUFBTUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFcUIsRUFBRSxDQUFDLENBQUM7d0JBQ3pCLE9BQU87NEJBQ04sS0FBSyxNQUFNLENBQUNDLFFBQVFDLElBQUksSUFBSVosT0FBT0ksT0FBTyxDQUFDTSxHQUFJO2dDQUM5Q3RCLE1BQU1DLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRXNCLE9BQU8sQ0FBQyxDQUFDO2dDQUM3QixJQUFJQyxJQUFJQyxPQUFPLElBQUlELElBQUlDLE9BQU8sQ0FBQ2pCLE1BQU0sR0FBRyxHQUFHO29DQUMxQ1IsTUFBTUMsSUFBSSxDQUFDO29DQUNYLEtBQUssTUFBTXlCLEtBQUtGLElBQUlDLE9BQU8sQ0FBRXpCLE1BQU1DLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRXlCLEdBQUc7Z0NBQzNEOzRCQUNEO3dCQUNEO29CQUNEO2dCQUNEO1lBQ0Q7WUFFQSxJQUFJN0IsSUFBSThCLFVBQVUsSUFBSTlCLElBQUk4QixVQUFVLENBQUNuQixNQUFNLEdBQUcsR0FBRztnQkFDaERSLE1BQU1DLElBQUksQ0FBQztnQkFDWCxLQUFLLE1BQU0yQixLQUFLL0IsSUFBSThCLFVBQVUsQ0FBRTNCLE1BQU1DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTJCLEdBQUc7WUFDMUQ7WUFFQSxJQUFJL0IsSUFBSWdDLFdBQVcsRUFBRTtnQkFDcEIsTUFBTUMsS0FBS2pDLElBQUlnQyxXQUFXO2dCQUMxQjdCLE1BQU1DLElBQUksQ0FBQztnQkFDWEQsTUFBTUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFOEIsS0FBS0MsU0FBUyxDQUFDRixHQUFHRyxJQUFJLEdBQUc7Z0JBQ25ELElBQUlILEdBQUdJLFFBQVEsRUFBRWxDLE1BQU1DLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFNkIsR0FBR0ksUUFBUSxFQUFFO2dCQUM1RCxJQUFJSixHQUFHSyxPQUFPLEVBQUVuQyxNQUFNQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUU2QixHQUFHSyxPQUFPLEVBQUU7Z0JBQ3pELElBQUlMLEdBQUdNLE9BQU8sSUFBSSxNQUFNcEMsTUFBTUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFNkIsR0FBR00sT0FBTyxFQUFFO1lBQ2xFO1FBQ0Q7UUFFQSxJQUFJLElBQUksQ0FBQ3ZELFNBQVMsQ0FBQ3dELElBQUksR0FBRyxHQUFHO1lBQzVCckMsTUFBTUMsSUFBSSxDQUFDO1lBQ1hELE1BQU1DLElBQUksQ0FBQztZQUNYLEtBQUssTUFBTSxDQUFDNUIsS0FBS2lFLElBQUksSUFBSSxJQUFJLENBQUN6RCxTQUFTLENBQUU7Z0JBQ3hDbUIsTUFBTUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFNUIsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCMkIsTUFBTUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFcUMsSUFBSXZELElBQUksRUFBRTtnQkFDbEMsSUFBSXVELElBQUlDLFFBQVEsRUFBRXZDLE1BQU1DLElBQUksQ0FBQztZQUM5QjtRQUNEO1FBRUEsSUFBSSxJQUFJLENBQUN0QixRQUFRLENBQUMwRCxJQUFJLEdBQUcsR0FBRztZQUMzQnJDLE1BQU1DLElBQUksQ0FBQztZQUNYRCxNQUFNQyxJQUFJLENBQUM7WUFDWCxLQUFLLE1BQU1jLEtBQUssSUFBSSxDQUFDcEMsUUFBUSxDQUFFcUIsTUFBTUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFYyxFQUFFLENBQUMsQ0FBQztRQUNwRDtRQUVBLE9BQU8sR0FBR2YsTUFBTXdDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvQjtBQUNEIn0=
|
|
@@ -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/IGAke3ByZWZpeH1cXG5cXG4ke3NlY3Rpb259YCA6IHNlY3Rpb247XG5cdH1cblx0Y29uc3QgbGluZXMgPSB5YW1sLnNwbGl0KFwiXFxuXCIpO1xuXHRjb25zdCBkc0luZGV4ID0gbGluZXMuZmluZEluZGV4KChsaW5lKSA9PiAvXlxccypkYXRhU291cmNlczpcXHMqJC8udGVzdChsaW5lKSk7XG5cdGlmIChkc0luZGV4IDwgMCkge1xuXHRcdHJldHVybiBgJHt5YW1sLnRyaW1FbmQoKX1cXG5cXG5kYXRhYmFzZTpcXG4gIGRhdGFTb3VyY2VzOlxcbiR7YmxvY2t9XFxuYDtcblx0fVxuXHRsZXQgaW5zZXJ0QXQgPSBsaW5lcy5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSBkc0luZGV4ICsgMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKC9eW0EtWmEtel0vLnRlc3QobGluZXNbaV0gPz8gXCJcIikpIHtcblx0XHRcdGluc2VydEF0ID0gaTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpbnNlcnRMaW5lcyA9IGJsb2NrLnNwbGl0KFwiXFxuXCIpO1xuXHRpZiAoaW5zZXJ0QXQgPCBsaW5lcy5sZW5ndGggJiYgbGluZXNbaW5zZXJ0QXQgLSAxXSAhPT0gXCJcIikge1xuXHRcdGluc2VydExpbmVzLnB1c2goXCJcIik7XG5cdH1cblx0bGluZXMuc3BsaWNlKGluc2VydEF0LCAwLCAuLi5pbnNlcnRMaW5lcyk7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbIkNvbmZpZ1lhbWwiLCJpbmplY3RZYW1sRGF0YVNvdXJjZSIsIl9zZWN0aW9ucyIsImtleSIsImZpbGVQYXRoIiwiYmFzZUNvbnRlbnQiLCJwdXNoIiwiYWRkU2VjdGlvbiIsInlhbWwiLCJoYXNEYXRhU291cmNlIiwibmFtZSIsImpvaW4iLCJpbmNsdWRlcyIsImhhc0RhdGFTb3VyY2VzIiwiYXBwZW5kRGF0YVNvdXJjZSIsIml0ZW0iLCJjdXJyZW50IiwibGVuZ3RoIiwiZnJvbUZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJhYnNvbHV0ZVBhdGgiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwiZmlsZXMiLCJibG9jayIsInJlcGxhY2UiLCJwcmVmaXgiLCJ0cmltRW5kIiwic2VjdGlvbiIsImxpbmVzIiwic3BsaXQiLCJkc0luZGV4IiwiZmluZEluZGV4IiwibGluZSIsInRlc3QiLCJpbnNlcnRBdCIsImkiLCJpbnNlcnRMaW5lcyIsInNwbGljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFVYUE7ZUFBQUE7O1FBK0NHQztlQUFBQTs7O3dCQXpEYTtBQVV0QixNQUFNRDs7O0lBQ0tFLFlBQXNCLEVBQUUsQ0FBQztJQUUxQyxZQUNDLEFBQWdCQyxHQUFXLEVBQzNCLEFBQWlCQyxRQUFnQixFQUNqQ0MsV0FBbUIsQ0FDbEI7YUFIZUYsTUFBQUE7YUFDQ0MsV0FBQUE7UUFHakIsSUFBSSxDQUFDRixTQUFTLENBQUNJLElBQUksQ0FBQ0Q7SUFDckI7SUFFT0UsV0FBV0MsSUFBWSxFQUFRO1FBQ3JDLElBQUksQ0FBQ04sU0FBUyxDQUFDSSxJQUFJLENBQUNFO1FBQ3BCLE9BQU8sSUFBSTtJQUNaO0lBRUEsMEVBQTBFLEdBQzFFLEFBQU9DLGNBQWNDLElBQVksRUFBVztRQUMzQyxPQUFPLElBQUksQ0FBQ1IsU0FBUyxDQUFDUyxJQUFJLENBQUMsTUFBTUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFRixLQUFLLEVBQUUsQ0FBQztJQUM1RDtJQUVPRyxpQkFBMEI7UUFDaEMsT0FBTyxJQUFJLENBQUNYLFNBQVMsQ0FBQ1MsSUFBSSxDQUFDLE1BQU1DLFFBQVEsQ0FBQztJQUMzQztJQUVBOzs7RUFHQyxHQUNELEFBQU9FLGlCQUFpQkMsSUFBWSxFQUFRO1FBQzNDLE1BQU1DLFVBQVUsSUFBSSxDQUFDZCxTQUFTLENBQUNTLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUNULFNBQVMsQ0FBQ2UsTUFBTSxHQUFHO1FBQ3hCLElBQUksQ0FBQ2YsU0FBUyxDQUFDSSxJQUFJLENBQUNMLHFCQUFxQmUsU0FBU0Q7UUFDbEQsT0FBTyxJQUFJO0lBQ1o7SUFFQSxPQUFjRyxTQUFTZixHQUFXLEVBQUVnQixZQUFvQixFQUFFQyxZQUFvQixFQUFjO1FBQzNGLE1BQU1DLFVBQVVDLElBQUFBLG9CQUFZLEVBQUNGLGNBQWM7UUFDM0MsT0FBTyxJQUFJcEIsV0FBV0csS0FBS2dCLGNBQWNFO0lBQzFDO0lBRU9FLFFBQXNCO1FBQzVCLE9BQU87WUFBQztnQkFBRW5CLFVBQVUsSUFBSSxDQUFDQSxRQUFRO2dCQUFFaUIsU0FBUyxJQUFJLENBQUNuQixTQUFTLENBQUNTLElBQUksQ0FBQztZQUFNO1NBQUU7SUFDekU7QUFDRDtBQUdPLFNBQVNWLHFCQUFxQk8sSUFBWSxFQUFFTyxJQUFZO0lBQzlELE1BQU1TLFFBQVFULEtBQUtVLE9BQU8sQ0FBQyxPQUFPO0lBQ2xDLElBQUksQ0FBQ2pCLEtBQUtJLFFBQVEsQ0FBQyxpQkFBaUI7UUFDbkMsTUFBTWMsU0FBU2xCLEtBQUttQixPQUFPO1FBQzNCLE1BQU1DLFVBQVUsQ0FBQywyQkFBMkIsRUFBRUosTUFBTSxFQUFFLENBQUM7UUFDdkQsT0FBT0UsT0FBT1QsTUFBTSxHQUFHLElBQUksR0FBR1MsT0FBTyxJQUFJLEVBQUVFLFNBQVMsR0FBR0E7SUFDeEQ7SUFDQSxNQUFNQyxRQUFRckIsS0FBS3NCLEtBQUssQ0FBQztJQUN6QixNQUFNQyxVQUFVRixNQUFNRyxTQUFTLENBQUMsQ0FBQ0MsT0FBUyx1QkFBdUJDLElBQUksQ0FBQ0Q7SUFDdEUsSUFBSUYsVUFBVSxHQUFHO1FBQ2hCLE9BQU8sR0FBR3ZCLEtBQUttQixPQUFPLEdBQUcsK0JBQStCLEVBQUVILE1BQU0sRUFBRSxDQUFDO0lBQ3BFO0lBQ0EsSUFBSVcsV0FBV04sTUFBTVosTUFBTTtJQUMzQixJQUFLLElBQUltQixJQUFJTCxVQUFVLEdBQUdLLElBQUlQLE1BQU1aLE1BQU0sRUFBRW1CLElBQUs7UUFDaEQsSUFBSSxZQUFZRixJQUFJLENBQUNMLEtBQUssQ0FBQ08sRUFBRSxJQUFJLEtBQUs7WUFDckNELFdBQVdDO1lBQ1g7UUFDRDtJQUNEO0lBQ0EsTUFBTUMsY0FBY2IsTUFBTU0sS0FBSyxDQUFDO0lBQ2hDLElBQUlLLFdBQVdOLE1BQU1aLE1BQU0sSUFBSVksS0FBSyxDQUFDTSxXQUFXLEVBQUUsS0FBSyxJQUFJO1FBQzFERSxZQUFZL0IsSUFBSSxDQUFDO0lBQ2xCO0lBQ0F1QixNQUFNUyxNQUFNLENBQUNILFVBQVUsTUFBTUU7SUFDN0IsT0FBT1IsTUFBTWxCLElBQUksQ0FBQztBQUNuQiJ9
|