@decohere/create 0.0.1-dev.17 → 0.0.1-dev.18
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 +26 -5
- package/commonjs/src/models/compose.model.js +82 -0
- package/commonjs/src/models/config-yaml.model.js +34 -0
- package/commonjs/src/models/const.js +29 -0
- package/commonjs/src/models/container-image.model.js +88 -0
- package/commonjs/src/models/dev-container.model.js +73 -0
- package/commonjs/src/models/env-file.model.js +33 -0
- package/commonjs/src/models/gitignore.model.js +32 -0
- package/commonjs/src/models/launch-json.model.js +52 -0
- package/commonjs/src/models/package-json.model.js +64 -0
- package/commonjs/src/models/project.model.js +126 -0
- package/commonjs/src/models/source-file.js +6 -0
- package/commonjs/src/models/tsconfig.model.js +34 -0
- package/commonjs/src/models/vscode-settings.model.js +31 -0
- package/commonjs/src/services/scaffold.service.js +62 -0
- package/commonjs/src/webapi/create-api.js +169 -0
- package/commonjs/src/webapi/features/auth.feature.js +166 -0
- package/commonjs/src/webapi/features/auth0-cli.js +151 -0
- package/commonjs/src/webapi/features/database.feature.js +151 -0
- package/commonjs/src/webapi/features/finalize.feature.js +46 -0
- package/commonjs/src/webapi/features/postman.feature.js +309 -0
- package/commonjs/src/webapi/models/api-package-json.model.js +57 -0
- package/commonjs/src/webapi/models/auth-config.model.js +23 -0
- package/commonjs/src/webapi/models/controller-source-file.model.js +180 -0
- package/commonjs/src/webapi/models/main-source-file.model.js +132 -0
- package/commonjs/src/webapi/models/sample-files.model.js +60 -0
- package/commonjs/v1/cli.js +15 -0
- package/commonjs/v1/domain/class-model.js +106 -0
- package/commonjs/v1/domain/compose.model.js +74 -0
- package/commonjs/v1/domain/context.js +53 -0
- package/commonjs/v1/domain/devcontainer.model.js +116 -0
- package/commonjs/v1/domain/dockerfile.model.js +62 -0
- package/commonjs/v1/domain/feature.js +19 -0
- package/commonjs/v1/domain/import-map.js +74 -0
- package/commonjs/v1/domain/index.js +68 -0
- package/commonjs/v1/domain/prompt.js +45 -0
- package/commonjs/v1/domain/workflow.js +37 -0
- package/commonjs/v1/features/api-core/feature.js +103 -0
- package/commonjs/v1/features/api-core/hello-controller.model.js +100 -0
- package/commonjs/v1/features/api-core/main-ts.model.js +85 -0
- package/commonjs/v1/features/api-core/scaffold-files.template.js +158 -0
- package/commonjs/v1/features/auth0/auth0-cli.js +151 -0
- package/commonjs/v1/features/auth0/feature.js +187 -0
- package/commonjs/v1/features/auth0/models.js +14 -0
- package/commonjs/v1/features/auth0/prod-config.template.js +19 -0
- package/commonjs/v1/features/cli-core/feature.js +37 -0
- package/commonjs/v1/features/cli-core/scaffold-files.template.js +103 -0
- package/commonjs/v1/features/devcontainer/feature.js +38 -0
- package/commonjs/v1/features/finalize/feature.js +48 -0
- package/commonjs/v1/features/postgresql/feature.js +81 -0
- package/commonjs/v1/features/postgresql/models.js +14 -0
- package/commonjs/v1/features/postman/collection.template.js +80 -0
- package/commonjs/v1/features/postman/environment.template.js +24 -0
- package/commonjs/v1/features/postman/feature.js +192 -0
- package/commonjs/v1/features/typeorm/feature.js +66 -0
- package/commonjs/v1/features/typeorm/scaffold-files.template.js +80 -0
- package/commonjs/v1/scaffold.js +50 -0
- package/commonjs/v1/version.js +32 -0
- package/commonjs/v1/workflows/api.js +29 -0
- package/commonjs/v1/workflows/cli.js +19 -0
- package/es6/src/cli.js +26 -5
- package/es6/src/models/compose.model.js +77 -0
- package/es6/src/models/config-yaml.model.js +30 -0
- package/es6/src/models/const.js +19 -0
- package/es6/src/models/container-image.model.js +84 -0
- package/es6/src/models/dev-container.model.js +68 -0
- package/es6/src/models/env-file.model.js +29 -0
- package/es6/src/models/gitignore.model.js +22 -0
- package/es6/src/models/launch-json.model.js +42 -0
- package/es6/src/models/package-json.model.js +60 -0
- package/es6/src/models/project.model.js +111 -0
- package/es6/src/models/source-file.js +3 -0
- package/es6/src/models/tsconfig.model.js +24 -0
- package/es6/src/models/vscode-settings.model.js +21 -0
- package/es6/src/services/scaffold.service.js +52 -0
- package/es6/src/webapi/create-api.js +151 -0
- package/es6/src/webapi/features/auth.feature.js +115 -0
- package/es6/src/webapi/features/auth0-cli.js +116 -0
- package/es6/src/webapi/features/database.feature.js +141 -0
- package/es6/src/webapi/features/finalize.feature.js +36 -0
- package/es6/src/webapi/features/postman.feature.js +258 -0
- package/es6/src/webapi/models/api-package-json.model.js +52 -0
- package/es6/src/webapi/models/auth-config.model.js +19 -0
- package/es6/src/webapi/models/controller-source-file.model.js +171 -0
- package/es6/src/webapi/models/main-source-file.model.js +128 -0
- package/es6/src/webapi/models/sample-files.model.js +42 -0
- package/es6/v1/cli.js +11 -0
- package/es6/v1/domain/class-model.js +104 -0
- package/es6/v1/domain/compose.model.js +61 -0
- package/es6/v1/domain/context.js +37 -0
- package/es6/v1/domain/devcontainer.model.js +104 -0
- package/es6/v1/domain/dockerfile.model.js +52 -0
- package/es6/v1/domain/feature.js +9 -0
- package/es6/v1/domain/import-map.js +64 -0
- package/es6/v1/domain/index.js +11 -0
- package/es6/v1/domain/prompt.js +27 -0
- package/es6/v1/domain/workflow.js +24 -0
- package/es6/v1/features/api-core/feature.js +93 -0
- package/es6/v1/features/api-core/hello-controller.model.js +96 -0
- package/es6/v1/features/api-core/main-ts.model.js +74 -0
- package/es6/v1/features/api-core/scaffold-files.template.js +116 -0
- package/es6/v1/features/auth0/auth0-cli.js +116 -0
- package/es6/v1/features/auth0/feature.js +136 -0
- package/es6/v1/features/auth0/models.js +4 -0
- package/es6/v1/features/auth0/prod-config.template.js +9 -0
- package/es6/v1/features/cli-core/feature.js +27 -0
- package/es6/v1/features/cli-core/scaffold-files.template.js +73 -0
- package/es6/v1/features/devcontainer/feature.js +28 -0
- package/es6/v1/features/finalize/feature.js +38 -0
- package/es6/v1/features/postgresql/feature.js +71 -0
- package/es6/v1/features/postgresql/models.js +4 -0
- package/es6/v1/features/postman/collection.template.js +70 -0
- package/es6/v1/features/postman/environment.template.js +14 -0
- package/es6/v1/features/postman/feature.js +141 -0
- package/es6/v1/features/typeorm/feature.js +56 -0
- package/es6/v1/features/typeorm/scaffold-files.template.js +56 -0
- package/es6/v1/scaffold.js +40 -0
- package/es6/v1/version.js +22 -0
- package/es6/v1/workflows/api.js +25 -0
- package/es6/v1/workflows/cli.js +9 -0
- package/package.json +2 -2
- package/types/src/models/compose.model.d.ts +32 -0
- package/types/src/models/config-yaml.model.d.ts +16 -0
- package/types/src/models/const.d.ts +17 -0
- package/types/src/models/container-image.model.d.ts +15 -0
- package/types/src/models/dev-container.model.d.ts +21 -0
- package/types/src/models/env-file.model.d.ts +14 -0
- package/types/src/models/gitignore.model.d.ts +6 -0
- package/types/src/models/launch-json.model.d.ts +5 -0
- package/types/src/models/package-json.model.d.ts +18 -0
- package/types/src/models/project.model.d.ts +55 -0
- package/types/src/models/source-file.d.ts +11 -0
- package/types/src/models/tsconfig.model.d.ts +5 -0
- package/types/src/models/vscode-settings.model.d.ts +7 -0
- package/types/src/services/scaffold.service.d.ts +22 -0
- package/types/src/webapi/create-api.d.ts +7 -0
- package/types/src/webapi/features/auth.feature.d.ts +7 -0
- package/types/src/webapi/features/auth0-cli.d.ts +22 -0
- package/types/src/webapi/features/database.feature.d.ts +5 -0
- package/types/src/webapi/features/finalize.feature.d.ts +2 -0
- package/types/src/webapi/features/postman.feature.d.ts +7 -0
- package/types/src/webapi/models/api-package-json.model.d.ts +17 -0
- package/types/src/webapi/models/auth-config.model.d.ts +18 -0
- package/types/src/webapi/models/controller-source-file.model.d.ts +42 -0
- package/types/src/webapi/models/main-source-file.model.d.ts +36 -0
- package/types/src/webapi/models/sample-files.model.d.ts +7 -0
- package/types/v1/cli.d.ts +2 -0
- package/types/v1/domain/class-model.d.ts +70 -0
- package/types/v1/domain/compose.model.d.ts +25 -0
- package/types/v1/domain/context.d.ts +36 -0
- package/types/v1/domain/devcontainer.model.d.ts +35 -0
- package/types/v1/domain/dockerfile.model.d.ts +11 -0
- package/types/v1/domain/feature.d.ts +29 -0
- package/types/v1/domain/import-map.d.ts +24 -0
- package/types/v1/domain/index.d.ts +12 -0
- package/types/v1/domain/prompt.d.ts +2 -0
- package/types/v1/domain/workflow.d.ts +14 -0
- package/types/v1/features/api-core/feature.d.ts +2 -0
- package/types/v1/features/api-core/hello-controller.model.d.ts +9 -0
- package/types/v1/features/api-core/main-ts.model.d.ts +31 -0
- package/types/v1/features/api-core/scaffold-files.template.d.ts +10 -0
- package/types/v1/features/auth0/auth0-cli.d.ts +22 -0
- package/types/v1/features/auth0/feature.d.ts +2 -0
- package/types/v1/features/auth0/models.d.ts +5 -0
- package/types/v1/features/auth0/prod-config.template.d.ts +1 -0
- package/types/v1/features/cli-core/feature.d.ts +2 -0
- package/types/v1/features/cli-core/scaffold-files.template.d.ts +6 -0
- package/types/v1/features/devcontainer/feature.d.ts +2 -0
- package/types/v1/features/finalize/feature.d.ts +2 -0
- package/types/v1/features/postgresql/feature.d.ts +2 -0
- package/types/v1/features/postgresql/models.d.ts +6 -0
- package/types/v1/features/postman/collection.template.d.ts +1 -0
- package/types/v1/features/postman/environment.template.d.ts +6 -0
- package/types/v1/features/postman/feature.d.ts +2 -0
- package/types/v1/features/typeorm/feature.d.ts +2 -0
- package/types/v1/features/typeorm/scaffold-files.template.d.ts +9 -0
- package/types/v1/scaffold.d.ts +3 -0
- package/types/v1/version.d.ts +2 -0
- package/types/v1/workflows/api.d.ts +8 -0
- package/types/v1/workflows/cli.d.ts +1 -0
- package/commonjs/src/scaffold.js +0 -89
- package/commonjs/src/templates.js +0 -306
- package/es6/src/scaffold.js +0 -79
- package/es6/src/templates.js +0 -246
- package/types/src/scaffold.d.ts +0 -6
- package/types/src/templates.d.ts +0 -20
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { pick } from "../../../v1/domain/prompt.js";
|
|
3
|
+
import { CREATE_VERSION } from "../../../v1/version.js";
|
|
4
|
+
import { WELL_KNOWN_FILES } from "../../models/const.js";
|
|
5
|
+
import { WEBAPI_PROJECT_DIR } from "../create-api.js";
|
|
6
|
+
// Base config uses env-var references for production; the dev config section
|
|
7
|
+
// written below overrides only the concrete values needed locally.
|
|
8
|
+
const DATABASE_BASE_CONFIG_YAML = `database:
|
|
9
|
+
dataSources:
|
|
10
|
+
- name: default
|
|
11
|
+
provider: postgres
|
|
12
|
+
host: \${DB_HOST}
|
|
13
|
+
port: \${DB_PORT}
|
|
14
|
+
database: \${DB_NAME}
|
|
15
|
+
username: \${DB_USER}
|
|
16
|
+
password: \${DB_PASSWORD}
|
|
17
|
+
synchronize: false
|
|
18
|
+
seed: false
|
|
19
|
+
adminUser: \${DB_ADMIN_USER}
|
|
20
|
+
adminPassword: \${DB_ADMIN_PASSWORD}
|
|
21
|
+
`;
|
|
22
|
+
// Dev config only overrides what differs from base — credentials come from .env via env-var references.
|
|
23
|
+
const DATABASE_DEV_CONFIG_YAML = `database:
|
|
24
|
+
dataSources:
|
|
25
|
+
- host: postgres
|
|
26
|
+
synchronize: true
|
|
27
|
+
seed: true
|
|
28
|
+
`;
|
|
29
|
+
const SAMPLE_ENTITY_TS = `import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
|
30
|
+
import type { Entity as IEntity } from "@decohere/codex";
|
|
31
|
+
|
|
32
|
+
@Entity()
|
|
33
|
+
export class SampleEntity implements IEntity {
|
|
34
|
+
\t@PrimaryGeneratedColumn()
|
|
35
|
+
\tpublic id!: number;
|
|
36
|
+
|
|
37
|
+
\t@Column()
|
|
38
|
+
\tpublic name!: string;
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
const SAMPLE_REPOSITORY_TS = `import { injectable } from "@decohere/crucible/decorators";
|
|
42
|
+
import { injectUnitOfWork } from "@decohere/codex";
|
|
43
|
+
import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/codex-typeorm";
|
|
44
|
+
import { SampleEntity } from "../entities/sample.entity.js";
|
|
45
|
+
|
|
46
|
+
@injectable()
|
|
47
|
+
export class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {
|
|
48
|
+
\tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {
|
|
49
|
+
\t\tsuper(unitOfWork, SampleEntity);
|
|
50
|
+
\t}
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
async function getOptions(_workspace, cliOptions) {
|
|
54
|
+
if (cliOptions.databaseProvider != null) return {};
|
|
55
|
+
const choices = [
|
|
56
|
+
{
|
|
57
|
+
label: "none"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
label: "postgres/typeorm"
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
const selected = await pick("\n Database: ", choices, (c)=>c.label);
|
|
64
|
+
return {
|
|
65
|
+
databaseProvider: selected?.label ?? "none"
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function scaffold(workspace, options) {
|
|
69
|
+
if (options.databaseProvider !== "postgres/typeorm") return;
|
|
70
|
+
const name = workspace.name;
|
|
71
|
+
const password = randomBytes(16).toString("hex");
|
|
72
|
+
const db = `${name}_dev`;
|
|
73
|
+
const user = "postgres";
|
|
74
|
+
const devContainer = workspace.getModel(WELL_KNOWN_FILES.DEVCONTAINER_JSON);
|
|
75
|
+
const compose = workspace.getModel(WELL_KNOWN_FILES.DOCKER_COMPOSE);
|
|
76
|
+
// Add postgres service to compose
|
|
77
|
+
compose?.addService("postgres", {
|
|
78
|
+
image: "postgres:16",
|
|
79
|
+
restart: "unless-stopped",
|
|
80
|
+
environment: {
|
|
81
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: Docker Compose reads these from .env
|
|
82
|
+
POSTGRES_DB: "${POSTGRES_DB}",
|
|
83
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: Docker Compose reads these from .env
|
|
84
|
+
POSTGRES_USER: "${POSTGRES_USER}",
|
|
85
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: Docker Compose reads these from .env
|
|
86
|
+
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
|
|
87
|
+
},
|
|
88
|
+
ports: [
|
|
89
|
+
"5432:5432"
|
|
90
|
+
],
|
|
91
|
+
volumes: [
|
|
92
|
+
"postgres-data:/var/lib/postgresql/data"
|
|
93
|
+
]
|
|
94
|
+
}).addVolume("postgres-data");
|
|
95
|
+
compose?.addService("adminer", {
|
|
96
|
+
image: "adminer",
|
|
97
|
+
ports: [
|
|
98
|
+
"8080:8080"
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
// Add SQLTools extension for DB browsing in VS Code
|
|
102
|
+
devContainer?.addExtension("mtxr.sqltools");
|
|
103
|
+
// Wire up main.ts
|
|
104
|
+
workspace.getModel(WELL_KNOWN_FILES.MAIN_TS)?.addSideEffectImport("@decohere/codex-typeorm").addEntity({
|
|
105
|
+
className: "SampleEntity",
|
|
106
|
+
importPath: "./entities/sample.entity.js"
|
|
107
|
+
}).addRepository({
|
|
108
|
+
className: "SampleEntityRepository",
|
|
109
|
+
importPath: "./repositories/sample.repository.js"
|
|
110
|
+
});
|
|
111
|
+
// Add codex + typeorm deps to root package.json
|
|
112
|
+
workspace.getModel(WELL_KNOWN_FILES.PACKAGE_JSON)?.addDependency("@decohere/codex", CREATE_VERSION).addDependency("typeorm", "^0.3.28").addDependency("@decohere/codex-typeorm", CREATE_VERSION);
|
|
113
|
+
// Add codex deps to api package.json
|
|
114
|
+
workspace.getModel(WELL_KNOWN_FILES.API_PACKAGE_JSON)?.addDependency("@decohere/codex", CREATE_VERSION).addDependency("@decohere/codex-typeorm", CREATE_VERSION);
|
|
115
|
+
// Append database config sections
|
|
116
|
+
workspace.getModel(WELL_KNOWN_FILES.CONFIG_YAML)?.addSection(DATABASE_BASE_CONFIG_YAML);
|
|
117
|
+
workspace.getModel(WELL_KNOWN_FILES.CONFIG_DEV_YAML)?.addSection(DATABASE_DEV_CONFIG_YAML);
|
|
118
|
+
// Register entity and repository source files in the api project
|
|
119
|
+
workspace.getProject(WEBAPI_PROJECT_DIR)?.addFile({
|
|
120
|
+
files: ()=>[
|
|
121
|
+
{
|
|
122
|
+
filePath: "src/entities/sample.entity.ts",
|
|
123
|
+
content: SAMPLE_ENTITY_TS
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
filePath: "src/repositories/sample.repository.ts",
|
|
127
|
+
content: SAMPLE_REPOSITORY_TS
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
});
|
|
131
|
+
// .env at workspace root — mounted by compose via ../.env so both postgres
|
|
132
|
+
// and the devcontainer service can read credentials
|
|
133
|
+
compose?.addEnvFile("postgres", "../.env").addEnvFile("devcontainer", "../.env");
|
|
134
|
+
workspace.getModel(WELL_KNOWN_FILES.ENV_FILE)?.addEntry("POSTGRES_DB", db).addEntry("POSTGRES_USER", user).addEntry("POSTGRES_PASSWORD", password).addEntry("DB_HOST", "localhost").addEntry("DB_PORT", "5432").addEntry("DB_NAME", db).addEntry("DB_USER", user).addEntry("DB_PASSWORD", password).addEntry("DB_ADMIN_USER", user).addEntry("DB_ADMIN_PASSWORD", password);
|
|
135
|
+
}
|
|
136
|
+
export const DatabaseFeature = {
|
|
137
|
+
getOptions,
|
|
138
|
+
scaffold
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2RhdGFiYXNlLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi4vLi4vLi4vdjEvZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi4vLi4vLi4vdjEvdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEb2NrZXJDb21wb3NlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wb3NlLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEZXZDb250YWluZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2Rldi1jb250YWluZXIubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IFdFQkFQSV9QUk9KRUNUX0RJUiB9IGZyb20gXCIuLi9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4uL21vZGVscy9hcGktcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlT3B0aW9ucyA9IHtcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG59O1xuXG4vLyBCYXNlIGNvbmZpZyB1c2VzIGVudi12YXIgcmVmZXJlbmNlcyBmb3IgcHJvZHVjdGlvbjsgdGhlIGRldiBjb25maWcgc2VjdGlvblxuLy8gd3JpdHRlbiBiZWxvdyBvdmVycmlkZXMgb25seSB0aGUgY29uY3JldGUgdmFsdWVzIG5lZWRlZCBsb2NhbGx5LlxuY29uc3QgREFUQUJBU0VfQkFTRV9DT05GSUdfWUFNTCA9IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBuYW1lOiBkZWZhdWx0XG4gICAgICBwcm92aWRlcjogcG9zdGdyZXNcbiAgICAgIGhvc3Q6IFxcJHtEQl9IT1NUfVxuICAgICAgcG9ydDogXFwke0RCX1BPUlR9XG4gICAgICBkYXRhYmFzZTogXFwke0RCX05BTUV9XG4gICAgICB1c2VybmFtZTogXFwke0RCX1VTRVJ9XG4gICAgICBwYXNzd29yZDogXFwke0RCX1BBU1NXT1JEfVxuICAgICAgc3luY2hyb25pemU6IGZhbHNlXG4gICAgICBzZWVkOiBmYWxzZVxuICAgICAgYWRtaW5Vc2VyOiBcXCR7REJfQURNSU5fVVNFUn1cbiAgICAgIGFkbWluUGFzc3dvcmQ6IFxcJHtEQl9BRE1JTl9QQVNTV09SRH1cbmA7XG5cbi8vIERldiBjb25maWcgb25seSBvdmVycmlkZXMgd2hhdCBkaWZmZXJzIGZyb20gYmFzZSDigJQgY3JlZGVudGlhbHMgY29tZSBmcm9tIC5lbnYgdmlhIGVudi12YXIgcmVmZXJlbmNlcy5cbmNvbnN0IERBVEFCQVNFX0RFVl9DT05GSUdfWUFNTCA9IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBob3N0OiBwb3N0Z3Jlc1xuICAgICAgc3luY2hyb25pemU6IHRydWVcbiAgICAgIHNlZWQ6IHRydWVcbmA7XG5cbmNvbnN0IFNBTVBMRV9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIG5hbWUhOiBzdHJpbmc7XG59XG5gO1xuXG5jb25zdCBTQU1QTEVfUkVQT1NJVE9SWV9UUyA9IGBpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBpbmplY3RVbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleFwiO1xuaW1wb3J0IHsgVHlwZU9ybVJlcG9zaXRvcnksIFR5cGVPcm1Vbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXRpZXMvc2FtcGxlLmVudGl0eS5qc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5UmVwb3NpdG9yeSBleHRlbmRzIFR5cGVPcm1SZXBvc2l0b3J5PFNhbXBsZUVudGl0eT4ge1xuXFx0cHVibGljIGNvbnN0cnVjdG9yKEBpbmplY3RVbml0T2ZXb3JrKCkgdW5pdE9mV29yazogVHlwZU9ybVVuaXRPZldvcmspIHtcblxcdFxcdHN1cGVyKHVuaXRPZldvcmssIFNhbXBsZUVudGl0eSk7XG5cXHR9XG59XG5gO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHRfd29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxEYXRhYmFzZU9wdGlvbnM+LFxuKTogUHJvbWlzZTxQYXJ0aWFsPERhdGFiYXNlT3B0aW9ucz4+IHtcblx0aWYgKGNsaU9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFt7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCB9LCB7IGxhYmVsOiBcInBvc3RncmVzL3R5cGVvcm1cIiBhcyBjb25zdCB9XTtcblx0Y29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBEYXRhYmFzZTogXCIsIGNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblx0cmV0dXJuIHsgZGF0YWJhc2VQcm92aWRlcjogc2VsZWN0ZWQ/LmxhYmVsID8/IFwibm9uZVwiIH07XG59XG5cbmZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IERhdGFiYXNlT3B0aW9ucyk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5kYXRhYmFzZVByb3ZpZGVyICE9PSBcInBvc3RncmVzL3R5cGVvcm1cIikgcmV0dXJuO1xuXG5cdGNvbnN0IG5hbWUgPSB3b3Jrc3BhY2UubmFtZTtcblx0Y29uc3QgcGFzc3dvcmQgPSByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIik7XG5cdGNvbnN0IGRiID0gYCR7bmFtZX1fZGV2YDtcblx0Y29uc3QgdXNlciA9IFwicG9zdGdyZXNcIjtcblxuXHRjb25zdCBkZXZDb250YWluZXIgPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8RGV2Q29udGFpbmVyPihXRUxMX0tOT1dOX0ZJTEVTLkRFVkNPTlRBSU5FUl9KU09OKTtcblx0Y29uc3QgY29tcG9zZSA9IHdvcmtzcGFjZS5nZXRNb2RlbDxEb2NrZXJDb21wb3NlPihXRUxMX0tOT1dOX0ZJTEVTLkRPQ0tFUl9DT01QT1NFKTtcblxuXHQvLyBBZGQgcG9zdGdyZXMgc2VydmljZSB0byBjb21wb3NlXG5cdGNvbXBvc2Vcblx0XHQ/LmFkZFNlcnZpY2UoXCJwb3N0Z3Jlc1wiLCB7XG5cdFx0XHRpbWFnZTogXCJwb3N0Z3JlczoxNlwiLFxuXHRcdFx0cmVzdGFydDogXCJ1bmxlc3Mtc3RvcHBlZFwiLFxuXHRcdFx0ZW52aXJvbm1lbnQ6IHtcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogRG9ja2VyIENvbXBvc2UgcmVhZHMgdGhlc2UgZnJvbSAuZW52XG5cdFx0XHRcdFBPU1RHUkVTX0RCOiBcIiR7UE9TVEdSRVNfREJ9XCIsXG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IERvY2tlciBDb21wb3NlIHJlYWRzIHRoZXNlIGZyb20gLmVudlxuXHRcdFx0XHRQT1NUR1JFU19VU0VSOiBcIiR7UE9TVEdSRVNfVVNFUn1cIixcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogRG9ja2VyIENvbXBvc2UgcmVhZHMgdGhlc2UgZnJvbSAuZW52XG5cdFx0XHRcdFBPU1RHUkVTX1BBU1NXT1JEOiBcIiR7UE9TVEdSRVNfUEFTU1dPUkR9XCIsXG5cdFx0XHR9LFxuXHRcdFx0cG9ydHM6IFtcIjU0MzI6NTQzMlwiXSxcblx0XHRcdHZvbHVtZXM6IFtcInBvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhXCJdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcInBvc3RncmVzLWRhdGFcIik7XG5cblx0Y29tcG9zZT8uYWRkU2VydmljZShcImFkbWluZXJcIiwge1xuXHRcdGltYWdlOiBcImFkbWluZXJcIixcblx0XHRwb3J0czogW1wiODA4MDo4MDgwXCJdLFxuXHR9KTtcblxuXHQvLyBBZGQgU1FMVG9vbHMgZXh0ZW5zaW9uIGZvciBEQiBicm93c2luZyBpbiBWUyBDb2RlXG5cdGRldkNvbnRhaW5lcj8uYWRkRXh0ZW5zaW9uKFwibXR4ci5zcWx0b29sc1wiKTtcblxuXHQvLyBXaXJlIHVwIG1haW4udHNcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPE1haW5Tb3VyY2VGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFMpXG5cdFx0Py5hZGRTaWRlRWZmZWN0SW1wb3J0KFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIilcblx0XHQuYWRkRW50aXR5KHsgY2xhc3NOYW1lOiBcIlNhbXBsZUVudGl0eVwiLCBpbXBvcnRQYXRoOiBcIi4vZW50aXRpZXMvc2FtcGxlLmVudGl0eS5qc1wiIH0pXG5cdFx0LmFkZFJlcG9zaXRvcnkoe1xuXHRcdFx0Y2xhc3NOYW1lOiBcIlNhbXBsZUVudGl0eVJlcG9zaXRvcnlcIixcblx0XHRcdGltcG9ydFBhdGg6IFwiLi9yZXBvc2l0b3JpZXMvc2FtcGxlLnJlcG9zaXRvcnkuanNcIixcblx0XHR9KTtcblxuXHQvLyBBZGQgY29kZXggKyB0eXBlb3JtIGRlcHMgdG8gcm9vdCBwYWNrYWdlLmpzb25cblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPFBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLlBBQ0tBR0VfSlNPTilcblx0XHQ/LmFkZERlcGVuZGVuY3koXCJAZGVjb2hlcmUvY29kZXhcIiwgQ1JFQVRFX1ZFUlNJT04pXG5cdFx0LmFkZERlcGVuZGVuY3koXCJ0eXBlb3JtXCIsIFwiXjAuMy4yOFwiKVxuXHRcdC5hZGREZXBlbmRlbmN5KFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIiwgQ1JFQVRFX1ZFUlNJT04pO1xuXG5cdC8vIEFkZCBjb2RleCBkZXBzIHRvIGFwaSBwYWNrYWdlLmpzb25cblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPEFwaVBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLkFQSV9QQUNLQUdFX0pTT04pXG5cdFx0Py5hZGREZXBlbmRlbmN5KFwiQGRlY29oZXJlL2NvZGV4XCIsIENSRUFURV9WRVJTSU9OKVxuXHRcdC5hZGREZXBlbmRlbmN5KFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIiwgQ1JFQVRFX1ZFUlNJT04pO1xuXG5cdC8vIEFwcGVuZCBkYXRhYmFzZSBjb25maWcgc2VjdGlvbnNcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPENvbmZpZ1lhbWw+KFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwpXG5cdFx0Py5hZGRTZWN0aW9uKERBVEFCQVNFX0JBU0VfQ09ORklHX1lBTUwpO1xuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8Q29uZmlnWWFtbD4oV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwpXG5cdFx0Py5hZGRTZWN0aW9uKERBVEFCQVNFX0RFVl9DT05GSUdfWUFNTCk7XG5cblx0Ly8gUmVnaXN0ZXIgZW50aXR5IGFuZCByZXBvc2l0b3J5IHNvdXJjZSBmaWxlcyBpbiB0aGUgYXBpIHByb2plY3Rcblx0d29ya3NwYWNlLmdldFByb2plY3QoV0VCQVBJX1BST0pFQ1RfRElSKT8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwic3JjL2VudGl0aWVzL3NhbXBsZS5lbnRpdHkudHNcIixcblx0XHRcdFx0Y29udGVudDogU0FNUExFX0VOVElUWV9UUyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9yZXBvc2l0b3JpZXMvc2FtcGxlLnJlcG9zaXRvcnkudHNcIixcblx0XHRcdFx0Y29udGVudDogU0FNUExFX1JFUE9TSVRPUllfVFMsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIC5lbnYgYXQgd29ya3NwYWNlIHJvb3Qg4oCUIG1vdW50ZWQgYnkgY29tcG9zZSB2aWEgLi4vLmVudiBzbyBib3RoIHBvc3RncmVzXG5cdC8vIGFuZCB0aGUgZGV2Y29udGFpbmVyIHNlcnZpY2UgY2FuIHJlYWQgY3JlZGVudGlhbHNcblx0Y29tcG9zZT8uYWRkRW52RmlsZShcInBvc3RncmVzXCIsIFwiLi4vLmVudlwiKS5hZGRFbnZGaWxlKFwiZGV2Y29udGFpbmVyXCIsIFwiLi4vLmVudlwiKTtcblxuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSlcblx0XHQ/LmFkZEVudHJ5KFwiUE9TVEdSRVNfREJcIiwgZGIpXG5cdFx0LmFkZEVudHJ5KFwiUE9TVEdSRVNfVVNFUlwiLCB1c2VyKVxuXHRcdC5hZGRFbnRyeShcIlBPU1RHUkVTX1BBU1NXT1JEXCIsIHBhc3N3b3JkKVxuXHRcdC5hZGRFbnRyeShcIkRCX0hPU1RcIiwgXCJsb2NhbGhvc3RcIilcblx0XHQuYWRkRW50cnkoXCJEQl9QT1JUXCIsIFwiNTQzMlwiKVxuXHRcdC5hZGRFbnRyeShcIkRCX05BTUVcIiwgZGIpXG5cdFx0LmFkZEVudHJ5KFwiREJfVVNFUlwiLCB1c2VyKVxuXHRcdC5hZGRFbnRyeShcIkRCX1BBU1NXT1JEXCIsIHBhc3N3b3JkKVxuXHRcdC5hZGRFbnRyeShcIkRCX0FETUlOX1VTRVJcIiwgdXNlcilcblx0XHQuYWRkRW50cnkoXCJEQl9BRE1JTl9QQVNTV09SRFwiLCBwYXNzd29yZCk7XG59XG5cbmV4cG9ydCBjb25zdCBEYXRhYmFzZUZlYXR1cmU6IEZlYXR1cmU8RGF0YWJhc2VPcHRpb25zPiA9IHsgZ2V0T3B0aW9ucywgc2NhZmZvbGQgfTtcbiJdLCJuYW1lcyI6WyJyYW5kb21CeXRlcyIsInBpY2siLCJDUkVBVEVfVkVSU0lPTiIsIldFTExfS05PV05fRklMRVMiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJEQVRBQkFTRV9CQVNFX0NPTkZJR19ZQU1MIiwiREFUQUJBU0VfREVWX0NPTkZJR19ZQU1MIiwiU0FNUExFX0VOVElUWV9UUyIsIlNBTVBMRV9SRVBPU0lUT1JZX1RTIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwiZGF0YWJhc2VQcm92aWRlciIsImNob2ljZXMiLCJsYWJlbCIsInNlbGVjdGVkIiwiYyIsInNjYWZmb2xkIiwid29ya3NwYWNlIiwib3B0aW9ucyIsIm5hbWUiLCJwYXNzd29yZCIsInRvU3RyaW5nIiwiZGIiLCJ1c2VyIiwiZGV2Q29udGFpbmVyIiwiZ2V0TW9kZWwiLCJERVZDT05UQUlORVJfSlNPTiIsImNvbXBvc2UiLCJET0NLRVJfQ09NUE9TRSIsImFkZFNlcnZpY2UiLCJpbWFnZSIsInJlc3RhcnQiLCJlbnZpcm9ubWVudCIsIlBPU1RHUkVTX0RCIiwiUE9TVEdSRVNfVVNFUiIsIlBPU1RHUkVTX1BBU1NXT1JEIiwicG9ydHMiLCJ2b2x1bWVzIiwiYWRkVm9sdW1lIiwiYWRkRXh0ZW5zaW9uIiwiTUFJTl9UUyIsImFkZFNpZGVFZmZlY3RJbXBvcnQiLCJhZGRFbnRpdHkiLCJjbGFzc05hbWUiLCJpbXBvcnRQYXRoIiwiYWRkUmVwb3NpdG9yeSIsIlBBQ0tBR0VfSlNPTiIsImFkZERlcGVuZGVuY3kiLCJBUElfUEFDS0FHRV9KU09OIiwiQ09ORklHX1lBTUwiLCJhZGRTZWN0aW9uIiwiQ09ORklHX0RFVl9ZQU1MIiwiZ2V0UHJvamVjdCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsImFkZEVudkZpbGUiLCJFTlZfRklMRSIsImFkZEVudHJ5IiwiRGF0YWJhc2VGZWF0dXJlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLFFBQVEsY0FBYztBQUMxQyxTQUFTQyxJQUFJLFFBQVEsK0JBQStCO0FBQ3BELFNBQVNDLGNBQWMsUUFBUSx5QkFBeUI7QUFHeEQsU0FBU0MsZ0JBQWdCLFFBQVEsd0JBQXdCO0FBTXpELFNBQVNDLGtCQUFrQixRQUFRLG1CQUFtQjtBQVF0RCw2RUFBNkU7QUFDN0Us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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { detectPackageManager, promptForPackageManager } from "@decohere/nexus/interop";
|
|
2
|
+
import { ask } from "../../../v1/domain/prompt.js";
|
|
3
|
+
// State resolved during scaffold(), consumed by finalize().
|
|
4
|
+
let _pm = null;
|
|
5
|
+
let _shouldInstall = true;
|
|
6
|
+
async function getOptions(_workspace, _cliOptions) {
|
|
7
|
+
return {};
|
|
8
|
+
}
|
|
9
|
+
async function scaffold(workspace, _options) {
|
|
10
|
+
_pm = detectPackageManager(workspace.targetDir) ?? await promptForPackageManager();
|
|
11
|
+
const answer = await ask("\nInstall dependencies now? [yes/no] (yes): ", "yes");
|
|
12
|
+
_shouldInstall = answer.toLowerCase() !== "no";
|
|
13
|
+
}
|
|
14
|
+
async function finalize(workspace, _options) {
|
|
15
|
+
const pm = _pm;
|
|
16
|
+
if (_shouldInstall) {
|
|
17
|
+
console.log(`\nScaffolded ${workspace.name}. Installing dependencies...\n`);
|
|
18
|
+
await pm.install({
|
|
19
|
+
cwd: workspace.targetDir
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
console.log(`\nDone! ${_shouldInstall ? "Next" : "To get started:"} steps:\n`);
|
|
23
|
+
console.log(` cd ${workspace.name}`);
|
|
24
|
+
if (!_shouldInstall) {
|
|
25
|
+
console.log(` ${pm.name} install`);
|
|
26
|
+
}
|
|
27
|
+
console.log(" pnpm build # forge build");
|
|
28
|
+
console.log(" pnpm dev # flux serve\n");
|
|
29
|
+
}
|
|
30
|
+
export const FinalizeFeature = {
|
|
31
|
+
getOptions,
|
|
32
|
+
scaffold,
|
|
33
|
+
finalize
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2sgfSBmcm9tIFwiLi4vLi4vLi4vdjEvZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdF9jbGlPcHRpb25zOiBvYmplY3QsXG4pOiBQcm9taXNlPG9iamVjdD4ge1xuXHRyZXR1cm4ge307XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIF9vcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0X3BtID0gZGV0ZWN0UGFja2FnZU1hbmFnZXIod29ya3NwYWNlLnRhcmdldERpcikgPz8gKGF3YWl0IHByb21wdEZvclBhY2thZ2VNYW5hZ2VyKCkpO1xuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBhc2soXCJcXG5JbnN0YWxsIGRlcGVuZGVuY2llcyBub3c/IFt5ZXMvbm9dICh5ZXMpOiBcIiwgXCJ5ZXNcIik7XG5cdF9zaG91bGRJbnN0YWxsID0gYW5zd2VyLnRvTG93ZXJDYXNlKCkgIT09IFwibm9cIjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemUod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgX29wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBwbSA9IF9wbSE7XG5cdGlmIChfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnNvbGUubG9nKGBcXG5TY2FmZm9sZGVkICR7d29ya3NwYWNlLm5hbWV9LiBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcy4uLlxcbmApO1xuXHRcdGF3YWl0IHBtLmluc3RhbGwoeyBjd2Q6IHdvcmtzcGFjZS50YXJnZXREaXIgfSk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhgXFxuRG9uZSEgJHtfc2hvdWxkSW5zdGFsbCA/IFwiTmV4dFwiIDogXCJUbyBnZXQgc3RhcnRlZDpcIn0gc3RlcHM6XFxuYCk7XG5cdGNvbnNvbGUubG9nKGAgIGNkICR7d29ya3NwYWNlLm5hbWV9YCk7XG5cdGlmICghX3Nob3VsZEluc3RhbGwpIHtcblx0XHRjb25zb2xlLmxvZyhgICAke3BtLm5hbWV9IGluc3RhbGxgKTtcblx0fVxuXHRjb25zb2xlLmxvZyhcIiAgcG5wbSBidWlsZCAgICAgIyBmb3JnZSBidWlsZFwiKTtcblx0Y29uc29sZS5sb2coXCIgIHBucG0gZGV2ICAgICAgICMgZmx1eCBzZXJ2ZVxcblwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbmFsaXplRmVhdHVyZTogRmVhdHVyZSA9IHsgZ2V0T3B0aW9ucywgc2NhZmZvbGQsIGZpbmFsaXplIH07XG4iXSwibmFtZXMiOlsiZGV0ZWN0UGFja2FnZU1hbmFnZXIiLCJwcm9tcHRGb3JQYWNrYWdlTWFuYWdlciIsImFzayIsIl9wbSIsIl9zaG91bGRJbnN0YWxsIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJfY2xpT3B0aW9ucyIsInNjYWZmb2xkIiwid29ya3NwYWNlIiwiX29wdGlvbnMiLCJ0YXJnZXREaXIiLCJhbnN3ZXIiLCJ0b0xvd2VyQ2FzZSIsImZpbmFsaXplIiwicG0iLCJjb25zb2xlIiwibG9nIiwibmFtZSIsImluc3RhbGwiLCJjd2QiLCJGaW5hbGl6ZUZlYXR1cmUiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLG9CQUFvQixFQUFFQyx1QkFBdUIsUUFBUSwwQkFBMEI7QUFDeEYsU0FBU0MsR0FBRyxRQUFRLCtCQUErQjtBQUluRCw0REFBNEQ7QUFDNUQsSUFBSUMsTUFBNkI7QUFDakMsSUFBSUMsaUJBQWlCO0FBRXJCLGVBQWVDLFdBQ2RDLFVBQTZCLEVBQzdCQyxXQUFtQjtJQUVuQixPQUFPLENBQUM7QUFDVDtBQUVBLGVBQWVDLFNBQVNDLFNBQTRCLEVBQUVDLFFBQWdCO0lBQ3JFUCxNQUFNSCxxQkFBcUJTLFVBQVVFLFNBQVMsS0FBTSxNQUFNVjtJQUMxRCxNQUFNVyxTQUFTLE1BQU1WLElBQUksZ0RBQWdEO0lBQ3pFRSxpQkFBaUJRLE9BQU9DLFdBQVcsT0FBTztBQUMzQztBQUVBLGVBQWVDLFNBQVNMLFNBQTRCLEVBQUVDLFFBQWdCO0lBQ3JFLE1BQU1LLEtBQUtaO0lBQ1gsSUFBSUMsZ0JBQWdCO1FBQ25CWSxRQUFRQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUVSLFVBQVVTLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztRQUMxRSxNQUFNSCxHQUFHSSxPQUFPLENBQUM7WUFBRUMsS0FBS1gsVUFBVUUsU0FBUztRQUFDO0lBQzdDO0lBRUFLLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRWIsaUJBQWlCLFNBQVMsa0JBQWtCLFNBQVMsQ0FBQztJQUM3RVksUUFBUUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFUixVQUFVUyxJQUFJLEVBQUU7SUFDcEMsSUFBSSxDQUFDZCxnQkFBZ0I7UUFDcEJZLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRUYsR0FBR0csSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNuQztJQUNBRixRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0FBQ2I7QUFFQSxPQUFPLE1BQU1JLGtCQUEyQjtJQUFFaEI7SUFBWUc7SUFBVU07QUFBUyxFQUFFIn0=
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { pick } from "../../../v1/domain/prompt.js";
|
|
2
|
+
import { WELL_KNOWN_FILES } from "../../models/const.js";
|
|
3
|
+
import * as auth0Cli from "./auth0-cli.js";
|
|
4
|
+
async function getOptions(_workspace, cliOptions) {
|
|
5
|
+
if (cliOptions.postmanProvider != null) return {};
|
|
6
|
+
const choices = [
|
|
7
|
+
{
|
|
8
|
+
label: "none",
|
|
9
|
+
description: "skip"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
label: "local",
|
|
13
|
+
description: "write collection + environment files"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
label: "api",
|
|
17
|
+
description: "write files and upload to Postman.com"
|
|
18
|
+
}
|
|
19
|
+
];
|
|
20
|
+
const selected = await pick("\n Postman: ", choices, (c)=>`${c.label} — ${c.description}`);
|
|
21
|
+
const provider = selected?.label ?? "none";
|
|
22
|
+
if (provider === "none") return {
|
|
23
|
+
postmanProvider: "none"
|
|
24
|
+
};
|
|
25
|
+
if (provider === "local") return {
|
|
26
|
+
postmanProvider: "local"
|
|
27
|
+
};
|
|
28
|
+
// api: collect API key + workspace selection
|
|
29
|
+
const apiKey = process.env.POSTMAN_API_KEY ?? await import("../../../v1/domain/prompt.js").then((m)=>m.ask("\n Postman API key (app.getpostman.com/settings/me/api-keys): "));
|
|
30
|
+
const headers = {
|
|
31
|
+
"X-Api-Key": apiKey,
|
|
32
|
+
"Content-Type": "application/json"
|
|
33
|
+
};
|
|
34
|
+
const wsRes = await fetch("https://api.getpostman.com/workspaces", {
|
|
35
|
+
headers
|
|
36
|
+
});
|
|
37
|
+
if (!wsRes.ok) {
|
|
38
|
+
console.error("\n Postman API key invalid — falling back to local files.");
|
|
39
|
+
return {
|
|
40
|
+
postmanProvider: "local"
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const { workspaces } = await wsRes.json();
|
|
44
|
+
const wsChoices = [
|
|
45
|
+
{
|
|
46
|
+
label: "<new workspace>",
|
|
47
|
+
id: null
|
|
48
|
+
},
|
|
49
|
+
...workspaces.map((w)=>({
|
|
50
|
+
label: `${w.name} (${w.type})`,
|
|
51
|
+
id: w.id
|
|
52
|
+
}))
|
|
53
|
+
];
|
|
54
|
+
const wsPicked = await pick("\n Postman workspace: ", wsChoices, (c)=>c.label);
|
|
55
|
+
let workspaceId;
|
|
56
|
+
if (!wsPicked || wsPicked.id === null) {
|
|
57
|
+
const { ask } = await import("../../../v1/domain/prompt.js");
|
|
58
|
+
const wsName = await ask(` Workspace name: `);
|
|
59
|
+
const createRes = await fetch("https://api.getpostman.com/workspaces", {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers,
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
workspace: {
|
|
64
|
+
name: wsName,
|
|
65
|
+
type: "personal"
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
const { workspace: ws } = await createRes.json();
|
|
70
|
+
workspaceId = ws.id;
|
|
71
|
+
console.log(` ✓ Workspace created: ${wsName}`);
|
|
72
|
+
} else {
|
|
73
|
+
workspaceId = wsPicked.id;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
postmanProvider: "api",
|
|
77
|
+
apiKey,
|
|
78
|
+
workspaceId
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function buildCollection(projectName, auth) {
|
|
82
|
+
const authObj = auth?.auth0Domain ? {
|
|
83
|
+
type: "oauth2",
|
|
84
|
+
oauth2: [
|
|
85
|
+
{
|
|
86
|
+
key: "grant_type",
|
|
87
|
+
value: "authorization_code_with_pkce",
|
|
88
|
+
type: "string"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
key: "authUrl",
|
|
92
|
+
value: "https://{{auth0Domain}}/authorize?audience={{auth0Audience}}",
|
|
93
|
+
type: "string"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
key: "accessTokenUrl",
|
|
97
|
+
value: "https://{{auth0Domain}}/oauth/token",
|
|
98
|
+
type: "string"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: "clientId",
|
|
102
|
+
value: "{{auth0ClientId}}",
|
|
103
|
+
type: "string"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
key: "scope",
|
|
107
|
+
value: "openid profile email",
|
|
108
|
+
type: "string"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
key: "addTokenTo",
|
|
112
|
+
value: "header",
|
|
113
|
+
type: "string"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
key: "challengeAlgorithm",
|
|
117
|
+
value: "S256",
|
|
118
|
+
type: "string"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
} : undefined;
|
|
122
|
+
return {
|
|
123
|
+
info: {
|
|
124
|
+
name: `${projectName} WebAPI`,
|
|
125
|
+
schema: "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
126
|
+
},
|
|
127
|
+
...authObj ? {
|
|
128
|
+
auth: authObj
|
|
129
|
+
} : {},
|
|
130
|
+
item: [
|
|
131
|
+
{
|
|
132
|
+
name: "Hello",
|
|
133
|
+
request: {
|
|
134
|
+
method: "GET",
|
|
135
|
+
url: {
|
|
136
|
+
raw: "{{baseUrl}}/hello",
|
|
137
|
+
host: [
|
|
138
|
+
"{{baseUrl}}"
|
|
139
|
+
],
|
|
140
|
+
path: [
|
|
141
|
+
"hello"
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function buildEnvironmentYaml(name, auth) {
|
|
150
|
+
const auth0Section = auth?.auth0Domain ? [
|
|
151
|
+
" - key: auth0Domain",
|
|
152
|
+
` value: ${auth.auth0Domain}`,
|
|
153
|
+
" - key: auth0Audience",
|
|
154
|
+
` value: '${auth.auth0Audience ?? ""}'`,
|
|
155
|
+
" - key: auth0ClientId",
|
|
156
|
+
` value: '${auth.auth0ClientId ?? ""}'`,
|
|
157
|
+
" description: Client ID of the Auth0 SPA application used by Postman for PKCE authentication"
|
|
158
|
+
].join("\n") + "\n" : "";
|
|
159
|
+
return `name: ${name}\nvalues:\n - key: baseUrl\n value: 'http://localhost:3000'\n${auth0Section}`;
|
|
160
|
+
}
|
|
161
|
+
async function scaffold(workspace, options) {
|
|
162
|
+
if (options.postmanProvider === "none") return;
|
|
163
|
+
const authConfigModel = workspace.getModel(WELL_KNOWN_FILES.AUTH_CONFIG);
|
|
164
|
+
const authCfg = authConfigModel?.config;
|
|
165
|
+
let spaClientId;
|
|
166
|
+
if (options.postmanProvider === "api" && options.apiKey && authCfg?.issuerBaseUrl) {
|
|
167
|
+
try {
|
|
168
|
+
const app = auth0Cli.createSpaApp(`${workspace.name} Postman`, "https://oauth.pstmn.io/v1/callback");
|
|
169
|
+
spaClientId = app.client_id;
|
|
170
|
+
console.log(" ✓ Auth0 SPA app created for Postman PKCE");
|
|
171
|
+
} catch {
|
|
172
|
+
console.error(" ✗ Failed to create Auth0 SPA app — continuing without it.");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const auth0Env = authCfg?.issuerBaseUrl ? {
|
|
176
|
+
auth0Domain: authCfg.issuerBaseUrl.replace(/^https?:\/\//, ""),
|
|
177
|
+
auth0Audience: authCfg.audience,
|
|
178
|
+
auth0ClientId: spaClientId
|
|
179
|
+
} : undefined;
|
|
180
|
+
const projectName = workspace.name;
|
|
181
|
+
const collection = buildCollection(projectName, auth0Env);
|
|
182
|
+
const envYaml = buildEnvironmentYaml(`${projectName} — Local`, auth0Env);
|
|
183
|
+
workspace.addFile({
|
|
184
|
+
files: ()=>[
|
|
185
|
+
{
|
|
186
|
+
filePath: `postman/environments/${projectName} \u2014 Local.environment.yaml`,
|
|
187
|
+
content: envYaml
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
filePath: `postman/collections/${projectName}.postman_collection.json`,
|
|
191
|
+
content: `${JSON.stringify(collection, null, 2)}\n`
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
if (options.postmanProvider === "api" && options.apiKey) {
|
|
196
|
+
const headers = {
|
|
197
|
+
"X-Api-Key": options.apiKey,
|
|
198
|
+
"Content-Type": "application/json"
|
|
199
|
+
};
|
|
200
|
+
const colRes = await fetch(`https://api.getpostman.com/collections?workspace=${options.workspaceId}`, {
|
|
201
|
+
method: "POST",
|
|
202
|
+
headers,
|
|
203
|
+
body: JSON.stringify({
|
|
204
|
+
collection
|
|
205
|
+
})
|
|
206
|
+
});
|
|
207
|
+
if (colRes.ok) {
|
|
208
|
+
console.log(" ✓ Postman collection uploaded");
|
|
209
|
+
} else {
|
|
210
|
+
console.error(" ✗ Failed to upload Postman collection");
|
|
211
|
+
}
|
|
212
|
+
const envVars = [
|
|
213
|
+
{
|
|
214
|
+
key: "baseUrl",
|
|
215
|
+
value: "http://localhost:3000",
|
|
216
|
+
enabled: true
|
|
217
|
+
},
|
|
218
|
+
...auth0Env?.auth0Domain ? [
|
|
219
|
+
{
|
|
220
|
+
key: "auth0Domain",
|
|
221
|
+
value: auth0Env.auth0Domain,
|
|
222
|
+
enabled: true
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
key: "auth0Audience",
|
|
226
|
+
value: auth0Env.auth0Audience ?? "",
|
|
227
|
+
enabled: true
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
key: "auth0ClientId",
|
|
231
|
+
value: auth0Env.auth0ClientId ?? "",
|
|
232
|
+
enabled: true
|
|
233
|
+
}
|
|
234
|
+
] : []
|
|
235
|
+
];
|
|
236
|
+
const envRes = await fetch(`https://api.getpostman.com/environments?workspace=${options.workspaceId}`, {
|
|
237
|
+
method: "POST",
|
|
238
|
+
headers,
|
|
239
|
+
body: JSON.stringify({
|
|
240
|
+
environment: {
|
|
241
|
+
name: `${projectName} — Local`,
|
|
242
|
+
values: envVars
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
});
|
|
246
|
+
if (envRes.ok) {
|
|
247
|
+
console.log(" ✓ Postman environment uploaded");
|
|
248
|
+
} else {
|
|
249
|
+
console.error(" ✗ Failed to upload Postman environment");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
export const PostmanFeature = {
|
|
254
|
+
getOptions,
|
|
255
|
+
scaffold
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwaWNrIH0gZnJvbSBcIi4uLy4uLy4uL3YxL2RvbWFpbi9wcm9tcHQuanNcIjtcbmltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2NhZmZvbGQuc2VydmljZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuZXhwb3J0IHR5cGUgUG9zdG1hbk9wdGlvbnMgPSB7XG5cdHBvc3RtYW5Qcm92aWRlcj86IFwiYXBpXCIgfCBcImxvY2FsXCIgfCBcIm5vbmVcIjtcblx0YXBpS2V5Pzogc3RyaW5nO1xuXHR3b3Jrc3BhY2VJZD86IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnMoXG5cdF93b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBQYXJ0aWFsPFBvc3RtYW5PcHRpb25zPixcbik6IFByb21pc2U8UGFydGlhbDxQb3N0bWFuT3B0aW9ucz4+IHtcblx0aWYgKGNsaU9wdGlvbnMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHJldHVybiB7fTtcblxuXHRjb25zdCBjaG9pY2VzID0gW1xuXHRcdHsgbGFiZWw6IFwibm9uZVwiIGFzIGNvbnN0LCBkZXNjcmlwdGlvbjogXCJza2lwXCIgfSxcblx0XHR7IGxhYmVsOiBcImxvY2FsXCIgYXMgY29uc3QsIGRlc2NyaXB0aW9uOiBcIndyaXRlIGNvbGxlY3Rpb24gKyBlbnZpcm9ubWVudCBmaWxlc1wiIH0sXG5cdFx0eyBsYWJlbDogXCJhcGlcIiBhcyBjb25zdCwgZGVzY3JpcHRpb246IFwid3JpdGUgZmlsZXMgYW5kIHVwbG9hZCB0byBQb3N0bWFuLmNvbVwiIH0sXG5cdF07XG5cdGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgcGljayhcblx0XHRcIlxcbiAgUG9zdG1hbjogXCIsXG5cdFx0Y2hvaWNlcyxcblx0XHQoYykgPT4gYCR7Yy5sYWJlbH0g4oCUICR7Yy5kZXNjcmlwdGlvbn1gLFxuXHQpO1xuXHRjb25zdCBwcm92aWRlciA9IHNlbGVjdGVkPy5sYWJlbCA/PyBcIm5vbmVcIjtcblxuXHRpZiAocHJvdmlkZXIgPT09IFwibm9uZVwiKSByZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwibm9uZVwiIH07XG5cdGlmIChwcm92aWRlciA9PT0gXCJsb2NhbFwiKSByZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwibG9jYWxcIiB9O1xuXG5cdC8vIGFwaTogY29sbGVjdCBBUEkga2V5ICsgd29ya3NwYWNlIHNlbGVjdGlvblxuXHRjb25zdCBhcGlLZXkgPVxuXHRcdHByb2Nlc3MuZW52LlBPU1RNQU5fQVBJX0tFWSA/P1xuXHRcdChhd2FpdCBpbXBvcnQoXCIuLi8uLi8uLi92MS9kb21haW4vcHJvbXB0LmpzXCIpLnRoZW4oKG0pID0+XG5cdFx0XHRtLmFzayhcIlxcbiAgUG9zdG1hbiBBUEkga2V5IChhcHAuZ2V0cG9zdG1hbi5jb20vc2V0dGluZ3MvbWUvYXBpLWtleXMpOiBcIiksXG5cdFx0KSk7XG5cblx0Y29uc3QgaGVhZGVycyA9IHsgXCJYLUFwaS1LZXlcIjogYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXHRjb25zdCB3c1JlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7IGhlYWRlcnMgfSk7XG5cblx0aWYgKCF3c1Jlcy5vaykge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIFBvc3RtYW4gQVBJIGtleSBpbnZhbGlkIOKAlCBmYWxsaW5nIGJhY2sgdG8gbG9jYWwgZmlsZXMuXCIpO1xuXHRcdHJldHVybiB7IHBvc3RtYW5Qcm92aWRlcjogXCJsb2NhbFwiIH07XG5cdH1cblxuXHRjb25zdCB7IHdvcmtzcGFjZXMgfSA9IChhd2FpdCB3c1Jlcy5qc29uKCkpIGFzIHtcblx0XHR3b3Jrc3BhY2VzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nIH0+O1xuXHR9O1xuXG5cdHR5cGUgV3NDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHdzQ2hvaWNlczogV3NDaG9pY2VbXSA9IFtcblx0XHR7IGxhYmVsOiBcIjxuZXcgd29ya3NwYWNlPlwiLCBpZDogbnVsbCB9LFxuXHRcdC4uLndvcmtzcGFjZXMubWFwKCh3KSA9PiAoeyBsYWJlbDogYCR7dy5uYW1lfSAoJHt3LnR5cGV9KWAsIGlkOiB3LmlkIH0pKSxcblx0XTtcblxuXHRjb25zdCB3c1BpY2tlZCA9IGF3YWl0IHBpY2soXCJcXG4gIFBvc3RtYW4gd29ya3NwYWNlOiBcIiwgd3NDaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cblx0bGV0IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cdGlmICghd3NQaWNrZWQgfHwgd3NQaWNrZWQuaWQgPT09IG51bGwpIHtcblx0XHRjb25zdCB7IGFzayB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vLi4vdjEvZG9tYWluL3Byb21wdC5qc1wiKTtcblx0XHRjb25zdCB3c05hbWUgPSBhd2FpdCBhc2soYCAgV29ya3NwYWNlIG5hbWU6IGApO1xuXHRcdGNvbnN0IGNyZWF0ZVJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29ya3NwYWNlOiB7IG5hbWU6IHdzTmFtZSwgdHlwZTogXCJwZXJzb25hbFwiIH0gfSksXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyB3b3Jrc3BhY2U6IHdzIH0gPSAoYXdhaXQgY3JlYXRlUmVzLmpzb24oKSkgYXMgeyB3b3Jrc3BhY2U6IHsgaWQ6IHN0cmluZyB9IH07XG5cdFx0d29ya3NwYWNlSWQgPSB3cy5pZDtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgV29ya3NwYWNlIGNyZWF0ZWQ6ICR7d3NOYW1lfWApO1xuXHR9IGVsc2Uge1xuXHRcdHdvcmtzcGFjZUlkID0gd3NQaWNrZWQuaWQ7XG5cdH1cblxuXHRyZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwiYXBpXCIsIGFwaUtleSwgd29ya3NwYWNlSWQgfTtcbn1cblxudHlwZSBBdXRoMEVudiA9IHtcblx0YXV0aDBEb21haW4/OiBzdHJpbmc7XG5cdGF1dGgwQXVkaWVuY2U/OiBzdHJpbmc7XG5cdGF1dGgwQ2xpZW50SWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBidWlsZENvbGxlY3Rpb24ocHJvamVjdE5hbWU6IHN0cmluZywgYXV0aD86IEF1dGgwRW52KTogdW5rbm93biB7XG5cdGNvbnN0IGF1dGhPYmogPSBhdXRoPy5hdXRoMERvbWFpblxuXHRcdD8ge1xuXHRcdFx0XHR0eXBlOiBcIm9hdXRoMlwiLFxuXHRcdFx0XHRvYXV0aDI6IFtcblx0XHRcdFx0XHR7IGtleTogXCJncmFudF90eXBlXCIsIHZhbHVlOiBcImF1dGhvcml6YXRpb25fY29kZV93aXRoX3BrY2VcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdFx0XHR2YWx1ZTogXCJodHRwczovL3t7YXV0aDBEb21haW59fS9hdXRob3JpemU/YXVkaWVuY2U9e3thdXRoMEF1ZGllbmNlfX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRrZXk6IFwiYWNjZXNzVG9rZW5VcmxcIixcblx0XHRcdFx0XHRcdHZhbHVlOiBcImh0dHBzOi8ve3thdXRoMERvbWFpbn19L29hdXRoL3Rva2VuXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiY2xpZW50SWRcIiwgdmFsdWU6IFwie3thdXRoMENsaWVudElkfX1cIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRcdHsga2V5OiBcInNjb3BlXCIsIHZhbHVlOiBcIm9wZW5pZCBwcm9maWxlIGVtYWlsXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJhZGRUb2tlblRvXCIsIHZhbHVlOiBcImhlYWRlclwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiY2hhbGxlbmdlQWxnb3JpdGhtXCIsIHZhbHVlOiBcIlMyNTZcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiB7XG5cdFx0aW5mbzoge1xuXHRcdFx0bmFtZTogYCR7cHJvamVjdE5hbWV9IFdlYkFQSWAsXG5cdFx0XHRzY2hlbWE6IFwiaHR0cHM6Ly9zY2hlbWEuZ2V0cG9zdG1hbi5jb20vanNvbi9jb2xsZWN0aW9uL3YyLjEuMC9jb2xsZWN0aW9uLmpzb25cIixcblx0XHR9LFxuXHRcdC4uLihhdXRoT2JqID8geyBhdXRoOiBhdXRoT2JqIH0gOiB7fSksXG5cdFx0aXRlbTogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkhlbGxvXCIsXG5cdFx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0dXJsOiB7IHJhdzogXCJ7e2Jhc2VVcmx9fS9oZWxsb1wiLCBob3N0OiBbXCJ7e2Jhc2VVcmx9fVwiXSwgcGF0aDogW1wiaGVsbG9cIl0gfSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFbnZpcm9ubWVudFlhbWwobmFtZTogc3RyaW5nLCBhdXRoPzogQXV0aDBFbnYpOiBzdHJpbmcge1xuXHRjb25zdCBhdXRoMFNlY3Rpb24gPSBhdXRoPy5hdXRoMERvbWFpblxuXHRcdD8gW1xuXHRcdFx0XHRcIiAgLSBrZXk6IGF1dGgwRG9tYWluXCIsXG5cdFx0XHRcdGAgICAgdmFsdWU6ICR7YXV0aC5hdXRoMERvbWFpbn1gLFxuXHRcdFx0XHRcIiAgLSBrZXk6IGF1dGgwQXVkaWVuY2VcIixcblx0XHRcdFx0YCAgICB2YWx1ZTogJyR7YXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCJ9J2AsXG5cdFx0XHRcdFwiICAtIGtleTogYXV0aDBDbGllbnRJZFwiLFxuXHRcdFx0XHRgICAgIHZhbHVlOiAnJHthdXRoLmF1dGgwQ2xpZW50SWQgPz8gXCJcIn0nYCxcblx0XHRcdFx0XCIgICAgZGVzY3JpcHRpb246IENsaWVudCBJRCBvZiB0aGUgQXV0aDAgU1BBIGFwcGxpY2F0aW9uIHVzZWQgYnkgUG9zdG1hbiBmb3IgUEtDRSBhdXRoZW50aWNhdGlvblwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpICsgXCJcXG5cIlxuXHRcdDogXCJcIjtcblxuXHRyZXR1cm4gYG5hbWU6ICR7bmFtZX1cXG52YWx1ZXM6XFxuICAtIGtleTogYmFzZVVybFxcbiAgICB2YWx1ZTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcXG4ke2F1dGgwU2VjdGlvbn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBQb3N0bWFuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwibm9uZVwiKSByZXR1cm47XG5cblx0Y29uc3QgYXV0aENvbmZpZ01vZGVsID0gd29ya3NwYWNlLmdldE1vZGVsPEF1dGhDb25maWdNb2RlbD4oV0VMTF9LTk9XTl9GSUxFUy5BVVRIX0NPTkZJRyk7XG5cdGNvbnN0IGF1dGhDZmcgPSBhdXRoQ29uZmlnTW9kZWw/LmNvbmZpZztcblxuXHRsZXQgc3BhQ2xpZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwiYXBpXCIgJiYgb3B0aW9ucy5hcGlLZXkgJiYgYXV0aENmZz8uaXNzdWVyQmFzZVVybCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhcHAgPSBhdXRoMENsaS5jcmVhdGVTcGFBcHAoXG5cdFx0XHRcdGAke3dvcmtzcGFjZS5uYW1lfSBQb3N0bWFuYCxcblx0XHRcdFx0XCJodHRwczovL29hdXRoLnBzdG1uLmlvL3YxL2NhbGxiYWNrXCIsXG5cdFx0XHQpO1xuXHRcdFx0c3BhQ2xpZW50SWQgPSBhcHAuY2xpZW50X2lkO1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBBdXRoMCBTUEEgYXBwIGNyZWF0ZWQgZm9yIFBvc3RtYW4gUEtDRVwiKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gY3JlYXRlIEF1dGgwIFNQQSBhcHAg4oCUIGNvbnRpbnVpbmcgd2l0aG91dCBpdC5cIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYXV0aDBFbnY6IEF1dGgwRW52IHwgdW5kZWZpbmVkID0gYXV0aENmZz8uaXNzdWVyQmFzZVVybFxuXHRcdD8ge1xuXHRcdFx0XHRhdXRoMERvbWFpbjogYXV0aENmZy5pc3N1ZXJCYXNlVXJsLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIiksXG5cdFx0XHRcdGF1dGgwQXVkaWVuY2U6IGF1dGhDZmcuYXVkaWVuY2UsXG5cdFx0XHRcdGF1dGgwQ2xpZW50SWQ6IHNwYUNsaWVudElkLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBidWlsZENvbGxlY3Rpb24ocHJvamVjdE5hbWUsIGF1dGgwRW52KTtcblx0Y29uc3QgZW52WWFtbCA9IGJ1aWxkRW52aXJvbm1lbnRZYW1sKGAke3Byb2plY3ROYW1lfSDigJQgTG9jYWxgLCBhdXRoMEVudik7XG5cblx0d29ya3NwYWNlLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBgcG9zdG1hbi9lbnZpcm9ubWVudHMvJHtwcm9qZWN0TmFtZX0gXFx1MjAxNCBMb2NhbC5lbnZpcm9ubWVudC55YW1sYCxcblx0XHRcdFx0Y29udGVudDogZW52WWFtbCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBgcG9zdG1hbi9jb2xsZWN0aW9ucy8ke3Byb2plY3ROYW1lfS5wb3N0bWFuX2NvbGxlY3Rpb24uanNvbmAsXG5cdFx0XHRcdGNvbnRlbnQ6IGAke0pTT04uc3RyaW5naWZ5KGNvbGxlY3Rpb24sIG51bGwsIDIpfVxcbmAsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdGlmIChvcHRpb25zLnBvc3RtYW5Qcm92aWRlciA9PT0gXCJhcGlcIiAmJiBvcHRpb25zLmFwaUtleSkge1xuXHRcdGNvbnN0IGhlYWRlcnMgPSB7IFwiWC1BcGktS2V5XCI6IG9wdGlvbnMuYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXG5cdFx0Y29uc3QgY29sUmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vY29sbGVjdGlvbnM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvbGxlY3Rpb24gfSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGNvbFJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGNvbGxlY3Rpb24gdXBsb2FkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gdXBsb2FkIFBvc3RtYW4gY29sbGVjdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnZWYXJzID0gW1xuXHRcdFx0eyBrZXk6IFwiYmFzZVVybFwiLCB2YWx1ZTogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0Li4uKGF1dGgwRW52Py5hdXRoMERvbWFpblxuXHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdHsga2V5OiBcImF1dGgwRG9tYWluXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMERvbWFpbiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0eyBrZXk6IFwiYXV0aDBBdWRpZW5jZVwiLCB2YWx1ZTogYXV0aDBFbnYuYXV0aDBBdWRpZW5jZSA/PyBcIlwiLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHR7IGtleTogXCJhdXRoMENsaWVudElkXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMENsaWVudElkID8/IFwiXCIsIGVuYWJsZWQ6IHRydWUgfSxcblx0XHRcdFx0XHRdXG5cdFx0XHRcdDogW10pLFxuXHRcdF07XG5cdFx0Y29uc3QgZW52UmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vZW52aXJvbm1lbnRzP3dvcmtzcGFjZT0ke29wdGlvbnMud29ya3NwYWNlSWR9YCxcblx0XHRcdHtcblx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0Ym9keTogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdGVudmlyb25tZW50OiB7IG5hbWU6IGAke3Byb2plY3ROYW1lfSDigJQgTG9jYWxgLCB2YWx1ZXM6IGVudlZhcnMgfSxcblx0XHRcdFx0fSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGVudlJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGVudmlyb25tZW50IHVwbG9hZGVkXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiICDinJcgRmFpbGVkIHRvIHVwbG9hZCBQb3N0bWFuIGVudmlyb25tZW50XCIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY29uc3QgUG9zdG1hbkZlYXR1cmU6IEZlYXR1cmU8UG9zdG1hbk9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuIl0sIm5hbWVzIjpbInBpY2siLCJXRUxMX0tOT1dOX0ZJTEVTIiwiYXV0aDBDbGkiLCJnZXRPcHRpb25zIiwiX3dvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJwb3N0bWFuUHJvdmlkZXIiLCJjaG9pY2VzIiwibGFiZWwiLCJkZXNjcmlwdGlvbiIsInNlbGVjdGVkIiwiYyIsInByb3ZpZGVyIiwiYXBpS2V5IiwicHJvY2VzcyIsImVudiIsIlBPU1RNQU5fQVBJX0tFWSIsInRoZW4iLCJtIiwiYXNrIiwiaGVhZGVycyIsIndzUmVzIiwiZmV0Y2giLCJvayIsImNvbnNvbGUiLCJlcnJvciIsIndvcmtzcGFjZXMiLCJqc29uIiwid3NDaG9pY2VzIiwiaWQiLCJtYXAiLCJ3IiwibmFtZSIsInR5cGUiLCJ3c1BpY2tlZCIsIndvcmtzcGFjZUlkIiwid3NOYW1lIiwiY3JlYXRlUmVzIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3b3Jrc3BhY2UiLCJ3cyIsImxvZyIsImJ1aWxkQ29sbGVjdGlvbiIsInByb2plY3ROYW1lIiwiYXV0aCIsImF1dGhPYmoiLCJhdXRoMERvbWFpbiIsIm9hdXRoMiIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwiaW5mbyIsInNjaGVtYSIsIml0ZW0iLCJyZXF1ZXN0IiwidXJsIiwicmF3IiwiaG9zdCIsInBhdGgiLCJidWlsZEVudmlyb25tZW50WWFtbCIsImF1dGgwU2VjdGlvbiIsImF1dGgwQXVkaWVuY2UiLCJhdXRoMENsaWVudElkIiwiam9pbiIsInNjYWZmb2xkIiwib3B0aW9ucyIsImF1dGhDb25maWdNb2RlbCIsImdldE1vZGVsIiwiQVVUSF9DT05GSUciLCJhdXRoQ2ZnIiwiY29uZmlnIiwic3BhQ2xpZW50SWQiLCJpc3N1ZXJCYXNlVXJsIiwiYXBwIiwiY3JlYXRlU3BhQXBwIiwiY2xpZW50X2lkIiwiYXV0aDBFbnYiLCJyZXBsYWNlIiwiYXVkaWVuY2UiLCJjb2xsZWN0aW9uIiwiZW52WWFtbCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsImNvbFJlcyIsImVudlZhcnMiLCJlbmFibGVkIiwiZW52UmVzIiwiZW52aXJvbm1lbnQiLCJ2YWx1ZXMiLCJQb3N0bWFuRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsSUFBSSxRQUFRLCtCQUErQjtBQUNwRCxTQUFTQyxnQkFBZ0IsUUFBUSx3QkFBd0I7QUFJekQsWUFBWUMsY0FBYyxpQkFBaUI7QUFRM0MsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFVBQW1DO0lBRW5DLElBQUlBLFdBQVdDLGVBQWUsSUFBSSxNQUFNLE9BQU8sQ0FBQztJQUVoRCxNQUFNQyxVQUFVO1FBQ2Y7WUFBRUMsT0FBTztZQUFpQkMsYUFBYTtRQUFPO1FBQzlDO1lBQUVELE9BQU87WUFBa0JDLGFBQWE7UUFBdUM7UUFDL0U7WUFBRUQsT0FBTztZQUFnQkMsYUFBYTtRQUF3QztLQUM5RTtJQUNELE1BQU1DLFdBQVcsTUFBTVYsS0FDdEIsaUJBQ0FPLFNBQ0EsQ0FBQ0ksSUFBTSxHQUFHQSxFQUFFSCxLQUFLLENBQUMsR0FBRyxFQUFFRyxFQUFF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
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CREATE_VERSION } from "../../../v1/version.js";
|
|
2
|
+
import { WELL_KNOWN_FILES } from "../../models/const.js";
|
|
3
|
+
/**
|
|
4
|
+
* Builder for `projects/api/package.json`.
|
|
5
|
+
*
|
|
6
|
+
* Starts with the core cortex + crucible deps. Features can call
|
|
7
|
+
* `addDependency` / `addDevDependency` to extend.
|
|
8
|
+
*/ export class ApiPackageJson {
|
|
9
|
+
projectName;
|
|
10
|
+
key = WELL_KNOWN_FILES.API_PACKAGE_JSON;
|
|
11
|
+
_dependencies;
|
|
12
|
+
_devDependencies = {};
|
|
13
|
+
constructor(projectName){
|
|
14
|
+
this.projectName = projectName;
|
|
15
|
+
this._dependencies = {
|
|
16
|
+
"@decohere/cortex": CREATE_VERSION,
|
|
17
|
+
"@decohere/crucible": CREATE_VERSION
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
addDependency(name, version) {
|
|
21
|
+
this._dependencies[name] = version;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
addDevDependency(name, version) {
|
|
25
|
+
this._devDependencies[name] = version;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
files() {
|
|
29
|
+
const pkg = {
|
|
30
|
+
name: `@${this.projectName}/api`,
|
|
31
|
+
version: "0.0.1",
|
|
32
|
+
type: "module",
|
|
33
|
+
main: "src/main.ts",
|
|
34
|
+
dependencies: {
|
|
35
|
+
...this._dependencies
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
if (Object.keys(this._devDependencies).length > 0) {
|
|
39
|
+
pkg.devDependencies = {
|
|
40
|
+
...this._devDependencies
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return [
|
|
44
|
+
{
|
|
45
|
+
filePath: "package.json",
|
|
46
|
+
content: JSON.stringify(pkg, null, 2)
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9hcGktcGFja2FnZS1qc29uLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENSRUFURV9WRVJTSU9OIH0gZnJvbSBcIi4uLy4uLy4uL3YxL3ZlcnNpb24uanNcIjtcbmltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgYHByb2plY3RzL2FwaS9wYWNrYWdlLmpzb25gLlxuICpcbiAqIFN0YXJ0cyB3aXRoIHRoZSBjb3JlIGNvcnRleCArIGNydWNpYmxlIGRlcHMuIEZlYXR1cmVzIGNhbiBjYWxsXG4gKiBgYWRkRGVwZW5kZW5jeWAgLyBgYWRkRGV2RGVwZW5kZW5jeWAgdG8gZXh0ZW5kLlxuICovXG5leHBvcnQgY2xhc3MgQXBpUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuQVBJX1BBQ0tBR0VfSlNPTjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHByaXZhdGUgcmVhZG9ubHkgX2RldkRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb2plY3ROYW1lOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9jcnVjaWJsZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHR9O1xuXHR9XG5cblx0cHVibGljIGFkZERlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZERldkRlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgcGtnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcblx0XHRcdG5hbWU6IGBAJHt0aGlzLnByb2plY3ROYW1lfS9hcGlgLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdG1haW46IFwic3JjL21haW4udHNcIixcblx0XHRcdGRlcGVuZGVuY2llczogeyAuLi50aGlzLl9kZXBlbmRlbmNpZXMgfSxcblx0XHR9O1xuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLl9kZXZEZXBlbmRlbmNpZXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHBrZy5kZXZEZXBlbmRlbmNpZXMgPSB7IC4uLnRoaXMuX2RldkRlcGVuZGVuY2llcyB9O1xuXHRcdH1cblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJwYWNrYWdlLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNSRUFURV9WRVJTSU9OIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkFwaVBhY2thZ2VKc29uIiwia2V5IiwiQVBJX1BBQ0tBR0VfSlNPTiIsIl9kZXBlbmRlbmNpZXMiLCJfZGV2RGVwZW5kZW5jaWVzIiwicHJvamVjdE5hbWUiLCJhZGREZXBlbmRlbmN5IiwibmFtZSIsInZlcnNpb24iLCJhZGREZXZEZXBlbmRlbmN5IiwiZmlsZXMiLCJwa2ciLCJ0eXBlIiwibWFpbiIsImRlcGVuZGVuY2llcyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJkZXZEZXBlbmRlbmNpZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxjQUFjLFFBQVEseUJBQXlCO0FBQ3hELFNBQVNDLGdCQUFnQixRQUFRLHdCQUF3QjtBQUd6RDs7Ozs7Q0FLQyxHQUNELE9BQU8sTUFBTUM7O0lBQ0lDLE1BQU1GLGlCQUFpQkcsZ0JBQWdCLENBQUM7SUFFdkNDLGNBQXNDO0lBQ3RDQyxtQkFBMkMsQ0FBQyxFQUFFO0lBRS9ELFlBQW1CLEFBQWlCQyxXQUFtQixDQUFFO2FBQXJCQSxjQUFBQTtRQUNuQyxJQUFJLENBQUNGLGFBQWEsR0FBRztZQUNwQixvQkFBb0JMO1lBQ3BCLHNCQUFzQkE7UUFDdkI7SUFDRDtJQUVPUSxjQUFjQyxJQUFZLEVBQUVDLE9BQWUsRUFBUTtRQUN6RCxJQUFJLENBQUNMLGFBQWEsQ0FBQ0ksS0FBSyxHQUFHQztRQUMzQixPQUFPLElBQUk7SUFDWjtJQUVPQyxpQkFBaUJGLElBQVksRUFBRUMsT0FBZSxFQUFRO1FBQzVELElBQUksQ0FBQ0osZ0JBQWdCLENBQUNHLEtBQUssR0FBR0M7UUFDOUIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsUUFBc0I7UUFDNUIsTUFBTUMsTUFBK0I7WUFDcENKLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDRixXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2hDRyxTQUFTO1lBQ1RJLE1BQU07WUFDTkMsTUFBTTtZQUNOQyxjQUFjO2dCQUFFLEdBQUcsSUFBSSxDQUFDWCxhQUFhO1lBQUM7UUFDdkM7UUFDQSxJQUFJWSxPQUFPQyxJQUFJLENBQUMsSUFBSSxDQUFDWixnQkFBZ0IsRUFBRWEsTUFBTSxHQUFHLEdBQUc7WUFDbEROLElBQUlPLGVBQWUsR0FBRztnQkFBRSxHQUFHLElBQUksQ0FBQ2QsZ0JBQWdCO1lBQUM7UUFDbEQ7UUFDQSxPQUFPO1lBQ047Z0JBQ0NlLFVBQVU7Z0JBQ1ZDLFNBQVNDLEtBQUtDLFNBQVMsQ0FBQ1gsS0FBSyxNQUFNO1lBQ3BDO1NBQ0E7SUFDRjtBQUNEIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { WELL_KNOWN_FILES } from "../../models/const.js";
|
|
2
|
+
/**
|
|
3
|
+
* Data-carrier model for auth configuration.
|
|
4
|
+
*
|
|
5
|
+
* Registered by AuthFeature when auth0 is configured. Other features (e.g.
|
|
6
|
+
* PostmanFeature) retrieve it via workspace.getModel(WELL_KNOWN_FILES.AUTH_CONFIG).
|
|
7
|
+
* Produces no files — exists solely so features can communicate auth details.
|
|
8
|
+
*/ export class AuthConfigModel {
|
|
9
|
+
config;
|
|
10
|
+
key = WELL_KNOWN_FILES.AUTH_CONFIG;
|
|
11
|
+
constructor(config){
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
files() {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9hdXRoLWNvbmZpZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuXG5leHBvcnQgdHlwZSBBdXRoQ29uZmlnID0ge1xuXHRpc3N1ZXJCYXNlVXJsOiBzdHJpbmc7XG5cdGF1ZGllbmNlOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERhdGEtY2FycmllciBtb2RlbCBmb3IgYXV0aCBjb25maWd1cmF0aW9uLlxuICpcbiAqIFJlZ2lzdGVyZWQgYnkgQXV0aEZlYXR1cmUgd2hlbiBhdXRoMCBpcyBjb25maWd1cmVkLiBPdGhlciBmZWF0dXJlcyAoZS5nLlxuICogUG9zdG1hbkZlYXR1cmUpIHJldHJpZXZlIGl0IHZpYSB3b3Jrc3BhY2UuZ2V0TW9kZWwoV0VMTF9LTk9XTl9GSUxFUy5BVVRIX0NPTkZJRykuXG4gKiBQcm9kdWNlcyBubyBmaWxlcyDigJQgZXhpc3RzIHNvbGVseSBzbyBmZWF0dXJlcyBjYW4gY29tbXVuaWNhdGUgYXV0aCBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgQXV0aENvbmZpZ01vZGVsIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkFVVEhfQ09ORklHO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBBdXRoQ29uZmlnKSB7fVxuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIldFTExfS05PV05fRklMRVMiLCJBdXRoQ29uZmlnTW9kZWwiLCJrZXkiLCJBVVRIX0NPTkZJRyIsImNvbmZpZyIsImZpbGVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSx3QkFBd0I7QUFRekQ7Ozs7OztDQU1DLEdBQ0QsT0FBTyxNQUFNQzs7SUFDSUMsTUFBTUYsaUJBQWlCRyxXQUFXLENBQUM7SUFFbkQsWUFBbUIsQUFBZ0JDLE1BQWtCLENBQUU7YUFBcEJBLFNBQUFBO0lBQXFCO0lBRWpEQyxRQUFzQjtRQUM1QixPQUFPLEVBQUU7SUFDVjtBQUNEIn0=
|