@decohere/create 0.0.1-dev.15 → 0.0.1-dev.17
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 +2 -2
- package/commonjs/src/scaffold.js +52 -11
- package/commonjs/src/templates.js +243 -1
- package/es6/src/cli.js +2 -2
- package/es6/src/scaffold.js +53 -12
- package/es6/src/templates.js +207 -1
- package/package.json +2 -1
- package/types/src/scaffold.d.ts +2 -0
- package/types/src/templates.d.ts +16 -0
package/commonjs/src/cli.js
CHANGED
|
@@ -7,9 +7,9 @@ const _nodepath = require("node:path");
|
|
|
7
7
|
const _commander = require("commander");
|
|
8
8
|
const _scaffold = require("./scaffold.js");
|
|
9
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)=>{
|
|
10
|
+
program.name("decohere").description("Scaffold a new Decohere project").argument("[directory]", "Target directory (default: current directory)", ".").option("-y, --yes", "Skip confirmation prompts").option("-t, --template <template>", "Project template: basic (default) or webapi", "basic").option("-d, --database <provider>", "Database provider to include (webapi only): typeorm").action(async (directory, opts)=>{
|
|
11
11
|
await (0, _scaffold.scaffold)((0, _nodepath.resolve)(directory), opts);
|
|
12
12
|
});
|
|
13
13
|
program.parse();
|
|
14
14
|
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgc2NhZmZvbGQgfSBmcm9tIFwiLi9zY2FmZm9sZC5qc1wiO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuXHQubmFtZShcImRlY29oZXJlXCIpXG5cdC5kZXNjcmlwdGlvbihcIlNjYWZmb2xkIGEgbmV3IERlY29oZXJlIHByb2plY3RcIilcblx0LmFyZ3VtZW50KFwiW2RpcmVjdG9yeV1cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpXG5cdC5vcHRpb24oXCIteSwgLS15ZXNcIiwgXCJTa2lwIGNvbmZpcm1hdGlvbiBwcm9tcHRzXCIpXG5cdC5vcHRpb24oXCItdCwgLS10ZW1wbGF0ZSA8dGVtcGxhdGU+XCIsIFwiUHJvamVjdCB0ZW1wbGF0ZTogYmFzaWMgKGRlZmF1bHQpIG9yIHdlYmFwaVwiLCBcImJhc2ljXCIpXG5cdC5vcHRpb24oXCItZCwgLS1kYXRhYmFzZSA8cHJvdmlkZXI+XCIsIFwiRGF0YWJhc2UgcHJvdmlkZXIgdG8gaW5jbHVkZSAod2ViYXBpIG9ubHkpOiB0eXBlb3JtXCIpXG5cdC5hY3Rpb24oXG5cdFx0YXN5bmMgKFxuXHRcdFx0ZGlyZWN0b3J5OiBzdHJpbmcsXG5cdFx0XHRvcHRzOiB7IHllcz86IGJvb2xlYW47IHRlbXBsYXRlPzogXCJiYXNpY1wiIHwgXCJ3ZWJhcGlcIjsgZGF0YWJhc2U/OiBcInR5cGVvcm1cIiB9LFxuXHRcdCkgPT4ge1xuXHRcdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0XHR9LFxuXHQpO1xuXG5wcm9ncmFtLnBhcnNlKCk7XG4iXSwibmFtZXMiOlsicHJvZ3JhbSIsIkNvbW1hbmQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhcmd1bWVudCIsIm9wdGlvbiIsImFjdGlvbiIsImRpcmVjdG9yeSIsIm9wdHMiLCJzY2FmZm9sZCIsInJlc29sdmUiLCJwYXJzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7MEJBQ3dCOzJCQUNBOzBCQUNDO0FBRXpCLE1BQU1BLFVBQVUsSUFBSUMsa0JBQU87QUFFM0JELFFBQ0VFLElBQUksQ0FBQyxZQUNMQyxXQUFXLENBQUMsbUNBQ1pDLFFBQVEsQ0FBQyxlQUFlLGlEQUFpRCxLQUN6RUMsTUFBTSxDQUFDLGFBQWEsNkJBQ3BCQSxNQUFNLENBQUMsNkJBQTZCLCtDQUErQyxTQUNuRkEsTUFBTSxDQUFDLDZCQUE2Qix1REFDcENDLE1BQU0sQ0FDTixPQUNDQyxXQUNBQztJQUVBLE1BQU1DLElBQUFBLGtCQUFRLEVBQUNDLElBQUFBLGlCQUFPLEVBQUNILFlBQVlDO0FBQ3BDO0FBR0ZSLFFBQVFXLEtBQUsifQ==
|
package/commonjs/src/scaffold.js
CHANGED
|
@@ -12,6 +12,7 @@ const _nodefs = require("node:fs");
|
|
|
12
12
|
const _promises = require("node:fs/promises");
|
|
13
13
|
const _nodepath = require("node:path");
|
|
14
14
|
const _promises1 = require("node:readline/promises");
|
|
15
|
+
const _interop = require("@decohere/nexus/interop");
|
|
15
16
|
const _templates = require("./templates.js");
|
|
16
17
|
async function scaffold(targetDir, opts) {
|
|
17
18
|
const name = (0, _nodepath.basename)(targetDir);
|
|
@@ -27,22 +28,62 @@ async function scaffold(targetDir, opts) {
|
|
|
27
28
|
process.exit(0);
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
if (opts.template === "webapi") {
|
|
32
|
+
const dbOpts = opts.database ? {
|
|
33
|
+
database: opts.database
|
|
34
|
+
} : undefined;
|
|
35
|
+
await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "projects", "api", "src", "controllers"), {
|
|
36
|
+
recursive: true
|
|
37
|
+
});
|
|
38
|
+
await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "config"), {
|
|
39
|
+
recursive: true
|
|
40
|
+
});
|
|
41
|
+
const writes = [
|
|
42
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "package.json"), (0, _templates.WEB_API_ROOT_PACKAGE_JSON)(name, dbOpts)),
|
|
43
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "tsconfig.json"), _templates.WEB_API_TSCONFIG),
|
|
44
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "package.json"), (0, _templates.WEB_API_APP_PACKAGE_JSON)(name)),
|
|
45
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "src", "main.ts"), (0, _templates.WEB_API_MAIN_TS)(name, dbOpts)),
|
|
46
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "src", "controllers", "hello.controller.ts"), _templates.HELLO_CONTROLLER_TS),
|
|
47
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "src", "sample.config.ts"), _templates.SAMPLE_CONFIG_TS),
|
|
48
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "src", "sample.service.ts"), _templates.SAMPLE_SERVICE_TS),
|
|
49
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "config", "config.yaml"), (0, _templates.CONFIG_YAML)(name, dbOpts)),
|
|
50
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "config", "config.dev.yaml"), _templates.CONFIG_DEV_YAML)
|
|
51
|
+
];
|
|
52
|
+
if (opts.database === "typeorm") {
|
|
53
|
+
await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "projects", "api", "src", "entities"), {
|
|
54
|
+
recursive: true
|
|
55
|
+
});
|
|
56
|
+
await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "projects", "api", "src", "repositories"), {
|
|
57
|
+
recursive: true
|
|
58
|
+
});
|
|
59
|
+
writes.push((0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "src", "entities", "sample.entity.ts"), _templates.SAMPLE_ENTITY_TS), (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "api", "src", "repositories", "sample.repository.ts"), _templates.SAMPLE_REPOSITORY_TS), (0, _promises.writeFile)((0, _nodepath.join)(targetDir, "config", "config.prod.yaml"), _templates.CONFIG_PROD_YAML));
|
|
60
|
+
}
|
|
61
|
+
await Promise.all(writes);
|
|
62
|
+
} else {
|
|
63
|
+
await (0, _promises.mkdir)((0, _nodepath.join)(targetDir, "projects", "app", "src"), {
|
|
64
|
+
recursive: true
|
|
65
|
+
});
|
|
66
|
+
await Promise.all([
|
|
67
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "package.json"), (0, _templates.ROOT_PACKAGE_JSON)(name)),
|
|
68
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "tsconfig.json"), _templates.TSCONFIG),
|
|
69
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "app", "package.json"), (0, _templates.APP_PACKAGE_JSON)(name)),
|
|
70
|
+
(0, _promises.writeFile)((0, _nodepath.join)(targetDir, "projects", "app", "src", "main.ts"), _templates.MAIN_TS)
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
console.log(`\nScaffolded ${name}. Installing dependencies...\n`);
|
|
74
|
+
let pm = (0, _interop.detectPackageManager)(targetDir);
|
|
75
|
+
if (pm == null) {
|
|
76
|
+
pm = await (0, _interop.promptForPackageManager)();
|
|
77
|
+
}
|
|
78
|
+
await pm.install({
|
|
79
|
+
cwd: targetDir
|
|
32
80
|
});
|
|
33
|
-
|
|
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`);
|
|
81
|
+
console.log(`\nDone! Next steps:\n`);
|
|
40
82
|
if ((0, _nodepath.basename)(targetDir) !== targetDir) {
|
|
41
83
|
console.log(` cd ${name}`);
|
|
42
84
|
}
|
|
43
|
-
console.log(" pnpm install");
|
|
44
85
|
console.log(" pnpm build # forge build");
|
|
45
86
|
console.log(" pnpm dev # flux serve\n");
|
|
46
87
|
}
|
|
47
88
|
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvc2NhZmZvbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSB9IGZyb20gXCJub2RlOnJlYWRsaW5lL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBBUFBfUEFDS0FHRV9KU09OLCBNQUlOX1RTLCBST09UX1BBQ0tBR0VfSlNPTiwgVFNDT05GSUcgfSBmcm9tIFwiLi90ZW1wbGF0ZXMuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTY2FmZm9sZE9wdGlvbnMge1xuXHR5ZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQodGFyZ2V0RGlyOiBzdHJpbmcsIG9wdHM6IFNjYWZmb2xkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBuYW1lID0gYmFzZW5hbWUodGFyZ2V0RGlyKTtcblxuXHRpZiAoZXhpc3RzU3luYyh0YXJnZXREaXIpICYmIHJlYWRkaXJTeW5jKHRhcmdldERpcikubGVuZ3RoID4gMCAmJiAhb3B0cy55ZXMpIHtcblx0XHRjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcblx0XHRcdG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG5cdFx0fSk7XG5cdFx0Y29uc3QgYW5zd2VyID0gYXdhaXQgcmwucXVlc3Rpb24oYERpcmVjdG9yeSBcIiR7bmFtZX1cIiBpcyBub3QgZW1wdHkuIENvbnRpbnVlPyBbeS9OXSBgKTtcblx0XHRybC5jbG9zZSgpO1xuXHRcdGlmICghYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJ5XCIpKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcIkFib3J0ZWQuXCIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdH1cblx0fVxuXG5cdGF3YWl0IG1rZGlyKGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBwXCIsIFwic3JjXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInBhY2thZ2UuanNvblwiKSwgUk9PVF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJ0c2NvbmZpZy5qc29uXCIpLCBUU0NPTkZJRyksXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBwXCIsIFwicGFja2FnZS5qc29uXCIpLCBBUFBfUEFDS0FHRV9KU09OKG5hbWUpKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiwgXCJtYWluLnRzXCIpLCBNQUlOX1RTKSxcblx0XSk7XG5cblx0Y29uc29sZS5sb2coYFxcblNjYWZmb2xkZWQgJHtuYW1lfS4gTmV4dCBzdGVwczpcXG5gKTtcblx0aWYgKGJhc2VuYW1lKHRhcmdldERpcikgIT09IHRhcmdldERpcikge1xuXHRcdGNvbnNvbGUubG9nKGAgIGNkICR7bmFtZX1gKTtcblx0fVxuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBpbnN0YWxsXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBidWlsZCAgICAgIyBmb3JnZSBidWlsZFwiKTtcblx0Y29uc29sZS5sb2coXCIgIHBucG0gZGV2ICAgICAgICMgZmx1eCBzZXJ2ZVxcblwiKTtcbn1cbiJdLCJuYW1lcyI6WyJzY2FmZm9sZCIsInRhcmdldERpciIsIm9wdHMiLCJuYW1lIiwiYmFzZW5hbWUiLCJleGlzdHNTeW5jIiwicmVhZGRpclN5bmMiLCJsZW5ndGgiLCJ5ZXMiLCJybCIsImNyZWF0ZUludGVyZmFjZSIsImlucHV0IiwicHJvY2VzcyIsInN0ZGluIiwib3V0cHV0Iiwic3Rkb3V0IiwiYW5zd2VyIiwicXVlc3Rpb24iLCJjbG9zZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInN0YXJ0c1dpdGgiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsIm1rZGlyIiwiam9pbiIsInJlY3Vyc2l2ZSIsIlByb21pc2UiLCJhbGwiLCJ3cml0ZUZpbGUiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlRTQ09ORklHIiwiQVBQX1BBQ0tBR0VfSlNPTiIsIk1BSU5fVFMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBVXNCQTs7O2VBQUFBOzs7d0JBVmtCOzBCQUNQOzBCQUNGOzJCQUNDOzJCQUN1QztBQU1oRSxlQUFlQSxTQUFTQyxTQUFpQixFQUFFQyxJQUFxQjtJQUN0RSxNQUFNQyxPQUFPQyxJQUFBQSxrQkFBUSxFQUFDSDtJQUV0QixJQUFJSSxJQUFBQSxrQkFBVSxFQUFDSixjQUFjSyxJQUFBQSxtQkFBVyxFQUFDTCxXQUFXTSxNQUFNLEdBQUcsS0FBSyxDQUFDTCxLQUFLTSxHQUFHLEVBQUU7UUFDNUUsTUFBTUMsS0FBS0MsSUFBQUEsMEJBQWUsRUFBQztZQUMxQkMsT0FBT0MsUUFBUUMsS0FBSztZQUNwQkMsUUFBUUYsUUFBUUcsTUFBTTtRQUN2QjtRQUNBLE1BQU1DLFNBQVMsTUFBTVAsR0FBR1EsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFZCxLQUFLLGdDQUFnQyxDQUFDO1FBQ3JGTSxHQUFHUyxLQUFLO1FBQ1IsSUFBSSxDQUFDRixPQUFPRyxJQUFJLEdBQUdDLFdBQVcsR0FBR0MsVUFBVSxDQUFDLE1BQU07WUFDakRDLFFBQVFDLEdBQUcsQ0FBQztZQUNaWCxRQUFRWSxJQUFJLENBQUM7UUFDZDtJQUNEO0lBRUEsTUFBTUMsSUFBQUEsZUFBSyxFQUFDQyxJQUFBQSxjQUFJLEVBQUN6QixXQUFXLFlBQVksT0FBTyxRQUFRO1FBQUUwQixXQUFXO0lBQUs7SUFFekUsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQ2pCQyxJQUFBQSxtQkFBUyxFQUFDSixJQUFBQSxjQUFJLEVBQUN6QixXQUFXLGlCQUFpQjhCLElBQUFBLDRCQUFpQixFQUFDNUI7UUFDN0QyQixJQUFBQSxtQkFBUyxFQUFDSixJQUFBQSxjQUFJLEVBQUN6QixXQUFXLGtCQUFrQitCLG1CQUFRO1FBQ3BERixJQUFBQSxtQkFBUyxFQUFDSixJQUFBQSxjQUFJLEVBQUN6QixXQUFXLFlBQVksT0FBTyxpQkFBaUJnQyxJQUFBQSwyQkFBZ0IsRUFBQzlCO1FBQy9FMkIsSUFBQUEsbUJBQVMsRUFBQ0osSUFBQUEsY0FBSSxFQUFDekIsV0FBVyxZQUFZLE9BQU8sT0FBTyxZQUFZaUMsa0JBQU87S0FDdkU7SUFFRFosUUFBUUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFcEIsS0FBSyxlQUFlLENBQUM7SUFDakQsSUFBSUMsSUFBQUEsa0JBQVEsRUFBQ0gsZUFBZUEsV0FBVztRQUN0Q3FCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRXBCLE1BQU07SUFDM0I7SUFDQW1CLFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0FBQ2IifQ==
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvc2NhZmZvbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSB9IGZyb20gXCJub2RlOnJlYWRsaW5lL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkZXRlY3RQYWNrYWdlTWFuYWdlciwgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7XG5cdEFQUF9QQUNLQUdFX0pTT04sXG5cdENPTkZJR19ERVZfWUFNTCxcblx0Q09ORklHX1BST0RfWUFNTCxcblx0Q09ORklHX1lBTUwsXG5cdEhFTExPX0NPTlRST0xMRVJfVFMsXG5cdE1BSU5fVFMsXG5cdFJPT1RfUEFDS0FHRV9KU09OLFxuXHRTQU1QTEVfQ09ORklHX1RTLFxuXHRTQU1QTEVfRU5USVRZX1RTLFxuXHRTQU1QTEVfUkVQT1NJVE9SWV9UUyxcblx0U0FNUExFX1NFUlZJQ0VfVFMsXG5cdFRTQ09ORklHLFxuXHRXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04sXG5cdFdFQl9BUElfTUFJTl9UUyxcblx0V0VCX0FQSV9ST09UX1BBQ0tBR0VfSlNPTixcblx0V0VCX0FQSV9UU0NPTkZJRyxcbn0gZnJvbSBcIi4vdGVtcGxhdGVzLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NhZmZvbGRPcHRpb25zIHtcblx0eWVzPzogYm9vbGVhbjtcblx0dGVtcGxhdGU/OiBcImJhc2ljXCIgfCBcIndlYmFwaVwiO1xuXHRkYXRhYmFzZT86IFwidHlwZW9ybVwiO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQodGFyZ2V0RGlyOiBzdHJpbmcsIG9wdHM6IFNjYWZmb2xkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBuYW1lID0gYmFzZW5hbWUodGFyZ2V0RGlyKTtcblxuXHRpZiAoZXhpc3RzU3luYyh0YXJnZXREaXIpICYmIHJlYWRkaXJTeW5jKHRhcmdldERpcikubGVuZ3RoID4gMCAmJiAhb3B0cy55ZXMpIHtcblx0XHRjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcblx0XHRcdG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG5cdFx0fSk7XG5cdFx0Y29uc3QgYW5zd2VyID0gYXdhaXQgcmwucXVlc3Rpb24oYERpcmVjdG9yeSBcIiR7bmFtZX1cIiBpcyBub3QgZW1wdHkuIENvbnRpbnVlPyBbeS9OXSBgKTtcblx0XHRybC5jbG9zZSgpO1xuXHRcdGlmICghYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJ5XCIpKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcIkFib3J0ZWQuXCIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvcHRzLnRlbXBsYXRlID09PSBcIndlYmFwaVwiKSB7XG5cdFx0Y29uc3QgZGJPcHRzID0gb3B0cy5kYXRhYmFzZSA/IHsgZGF0YWJhc2U6IG9wdHMuZGF0YWJhc2UgfSA6IHVuZGVmaW5lZDtcblx0XHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcImNvbnRyb2xsZXJzXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0XHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCJjb25maWdcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdGNvbnN0IHdyaXRlcyA9IFtcblx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwYWNrYWdlLmpzb25cIiksIFdFQl9BUElfUk9PVF9QQUNLQUdFX0pTT04obmFtZSwgZGJPcHRzKSksXG5cdFx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwidHNjb25maWcuanNvblwiKSwgV0VCX0FQSV9UU0NPTkZJRyksXG5cdFx0XHR3cml0ZUZpbGUoXG5cdFx0XHRcdGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBpXCIsIFwicGFja2FnZS5qc29uXCIpLFxuXHRcdFx0XHRXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04obmFtZSksXG5cdFx0XHQpLFxuXHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcIm1haW4udHNcIiksXG5cdFx0XHRcdFdFQl9BUElfTUFJTl9UUyhuYW1lLCBkYk9wdHMpLFxuXHRcdFx0KSxcblx0XHRcdHdyaXRlRmlsZShcblx0XHRcdFx0am9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcGlcIiwgXCJzcmNcIiwgXCJjb250cm9sbGVyc1wiLCBcImhlbGxvLmNvbnRyb2xsZXIudHNcIiksXG5cdFx0XHRcdEhFTExPX0NPTlRST0xMRVJfVFMsXG5cdFx0XHQpLFxuXHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcInNhbXBsZS5jb25maWcudHNcIiksXG5cdFx0XHRcdFNBTVBMRV9DT05GSUdfVFMsXG5cdFx0XHQpLFxuXHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcInNhbXBsZS5zZXJ2aWNlLnRzXCIpLFxuXHRcdFx0XHRTQU1QTEVfU0VSVklDRV9UUyxcblx0XHRcdCksXG5cdFx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwiY29uZmlnXCIsIFwiY29uZmlnLnlhbWxcIiksIENPTkZJR19ZQU1MKG5hbWUsIGRiT3B0cykpLFxuXHRcdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcImNvbmZpZ1wiLCBcImNvbmZpZy5kZXYueWFtbFwiKSwgQ09ORklHX0RFVl9ZQU1MKSxcblx0XHRdO1xuXHRcdGlmIChvcHRzLmRhdGFiYXNlID09PSBcInR5cGVvcm1cIikge1xuXHRcdFx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcGlcIiwgXCJzcmNcIiwgXCJlbnRpdGllc1wiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcInJlcG9zaXRvcmllc1wiKSwge1xuXHRcdFx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdFx0XHR9KTtcblx0XHRcdHdyaXRlcy5wdXNoKFxuXHRcdFx0XHR3cml0ZUZpbGUoXG5cdFx0XHRcdFx0am9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcGlcIiwgXCJzcmNcIiwgXCJlbnRpdGllc1wiLCBcInNhbXBsZS5lbnRpdHkudHNcIiksXG5cdFx0XHRcdFx0U0FNUExFX0VOVElUWV9UUyxcblx0XHRcdFx0KSxcblx0XHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRcdGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBpXCIsIFwic3JjXCIsIFwicmVwb3NpdG9yaWVzXCIsIFwic2FtcGxlLnJlcG9zaXRvcnkudHNcIiksXG5cdFx0XHRcdFx0U0FNUExFX1JFUE9TSVRPUllfVFMsXG5cdFx0XHRcdCksXG5cdFx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJjb25maWdcIiwgXCJjb25maWcucHJvZC55YW1sXCIpLCBDT05GSUdfUFJPRF9ZQU1MKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHdyaXRlcyk7XG5cdH0gZWxzZSB7XG5cdFx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwYWNrYWdlLmpzb25cIiksIFJPT1RfUEFDS0FHRV9KU09OKG5hbWUpKSxcblx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJ0c2NvbmZpZy5qc29uXCIpLCBUU0NPTkZJRyksXG5cdFx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJwYWNrYWdlLmpzb25cIiksIEFQUF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBwXCIsIFwic3JjXCIsIFwibWFpbi50c1wiKSwgTUFJTl9UUyksXG5cdFx0XSk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke25hbWV9LiBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcy4uLlxcbmApO1xuXHRsZXQgcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih0YXJnZXREaXIpO1xuXHRpZiAocG0gPT0gbnVsbCkge1xuXHRcdHBtID0gYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKTtcblx0fVxuXHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB0YXJnZXREaXIgfSk7XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhIE5leHQgc3RlcHM6XFxuYCk7XG5cdGlmIChiYXNlbmFtZSh0YXJnZXREaXIpICE9PSB0YXJnZXREaXIpIHtcblx0XHRjb25zb2xlLmxvZyhgICBjZCAke25hbWV9YCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIHBucG0gYnVpbGQgICAgICMgZm9yZ2UgYnVpbGRcIik7XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGRldiAgICAgICAjIGZsdXggc2VydmVcXG5cIik7XG59XG4iXSwibmFtZXMiOlsic2NhZmZvbGQiLCJ0YXJnZXREaXIiLCJvcHRzIiwibmFtZSIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRkaXJTeW5jIiwibGVuZ3RoIiwieWVzIiwicmwiLCJjcmVhdGVJbnRlcmZhY2UiLCJpbnB1dCIsInByb2Nlc3MiLCJzdGRpbiIsIm91dHB1dCIsInN0ZG91dCIsImFuc3dlciIsInF1ZXN0aW9uIiwiY2xvc2UiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwiY29uc29sZSIsImxvZyIsImV4aXQiLCJ0ZW1wbGF0ZSIsImRiT3B0cyIsImRhdGFiYXNlIiwidW5kZWZpbmVkIiwibWtkaXIiLCJqb2luIiwicmVjdXJzaXZlIiwid3JpdGVzIiwid3JpdGVGaWxlIiwiV0VCX0FQSV9ST09UX1BBQ0tBR0VfSlNPTiIsIldFQl9BUElfVFNDT05GSUciLCJXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04iLCJXRUJfQVBJX01BSU5fVFMiLCJIRUxMT19DT05UUk9MTEVSX1RTIiwiU0FNUExFX0NPTkZJR19UUyIsIlNBTVBMRV9TRVJWSUNFX1RTIiwiQ09ORklHX1lBTUwiLCJDT05GSUdfREVWX1lBTUwiLCJwdXNoIiwiU0FNUExFX0VOVElUWV9UUyIsIlNBTVBMRV9SRVBPU0lUT1JZX1RTIiwiQ09ORklHX1BST0RfWUFNTCIsIlByb21pc2UiLCJhbGwiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlRTQ09ORklHIiwiQVBQX1BBQ0tBR0VfSlNPTiIsIk1BSU5fVFMiLCJwbSIsImRldGVjdFBhY2thZ2VNYW5hZ2VyIiwicHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIiLCJpbnN0YWxsIiwiY3dkIl0sIm1hcHBpbmdzIjoiOzs7OytCQThCc0JBOzs7ZUFBQUE7Ozt3QkE5QmtCOzBCQUNQOzBCQUNGOzJCQUNDO3lCQUM4QjsyQkFrQnZEO0FBUUEsZUFBZUEsU0FBU0MsU0FBaUIsRUFBRUMsSUFBcUI7SUFD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
|
|
@@ -12,14 +12,50 @@ _export(exports, {
|
|
|
12
12
|
get APP_PACKAGE_JSON () {
|
|
13
13
|
return APP_PACKAGE_JSON;
|
|
14
14
|
},
|
|
15
|
+
get CONFIG_DEV_YAML () {
|
|
16
|
+
return CONFIG_DEV_YAML;
|
|
17
|
+
},
|
|
18
|
+
get CONFIG_PROD_YAML () {
|
|
19
|
+
return CONFIG_PROD_YAML;
|
|
20
|
+
},
|
|
21
|
+
get CONFIG_YAML () {
|
|
22
|
+
return CONFIG_YAML;
|
|
23
|
+
},
|
|
24
|
+
get HELLO_CONTROLLER_TS () {
|
|
25
|
+
return HELLO_CONTROLLER_TS;
|
|
26
|
+
},
|
|
15
27
|
get MAIN_TS () {
|
|
16
28
|
return MAIN_TS;
|
|
17
29
|
},
|
|
18
30
|
get ROOT_PACKAGE_JSON () {
|
|
19
31
|
return ROOT_PACKAGE_JSON;
|
|
20
32
|
},
|
|
33
|
+
get SAMPLE_CONFIG_TS () {
|
|
34
|
+
return SAMPLE_CONFIG_TS;
|
|
35
|
+
},
|
|
36
|
+
get SAMPLE_ENTITY_TS () {
|
|
37
|
+
return SAMPLE_ENTITY_TS;
|
|
38
|
+
},
|
|
39
|
+
get SAMPLE_REPOSITORY_TS () {
|
|
40
|
+
return SAMPLE_REPOSITORY_TS;
|
|
41
|
+
},
|
|
42
|
+
get SAMPLE_SERVICE_TS () {
|
|
43
|
+
return SAMPLE_SERVICE_TS;
|
|
44
|
+
},
|
|
21
45
|
get TSCONFIG () {
|
|
22
46
|
return TSCONFIG;
|
|
47
|
+
},
|
|
48
|
+
get WEB_API_APP_PACKAGE_JSON () {
|
|
49
|
+
return WEB_API_APP_PACKAGE_JSON;
|
|
50
|
+
},
|
|
51
|
+
get WEB_API_MAIN_TS () {
|
|
52
|
+
return WEB_API_MAIN_TS;
|
|
53
|
+
},
|
|
54
|
+
get WEB_API_ROOT_PACKAGE_JSON () {
|
|
55
|
+
return WEB_API_ROOT_PACKAGE_JSON;
|
|
56
|
+
},
|
|
57
|
+
get WEB_API_TSCONFIG () {
|
|
58
|
+
return WEB_API_TSCONFIG;
|
|
23
59
|
}
|
|
24
60
|
});
|
|
25
61
|
function ROOT_PACKAGE_JSON(name) {
|
|
@@ -38,6 +74,34 @@ function ROOT_PACKAGE_JSON(name) {
|
|
|
38
74
|
}
|
|
39
75
|
}, null, 2);
|
|
40
76
|
}
|
|
77
|
+
function WEB_API_ROOT_PACKAGE_JSON(name, opts) {
|
|
78
|
+
const deps = {
|
|
79
|
+
"@decohere/cortex": "0.0.1-dev.15",
|
|
80
|
+
"@decohere/protocol": "0.0.1-dev.15",
|
|
81
|
+
"@decohere/scribe": "0.0.1-dev.15",
|
|
82
|
+
"@decohere/scribe-pino": "0.0.1-dev.15",
|
|
83
|
+
"pino-pretty": "^13.0.0"
|
|
84
|
+
};
|
|
85
|
+
if (opts?.database === "typeorm") {
|
|
86
|
+
deps["@decohere/codex"] = "0.0.1-dev.15";
|
|
87
|
+
deps["@decohere/codex-typeorm"] = "0.0.1-dev.15";
|
|
88
|
+
}
|
|
89
|
+
return JSON.stringify({
|
|
90
|
+
name: `${name}.api`,
|
|
91
|
+
version: "0.0.1",
|
|
92
|
+
type: "module",
|
|
93
|
+
scripts: {
|
|
94
|
+
build: "forge build",
|
|
95
|
+
"build:watch": "forge build --watch",
|
|
96
|
+
dev: "flux serve"
|
|
97
|
+
},
|
|
98
|
+
dependencies: deps,
|
|
99
|
+
devDependencies: {
|
|
100
|
+
"@decohere/terminal": "0.0.1-dev.15",
|
|
101
|
+
typescript: "^6.0.3"
|
|
102
|
+
}
|
|
103
|
+
}, null, 2);
|
|
104
|
+
}
|
|
41
105
|
function APP_PACKAGE_JSON(name) {
|
|
42
106
|
return JSON.stringify({
|
|
43
107
|
name: `@${name}/app`,
|
|
@@ -60,5 +124,183 @@ const TSCONFIG = JSON.stringify({
|
|
|
60
124
|
}, null, 2);
|
|
61
125
|
const MAIN_TS = `console.log("Hello from Decohere!");
|
|
62
126
|
`;
|
|
127
|
+
const WEB_API_TSCONFIG = JSON.stringify({
|
|
128
|
+
compilerOptions: {
|
|
129
|
+
target: "ES2022",
|
|
130
|
+
module: "NodeNext",
|
|
131
|
+
moduleResolution: "NodeNext",
|
|
132
|
+
strict: true,
|
|
133
|
+
skipLibCheck: true,
|
|
134
|
+
experimentalDecorators: true,
|
|
135
|
+
emitDecoratorMetadata: true
|
|
136
|
+
},
|
|
137
|
+
include: [
|
|
138
|
+
"projects"
|
|
139
|
+
]
|
|
140
|
+
}, null, 2);
|
|
141
|
+
function WEB_API_APP_PACKAGE_JSON(name) {
|
|
142
|
+
return JSON.stringify({
|
|
143
|
+
name: `@${name}/api`,
|
|
144
|
+
version: "0.0.1",
|
|
145
|
+
type: "module",
|
|
146
|
+
main: "src/main.ts",
|
|
147
|
+
dependencies: {
|
|
148
|
+
"@decohere/cortex": "0.0.1-dev.15",
|
|
149
|
+
"@decohere/crucible": "0.0.1-dev.15"
|
|
150
|
+
}
|
|
151
|
+
}, null, 2);
|
|
152
|
+
}
|
|
153
|
+
function WEB_API_MAIN_TS(name, opts) {
|
|
154
|
+
const dbImport = opts?.database === "typeorm" ? `import "@decohere/codex-typeorm";
|
|
155
|
+
import { SampleEntity } from "./entities/sample.entity.js";
|
|
156
|
+
import { SampleEntityRepository } from "./repositories/sample.repository.js";
|
|
157
|
+
` : "";
|
|
158
|
+
const dbChain = opts?.database === "typeorm" ? `\n\t.withTypeOrm({ entities: [SampleEntity], repositories: [SampleEntityRepository] })` : "";
|
|
159
|
+
return `import "@decohere/scribe-pino";
|
|
160
|
+
import "@decohere/cortex/http";
|
|
161
|
+
import "@decohere/protocol";
|
|
162
|
+
${dbImport}import { Builder } from "@decohere/cortex";
|
|
163
|
+
import { FastifyProvider } from "@decohere/cortex/providers";
|
|
164
|
+
import { scribe } from "@decohere/scribe";
|
|
165
|
+
import { YamlDataSource } from "@decohere/protocol";
|
|
166
|
+
import { HelloController } from "./controllers/hello.controller.js";
|
|
167
|
+
import { SampleService } from "./sample.service.js";
|
|
168
|
+
|
|
169
|
+
scribe.extend.withPinoPretty();
|
|
170
|
+
|
|
171
|
+
const app = await Builder.create({ applicationName: "${name}.api" })
|
|
172
|
+
\t.withHttpProvider(FastifyProvider)
|
|
173
|
+
\t.withConfiguration(YamlDataSource)
|
|
174
|
+
\t.withServices((cb) => {
|
|
175
|
+
\t\tcb.registerSingleton(SampleService);
|
|
176
|
+
\t})${dbChain}
|
|
177
|
+
\t.withControllers(HelloController)
|
|
178
|
+
\t.build();
|
|
179
|
+
|
|
180
|
+
await app.start({ port: 3000 });
|
|
181
|
+
|
|
182
|
+
export default app;
|
|
183
|
+
`;
|
|
184
|
+
}
|
|
185
|
+
const HELLO_CONTROLLER_TS = `import { Controller, Delete, Field, Get, Param, Post, Put, Query } from "@decohere/cortex";
|
|
186
|
+
import { SampleService } from "../sample.service.js";
|
|
187
|
+
|
|
188
|
+
class HelloBody {
|
|
189
|
+
@Field("body", "message")
|
|
190
|
+
public message!: string;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@Controller({ prefix: "/hello" })
|
|
194
|
+
export class HelloController {
|
|
195
|
+
public constructor(private readonly sample: SampleService) {}
|
|
196
|
+
|
|
197
|
+
@Get()
|
|
198
|
+
public async getAll(@Query("filter") filter: string) {
|
|
199
|
+
const greeting = await this.sample.getGreeting();
|
|
200
|
+
return { filter, message: greeting };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@Get("/:id")
|
|
204
|
+
public getOne(@Param("id") id: string) {
|
|
205
|
+
return { id, message: \`Hello \${id}!\` };
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@Post("/")
|
|
209
|
+
public create(body: HelloBody) {
|
|
210
|
+
return { message: body.message };
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@Put("/:id")
|
|
214
|
+
public update(@Param("id") id: string, body: HelloBody) {
|
|
215
|
+
return { id, message: body.message };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
@Delete("/:id")
|
|
219
|
+
public remove(@Param("id") id: string) {
|
|
220
|
+
return { id, deleted: true };
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
`;
|
|
224
|
+
const SAMPLE_CONFIG_TS = `export class SampleConfig {
|
|
225
|
+
public greeting: string = "";
|
|
226
|
+
}
|
|
227
|
+
`;
|
|
228
|
+
const SAMPLE_SERVICE_TS = `import { inject, injectable } from "@decohere/crucible/decorators";
|
|
229
|
+
import { ConfigurationServiceToken } from "@decohere/nexus/configuration";
|
|
230
|
+
import type { IConfigurationService } from "@decohere/nexus/configuration";
|
|
231
|
+
import { SampleConfig } from "./sample.config.js";
|
|
232
|
+
|
|
233
|
+
@injectable()
|
|
234
|
+
export class SampleService {
|
|
235
|
+
public constructor(
|
|
236
|
+
@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,
|
|
237
|
+
) {}
|
|
238
|
+
|
|
239
|
+
public async getGreeting(): Promise<string> {
|
|
240
|
+
const config = await this.config.get(SampleConfig);
|
|
241
|
+
return config.greeting;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
`;
|
|
245
|
+
function CONFIG_YAML(name, opts) {
|
|
246
|
+
const dbSection = opts?.database === "typeorm" ? `database:
|
|
247
|
+
dataSources:
|
|
248
|
+
- name: default
|
|
249
|
+
provider: postgres
|
|
250
|
+
host: localhost
|
|
251
|
+
port: 5432
|
|
252
|
+
database: ${name}_dev
|
|
253
|
+
username: postgres
|
|
254
|
+
password: postgres
|
|
255
|
+
synchronize: true
|
|
256
|
+
seed: false
|
|
257
|
+
adminUser: postgres
|
|
258
|
+
adminPassword: postgres
|
|
259
|
+
` : "";
|
|
260
|
+
return `sample:
|
|
261
|
+
greeting: Hello from configuration!
|
|
262
|
+
${dbSection}`;
|
|
263
|
+
}
|
|
264
|
+
const CONFIG_DEV_YAML = `sample:
|
|
265
|
+
greeting: Hello from dev configuration!
|
|
266
|
+
`;
|
|
267
|
+
const CONFIG_PROD_YAML = `database:
|
|
268
|
+
dataSources:
|
|
269
|
+
- name: default
|
|
270
|
+
provider: postgres
|
|
271
|
+
host: \${DB_HOST}
|
|
272
|
+
port: \${DB_PORT}
|
|
273
|
+
database: \${DB_NAME}
|
|
274
|
+
username: \${DB_USER}
|
|
275
|
+
password: \${DB_PASSWORD}
|
|
276
|
+
synchronize: false
|
|
277
|
+
seed: false
|
|
278
|
+
adminUser: \${DB_ADMIN_USER}
|
|
279
|
+
adminPassword: \${DB_ADMIN_PASSWORD}
|
|
280
|
+
`;
|
|
281
|
+
const SAMPLE_ENTITY_TS = `import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
|
282
|
+
import type { Entity as IEntity } from "@decohere/codex";
|
|
283
|
+
|
|
284
|
+
@Entity()
|
|
285
|
+
export class SampleEntity implements IEntity {
|
|
286
|
+
\t@PrimaryGeneratedColumn()
|
|
287
|
+
\tpublic id!: number;
|
|
288
|
+
|
|
289
|
+
\t@Column()
|
|
290
|
+
\tpublic name!: string;
|
|
291
|
+
}
|
|
292
|
+
`;
|
|
293
|
+
const SAMPLE_REPOSITORY_TS = `import { injectable } from "@decohere/crucible/decorators";
|
|
294
|
+
import { injectUnitOfWork } from "@decohere/codex";
|
|
295
|
+
import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/codex-typeorm";
|
|
296
|
+
import { SampleEntity } from "../entities/sample.entity.js";
|
|
297
|
+
|
|
298
|
+
@injectable()
|
|
299
|
+
export class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {
|
|
300
|
+
\tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {
|
|
301
|
+
\t\tsuper(unitOfWork, SampleEntity);
|
|
302
|
+
\t}
|
|
303
|
+
}
|
|
304
|
+
`;
|
|
63
305
|
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdGVtcGxhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBST09UX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZSxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE0XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQVBQX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYEAke25hbWV9L2FwcGAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0bWFpbjogXCJzcmMvbWFpbi50c1wiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgVFNDT05GSUcgPSBKU09OLnN0cmluZ2lmeShcblx0e1xuXHRcdGNvbXBpbGVyT3B0aW9uczoge1xuXHRcdFx0dGFyZ2V0OiBcIkVTMjAyMlwiLFxuXHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRtb2R1bGVSZXNvbHV0aW9uOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBjb25zdCBNQUlOX1RTID0gYGNvbnNvbGUubG9nKFwiSGVsbG8gZnJvbSBEZWNvaGVyZSFcIik7XG5gO1xuIl0sIm5hbWVzIjpbIkFQUF9QQUNLQUdFX0pTT04iLCJNQUlOX1RTIiwiUk9PVF9QQUNLQUdFX0pTT04iLCJUU0NPTkZJRyIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwidmVyc2lvbiIsInR5cGUiLCJzY3JpcHRzIiwiYnVpbGQiLCJkZXYiLCJkZXZEZXBlbmRlbmNpZXMiLCJ0eXBlc2NyaXB0IiwibWFpbiIsImNvbXBpbGVyT3B0aW9ucyIsInRhcmdldCIsIm1vZHVsZSIsIm1vZHVsZVJlc29sdXRpb24iLCJzdHJpY3QiLCJza2lwTGliQ2hlY2siLCJpbmNsdWRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQXFCZ0JBO2VBQUFBOztRQTRCSEM7ZUFBQUE7O1FBakRHQztlQUFBQTs7UUFrQ0hDO2VBQUFBOzs7QUFsQ04sU0FBU0Qsa0JBQWtCRSxJQUFZO0lBQzdDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQ0Y7UUFDQUcsU0FBUztRQUNUQyxNQUFNO1FBQ05DLFNBQVM7WUFDUkMsT0FBTztZQUNQLGVBQWU7WUFDZkMsS0FBSztRQUNOO1FBQ0FDLGlCQUFpQjtZQUNoQixzQkFBc0I7WUFDdEJDLFlBQVk7UUFDYjtJQUNELEdBQ0EsTUFDQTtBQUVGO0FBRU8sU0FBU2IsaUJBQWlCSSxJQUFZO0lBQzVDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQ0YsTUFBTSxDQUFDLENBQUMsRUFBRUEsS0FBSyxJQUFJLENBQUM7UUFDcEJHLFNBQVM7UUFDVEMsTUFBTTtRQUNOTSxNQUFNO0lBQ1AsR0FDQSxNQUNBO0FBRUY7QUFFTyxNQUFNWCxXQUFXRSxLQUFLQyxTQUFTLENBQ3JDO0lBQ0NTLGlCQUFpQjtRQUNoQkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGtCQUFrQjtRQUNsQkMsUUFBUTtRQUNSQyxjQUFjO0lBQ2Y7SUFDQUMsU0FBUztRQUFDO0tBQVc7QUFDdEIsR0FDQSxNQUNBO0FBR00sTUFBTXBCLFVBQVUsQ0FBQztBQUN4QixDQUFDIn0=
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdGVtcGxhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBST09UX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZSxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE0XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhYmFzZVByb3ZpZGVyID0gXCJ0eXBlb3JtXCI7XG5cbmV4cG9ydCB0eXBlIFdlYkFwaU9wdGlvbnMgPSB7XG5cdGRhdGFiYXNlPzogRGF0YWJhc2VQcm92aWRlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX1JPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZywgb3B0cz86IFdlYkFwaU9wdGlvbnMpOiBzdHJpbmcge1xuXHRjb25zdCBkZXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcdFwiQGRlY29oZXJlL2NvcnRleFwiOiBcIjAuMC4xLWRldi4xNVwiLFxuXHRcdFwiQGRlY29oZXJlL3Byb3RvY29sXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XCJAZGVjb2hlcmUvc2NyaWJlXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcInBpbm8tcHJldHR5XCI6IFwiXjEzLjAuMFwiLFxuXHR9O1xuXHRpZiAob3B0cz8uZGF0YWJhc2UgPT09IFwidHlwZW9ybVwiKSB7XG5cdFx0ZGVwc1tcIkBkZWNvaGVyZS9jb2RleFwiXSA9IFwiMC4wLjEtZGV2LjE1XCI7XG5cdFx0ZGVwc1tcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCJdID0gXCIwLjAuMS1kZXYuMTVcIjtcblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYCR7bmFtZX0uYXBpYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGVwZW5kZW5jaWVzOiBkZXBzLFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQVBQX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYEAke25hbWV9L2FwcGAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0bWFpbjogXCJzcmMvbWFpbi50c1wiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgVFNDT05GSUcgPSBKU09OLnN0cmluZ2lmeShcblx0e1xuXHRcdGNvbXBpbGVyT3B0aW9uczoge1xuXHRcdFx0dGFyZ2V0OiBcIkVTMjAyMlwiLFxuXHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRtb2R1bGVSZXNvbHV0aW9uOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBjb25zdCBNQUlOX1RTID0gYGNvbnNvbGUubG9nKFwiSGVsbG8gZnJvbSBEZWNvaGVyZSFcIik7XG5gO1xuXG5leHBvcnQgY29uc3QgV0VCX0FQSV9UU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHRcdGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG5cdFx0XHRlbWl0RGVjb3JhdG9yTWV0YWRhdGE6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuXHRcdHtcblx0XHRcdG5hbWU6IGBAJHtuYW1lfS9hcGlgLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdG1haW46IFwic3JjL21haW4udHNcIixcblx0XHRcdGRlcGVuZGVuY2llczoge1xuXHRcdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcdFx0XCJAZGVjb2hlcmUvY3J1Y2libGVcIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX01BSU5fVFMobmFtZTogc3RyaW5nLCBvcHRzPzogV2ViQXBpT3B0aW9ucyk6IHN0cmluZyB7XG5cdGNvbnN0IGRiSW1wb3J0ID1cblx0XHRvcHRzPy5kYXRhYmFzZSA9PT0gXCJ0eXBlb3JtXCJcblx0XHRcdD8gYGltcG9ydCBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdGllcy9zYW1wbGUuZW50aXR5LmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHlSZXBvc2l0b3J5IH0gZnJvbSBcIi4vcmVwb3NpdG9yaWVzL3NhbXBsZS5yZXBvc2l0b3J5LmpzXCI7XG5gXG5cdFx0XHQ6IFwiXCI7XG5cdGNvbnN0IGRiQ2hhaW4gPVxuXHRcdG9wdHM/LmRhdGFiYXNlID09PSBcInR5cGVvcm1cIlxuXHRcdFx0PyBgXFxuXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFtTYW1wbGVFbnRpdHldLCByZXBvc2l0b3JpZXM6IFtTYW1wbGVFbnRpdHlSZXBvc2l0b3J5XSB9KWBcblx0XHRcdDogXCJcIjtcblx0cmV0dXJuIGBpbXBvcnQgXCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjtcbmltcG9ydCBcIkBkZWNvaGVyZS9jb3J0ZXgvaHR0cFwiO1xuaW1wb3J0IFwiQGRlY29oZXJlL3Byb3RvY29sXCI7XG4ke2RiSW1wb3J0fWltcG9ydCB7IEJ1aWxkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgRmFzdGlmeVByb3ZpZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXgvcHJvdmlkZXJzXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgWWFtbERhdGFTb3VyY2UgfSBmcm9tIFwiQGRlY29oZXJlL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBIZWxsb0NvbnRyb2xsZXIgfSBmcm9tIFwiLi9jb250cm9sbGVycy9oZWxsby5jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2FtcGxlLnNlcnZpY2UuanNcIjtcblxuc2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1xuXG5jb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke25hbWV9LmFwaVwiIH0pXG5cXHQud2l0aEh0dHBQcm92aWRlcihGYXN0aWZ5UHJvdmlkZXIpXG5cXHQud2l0aENvbmZpZ3VyYXRpb24oWWFtbERhdGFTb3VyY2UpXG5cXHQud2l0aFNlcnZpY2VzKChjYikgPT4ge1xuXFx0XFx0Y2IucmVnaXN0ZXJTaW5nbGV0b24oU2FtcGxlU2VydmljZSk7XG5cXHR9KSR7ZGJDaGFpbn1cblxcdC53aXRoQ29udHJvbGxlcnMoSGVsbG9Db250cm9sbGVyKVxuXFx0LmJ1aWxkKCk7XG5cbmF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFwcDtcbmA7XG59XG5cbmV4cG9ydCBjb25zdCBIRUxMT19DT05UUk9MTEVSX1RTID0gYGltcG9ydCB7IENvbnRyb2xsZXIsIERlbGV0ZSwgRmllbGQsIEdldCwgUGFyYW0sIFBvc3QsIFB1dCwgUXVlcnkgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgU2FtcGxlU2VydmljZSB9IGZyb20gXCIuLi9zYW1wbGUuc2VydmljZS5qc1wiO1xuXG5jbGFzcyBIZWxsb0JvZHkge1xuXHRARmllbGQoXCJib2R5XCIsIFwibWVzc2FnZVwiKVxuXHRwdWJsaWMgbWVzc2FnZSE6IHN0cmluZztcbn1cblxuQENvbnRyb2xsZXIoeyBwcmVmaXg6IFwiL2hlbGxvXCIgfSlcbmV4cG9ydCBjbGFzcyBIZWxsb0NvbnRyb2xsZXIge1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzYW1wbGU6IFNhbXBsZVNlcnZpY2UpIHt9XG5cblx0QEdldCgpXG5cdHB1YmxpYyBhc3luYyBnZXRBbGwoQFF1ZXJ5KFwiZmlsdGVyXCIpIGZpbHRlcjogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZ3JlZXRpbmcgPSBhd2FpdCB0aGlzLnNhbXBsZS5nZXRHcmVldGluZygpO1xuXHRcdHJldHVybiB7IGZpbHRlciwgbWVzc2FnZTogZ3JlZXRpbmcgfTtcblx0fVxuXG5cdEBHZXQoXCIvOmlkXCIpXG5cdHB1YmxpYyBnZXRPbmUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuXHRcdHJldHVybiB7IGlkLCBtZXNzYWdlOiBcXGBIZWxsbyBcXCR7aWR9IVxcYCB9O1xuXHR9XG5cblx0QFBvc3QoXCIvXCIpXG5cdHB1YmxpYyBjcmVhdGUoYm9keTogSGVsbG9Cb2R5KSB7XG5cdFx0cmV0dXJuIHsgbWVzc2FnZTogYm9keS5tZXNzYWdlIH07XG5cdH1cblxuXHRAUHV0KFwiLzppZFwiKVxuXHRwdWJsaWMgdXBkYXRlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcsIGJvZHk6IEhlbGxvQm9keSkge1xuXHRcdHJldHVybiB7IGlkLCBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcblx0fVxuXG5cdEBEZWxldGUoXCIvOmlkXCIpXG5cdHB1YmxpYyByZW1vdmUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuXHRcdHJldHVybiB7IGlkLCBkZWxldGVkOiB0cnVlIH07XG5cdH1cbn1cbmA7XG5cbmV4cG9ydCBjb25zdCBTQU1QTEVfQ09ORklHX1RTID0gYGV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWcge1xuXHRwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZyA9IFwiXCI7XG59XG5gO1xuXG5leHBvcnQgY29uc3QgU0FNUExFX1NFUlZJQ0VfVFMgPSBgaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZVRva2VuIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IElDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnIH0gZnJvbSBcIi4vc2FtcGxlLmNvbmZpZy5qc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZSB7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRAaW5qZWN0KENvbmZpZ3VyYXRpb25TZXJ2aWNlVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29uZmlndXJhdGlvblNlcnZpY2UsXG5cdCkge31cblxuXHRwdWJsaWMgYXN5bmMgZ2V0R3JlZXRpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXQoU2FtcGxlQ29uZmlnKTtcblx0XHRyZXR1cm4gY29uZmlnLmdyZWV0aW5nO1xuXHR9XG59XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gQ09ORklHX1lBTUwobmFtZTogc3RyaW5nLCBvcHRzPzogV2ViQXBpT3B0aW9ucyk6IHN0cmluZyB7XG5cdGNvbnN0IGRiU2VjdGlvbiA9XG5cdFx0b3B0cz8uZGF0YWJhc2UgPT09IFwidHlwZW9ybVwiXG5cdFx0XHQ/IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBuYW1lOiBkZWZhdWx0XG4gICAgICBwcm92aWRlcjogcG9zdGdyZXNcbiAgICAgIGhvc3Q6IGxvY2FsaG9zdFxuICAgICAgcG9ydDogNTQzMlxuICAgICAgZGF0YWJhc2U6ICR7bmFtZX1fZGV2XG4gICAgICB1c2VybmFtZTogcG9zdGdyZXNcbiAgICAgIHBhc3N3b3JkOiBwb3N0Z3Jlc1xuICAgICAgc3luY2hyb25pemU6IHRydWVcbiAgICAgIHNlZWQ6IGZhbHNlXG4gICAgICBhZG1pblVzZXI6IHBvc3RncmVzXG4gICAgICBhZG1pblBhc3N3b3JkOiBwb3N0Z3Jlc1xuYFxuXHRcdFx0OiBcIlwiO1xuXHRyZXR1cm4gYHNhbXBsZTpcbiAgZ3JlZXRpbmc6IEhlbGxvIGZyb20gY29uZmlndXJhdGlvbiFcbiR7ZGJTZWN0aW9ufWA7XG59XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfREVWX1lBTUwgPSBgc2FtcGxlOlxuICBncmVldGluZzogSGVsbG8gZnJvbSBkZXYgY29uZmlndXJhdGlvbiFcbmA7XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUFJPRF9ZQU1MID0gYGRhdGFiYXNlOlxuICBkYXRhU291cmNlczpcbiAgICAtIG5hbWU6IGRlZmF1bHRcbiAgICAgIHByb3ZpZGVyOiBwb3N0Z3Jlc1xuICAgICAgaG9zdDogXFwke0RCX0hPU1R9XG4gICAgICBwb3J0OiBcXCR7REJfUE9SVH1cbiAgICAgIGRhdGFiYXNlOiBcXCR7REJfTkFNRX1cbiAgICAgIHVzZXJuYW1lOiBcXCR7REJfVVNFUn1cbiAgICAgIHBhc3N3b3JkOiBcXCR7REJfUEFTU1dPUkR9XG4gICAgICBzeW5jaHJvbml6ZTogZmFsc2VcbiAgICAgIHNlZWQ6IGZhbHNlXG4gICAgICBhZG1pblVzZXI6IFxcJHtEQl9BRE1JTl9VU0VSfVxuICAgICAgYWRtaW5QYXNzd29yZDogXFwke0RCX0FETUlOX1BBU1NXT1JEfVxuYDtcblxuZXhwb3J0IGNvbnN0IFNBTVBMRV9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIG5hbWUhOiBzdHJpbmc7XG59XG5gO1xuXG5leHBvcnQgY29uc3QgU0FNUExFX1JFUE9TSVRPUllfVFMgPSBgaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgaW5qZWN0VW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcbmltcG9ydCB7IFR5cGVPcm1SZXBvc2l0b3J5LCBUeXBlT3JtVW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXgtdHlwZW9ybVwiO1xuaW1wb3J0IHsgU2FtcGxlRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3NhbXBsZS5lbnRpdHkuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNhbXBsZUVudGl0eVJlcG9zaXRvcnkgZXh0ZW5kcyBUeXBlT3JtUmVwb3NpdG9yeTxTYW1wbGVFbnRpdHk+IHtcblxcdHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0VW5pdE9mV29yaygpIHVuaXRPZldvcms6IFR5cGVPcm1Vbml0T2ZXb3JrKSB7XG5cXHRcXHRzdXBlcih1bml0T2ZXb3JrLCBTYW1wbGVFbnRpdHkpO1xuXFx0fVxufVxuYDtcbiJdLCJuYW1lcyI6WyJBUFBfUEFDS0FHRV9KU09OIiwiQ09ORklHX0RFVl9ZQU1MIiwiQ09ORklHX1BST0RfWUFNTCIsIkNPTkZJR19ZQU1MIiwiSEVMTE9fQ09OVFJPTExFUl9UUyIsIk1BSU5fVFMiLCJST09UX1BBQ0tBR0VfSlNPTiIsIlNBTVBMRV9DT05GSUdfVFMiLCJTQU1QTEVfRU5USVRZX1RTIiwiU0FNUExFX1JFUE9TSVRPUllfVFMiLCJTQU1QTEVfU0VSVklDRV9UUyIsIlRTQ09ORklHIiwiV0VCX0FQSV9BUFBfUEFDS0FHRV9KU09OIiwiV0VCX0FQSV9NQUlOX1RTIiwiV0VCX0FQSV9ST09UX1BBQ0tBR0VfSlNPTiIsIldFQl9BUElfVFNDT05GSUciLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInZlcnNpb24iLCJ0eXBlIiwic2NyaXB0cyIsImJ1aWxkIiwiZGV2IiwiZGV2RGVwZW5kZW5jaWVzIiwidHlwZXNjcmlwdCIsIm9wdHMiLCJkZXBzIiwiZGF0YWJhc2UiLCJkZXBlbmRlbmNpZXMiLCJtYWluIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImluY2x1ZGUiLCJleHBlcmltZW50YWxEZWNvcmF0b3JzIiwiZW1pdERlY29yYXRvck1ldGFkYXRhIiwiZGJJbXBvcnQiLCJkYkNoYWluIiwiZGJTZWN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQTREZ0JBO2VBQUFBOztRQThMSEM7ZUFBQUE7O1FBSUFDO2VBQUFBOztRQTNCR0M7ZUFBQUE7O1FBL0RIQztlQUFBQTs7UUE1RUFDO2VBQUFBOztRQXhGR0M7ZUFBQUE7O1FBNE1IQztlQUFBQTs7UUFpRUFDO2VBQUFBOztRQWFBQztlQUFBQTs7UUF6RUFDO2VBQUFBOztRQXhJQUM7ZUFBQUE7O1FBbUNHQztlQUFBQTs7UUFpQkFDO2VBQUFBOztRQWxHQUM7ZUFBQUE7O1FBZ0VIQztlQUFBQTs7O0FBM0ZOLFNBQVNULGtCQUFrQlUsSUFBWTtJQUM3QyxPQUFPQyxLQUFLQyxTQUFTLENBQ3BCO1FBQ0NGO1FBQ0FHLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxTQUFTO1lBQ1JDLE9BQU87WUFDUCxlQUFl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
|
package/es6/src/cli.js
CHANGED
|
@@ -3,9 +3,9 @@ import { resolve } from "node:path";
|
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { scaffold } from "./scaffold.js";
|
|
5
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)=>{
|
|
6
|
+
program.name("decohere").description("Scaffold a new Decohere project").argument("[directory]", "Target directory (default: current directory)", ".").option("-y, --yes", "Skip confirmation prompts").option("-t, --template <template>", "Project template: basic (default) or webapi", "basic").option("-d, --database <provider>", "Database provider to include (webapi only): typeorm").action(async (directory, opts)=>{
|
|
7
7
|
await scaffold(resolve(directory), opts);
|
|
8
8
|
});
|
|
9
9
|
program.parse();
|
|
10
10
|
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgc2NhZmZvbGQgfSBmcm9tIFwiLi9zY2FmZm9sZC5qc1wiO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuXHQubmFtZShcImRlY29oZXJlXCIpXG5cdC5kZXNjcmlwdGlvbihcIlNjYWZmb2xkIGEgbmV3IERlY29oZXJlIHByb2plY3RcIilcblx0LmFyZ3VtZW50KFwiW2RpcmVjdG9yeV1cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpXG5cdC5vcHRpb24oXCIteSwgLS15ZXNcIiwgXCJTa2lwIGNvbmZpcm1hdGlvbiBwcm9tcHRzXCIpXG5cdC5vcHRpb24oXCItdCwgLS10ZW1wbGF0ZSA8dGVtcGxhdGU+XCIsIFwiUHJvamVjdCB0ZW1wbGF0ZTogYmFzaWMgKGRlZmF1bHQpIG9yIHdlYmFwaVwiLCBcImJhc2ljXCIpXG5cdC5vcHRpb24oXCItZCwgLS1kYXRhYmFzZSA8cHJvdmlkZXI+XCIsIFwiRGF0YWJhc2UgcHJvdmlkZXIgdG8gaW5jbHVkZSAod2ViYXBpIG9ubHkpOiB0eXBlb3JtXCIpXG5cdC5hY3Rpb24oXG5cdFx0YXN5bmMgKFxuXHRcdFx0ZGlyZWN0b3J5OiBzdHJpbmcsXG5cdFx0XHRvcHRzOiB7IHllcz86IGJvb2xlYW47IHRlbXBsYXRlPzogXCJiYXNpY1wiIHwgXCJ3ZWJhcGlcIjsgZGF0YWJhc2U/OiBcInR5cGVvcm1cIiB9LFxuXHRcdCkgPT4ge1xuXHRcdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcblx0XHR9LFxuXHQpO1xuXG5wcm9ncmFtLnBhcnNlKCk7XG4iXSwibmFtZXMiOlsicmVzb2x2ZSIsIkNvbW1hbmQiLCJzY2FmZm9sZCIsInByb2dyYW0iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhcmd1bWVudCIsIm9wdGlvbiIsImFjdGlvbiIsImRpcmVjdG9yeSIsIm9wdHMiLCJwYXJzZSJdLCJtYXBwaW5ncyI6IjtBQUNBLFNBQVNBLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLFFBQVEsUUFBUSxnQkFBZ0I7QUFFekMsTUFBTUMsVUFBVSxJQUFJRjtBQUVwQkUsUUFDRUMsSUFBSSxDQUFDLFlBQ0xDLFdBQVcsQ0FBQyxtQ0FDWkMsUUFBUSxDQUFDLGVBQWUsaURBQWlELEtBQ3pFQyxNQUFNLENBQUMsYUFBYSw2QkFDcEJBLE1BQU0sQ0FBQyw2QkFBNkIsK0NBQStDLFNBQ25GQSxNQUFNLENBQUMsNkJBQTZCLHVEQUNwQ0MsTUFBTSxDQUNOLE9BQ0NDLFdBQ0FDO0lBRUEsTUFBTVIsU0FBU0YsUUFBUVMsWUFBWUM7QUFDcEM7QUFHRlAsUUFBUVEsS0FBSyJ9
|
package/es6/src/scaffold.js
CHANGED
|
@@ -2,7 +2,8 @@ import { existsSync, readdirSync } from "node:fs";
|
|
|
2
2
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
3
|
import { basename, join } from "node:path";
|
|
4
4
|
import { createInterface } from "node:readline/promises";
|
|
5
|
-
import {
|
|
5
|
+
import { detectPackageManager, promptForPackageManager } from "@decohere/nexus/interop";
|
|
6
|
+
import { APP_PACKAGE_JSON, CONFIG_DEV_YAML, CONFIG_PROD_YAML, CONFIG_YAML, HELLO_CONTROLLER_TS, MAIN_TS, ROOT_PACKAGE_JSON, SAMPLE_CONFIG_TS, SAMPLE_ENTITY_TS, SAMPLE_REPOSITORY_TS, SAMPLE_SERVICE_TS, TSCONFIG, WEB_API_APP_PACKAGE_JSON, WEB_API_MAIN_TS, WEB_API_ROOT_PACKAGE_JSON, WEB_API_TSCONFIG } from "./templates.js";
|
|
6
7
|
export async function scaffold(targetDir, opts) {
|
|
7
8
|
const name = basename(targetDir);
|
|
8
9
|
if (existsSync(targetDir) && readdirSync(targetDir).length > 0 && !opts.yes) {
|
|
@@ -17,22 +18,62 @@ export async function scaffold(targetDir, opts) {
|
|
|
17
18
|
process.exit(0);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
if (opts.template === "webapi") {
|
|
22
|
+
const dbOpts = opts.database ? {
|
|
23
|
+
database: opts.database
|
|
24
|
+
} : undefined;
|
|
25
|
+
await mkdir(join(targetDir, "projects", "api", "src", "controllers"), {
|
|
26
|
+
recursive: true
|
|
27
|
+
});
|
|
28
|
+
await mkdir(join(targetDir, "config"), {
|
|
29
|
+
recursive: true
|
|
30
|
+
});
|
|
31
|
+
const writes = [
|
|
32
|
+
writeFile(join(targetDir, "package.json"), WEB_API_ROOT_PACKAGE_JSON(name, dbOpts)),
|
|
33
|
+
writeFile(join(targetDir, "tsconfig.json"), WEB_API_TSCONFIG),
|
|
34
|
+
writeFile(join(targetDir, "projects", "api", "package.json"), WEB_API_APP_PACKAGE_JSON(name)),
|
|
35
|
+
writeFile(join(targetDir, "projects", "api", "src", "main.ts"), WEB_API_MAIN_TS(name, dbOpts)),
|
|
36
|
+
writeFile(join(targetDir, "projects", "api", "src", "controllers", "hello.controller.ts"), HELLO_CONTROLLER_TS),
|
|
37
|
+
writeFile(join(targetDir, "projects", "api", "src", "sample.config.ts"), SAMPLE_CONFIG_TS),
|
|
38
|
+
writeFile(join(targetDir, "projects", "api", "src", "sample.service.ts"), SAMPLE_SERVICE_TS),
|
|
39
|
+
writeFile(join(targetDir, "config", "config.yaml"), CONFIG_YAML(name, dbOpts)),
|
|
40
|
+
writeFile(join(targetDir, "config", "config.dev.yaml"), CONFIG_DEV_YAML)
|
|
41
|
+
];
|
|
42
|
+
if (opts.database === "typeorm") {
|
|
43
|
+
await mkdir(join(targetDir, "projects", "api", "src", "entities"), {
|
|
44
|
+
recursive: true
|
|
45
|
+
});
|
|
46
|
+
await mkdir(join(targetDir, "projects", "api", "src", "repositories"), {
|
|
47
|
+
recursive: true
|
|
48
|
+
});
|
|
49
|
+
writes.push(writeFile(join(targetDir, "projects", "api", "src", "entities", "sample.entity.ts"), SAMPLE_ENTITY_TS), writeFile(join(targetDir, "projects", "api", "src", "repositories", "sample.repository.ts"), SAMPLE_REPOSITORY_TS), writeFile(join(targetDir, "config", "config.prod.yaml"), CONFIG_PROD_YAML));
|
|
50
|
+
}
|
|
51
|
+
await Promise.all(writes);
|
|
52
|
+
} else {
|
|
53
|
+
await mkdir(join(targetDir, "projects", "app", "src"), {
|
|
54
|
+
recursive: true
|
|
55
|
+
});
|
|
56
|
+
await Promise.all([
|
|
57
|
+
writeFile(join(targetDir, "package.json"), ROOT_PACKAGE_JSON(name)),
|
|
58
|
+
writeFile(join(targetDir, "tsconfig.json"), TSCONFIG),
|
|
59
|
+
writeFile(join(targetDir, "projects", "app", "package.json"), APP_PACKAGE_JSON(name)),
|
|
60
|
+
writeFile(join(targetDir, "projects", "app", "src", "main.ts"), MAIN_TS)
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
console.log(`\nScaffolded ${name}. Installing dependencies...\n`);
|
|
64
|
+
let pm = detectPackageManager(targetDir);
|
|
65
|
+
if (pm == null) {
|
|
66
|
+
pm = await promptForPackageManager();
|
|
67
|
+
}
|
|
68
|
+
await pm.install({
|
|
69
|
+
cwd: targetDir
|
|
22
70
|
});
|
|
23
|
-
|
|
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`);
|
|
71
|
+
console.log(`\nDone! Next steps:\n`);
|
|
30
72
|
if (basename(targetDir) !== targetDir) {
|
|
31
73
|
console.log(` cd ${name}`);
|
|
32
74
|
}
|
|
33
|
-
console.log(" pnpm install");
|
|
34
75
|
console.log(" pnpm build # forge build");
|
|
35
76
|
console.log(" pnpm dev # flux serve\n");
|
|
36
77
|
}
|
|
37
78
|
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvc2NhZmZvbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSB9IGZyb20gXCJub2RlOnJlYWRsaW5lL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBBUFBfUEFDS0FHRV9KU09OLCBNQUlOX1RTLCBST09UX1BBQ0tBR0VfSlNPTiwgVFNDT05GSUcgfSBmcm9tIFwiLi90ZW1wbGF0ZXMuanNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTY2FmZm9sZE9wdGlvbnMge1xuXHR5ZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQodGFyZ2V0RGlyOiBzdHJpbmcsIG9wdHM6IFNjYWZmb2xkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBuYW1lID0gYmFzZW5hbWUodGFyZ2V0RGlyKTtcblxuXHRpZiAoZXhpc3RzU3luYyh0YXJnZXREaXIpICYmIHJlYWRkaXJTeW5jKHRhcmdldERpcikubGVuZ3RoID4gMCAmJiAhb3B0cy55ZXMpIHtcblx0XHRjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcblx0XHRcdG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG5cdFx0fSk7XG5cdFx0Y29uc3QgYW5zd2VyID0gYXdhaXQgcmwucXVlc3Rpb24oYERpcmVjdG9yeSBcIiR7bmFtZX1cIiBpcyBub3QgZW1wdHkuIENvbnRpbnVlPyBbeS9OXSBgKTtcblx0XHRybC5jbG9zZSgpO1xuXHRcdGlmICghYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJ5XCIpKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcIkFib3J0ZWQuXCIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdH1cblx0fVxuXG5cdGF3YWl0IG1rZGlyKGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBwXCIsIFwic3JjXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInBhY2thZ2UuanNvblwiKSwgUk9PVF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJ0c2NvbmZpZy5qc29uXCIpLCBUU0NPTkZJRyksXG5cdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBwXCIsIFwicGFja2FnZS5qc29uXCIpLCBBUFBfUEFDS0FHRV9KU09OKG5hbWUpKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiwgXCJtYWluLnRzXCIpLCBNQUlOX1RTKSxcblx0XSk7XG5cblx0Y29uc29sZS5sb2coYFxcblNjYWZmb2xkZWQgJHtuYW1lfS4gTmV4dCBzdGVwczpcXG5gKTtcblx0aWYgKGJhc2VuYW1lKHRhcmdldERpcikgIT09IHRhcmdldERpcikge1xuXHRcdGNvbnNvbGUubG9nKGAgIGNkICR7bmFtZX1gKTtcblx0fVxuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBpbnN0YWxsXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBidWlsZCAgICAgIyBmb3JnZSBidWlsZFwiKTtcblx0Y29uc29sZS5sb2coXCIgIHBucG0gZGV2ICAgICAgICMgZmx1eCBzZXJ2ZVxcblwiKTtcbn1cbiJdLCJuYW1lcyI6WyJleGlzdHNTeW5jIiwicmVhZGRpclN5bmMiLCJta2RpciIsIndyaXRlRmlsZSIsImJhc2VuYW1lIiwiam9pbiIsImNyZWF0ZUludGVyZmFjZSIsIkFQUF9QQUNLQUdFX0pTT04iLCJNQUlOX1RTIiwiUk9PVF9QQUNLQUdFX0pTT04iLCJUU0NPTkZJRyIsInNjYWZmb2xkIiwidGFyZ2V0RGlyIiwib3B0cyIsIm5hbWUiLCJsZW5ndGgiLCJ5ZXMiLCJybCIsImlucHV0IiwicHJvY2VzcyIsInN0ZGluIiwib3V0cHV0Iiwic3Rkb3V0IiwiYW5zd2VyIiwicXVlc3Rpb24iLCJjbG9zZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInN0YXJ0c1dpdGgiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsInJlY3Vyc2l2ZSIsIlByb21pc2UiLCJhbGwiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsRUFBRUMsV0FBVyxRQUFRLFVBQVU7QUFDbEQsU0FBU0MsS0FBSyxFQUFFQyxTQUFTLFFBQVEsbUJBQW1CO0FBQ3BELFNBQVNDLFFBQVEsRUFBRUMsSUFBSSxRQUFRLFlBQVk7QUFDM0MsU0FBU0MsZUFBZSxRQUFRLHlCQUF5QjtBQUN6RCxTQUFTQyxnQkFBZ0IsRUFBRUMsT0FBTyxFQUFFQyxpQkFBaUIsRUFBRUMsUUFBUSxRQUFRLGlCQUFpQjtBQU14RixPQUFPLGVBQWVDLFNBQVNDLFNBQWlCLEVBQUVDLElBQXFCO0lBQ3RFLE1BQU1DLE9BQU9WLFNBQVNRO0lBRXRCLElBQUlaLFdBQVdZLGNBQWNYLFlBQVlXLFdBQVdHLE1BQU0sR0FBRyxLQUFLLENBQUNGLEtBQUtHLEdBQUcsRUFBRTtRQUM1RSxNQUFNQyxLQUFLWCxnQkFBZ0I7WUFDMUJZLE9BQU9DLFFBQVFDLEtBQUs7WUFDcEJDLFFBQVFGLFFBQVFHLE1BQU07UUFDdkI7UUFDQSxNQUFNQyxTQUFTLE1BQU1OLEdBQUdPLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRVYsS0FBSyxnQ0FBZ0MsQ0FBQztRQUNyRkcsR0FBR1EsS0FBSztRQUNSLElBQUksQ0FBQ0YsT0FBT0csSUFBSSxHQUFHQyxXQUFXLEdBQUdDLFVBQVUsQ0FBQyxNQUFNO1lBQ2pEQyxRQUFRQyxHQUFHLENBQUM7WUFDWlgsUUFBUVksSUFBSSxDQUFDO1FBQ2Q7SUFDRDtJQUVBLE1BQU03QixNQUFNRyxLQUFLTyxXQUFXLFlBQVksT0FBTyxRQUFRO1FBQUVvQixXQUFXO0lBQUs7SUFFekUsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQ2pCL0IsVUFBVUUsS0FBS08sV0FBVyxpQkFBaUJILGtCQUFrQks7UUFDN0RYLFVBQVVFLEtBQUtPLFdBQVcsa0JBQWtCRjtRQUM1Q1AsVUFBVUUsS0FBS08sV0FBVyxZQUFZLE9BQU8saUJBQWlCTCxpQkFBaUJPO1FBQy9FWCxVQUFVRSxLQUFLTyxXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVlKO0tBQ2hFO0lBRURxQixRQUFRQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUVoQixLQUFLLGVBQWUsQ0FBQztJQUNqRCxJQUFJVixTQUFTUSxlQUFlQSxXQUFXO1FBQ3RDaUIsUUFBUUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFaEIsTUFBTTtJQUMzQjtJQUNBZSxRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0lBQ1pELFFBQVFDLEdBQUcsQ0FBQztBQUNiIn0=
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvc2NhZmZvbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSB9IGZyb20gXCJub2RlOnJlYWRsaW5lL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkZXRlY3RQYWNrYWdlTWFuYWdlciwgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2ludGVyb3BcIjtcbmltcG9ydCB7XG5cdEFQUF9QQUNLQUdFX0pTT04sXG5cdENPTkZJR19ERVZfWUFNTCxcblx0Q09ORklHX1BST0RfWUFNTCxcblx0Q09ORklHX1lBTUwsXG5cdEhFTExPX0NPTlRST0xMRVJfVFMsXG5cdE1BSU5fVFMsXG5cdFJPT1RfUEFDS0FHRV9KU09OLFxuXHRTQU1QTEVfQ09ORklHX1RTLFxuXHRTQU1QTEVfRU5USVRZX1RTLFxuXHRTQU1QTEVfUkVQT1NJVE9SWV9UUyxcblx0U0FNUExFX1NFUlZJQ0VfVFMsXG5cdFRTQ09ORklHLFxuXHRXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04sXG5cdFdFQl9BUElfTUFJTl9UUyxcblx0V0VCX0FQSV9ST09UX1BBQ0tBR0VfSlNPTixcblx0V0VCX0FQSV9UU0NPTkZJRyxcbn0gZnJvbSBcIi4vdGVtcGxhdGVzLmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NhZmZvbGRPcHRpb25zIHtcblx0eWVzPzogYm9vbGVhbjtcblx0dGVtcGxhdGU/OiBcImJhc2ljXCIgfCBcIndlYmFwaVwiO1xuXHRkYXRhYmFzZT86IFwidHlwZW9ybVwiO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQodGFyZ2V0RGlyOiBzdHJpbmcsIG9wdHM6IFNjYWZmb2xkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBuYW1lID0gYmFzZW5hbWUodGFyZ2V0RGlyKTtcblxuXHRpZiAoZXhpc3RzU3luYyh0YXJnZXREaXIpICYmIHJlYWRkaXJTeW5jKHRhcmdldERpcikubGVuZ3RoID4gMCAmJiAhb3B0cy55ZXMpIHtcblx0XHRjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcblx0XHRcdG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG5cdFx0fSk7XG5cdFx0Y29uc3QgYW5zd2VyID0gYXdhaXQgcmwucXVlc3Rpb24oYERpcmVjdG9yeSBcIiR7bmFtZX1cIiBpcyBub3QgZW1wdHkuIENvbnRpbnVlPyBbeS9OXSBgKTtcblx0XHRybC5jbG9zZSgpO1xuXHRcdGlmICghYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJ5XCIpKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcIkFib3J0ZWQuXCIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvcHRzLnRlbXBsYXRlID09PSBcIndlYmFwaVwiKSB7XG5cdFx0Y29uc3QgZGJPcHRzID0gb3B0cy5kYXRhYmFzZSA/IHsgZGF0YWJhc2U6IG9wdHMuZGF0YWJhc2UgfSA6IHVuZGVmaW5lZDtcblx0XHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcImNvbnRyb2xsZXJzXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0XHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCJjb25maWdcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdGNvbnN0IHdyaXRlcyA9IFtcblx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwYWNrYWdlLmpzb25cIiksIFdFQl9BUElfUk9PVF9QQUNLQUdFX0pTT04obmFtZSwgZGJPcHRzKSksXG5cdFx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwidHNjb25maWcuanNvblwiKSwgV0VCX0FQSV9UU0NPTkZJRyksXG5cdFx0XHR3cml0ZUZpbGUoXG5cdFx0XHRcdGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBpXCIsIFwicGFja2FnZS5qc29uXCIpLFxuXHRcdFx0XHRXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04obmFtZSksXG5cdFx0XHQpLFxuXHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcIm1haW4udHNcIiksXG5cdFx0XHRcdFdFQl9BUElfTUFJTl9UUyhuYW1lLCBkYk9wdHMpLFxuXHRcdFx0KSxcblx0XHRcdHdyaXRlRmlsZShcblx0XHRcdFx0am9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcGlcIiwgXCJzcmNcIiwgXCJjb250cm9sbGVyc1wiLCBcImhlbGxvLmNvbnRyb2xsZXIudHNcIiksXG5cdFx0XHRcdEhFTExPX0NPTlRST0xMRVJfVFMsXG5cdFx0XHQpLFxuXHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcInNhbXBsZS5jb25maWcudHNcIiksXG5cdFx0XHRcdFNBTVBMRV9DT05GSUdfVFMsXG5cdFx0XHQpLFxuXHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcInNhbXBsZS5zZXJ2aWNlLnRzXCIpLFxuXHRcdFx0XHRTQU1QTEVfU0VSVklDRV9UUyxcblx0XHRcdCksXG5cdFx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwiY29uZmlnXCIsIFwiY29uZmlnLnlhbWxcIiksIENPTkZJR19ZQU1MKG5hbWUsIGRiT3B0cykpLFxuXHRcdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcImNvbmZpZ1wiLCBcImNvbmZpZy5kZXYueWFtbFwiKSwgQ09ORklHX0RFVl9ZQU1MKSxcblx0XHRdO1xuXHRcdGlmIChvcHRzLmRhdGFiYXNlID09PSBcInR5cGVvcm1cIikge1xuXHRcdFx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcGlcIiwgXCJzcmNcIiwgXCJlbnRpdGllc1wiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdFx0XHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwaVwiLCBcInNyY1wiLCBcInJlcG9zaXRvcmllc1wiKSwge1xuXHRcdFx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdFx0XHR9KTtcblx0XHRcdHdyaXRlcy5wdXNoKFxuXHRcdFx0XHR3cml0ZUZpbGUoXG5cdFx0XHRcdFx0am9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcGlcIiwgXCJzcmNcIiwgXCJlbnRpdGllc1wiLCBcInNhbXBsZS5lbnRpdHkudHNcIiksXG5cdFx0XHRcdFx0U0FNUExFX0VOVElUWV9UUyxcblx0XHRcdFx0KSxcblx0XHRcdFx0d3JpdGVGaWxlKFxuXHRcdFx0XHRcdGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBpXCIsIFwic3JjXCIsIFwicmVwb3NpdG9yaWVzXCIsIFwic2FtcGxlLnJlcG9zaXRvcnkudHNcIiksXG5cdFx0XHRcdFx0U0FNUExFX1JFUE9TSVRPUllfVFMsXG5cdFx0XHRcdCksXG5cdFx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJjb25maWdcIiwgXCJjb25maWcucHJvZC55YW1sXCIpLCBDT05GSUdfUFJPRF9ZQU1MKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHdyaXRlcyk7XG5cdH0gZWxzZSB7XG5cdFx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwYWNrYWdlLmpzb25cIiksIFJPT1RfUEFDS0FHRV9KU09OKG5hbWUpKSxcblx0XHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJ0c2NvbmZpZy5qc29uXCIpLCBUU0NPTkZJRyksXG5cdFx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJwYWNrYWdlLmpzb25cIiksIEFQUF9QQUNLQUdFX0pTT04obmFtZSkpLFxuXHRcdFx0d3JpdGVGaWxlKGpvaW4odGFyZ2V0RGlyLCBcInByb2plY3RzXCIsIFwiYXBwXCIsIFwic3JjXCIsIFwibWFpbi50c1wiKSwgTUFJTl9UUyksXG5cdFx0XSk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke25hbWV9LiBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcy4uLlxcbmApO1xuXHRsZXQgcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih0YXJnZXREaXIpO1xuXHRpZiAocG0gPT0gbnVsbCkge1xuXHRcdHBtID0gYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKTtcblx0fVxuXHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB0YXJnZXREaXIgfSk7XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhIE5leHQgc3RlcHM6XFxuYCk7XG5cdGlmIChiYXNlbmFtZSh0YXJnZXREaXIpICE9PSB0YXJnZXREaXIpIHtcblx0XHRjb25zb2xlLmxvZyhgICBjZCAke25hbWV9YCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIHBucG0gYnVpbGQgICAgICMgZm9yZ2UgYnVpbGRcIik7XG5cdGNvbnNvbGUubG9nKFwiICBwbnBtIGRldiAgICAgICAjIGZsdXggc2VydmVcXG5cIik7XG59XG4iXSwibmFtZXMiOlsiZXhpc3RzU3luYyIsInJlYWRkaXJTeW5jIiwibWtkaXIiLCJ3cml0ZUZpbGUiLCJiYXNlbmFtZSIsImpvaW4iLCJjcmVhdGVJbnRlcmZhY2UiLCJkZXRlY3RQYWNrYWdlTWFuYWdlciIsInByb21wdEZvclBhY2thZ2VNYW5hZ2VyIiwiQVBQX1BBQ0tBR0VfSlNPTiIsIkNPTkZJR19ERVZfWUFNTCIsIkNPTkZJR19QUk9EX1lBTUwiLCJDT05GSUdfWUFNTCIsIkhFTExPX0NPTlRST0xMRVJfVFMiLCJNQUlOX1RTIiwiUk9PVF9QQUNLQUdFX0pTT04iLCJTQU1QTEVfQ09ORklHX1RTIiwiU0FNUExFX0VOVElUWV9UUyIsIlNBTVBMRV9SRVBPU0lUT1JZX1RTIiwiU0FNUExFX1NFUlZJQ0VfVFMiLCJUU0NPTkZJRyIsIldFQl9BUElfQVBQX1BBQ0tBR0VfSlNPTiIsIldFQl9BUElfTUFJTl9UUyIsIldFQl9BUElfUk9PVF9QQUNLQUdFX0pTT04iLCJXRUJfQVBJX1RTQ09ORklHIiwic2NhZmZvbGQiLCJ0YXJnZXREaXIiLCJvcHRzIiwibmFtZSIsImxlbmd0aCIsInllcyIsInJsIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJvdXRwdXQiLCJzdGRvdXQiLCJhbnN3ZXIiLCJxdWVzdGlvbiIsImNsb3NlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsImNvbnNvbGUiLCJsb2ciLCJleGl0IiwidGVtcGxhdGUiLCJkYk9wdHMiLCJkYXRhYmFzZSIsInVuZGVmaW5lZCIsInJlY3Vyc2l2ZSIsIndyaXRlcyIsInB1c2giLCJQcm9taXNlIiwiYWxsIiwicG0iLCJpbnN0YWxsIiwiY3dkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLEVBQUVDLFdBQVcsUUFBUSxVQUFVO0FBQ2xELFNBQVNDLEtBQUssRUFBRUMsU0FBUyxRQUFRLG1CQUFtQjtBQUNwRCxTQUFTQyxRQUFRLEVBQUVDLElB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
|
package/es6/src/templates.js
CHANGED
|
@@ -14,6 +14,34 @@ export function ROOT_PACKAGE_JSON(name) {
|
|
|
14
14
|
}
|
|
15
15
|
}, null, 2);
|
|
16
16
|
}
|
|
17
|
+
export function WEB_API_ROOT_PACKAGE_JSON(name, opts) {
|
|
18
|
+
const deps = {
|
|
19
|
+
"@decohere/cortex": "0.0.1-dev.15",
|
|
20
|
+
"@decohere/protocol": "0.0.1-dev.15",
|
|
21
|
+
"@decohere/scribe": "0.0.1-dev.15",
|
|
22
|
+
"@decohere/scribe-pino": "0.0.1-dev.15",
|
|
23
|
+
"pino-pretty": "^13.0.0"
|
|
24
|
+
};
|
|
25
|
+
if (opts?.database === "typeorm") {
|
|
26
|
+
deps["@decohere/codex"] = "0.0.1-dev.15";
|
|
27
|
+
deps["@decohere/codex-typeorm"] = "0.0.1-dev.15";
|
|
28
|
+
}
|
|
29
|
+
return JSON.stringify({
|
|
30
|
+
name: `${name}.api`,
|
|
31
|
+
version: "0.0.1",
|
|
32
|
+
type: "module",
|
|
33
|
+
scripts: {
|
|
34
|
+
build: "forge build",
|
|
35
|
+
"build:watch": "forge build --watch",
|
|
36
|
+
dev: "flux serve"
|
|
37
|
+
},
|
|
38
|
+
dependencies: deps,
|
|
39
|
+
devDependencies: {
|
|
40
|
+
"@decohere/terminal": "0.0.1-dev.15",
|
|
41
|
+
typescript: "^6.0.3"
|
|
42
|
+
}
|
|
43
|
+
}, null, 2);
|
|
44
|
+
}
|
|
17
45
|
export function APP_PACKAGE_JSON(name) {
|
|
18
46
|
return JSON.stringify({
|
|
19
47
|
name: `@${name}/app`,
|
|
@@ -36,5 +64,183 @@ export const TSCONFIG = JSON.stringify({
|
|
|
36
64
|
}, null, 2);
|
|
37
65
|
export const MAIN_TS = `console.log("Hello from Decohere!");
|
|
38
66
|
`;
|
|
67
|
+
export const WEB_API_TSCONFIG = JSON.stringify({
|
|
68
|
+
compilerOptions: {
|
|
69
|
+
target: "ES2022",
|
|
70
|
+
module: "NodeNext",
|
|
71
|
+
moduleResolution: "NodeNext",
|
|
72
|
+
strict: true,
|
|
73
|
+
skipLibCheck: true,
|
|
74
|
+
experimentalDecorators: true,
|
|
75
|
+
emitDecoratorMetadata: true
|
|
76
|
+
},
|
|
77
|
+
include: [
|
|
78
|
+
"projects"
|
|
79
|
+
]
|
|
80
|
+
}, null, 2);
|
|
81
|
+
export function WEB_API_APP_PACKAGE_JSON(name) {
|
|
82
|
+
return JSON.stringify({
|
|
83
|
+
name: `@${name}/api`,
|
|
84
|
+
version: "0.0.1",
|
|
85
|
+
type: "module",
|
|
86
|
+
main: "src/main.ts",
|
|
87
|
+
dependencies: {
|
|
88
|
+
"@decohere/cortex": "0.0.1-dev.15",
|
|
89
|
+
"@decohere/crucible": "0.0.1-dev.15"
|
|
90
|
+
}
|
|
91
|
+
}, null, 2);
|
|
92
|
+
}
|
|
93
|
+
export function WEB_API_MAIN_TS(name, opts) {
|
|
94
|
+
const dbImport = opts?.database === "typeorm" ? `import "@decohere/codex-typeorm";
|
|
95
|
+
import { SampleEntity } from "./entities/sample.entity.js";
|
|
96
|
+
import { SampleEntityRepository } from "./repositories/sample.repository.js";
|
|
97
|
+
` : "";
|
|
98
|
+
const dbChain = opts?.database === "typeorm" ? `\n\t.withTypeOrm({ entities: [SampleEntity], repositories: [SampleEntityRepository] })` : "";
|
|
99
|
+
return `import "@decohere/scribe-pino";
|
|
100
|
+
import "@decohere/cortex/http";
|
|
101
|
+
import "@decohere/protocol";
|
|
102
|
+
${dbImport}import { Builder } from "@decohere/cortex";
|
|
103
|
+
import { FastifyProvider } from "@decohere/cortex/providers";
|
|
104
|
+
import { scribe } from "@decohere/scribe";
|
|
105
|
+
import { YamlDataSource } from "@decohere/protocol";
|
|
106
|
+
import { HelloController } from "./controllers/hello.controller.js";
|
|
107
|
+
import { SampleService } from "./sample.service.js";
|
|
108
|
+
|
|
109
|
+
scribe.extend.withPinoPretty();
|
|
110
|
+
|
|
111
|
+
const app = await Builder.create({ applicationName: "${name}.api" })
|
|
112
|
+
\t.withHttpProvider(FastifyProvider)
|
|
113
|
+
\t.withConfiguration(YamlDataSource)
|
|
114
|
+
\t.withServices((cb) => {
|
|
115
|
+
\t\tcb.registerSingleton(SampleService);
|
|
116
|
+
\t})${dbChain}
|
|
117
|
+
\t.withControllers(HelloController)
|
|
118
|
+
\t.build();
|
|
119
|
+
|
|
120
|
+
await app.start({ port: 3000 });
|
|
121
|
+
|
|
122
|
+
export default app;
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
export const HELLO_CONTROLLER_TS = `import { Controller, Delete, Field, Get, Param, Post, Put, Query } from "@decohere/cortex";
|
|
126
|
+
import { SampleService } from "../sample.service.js";
|
|
127
|
+
|
|
128
|
+
class HelloBody {
|
|
129
|
+
@Field("body", "message")
|
|
130
|
+
public message!: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@Controller({ prefix: "/hello" })
|
|
134
|
+
export class HelloController {
|
|
135
|
+
public constructor(private readonly sample: SampleService) {}
|
|
136
|
+
|
|
137
|
+
@Get()
|
|
138
|
+
public async getAll(@Query("filter") filter: string) {
|
|
139
|
+
const greeting = await this.sample.getGreeting();
|
|
140
|
+
return { filter, message: greeting };
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@Get("/:id")
|
|
144
|
+
public getOne(@Param("id") id: string) {
|
|
145
|
+
return { id, message: \`Hello \${id}!\` };
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@Post("/")
|
|
149
|
+
public create(body: HelloBody) {
|
|
150
|
+
return { message: body.message };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@Put("/:id")
|
|
154
|
+
public update(@Param("id") id: string, body: HelloBody) {
|
|
155
|
+
return { id, message: body.message };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@Delete("/:id")
|
|
159
|
+
public remove(@Param("id") id: string) {
|
|
160
|
+
return { id, deleted: true };
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
`;
|
|
164
|
+
export const SAMPLE_CONFIG_TS = `export class SampleConfig {
|
|
165
|
+
public greeting: string = "";
|
|
166
|
+
}
|
|
167
|
+
`;
|
|
168
|
+
export const SAMPLE_SERVICE_TS = `import { inject, injectable } from "@decohere/crucible/decorators";
|
|
169
|
+
import { ConfigurationServiceToken } from "@decohere/nexus/configuration";
|
|
170
|
+
import type { IConfigurationService } from "@decohere/nexus/configuration";
|
|
171
|
+
import { SampleConfig } from "./sample.config.js";
|
|
172
|
+
|
|
173
|
+
@injectable()
|
|
174
|
+
export class SampleService {
|
|
175
|
+
public constructor(
|
|
176
|
+
@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,
|
|
177
|
+
) {}
|
|
178
|
+
|
|
179
|
+
public async getGreeting(): Promise<string> {
|
|
180
|
+
const config = await this.config.get(SampleConfig);
|
|
181
|
+
return config.greeting;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
`;
|
|
185
|
+
export function CONFIG_YAML(name, opts) {
|
|
186
|
+
const dbSection = opts?.database === "typeorm" ? `database:
|
|
187
|
+
dataSources:
|
|
188
|
+
- name: default
|
|
189
|
+
provider: postgres
|
|
190
|
+
host: localhost
|
|
191
|
+
port: 5432
|
|
192
|
+
database: ${name}_dev
|
|
193
|
+
username: postgres
|
|
194
|
+
password: postgres
|
|
195
|
+
synchronize: true
|
|
196
|
+
seed: false
|
|
197
|
+
adminUser: postgres
|
|
198
|
+
adminPassword: postgres
|
|
199
|
+
` : "";
|
|
200
|
+
return `sample:
|
|
201
|
+
greeting: Hello from configuration!
|
|
202
|
+
${dbSection}`;
|
|
203
|
+
}
|
|
204
|
+
export const CONFIG_DEV_YAML = `sample:
|
|
205
|
+
greeting: Hello from dev configuration!
|
|
206
|
+
`;
|
|
207
|
+
export const CONFIG_PROD_YAML = `database:
|
|
208
|
+
dataSources:
|
|
209
|
+
- name: default
|
|
210
|
+
provider: postgres
|
|
211
|
+
host: \${DB_HOST}
|
|
212
|
+
port: \${DB_PORT}
|
|
213
|
+
database: \${DB_NAME}
|
|
214
|
+
username: \${DB_USER}
|
|
215
|
+
password: \${DB_PASSWORD}
|
|
216
|
+
synchronize: false
|
|
217
|
+
seed: false
|
|
218
|
+
adminUser: \${DB_ADMIN_USER}
|
|
219
|
+
adminPassword: \${DB_ADMIN_PASSWORD}
|
|
220
|
+
`;
|
|
221
|
+
export const SAMPLE_ENTITY_TS = `import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
|
222
|
+
import type { Entity as IEntity } from "@decohere/codex";
|
|
223
|
+
|
|
224
|
+
@Entity()
|
|
225
|
+
export class SampleEntity implements IEntity {
|
|
226
|
+
\t@PrimaryGeneratedColumn()
|
|
227
|
+
\tpublic id!: number;
|
|
228
|
+
|
|
229
|
+
\t@Column()
|
|
230
|
+
\tpublic name!: string;
|
|
231
|
+
}
|
|
232
|
+
`;
|
|
233
|
+
export const SAMPLE_REPOSITORY_TS = `import { injectable } from "@decohere/crucible/decorators";
|
|
234
|
+
import { injectUnitOfWork } from "@decohere/codex";
|
|
235
|
+
import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/codex-typeorm";
|
|
236
|
+
import { SampleEntity } from "../entities/sample.entity.js";
|
|
237
|
+
|
|
238
|
+
@injectable()
|
|
239
|
+
export class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {
|
|
240
|
+
\tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {
|
|
241
|
+
\t\tsuper(unitOfWork, SampleEntity);
|
|
242
|
+
\t}
|
|
243
|
+
}
|
|
244
|
+
`;
|
|
39
245
|
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdGVtcGxhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBST09UX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZSxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE0XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQVBQX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYEAke25hbWV9L2FwcGAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0bWFpbjogXCJzcmMvbWFpbi50c1wiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgVFNDT05GSUcgPSBKU09OLnN0cmluZ2lmeShcblx0e1xuXHRcdGNvbXBpbGVyT3B0aW9uczoge1xuXHRcdFx0dGFyZ2V0OiBcIkVTMjAyMlwiLFxuXHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRtb2R1bGVSZXNvbHV0aW9uOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBjb25zdCBNQUlOX1RTID0gYGNvbnNvbGUubG9nKFwiSGVsbG8gZnJvbSBEZWNvaGVyZSFcIik7XG5gO1xuIl0sIm5hbWVzIjpbIlJPT1RfUEFDS0FHRV9KU09OIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2ZXJzaW9uIiwidHlwZSIsInNjcmlwdHMiLCJidWlsZCIsImRldiIsImRldkRlcGVuZGVuY2llcyIsInR5cGVzY3JpcHQiLCJBUFBfUEFDS0FHRV9KU09OIiwibWFpbiIsIlRTQ09ORklHIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImluY2x1ZGUiLCJNQUlOX1RTIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLGtCQUFrQkMsSUFBWTtJQUM3QyxPQUFPQyxLQUFLQyxTQUFTLENBQ3BCO1FBQ0NGO1FBQ0FHLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxTQUFTO1lBQ1JDLE9BQU87WUFDUCxlQUFlO1lBQ2ZDLEtBQUs7UUFDTjtRQUNBQyxpQkFBaUI7WUFDaEIsc0JBQXNCO1lBQ3RCQyxZQUFZO1FBQ2I7SUFDRCxHQUNBLE1BQ0E7QUFFRjtBQUVBLE9BQU8sU0FBU0MsaUJBQWlCVixJQUFZO0lBQzVDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQ0YsTUFBTSxDQUFDLENBQUMsRUFBRUEsS0FBSyxJQUFJLENBQUM7UUFDcEJHLFNBQVM7UUFDVEMsTUFBTTtRQUNOTyxNQUFNO0lBQ1AsR0FDQSxNQUNBO0FBRUY7QUFFQSxPQUFPLE1BQU1DLFdBQVdYLEtBQUtDLFNBQVMsQ0FDckM7SUFDQ1csaUJBQWlCO1FBQ2hCQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsa0JBQWtCO1FBQ2xCQyxRQUFRO1FBQ1JDLGNBQWM7SUFDZjtJQUNBQyxTQUFTO1FBQUM7S0FBVztBQUN0QixHQUNBLE1BQ0EsR0FDQztBQUVGLE9BQU8sTUFBTUMsVUFBVSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdGVtcGxhdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBST09UX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZSxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE0XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhYmFzZVByb3ZpZGVyID0gXCJ0eXBlb3JtXCI7XG5cbmV4cG9ydCB0eXBlIFdlYkFwaU9wdGlvbnMgPSB7XG5cdGRhdGFiYXNlPzogRGF0YWJhc2VQcm92aWRlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX1JPT1RfUEFDS0FHRV9KU09OKG5hbWU6IHN0cmluZywgb3B0cz86IFdlYkFwaU9wdGlvbnMpOiBzdHJpbmcge1xuXHRjb25zdCBkZXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcdFwiQGRlY29oZXJlL2NvcnRleFwiOiBcIjAuMC4xLWRldi4xNVwiLFxuXHRcdFwiQGRlY29oZXJlL3Byb3RvY29sXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XCJAZGVjb2hlcmUvc2NyaWJlXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcInBpbm8tcHJldHR5XCI6IFwiXjEzLjAuMFwiLFxuXHR9O1xuXHRpZiAob3B0cz8uZGF0YWJhc2UgPT09IFwidHlwZW9ybVwiKSB7XG5cdFx0ZGVwc1tcIkBkZWNvaGVyZS9jb2RleFwiXSA9IFwiMC4wLjEtZGV2LjE1XCI7XG5cdFx0ZGVwc1tcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCJdID0gXCIwLjAuMS1kZXYuMTVcIjtcblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYCR7bmFtZX0uYXBpYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRzY3JpcHRzOiB7XG5cdFx0XHRcdGJ1aWxkOiBcImZvcmdlIGJ1aWxkXCIsXG5cdFx0XHRcdFwiYnVpbGQ6d2F0Y2hcIjogXCJmb3JnZSBidWlsZCAtLXdhdGNoXCIsXG5cdFx0XHRcdGRldjogXCJmbHV4IHNlcnZlXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGVwZW5kZW5jaWVzOiBkZXBzLFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IFwiMC4wLjEtZGV2LjE1XCIsXG5cdFx0XHRcdHR5cGVzY3JpcHQ6IFwiXjYuMC4zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQVBQX1BBQ0tBR0VfSlNPTihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYEAke25hbWV9L2FwcGAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0bWFpbjogXCJzcmMvbWFpbi50c1wiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgVFNDT05GSUcgPSBKU09OLnN0cmluZ2lmeShcblx0e1xuXHRcdGNvbXBpbGVyT3B0aW9uczoge1xuXHRcdFx0dGFyZ2V0OiBcIkVTMjAyMlwiLFxuXHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRtb2R1bGVSZXNvbHV0aW9uOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBjb25zdCBNQUlOX1RTID0gYGNvbnNvbGUubG9nKFwiSGVsbG8gZnJvbSBEZWNvaGVyZSFcIik7XG5gO1xuXG5leHBvcnQgY29uc3QgV0VCX0FQSV9UU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHRcdGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG5cdFx0XHRlbWl0RGVjb3JhdG9yTWV0YWRhdGE6IHRydWUsXG5cdFx0fSxcblx0XHRpbmNsdWRlOiBbXCJwcm9qZWN0c1wiXSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuXHRcdHtcblx0XHRcdG5hbWU6IGBAJHtuYW1lfS9hcGlgLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdG1haW46IFwic3JjL21haW4udHNcIixcblx0XHRcdGRlcGVuZGVuY2llczoge1xuXHRcdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcdFx0XCJAZGVjb2hlcmUvY3J1Y2libGVcIjogXCIwLjAuMS1kZXYuMTVcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXRUJfQVBJX01BSU5fVFMobmFtZTogc3RyaW5nLCBvcHRzPzogV2ViQXBpT3B0aW9ucyk6IHN0cmluZyB7XG5cdGNvbnN0IGRiSW1wb3J0ID1cblx0XHRvcHRzPy5kYXRhYmFzZSA9PT0gXCJ0eXBlb3JtXCJcblx0XHRcdD8gYGltcG9ydCBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHkgfSBmcm9tIFwiLi9lbnRpdGllcy9zYW1wbGUuZW50aXR5LmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHlSZXBvc2l0b3J5IH0gZnJvbSBcIi4vcmVwb3NpdG9yaWVzL3NhbXBsZS5yZXBvc2l0b3J5LmpzXCI7XG5gXG5cdFx0XHQ6IFwiXCI7XG5cdGNvbnN0IGRiQ2hhaW4gPVxuXHRcdG9wdHM/LmRhdGFiYXNlID09PSBcInR5cGVvcm1cIlxuXHRcdFx0PyBgXFxuXFx0LndpdGhUeXBlT3JtKHsgZW50aXRpZXM6IFtTYW1wbGVFbnRpdHldLCByZXBvc2l0b3JpZXM6IFtTYW1wbGVFbnRpdHlSZXBvc2l0b3J5XSB9KWBcblx0XHRcdDogXCJcIjtcblx0cmV0dXJuIGBpbXBvcnQgXCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjtcbmltcG9ydCBcIkBkZWNvaGVyZS9jb3J0ZXgvaHR0cFwiO1xuaW1wb3J0IFwiQGRlY29oZXJlL3Byb3RvY29sXCI7XG4ke2RiSW1wb3J0fWltcG9ydCB7IEJ1aWxkZXIgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgRmFzdGlmeVByb3ZpZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXgvcHJvdmlkZXJzXCI7XG5pbXBvcnQgeyBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHsgWWFtbERhdGFTb3VyY2UgfSBmcm9tIFwiQGRlY29oZXJlL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBIZWxsb0NvbnRyb2xsZXIgfSBmcm9tIFwiLi9jb250cm9sbGVycy9oZWxsby5jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2FtcGxlLnNlcnZpY2UuanNcIjtcblxuc2NyaWJlLmV4dGVuZC53aXRoUGlub1ByZXR0eSgpO1xuXG5jb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke25hbWV9LmFwaVwiIH0pXG5cXHQud2l0aEh0dHBQcm92aWRlcihGYXN0aWZ5UHJvdmlkZXIpXG5cXHQud2l0aENvbmZpZ3VyYXRpb24oWWFtbERhdGFTb3VyY2UpXG5cXHQud2l0aFNlcnZpY2VzKChjYikgPT4ge1xuXFx0XFx0Y2IucmVnaXN0ZXJTaW5nbGV0b24oU2FtcGxlU2VydmljZSk7XG5cXHR9KSR7ZGJDaGFpbn1cblxcdC53aXRoQ29udHJvbGxlcnMoSGVsbG9Db250cm9sbGVyKVxuXFx0LmJ1aWxkKCk7XG5cbmF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFwcDtcbmA7XG59XG5cbmV4cG9ydCBjb25zdCBIRUxMT19DT05UUk9MTEVSX1RTID0gYGltcG9ydCB7IENvbnRyb2xsZXIsIERlbGV0ZSwgRmllbGQsIEdldCwgUGFyYW0sIFBvc3QsIFB1dCwgUXVlcnkgfSBmcm9tIFwiQGRlY29oZXJlL2NvcnRleFwiO1xuaW1wb3J0IHsgU2FtcGxlU2VydmljZSB9IGZyb20gXCIuLi9zYW1wbGUuc2VydmljZS5qc1wiO1xuXG5jbGFzcyBIZWxsb0JvZHkge1xuXHRARmllbGQoXCJib2R5XCIsIFwibWVzc2FnZVwiKVxuXHRwdWJsaWMgbWVzc2FnZSE6IHN0cmluZztcbn1cblxuQENvbnRyb2xsZXIoeyBwcmVmaXg6IFwiL2hlbGxvXCIgfSlcbmV4cG9ydCBjbGFzcyBIZWxsb0NvbnRyb2xsZXIge1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzYW1wbGU6IFNhbXBsZVNlcnZpY2UpIHt9XG5cblx0QEdldCgpXG5cdHB1YmxpYyBhc3luYyBnZXRBbGwoQFF1ZXJ5KFwiZmlsdGVyXCIpIGZpbHRlcjogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZ3JlZXRpbmcgPSBhd2FpdCB0aGlzLnNhbXBsZS5nZXRHcmVldGluZygpO1xuXHRcdHJldHVybiB7IGZpbHRlciwgbWVzc2FnZTogZ3JlZXRpbmcgfTtcblx0fVxuXG5cdEBHZXQoXCIvOmlkXCIpXG5cdHB1YmxpYyBnZXRPbmUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuXHRcdHJldHVybiB7IGlkLCBtZXNzYWdlOiBcXGBIZWxsbyBcXCR7aWR9IVxcYCB9O1xuXHR9XG5cblx0QFBvc3QoXCIvXCIpXG5cdHB1YmxpYyBjcmVhdGUoYm9keTogSGVsbG9Cb2R5KSB7XG5cdFx0cmV0dXJuIHsgbWVzc2FnZTogYm9keS5tZXNzYWdlIH07XG5cdH1cblxuXHRAUHV0KFwiLzppZFwiKVxuXHRwdWJsaWMgdXBkYXRlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcsIGJvZHk6IEhlbGxvQm9keSkge1xuXHRcdHJldHVybiB7IGlkLCBtZXNzYWdlOiBib2R5Lm1lc3NhZ2UgfTtcblx0fVxuXG5cdEBEZWxldGUoXCIvOmlkXCIpXG5cdHB1YmxpYyByZW1vdmUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xuXHRcdHJldHVybiB7IGlkLCBkZWxldGVkOiB0cnVlIH07XG5cdH1cbn1cbmA7XG5cbmV4cG9ydCBjb25zdCBTQU1QTEVfQ09ORklHX1RTID0gYGV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWcge1xuXHRwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZyA9IFwiXCI7XG59XG5gO1xuXG5leHBvcnQgY29uc3QgU0FNUExFX1NFUlZJQ0VfVFMgPSBgaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZVRva2VuIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IElDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnIH0gZnJvbSBcIi4vc2FtcGxlLmNvbmZpZy5qc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZSB7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRAaW5qZWN0KENvbmZpZ3VyYXRpb25TZXJ2aWNlVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29uZmlndXJhdGlvblNlcnZpY2UsXG5cdCkge31cblxuXHRwdWJsaWMgYXN5bmMgZ2V0R3JlZXRpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXQoU2FtcGxlQ29uZmlnKTtcblx0XHRyZXR1cm4gY29uZmlnLmdyZWV0aW5nO1xuXHR9XG59XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gQ09ORklHX1lBTUwobmFtZTogc3RyaW5nLCBvcHRzPzogV2ViQXBpT3B0aW9ucyk6IHN0cmluZyB7XG5cdGNvbnN0IGRiU2VjdGlvbiA9XG5cdFx0b3B0cz8uZGF0YWJhc2UgPT09IFwidHlwZW9ybVwiXG5cdFx0XHQ/IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBuYW1lOiBkZWZhdWx0XG4gICAgICBwcm92aWRlcjogcG9zdGdyZXNcbiAgICAgIGhvc3Q6IGxvY2FsaG9zdFxuICAgICAgcG9ydDogNTQzMlxuICAgICAgZGF0YWJhc2U6ICR7bmFtZX1fZGV2XG4gICAgICB1c2VybmFtZTogcG9zdGdyZXNcbiAgICAgIHBhc3N3b3JkOiBwb3N0Z3Jlc1xuICAgICAgc3luY2hyb25pemU6IHRydWVcbiAgICAgIHNlZWQ6IGZhbHNlXG4gICAgICBhZG1pblVzZXI6IHBvc3RncmVzXG4gICAgICBhZG1pblBhc3N3b3JkOiBwb3N0Z3Jlc1xuYFxuXHRcdFx0OiBcIlwiO1xuXHRyZXR1cm4gYHNhbXBsZTpcbiAgZ3JlZXRpbmc6IEhlbGxvIGZyb20gY29uZmlndXJhdGlvbiFcbiR7ZGJTZWN0aW9ufWA7XG59XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfREVWX1lBTUwgPSBgc2FtcGxlOlxuICBncmVldGluZzogSGVsbG8gZnJvbSBkZXYgY29uZmlndXJhdGlvbiFcbmA7XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUFJPRF9ZQU1MID0gYGRhdGFiYXNlOlxuICBkYXRhU291cmNlczpcbiAgICAtIG5hbWU6IGRlZmF1bHRcbiAgICAgIHByb3ZpZGVyOiBwb3N0Z3Jlc1xuICAgICAgaG9zdDogXFwke0RCX0hPU1R9XG4gICAgICBwb3J0OiBcXCR7REJfUE9SVH1cbiAgICAgIGRhdGFiYXNlOiBcXCR7REJfTkFNRX1cbiAgICAgIHVzZXJuYW1lOiBcXCR7REJfVVNFUn1cbiAgICAgIHBhc3N3b3JkOiBcXCR7REJfUEFTU1dPUkR9XG4gICAgICBzeW5jaHJvbml6ZTogZmFsc2VcbiAgICAgIHNlZWQ6IGZhbHNlXG4gICAgICBhZG1pblVzZXI6IFxcJHtEQl9BRE1JTl9VU0VSfVxuICAgICAgYWRtaW5QYXNzd29yZDogXFwke0RCX0FETUlOX1BBU1NXT1JEfVxuYDtcblxuZXhwb3J0IGNvbnN0IFNBTVBMRV9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIG5hbWUhOiBzdHJpbmc7XG59XG5gO1xuXG5leHBvcnQgY29uc3QgU0FNUExFX1JFUE9TSVRPUllfVFMgPSBgaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgaW5qZWN0VW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcbmltcG9ydCB7IFR5cGVPcm1SZXBvc2l0b3J5LCBUeXBlT3JtVW5pdE9mV29yayB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXgtdHlwZW9ybVwiO1xuaW1wb3J0IHsgU2FtcGxlRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3NhbXBsZS5lbnRpdHkuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNhbXBsZUVudGl0eVJlcG9zaXRvcnkgZXh0ZW5kcyBUeXBlT3JtUmVwb3NpdG9yeTxTYW1wbGVFbnRpdHk+IHtcblxcdHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0VW5pdE9mV29yaygpIHVuaXRPZldvcms6IFR5cGVPcm1Vbml0T2ZXb3JrKSB7XG5cXHRcXHRzdXBlcih1bml0T2ZXb3JrLCBTYW1wbGVFbnRpdHkpO1xuXFx0fVxufVxuYDtcbiJdLCJuYW1lcyI6WyJST09UX1BBQ0tBR0VfSlNPTiIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwidmVyc2lvbiIsInR5cGUiLCJzY3JpcHRzIiwiYnVpbGQiLCJkZXYiLCJkZXZEZXBlbmRlbmNpZXMiLCJ0eXBlc2NyaXB0IiwiV0VCX0FQSV9ST09UX1BBQ0tBR0VfSlNPTiIsIm9wdHMiLCJkZXBzIiwiZGF0YWJhc2UiLCJkZXBlbmRlbmNpZXMiLCJBUFBfUEFDS0FHRV9KU09OIiwibWFpbiIsIlRTQ09ORklHIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImluY2x1ZGUiLCJNQUlOX1RTIiwiV0VCX0FQSV9UU0NPTkZJRyIsImV4cGVyaW1lbnRhbERlY29yYXRvcnMiLCJlbWl0RGVjb3JhdG9yTWV0YWRhdGEiLCJXRUJfQVBJX0FQUF9QQUNLQUdFX0pTT04iLCJXRUJfQVBJX01BSU5fVFMiLCJkYkltcG9ydCIsImRiQ2hhaW4iLCJIRUxMT19DT05UUk9MTEVSX1RTIiwiU0FNUExFX0NPTkZJR19UUyIsIlNBTVBMRV9TRVJWSUNFX1RTIiwiQ09ORklHX1lBTUwiLCJkYlNlY3Rpb24iLCJDT05GSUdfREVWX1lBTUwiLCJDT05GSUdfUFJPRF9ZQU1MIiwiU0FNUExFX0VOVElUWV9UUyIsIlNBTVBMRV9SRVBPU0lUT1JZX1RTIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLGtCQUFrQkMsSUFBWTtJQUM3QyxPQUFPQyxLQUFLQyxTQUFTLENBQ3BCO1FBQ0NGO1FBQ0FHLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxTQUFTO1lBQ1JDLE9BQU87WUFDUCxlQUFlO1lBQ2ZDLEtBQUs7UUFDTjtRQUNBQyxpQkFBaUI7WUFDaEIsc0JBQXNCO1lBQ3RCQyxZQUFZO1FBQ2I7SUFDRCxHQUNBLE1BQ0E7QUFFRjtBQVFBLE9BQU8sU0FBU0MsMEJBQTBCVixJQUFZLEVBQUVXLElBQW9CO0lBQzNFLE1BQU1DLE9BQStCO1FBQ3BDLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLHlCQUF5QjtRQUN6QixlQUFlO0lBQ2hCO0lBQ0EsSUFBSUQsTUFBTUUsYUFBYSxX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
|
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.17",
|
|
4
4
|
"description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"decohere",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
+
"@decohere/nexus": "0.0.1-dev.17",
|
|
24
25
|
"commander": "^13.1.0"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {}
|
package/types/src/scaffold.d.ts
CHANGED
package/types/src/templates.d.ts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
export declare function ROOT_PACKAGE_JSON(name: string): string;
|
|
2
|
+
export type DatabaseProvider = "typeorm";
|
|
3
|
+
export type WebApiOptions = {
|
|
4
|
+
database?: DatabaseProvider;
|
|
5
|
+
};
|
|
6
|
+
export declare function WEB_API_ROOT_PACKAGE_JSON(name: string, opts?: WebApiOptions): string;
|
|
2
7
|
export declare function APP_PACKAGE_JSON(name: string): string;
|
|
3
8
|
export declare const TSCONFIG: string;
|
|
4
9
|
export declare const MAIN_TS = "console.log(\"Hello from Decohere!\");\n";
|
|
10
|
+
export declare const WEB_API_TSCONFIG: string;
|
|
11
|
+
export declare function WEB_API_APP_PACKAGE_JSON(name: string): string;
|
|
12
|
+
export declare function WEB_API_MAIN_TS(name: string, opts?: WebApiOptions): string;
|
|
13
|
+
export declare const HELLO_CONTROLLER_TS = "import { Controller, Delete, Field, Get, Param, Post, Put, Query } from \"@decohere/cortex\";\nimport { SampleService } from \"../sample.service.js\";\n\nclass HelloBody {\n\t@Field(\"body\", \"message\")\n\tpublic message!: string;\n}\n\n@Controller({ prefix: \"/hello\" })\nexport class HelloController {\n\tpublic constructor(private readonly sample: SampleService) {}\n\n\t@Get()\n\tpublic async getAll(@Query(\"filter\") filter: string) {\n\t\tconst greeting = await this.sample.getGreeting();\n\t\treturn { filter, message: greeting };\n\t}\n\n\t@Get(\"/:id\")\n\tpublic getOne(@Param(\"id\") id: string) {\n\t\treturn { id, message: `Hello ${id}!` };\n\t}\n\n\t@Post(\"/\")\n\tpublic create(body: HelloBody) {\n\t\treturn { message: body.message };\n\t}\n\n\t@Put(\"/:id\")\n\tpublic update(@Param(\"id\") id: string, body: HelloBody) {\n\t\treturn { id, message: body.message };\n\t}\n\n\t@Delete(\"/:id\")\n\tpublic remove(@Param(\"id\") id: string) {\n\t\treturn { id, deleted: true };\n\t}\n}\n";
|
|
14
|
+
export declare const SAMPLE_CONFIG_TS = "export class SampleConfig {\n\tpublic greeting: string = \"\";\n}\n";
|
|
15
|
+
export declare const SAMPLE_SERVICE_TS = "import { inject, injectable } from \"@decohere/crucible/decorators\";\nimport { ConfigurationServiceToken } from \"@decohere/nexus/configuration\";\nimport type { IConfigurationService } from \"@decohere/nexus/configuration\";\nimport { SampleConfig } from \"./sample.config.js\";\n\n@injectable()\nexport class SampleService {\n\tpublic constructor(\n\t\t@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,\n\t) {}\n\n\tpublic async getGreeting(): Promise<string> {\n\t\tconst config = await this.config.get(SampleConfig);\n\t\treturn config.greeting;\n\t}\n}\n";
|
|
16
|
+
export declare function CONFIG_YAML(name: string, opts?: WebApiOptions): string;
|
|
17
|
+
export declare const CONFIG_DEV_YAML = "sample:\n greeting: Hello from dev configuration!\n";
|
|
18
|
+
export declare const CONFIG_PROD_YAML = "database:\n dataSources:\n - name: default\n provider: postgres\n host: ${DB_HOST}\n port: ${DB_PORT}\n database: ${DB_NAME}\n username: ${DB_USER}\n password: ${DB_PASSWORD}\n synchronize: false\n seed: false\n adminUser: ${DB_ADMIN_USER}\n adminPassword: ${DB_ADMIN_PASSWORD}\n";
|
|
19
|
+
export declare const SAMPLE_ENTITY_TS = "import { Column, Entity, PrimaryGeneratedColumn } from \"typeorm\";\nimport type { Entity as IEntity } from \"@decohere/codex\";\n\n@Entity()\nexport class SampleEntity implements IEntity {\n\t@PrimaryGeneratedColumn()\n\tpublic id!: number;\n\n\t@Column()\n\tpublic name!: string;\n}\n";
|
|
20
|
+
export declare const SAMPLE_REPOSITORY_TS = "import { injectable } from \"@decohere/crucible/decorators\";\nimport { injectUnitOfWork } from \"@decohere/codex\";\nimport { TypeOrmRepository, TypeOrmUnitOfWork } from \"@decohere/codex-typeorm\";\nimport { SampleEntity } from \"../entities/sample.entity.js\";\n\n@injectable()\nexport class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {\n\tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {\n\t\tsuper(unitOfWork, SampleEntity);\n\t}\n}\n";
|