@decohere/create 0.0.1-dev.18 → 0.0.1-dev.19
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 +10 -6
- package/commonjs/src/domain/prompt.js +55 -0
- package/commonjs/src/models/package-json.model.js +2 -2
- package/commonjs/src/runner.js +56 -0
- package/commonjs/src/version.js +32 -0
- package/commonjs/src/webapi/features/auth.feature.js +2 -2
- package/commonjs/src/webapi/features/database.feature.js +3 -3
- package/commonjs/src/webapi/features/finalize.feature.js +11 -6
- package/commonjs/src/webapi/features/postman.feature.js +4 -4
- package/commonjs/src/webapi/models/api-package-json.model.js +2 -2
- package/es6/src/cli.js +10 -6
- package/es6/src/domain/prompt.js +37 -0
- package/es6/src/models/package-json.model.js +2 -2
- package/es6/src/runner.js +55 -0
- package/es6/src/version.js +22 -0
- package/es6/src/webapi/features/auth.feature.js +2 -2
- package/es6/src/webapi/features/database.feature.js +3 -3
- package/es6/src/webapi/features/finalize.feature.js +11 -6
- package/es6/src/webapi/features/postman.feature.js +4 -4
- package/es6/src/webapi/models/api-package-json.model.js +2 -2
- package/package.json +2 -2
- package/types/src/runner.d.ts +13 -0
- package/commonjs/v1/cli.js +0 -15
- package/commonjs/v1/domain/class-model.js +0 -106
- package/commonjs/v1/domain/compose.model.js +0 -74
- package/commonjs/v1/domain/context.js +0 -53
- package/commonjs/v1/domain/devcontainer.model.js +0 -116
- package/commonjs/v1/domain/dockerfile.model.js +0 -62
- package/commonjs/v1/domain/feature.js +0 -19
- package/commonjs/v1/domain/import-map.js +0 -74
- package/commonjs/v1/domain/index.js +0 -68
- package/commonjs/v1/domain/prompt.js +0 -45
- package/commonjs/v1/domain/workflow.js +0 -37
- package/commonjs/v1/features/api-core/feature.js +0 -103
- package/commonjs/v1/features/api-core/hello-controller.model.js +0 -100
- package/commonjs/v1/features/api-core/main-ts.model.js +0 -85
- package/commonjs/v1/features/api-core/scaffold-files.template.js +0 -158
- package/commonjs/v1/features/auth0/auth0-cli.js +0 -151
- package/commonjs/v1/features/auth0/feature.js +0 -187
- package/commonjs/v1/features/auth0/models.js +0 -14
- package/commonjs/v1/features/auth0/prod-config.template.js +0 -19
- package/commonjs/v1/features/cli-core/feature.js +0 -37
- package/commonjs/v1/features/cli-core/scaffold-files.template.js +0 -103
- package/commonjs/v1/features/devcontainer/feature.js +0 -38
- package/commonjs/v1/features/finalize/feature.js +0 -48
- package/commonjs/v1/features/postgresql/feature.js +0 -81
- package/commonjs/v1/features/postgresql/models.js +0 -14
- package/commonjs/v1/features/postman/collection.template.js +0 -80
- package/commonjs/v1/features/postman/environment.template.js +0 -24
- package/commonjs/v1/features/postman/feature.js +0 -192
- package/commonjs/v1/features/typeorm/feature.js +0 -66
- package/commonjs/v1/features/typeorm/scaffold-files.template.js +0 -80
- package/commonjs/v1/scaffold.js +0 -50
- package/commonjs/v1/version.js +0 -32
- package/commonjs/v1/workflows/api.js +0 -29
- package/commonjs/v1/workflows/cli.js +0 -19
- package/es6/v1/cli.js +0 -11
- package/es6/v1/domain/class-model.js +0 -104
- package/es6/v1/domain/compose.model.js +0 -61
- package/es6/v1/domain/context.js +0 -37
- package/es6/v1/domain/devcontainer.model.js +0 -104
- package/es6/v1/domain/dockerfile.model.js +0 -52
- package/es6/v1/domain/feature.js +0 -9
- package/es6/v1/domain/import-map.js +0 -64
- package/es6/v1/domain/index.js +0 -11
- package/es6/v1/domain/prompt.js +0 -27
- package/es6/v1/domain/workflow.js +0 -24
- package/es6/v1/features/api-core/feature.js +0 -93
- package/es6/v1/features/api-core/hello-controller.model.js +0 -96
- package/es6/v1/features/api-core/main-ts.model.js +0 -74
- package/es6/v1/features/api-core/scaffold-files.template.js +0 -116
- package/es6/v1/features/auth0/auth0-cli.js +0 -116
- package/es6/v1/features/auth0/feature.js +0 -136
- package/es6/v1/features/auth0/models.js +0 -4
- package/es6/v1/features/auth0/prod-config.template.js +0 -9
- package/es6/v1/features/cli-core/feature.js +0 -27
- package/es6/v1/features/cli-core/scaffold-files.template.js +0 -73
- package/es6/v1/features/devcontainer/feature.js +0 -28
- package/es6/v1/features/finalize/feature.js +0 -38
- package/es6/v1/features/postgresql/feature.js +0 -71
- package/es6/v1/features/postgresql/models.js +0 -4
- package/es6/v1/features/postman/collection.template.js +0 -70
- package/es6/v1/features/postman/environment.template.js +0 -14
- package/es6/v1/features/postman/feature.js +0 -141
- package/es6/v1/features/typeorm/feature.js +0 -56
- package/es6/v1/features/typeorm/scaffold-files.template.js +0 -56
- package/es6/v1/scaffold.js +0 -40
- package/es6/v1/version.js +0 -22
- package/es6/v1/workflows/api.js +0 -25
- package/es6/v1/workflows/cli.js +0 -9
- package/types/v1/cli.d.ts +0 -2
- package/types/v1/domain/class-model.d.ts +0 -70
- package/types/v1/domain/compose.model.d.ts +0 -25
- package/types/v1/domain/context.d.ts +0 -36
- package/types/v1/domain/devcontainer.model.d.ts +0 -35
- package/types/v1/domain/dockerfile.model.d.ts +0 -11
- package/types/v1/domain/feature.d.ts +0 -29
- package/types/v1/domain/import-map.d.ts +0 -24
- package/types/v1/domain/index.d.ts +0 -12
- package/types/v1/domain/workflow.d.ts +0 -14
- package/types/v1/features/api-core/feature.d.ts +0 -2
- package/types/v1/features/api-core/hello-controller.model.d.ts +0 -9
- package/types/v1/features/api-core/main-ts.model.d.ts +0 -31
- package/types/v1/features/api-core/scaffold-files.template.d.ts +0 -10
- package/types/v1/features/auth0/auth0-cli.d.ts +0 -22
- package/types/v1/features/auth0/feature.d.ts +0 -2
- package/types/v1/features/auth0/models.d.ts +0 -5
- package/types/v1/features/auth0/prod-config.template.d.ts +0 -1
- package/types/v1/features/cli-core/feature.d.ts +0 -2
- package/types/v1/features/cli-core/scaffold-files.template.d.ts +0 -6
- package/types/v1/features/devcontainer/feature.d.ts +0 -2
- package/types/v1/features/finalize/feature.d.ts +0 -2
- package/types/v1/features/postgresql/feature.d.ts +0 -2
- package/types/v1/features/postgresql/models.d.ts +0 -6
- package/types/v1/features/postman/collection.template.d.ts +0 -1
- package/types/v1/features/postman/environment.template.d.ts +0 -6
- package/types/v1/features/postman/feature.d.ts +0 -2
- package/types/v1/features/typeorm/feature.d.ts +0 -2
- package/types/v1/features/typeorm/scaffold-files.template.d.ts +0 -9
- package/types/v1/scaffold.d.ts +0 -3
- package/types/v1/workflows/api.d.ts +0 -8
- package/types/v1/workflows/cli.d.ts +0 -1
- /package/types/{v1 → src}/domain/prompt.d.ts +0 -0
- /package/types/{v1 → src}/version.d.ts +0 -0
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ImportMap } from "../../domain/import-map.js";
|
|
2
|
-
import { modelKey } from "../../domain/index.js";
|
|
3
|
-
/** Key for retrieving the MainTsModel from the FeatureModelStore. */ export const MAIN_TS_KEY = modelKey("main-ts");
|
|
4
|
-
/**
|
|
5
|
-
* Live builder for `projects/api/src/main.ts`.
|
|
6
|
-
*
|
|
7
|
-
* The api-core feature creates an instance in its `configure` phase.
|
|
8
|
-
* Other features (typeorm, auth0, …) call `addImport` / `appendBuilderChain`
|
|
9
|
-
* in their own `configure` phases. The api-core `render` phase calls
|
|
10
|
-
* `addController(model)` for each controller, then `render()`.
|
|
11
|
-
*/ export class MainTsModel {
|
|
12
|
-
_applicationName;
|
|
13
|
-
_imports;
|
|
14
|
-
_builderChain;
|
|
15
|
-
_controllers = [];
|
|
16
|
-
constructor(applicationName){
|
|
17
|
-
this._applicationName = applicationName;
|
|
18
|
-
// Standard framework imports — insertion order matches desired output order.
|
|
19
|
-
this._imports = new ImportMap().add("@decohere/scribe-pino").add("@decohere/cortex/http").add("@decohere/cortex/auth").add("@decohere/protocol").add("@decohere/cortex", "Builder").add("@decohere/cortex/providers", "FastifyProvider").add("@decohere/scribe", "scribe").add("@decohere/protocol", "YamlDataSource").add("./sample.service.js", "SampleService");
|
|
20
|
-
// Standard builder chain — features append; render appends .withControllers + .build.
|
|
21
|
-
this._builderChain = [
|
|
22
|
-
`.withHttpProvider(FastifyProvider)`,
|
|
23
|
-
`.withConfiguration(YamlDataSource)`,
|
|
24
|
-
`.withAuth()`,
|
|
25
|
-
`.withServices((cb) => { cb.registerSingleton(SampleService); })`
|
|
26
|
-
];
|
|
27
|
-
}
|
|
28
|
-
// ── feature API ──────────────────────────────────────────────────────────
|
|
29
|
-
/** Add named value imports (or side-effect when called with no names). */ addImport(pkg, ...names) {
|
|
30
|
-
this._imports.add(pkg, ...names);
|
|
31
|
-
return this;
|
|
32
|
-
}
|
|
33
|
-
/** Add named type-only imports. */ addTypeImport(pkg, ...names) {
|
|
34
|
-
this._imports.addType(pkg, ...names);
|
|
35
|
-
return this;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Append a builder chain call inserted between `.withServices(…)` and
|
|
39
|
-
* `.withControllers(…)`. Pass the call with its leading dot,
|
|
40
|
-
* e.g. `.withTypeOrm({ … })`.
|
|
41
|
-
*/ appendBuilderChain(call) {
|
|
42
|
-
this._builderChain.push(call);
|
|
43
|
-
return this;
|
|
44
|
-
}
|
|
45
|
-
// ── render-phase API ─────────────────────────────────────────────────────
|
|
46
|
-
/** Register a controller; adds its import and queues it for withControllers(). */ addController(model) {
|
|
47
|
-
const importPath = `./controllers/${model.fileName.replace(/\.ts$/, ".js")}`;
|
|
48
|
-
this._imports.add(importPath, model.className);
|
|
49
|
-
this._controllers.push({
|
|
50
|
-
className: model.className,
|
|
51
|
-
importPath
|
|
52
|
-
});
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
// ── rendering ─────────────────────────────────────────────────────────────
|
|
56
|
-
render() {
|
|
57
|
-
const controllersArg = this._controllers.map((c)=>c.className).join(", ");
|
|
58
|
-
const chainCalls = [
|
|
59
|
-
...this._builderChain,
|
|
60
|
-
`.withControllers(${controllersArg})`,
|
|
61
|
-
`.build();`
|
|
62
|
-
].map((call)=>`\t${call}`).join("\n");
|
|
63
|
-
const importSection = this._imports.render().join("\n");
|
|
64
|
-
return `${[
|
|
65
|
-
importSection,
|
|
66
|
-
`scribe.extend.withPinoPretty();`,
|
|
67
|
-
`const app = await Builder.create({ applicationName: "${this._applicationName}" })\n${chainCalls}`,
|
|
68
|
-
`await app.start({ port: 3000 });`,
|
|
69
|
-
`export default app;`
|
|
70
|
-
].join("\n\n")}\n`;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9hcGktY29yZS9tYWluLXRzLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xhc3NNb2RlbCB9IGZyb20gXCIuLi8uLi9kb21haW4vY2xhc3MtbW9kZWwuanNcIjtcbmltcG9ydCB7IEltcG9ydE1hcCB9IGZyb20gXCIuLi8uLi9kb21haW4vaW1wb3J0LW1hcC5qc1wiO1xuaW1wb3J0IHsgbW9kZWxLZXkgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2luZGV4LmpzXCI7XG5cbi8qKiBLZXkgZm9yIHJldHJpZXZpbmcgdGhlIE1haW5Uc01vZGVsIGZyb20gdGhlIEZlYXR1cmVNb2RlbFN0b3JlLiAqL1xuZXhwb3J0IGNvbnN0IE1BSU5fVFNfS0VZID0gbW9kZWxLZXk8TWFpblRzTW9kZWw+KFwibWFpbi10c1wiKTtcblxuLyoqXG4gKiBMaXZlIGJ1aWxkZXIgZm9yIGBwcm9qZWN0cy9hcGkvc3JjL21haW4udHNgLlxuICpcbiAqIFRoZSBhcGktY29yZSBmZWF0dXJlIGNyZWF0ZXMgYW4gaW5zdGFuY2UgaW4gaXRzIGBjb25maWd1cmVgIHBoYXNlLlxuICogT3RoZXIgZmVhdHVyZXMgKHR5cGVvcm0sIGF1dGgwLCDigKYpIGNhbGwgYGFkZEltcG9ydGAgLyBgYXBwZW5kQnVpbGRlckNoYWluYFxuICogaW4gdGhlaXIgb3duIGBjb25maWd1cmVgIHBoYXNlcy4gIFRoZSBhcGktY29yZSBgcmVuZGVyYCBwaGFzZSBjYWxsc1xuICogYGFkZENvbnRyb2xsZXIobW9kZWwpYCBmb3IgZWFjaCBjb250cm9sbGVyLCB0aGVuIGByZW5kZXIoKWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYWluVHNNb2RlbCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uTmFtZTogc3RyaW5nO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9pbXBvcnRzOiBJbXBvcnRNYXA7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2J1aWxkZXJDaGFpbjogc3RyaW5nW107XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xsZXJzOiBBcnJheTx7IGNsYXNzTmFtZTogc3RyaW5nOyBpbXBvcnRQYXRoOiBzdHJpbmcgfT4gPSBbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYXBwbGljYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9hcHBsaWNhdGlvbk5hbWUgPSBhcHBsaWNhdGlvbk5hbWU7XG5cblx0XHQvLyBTdGFuZGFyZCBmcmFtZXdvcmsgaW1wb3J0cyDigJQgaW5zZXJ0aW9uIG9yZGVyIG1hdGNoZXMgZGVzaXJlZCBvdXRwdXQgb3JkZXIuXG5cdFx0dGhpcy5faW1wb3J0cyA9IG5ldyBJbXBvcnRNYXAoKVxuXHRcdFx0LmFkZChcIkBkZWNvaGVyZS9zY3JpYmUtcGlub1wiKVxuXHRcdFx0LmFkZChcIkBkZWNvaGVyZS9jb3J0ZXgvaHR0cFwiKVxuXHRcdFx0LmFkZChcIkBkZWNvaGVyZS9jb3J0ZXgvYXV0aFwiKVxuXHRcdFx0LmFkZChcIkBkZWNvaGVyZS9wcm90b2NvbFwiKVxuXHRcdFx0LmFkZChcIkBkZWNvaGVyZS9jb3J0ZXhcIiwgXCJCdWlsZGVyXCIpXG5cdFx0XHQuYWRkKFwiQGRlY29oZXJlL2NvcnRleC9wcm92aWRlcnNcIiwgXCJGYXN0aWZ5UHJvdmlkZXJcIilcblx0XHRcdC5hZGQoXCJAZGVjb2hlcmUvc2NyaWJlXCIsIFwic2NyaWJlXCIpXG5cdFx0XHQuYWRkKFwiQGRlY29oZXJlL3Byb3RvY29sXCIsIFwiWWFtbERhdGFTb3VyY2VcIilcblx0XHRcdC5hZGQoXCIuL3NhbXBsZS5zZXJ2aWNlLmpzXCIsIFwiU2FtcGxlU2VydmljZVwiKTtcblxuXHRcdC8vIFN0YW5kYXJkIGJ1aWxkZXIgY2hhaW4g4oCUIGZlYXR1cmVzIGFwcGVuZDsgcmVuZGVyIGFwcGVuZHMgLndpdGhDb250cm9sbGVycyArIC5idWlsZC5cblx0XHR0aGlzLl9idWlsZGVyQ2hhaW4gPSBbXG5cdFx0XHRgLndpdGhIdHRwUHJvdmlkZXIoRmFzdGlmeVByb3ZpZGVyKWAsXG5cdFx0XHRgLndpdGhDb25maWd1cmF0aW9uKFlhbWxEYXRhU291cmNlKWAsXG5cdFx0XHRgLndpdGhBdXRoKClgLFxuXHRcdFx0YC53aXRoU2VydmljZXMoKGNiKSA9PiB7IGNiLnJlZ2lzdGVyU2luZ2xldG9uKFNhbXBsZVNlcnZpY2UpOyB9KWAsXG5cdFx0XTtcblx0fVxuXG5cdC8vIOKUgOKUgCBmZWF0dXJlIEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHQvKiogQWRkIG5hbWVkIHZhbHVlIGltcG9ydHMgKG9yIHNpZGUtZWZmZWN0IHdoZW4gY2FsbGVkIHdpdGggbm8gbmFtZXMpLiAqL1xuXHRwdWJsaWMgYWRkSW1wb3J0KHBrZzogc3RyaW5nLCAuLi5uYW1lczogc3RyaW5nW10pOiB0aGlzIHtcblx0XHR0aGlzLl9pbXBvcnRzLmFkZChwa2csIC4uLm5hbWVzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBBZGQgbmFtZWQgdHlwZS1vbmx5IGltcG9ydHMuICovXG5cdHB1YmxpYyBhZGRUeXBlSW1wb3J0KHBrZzogc3RyaW5nLCAuLi5uYW1lczogc3RyaW5nW10pOiB0aGlzIHtcblx0XHR0aGlzLl9pbXBvcnRzLmFkZFR5cGUocGtnLCAuLi5uYW1lcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kIGEgYnVpbGRlciBjaGFpbiBjYWxsIGluc2VydGVkIGJldHdlZW4gYC53aXRoU2VydmljZXMo4oCmKWAgYW5kXG5cdCAqIGAud2l0aENvbnRyb2xsZXJzKOKApilgLiAgUGFzcyB0aGUgY2FsbCB3aXRoIGl0cyBsZWFkaW5nIGRvdCxcblx0ICogZS5nLiBgLndpdGhUeXBlT3JtKHsg4oCmIH0pYC5cblx0ICovXG5cdHB1YmxpYyBhcHBlbmRCdWlsZGVyQ2hhaW4oY2FsbDogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fYnVpbGRlckNoYWluLnB1c2goY2FsbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyDilIDilIAgcmVuZGVyLXBoYXNlIEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHQvKiogUmVnaXN0ZXIgYSBjb250cm9sbGVyOyBhZGRzIGl0cyBpbXBvcnQgYW5kIHF1ZXVlcyBpdCBmb3Igd2l0aENvbnRyb2xsZXJzKCkuICovXG5cdHB1YmxpYyBhZGRDb250cm9sbGVyKG1vZGVsOiBDbGFzc01vZGVsKTogdGhpcyB7XG5cdFx0Y29uc3QgaW1wb3J0UGF0aCA9IGAuL2NvbnRyb2xsZXJzLyR7bW9kZWwuZmlsZU5hbWUucmVwbGFjZSgvXFwudHMkLywgXCIuanNcIil9YDtcblx0XHR0aGlzLl9pbXBvcnRzLmFkZChpbXBvcnRQYXRoLCBtb2RlbC5jbGFzc05hbWUpO1xuXHRcdHRoaXMuX2NvbnRyb2xsZXJzLnB1c2goeyBjbGFzc05hbWU6IG1vZGVsLmNsYXNzTmFtZSwgaW1wb3J0UGF0aCB9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIOKUgOKUgCByZW5kZXJpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHVibGljIHJlbmRlcigpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXJzQXJnID0gdGhpcy5fY29udHJvbGxlcnMubWFwKChjKSA9PiBjLmNsYXNzTmFtZSkuam9pbihcIiwgXCIpO1xuXG5cdFx0Y29uc3QgY2hhaW5DYWxscyA9IFtcblx0XHRcdC4uLnRoaXMuX2J1aWxkZXJDaGFpbixcblx0XHRcdGAud2l0aENvbnRyb2xsZXJzKCR7Y29udHJvbGxlcnNBcmd9KWAsXG5cdFx0XHRgLmJ1aWxkKCk7YCxcblx0XHRdXG5cdFx0XHQubWFwKChjYWxsKSA9PiBgXFx0JHtjYWxsfWApXG5cdFx0XHQuam9pbihcIlxcblwiKTtcblxuXHRcdGNvbnN0IGltcG9ydFNlY3Rpb24gPSB0aGlzLl9pbXBvcnRzLnJlbmRlcigpLmpvaW4oXCJcXG5cIik7XG5cblx0XHRyZXR1cm4gYCR7W1xuXHRcdFx0aW1wb3J0U2VjdGlvbixcblx0XHRcdGBzY3JpYmUuZXh0ZW5kLndpdGhQaW5vUHJldHR5KCk7YCxcblx0XHRcdGBjb25zdCBhcHAgPSBhd2FpdCBCdWlsZGVyLmNyZWF0ZSh7IGFwcGxpY2F0aW9uTmFtZTogXCIke3RoaXMuX2FwcGxpY2F0aW9uTmFtZX1cIiB9KVxcbiR7Y2hhaW5DYWxsc31gLFxuXHRcdFx0YGF3YWl0IGFwcC5zdGFydCh7IHBvcnQ6IDMwMDAgfSk7YCxcblx0XHRcdGBleHBvcnQgZGVmYXVsdCBhcHA7YCxcblx0XHRdLmpvaW4oXCJcXG5cXG5cIil9XFxuYDtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkltcG9ydE1hcCIsIm1vZGVsS2V5IiwiTUFJTl9UU19LRVkiLCJNYWluVHNNb2RlbCIsIl9hcHBsaWNhdGlvbk5hbWUiLCJfaW1wb3J0cyIsIl9idWlsZGVyQ2hhaW4iLCJfY29udHJvbGxlcnMiLCJhcHBsaWNhdGlvbk5hbWUiLCJhZGQiLCJhZGRJbXBvcnQiLCJwa2ciLCJuYW1lcyIsImFkZFR5cGVJbXBvcnQiLCJhZGRUeXBlIiwiYXBwZW5kQnVpbGRlckNoYWluIiwiY2FsbCIsInB1c2giLCJhZGRDb250cm9sbGVyIiwibW9kZWwiLCJpbXBvcnRQYXRoIiwiZmlsZU5hbWUiLCJyZXBsYWNlIiwiY2xhc3NOYW1lIiwicmVuZGVyIiwiY29udHJvbGxlcnNBcmciLCJtYXAiLCJjIiwiam9pbiIsImNoYWluQ2FsbHMiLCJpbXBvcnRTZWN0aW9uIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxTQUFTLFFBQVEsNkJBQTZCO0FBQ3ZELFNBQVNDLFFBQVEsUUFBUSx3QkFBd0I7QUFFakQsbUVBQW1FLEdBQ25FLE9BQU8sTUFBTUMsY0FBY0QsU0FBc0IsV0FBVztBQUU1RDs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxNQUFNRTtJQUNLQyxpQkFBeUI7SUFDekJDLFNBQW9CO0lBQ3BCQyxjQUF3QjtJQUN4QkMsZUFBaUUsRUFBRSxDQUFDO0lBRXJGLFlBQW1CQyxlQUF1QixDQUFFO1FBQzNDLElBQUksQ0FBQ0osZ0JBQWdCLEdBQUdJO1FBRXhCLDZFQUE2RTtRQUM3RSxJQUFJLENBQUNILFFBQVEsR0FBRyxJQUFJTCxZQUNsQlMsR0FBRyxDQUFDLHlCQUNKQSxHQUFHLENBQUMseUJBQ0pBLEdBQUcsQ0FBQyx5QkFDSkEsR0FBRyxDQUFDLHNCQUNKQSxHQUFHLENBQUMsb0JBQW9CLFdBQ3hCQSxHQUFHLENBQUMsOEJBQThCLG1CQUNsQ0EsR0FBRyxDQUFDLG9CQUFvQixVQUN4QkEsR0FBRyxDQUFDLHNCQUFzQixrQkFDMUJBLEdBQUcsQ0FBQyx1QkFBdUI7UUFFN0Isc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQ0gsYUFBYSxHQUFHO1lBQ3BCLENBQUMsa0NBQWtDLENBQUM7WUFDcEMsQ0FBQyxrQ0FBa0MsQ0FBQztZQUNwQyxDQUFDLFdBQVcsQ0FBQztZQUNiLENBQUMsK0RBQStELENBQUM7U0FDakU7SUFDRjtJQUVBLDRFQUE0RTtJQUU1RSx3RUFBd0UsR0FDeEUsQUFBT0ksVUFBVUMsR0FBVyxFQUFFLEdBQUdDLEtBQWUsRUFBUTtRQUN2RCxJQUFJLENBQUNQLFFBQVEsQ0FBQ0ksR0FBRyxDQUFDRSxRQUFRQztRQUMxQixPQUFPLElBQUk7SUFDWjtJQUVBLGlDQUFpQyxHQUNqQyxBQUFPQyxjQUFjRixHQUFXLEVBQUUsR0FBR0MsS0FBZSxFQUFRO1FBQzNELElBQUksQ0FBQ1AsUUFBUSxDQUFDUyxPQUFPLENBQUNILFFBQVFDO1FBQzlCLE9BQU8sSUFBSTtJQUNaO0lBRUE7Ozs7RUFJQyxHQUNELEFBQU9HLG1CQUFtQkMsSUFBWSxFQUFRO1FBQzdDLElBQUksQ0FBQ1YsYUFBYSxDQUFDVyxJQUFJLENBQUNEO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRUEsNEVBQTRFO0lBRTVFLGdGQUFnRixHQUNoRixBQUFPRSxjQUFjQyxLQUFpQixFQUFRO1FBQzdDLE1BQU1DLGFBQWEsQ0FBQyxjQUFjLEVBQUVELE1BQU1FLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsUUFBUTtRQUM1RSxJQUFJLENBQUNqQixRQUFRLENBQUNJLEdBQUcsQ0FBQ1csWUFBWUQsTUFBTUksU0FBUztRQUM3QyxJQUFJLENBQUNoQixZQUFZLENBQUNVLElBQUksQ0FBQztZQUFFTSxXQUFXSixNQUFNSSxTQUFTO1lBQUVIO1FBQVc7UUFDaEUsT0FBTyxJQUFJO0lBQ1o7SUFFQSw2RUFBNkU7SUFFdEVJLFNBQWlCO1FBQ3ZCLE1BQU1DLGlCQUFpQixJQUFJLENBQUNsQixZQUFZLENBQUNtQixHQUFHLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUosU0FBUyxFQUFFSyxJQUFJLENBQUM7UUFFdEUsTUFBTUMsYUFBYTtlQUNmLElBQUksQ0FBQ3ZCLGFBQWE7WUFDckIsQ0FBQyxpQkFBaUIsRUFBRW1CLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsU0FBUyxDQUFDO1NBQ1gsQ0FDQ0MsR0FBRyxDQUFDLENBQUNWLE9BQVMsQ0FBQyxFQUFFLEVBQUVBLE1BQU0sRUFDekJZLElBQUksQ0FBQztRQUVQLE1BQU1FLGdCQUFnQixJQUFJLENBQUN6QixRQUFRLENBQUNtQixNQUFNLEdBQUdJLElBQUksQ0FBQztRQUVsRCxPQUFPLEdBQUc7WUFDVEU7WUFDQSxDQUFDLCtCQUErQixDQUFDO1lBQ2pDLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDMUIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFeUIsWUFBWTtZQUNsRyxDQUFDLGdDQUFnQyxDQUFDO1lBQ2xDLENBQUMsbUJBQW1CLENBQUM7U0FDckIsQ0FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CO0FBQ0QifQ==
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { CREATE_VERSION } from "../../version.js";
|
|
2
|
-
export function rootPackageJson(name) {
|
|
3
|
-
return JSON.stringify({
|
|
4
|
-
name: `${name}.api`,
|
|
5
|
-
version: "0.0.1",
|
|
6
|
-
type: "module",
|
|
7
|
-
scripts: {
|
|
8
|
-
build: "forge build",
|
|
9
|
-
"build:watch": "forge build --watch",
|
|
10
|
-
dev: "flux serve"
|
|
11
|
-
},
|
|
12
|
-
dependencies: {
|
|
13
|
-
"@decohere/cortex": CREATE_VERSION,
|
|
14
|
-
"@decohere/crucible": CREATE_VERSION,
|
|
15
|
-
"@decohere/nexus": CREATE_VERSION,
|
|
16
|
-
"@decohere/protocol": CREATE_VERSION,
|
|
17
|
-
"@decohere/scribe": CREATE_VERSION,
|
|
18
|
-
"@decohere/scribe-pino": CREATE_VERSION,
|
|
19
|
-
"pino-pretty": "^13.0.0"
|
|
20
|
-
},
|
|
21
|
-
devDependencies: {
|
|
22
|
-
"@decohere/terminal": CREATE_VERSION,
|
|
23
|
-
typescript: "^6.0.3"
|
|
24
|
-
}
|
|
25
|
-
}, null, 2);
|
|
26
|
-
}
|
|
27
|
-
export function apiPackageJson(name) {
|
|
28
|
-
return JSON.stringify({
|
|
29
|
-
name: `@${name}/api`,
|
|
30
|
-
version: "0.0.1",
|
|
31
|
-
type: "module",
|
|
32
|
-
main: "src/main.ts",
|
|
33
|
-
dependencies: {
|
|
34
|
-
"@decohere/cortex": CREATE_VERSION,
|
|
35
|
-
"@decohere/crucible": CREATE_VERSION
|
|
36
|
-
}
|
|
37
|
-
}, null, 2);
|
|
38
|
-
}
|
|
39
|
-
export const TSCONFIG = JSON.stringify({
|
|
40
|
-
compilerOptions: {
|
|
41
|
-
target: "ES2022",
|
|
42
|
-
module: "NodeNext",
|
|
43
|
-
moduleResolution: "NodeNext",
|
|
44
|
-
strict: true,
|
|
45
|
-
skipLibCheck: true,
|
|
46
|
-
experimentalDecorators: true,
|
|
47
|
-
emitDecoratorMetadata: true
|
|
48
|
-
}
|
|
49
|
-
}, null, 2);
|
|
50
|
-
export const VSCODE_LAUNCH_JSON = JSON.stringify({
|
|
51
|
-
version: "0.2.0",
|
|
52
|
-
configurations: [
|
|
53
|
-
{
|
|
54
|
-
name: "Build",
|
|
55
|
-
type: "node",
|
|
56
|
-
request: "launch",
|
|
57
|
-
runtimeExecutable: "pnpm",
|
|
58
|
-
runtimeArgs: [
|
|
59
|
-
"build"
|
|
60
|
-
],
|
|
61
|
-
console: "integratedTerminal",
|
|
62
|
-
cwd: `\${workspaceFolder}`
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
name: "Serve / Dev",
|
|
66
|
-
type: "node",
|
|
67
|
-
request: "launch",
|
|
68
|
-
runtimeExecutable: "pnpm",
|
|
69
|
-
runtimeArgs: [
|
|
70
|
-
"dev"
|
|
71
|
-
],
|
|
72
|
-
console: "integratedTerminal",
|
|
73
|
-
cwd: `\${workspaceFolder}`
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
}, null, 2);
|
|
77
|
-
export function vscodeSettingsJson(name) {
|
|
78
|
-
return JSON.stringify({
|
|
79
|
-
"window.title": `${name}\${separator}\${activeEditorShort}`,
|
|
80
|
-
"window.titleSeparator": " | "
|
|
81
|
-
}, null, 2);
|
|
82
|
-
}
|
|
83
|
-
export const GITIGNORE = `node_modules/
|
|
84
|
-
dist/
|
|
85
|
-
.env.local
|
|
86
|
-
.pnpm-store
|
|
87
|
-
`;
|
|
88
|
-
export function configYaml() {
|
|
89
|
-
return `sample:\n greeting: Hello from configuration!\n`;
|
|
90
|
-
}
|
|
91
|
-
export const CONFIG_DEV_YAML = `sample:
|
|
92
|
-
greeting: Hello from dev configuration!
|
|
93
|
-
`;
|
|
94
|
-
export const SAMPLE_CONFIG_TS = `export class SampleConfig {
|
|
95
|
-
\tpublic greeting: string = "";
|
|
96
|
-
}
|
|
97
|
-
`;
|
|
98
|
-
export const SAMPLE_SERVICE_TS = `import { inject, injectable } from "@decohere/crucible/decorators";
|
|
99
|
-
import { ConfigurationServiceToken } from "@decohere/nexus/configuration";
|
|
100
|
-
import type { IConfigurationService } from "@decohere/nexus/configuration";
|
|
101
|
-
import { SampleConfig } from "./sample.config.js";
|
|
102
|
-
|
|
103
|
-
@injectable()
|
|
104
|
-
export class SampleService {
|
|
105
|
-
\tpublic constructor(
|
|
106
|
-
\t\t@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,
|
|
107
|
-
\t) {}
|
|
108
|
-
|
|
109
|
-
\tpublic async getGreeting(): Promise<string> {
|
|
110
|
-
\t\tconst config = await this.config.get(SampleConfig);
|
|
111
|
-
\t\treturn config.greeting;
|
|
112
|
-
\t}
|
|
113
|
-
}
|
|
114
|
-
`;
|
|
115
|
-
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9hcGktY29yZS9zY2FmZm9sZC1maWxlcy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi92ZXJzaW9uLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiByb290UGFja2FnZUpzb24obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuXHRcdHtcblx0XHRcdG5hbWU6IGAke25hbWV9LmFwaWAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0c2NyaXB0czoge1xuXHRcdFx0XHRidWlsZDogXCJmb3JnZSBidWlsZFwiLFxuXHRcdFx0XHRcImJ1aWxkOndhdGNoXCI6IFwiZm9yZ2UgYnVpbGQgLS13YXRjaFwiLFxuXHRcdFx0XHRkZXY6IFwiZmx1eCBzZXJ2ZVwiLFxuXHRcdFx0fSxcblx0XHRcdGRlcGVuZGVuY2llczoge1xuXHRcdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFwiQGRlY29oZXJlL2NydWNpYmxlXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XHRcIkBkZWNvaGVyZS9uZXh1c1wiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFx0XCJAZGVjb2hlcmUvcHJvdG9jb2xcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFwiQGRlY29oZXJlL3NjcmliZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFx0XCJAZGVjb2hlcmUvc2NyaWJlLXBpbm9cIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFwicGluby1wcmV0dHlcIjogXCJeMTMuMC4wXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XHRcdFwiQGRlY29oZXJlL3Rlcm1pbmFsXCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XHR0eXBlc2NyaXB0OiBcIl42LjAuM1wiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdG51bGwsXG5cdFx0Mixcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhY2thZ2VKc29uKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRuYW1lOiBgQCR7bmFtZX0vYXBpYCxcblx0XHRcdHZlcnNpb246IFwiMC4wLjFcIixcblx0XHRcdHR5cGU6IFwibW9kdWxlXCIsXG5cdFx0XHRtYWluOiBcInNyYy9tYWluLnRzXCIsXG5cdFx0XHRkZXBlbmRlbmNpZXM6IHtcblx0XHRcdFx0XCJAZGVjb2hlcmUvY29ydGV4XCI6IENSRUFURV9WRVJTSU9OLFxuXHRcdFx0XHRcIkBkZWNvaGVyZS9jcnVjaWJsZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBjb25zdCBUU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHRcdGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG5cdFx0XHRlbWl0RGVjb3JhdG9yTWV0YWRhdGE6IHRydWUsXG5cdFx0fSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBjb25zdCBWU0NPREVfTEFVTkNIX0pTT04gPSBKU09OLnN0cmluZ2lmeShcblx0e1xuXHRcdHZlcnNpb246IFwiMC4yLjBcIixcblx0XHRjb25maWd1cmF0aW9uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkJ1aWxkXCIsXG5cdFx0XHRcdHR5cGU6IFwibm9kZVwiLFxuXHRcdFx0XHRyZXF1ZXN0OiBcImxhdW5jaFwiLFxuXHRcdFx0XHRydW50aW1lRXhlY3V0YWJsZTogXCJwbnBtXCIsXG5cdFx0XHRcdHJ1bnRpbWVBcmdzOiBbXCJidWlsZFwiXSxcblx0XHRcdFx0Y29uc29sZTogXCJpbnRlZ3JhdGVkVGVybWluYWxcIixcblx0XHRcdFx0Y3dkOiBgXFwke3dvcmtzcGFjZUZvbGRlcn1gLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJTZXJ2ZSAvIERldlwiLFxuXHRcdFx0XHR0eXBlOiBcIm5vZGVcIixcblx0XHRcdFx0cmVxdWVzdDogXCJsYXVuY2hcIixcblx0XHRcdFx0cnVudGltZUV4ZWN1dGFibGU6IFwicG5wbVwiLFxuXHRcdFx0XHRydW50aW1lQXJnczogW1wiZGV2XCJdLFxuXHRcdFx0XHRjb25zb2xlOiBcImludGVncmF0ZWRUZXJtaW5hbFwiLFxuXHRcdFx0XHRjd2Q6IGBcXCR7d29ya3NwYWNlRm9sZGVyfWAsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0sXG5cdG51bGwsXG5cdDIsXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gdnNjb2RlU2V0dGluZ3NKc29uKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRcIndpbmRvdy50aXRsZVwiOiBgJHtuYW1lfVxcJHtzZXBhcmF0b3J9XFwke2FjdGl2ZUVkaXRvclNob3J0fWAsXG5cdFx0XHRcIndpbmRvdy50aXRsZVNlcGFyYXRvclwiOiBcIiB8IFwiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgR0lUSUdOT1JFID0gYG5vZGVfbW9kdWxlcy9cbmRpc3QvXG4uZW52LmxvY2FsXG4ucG5wbS1zdG9yZVxuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ1lhbWwoKTogc3RyaW5nIHtcblx0cmV0dXJuIGBzYW1wbGU6XFxuICBncmVldGluZzogSGVsbG8gZnJvbSBjb25maWd1cmF0aW9uIVxcbmA7XG59XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfREVWX1lBTUwgPSBgc2FtcGxlOlxuICBncmVldGluZzogSGVsbG8gZnJvbSBkZXYgY29uZmlndXJhdGlvbiFcbmA7XG5cbmV4cG9ydCBjb25zdCBTQU1QTEVfQ09ORklHX1RTID0gYGV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWcge1xuXFx0cHVibGljIGdyZWV0aW5nOiBzdHJpbmcgPSBcIlwiO1xufVxuYDtcblxuZXhwb3J0IGNvbnN0IFNBTVBMRV9TRVJWSUNFX1RTID0gYGltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2VUb2tlbiB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZyB9IGZyb20gXCIuL3NhbXBsZS5jb25maWcuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNhbXBsZVNlcnZpY2Uge1xuXFx0cHVibGljIGNvbnN0cnVjdG9yKFxuXFx0XFx0QGluamVjdChDb25maWd1cmF0aW9uU2VydmljZVRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogSUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuXFx0KSB7fVxuXG5cXHRwdWJsaWMgYXN5bmMgZ2V0R3JlZXRpbmcoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxcdFxcdGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldChTYW1wbGVDb25maWcpO1xuXFx0XFx0cmV0dXJuIGNvbmZpZy5ncmVldGluZztcblxcdH1cbn1cbmA7XG4iXSwibmFtZXMiOlsiQ1JFQVRFX1ZFUlNJT04iLCJyb290UGFja2FnZUpzb24iLCJuYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInZlcnNpb24iLCJ0eXBlIiwic2NyaXB0cyIsImJ1aWxkIiwiZGV2IiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwidHlwZXNjcmlwdCIsImFwaVBhY2thZ2VKc29uIiwibWFpbiIsIlRTQ09ORklHIiwiY29tcGlsZXJPcHRpb25zIiwidGFyZ2V0IiwibW9kdWxlIiwibW9kdWxlUmVzb2x1dGlvbiIsInN0cmljdCIsInNraXBMaWJDaGVjayIsImV4cGVyaW1lbnRhbERlY29yYXRvcnMiLCJlbWl0RGVjb3JhdG9yTWV0YWRhdGEiLCJWU0NPREVfTEFVTkNIX0pTT04iLCJjb25maWd1cmF0aW9ucyIsInJlcXVlc3QiLCJydW50aW1lRXhlY3V0YWJsZSIsInJ1bnRpbWVBcmdzIiwiY29uc29sZSIsImN3ZCIsInZzY29kZVNldHRpbmdzSnNvbiIsIkdJVElHTk9SRSIsImNvbmZpZ1lhbWwiLCJDT05GSUdfREVWX1lBTUwiLCJTQU1QTEVfQ09ORklHX1RTIiwiU0FNUExFX1NFUlZJQ0VfVFMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxtQkFBbUI7QUFFbEQsT0FBTyxTQUFTQyxnQkFBZ0JDLElBQVk7SUFDM0MsT0FBT0MsS0FBS0MsU0FBUyxDQUNwQjtRQUNDRixNQUFNLEdBQUdBLEtBQUssSUFBSSxDQUFDO1FBQ25CRyxTQUFTO1FBQ1RDLE1BQU07UUFDTkMsU0FBUztZQUNSQyxPQUFPO1lBQ1AsZUFBZTtZQUNmQyxLQUFLO1FBQ047UUFDQUMsY0FBYztZQUNiLG9CQUFvQlY7WUFDcEIsc0JBQXNCQTtZQUN0QixtQkFBbUJBO1lBQ25CLHNCQUFzQkE7WUFDdEIsb0JBQW9CQTtZQUNwQix5QkFBeUJBO1lBQ3pCLGVBQWU7UUFDaEI7UUFDQVcsaUJBQWlCO1lBQ2hCLHNCQUFzQlg7WUFDdEJZLFlBQVk7UUFDYjtJQUNELEdBQ0EsTUFDQTtBQUVGO0FBRUEsT0FBTyxTQUFTQyxlQUFlWCxJQUFZO0lBQzFDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQ0YsTUFBTSxDQUFDLENBQUMsRUFBRUEsS0FBSyxJQUFJLENBQUM7UUFDcEJHLFNBQVM7UUFDVEMsTUFBTTtRQUNOUSxNQUFNO1FBQ05KLGNBQWM7WUFDYixvQkFBb0JWO1lBQ3BCLHNCQUFzQkE7UUFDdkI7SUFDRCxHQUNBLE1BQ0E7QUFFRjtBQUVBLE9BQU8sTUFBTWUsV0FBV1osS0FBS0MsU0FBUyxDQUNyQztJQUNDWSxpQkFBaUI7UUFDaEJDLFFBQVE7UUFDUkMsUUFBUTtRQUNSQyxrQkFBa0I7UUFDbEJDLFFBQVE7UUFDUkMsY0FBYztRQUNkQyx3QkFBd0I7UUFDeEJDLHVCQUF1QjtJQUN4QjtBQUNELEdBQ0EsTUFDQSxHQUNDO0FBRUYsT0FBTyxNQUFNQyxxQkFBcUJyQixLQUFLQyxTQUFTLENBQy9DO0lBQ0NDLFNBQVM7SUFDVG9CLGdCQUFnQjtRQUNmO1lBQ0N2QixNQUFNO1lBQ05JLE1BQU07WUFDTm9CLFNBQVM7WUFDVEMsbUJBQW1CO1lBQ25CQyxhQUFhO2dCQUFDO2FBQVE7WUFDdEJDLFNBQVM7WUFDVEMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO1FBQzNCO1FBQ0E7WUFDQzVCLE1BQU07WUFDTkksTUFBTTtZQUNOb0IsU0FBUztZQUNUQyxtQkFBbUI7WUFDbkJDLGFBQWE7Z0JBQUM7YUFBTTtZQUNwQkMsU0FBUztZQUNUQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDM0I7S0FDQTtBQUNGLEdBQ0EsTUFDQSxHQUNDO0FBRUYsT0FBTyxTQUFTQyxtQkFBbUI3QixJQUFZO0lBQzlDLE9BQU9DLEtBQUtDLFNBQVMsQ0FDcEI7UUFDQyxnQkFBZ0IsR0FBR0YsS0FBSyxrQ0FBa0MsQ0FBQztRQUMzRCx5QkFBeUI7SUFDMUIsR0FDQSxNQUNBO0FBRUY7QUFFQSxPQUFPLE1BQU04QixZQUFZLENBQUM7Ozs7QUFJMUIsQ0FBQyxDQUFDO0FBRUYsT0FBTyxTQUFTQztJQUNmLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztBQUMxRDtBQUVBLE9BQU8sTUFBTUMsa0JBQWtCLENBQUM7O0FBRWhDLENBQUMsQ0FBQztBQUVGLE9BQU8sTUFBTUMsbUJBQW1CLENBQUM7OztBQUdqQyxDQUFDLENBQUM7QUFFRixPQUFPLE1BQU1DLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JsQyxDQUFDLENBQUMifQ==
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { execFileSync, spawnSync } from "node:child_process";
|
|
2
|
-
const REQUIRED_SCOPES = "create:clients";
|
|
3
|
-
/** Hard timeout for any Management API call. Prevents indefinite hangs on token re-auth. */ const API_TIMEOUT_MS = 8_000;
|
|
4
|
-
export class Auth0AuthError extends Error {
|
|
5
|
-
constructor(message){
|
|
6
|
-
super(message);
|
|
7
|
-
this.name = "Auth0AuthError";
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
/** Returns true if an error or stderr output looks like an expired/missing token. */ function isAuthError(text) {
|
|
11
|
-
return text.includes("renew access token") || text.includes("log in") || text.includes("Unauthorized");
|
|
12
|
-
}
|
|
13
|
-
/** Run an auth0 CLI command with a hard timeout. Returns stdout on success, throws on failure. */ function runAuth0(args) {
|
|
14
|
-
const result = spawnSync("auth0", args, {
|
|
15
|
-
encoding: "utf8",
|
|
16
|
-
timeout: API_TIMEOUT_MS,
|
|
17
|
-
input: "",
|
|
18
|
-
stdio: "pipe"
|
|
19
|
-
});
|
|
20
|
-
if (result.error) {
|
|
21
|
-
// ETIMEDOUT means the process was killed by the timeout
|
|
22
|
-
const msg = result.error.message;
|
|
23
|
-
if (isAuthError(msg) || result.error.code === "ETIMEDOUT") {
|
|
24
|
-
throw new Auth0AuthError(msg);
|
|
25
|
-
}
|
|
26
|
-
throw result.error;
|
|
27
|
-
}
|
|
28
|
-
if (result.status !== 0) {
|
|
29
|
-
const stderr = result.stderr ?? "";
|
|
30
|
-
if (isAuthError(stderr)) throw new Auth0AuthError(stderr);
|
|
31
|
-
throw new Error(stderr || `auth0 exited with code ${result.status}`);
|
|
32
|
-
}
|
|
33
|
-
return result.stdout;
|
|
34
|
-
}
|
|
35
|
-
export function isInstalled() {
|
|
36
|
-
try {
|
|
37
|
-
execFileSync("auth0", [
|
|
38
|
-
"--version"
|
|
39
|
-
], {
|
|
40
|
-
stdio: "pipe"
|
|
41
|
-
});
|
|
42
|
-
return true;
|
|
43
|
-
} catch {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
export function listTenants() {
|
|
48
|
-
try {
|
|
49
|
-
const out = execFileSync("auth0", [
|
|
50
|
-
"tenants",
|
|
51
|
-
"list",
|
|
52
|
-
"--json"
|
|
53
|
-
], {
|
|
54
|
-
encoding: "utf8",
|
|
55
|
-
stdio: "pipe"
|
|
56
|
-
});
|
|
57
|
-
return JSON.parse(out);
|
|
58
|
-
} catch {
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export function login() {
|
|
63
|
-
const result = spawnSync("auth0", [
|
|
64
|
-
"login",
|
|
65
|
-
"--scopes",
|
|
66
|
-
REQUIRED_SCOPES
|
|
67
|
-
], {
|
|
68
|
-
stdio: "inherit"
|
|
69
|
-
});
|
|
70
|
-
return result.status === 0;
|
|
71
|
-
}
|
|
72
|
-
export function listApis() {
|
|
73
|
-
try {
|
|
74
|
-
const out = runAuth0([
|
|
75
|
-
"apis",
|
|
76
|
-
"list",
|
|
77
|
-
"--json",
|
|
78
|
-
"--no-input"
|
|
79
|
-
]);
|
|
80
|
-
return JSON.parse(out);
|
|
81
|
-
} catch (err) {
|
|
82
|
-
if (err instanceof Auth0AuthError) throw err;
|
|
83
|
-
return [];
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
export function createApi(name, identifier) {
|
|
87
|
-
const out = runAuth0([
|
|
88
|
-
"apis",
|
|
89
|
-
"create",
|
|
90
|
-
"--name",
|
|
91
|
-
name,
|
|
92
|
-
"--identifier",
|
|
93
|
-
identifier,
|
|
94
|
-
"--json",
|
|
95
|
-
"--no-input"
|
|
96
|
-
]);
|
|
97
|
-
return JSON.parse(out);
|
|
98
|
-
}
|
|
99
|
-
export function createSpaApp(name, callbackUrl) {
|
|
100
|
-
const out = runAuth0([
|
|
101
|
-
"apps",
|
|
102
|
-
"create",
|
|
103
|
-
"--name",
|
|
104
|
-
name,
|
|
105
|
-
"--type",
|
|
106
|
-
"spa",
|
|
107
|
-
"--callbacks",
|
|
108
|
-
callbackUrl,
|
|
109
|
-
"--json",
|
|
110
|
-
"--no-input"
|
|
111
|
-
]);
|
|
112
|
-
return JSON.parse(out);
|
|
113
|
-
}
|
|
114
|
-
export { REQUIRED_SCOPES };
|
|
115
|
-
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9hdXRoMC9hdXRoMC1jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY0ZpbGVTeW5jLCBzcGF3blN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5cbmNvbnN0IFJFUVVJUkVEX1NDT1BFUyA9IFwiY3JlYXRlOmNsaWVudHNcIjtcbi8qKiBIYXJkIHRpbWVvdXQgZm9yIGFueSBNYW5hZ2VtZW50IEFQSSBjYWxsLiBQcmV2ZW50cyBpbmRlZmluaXRlIGhhbmdzIG9uIHRva2VuIHJlLWF1dGguICovXG5jb25zdCBBUElfVElNRU9VVF9NUyA9IDhfMDAwO1xuXG5leHBvcnQgY2xhc3MgQXV0aDBBdXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkF1dGgwQXV0aEVycm9yXCI7XG5cdH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciBvciBzdGRlcnIgb3V0cHV0IGxvb2tzIGxpa2UgYW4gZXhwaXJlZC9taXNzaW5nIHRva2VuLiAqL1xuZnVuY3Rpb24gaXNBdXRoRXJyb3IodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0dGV4dC5pbmNsdWRlcyhcInJlbmV3IGFjY2VzcyB0b2tlblwiKSB8fFxuXHRcdHRleHQuaW5jbHVkZXMoXCJsb2cgaW5cIikgfHxcblx0XHR0ZXh0LmluY2x1ZGVzKFwiVW5hdXRob3JpemVkXCIpXG5cdCk7XG59XG5cbi8qKiBSdW4gYW4gYXV0aDAgQ0xJIGNvbW1hbmQgd2l0aCBhIGhhcmQgdGltZW91dC4gUmV0dXJucyBzdGRvdXQgb24gc3VjY2VzcywgdGhyb3dzIG9uIGZhaWx1cmUuICovXG5mdW5jdGlvbiBydW5BdXRoMChhcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcImF1dGgwXCIsIGFyZ3MsIHtcblx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0dGltZW91dDogQVBJX1RJTUVPVVRfTVMsXG5cdFx0aW5wdXQ6IFwiXCIsXG5cdFx0c3RkaW86IFwicGlwZVwiLFxuXHR9KTtcblxuXHRpZiAocmVzdWx0LmVycm9yKSB7XG5cdFx0Ly8gRVRJTUVET1VUIG1lYW5zIHRoZSBwcm9jZXNzIHdhcyBraWxsZWQgYnkgdGhlIHRpbWVvdXRcblx0XHRjb25zdCBtc2cgPSByZXN1bHQuZXJyb3IubWVzc2FnZTtcblx0XHRpZiAoaXNBdXRoRXJyb3IobXNnKSB8fCAocmVzdWx0LmVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gXCJFVElNRURPVVRcIikge1xuXHRcdFx0dGhyb3cgbmV3IEF1dGgwQXV0aEVycm9yKG1zZyk7XG5cdFx0fVxuXHRcdHRocm93IHJlc3VsdC5lcnJvcjtcblx0fVxuXG5cdGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG5cdFx0Y29uc3Qgc3RkZXJyID0gcmVzdWx0LnN0ZGVyciA/PyBcIlwiO1xuXHRcdGlmIChpc0F1dGhFcnJvcihzdGRlcnIpKSB0aHJvdyBuZXcgQXV0aDBBdXRoRXJyb3Ioc3RkZXJyKTtcblx0XHR0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IGBhdXRoMCBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQuc3Rkb3V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGgwVGVuYW50IHtcblx0bmFtZTogc3RyaW5nO1xuXHRhY3RpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YWxsZWQoKTogYm9vbGVhbiB7XG5cdHRyeSB7XG5cdFx0ZXhlY0ZpbGVTeW5jKFwiYXV0aDBcIiwgW1wiLS12ZXJzaW9uXCJdLCB7IHN0ZGlvOiBcInBpcGVcIiB9KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0VGVuYW50cygpOiBBdXRoMFRlbmFudFtdIHtcblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBleGVjRmlsZVN5bmMoXCJhdXRoMFwiLCBbXCJ0ZW5hbnRzXCIsIFwibGlzdFwiLCBcIi0tanNvblwiXSwge1xuXHRcdFx0ZW5jb2Rpbmc6IFwidXRmOFwiLFxuXHRcdFx0c3RkaW86IFwicGlwZVwiLFxuXHRcdH0pO1xuXHRcdHJldHVybiBKU09OLnBhcnNlKG91dCkgYXMgQXV0aDBUZW5hbnRbXTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpbigpOiBib29sZWFuIHtcblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKFwiYXV0aDBcIiwgW1wibG9naW5cIiwgXCItLXNjb3Blc1wiLCBSRVFVSVJFRF9TQ09QRVNdLCB7XG5cdFx0c3RkaW86IFwiaW5oZXJpdFwiLFxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdC5zdGF0dXMgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXBpcygpOiBBcnJheTx7IGlkZW50aWZpZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBydW5BdXRoMChbXCJhcGlzXCIsIFwibGlzdFwiLCBcIi0tanNvblwiLCBcIi0tbm8taW5wdXRcIl0pO1xuXHRcdHJldHVybiBKU09OLnBhcnNlKG91dCkgYXMgQXJyYXk8eyBpZGVudGlmaWVyOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pjtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIEF1dGgwQXV0aEVycm9yKSB0aHJvdyBlcnI7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcGkobmFtZTogc3RyaW5nLCBpZGVudGlmaWVyOiBzdHJpbmcpOiB7IGlkZW50aWZpZXI6IHN0cmluZyB9IHtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS1pZGVudGlmaWVyXCIsXG5cdFx0aWRlbnRpZmllcixcblx0XHRcIi0tanNvblwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0cmV0dXJuIEpTT04ucGFyc2Uob3V0KSBhcyB7IGlkZW50aWZpZXI6IHN0cmluZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3BhQXBwKG5hbWU6IHN0cmluZywgY2FsbGJhY2tVcmw6IHN0cmluZyk6IHsgY2xpZW50X2lkOiBzdHJpbmcgfSB7XG5cdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwcHNcIixcblx0XHRcImNyZWF0ZVwiLFxuXHRcdFwiLS1uYW1lXCIsXG5cdFx0bmFtZSxcblx0XHRcIi0tdHlwZVwiLFxuXHRcdFwic3BhXCIsXG5cdFx0XCItLWNhbGxiYWNrc1wiLFxuXHRcdGNhbGxiYWNrVXJsLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRyZXR1cm4gSlNPTi5wYXJzZShvdXQpIGFzIHsgY2xpZW50X2lkOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IHsgUkVRVUlSRURfU0NPUEVTIH07XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwiUkVRVUlSRURfU0NPUEVTIiwiQVBJX1RJTUVPVVRfTVMiLCJBdXRoMEF1dGhFcnJvciIsIkVycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJpc0F1dGhFcnJvciIsInRleHQiLCJpbmNsdWRlcyIsInJ1bkF1dGgwIiwiYXJncyIsInJlc3VsdCIsImVuY29kaW5nIiwidGltZW91dCIsImlucHV0Iiwic3RkaW8iLCJlcnJvciIsIm1zZyIsImNvZGUiLCJzdGF0dXMiLCJzdGRlcnIiLCJzdGRvdXQiLCJpc0luc3RhbGxlZCIsImxpc3RUZW5hbnRzIiwib3V0IiwiSlNPTiIsInBhcnNlIiwibG9naW4iLCJsaXN0QXBpcyIsImVyciIsImNyZWF0ZUFwaSIsImlkZW50aWZpZXIiLCJjcmVhdGVTcGFBcHAiLCJjYWxsYmFja1VybCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxFQUFFQyxTQUFTLFFBQVEscUJBQXFCO0FBRTdELE1BQU1DLGtCQUFrQjtBQUN4QiwwRkFBMEYsR0FDMUYsTUFBTUMsaUJBQWlCO0FBRXZCLE9BQU8sTUFBTUMsdUJBQXVCQztJQUNuQyxZQUFtQkMsT0FBZSxDQUFFO1FBQ25DLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLElBQUksR0FBRztJQUNiO0FBQ0Q7QUFFQSxtRkFBbUYsR0FDbkYsU0FBU0MsWUFBWUMsSUFBWTtJQUNoQyxPQUNDQSxLQUFLQyxRQUFRLENBQUMseUJBQ2RELEtBQUtDLFFBQVEsQ0FBQyxhQUNkRCxLQUFLQyxRQUFRLENBQUM7QUFFaEI7QUFFQSxnR0FBZ0csR0FDaEcsU0FBU0MsU0FBU0MsSUFBYztJQUMvQixNQUFNQyxTQUFTWixVQUFVLFNBQVNXLE1BQU07UUFDdkNFLFVBQVU7UUFDVkMsU0FBU1o7UUFDVGEsT0FBTztRQUNQQyxPQUFPO0lBQ1I7SUFFQSxJQUFJSixPQUFPSyxLQUFLLEVBQUU7UUFDakIsd0RBQXdEO1FBQ3hELE1BQU1DLE1BQU1OLE9BQU9LLEtBQUssQ0FBQ1osT0FBTztRQUNoQyxJQUFJRSxZQUFZVyxRQUFRLEFBQUNOLE9BQU9LLEtBQUssQ0FBMkJFLElBQUksS0FBSyxhQUFhO1lBQ3JGLE1BQU0sSUFBSWhCLGVBQWVlO1FBQzFCO1FBQ0EsTUFBTU4sT0FBT0ssS0FBSztJQUNuQjtJQUVBLElBQUlMLE9BQU9RLE1BQU0sS0FBSyxHQUFHO1FBQ3hCLE1BQU1DLFNBQVNULE9BQU9TLE1BQU0sSUFBSTtRQUNoQyxJQUFJZCxZQUFZYyxTQUFTLE1BQU0sSUFBSWxCLGVBQWVrQjtRQUNsRCxNQUFNLElBQUlqQixNQUFNaUIsVUFBVSxDQUFDLHVCQUF1QixFQUFFVCxPQUFPUSxNQUFNLEVBQUU7SUFDcEU7SUFFQSxPQUFPUixPQUFPVSxNQUFNO0FBQ3JCO0FBT0EsT0FBTyxTQUFTQztJQUNmLElBQUk7UUFDSHhCLGFBQWEsU0FBUztZQUFDO1NBQVksRUFBRTtZQUFFaUIsT0FBTztRQUFPO1FBQ3JELE9BQU87SUFDUixFQUFFLE9BQU07UUFDUCxPQUFPO0lBQ1I7QUFDRDtBQUVBLE9BQU8sU0FBU1E7SUFDZixJQUFJO1FBQ0gsTUFBTUMsTUFBTTFCLGFBQWEsU0FBUztZQUFDO1lBQVc7WUFBUTtTQUFTLEVBQUU7WUFDaEVjLFVBQVU7WUFDVkcsT0FBTztRQUNSO1FBQ0EsT0FBT1UsS0FBS0MsS0FBSyxDQUFDRjtJQUNuQixFQUFFLE9BQU07UUFDUCxPQUFPLEVBQUU7SUFDVjtBQUNEO0FBRUEsT0FBTyxTQUFTRztJQUNmLE1BQU1oQixTQUFTWixVQUFVLFNBQVM7UUFBQztRQUFTO1FBQVlDO0tBQWdCLEVBQUU7UUFDekVlLE9BQU87SUFDUjtJQUNBLE9BQU9KLE9BQU9RLE1BQU0sS0FBSztBQUMxQjtBQUVBLE9BQU8sU0FBU1M7SUFDZixJQUFJO1FBQ0gsTUFBTUosTUFBTWYsU0FBUztZQUFDO1lBQVE7WUFBUTtZQUFVO1NBQWE7UUFDN0QsT0FBT2dCLEtBQUtDLEtBQUssQ0FBQ0Y7SUFDbkIsRUFBRSxPQUFPSyxLQUFLO1FBQ2IsSUFBSUEsZUFBZTNCLGdCQUFnQixNQUFNMkI7UUFDekMsT0FBTyxFQUFFO0lBQ1Y7QUFDRDtBQUVBLE9BQU8sU0FBU0MsVUFBVXpCLElBQVksRUFBRTBCLFVBQWtCO0lBQ3pELE1BQU1QLE1BQU1mLFNBQVM7UUFDcEI7UUFDQTtRQUNBO1FBQ0FKO1FBQ0E7UUFDQTBCO1FBQ0E7UUFDQTtLQUNBO0lBQ0QsT0FBT04sS0FBS0MsS0FBSyxDQUFDRjtBQUNuQjtBQUVBLE9BQU8sU0FBU1EsYUFBYTNCLElBQVksRUFBRTRCLFdBQW1CO0lBQzdELE1BQU1ULE1BQU1mLFNBQVM7UUFDcEI7UUFDQTtRQUNBO1FBQ0FKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E0QjtRQUNBO1FBQ0E7S0FDQTtJQUNELE9BQU9SLEtBQUtDLEtBQUssQ0FBQ0Y7QUFDbkI7QUFFQSxTQUFTeEIsZUFBZSxHQUFHIn0=
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { ask, pick } from "../../domain/index.js";
|
|
4
|
-
import * as auth0 from "./auth0-cli.js";
|
|
5
|
-
import { AUTH0_CONFIG_KEY } from "./models.js";
|
|
6
|
-
import { auth0ConfigYaml } from "./prod-config.template.js";
|
|
7
|
-
const enabled = (ctx)=>ctx.opts.idp === "auth0";
|
|
8
|
-
/**
|
|
9
|
-
* Resolve phase: drive the auth0 CLI to authenticate the user and gather an
|
|
10
|
-
* issuer + audience pair. Stored under AUTH0_CONFIG_KEY for downstream
|
|
11
|
-
* features (render, postman integrate).
|
|
12
|
-
*
|
|
13
|
-
* Skipped under --yes (non-interactive).
|
|
14
|
-
*/ async function resolve(ctx) {
|
|
15
|
-
if (ctx.opts.yes) return ctx;
|
|
16
|
-
if (!auth0.isInstalled()) {
|
|
17
|
-
console.error("\n The Auth0 CLI is required for automated setup.\n" + " Install: brew install auth0/auth0-cli/auth0\n" + " Or visit: https://github.com/auth0/auth0-cli\n");
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
// Ensure both the regular and Management API tokens are valid before prompting.
|
|
21
|
-
process.stdout.write("\n Checking Auth0 credentials...");
|
|
22
|
-
let tenants = auth0.listTenants();
|
|
23
|
-
if (tenants.length === 0) {
|
|
24
|
-
process.stdout.write(" not logged in.\n");
|
|
25
|
-
console.log(" Logging in to Auth0 (your browser will open)...");
|
|
26
|
-
if (!auth0.login()) {
|
|
27
|
-
console.error("\n Auth0 login failed.");
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
tenants = auth0.listTenants();
|
|
31
|
-
}
|
|
32
|
-
try {
|
|
33
|
-
auth0.listApis(); // probes the Management API token
|
|
34
|
-
process.stdout.write(" ok.\n");
|
|
35
|
-
} catch (err) {
|
|
36
|
-
if (err instanceof auth0.Auth0AuthError) {
|
|
37
|
-
process.stdout.write(" token expired.\n");
|
|
38
|
-
console.log(" Re-authenticating (your browser will open)...");
|
|
39
|
-
if (!auth0.login()) {
|
|
40
|
-
console.error("\n Auth0 login failed.");
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
const active = tenants.find((t)=>t.active) ?? tenants[0];
|
|
46
|
-
const issuerBaseUrl = `https://${active.name}`;
|
|
47
|
-
console.log(`\n ✓ Auth0 tenant: ${issuerBaseUrl}`);
|
|
48
|
-
process.stdout.write("\n Fetching Auth0 APIs...");
|
|
49
|
-
const userApis = auth0.listApis().filter((a)=>!a.name.includes("Management API"));
|
|
50
|
-
process.stdout.write(` found ${userApis.length}.\n`);
|
|
51
|
-
const choices = [
|
|
52
|
-
{
|
|
53
|
-
label: `<new> https://api.${ctx.projectName}`,
|
|
54
|
-
existing: null
|
|
55
|
-
},
|
|
56
|
-
...userApis.map((a)=>({
|
|
57
|
-
label: `${a.name} — ${a.identifier}`,
|
|
58
|
-
existing: a.identifier
|
|
59
|
-
}))
|
|
60
|
-
];
|
|
61
|
-
const selected = await pick("\n Select Auth0 API: ", choices, (c)=>c.label);
|
|
62
|
-
let audience;
|
|
63
|
-
if (!selected || selected.existing === null) {
|
|
64
|
-
const defaultId = `https://api.${ctx.projectName}`;
|
|
65
|
-
audience = await ask(` API Identifier [${defaultId}]: `, defaultId);
|
|
66
|
-
console.log("\n Creating Auth0 API...");
|
|
67
|
-
audience = auth0.createApi(`${ctx.projectName} API`, audience).identifier;
|
|
68
|
-
console.log(` ✓ API created: ${audience}`);
|
|
69
|
-
} else {
|
|
70
|
-
audience = selected.existing;
|
|
71
|
-
console.log(` ✓ Selected: ${audience}`);
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
...ctx,
|
|
75
|
-
models: ctx.models.set(AUTH0_CONFIG_KEY, {
|
|
76
|
-
issuerBaseUrl,
|
|
77
|
-
audience
|
|
78
|
-
})
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Configure phase: decorate all scaffolded controllers with auth guards.
|
|
83
|
-
* Adds `@Authorize`, `@AllowAnonymous`, and the `IPrincipalProvider`
|
|
84
|
-
* constructor param so each controller can expose the current principal.
|
|
85
|
-
*/ async function configure(ctx) {
|
|
86
|
-
if (!enabled(ctx)) return ctx;
|
|
87
|
-
for (const controller of ctx.controllers){
|
|
88
|
-
const resource = controller.className.replace(/Controller$/, "");
|
|
89
|
-
controller.addImport("@decohere/cortex", "AllowAnonymous", "Authorize", "IPrincipalProviderToken").addTypeImport("@decohere/cortex", "IPrincipalProvider").addImport("@decohere/crucible/decorators", "inject").decorateClass(`@Authorize("read", "${resource}")`).decorateMethod("getAll", "@AllowAnonymous()").decorateMethod("remove", `@Authorize("delete", "${resource}")`).addConstructorParam({
|
|
90
|
-
paramDecorators: [
|
|
91
|
-
"@inject(IPrincipalProviderToken)"
|
|
92
|
-
],
|
|
93
|
-
name: "principalProvider",
|
|
94
|
-
typeName: "IPrincipalProvider",
|
|
95
|
-
isPrivate: true,
|
|
96
|
-
isReadonly: true
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return ctx;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Render phase: append the auth section to config/config.prod.yaml. If no
|
|
103
|
-
* Auth0Config was gathered during resolve (e.g. --yes), env-var placeholders
|
|
104
|
-
* are written instead.
|
|
105
|
-
*/ async function render(ctx) {
|
|
106
|
-
const { targetDir } = ctx;
|
|
107
|
-
const auth0Config = ctx.models.get(AUTH0_CONFIG_KEY);
|
|
108
|
-
// Append env-var placeholder auth block to the base config.yaml
|
|
109
|
-
const baseConfigPath = join(targetDir, "config", "config.yaml");
|
|
110
|
-
let baseExisting = "";
|
|
111
|
-
try {
|
|
112
|
-
baseExisting = await readFile(baseConfigPath, "utf8");
|
|
113
|
-
} catch {}
|
|
114
|
-
const baseStripped = baseExisting.replace(/^auth:[\s\S]*?(?=\n\S|\n*$)/m, "").trimEnd();
|
|
115
|
-
const baseFrag = auth0ConfigYaml();
|
|
116
|
-
await writeFile(baseConfigPath, baseStripped ? `${baseStripped}\n${baseFrag}` : baseFrag);
|
|
117
|
-
// Append actual dev auth URLs to config.dev.yaml
|
|
118
|
-
const devConfigPath = join(targetDir, "config", "config.dev.yaml");
|
|
119
|
-
let devExisting = "";
|
|
120
|
-
try {
|
|
121
|
-
devExisting = await readFile(devConfigPath, "utf8");
|
|
122
|
-
} catch {}
|
|
123
|
-
const devStripped = devExisting.replace(/^auth:[\s\S]*?(?=\n\S|\n*$)/m, "").trimEnd();
|
|
124
|
-
const devFragment = auth0ConfigYaml(auth0Config?.issuerBaseUrl, auth0Config?.audience);
|
|
125
|
-
await writeFile(devConfigPath, devStripped ? `${devStripped}\n\n${devFragment}` : devFragment);
|
|
126
|
-
return ctx;
|
|
127
|
-
}
|
|
128
|
-
export const auth0Feature = {
|
|
129
|
-
name: "auth0",
|
|
130
|
-
enabled,
|
|
131
|
-
resolve,
|
|
132
|
-
configure,
|
|
133
|
-
render
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9hdXRoMC9mZWF0dXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFzaywgdHlwZSBGZWF0dXJlLCBwaWNrLCB0eXBlIFNjYWZmb2xkQ29udGV4dCB9IGZyb20gXCIuLi8uLi9kb21haW4vaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGF1dGgwIGZyb20gXCIuL2F1dGgwLWNsaS5qc1wiO1xuaW1wb3J0IHsgQVVUSDBfQ09ORklHX0tFWSB9IGZyb20gXCIuL21vZGVscy5qc1wiO1xuaW1wb3J0IHsgYXV0aDBDb25maWdZYW1sIH0gZnJvbSBcIi4vcHJvZC1jb25maWcudGVtcGxhdGUuanNcIjtcblxuY29uc3QgZW5hYmxlZCA9IChjdHg6IFNjYWZmb2xkQ29udGV4dCkgPT4gY3R4Lm9wdHMuaWRwID09PSBcImF1dGgwXCI7XG5cbi8qKlxuICogUmVzb2x2ZSBwaGFzZTogZHJpdmUgdGhlIGF1dGgwIENMSSB0byBhdXRoZW50aWNhdGUgdGhlIHVzZXIgYW5kIGdhdGhlciBhblxuICogaXNzdWVyICsgYXVkaWVuY2UgcGFpci4gU3RvcmVkIHVuZGVyIEFVVEgwX0NPTkZJR19LRVkgZm9yIGRvd25zdHJlYW1cbiAqIGZlYXR1cmVzIChyZW5kZXIsIHBvc3RtYW4gaW50ZWdyYXRlKS5cbiAqXG4gKiBTa2lwcGVkIHVuZGVyIC0teWVzIChub24taW50ZXJhY3RpdmUpLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlKGN0eDogU2NhZmZvbGRDb250ZXh0KTogUHJvbWlzZTxTY2FmZm9sZENvbnRleHQ+IHtcblx0aWYgKGN0eC5vcHRzLnllcykgcmV0dXJuIGN0eDtcblxuXHRpZiAoIWF1dGgwLmlzSW5zdGFsbGVkKCkpIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIFRoZSBBdXRoMCBDTEkgaXMgcmVxdWlyZWQgZm9yIGF1dG9tYXRlZCBzZXR1cC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsOiBicmV3IGluc3RhbGwgYXV0aDAvYXV0aDAtY2xpL2F1dGgwXFxuXCIgK1xuXHRcdFx0XHRcIiAgT3IgdmlzaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdXRoMC9hdXRoMC1jbGlcXG5cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdC8vIEVuc3VyZSBib3RoIHRoZSByZWd1bGFyIGFuZCBNYW5hZ2VtZW50IEFQSSB0b2tlbnMgYXJlIHZhbGlkIGJlZm9yZSBwcm9tcHRpbmcuXG5cdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFxuICBDaGVja2luZyBBdXRoMCBjcmVkZW50aWFscy4uLlwiKTtcblx0bGV0IHRlbmFudHMgPSBhdXRoMC5saXN0VGVuYW50cygpO1xuXHRpZiAodGVuYW50cy5sZW5ndGggPT09IDApIHtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBub3QgbG9nZ2VkIGluLlxcblwiKTtcblx0XHRjb25zb2xlLmxvZyhcIiAgTG9nZ2luZyBpbiB0byBBdXRoMCAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0aWYgKCFhdXRoMC5sb2dpbigpKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiXFxuICBBdXRoMCBsb2dpbiBmYWlsZWQuXCIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblx0XHR0ZW5hbnRzID0gYXV0aDAubGlzdFRlbmFudHMoKTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0YXV0aDAubGlzdEFwaXMoKTsgLy8gcHJvYmVzIHRoZSBNYW5hZ2VtZW50IEFQSSB0b2tlblxuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIG9rLlxcblwiKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIGF1dGgwLkF1dGgwQXV0aEVycm9yKSB7XG5cdFx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiB0b2tlbiBleHBpcmVkLlxcblwiKTtcblx0XHRcdGNvbnNvbGUubG9nKFwiICBSZS1hdXRoZW50aWNhdGluZyAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0XHRpZiAoIWF1dGgwLmxvZ2luKCkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlxcbiAgQXV0aDAgbG9naW4gZmFpbGVkLlwiKTtcblx0XHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFjdGl2ZSA9IHRlbmFudHMuZmluZCgodCkgPT4gdC5hY3RpdmUpID8/IHRlbmFudHNbMF07XG5cdGNvbnN0IGlzc3VlckJhc2VVcmwgPSBgaHR0cHM6Ly8ke2FjdGl2ZS5uYW1lfWA7XG5cdGNvbnNvbGUubG9nKGBcXG4gIOKckyBBdXRoMCB0ZW5hbnQ6ICR7aXNzdWVyQmFzZVVybH1gKTtcblxuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcbiAgRmV0Y2hpbmcgQXV0aDAgQVBJcy4uLlwiKTtcblx0Y29uc3QgdXNlckFwaXMgPSBhdXRoMC5saXN0QXBpcygpLmZpbHRlcigoYSkgPT4gIWEubmFtZS5pbmNsdWRlcyhcIk1hbmFnZW1lbnQgQVBJXCIpKTtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYCBmb3VuZCAke3VzZXJBcGlzLmxlbmd0aH0uXFxuYCk7XG5cblx0dHlwZSBBcGlDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGV4aXN0aW5nOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IGNob2ljZXM6IEFwaUNob2ljZVtdID0gW1xuXHRcdHsgbGFiZWw6IGA8bmV3PiBodHRwczovL2FwaS4ke2N0eC5wcm9qZWN0TmFtZX1gLCBleGlzdGluZzogbnVsbCB9LFxuXHRcdC4uLnVzZXJBcGlzLm1hcCgoYSkgPT4gKHsgbGFiZWw6IGAke2EubmFtZX0g4oCUICR7YS5pZGVudGlmaWVyfWAsIGV4aXN0aW5nOiBhLmlkZW50aWZpZXIgfSkpLFxuXHRdO1xuXG5cdGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgcGljayhcIlxcbiAgU2VsZWN0IEF1dGgwIEFQSTogXCIsIGNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblxuXHRsZXQgYXVkaWVuY2U6IHN0cmluZztcblx0aWYgKCFzZWxlY3RlZCB8fCBzZWxlY3RlZC5leGlzdGluZyA9PT0gbnVsbCkge1xuXHRcdGNvbnN0IGRlZmF1bHRJZCA9IGBodHRwczovL2FwaS4ke2N0eC5wcm9qZWN0TmFtZX1gO1xuXHRcdGF1ZGllbmNlID0gYXdhaXQgYXNrKGAgIEFQSSBJZGVudGlmaWVyIFske2RlZmF1bHRJZH1dOiBgLCBkZWZhdWx0SWQpO1xuXHRcdGNvbnNvbGUubG9nKFwiXFxuICBDcmVhdGluZyBBdXRoMCBBUEkuLi5cIik7XG5cdFx0YXVkaWVuY2UgPSBhdXRoMC5jcmVhdGVBcGkoYCR7Y3R4LnByb2plY3ROYW1lfSBBUElgLCBhdWRpZW5jZSkuaWRlbnRpZmllcjtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgQVBJIGNyZWF0ZWQ6ICR7YXVkaWVuY2V9YCk7XG5cdH0gZWxzZSB7XG5cdFx0YXVkaWVuY2UgPSBzZWxlY3RlZC5leGlzdGluZztcblx0XHRjb25zb2xlLmxvZyhgICDinJMgU2VsZWN0ZWQ6ICR7YXVkaWVuY2V9YCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdC4uLmN0eCxcblx0XHRtb2RlbHM6IGN0eC5tb2RlbHMuc2V0KEFVVEgwX0NPTkZJR19LRVksIHsgaXNzdWVyQmFzZVVybCwgYXVkaWVuY2UgfSksXG5cdH07XG59XG5cbi8qKlxuICogQ29uZmlndXJlIHBoYXNlOiBkZWNvcmF0ZSBhbGwgc2NhZmZvbGRlZCBjb250cm9sbGVycyB3aXRoIGF1dGggZ3VhcmRzLlxuICogQWRkcyBgQEF1dGhvcml6ZWAsIGBAQWxsb3dBbm9ueW1vdXNgLCBhbmQgdGhlIGBJUHJpbmNpcGFsUHJvdmlkZXJgXG4gKiBjb25zdHJ1Y3RvciBwYXJhbSBzbyBlYWNoIGNvbnRyb2xsZXIgY2FuIGV4cG9zZSB0aGUgY3VycmVudCBwcmluY2lwYWwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZShjdHg6IFNjYWZmb2xkQ29udGV4dCk6IFByb21pc2U8U2NhZmZvbGRDb250ZXh0PiB7XG5cdGlmICghZW5hYmxlZChjdHgpKSByZXR1cm4gY3R4O1xuXHRmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgY3R4LmNvbnRyb2xsZXJzKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2UgPSBjb250cm9sbGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9Db250cm9sbGVyJC8sIFwiXCIpO1xuXHRcdGNvbnRyb2xsZXJcblx0XHRcdC5hZGRJbXBvcnQoXCJAZGVjb2hlcmUvY29ydGV4XCIsIFwiQWxsb3dBbm9ueW1vdXNcIiwgXCJBdXRob3JpemVcIiwgXCJJUHJpbmNpcGFsUHJvdmlkZXJUb2tlblwiKVxuXHRcdFx0LmFkZFR5cGVJbXBvcnQoXCJAZGVjb2hlcmUvY29ydGV4XCIsIFwiSVByaW5jaXBhbFByb3ZpZGVyXCIpXG5cdFx0XHQuYWRkSW1wb3J0KFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIiwgXCJpbmplY3RcIilcblx0XHRcdC5kZWNvcmF0ZUNsYXNzKGBAQXV0aG9yaXplKFwicmVhZFwiLCBcIiR7cmVzb3VyY2V9XCIpYClcblx0XHRcdC5kZWNvcmF0ZU1ldGhvZChcImdldEFsbFwiLCBcIkBBbGxvd0Fub255bW91cygpXCIpXG5cdFx0XHQuZGVjb3JhdGVNZXRob2QoXCJyZW1vdmVcIiwgYEBBdXRob3JpemUoXCJkZWxldGVcIiwgXCIke3Jlc291cmNlfVwiKWApXG5cdFx0XHQuYWRkQ29uc3RydWN0b3JQYXJhbSh7XG5cdFx0XHRcdHBhcmFtRGVjb3JhdG9yczogW1wiQGluamVjdChJUHJpbmNpcGFsUHJvdmlkZXJUb2tlbilcIl0sXG5cdFx0XHRcdG5hbWU6IFwicHJpbmNpcGFsUHJvdmlkZXJcIixcblx0XHRcdFx0dHlwZU5hbWU6IFwiSVByaW5jaXBhbFByb3ZpZGVyXCIsXG5cdFx0XHRcdGlzUHJpdmF0ZTogdHJ1ZSxcblx0XHRcdFx0aXNSZWFkb25seTogdHJ1ZSxcblx0XHRcdH0pO1xuXHR9XG5cdHJldHVybiBjdHg7XG59XG5cbi8qKlxuICogUmVuZGVyIHBoYXNlOiBhcHBlbmQgdGhlIGF1dGggc2VjdGlvbiB0byBjb25maWcvY29uZmlnLnByb2QueWFtbC4gSWYgbm9cbiAqIEF1dGgwQ29uZmlnIHdhcyBnYXRoZXJlZCBkdXJpbmcgcmVzb2x2ZSAoZS5nLiAtLXllcyksIGVudi12YXIgcGxhY2Vob2xkZXJzXG4gKiBhcmUgd3JpdHRlbiBpbnN0ZWFkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXIoY3R4OiBTY2FmZm9sZENvbnRleHQpOiBQcm9taXNlPFNjYWZmb2xkQ29udGV4dD4ge1xuXHRjb25zdCB7IHRhcmdldERpciB9ID0gY3R4O1xuXHRjb25zdCBhdXRoMENvbmZpZyA9IGN0eC5tb2RlbHMuZ2V0KEFVVEgwX0NPTkZJR19LRVkpO1xuXG5cdC8vIEFwcGVuZCBlbnYtdmFyIHBsYWNlaG9sZGVyIGF1dGggYmxvY2sgdG8gdGhlIGJhc2UgY29uZmlnLnlhbWxcblx0Y29uc3QgYmFzZUNvbmZpZ1BhdGggPSBqb2luKHRhcmdldERpciwgXCJjb25maWdcIiwgXCJjb25maWcueWFtbFwiKTtcblx0bGV0IGJhc2VFeGlzdGluZyA9IFwiXCI7XG5cdHRyeSB7XG5cdFx0YmFzZUV4aXN0aW5nID0gYXdhaXQgcmVhZEZpbGUoYmFzZUNvbmZpZ1BhdGgsIFwidXRmOFwiKTtcblx0fSBjYXRjaCB7fVxuXHRjb25zdCBiYXNlU3RyaXBwZWQgPSBiYXNlRXhpc3RpbmcucmVwbGFjZSgvXmF1dGg6W1xcc1xcU10qPyg/PVxcblxcU3xcXG4qJCkvbSwgXCJcIikudHJpbUVuZCgpO1xuXHRjb25zdCBiYXNlRnJhZyA9IGF1dGgwQ29uZmlnWWFtbCgpO1xuXHRhd2FpdCB3cml0ZUZpbGUoYmFzZUNvbmZpZ1BhdGgsIGJhc2VTdHJpcHBlZCA/IGAke2Jhc2VTdHJpcHBlZH1cXG4ke2Jhc2VGcmFnfWAgOiBiYXNlRnJhZyk7XG5cblx0Ly8gQXBwZW5kIGFjdHVhbCBkZXYgYXV0aCBVUkxzIHRvIGNvbmZpZy5kZXYueWFtbFxuXHRjb25zdCBkZXZDb25maWdQYXRoID0gam9pbih0YXJnZXREaXIsIFwiY29uZmlnXCIsIFwiY29uZmlnLmRldi55YW1sXCIpO1xuXHRsZXQgZGV2RXhpc3RpbmcgPSBcIlwiO1xuXHR0cnkge1xuXHRcdGRldkV4aXN0aW5nID0gYXdhaXQgcmVhZEZpbGUoZGV2Q29uZmlnUGF0aCwgXCJ1dGY4XCIpO1xuXHR9IGNhdGNoIHt9XG5cdGNvbnN0IGRldlN0cmlwcGVkID0gZGV2RXhpc3RpbmcucmVwbGFjZSgvXmF1dGg6W1xcc1xcU10qPyg/PVxcblxcU3xcXG4qJCkvbSwgXCJcIikudHJpbUVuZCgpO1xuXHRjb25zdCBkZXZGcmFnbWVudCA9IGF1dGgwQ29uZmlnWWFtbChhdXRoMENvbmZpZz8uaXNzdWVyQmFzZVVybCwgYXV0aDBDb25maWc/LmF1ZGllbmNlKTtcblx0YXdhaXQgd3JpdGVGaWxlKFxuXHRcdGRldkNvbmZpZ1BhdGgsXG5cdFx0ZGV2U3RyaXBwZWQgPyBgJHtkZXZTdHJpcHBlZH1cXG5cXG4ke2RldkZyYWdtZW50fWAgOiBkZXZGcmFnbWVudCxcblx0KTtcblxuXHRyZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgY29uc3QgYXV0aDBGZWF0dXJlOiBGZWF0dXJlID0ge1xuXHRuYW1lOiBcImF1dGgwXCIsXG5cdGVuYWJsZWQsXG5cdHJlc29sdmUsXG5cdGNvbmZpZ3VyZSxcblx0cmVuZGVyLFxufTtcbiJdLCJuYW1lcyI6WyJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImpvaW4iLCJhc2siLCJwaWNrIiwiYXV0aDAiLCJBVVRIMF9DT05GSUdfS0VZIiwiYXV0aDBDb25maWdZYW1sIiwiZW5hYmxlZCIsImN0eCIsIm9wdHMiLCJpZHAiLCJyZXNvbHZlIiwieWVzIiwiaXNJbnN0YWxsZWQiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInN0ZG91dCIsIndyaXRlIiwidGVuYW50cyIsImxpc3RUZW5hbnRzIiwibGVuZ3RoIiwibG9nIiwibG9naW4iLCJsaXN0QXBpcyIsImVyciIsIkF1dGgwQXV0aEVycm9yIiwiYWN0aXZlIiwiZmluZCIsInQiLCJpc3N1ZXJCYXNlVXJsIiwibmFtZSIsInVzZXJBcGlzIiwiZmlsdGVyIiwiYSIsImluY2x1ZGVzIiwiY2hvaWNlcyIsImxhYmVsIiwicHJvamVjdE5hbWUiLCJleGlzdGluZyIsIm1hcCIsImlkZW50aWZpZXIiLCJzZWxlY3RlZCIsImMiLCJhdWRpZW5jZSIsImRlZmF1bHRJZCIsImNyZWF0ZUFwaSIsIm1vZGVscyIsInNldCIsImNvbmZpZ3VyZSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVycyIsInJlc291cmNlIiwiY2xhc3NOYW1lIiwicmVwbGFjZSIsImFkZEltcG9ydCIsImFkZFR5cGVJbXBvcnQiLCJkZWNvcmF0ZUNsYXNzIiwiZGVjb3JhdGVNZXRob2QiLCJhZGRDb25zdHJ1Y3RvclBhcmFtIiwicGFyYW1EZWNvcmF0b3JzIiwidHlwZU5hbWUiLCJpc1ByaXZhdGUiLCJpc1JlYWRvbmx5IiwicmVuZGVyIiwidGFyZ2V0RGlyIiwiYXV0aDBDb25maWciLCJnZXQiLCJiYXNlQ29uZmlnUGF0aCIsImJhc2VFeGlzdGluZyIsImJhc2VTdHJpcHBlZCIsInRyaW1FbmQiLCJiYXNlRnJhZyIsImRldkNvbmZpZ1BhdGgiLCJkZXZFeGlzdGluZyIsImRldlN0cmlwcGVkIiwiZGV2RnJhZ21lbnQiLCJhdXRoMEZlYXR1cmUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsRUFBRUMsU0FBUyxRQUFRLG1CQUFtQjtBQUN2RCxTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxTQUFTQyxHQUFHLEVBQWdCQyxJQUFJLFFBQThCLHdCQUF3QjtBQUN0RixZQUFZQyxXQUFXLGlCQUFpQjtBQUN4QyxTQUFTQyxnQkFBZ0IsUUFBUSxjQUFjO0FBQy9DLFNBQVNDLGVBQWUsUUFBUSw0QkFBNEI7QUFFNUQsTUFBTUMsVUFBVSxDQUFDQyxNQUF5QkEsSUFBSUMsSUFBSSxDQUFDQyxHQUFHLEtBQUs7QUFFM0Q7Ozs7OztDQU1DLEdBQ0QsZUFBZUMsUUFBUUgsR0FBb0I7SUFDMUMsSUFBSUEsSUFBSUMsSUFBSSxDQUFDRyxHQUFHLEVBQUUsT0FBT0o7SUFFekIsSUFBSSxDQUFDSixNQUFNUyxXQUFXLElBQUk7UUFDekJDLFFBQVFDLEtBQUssQ0FDWix5REFDQyxvREFDQTtRQUVGQyxRQUFRQyxJQUFJLENBQUM7SUFDZDtJQUVBLGdGQUFnRjtJQUNoRkQsUUFBUUUsTUFBTSxDQUFDQyxLQUFLLENBQUM7SUFDckIsSUFBSUMsVUFBVWhCLE1BQU1pQixXQUFXO0lBQy9CLElBQUlELFFBQVFFLE1BQU0sS0FBSyxHQUFHO1FBQ3pCTixRQUFRRSxNQUFNLENBQUNDLEtBQUssQ0FBQztRQUNyQkwsUUFBUVMsR0FBRyxDQUFDO1FBQ1osSUFBSSxDQUFDbkIsTUFBTW9CLEtBQUssSUFBSTtZQUNuQlYsUUFBUUMsS0FBSyxDQUFDO1lBQ2RDLFFBQVFDLElBQUksQ0FBQztRQUNkO1FBQ0FHLFVBQVVoQixNQUFNaUIsV0FBVztJQUM1QjtJQUVBLElBQUk7UUFDSGpCLE1BQU1xQixRQUFRLElBQUksa0NBQWtDO1FBQ3BEVCxRQUFRRSxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUN0QixFQUFFLE9BQU9PLEtBQUs7UUFDYixJQUFJQSxlQUFldEIsTUFBTXVCLGNBQWMsRUFBRTtZQUN4Q1gsUUFBUUUsTUFBTSxDQUFDQyxLQUFLLENBQUM7WUFDckJMLFFBQVFTLEdBQUcsQ0FBQztZQUNaLElBQUksQ0FBQ25CLE1BQU1vQixLQUFLLElBQUk7Z0JBQ25CVixRQUFRQyxLQUFLLENBQUM7Z0JBQ2RDLFFBQVFDLElBQUksQ0FBQztZQUNkO1FBQ0Q7SUFDRDtJQUVBLE1BQU1XLFNBQVNSLFFBQVFTLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFRixNQUFNLEtBQUtSLE9BQU8sQ0FBQyxFQUFFO0lBQzFELE1BQU1XLGdCQUFnQixDQUFDLFFBQVEsRUFBRUgsT0FBT0ksSUFBSSxFQUFFO0lBQzlDbEIsUUFBUVMsR0FBRyxDQUFDLENBQUMsb0JBQW9CLEVBQUVRLGVBQWU7SUFFbERmLFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQ3JCLE1BQU1jLFdBQVc3QixNQUFNcUIsUUFBUSxHQUFHUyxNQUFNLENBQUMsQ0FBQ0MsSUFBTSxDQUFDQSxFQUFFSCxJQUFJLENBQUNJLFFBQVEsQ0FBQztJQUNqRXBCLFFBQVFFLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFYyxTQUFTWCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBR25ELE1BQU1lLFVBQXVCO1FBQzVCO1lBQUVDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTlCLElBQUkrQixXQUFXLEVBQUU7WUFBRUMsVUFBVTtRQUFLO1dBQzdEUCxTQUFTUSxHQUFHLENBQUMsQ0FBQ04sSUFBTyxDQUFBO2dCQUFFRyxPQUFPLEdBQUdILEVBQUVILElBQUksQ0FBQyxHQUFHLEVBQUVHLEVBQUVPLFVBQVUsRUFBRTtnQkFBRUYsVUFBVUwsRUFBRU8sVUFBVTtZQUFDLENBQUE7S0FDdkY7SUFFRCxNQUFNQyxXQUFXLE1BQU14QyxLQUFLLDBCQUEwQmtDLFNBQVMsQ0FBQ08sSUFBTUEsRUFBRU4sS0FBSztJQUU3RSxJQUFJTztJQUNKLElBQUksQ0FBQ0YsWUFBWUEsU0FBU0gsUUFBUSxLQUFLLE1BQU07UUFDNUMsTUFBTU0sWUFBWSxDQUFDLFlBQVksRUFBRXRDLElBQUkrQixXQUFXLEVBQUU7UUFDbERNLFdBQVcsTUFBTTNDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTRDLFVBQVUsR0FBRyxDQUFDLEVBQUVBO1FBQzFEaEMsUUFBUVMsR0FBRyxDQUFDO1FBQ1pzQixXQUFXekMsTUFBTTJDLFNBQVMsQ0FBQyxHQUFHdkMsSUFBSStCLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRU0sVUFBVUgsVUFBVTtRQUN6RTVCLFFBQVFTLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixFQUFFc0IsVUFBVTtJQUMzQyxPQUFPO1FBQ05BLFdBQVdGLFNBQVNILFFBQVE7UUFDNUIxQixRQUFRUyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUVzQixVQUFVO0lBQ3hDO0lBRUEsT0FBTztRQUNOLEdBQUdyQyxHQUFHO1FBQ053QyxRQUFReEMsSUFBSXdDLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDNUMsa0JBQWtCO1lBQUUwQjtZQUFlYztRQUFTO0lBQ3BFO0FBQ0Q7QUFFQTs7OztDQUlDLEdBQ0QsZUFBZUssVUFBVTFDLEdBQW9CO0lBQzVDLElBQUksQ0FBQ0QsUUFBUUMsTUFBTSxPQUFPQTtJQUMxQixLQUFLLE1BQU0yQyxjQUFjM0MsSUFBSTRDLFdBQVcsQ0FBRTtRQUN6QyxNQUFNQyxXQUFXRixXQUFXRyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxlQUFlO1FBQzdESixXQUNFSyxTQUFTLENBQUMsb0JBQW9CLGtCQUFrQixhQUFhLDJCQUM3REMsYUFBYSxDQUFDLG9CQUFvQixzQkFDbENELFNBQVMsQ0FBQyxpQ0FBaUMsVUFDM0NFLGFBQWEsQ0FBQyxDQUFDLG9CQUFvQixFQUFFTCxTQUFTLEVBQUUsQ0FBQyxFQUNqRE0sY0FBYyxDQUFDLFVBQVUscUJBQ3pCQSxjQUFjLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFTixTQUFTLEVBQUUsQ0FBQyxFQUM5RE8sbUJBQW1CLENBQUM7WUFDcEJDLGlCQUFpQjtnQkFBQzthQUFtQztZQUNyRDdCLE1BQU07WUFDTjhCLFVBQVU7WUFDVkMsV0FBVztZQUNYQyxZQUFZO1FBQ2I7SUFDRjtJQUNBLE9BQU94RDtBQUNSO0FBRUE7Ozs7Q0FJQyxHQUNELGVBQWV5RCxPQUFPekQsR0FBb0I7SUFDekMsTUFBTSxFQUFFMEQsU0FBUyxFQUFFLEdBQUcxRDtJQUN0QixNQUFNMkQsY0FBYzNELElBQUl3QyxNQUFNLENBQUNvQixHQUFHLENBQUMvRDtJQUVuQyxnRUFBZ0U7SUFDaEUsTUFBTWdFLGlCQUFpQnBFLEtBQUtpRSxXQUFXLFVBQVU7SUFDakQsSUFBSUksZUFBZTtJQUNuQixJQUFJO1FBQ0hBLGVBQWUsTUFBTXZFLFNBQVNzRSxnQkFBZ0I7SUFDL0MsRUFBRSxPQUFNLENBQUM7SUFDVCxNQUFNRSxlQUFlRCxhQUFhZixPQUFPLENBQUMsZ0NBQWdDLElBQUlpQixPQUFPO0lBQ3JGLE1BQU1DLFdBQVduRTtJQUNqQixNQUFNTixVQUFVcUUsZ0JBQWdCRSxlQUFlLEdBQUdBLGFBQWEsRUFBRSxFQUFFRSxVQUFVLEdBQUdBO0lBRWhGLGlEQUFpRDtJQUNqRCxNQUFNQyxnQkFBZ0J6RSxLQUFLaUUsV0FBVyxVQUFVO0lBQ2hELElBQUlTLGNBQWM7SUFDbEIsSUFBSTtRQUNIQSxjQUFjLE1BQU01RSxTQUFTMkUsZUFBZTtJQUM3QyxFQUFFLE9BQU0sQ0FBQztJQUNULE1BQU1FLGNBQWNELFlBQVlwQixPQUFPLENBQUMsZ0NBQWdDLElBQUlpQixPQUFPO0lBQ25GLE1BQU1LLGNBQWN2RSxnQkFBZ0I2RCxhQUFhcEMsZUFBZW9DLGFBQWF0QjtJQUM3RSxNQUFNN0MsVUFDTDBFLGVBQ0FFLGNBQWMsR0FBR0EsWUFBWSxJQUFJLEVBQUVDLGFBQWEsR0FBR0E7SUFHcEQsT0FBT3JFO0FBQ1I7QUFFQSxPQUFPLE1BQU1zRSxlQUF3QjtJQUNwQzlDLE1BQU07SUFDTnpCO0lBQ0FJO0lBQ0F1QztJQUNBZTtBQUNELEVBQUUifQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { modelKey } from "../../domain/index.js";
|
|
2
|
-
export const AUTH0_CONFIG_KEY = modelKey("auth0-config");
|
|
3
|
-
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9hdXRoMC9tb2RlbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWxLZXkgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aDBDb25maWcge1xuXHRpc3N1ZXJCYXNlVXJsOiBzdHJpbmc7XG5cdGF1ZGllbmNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBBVVRIMF9DT05GSUdfS0VZID0gbW9kZWxLZXk8QXV0aDBDb25maWc+KFwiYXV0aDAtY29uZmlnXCIpO1xuIl0sIm5hbWVzIjpbIm1vZGVsS2V5IiwiQVVUSDBfQ09ORklHX0tFWSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxRQUFRLHdCQUF3QjtBQU9qRCxPQUFPLE1BQU1DLG1CQUFtQkQsU0FBc0IsZ0JBQWdCIn0=
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export function auth0ConfigYaml(issuerBaseUrl, audience) {
|
|
2
|
-
// biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
|
|
3
|
-
const issuer = issuerBaseUrl ?? "${AUTH0_ISSUER_BASE_URL}";
|
|
4
|
-
// biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
|
|
5
|
-
const aud = audience ?? "${AUTH0_AUDIENCE}";
|
|
6
|
-
return `auth:\n discoveryUrl: ${issuer}\n audience: ${aud}\n`;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9hdXRoMC9wcm9kLWNvbmZpZy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gYXV0aDBDb25maWdZYW1sKGlzc3VlckJhc2VVcmw/OiBzdHJpbmcsIGF1ZGllbmNlPzogc3RyaW5nKTogc3RyaW5nIHtcblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogaW50ZW50aW9uYWwgWUFNTCBlbnYtdmFyIHBsYWNlaG9sZGVyc1xuXHRjb25zdCBpc3N1ZXIgPSBpc3N1ZXJCYXNlVXJsID8/IFwiJHtBVVRIMF9JU1NVRVJfQkFTRV9VUkx9XCI7XG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IGludGVudGlvbmFsIFlBTUwgZW52LXZhciBwbGFjZWhvbGRlcnNcblx0Y29uc3QgYXVkID0gYXVkaWVuY2UgPz8gXCIke0FVVEgwX0FVRElFTkNFfVwiO1xuXHRyZXR1cm4gYGF1dGg6XFxuICBkaXNjb3ZlcnlVcmw6ICR7aXNzdWVyfVxcbiAgYXVkaWVuY2U6ICR7YXVkfVxcbmA7XG59XG4iXSwibmFtZXMiOlsiYXV0aDBDb25maWdZYW1sIiwiaXNzdWVyQmFzZVVybCIsImF1ZGllbmNlIiwiaXNzdWVyIiwiYXVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLGdCQUFnQkMsYUFBc0IsRUFBRUMsUUFBaUI7SUFDeEUsOEZBQThGO0lBQzlGLE1BQU1DLFNBQVNGLGlCQUFpQjtJQUNoQyw4RkFBOEY7SUFDOUYsTUFBTUcsTUFBTUYsWUFBWTtJQUN4QixPQUFPLENBQUMsdUJBQXVCLEVBQUVDLE9BQU8sY0FBYyxFQUFFQyxJQUFJLEVBQUUsQ0FBQztBQUNoRSJ9
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { appPackageJson, MAIN_TS, rootPackageJson, TSCONFIG, VSCODE_LAUNCH_JSON, vscodeSettingsJson } from "./scaffold-files.template.js";
|
|
4
|
-
async function render(ctx) {
|
|
5
|
-
const { targetDir, projectName } = ctx;
|
|
6
|
-
await mkdir(join(targetDir, ".vscode"), {
|
|
7
|
-
recursive: true
|
|
8
|
-
});
|
|
9
|
-
await mkdir(join(targetDir, "projects", "app", "src"), {
|
|
10
|
-
recursive: true
|
|
11
|
-
});
|
|
12
|
-
await Promise.all([
|
|
13
|
-
writeFile(join(targetDir, "package.json"), rootPackageJson(projectName)),
|
|
14
|
-
writeFile(join(targetDir, "tsconfig.json"), TSCONFIG),
|
|
15
|
-
writeFile(join(targetDir, "projects", "app", "package.json"), appPackageJson(projectName)),
|
|
16
|
-
writeFile(join(targetDir, "projects", "app", "src", "main.ts"), MAIN_TS),
|
|
17
|
-
writeFile(join(targetDir, ".vscode", "launch.json"), VSCODE_LAUNCH_JSON),
|
|
18
|
-
writeFile(join(targetDir, ".vscode", "settings.json"), vscodeSettingsJson(projectName))
|
|
19
|
-
]);
|
|
20
|
-
return ctx;
|
|
21
|
-
}
|
|
22
|
-
export const cliCoreFeature = {
|
|
23
|
-
name: "cli-core",
|
|
24
|
-
render
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9jbGktY29yZS9mZWF0dXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1rZGlyLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgRmVhdHVyZSwgU2NhZmZvbGRDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbmRleC5qc1wiO1xuaW1wb3J0IHtcblx0YXBwUGFja2FnZUpzb24sXG5cdE1BSU5fVFMsXG5cdHJvb3RQYWNrYWdlSnNvbixcblx0VFNDT05GSUcsXG5cdFZTQ09ERV9MQVVOQ0hfSlNPTixcblx0dnNjb2RlU2V0dGluZ3NKc29uLFxufSBmcm9tIFwiLi9zY2FmZm9sZC1maWxlcy50ZW1wbGF0ZS5qc1wiO1xuXG5hc3luYyBmdW5jdGlvbiByZW5kZXIoY3R4OiBTY2FmZm9sZENvbnRleHQpOiBQcm9taXNlPFNjYWZmb2xkQ29udGV4dD4ge1xuXHRjb25zdCB7IHRhcmdldERpciwgcHJvamVjdE5hbWUgfSA9IGN0eDtcblxuXHRhd2FpdCBta2Rpcihqb2luKHRhcmdldERpciwgXCIudnNjb2RlXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0YXdhaXQgbWtkaXIoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicGFja2FnZS5qc29uXCIpLCByb290UGFja2FnZUpzb24ocHJvamVjdE5hbWUpKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwidHNjb25maWcuanNvblwiKSwgVFNDT05GSUcpLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCJwcm9qZWN0c1wiLCBcImFwcFwiLCBcInBhY2thZ2UuanNvblwiKSwgYXBwUGFja2FnZUpzb24ocHJvamVjdE5hbWUpKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwicHJvamVjdHNcIiwgXCJhcHBcIiwgXCJzcmNcIiwgXCJtYWluLnRzXCIpLCBNQUlOX1RTKSxcblx0XHR3cml0ZUZpbGUoam9pbih0YXJnZXREaXIsIFwiLnZzY29kZVwiLCBcImxhdW5jaC5qc29uXCIpLCBWU0NPREVfTEFVTkNIX0pTT04pLFxuXHRcdHdyaXRlRmlsZShqb2luKHRhcmdldERpciwgXCIudnNjb2RlXCIsIFwic2V0dGluZ3MuanNvblwiKSwgdnNjb2RlU2V0dGluZ3NKc29uKHByb2plY3ROYW1lKSksXG5cdF0pO1xuXG5cdHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBjb25zdCBjbGlDb3JlRmVhdHVyZTogRmVhdHVyZSA9IHtcblx0bmFtZTogXCJjbGktY29yZVwiLFxuXHRyZW5kZXIsXG59O1xuIl0sIm5hbWVzIjpbIm1rZGlyIiwid3JpdGVGaWxlIiwiam9pbiIsImFwcFBhY2thZ2VKc29uIiwiTUFJTl9UUyIsInJvb3RQYWNrYWdlSnNvbiIsIlRTQ09ORklHIiwiVlNDT0RFX0xBVU5DSF9KU09OIiwidnNjb2RlU2V0dGluZ3NKc29uIiwicmVuZGVyIiwiY3R4IiwidGFyZ2V0RGlyIiwicHJvamVjdE5hbWUiLCJyZWN1cnNpdmUiLCJQcm9taXNlIiwiYWxsIiwiY2xpQ29yZUZlYXR1cmUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxLQUFLLEVBQUVDLFNBQVMsUUFBUSxtQkFBbUI7QUFDcEQsU0FBU0MsSUFBSSxRQUFRLFlBQVk7QUFFakMsU0FDQ0MsY0FBYyxFQUNkQyxPQUFPLEVBQ1BDLGVBQWUsRUFDZkMsUUFBUSxFQUNSQyxrQkFBa0IsRUFDbEJDLGtCQUFrQixRQUNaLCtCQUErQjtBQUV0QyxlQUFlQyxPQUFPQyxHQUFvQjtJQUN6QyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxFQUFFLEdBQUdGO0lBRW5DLE1BQU1WLE1BQU1FLEtBQUtTLFdBQVcsWUFBWTtRQUFFRSxXQUFXO0lBQUs7SUFDMUQsTUFBTWIsTUFBTUUsS0FBS1MsV0FBVyxZQUFZLE9BQU8sUUFBUTtRQUFFRSxXQUFXO0lBQUs7SUFFekUsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQ2pCZCxVQUFVQyxLQUFLUyxXQUFXLGlCQUFpQk4sZ0JBQWdCTztRQUMzRFgsVUFBVUMsS0FBS1MsV0FBVyxrQkFBa0JMO1FBQzVDTCxVQUFVQyxLQUFLUyxXQUFXLFlBQVksT0FBTyxpQkFBaUJSLGVBQWVTO1FBQzdFWCxVQUFVQyxLQUFLUyxXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVlQO1FBQ2hFSCxVQUFVQyxLQUFLUyxXQUFXLFdBQVcsZ0JBQWdCSjtRQUNyRE4sVUFBVUMsS0FBS1MsV0FBVyxXQUFXLGtCQUFrQkgsbUJBQW1CSTtLQUMxRTtJQUVELE9BQU9GO0FBQ1I7QUFFQSxPQUFPLE1BQU1NLGlCQUEwQjtJQUN0Q0MsTUFBTTtJQUNOUjtBQUNELEVBQUUifQ==
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { CREATE_VERSION } from "../../version.js";
|
|
2
|
-
export const TSCONFIG = JSON.stringify({
|
|
3
|
-
compilerOptions: {
|
|
4
|
-
target: "ES2022",
|
|
5
|
-
module: "NodeNext",
|
|
6
|
-
moduleResolution: "NodeNext",
|
|
7
|
-
strict: true,
|
|
8
|
-
skipLibCheck: true
|
|
9
|
-
},
|
|
10
|
-
include: [
|
|
11
|
-
"projects"
|
|
12
|
-
]
|
|
13
|
-
}, null, 2);
|
|
14
|
-
export const VSCODE_LAUNCH_JSON = JSON.stringify({
|
|
15
|
-
version: "0.2.0",
|
|
16
|
-
configurations: [
|
|
17
|
-
{
|
|
18
|
-
name: "Build",
|
|
19
|
-
type: "node",
|
|
20
|
-
request: "launch",
|
|
21
|
-
runtimeExecutable: "pnpm",
|
|
22
|
-
runtimeArgs: [
|
|
23
|
-
"build"
|
|
24
|
-
],
|
|
25
|
-
console: "integratedTerminal",
|
|
26
|
-
cwd: `\${workspaceFolder}`
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: "Serve / Dev",
|
|
30
|
-
type: "node",
|
|
31
|
-
request: "launch",
|
|
32
|
-
runtimeExecutable: "pnpm",
|
|
33
|
-
runtimeArgs: [
|
|
34
|
-
"dev"
|
|
35
|
-
],
|
|
36
|
-
console: "integratedTerminal",
|
|
37
|
-
cwd: `\${workspaceFolder}`
|
|
38
|
-
}
|
|
39
|
-
]
|
|
40
|
-
}, null, 2);
|
|
41
|
-
export function rootPackageJson(name) {
|
|
42
|
-
return JSON.stringify({
|
|
43
|
-
name,
|
|
44
|
-
version: "0.0.1",
|
|
45
|
-
type: "module",
|
|
46
|
-
scripts: {
|
|
47
|
-
build: "forge build",
|
|
48
|
-
"build:watch": "forge build --watch",
|
|
49
|
-
dev: "flux serve"
|
|
50
|
-
},
|
|
51
|
-
devDependencies: {
|
|
52
|
-
"@decohere/terminal": CREATE_VERSION,
|
|
53
|
-
typescript: "^6.0.3"
|
|
54
|
-
}
|
|
55
|
-
}, null, 2);
|
|
56
|
-
}
|
|
57
|
-
export function appPackageJson(name) {
|
|
58
|
-
return JSON.stringify({
|
|
59
|
-
name: `@${name}/app`,
|
|
60
|
-
version: "0.0.1",
|
|
61
|
-
type: "module",
|
|
62
|
-
main: "src/main.ts"
|
|
63
|
-
}, null, 2);
|
|
64
|
-
}
|
|
65
|
-
export function vscodeSettingsJson(name) {
|
|
66
|
-
return JSON.stringify({
|
|
67
|
-
"window.title": `${name}\${separator}\${activeEditorShort}`,
|
|
68
|
-
"window.titleSeparator": " | "
|
|
69
|
-
}, null, 2);
|
|
70
|
-
}
|
|
71
|
-
export const MAIN_TS = `console.log("Hello from Decohere!");\n`;
|
|
72
|
-
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS92MS9mZWF0dXJlcy9jbGktY29yZS9zY2FmZm9sZC1maWxlcy50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi92ZXJzaW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBUU0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHR0YXJnZXQ6IFwiRVMyMDIyXCIsXG5cdFx0XHRtb2R1bGU6IFwiTm9kZU5leHRcIixcblx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdHN0cmljdDogdHJ1ZSxcblx0XHRcdHNraXBMaWJDaGVjazogdHJ1ZSxcblx0XHR9LFxuXHRcdGluY2x1ZGU6IFtcInByb2plY3RzXCJdLFxuXHR9LFxuXHRudWxsLFxuXHQyLFxuKTtcblxuZXhwb3J0IGNvbnN0IFZTQ09ERV9MQVVOQ0hfSlNPTiA9IEpTT04uc3RyaW5naWZ5KFxuXHR7XG5cdFx0dmVyc2lvbjogXCIwLjIuMFwiLFxuXHRcdGNvbmZpZ3VyYXRpb25zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQnVpbGRcIixcblx0XHRcdFx0dHlwZTogXCJub2RlXCIsXG5cdFx0XHRcdHJlcXVlc3Q6IFwibGF1bmNoXCIsXG5cdFx0XHRcdHJ1bnRpbWVFeGVjdXRhYmxlOiBcInBucG1cIixcblx0XHRcdFx0cnVudGltZUFyZ3M6IFtcImJ1aWxkXCJdLFxuXHRcdFx0XHRjb25zb2xlOiBcImludGVncmF0ZWRUZXJtaW5hbFwiLFxuXHRcdFx0XHRjd2Q6IGBcXCR7d29ya3NwYWNlRm9sZGVyfWAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlNlcnZlIC8gRGV2XCIsXG5cdFx0XHRcdHR5cGU6IFwibm9kZVwiLFxuXHRcdFx0XHRyZXF1ZXN0OiBcImxhdW5jaFwiLFxuXHRcdFx0XHRydW50aW1lRXhlY3V0YWJsZTogXCJwbnBtXCIsXG5cdFx0XHRcdHJ1bnRpbWVBcmdzOiBbXCJkZXZcIl0sXG5cdFx0XHRcdGNvbnNvbGU6IFwiaW50ZWdyYXRlZFRlcm1pbmFsXCIsXG5cdFx0XHRcdGN3ZDogYFxcJHt3b3Jrc3BhY2VGb2xkZXJ9YCxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSxcblx0bnVsbCxcblx0Mixcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiByb290UGFja2FnZUpzb24obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuXHRcdHtcblx0XHRcdG5hbWUsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0c2NyaXB0czoge1xuXHRcdFx0XHRidWlsZDogXCJmb3JnZSBidWlsZFwiLFxuXHRcdFx0XHRcImJ1aWxkOndhdGNoXCI6IFwiZm9yZ2UgYnVpbGQgLS13YXRjaFwiLFxuXHRcdFx0XHRkZXY6IFwiZmx1eCBzZXJ2ZVwiLFxuXHRcdFx0fSxcblx0XHRcdGRldkRlcGVuZGVuY2llczoge1xuXHRcdFx0XHRcIkBkZWNvaGVyZS90ZXJtaW5hbFwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHRcdFx0dHlwZXNjcmlwdDogXCJeNi4wLjNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRudWxsLFxuXHRcdDIsXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYWNrYWdlSnNvbihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG5cdFx0e1xuXHRcdFx0bmFtZTogYEAke25hbWV9L2FwcGAsXG5cdFx0XHR2ZXJzaW9uOiBcIjAuMC4xXCIsXG5cdFx0XHR0eXBlOiBcIm1vZHVsZVwiLFxuXHRcdFx0bWFpbjogXCJzcmMvbWFpbi50c1wiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdnNjb2RlU2V0dGluZ3NKc29uKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShcblx0XHR7XG5cdFx0XHRcIndpbmRvdy50aXRsZVwiOiBgJHtuYW1lfVxcJHtzZXBhcmF0b3J9XFwke2FjdGl2ZUVkaXRvclNob3J0fWAsXG5cdFx0XHRcIndpbmRvdy50aXRsZVNlcGFyYXRvclwiOiBcIiB8IFwiLFxuXHRcdH0sXG5cdFx0bnVsbCxcblx0XHQyLFxuXHQpO1xufVxuXG5leHBvcnQgY29uc3QgTUFJTl9UUyA9IGBjb25zb2xlLmxvZyhcIkhlbGxvIGZyb20gRGVjb2hlcmUhXCIpO1xcbmA7XG4iXSwibmFtZXMiOlsiQ1JFQVRFX1ZFUlNJT04iLCJUU0NPTkZJRyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb21waWxlck9wdGlvbnMiLCJ0YXJnZXQiLCJtb2R1bGUiLCJtb2R1bGVSZXNvbHV0aW9uIiwic3RyaWN0Iiwic2tpcExpYkNoZWNrIiwiaW5jbHVkZSIsIlZTQ09ERV9MQVVOQ0hfSlNPTiIsInZlcnNpb24iLCJjb25maWd1cmF0aW9ucyIsIm5hbWUiLCJ0eXBlIiwicmVxdWVzdCIsInJ1bnRpbWVFeGVjdXRhYmxlIiwicnVudGltZUFyZ3MiLCJjb25zb2xlIiwiY3dkIiwicm9vdFBhY2thZ2VKc29uIiwic2NyaXB0cyIsImJ1aWxkIiwiZGV2IiwiZGV2RGVwZW5kZW5jaWVzIiwidHlwZXNjcmlwdCIsImFwcFBhY2thZ2VKc29uIiwibWFpbiIsInZzY29kZVNldHRpbmdzSnNvbiIsIk1BSU5fVFMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxtQkFBbUI7QUFFbEQsT0FBTyxNQUFNQyxXQUFXQyxLQUFLQyxTQUFTLENBQ3JDO0lBQ0NDLGlCQUFpQjtRQUNoQkMsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLGtCQUFrQjtRQUNsQkMsUUFBUTtRQUNSQyxjQUFjO0lBQ2Y7SUFDQUMsU0FBUztRQUFDO0tBQVc7QUFDdEIsR0FDQSxNQUNBLEdBQ0M7QUFFRixPQUFPLE1BQU1DLHFCQUFxQlQsS0FBS0MsU0FBUyxDQUMvQztJQUNDUyxTQUFTO0lBQ1RDLGdCQUFnQjtRQUNmO1lBQ0NDLE1BQU07WUFDTkMsTUFBTTtZQUNOQyxTQUFTO1lBQ1RDLG1CQUFtQjtZQUNuQkMsYUFBYTtnQkFBQzthQUFRO1lBQ3RCQyxTQUFTO1lBQ1RDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztRQUMzQjtRQUNBO1lBQ0NOLE1BQU07WUFDTkMsTUFBTTtZQUNOQyxTQUFTO1lBQ1RDLG1CQUFtQjtZQUNuQkMsYUFBYTtnQkFBQzthQUFNO1lBQ3BCQyxTQUFTO1lBQ1RDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztRQUMzQjtLQUNBO0FBQ0YsR0FDQSxNQUNBLEdBQ0M7QUFFRixPQUFPLFNBQVNDLGdCQUFnQlAsSUFBWTtJQUMzQyxPQUFPWixLQUFLQyxTQUFTLENBQ3BCO1FBQ0NXO1FBQ0FGLFNBQVM7UUFDVEcsTUFBTTtRQUNOTyxTQUFTO1lBQ1JDLE9BQU87WUFDUCxlQUFlO1lBQ2ZDLEtBQUs7UUFDTjtRQUNBQyxpQkFBaUI7WUFDaEIsc0JBQXNCekI7WUFDdEIwQixZQUFZO1FBQ2I7SUFDRCxHQUNBLE1BQ0E7QUFFRjtBQUVBLE9BQU8sU0FBU0MsZUFBZWIsSUFBWTtJQUMxQyxPQUFPWixLQUFLQyxTQUFTLENBQ3BCO1FBQ0NXLE1BQU0sQ0FBQyxDQUFDLEVBQUVBLEtBQUssSUFBSSxDQUFDO1FBQ3BCRixTQUFTO1FBQ1RHLE1BQU07UUFDTmEsTUFBTTtJQUNQLEdBQ0EsTUFDQTtBQUVGO0FBRUEsT0FBTyxTQUFTQyxtQkFBbUJmLElBQVk7SUFDOUMsT0FBT1osS0FBS0MsU0FBUyxDQUNwQjtRQUNDLGdCQUFnQixHQUFHVyxLQUFLLGtDQUFrQyxDQUFDO1FBQzNELHlCQUF5QjtJQUMxQixHQUNBLE1BQ0E7QUFFRjtBQUVBLE9BQU8sTUFBTWdCLFVBQVUsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDIn0=
|