@decohere/create 0.0.1-dev.19 → 0.0.1-dev.20261105.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +255 -0
  3. package/es6/src/cli.js +1 -34
  4. package/es6/src/index.js +2 -0
  5. package/es6/src/resolve-launch.js +87 -0
  6. package/es6/src/runner.js +67 -24
  7. package/es6/src/version.js +14 -6
  8. package/pack-builder-tgz.mjs +177 -0
  9. package/package.json +23 -11
  10. package/types/src/index.d.ts +3 -0
  11. package/types/src/resolve-launch.d.ts +20 -0
  12. package/types/src/runner.d.ts +3 -11
  13. package/types/src/version.d.ts +1 -1
  14. package/commonjs/src/cli.js +0 -40
  15. package/commonjs/src/domain/prompt.js +0 -55
  16. package/commonjs/src/models/compose.model.js +0 -82
  17. package/commonjs/src/models/config-yaml.model.js +0 -34
  18. package/commonjs/src/models/const.js +0 -29
  19. package/commonjs/src/models/container-image.model.js +0 -88
  20. package/commonjs/src/models/dev-container.model.js +0 -73
  21. package/commonjs/src/models/env-file.model.js +0 -33
  22. package/commonjs/src/models/gitignore.model.js +0 -32
  23. package/commonjs/src/models/launch-json.model.js +0 -52
  24. package/commonjs/src/models/package-json.model.js +0 -64
  25. package/commonjs/src/models/project.model.js +0 -126
  26. package/commonjs/src/models/source-file.js +0 -6
  27. package/commonjs/src/models/tsconfig.model.js +0 -34
  28. package/commonjs/src/models/vscode-settings.model.js +0 -31
  29. package/commonjs/src/runner.js +0 -56
  30. package/commonjs/src/services/scaffold.service.js +0 -62
  31. package/commonjs/src/version.js +0 -32
  32. package/commonjs/src/webapi/create-api.js +0 -169
  33. package/commonjs/src/webapi/features/auth.feature.js +0 -166
  34. package/commonjs/src/webapi/features/auth0-cli.js +0 -151
  35. package/commonjs/src/webapi/features/database.feature.js +0 -151
  36. package/commonjs/src/webapi/features/finalize.feature.js +0 -51
  37. package/commonjs/src/webapi/features/postman.feature.js +0 -309
  38. package/commonjs/src/webapi/models/api-package-json.model.js +0 -57
  39. package/commonjs/src/webapi/models/auth-config.model.js +0 -23
  40. package/commonjs/src/webapi/models/controller-source-file.model.js +0 -180
  41. package/commonjs/src/webapi/models/main-source-file.model.js +0 -132
  42. package/commonjs/src/webapi/models/sample-files.model.js +0 -60
  43. package/es6/src/domain/prompt.js +0 -37
  44. package/es6/src/models/compose.model.js +0 -77
  45. package/es6/src/models/config-yaml.model.js +0 -30
  46. package/es6/src/models/const.js +0 -19
  47. package/es6/src/models/container-image.model.js +0 -84
  48. package/es6/src/models/dev-container.model.js +0 -68
  49. package/es6/src/models/env-file.model.js +0 -29
  50. package/es6/src/models/gitignore.model.js +0 -22
  51. package/es6/src/models/launch-json.model.js +0 -42
  52. package/es6/src/models/package-json.model.js +0 -60
  53. package/es6/src/models/project.model.js +0 -111
  54. package/es6/src/models/source-file.js +0 -3
  55. package/es6/src/models/tsconfig.model.js +0 -24
  56. package/es6/src/models/vscode-settings.model.js +0 -21
  57. package/es6/src/services/scaffold.service.js +0 -52
  58. package/es6/src/webapi/create-api.js +0 -151
  59. package/es6/src/webapi/features/auth.feature.js +0 -115
  60. package/es6/src/webapi/features/auth0-cli.js +0 -116
  61. package/es6/src/webapi/features/database.feature.js +0 -141
  62. package/es6/src/webapi/features/finalize.feature.js +0 -41
  63. package/es6/src/webapi/features/postman.feature.js +0 -258
  64. package/es6/src/webapi/models/api-package-json.model.js +0 -52
  65. package/es6/src/webapi/models/auth-config.model.js +0 -19
  66. package/es6/src/webapi/models/controller-source-file.model.js +0 -171
  67. package/es6/src/webapi/models/main-source-file.model.js +0 -128
  68. package/es6/src/webapi/models/sample-files.model.js +0 -42
  69. package/types/src/domain/prompt.d.ts +0 -2
  70. package/types/src/models/compose.model.d.ts +0 -32
  71. package/types/src/models/config-yaml.model.d.ts +0 -16
  72. package/types/src/models/const.d.ts +0 -17
  73. package/types/src/models/container-image.model.d.ts +0 -15
  74. package/types/src/models/dev-container.model.d.ts +0 -21
  75. package/types/src/models/env-file.model.d.ts +0 -14
  76. package/types/src/models/gitignore.model.d.ts +0 -6
  77. package/types/src/models/launch-json.model.d.ts +0 -5
  78. package/types/src/models/package-json.model.d.ts +0 -18
  79. package/types/src/models/project.model.d.ts +0 -55
  80. package/types/src/models/source-file.d.ts +0 -11
  81. package/types/src/models/tsconfig.model.d.ts +0 -5
  82. package/types/src/models/vscode-settings.model.d.ts +0 -7
  83. package/types/src/services/scaffold.service.d.ts +0 -22
  84. package/types/src/webapi/create-api.d.ts +0 -7
  85. package/types/src/webapi/features/auth.feature.d.ts +0 -7
  86. package/types/src/webapi/features/auth0-cli.d.ts +0 -22
  87. package/types/src/webapi/features/database.feature.d.ts +0 -5
  88. package/types/src/webapi/features/finalize.feature.d.ts +0 -2
  89. package/types/src/webapi/features/postman.feature.d.ts +0 -7
  90. package/types/src/webapi/models/api-package-json.model.d.ts +0 -17
  91. package/types/src/webapi/models/auth-config.model.d.ts +0 -18
  92. package/types/src/webapi/models/controller-source-file.model.d.ts +0 -42
  93. package/types/src/webapi/models/main-source-file.model.d.ts +0 -36
  94. package/types/src/webapi/models/sample-files.model.d.ts +0 -7
@@ -1,151 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "DatabaseFeature", {
6
- enumerable: true,
7
- get: function() {
8
- return DatabaseFeature;
9
- }
10
- });
11
- const _nodecrypto = require("node:crypto");
12
- const _prompt = require("../../domain/prompt.js");
13
- const _const = require("../../models/const.js");
14
- const _version = require("../../version.js");
15
- const _createapi = require("../create-api.js");
16
- // Base config uses env-var references for production; the dev config section
17
- // written below overrides only the concrete values needed locally.
18
- const DATABASE_BASE_CONFIG_YAML = `database:
19
- dataSources:
20
- - name: default
21
- provider: postgres
22
- host: \${DB_HOST}
23
- port: \${DB_PORT}
24
- database: \${DB_NAME}
25
- username: \${DB_USER}
26
- password: \${DB_PASSWORD}
27
- synchronize: false
28
- seed: false
29
- adminUser: \${DB_ADMIN_USER}
30
- adminPassword: \${DB_ADMIN_PASSWORD}
31
- `;
32
- // Dev config only overrides what differs from base — credentials come from .env via env-var references.
33
- const DATABASE_DEV_CONFIG_YAML = `database:
34
- dataSources:
35
- - host: postgres
36
- synchronize: true
37
- seed: true
38
- `;
39
- const SAMPLE_ENTITY_TS = `import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
40
- import type { Entity as IEntity } from "@decohere/codex";
41
-
42
- @Entity()
43
- export class SampleEntity implements IEntity {
44
- \t@PrimaryGeneratedColumn()
45
- \tpublic id!: number;
46
-
47
- \t@Column()
48
- \tpublic name!: string;
49
- }
50
- `;
51
- const SAMPLE_REPOSITORY_TS = `import { injectable } from "@decohere/crucible/decorators";
52
- import { injectUnitOfWork } from "@decohere/codex";
53
- import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/codex-typeorm";
54
- import { SampleEntity } from "../entities/sample.entity.js";
55
-
56
- @injectable()
57
- export class SampleEntityRepository extends TypeOrmRepository<SampleEntity> {
58
- \tpublic constructor(@injectUnitOfWork() unitOfWork: TypeOrmUnitOfWork) {
59
- \t\tsuper(unitOfWork, SampleEntity);
60
- \t}
61
- }
62
- `;
63
- async function getOptions(_workspace, cliOptions) {
64
- if (cliOptions.databaseProvider != null) return {};
65
- const choices = [
66
- {
67
- label: "none"
68
- },
69
- {
70
- label: "postgres/typeorm"
71
- }
72
- ];
73
- const selected = await (0, _prompt.pick)("\n Database: ", choices, (c)=>c.label);
74
- return {
75
- databaseProvider: selected?.label ?? "none"
76
- };
77
- }
78
- function scaffold(workspace, options) {
79
- if (options.databaseProvider !== "postgres/typeorm") return;
80
- const name = workspace.name;
81
- const password = (0, _nodecrypto.randomBytes)(16).toString("hex");
82
- const db = `${name}_dev`;
83
- const user = "postgres";
84
- const devContainer = workspace.getModel(_const.WELL_KNOWN_FILES.DEVCONTAINER_JSON);
85
- const compose = workspace.getModel(_const.WELL_KNOWN_FILES.DOCKER_COMPOSE);
86
- // Add postgres service to compose
87
- compose?.addService("postgres", {
88
- image: "postgres:16",
89
- restart: "unless-stopped",
90
- environment: {
91
- // biome-ignore lint/suspicious/noTemplateCurlyInString: Docker Compose reads these from .env
92
- POSTGRES_DB: "${POSTGRES_DB}",
93
- // biome-ignore lint/suspicious/noTemplateCurlyInString: Docker Compose reads these from .env
94
- POSTGRES_USER: "${POSTGRES_USER}",
95
- // biome-ignore lint/suspicious/noTemplateCurlyInString: Docker Compose reads these from .env
96
- POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
97
- },
98
- ports: [
99
- "5432:5432"
100
- ],
101
- volumes: [
102
- "postgres-data:/var/lib/postgresql/data"
103
- ]
104
- }).addVolume("postgres-data");
105
- compose?.addService("adminer", {
106
- image: "adminer",
107
- ports: [
108
- "8080:8080"
109
- ]
110
- });
111
- // Add SQLTools extension for DB browsing in VS Code
112
- devContainer?.addExtension("mtxr.sqltools");
113
- // Wire up main.ts
114
- workspace.getModel(_const.WELL_KNOWN_FILES.MAIN_TS)?.addSideEffectImport("@decohere/codex-typeorm").addEntity({
115
- className: "SampleEntity",
116
- importPath: "./entities/sample.entity.js"
117
- }).addRepository({
118
- className: "SampleEntityRepository",
119
- importPath: "./repositories/sample.repository.js"
120
- });
121
- // Add codex + typeorm deps to root package.json
122
- workspace.getModel(_const.WELL_KNOWN_FILES.PACKAGE_JSON)?.addDependency("@decohere/codex", _version.CREATE_VERSION).addDependency("typeorm", "^0.3.28").addDependency("@decohere/codex-typeorm", _version.CREATE_VERSION);
123
- // Add codex deps to api package.json
124
- workspace.getModel(_const.WELL_KNOWN_FILES.API_PACKAGE_JSON)?.addDependency("@decohere/codex", _version.CREATE_VERSION).addDependency("@decohere/codex-typeorm", _version.CREATE_VERSION);
125
- // Append database config sections
126
- workspace.getModel(_const.WELL_KNOWN_FILES.CONFIG_YAML)?.addSection(DATABASE_BASE_CONFIG_YAML);
127
- workspace.getModel(_const.WELL_KNOWN_FILES.CONFIG_DEV_YAML)?.addSection(DATABASE_DEV_CONFIG_YAML);
128
- // Register entity and repository source files in the api project
129
- workspace.getProject(_createapi.WEBAPI_PROJECT_DIR)?.addFile({
130
- files: ()=>[
131
- {
132
- filePath: "src/entities/sample.entity.ts",
133
- content: SAMPLE_ENTITY_TS
134
- },
135
- {
136
- filePath: "src/repositories/sample.repository.ts",
137
- content: SAMPLE_REPOSITORY_TS
138
- }
139
- ]
140
- });
141
- // .env at workspace root — mounted by compose via ../.env so both postgres
142
- // and the devcontainer service can read credentials
143
- compose?.addEnvFile("postgres", "../.env").addEnvFile("devcontainer", "../.env");
144
- workspace.getModel(_const.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);
145
- }
146
- const DatabaseFeature = {
147
- getOptions,
148
- scaffold
149
- };
150
-
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2RhdGFiYXNlLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEb2NrZXJDb21wb3NlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wb3NlLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEZXZDb250YWluZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2Rldi1jb250YWluZXIubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgRW52RmlsZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IENSRUFURV9WRVJTSU9OIH0gZnJvbSBcIi4uLy4uL3ZlcnNpb24uanNcIjtcbmltcG9ydCB7IFdFQkFQSV9QUk9KRUNUX0RJUiB9IGZyb20gXCIuLi9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4uL21vZGVscy9hcGktcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCB0eXBlIERhdGFiYXNlT3B0aW9ucyA9IHtcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG59O1xuXG4vLyBCYXNlIGNvbmZpZyB1c2VzIGVudi12YXIgcmVmZXJlbmNlcyBmb3IgcHJvZHVjdGlvbjsgdGhlIGRldiBjb25maWcgc2VjdGlvblxuLy8gd3JpdHRlbiBiZWxvdyBvdmVycmlkZXMgb25seSB0aGUgY29uY3JldGUgdmFsdWVzIG5lZWRlZCBsb2NhbGx5LlxuY29uc3QgREFUQUJBU0VfQkFTRV9DT05GSUdfWUFNTCA9IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBuYW1lOiBkZWZhdWx0XG4gICAgICBwcm92aWRlcjogcG9zdGdyZXNcbiAgICAgIGhvc3Q6IFxcJHtEQl9IT1NUfVxuICAgICAgcG9ydDogXFwke0RCX1BPUlR9XG4gICAgICBkYXRhYmFzZTogXFwke0RCX05BTUV9XG4gICAgICB1c2VybmFtZTogXFwke0RCX1VTRVJ9XG4gICAgICBwYXNzd29yZDogXFwke0RCX1BBU1NXT1JEfVxuICAgICAgc3luY2hyb25pemU6IGZhbHNlXG4gICAgICBzZWVkOiBmYWxzZVxuICAgICAgYWRtaW5Vc2VyOiBcXCR7REJfQURNSU5fVVNFUn1cbiAgICAgIGFkbWluUGFzc3dvcmQ6IFxcJHtEQl9BRE1JTl9QQVNTV09SRH1cbmA7XG5cbi8vIERldiBjb25maWcgb25seSBvdmVycmlkZXMgd2hhdCBkaWZmZXJzIGZyb20gYmFzZSDigJQgY3JlZGVudGlhbHMgY29tZSBmcm9tIC5lbnYgdmlhIGVudi12YXIgcmVmZXJlbmNlcy5cbmNvbnN0IERBVEFCQVNFX0RFVl9DT05GSUdfWUFNTCA9IGBkYXRhYmFzZTpcbiAgZGF0YVNvdXJjZXM6XG4gICAgLSBob3N0OiBwb3N0Z3Jlc1xuICAgICAgc3luY2hyb25pemU6IHRydWVcbiAgICAgIHNlZWQ6IHRydWVcbmA7XG5cbmNvbnN0IFNBTVBMRV9FTlRJVFlfVFMgPSBgaW1wb3J0IHsgQ29sdW1uLCBFbnRpdHksIFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4gfSBmcm9tIFwidHlwZW9ybVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgYXMgSUVudGl0eSB9IGZyb20gXCJAZGVjb2hlcmUvY29kZXhcIjtcblxuQEVudGl0eSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIG5hbWUhOiBzdHJpbmc7XG59XG5gO1xuXG5jb25zdCBTQU1QTEVfUkVQT1NJVE9SWV9UUyA9IGBpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBpbmplY3RVbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleFwiO1xuaW1wb3J0IHsgVHlwZU9ybVJlcG9zaXRvcnksIFR5cGVPcm1Vbml0T2ZXb3JrIH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleC10eXBlb3JtXCI7XG5pbXBvcnQgeyBTYW1wbGVFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXRpZXMvc2FtcGxlLmVudGl0eS5qc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2FtcGxlRW50aXR5UmVwb3NpdG9yeSBleHRlbmRzIFR5cGVPcm1SZXBvc2l0b3J5PFNhbXBsZUVudGl0eT4ge1xuXFx0cHVibGljIGNvbnN0cnVjdG9yKEBpbmplY3RVbml0T2ZXb3JrKCkgdW5pdE9mV29yazogVHlwZU9ybVVuaXRPZldvcmspIHtcblxcdFxcdHN1cGVyKHVuaXRPZldvcmssIFNhbXBsZUVudGl0eSk7XG5cXHR9XG59XG5gO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHRfd29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogUGFydGlhbDxEYXRhYmFzZU9wdGlvbnM+LFxuKTogUHJvbWlzZTxQYXJ0aWFsPERhdGFiYXNlT3B0aW9ucz4+IHtcblx0aWYgKGNsaU9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSByZXR1cm4ge307XG5cblx0Y29uc3QgY2hvaWNlcyA9IFt7IGxhYmVsOiBcIm5vbmVcIiBhcyBjb25zdCB9LCB7IGxhYmVsOiBcInBvc3RncmVzL3R5cGVvcm1cIiBhcyBjb25zdCB9XTtcblx0Y29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBwaWNrKFwiXFxuICBEYXRhYmFzZTogXCIsIGNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblx0cmV0dXJuIHsgZGF0YWJhc2VQcm92aWRlcjogc2VsZWN0ZWQ/LmxhYmVsID8/IFwibm9uZVwiIH07XG59XG5cbmZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IERhdGFiYXNlT3B0aW9ucyk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5kYXRhYmFzZVByb3ZpZGVyICE9PSBcInBvc3RncmVzL3R5cGVvcm1cIikgcmV0dXJuO1xuXG5cdGNvbnN0IG5hbWUgPSB3b3Jrc3BhY2UubmFtZTtcblx0Y29uc3QgcGFzc3dvcmQgPSByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIik7XG5cdGNvbnN0IGRiID0gYCR7bmFtZX1fZGV2YDtcblx0Y29uc3QgdXNlciA9IFwicG9zdGdyZXNcIjtcblxuXHRjb25zdCBkZXZDb250YWluZXIgPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8RGV2Q29udGFpbmVyPihXRUxMX0tOT1dOX0ZJTEVTLkRFVkNPTlRBSU5FUl9KU09OKTtcblx0Y29uc3QgY29tcG9zZSA9IHdvcmtzcGFjZS5nZXRNb2RlbDxEb2NrZXJDb21wb3NlPihXRUxMX0tOT1dOX0ZJTEVTLkRPQ0tFUl9DT01QT1NFKTtcblxuXHQvLyBBZGQgcG9zdGdyZXMgc2VydmljZSB0byBjb21wb3NlXG5cdGNvbXBvc2Vcblx0XHQ/LmFkZFNlcnZpY2UoXCJwb3N0Z3Jlc1wiLCB7XG5cdFx0XHRpbWFnZTogXCJwb3N0Z3JlczoxNlwiLFxuXHRcdFx0cmVzdGFydDogXCJ1bmxlc3Mtc3RvcHBlZFwiLFxuXHRcdFx0ZW52aXJvbm1lbnQ6IHtcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogRG9ja2VyIENvbXBvc2UgcmVhZHMgdGhlc2UgZnJvbSAuZW52XG5cdFx0XHRcdFBPU1RHUkVTX0RCOiBcIiR7UE9TVEdSRVNfREJ9XCIsXG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IERvY2tlciBDb21wb3NlIHJlYWRzIHRoZXNlIGZyb20gLmVudlxuXHRcdFx0XHRQT1NUR1JFU19VU0VSOiBcIiR7UE9TVEdSRVNfVVNFUn1cIixcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogRG9ja2VyIENvbXBvc2UgcmVhZHMgdGhlc2UgZnJvbSAuZW52XG5cdFx0XHRcdFBPU1RHUkVTX1BBU1NXT1JEOiBcIiR7UE9TVEdSRVNfUEFTU1dPUkR9XCIsXG5cdFx0XHR9LFxuXHRcdFx0cG9ydHM6IFtcIjU0MzI6NTQzMlwiXSxcblx0XHRcdHZvbHVtZXM6IFtcInBvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhXCJdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcInBvc3RncmVzLWRhdGFcIik7XG5cblx0Y29tcG9zZT8uYWRkU2VydmljZShcImFkbWluZXJcIiwge1xuXHRcdGltYWdlOiBcImFkbWluZXJcIixcblx0XHRwb3J0czogW1wiODA4MDo4MDgwXCJdLFxuXHR9KTtcblxuXHQvLyBBZGQgU1FMVG9vbHMgZXh0ZW5zaW9uIGZvciBEQiBicm93c2luZyBpbiBWUyBDb2RlXG5cdGRldkNvbnRhaW5lcj8uYWRkRXh0ZW5zaW9uKFwibXR4ci5zcWx0b29sc1wiKTtcblxuXHQvLyBXaXJlIHVwIG1haW4udHNcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPE1haW5Tb3VyY2VGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLk1BSU5fVFMpXG5cdFx0Py5hZGRTaWRlRWZmZWN0SW1wb3J0KFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIilcblx0XHQuYWRkRW50aXR5KHsgY2xhc3NOYW1lOiBcIlNhbXBsZUVudGl0eVwiLCBpbXBvcnRQYXRoOiBcIi4vZW50aXRpZXMvc2FtcGxlLmVudGl0eS5qc1wiIH0pXG5cdFx0LmFkZFJlcG9zaXRvcnkoe1xuXHRcdFx0Y2xhc3NOYW1lOiBcIlNhbXBsZUVudGl0eVJlcG9zaXRvcnlcIixcblx0XHRcdGltcG9ydFBhdGg6IFwiLi9yZXBvc2l0b3JpZXMvc2FtcGxlLnJlcG9zaXRvcnkuanNcIixcblx0XHR9KTtcblxuXHQvLyBBZGQgY29kZXggKyB0eXBlb3JtIGRlcHMgdG8gcm9vdCBwYWNrYWdlLmpzb25cblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPFBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLlBBQ0tBR0VfSlNPTilcblx0XHQ/LmFkZERlcGVuZGVuY3koXCJAZGVjb2hlcmUvY29kZXhcIiwgQ1JFQVRFX1ZFUlNJT04pXG5cdFx0LmFkZERlcGVuZGVuY3koXCJ0eXBlb3JtXCIsIFwiXjAuMy4yOFwiKVxuXHRcdC5hZGREZXBlbmRlbmN5KFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIiwgQ1JFQVRFX1ZFUlNJT04pO1xuXG5cdC8vIEFkZCBjb2RleCBkZXBzIHRvIGFwaSBwYWNrYWdlLmpzb25cblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPEFwaVBhY2thZ2VKc29uPihXRUxMX0tOT1dOX0ZJTEVTLkFQSV9QQUNLQUdFX0pTT04pXG5cdFx0Py5hZGREZXBlbmRlbmN5KFwiQGRlY29oZXJlL2NvZGV4XCIsIENSRUFURV9WRVJTSU9OKVxuXHRcdC5hZGREZXBlbmRlbmN5KFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIiwgQ1JFQVRFX1ZFUlNJT04pO1xuXG5cdC8vIEFwcGVuZCBkYXRhYmFzZSBjb25maWcgc2VjdGlvbnNcblx0d29ya3NwYWNlXG5cdFx0LmdldE1vZGVsPENvbmZpZ1lhbWw+KFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwpXG5cdFx0Py5hZGRTZWN0aW9uKERBVEFCQVNFX0JBU0VfQ09ORklHX1lBTUwpO1xuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8Q29uZmlnWWFtbD4oV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwpXG5cdFx0Py5hZGRTZWN0aW9uKERBVEFCQVNFX0RFVl9DT05GSUdfWUFNTCk7XG5cblx0Ly8gUmVnaXN0ZXIgZW50aXR5IGFuZCByZXBvc2l0b3J5IHNvdXJjZSBmaWxlcyBpbiB0aGUgYXBpIHByb2plY3Rcblx0d29ya3NwYWNlLmdldFByb2plY3QoV0VCQVBJX1BST0pFQ1RfRElSKT8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwic3JjL2VudGl0aWVzL3NhbXBsZS5lbnRpdHkudHNcIixcblx0XHRcdFx0Y29udGVudDogU0FNUExFX0VOVElUWV9UUyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9yZXBvc2l0b3JpZXMvc2FtcGxlLnJlcG9zaXRvcnkudHNcIixcblx0XHRcdFx0Y29udGVudDogU0FNUExFX1JFUE9TSVRPUllfVFMsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIC5lbnYgYXQgd29ya3NwYWNlIHJvb3Qg4oCUIG1vdW50ZWQgYnkgY29tcG9zZSB2aWEgLi4vLmVudiBzbyBib3RoIHBvc3RncmVzXG5cdC8vIGFuZCB0aGUgZGV2Y29udGFpbmVyIHNlcnZpY2UgY2FuIHJlYWQgY3JlZGVudGlhbHNcblx0Y29tcG9zZT8uYWRkRW52RmlsZShcInBvc3RncmVzXCIsIFwiLi4vLmVudlwiKS5hZGRFbnZGaWxlKFwiZGV2Y29udGFpbmVyXCIsIFwiLi4vLmVudlwiKTtcblxuXHR3b3Jrc3BhY2Vcblx0XHQuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSlcblx0XHQ/LmFkZEVudHJ5KFwiUE9TVEdSRVNfREJcIiwgZGIpXG5cdFx0LmFkZEVudHJ5KFwiUE9TVEdSRVNfVVNFUlwiLCB1c2VyKVxuXHRcdC5hZGRFbnRyeShcIlBPU1RHUkVTX1BBU1NXT1JEXCIsIHBhc3N3b3JkKVxuXHRcdC5hZGRFbnRyeShcIkRCX0hPU1RcIiwgXCJsb2NhbGhvc3RcIilcblx0XHQuYWRkRW50cnkoXCJEQl9QT1JUXCIsIFwiNTQzMlwiKVxuXHRcdC5hZGRFbnRyeShcIkRCX05BTUVcIiwgZGIpXG5cdFx0LmFkZEVudHJ5KFwiREJfVVNFUlwiLCB1c2VyKVxuXHRcdC5hZGRFbnRyeShcIkRCX1BBU1NXT1JEXCIsIHBhc3N3b3JkKVxuXHRcdC5hZGRFbnRyeShcIkRCX0FETUlOX1VTRVJcIiwgdXNlcilcblx0XHQuYWRkRW50cnkoXCJEQl9BRE1JTl9QQVNTV09SRFwiLCBwYXNzd29yZCk7XG59XG5cbmV4cG9ydCBjb25zdCBEYXRhYmFzZUZlYXR1cmU6IEZlYXR1cmU8RGF0YWJhc2VPcHRpb25zPiA9IHsgZ2V0T3B0aW9ucywgc2NhZmZvbGQgfTtcbiJdLCJuYW1lcyI6WyJEYXRhYmFzZUZlYXR1cmUiLCJEQVRBQkFTRV9CQVNFX0NPTkZJR19ZQU1MIiwiREFUQUJBU0VfREVWX0NPTkZJR19ZQU1MIiwiU0FNUExFX0VOVElUWV9UUyIsIlNBTVBMRV9SRVBPU0lUT1JZX1RTIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwiZGF0YWJhc2VQcm92aWRlciIsImNob2ljZXMiLCJsYWJlbCIsInNlbGVjdGVkIiwicGljayIsImMiLCJzY2FmZm9sZCIsIndvcmtzcGFjZSIsIm9wdGlvbnMiLCJuYW1lIiwicGFzc3dvcmQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZGIiLCJ1c2VyIiwiZGV2Q29udGFpbmVyIiwiZ2V0TW9kZWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiREVWQ09OVEFJTkVSX0pTT04iLCJjb21wb3NlIiwiRE9DS0VSX0NPTVBPU0UiLCJhZGRTZXJ2aWNlIiwiaW1hZ2UiLCJyZXN0YXJ0IiwiZW52aXJvbm1lbnQiLCJQT1NUR1JFU19EQiIsIlBPU1RHUkVTX1VTRVIiLCJQT1NUR1JFU19QQVNTV09SRCIsInBvcnRzIiwidm9sdW1lcyIsImFkZFZvbHVtZSIsImFkZEV4dGVuc2lvbiIsIk1BSU5fVFMiLCJhZGRTaWRlRWZmZWN0SW1wb3J0IiwiYWRkRW50aXR5IiwiY2xhc3NOYW1lIiwiaW1wb3J0UGF0aCIsImFkZFJlcG9zaXRvcnkiLCJQQUNLQUdFX0pTT04iLCJhZGREZXBlbmRlbmN5IiwiQ1JFQVRFX1ZFUlNJT04iLCJBUElfUEFDS0FHRV9KU09OIiwiQ09ORklHX1lBTUwiLCJhZGRTZWN0aW9uIiwiQ09ORklHX0RFVl9ZQU1MIiwiZ2V0UHJvamVjdCIsIldFQkFQSV9QUk9KRUNUX0RJUiIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsImFkZEVudkZpbGUiLCJFTlZfRklMRSIsImFkZEVudHJ5Il0sIm1hcHBpbmdzIjoiOzs7OytCQXFMYUE7OztlQUFBQTs7OzRCQXJMZTt3QkFDUDt1QkFHWTt5QkFNRjsyQkFDSTtBQVFuQyw2RUFBNkU7QUFDN0UsbUVBQW1FO0FBQ25FLE1BQU1DLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBYW5DLENBQUM7QUFFRCx3R0FBd0c7QUFDeEcsTUFBTUMsMkJBQTJCLENBQUM7Ozs7O0FBS2xDLENBQUM7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
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "FinalizeFeature", {
6
- enumerable: true,
7
- get: function() {
8
- return FinalizeFeature;
9
- }
10
- });
11
- const _interop = require("@decohere/nexus/interop");
12
- const _prompt = require("../../domain/prompt.js");
13
- // State resolved during scaffold(), consumed by finalize().
14
- let _pm = null;
15
- let _shouldInstall = true;
16
- async function getOptions(_workspace, _cliOptions) {
17
- return {};
18
- }
19
- async function scaffold(workspace, _options) {
20
- if (process.env.DECOHERE_BUILDER === "1") {
21
- _shouldInstall = false;
22
- return;
23
- }
24
- _pm = (0, _interop.detectPackageManager)(workspace.targetDir) ?? await (0, _interop.promptForPackageManager)();
25
- const answer = await (0, _prompt.ask)("\nInstall dependencies now? [yes/no] (yes): ", "yes");
26
- _shouldInstall = answer.toLowerCase() !== "no";
27
- }
28
- async function finalize(workspace, _options) {
29
- if (_shouldInstall) {
30
- const pm = _pm;
31
- console.log(`\nScaffolded ${workspace.name}. Installing dependencies...\n`);
32
- await pm.install({
33
- cwd: workspace.targetDir
34
- });
35
- }
36
- console.log(`\nDone! ${_shouldInstall ? "Next" : "To get started:"} steps:\n`);
37
- console.log(` cd ${workspace.name}`);
38
- if (!_shouldInstall) {
39
- const pmName = _pm?.name ?? "pnpm";
40
- console.log(` ${pmName} install`);
41
- }
42
- console.log(" code . # open in VS Code");
43
- console.log(" # then: Reopen in Container\n");
44
- }
45
- const FinalizeFeature = {
46
- getOptions,
47
- scaffold,
48
- finalize
49
- };
50
-
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdF9jbGlPcHRpb25zOiBvYmplY3QsXG4pOiBQcm9taXNlPG9iamVjdD4ge1xuXHRyZXR1cm4ge307XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIF9vcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0aWYgKHByb2Nlc3MuZW52LkRFQ09IRVJFX0JVSUxERVIgPT09IFwiMVwiKSB7XG5cdFx0X3Nob3VsZEluc3RhbGwgPSBmYWxzZTtcblx0XHRyZXR1cm47XG5cdH1cblx0X3BtID0gZGV0ZWN0UGFja2FnZU1hbmFnZXIod29ya3NwYWNlLnRhcmdldERpcikgPz8gKGF3YWl0IHByb21wdEZvclBhY2thZ2VNYW5hZ2VyKCkpO1xuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBhc2soXCJcXG5JbnN0YWxsIGRlcGVuZGVuY2llcyBub3c/IFt5ZXMvbm9dICh5ZXMpOiBcIiwgXCJ5ZXNcIik7XG5cdF9zaG91bGRJbnN0YWxsID0gYW5zd2VyLnRvTG93ZXJDYXNlKCkgIT09IFwibm9cIjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemUod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgX29wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAoX3Nob3VsZEluc3RhbGwpIHtcblx0XHRjb25zdCBwbSA9IF9wbSE7XG5cdFx0Y29uc29sZS5sb2coYFxcblNjYWZmb2xkZWQgJHt3b3Jrc3BhY2UubmFtZX0uIEluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uXFxuYCk7XG5cdFx0YXdhaXQgcG0uaW5zdGFsbCh7IGN3ZDogd29ya3NwYWNlLnRhcmdldERpciB9KTtcblx0fVxuXG5cdGNvbnNvbGUubG9nKGBcXG5Eb25lISAke19zaG91bGRJbnN0YWxsID8gXCJOZXh0XCIgOiBcIlRvIGdldCBzdGFydGVkOlwifSBzdGVwczpcXG5gKTtcblx0Y29uc29sZS5sb2coYCAgY2QgJHt3b3Jrc3BhY2UubmFtZX1gKTtcblx0aWYgKCFfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtTmFtZSA9IF9wbT8ubmFtZSA/PyBcInBucG1cIjtcblx0XHRjb25zb2xlLmxvZyhgICAke3BtTmFtZX0gaW5zdGFsbGApO1xuXHR9XG5cdGNvbnNvbGUubG9nKFwiICBjb2RlIC4gICAgICAgICAjIG9wZW4gaW4gVlMgQ29kZVwiKTtcblx0Y29uc29sZS5sb2coXCIgICAgICAgICAgICAgICAgICMgdGhlbjogUmVvcGVuIGluIENvbnRhaW5lclxcblwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbmFsaXplRmVhdHVyZTogRmVhdHVyZSA9IHsgZ2V0T3B0aW9ucywgc2NhZmZvbGQsIGZpbmFsaXplIH07XG4iXSwibmFtZXMiOlsiRmluYWxpemVGZWF0dXJlIiwiX3BtIiwiX3Nob3VsZEluc3RhbGwiLCJnZXRPcHRpb25zIiwiX3dvcmtzcGFjZSIsIl9jbGlPcHRpb25zIiwic2NhZmZvbGQiLCJ3b3Jrc3BhY2UiLCJfb3B0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJERUNPSEVSRV9CVUlMREVSIiwiZGV0ZWN0UGFja2FnZU1hbmFnZXIiLCJ0YXJnZXREaXIiLCJwcm9tcHRGb3JQYWNrYWdlTWFuYWdlciIsImFuc3dlciIsImFzayIsInRvTG93ZXJDYXNlIiwiZmluYWxpemUiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJuYW1lIiwiaW5zdGFsbCIsImN3ZCIsInBtTmFtZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE0Q2FBOzs7ZUFBQUE7Ozt5QkEzQ2lEO3dCQUMxQztBQUlwQiw0REFBNEQ7QUFDNUQsSUFBSUMsTUFBNkI7QUFDakMsSUFBSUMsaUJBQWlCO0FBRXJCLGVBQWVDLFdBQ2RDLFVBQTZCLEVBQzdCQyxXQUFtQjtJQUVuQixPQUFPLENBQUM7QUFDVDtBQUVBLGVBQWVDLFNBQVNDLFNBQTRCLEVBQUVDLFFBQWdCO0lBQ3JFLElBQUlDLFFBQVFDLEdBQUcsQ0FBQ0MsZ0JBQWdCLEtBQUssS0FBSztRQUN6Q1QsaUJBQWlCO1FBQ2pCO0lBQ0Q7SUFDQUQsTUFBTVcsSUFBQUEsNkJBQW9CLEVBQUNMLFVBQVVNLFNBQVMsS0FBTSxNQUFNQyxJQUFBQSxnQ0FBdUI7SUFDakYsTUFBTUMsU0FBUyxNQUFNQyxJQUFBQSxXQUFHLEVBQUMsZ0RBQWdEO0lBQ3pFZCxpQkFBaUJhLE9BQU9FLFdBQVcsT0FBTztBQUMzQztBQUVBLGVBQWVDLFNBQVNYLFNBQTRCLEVBQUVDLFFBQWdCO0lBQ3JFLElBQUlOLGdCQUFnQjtRQUNuQixNQUFNaUIsS0FBS2xCO1FBQ1htQixRQUFRQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUVkLFVBQVVlLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztRQUMxRSxNQUFNSCxHQUFHSSxPQUFPLENBQUM7WUFBRUMsS0FBS2pCLFVBQVVNLFNBQVM7UUFBQztJQUM3QztJQUVBTyxRQUFRQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUVuQixpQkFBaUIsU0FBUyxrQkFBa0IsU0FBUyxDQUFDO0lBQzdFa0IsUUFBUUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFZCxVQUFVZSxJQUFJLEVBQUU7SUFDcEMsSUFBSSxDQUFDcEIsZ0JBQWdCO1FBQ3BCLE1BQU11QixTQUFTeEIsS0FBS3FCLFFBQVE7UUFDNUJGLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRUksT0FBTyxRQUFRLENBQUM7SUFDbEM7SUFDQUwsUUFBUUMsR0FBRyxDQUFDO0lBQ1pELFFBQVFDLEdBQUcsQ0FBQztBQUNiO0FBRU8sTUFBTXJCLGtCQUEyQjtJQUFFRztJQUFZRztJQUFVWTtBQUFTIn0=
@@ -1,309 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "PostmanFeature", {
6
- enumerable: true,
7
- get: function() {
8
- return PostmanFeature;
9
- }
10
- });
11
- const _prompt = require("../../domain/prompt.js");
12
- const _const = require("../../models/const.js");
13
- const _auth0cli = /*#__PURE__*/ _interop_require_wildcard(require("./auth0-cli.js"));
14
- function _getRequireWildcardCache(nodeInterop) {
15
- if (typeof WeakMap !== "function") return null;
16
- var cacheBabelInterop = new WeakMap();
17
- var cacheNodeInterop = new WeakMap();
18
- return (_getRequireWildcardCache = function(nodeInterop) {
19
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
20
- })(nodeInterop);
21
- }
22
- function _interop_require_wildcard(obj, nodeInterop) {
23
- if (!nodeInterop && obj && obj.__esModule) {
24
- return obj;
25
- }
26
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
27
- return {
28
- default: obj
29
- };
30
- }
31
- var cache = _getRequireWildcardCache(nodeInterop);
32
- if (cache && cache.has(obj)) {
33
- return cache.get(obj);
34
- }
35
- var newObj = {
36
- __proto__: null
37
- };
38
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
39
- for(var key in obj){
40
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
41
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
42
- if (desc && (desc.get || desc.set)) {
43
- Object.defineProperty(newObj, key, desc);
44
- } else {
45
- newObj[key] = obj[key];
46
- }
47
- }
48
- }
49
- newObj.default = obj;
50
- if (cache) {
51
- cache.set(obj, newObj);
52
- }
53
- return newObj;
54
- }
55
- async function getOptions(_workspace, cliOptions) {
56
- if (cliOptions.postmanProvider != null) return {};
57
- const choices = [
58
- {
59
- label: "none",
60
- description: "skip"
61
- },
62
- {
63
- label: "local",
64
- description: "write collection + environment files"
65
- },
66
- {
67
- label: "api",
68
- description: "write files and upload to Postman.com"
69
- }
70
- ];
71
- const selected = await (0, _prompt.pick)("\n Postman: ", choices, (c)=>`${c.label} — ${c.description}`);
72
- const provider = selected?.label ?? "none";
73
- if (provider === "none") return {
74
- postmanProvider: "none"
75
- };
76
- if (provider === "local") return {
77
- postmanProvider: "local"
78
- };
79
- // api: collect API key + workspace selection
80
- const apiKey = process.env.POSTMAN_API_KEY ?? await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../domain/prompt.js"))).then((m)=>m.ask("\n Postman API key (app.getpostman.com/settings/me/api-keys): "));
81
- const headers = {
82
- "X-Api-Key": apiKey,
83
- "Content-Type": "application/json"
84
- };
85
- const wsRes = await fetch("https://api.getpostman.com/workspaces", {
86
- headers
87
- });
88
- if (!wsRes.ok) {
89
- console.error("\n Postman API key invalid — falling back to local files.");
90
- return {
91
- postmanProvider: "local"
92
- };
93
- }
94
- const { workspaces } = await wsRes.json();
95
- const wsChoices = [
96
- {
97
- label: "<new workspace>",
98
- id: null
99
- },
100
- ...workspaces.map((w)=>({
101
- label: `${w.name} (${w.type})`,
102
- id: w.id
103
- }))
104
- ];
105
- const wsPicked = await (0, _prompt.pick)("\n Postman workspace: ", wsChoices, (c)=>c.label);
106
- let workspaceId;
107
- if (!wsPicked || wsPicked.id === null) {
108
- const { ask } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../domain/prompt.js")));
109
- const wsName = await ask(` Workspace name: `);
110
- const createRes = await fetch("https://api.getpostman.com/workspaces", {
111
- method: "POST",
112
- headers,
113
- body: JSON.stringify({
114
- workspace: {
115
- name: wsName,
116
- type: "personal"
117
- }
118
- })
119
- });
120
- const { workspace: ws } = await createRes.json();
121
- workspaceId = ws.id;
122
- console.log(` ✓ Workspace created: ${wsName}`);
123
- } else {
124
- workspaceId = wsPicked.id;
125
- }
126
- return {
127
- postmanProvider: "api",
128
- apiKey,
129
- workspaceId
130
- };
131
- }
132
- function buildCollection(projectName, auth) {
133
- const authObj = auth?.auth0Domain ? {
134
- type: "oauth2",
135
- oauth2: [
136
- {
137
- key: "grant_type",
138
- value: "authorization_code_with_pkce",
139
- type: "string"
140
- },
141
- {
142
- key: "authUrl",
143
- value: "https://{{auth0Domain}}/authorize?audience={{auth0Audience}}",
144
- type: "string"
145
- },
146
- {
147
- key: "accessTokenUrl",
148
- value: "https://{{auth0Domain}}/oauth/token",
149
- type: "string"
150
- },
151
- {
152
- key: "clientId",
153
- value: "{{auth0ClientId}}",
154
- type: "string"
155
- },
156
- {
157
- key: "scope",
158
- value: "openid profile email",
159
- type: "string"
160
- },
161
- {
162
- key: "addTokenTo",
163
- value: "header",
164
- type: "string"
165
- },
166
- {
167
- key: "challengeAlgorithm",
168
- value: "S256",
169
- type: "string"
170
- }
171
- ]
172
- } : undefined;
173
- return {
174
- info: {
175
- name: `${projectName} WebAPI`,
176
- schema: "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
177
- },
178
- ...authObj ? {
179
- auth: authObj
180
- } : {},
181
- item: [
182
- {
183
- name: "Hello",
184
- request: {
185
- method: "GET",
186
- url: {
187
- raw: "{{baseUrl}}/hello",
188
- host: [
189
- "{{baseUrl}}"
190
- ],
191
- path: [
192
- "hello"
193
- ]
194
- }
195
- }
196
- }
197
- ]
198
- };
199
- }
200
- function buildEnvironmentYaml(name, auth) {
201
- const auth0Section = auth?.auth0Domain ? [
202
- " - key: auth0Domain",
203
- ` value: ${auth.auth0Domain}`,
204
- " - key: auth0Audience",
205
- ` value: '${auth.auth0Audience ?? ""}'`,
206
- " - key: auth0ClientId",
207
- ` value: '${auth.auth0ClientId ?? ""}'`,
208
- " description: Client ID of the Auth0 SPA application used by Postman for PKCE authentication"
209
- ].join("\n") + "\n" : "";
210
- return `name: ${name}\nvalues:\n - key: baseUrl\n value: 'http://localhost:3000'\n${auth0Section}`;
211
- }
212
- async function scaffold(workspace, options) {
213
- if (options.postmanProvider === "none") return;
214
- const authConfigModel = workspace.getModel(_const.WELL_KNOWN_FILES.AUTH_CONFIG);
215
- const authCfg = authConfigModel?.config;
216
- let spaClientId;
217
- if (options.postmanProvider === "api" && options.apiKey && authCfg?.issuerBaseUrl) {
218
- try {
219
- const app = _auth0cli.createSpaApp(`${workspace.name} Postman`, "https://oauth.pstmn.io/v1/callback");
220
- spaClientId = app.client_id;
221
- console.log(" ✓ Auth0 SPA app created for Postman PKCE");
222
- } catch {
223
- console.error(" ✗ Failed to create Auth0 SPA app — continuing without it.");
224
- }
225
- }
226
- const auth0Env = authCfg?.issuerBaseUrl ? {
227
- auth0Domain: authCfg.issuerBaseUrl.replace(/^https?:\/\//, ""),
228
- auth0Audience: authCfg.audience,
229
- auth0ClientId: spaClientId
230
- } : undefined;
231
- const projectName = workspace.name;
232
- const collection = buildCollection(projectName, auth0Env);
233
- const envYaml = buildEnvironmentYaml(`${projectName} — Local`, auth0Env);
234
- workspace.addFile({
235
- files: ()=>[
236
- {
237
- filePath: `postman/environments/${projectName} \u2014 Local.environment.yaml`,
238
- content: envYaml
239
- },
240
- {
241
- filePath: `postman/collections/${projectName}.postman_collection.json`,
242
- content: `${JSON.stringify(collection, null, 2)}\n`
243
- }
244
- ]
245
- });
246
- if (options.postmanProvider === "api" && options.apiKey) {
247
- const headers = {
248
- "X-Api-Key": options.apiKey,
249
- "Content-Type": "application/json"
250
- };
251
- const colRes = await fetch(`https://api.getpostman.com/collections?workspace=${options.workspaceId}`, {
252
- method: "POST",
253
- headers,
254
- body: JSON.stringify({
255
- collection
256
- })
257
- });
258
- if (colRes.ok) {
259
- console.log(" ✓ Postman collection uploaded");
260
- } else {
261
- console.error(" ✗ Failed to upload Postman collection");
262
- }
263
- const envVars = [
264
- {
265
- key: "baseUrl",
266
- value: "http://localhost:3000",
267
- enabled: true
268
- },
269
- ...auth0Env?.auth0Domain ? [
270
- {
271
- key: "auth0Domain",
272
- value: auth0Env.auth0Domain,
273
- enabled: true
274
- },
275
- {
276
- key: "auth0Audience",
277
- value: auth0Env.auth0Audience ?? "",
278
- enabled: true
279
- },
280
- {
281
- key: "auth0ClientId",
282
- value: auth0Env.auth0ClientId ?? "",
283
- enabled: true
284
- }
285
- ] : []
286
- ];
287
- const envRes = await fetch(`https://api.getpostman.com/environments?workspace=${options.workspaceId}`, {
288
- method: "POST",
289
- headers,
290
- body: JSON.stringify({
291
- environment: {
292
- name: `${projectName} — Local`,
293
- values: envVars
294
- }
295
- })
296
- });
297
- if (envRes.ok) {
298
- console.log(" ✓ Postman environment uploaded");
299
- } else {
300
- console.error(" ✗ Failed to upload Postman environment");
301
- }
302
- }
303
- }
304
- const PostmanFeature = {
305
- getOptions,
306
- scaffold
307
- };
308
-
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwaWNrIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9wcm9tcHQuanNcIjtcbmltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2NhZmZvbGQuc2VydmljZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29uZmlnTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2F1dGgtY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuZXhwb3J0IHR5cGUgUG9zdG1hbk9wdGlvbnMgPSB7XG5cdHBvc3RtYW5Qcm92aWRlcj86IFwiYXBpXCIgfCBcImxvY2FsXCIgfCBcIm5vbmVcIjtcblx0YXBpS2V5Pzogc3RyaW5nO1xuXHR3b3Jrc3BhY2VJZD86IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnMoXG5cdF93b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBQYXJ0aWFsPFBvc3RtYW5PcHRpb25zPixcbik6IFByb21pc2U8UGFydGlhbDxQb3N0bWFuT3B0aW9ucz4+IHtcblx0aWYgKGNsaU9wdGlvbnMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHJldHVybiB7fTtcblxuXHRjb25zdCBjaG9pY2VzID0gW1xuXHRcdHsgbGFiZWw6IFwibm9uZVwiIGFzIGNvbnN0LCBkZXNjcmlwdGlvbjogXCJza2lwXCIgfSxcblx0XHR7IGxhYmVsOiBcImxvY2FsXCIgYXMgY29uc3QsIGRlc2NyaXB0aW9uOiBcIndyaXRlIGNvbGxlY3Rpb24gKyBlbnZpcm9ubWVudCBmaWxlc1wiIH0sXG5cdFx0eyBsYWJlbDogXCJhcGlcIiBhcyBjb25zdCwgZGVzY3JpcHRpb246IFwid3JpdGUgZmlsZXMgYW5kIHVwbG9hZCB0byBQb3N0bWFuLmNvbVwiIH0sXG5cdF07XG5cdGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgcGljayhcblx0XHRcIlxcbiAgUG9zdG1hbjogXCIsXG5cdFx0Y2hvaWNlcyxcblx0XHQoYykgPT4gYCR7Yy5sYWJlbH0g4oCUICR7Yy5kZXNjcmlwdGlvbn1gLFxuXHQpO1xuXHRjb25zdCBwcm92aWRlciA9IHNlbGVjdGVkPy5sYWJlbCA/PyBcIm5vbmVcIjtcblxuXHRpZiAocHJvdmlkZXIgPT09IFwibm9uZVwiKSByZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwibm9uZVwiIH07XG5cdGlmIChwcm92aWRlciA9PT0gXCJsb2NhbFwiKSByZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwibG9jYWxcIiB9O1xuXG5cdC8vIGFwaTogY29sbGVjdCBBUEkga2V5ICsgd29ya3NwYWNlIHNlbGVjdGlvblxuXHRjb25zdCBhcGlLZXkgPVxuXHRcdHByb2Nlc3MuZW52LlBPU1RNQU5fQVBJX0tFWSA/P1xuXHRcdChhd2FpdCBpbXBvcnQoXCIuLi8uLi9kb21haW4vcHJvbXB0LmpzXCIpLnRoZW4oKG0pID0+XG5cdFx0XHRtLmFzayhcIlxcbiAgUG9zdG1hbiBBUEkga2V5IChhcHAuZ2V0cG9zdG1hbi5jb20vc2V0dGluZ3MvbWUvYXBpLWtleXMpOiBcIiksXG5cdFx0KSk7XG5cblx0Y29uc3QgaGVhZGVycyA9IHsgXCJYLUFwaS1LZXlcIjogYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXHRjb25zdCB3c1JlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7IGhlYWRlcnMgfSk7XG5cblx0aWYgKCF3c1Jlcy5vaykge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIFBvc3RtYW4gQVBJIGtleSBpbnZhbGlkIOKAlCBmYWxsaW5nIGJhY2sgdG8gbG9jYWwgZmlsZXMuXCIpO1xuXHRcdHJldHVybiB7IHBvc3RtYW5Qcm92aWRlcjogXCJsb2NhbFwiIH07XG5cdH1cblxuXHRjb25zdCB7IHdvcmtzcGFjZXMgfSA9IChhd2FpdCB3c1Jlcy5qc29uKCkpIGFzIHtcblx0XHR3b3Jrc3BhY2VzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nIH0+O1xuXHR9O1xuXG5cdHR5cGUgV3NDaG9pY2UgPSB7IGxhYmVsOiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudWxsIH07XG5cdGNvbnN0IHdzQ2hvaWNlczogV3NDaG9pY2VbXSA9IFtcblx0XHR7IGxhYmVsOiBcIjxuZXcgd29ya3NwYWNlPlwiLCBpZDogbnVsbCB9LFxuXHRcdC4uLndvcmtzcGFjZXMubWFwKCh3KSA9PiAoeyBsYWJlbDogYCR7dy5uYW1lfSAoJHt3LnR5cGV9KWAsIGlkOiB3LmlkIH0pKSxcblx0XTtcblxuXHRjb25zdCB3c1BpY2tlZCA9IGF3YWl0IHBpY2soXCJcXG4gIFBvc3RtYW4gd29ya3NwYWNlOiBcIiwgd3NDaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cblx0bGV0IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cdGlmICghd3NQaWNrZWQgfHwgd3NQaWNrZWQuaWQgPT09IG51bGwpIHtcblx0XHRjb25zdCB7IGFzayB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiKTtcblx0XHRjb25zdCB3c05hbWUgPSBhd2FpdCBhc2soYCAgV29ya3NwYWNlIG5hbWU6IGApO1xuXHRcdGNvbnN0IGNyZWF0ZVJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vd29ya3NwYWNlc1wiLCB7XG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgd29ya3NwYWNlOiB7IG5hbWU6IHdzTmFtZSwgdHlwZTogXCJwZXJzb25hbFwiIH0gfSksXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyB3b3Jrc3BhY2U6IHdzIH0gPSAoYXdhaXQgY3JlYXRlUmVzLmpzb24oKSkgYXMgeyB3b3Jrc3BhY2U6IHsgaWQ6IHN0cmluZyB9IH07XG5cdFx0d29ya3NwYWNlSWQgPSB3cy5pZDtcblx0XHRjb25zb2xlLmxvZyhgICDinJMgV29ya3NwYWNlIGNyZWF0ZWQ6ICR7d3NOYW1lfWApO1xuXHR9IGVsc2Uge1xuXHRcdHdvcmtzcGFjZUlkID0gd3NQaWNrZWQuaWQ7XG5cdH1cblxuXHRyZXR1cm4geyBwb3N0bWFuUHJvdmlkZXI6IFwiYXBpXCIsIGFwaUtleSwgd29ya3NwYWNlSWQgfTtcbn1cblxudHlwZSBBdXRoMEVudiA9IHtcblx0YXV0aDBEb21haW4/OiBzdHJpbmc7XG5cdGF1dGgwQXVkaWVuY2U/OiBzdHJpbmc7XG5cdGF1dGgwQ2xpZW50SWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBidWlsZENvbGxlY3Rpb24ocHJvamVjdE5hbWU6IHN0cmluZywgYXV0aD86IEF1dGgwRW52KTogdW5rbm93biB7XG5cdGNvbnN0IGF1dGhPYmogPSBhdXRoPy5hdXRoMERvbWFpblxuXHRcdD8ge1xuXHRcdFx0XHR0eXBlOiBcIm9hdXRoMlwiLFxuXHRcdFx0XHRvYXV0aDI6IFtcblx0XHRcdFx0XHR7IGtleTogXCJncmFudF90eXBlXCIsIHZhbHVlOiBcImF1dGhvcml6YXRpb25fY29kZV93aXRoX3BrY2VcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdFx0XHR2YWx1ZTogXCJodHRwczovL3t7YXV0aDBEb21haW59fS9hdXRob3JpemU/YXVkaWVuY2U9e3thdXRoMEF1ZGllbmNlfX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRrZXk6IFwiYWNjZXNzVG9rZW5VcmxcIixcblx0XHRcdFx0XHRcdHZhbHVlOiBcImh0dHBzOi8ve3thdXRoMERvbWFpbn19L29hdXRoL3Rva2VuXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiY2xpZW50SWRcIiwgdmFsdWU6IFwie3thdXRoMENsaWVudElkfX1cIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRcdHsga2V5OiBcInNjb3BlXCIsIHZhbHVlOiBcIm9wZW5pZCBwcm9maWxlIGVtYWlsXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0XHR7IGtleTogXCJhZGRUb2tlblRvXCIsIHZhbHVlOiBcImhlYWRlclwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdFx0eyBrZXk6IFwiY2hhbGxlbmdlQWxnb3JpdGhtXCIsIHZhbHVlOiBcIlMyNTZcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdHJldHVybiB7XG5cdFx0aW5mbzoge1xuXHRcdFx0bmFtZTogYCR7cHJvamVjdE5hbWV9IFdlYkFQSWAsXG5cdFx0XHRzY2hlbWE6IFwiaHR0cHM6Ly9zY2hlbWEuZ2V0cG9zdG1hbi5jb20vanNvbi9jb2xsZWN0aW9uL3YyLjEuMC9jb2xsZWN0aW9uLmpzb25cIixcblx0XHR9LFxuXHRcdC4uLihhdXRoT2JqID8geyBhdXRoOiBhdXRoT2JqIH0gOiB7fSksXG5cdFx0aXRlbTogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkhlbGxvXCIsXG5cdFx0XHRcdHJlcXVlc3Q6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0dXJsOiB7IHJhdzogXCJ7e2Jhc2VVcmx9fS9oZWxsb1wiLCBob3N0OiBbXCJ7e2Jhc2VVcmx9fVwiXSwgcGF0aDogW1wiaGVsbG9cIl0gfSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFbnZpcm9ubWVudFlhbWwobmFtZTogc3RyaW5nLCBhdXRoPzogQXV0aDBFbnYpOiBzdHJpbmcge1xuXHRjb25zdCBhdXRoMFNlY3Rpb24gPSBhdXRoPy5hdXRoMERvbWFpblxuXHRcdD8gW1xuXHRcdFx0XHRcIiAgLSBrZXk6IGF1dGgwRG9tYWluXCIsXG5cdFx0XHRcdGAgICAgdmFsdWU6ICR7YXV0aC5hdXRoMERvbWFpbn1gLFxuXHRcdFx0XHRcIiAgLSBrZXk6IGF1dGgwQXVkaWVuY2VcIixcblx0XHRcdFx0YCAgICB2YWx1ZTogJyR7YXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCJ9J2AsXG5cdFx0XHRcdFwiICAtIGtleTogYXV0aDBDbGllbnRJZFwiLFxuXHRcdFx0XHRgICAgIHZhbHVlOiAnJHthdXRoLmF1dGgwQ2xpZW50SWQgPz8gXCJcIn0nYCxcblx0XHRcdFx0XCIgICAgZGVzY3JpcHRpb246IENsaWVudCBJRCBvZiB0aGUgQXV0aDAgU1BBIGFwcGxpY2F0aW9uIHVzZWQgYnkgUG9zdG1hbiBmb3IgUEtDRSBhdXRoZW50aWNhdGlvblwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpICsgXCJcXG5cIlxuXHRcdDogXCJcIjtcblxuXHRyZXR1cm4gYG5hbWU6ICR7bmFtZX1cXG52YWx1ZXM6XFxuICAtIGtleTogYmFzZVVybFxcbiAgICB2YWx1ZTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCdcXG4ke2F1dGgwU2VjdGlvbn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBQb3N0bWFuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwibm9uZVwiKSByZXR1cm47XG5cblx0Y29uc3QgYXV0aENvbmZpZ01vZGVsID0gd29ya3NwYWNlLmdldE1vZGVsPEF1dGhDb25maWdNb2RlbD4oV0VMTF9LTk9XTl9GSUxFUy5BVVRIX0NPTkZJRyk7XG5cdGNvbnN0IGF1dGhDZmcgPSBhdXRoQ29uZmlnTW9kZWw/LmNvbmZpZztcblxuXHRsZXQgc3BhQ2xpZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRpZiAob3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwiYXBpXCIgJiYgb3B0aW9ucy5hcGlLZXkgJiYgYXV0aENmZz8uaXNzdWVyQmFzZVVybCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhcHAgPSBhdXRoMENsaS5jcmVhdGVTcGFBcHAoXG5cdFx0XHRcdGAke3dvcmtzcGFjZS5uYW1lfSBQb3N0bWFuYCxcblx0XHRcdFx0XCJodHRwczovL29hdXRoLnBzdG1uLmlvL3YxL2NhbGxiYWNrXCIsXG5cdFx0XHQpO1xuXHRcdFx0c3BhQ2xpZW50SWQgPSBhcHAuY2xpZW50X2lkO1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBBdXRoMCBTUEEgYXBwIGNyZWF0ZWQgZm9yIFBvc3RtYW4gUEtDRVwiKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gY3JlYXRlIEF1dGgwIFNQQSBhcHAg4oCUIGNvbnRpbnVpbmcgd2l0aG91dCBpdC5cIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYXV0aDBFbnY6IEF1dGgwRW52IHwgdW5kZWZpbmVkID0gYXV0aENmZz8uaXNzdWVyQmFzZVVybFxuXHRcdD8ge1xuXHRcdFx0XHRhdXRoMERvbWFpbjogYXV0aENmZy5pc3N1ZXJCYXNlVXJsLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgXCJcIiksXG5cdFx0XHRcdGF1dGgwQXVkaWVuY2U6IGF1dGhDZmcuYXVkaWVuY2UsXG5cdFx0XHRcdGF1dGgwQ2xpZW50SWQ6IHNwYUNsaWVudElkLFxuXHRcdFx0fVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHByb2plY3ROYW1lID0gd29ya3NwYWNlLm5hbWU7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBidWlsZENvbGxlY3Rpb24ocHJvamVjdE5hbWUsIGF1dGgwRW52KTtcblx0Y29uc3QgZW52WWFtbCA9IGJ1aWxkRW52aXJvbm1lbnRZYW1sKGAke3Byb2plY3ROYW1lfSDigJQgTG9jYWxgLCBhdXRoMEVudik7XG5cblx0d29ya3NwYWNlLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBgcG9zdG1hbi9lbnZpcm9ubWVudHMvJHtwcm9qZWN0TmFtZX0gXFx1MjAxNCBMb2NhbC5lbnZpcm9ubWVudC55YW1sYCxcblx0XHRcdFx0Y29udGVudDogZW52WWFtbCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBgcG9zdG1hbi9jb2xsZWN0aW9ucy8ke3Byb2plY3ROYW1lfS5wb3N0bWFuX2NvbGxlY3Rpb24uanNvbmAsXG5cdFx0XHRcdGNvbnRlbnQ6IGAke0pTT04uc3RyaW5naWZ5KGNvbGxlY3Rpb24sIG51bGwsIDIpfVxcbmAsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdGlmIChvcHRpb25zLnBvc3RtYW5Qcm92aWRlciA9PT0gXCJhcGlcIiAmJiBvcHRpb25zLmFwaUtleSkge1xuXHRcdGNvbnN0IGhlYWRlcnMgPSB7IFwiWC1BcGktS2V5XCI6IG9wdGlvbnMuYXBpS2V5LCBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9O1xuXG5cdFx0Y29uc3QgY29sUmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vY29sbGVjdGlvbnM/d29ya3NwYWNlPSR7b3B0aW9ucy53b3Jrc3BhY2VJZH1gLFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNvbGxlY3Rpb24gfSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGNvbFJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGNvbGxlY3Rpb24gdXBsb2FkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCIgIOKclyBGYWlsZWQgdG8gdXBsb2FkIFBvc3RtYW4gY29sbGVjdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnZWYXJzID0gW1xuXHRcdFx0eyBrZXk6IFwiYmFzZVVybFwiLCB2YWx1ZTogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0Li4uKGF1dGgwRW52Py5hdXRoMERvbWFpblxuXHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdHsga2V5OiBcImF1dGgwRG9tYWluXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMERvbWFpbiwgZW5hYmxlZDogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0eyBrZXk6IFwiYXV0aDBBdWRpZW5jZVwiLCB2YWx1ZTogYXV0aDBFbnYuYXV0aDBBdWRpZW5jZSA/PyBcIlwiLCBlbmFibGVkOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHR7IGtleTogXCJhdXRoMENsaWVudElkXCIsIHZhbHVlOiBhdXRoMEVudi5hdXRoMENsaWVudElkID8/IFwiXCIsIGVuYWJsZWQ6IHRydWUgfSxcblx0XHRcdFx0XHRdXG5cdFx0XHRcdDogW10pLFxuXHRcdF07XG5cdFx0Y29uc3QgZW52UmVzID0gYXdhaXQgZmV0Y2goXG5cdFx0XHRgaHR0cHM6Ly9hcGkuZ2V0cG9zdG1hbi5jb20vZW52aXJvbm1lbnRzP3dvcmtzcGFjZT0ke29wdGlvbnMud29ya3NwYWNlSWR9YCxcblx0XHRcdHtcblx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0Ym9keTogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdGVudmlyb25tZW50OiB7IG5hbWU6IGAke3Byb2plY3ROYW1lfSDigJQgTG9jYWxgLCB2YWx1ZXM6IGVudlZhcnMgfSxcblx0XHRcdFx0fSksXG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0aWYgKGVudlJlcy5vaykge1xuXHRcdFx0Y29uc29sZS5sb2coXCIgIOKckyBQb3N0bWFuIGVudmlyb25tZW50IHVwbG9hZGVkXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiICDinJcgRmFpbGVkIHRvIHVwbG9hZCBQb3N0bWFuIGVudmlyb25tZW50XCIpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY29uc3QgUG9zdG1hbkZlYXR1cmU6IEZlYXR1cmU8UG9zdG1hbk9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuIl0sIm5hbWVzIjpbIlBvc3RtYW5GZWF0dXJlIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwicG9zdG1hblByb3ZpZGVyIiwiY2hvaWNlcyIsImxhYmVsIiwiZGVzY3JpcHRpb24iLCJzZWxlY3RlZCIsInBpY2siLCJjIiwicHJvdmlkZXIiLCJhcGlLZXkiLCJwcm9jZXNzIiwiZW52IiwiUE9TVE1BTl9BUElfS0VZIiwidGhlbiIsIm0iLCJhc2siLCJoZWFkZXJzIiwid3NSZXMiLCJmZXRjaCIsIm9rIiwiY29uc29sZSIsImVycm9yIiwid29ya3NwYWNlcyIsImpzb24iLCJ3c0Nob2ljZXMiLCJpZCIsIm1hcCIsInciLCJuYW1lIiwidHlwZSIsIndzUGlja2VkIiwid29ya3NwYWNlSWQiLCJ3c05hbWUiLCJjcmVhdGVSZXMiLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIndvcmtzcGFjZSIsIndzIiwibG9nIiwiYnVpbGRDb2xsZWN0aW9uIiwicHJvamVjdE5hbWUiLCJhdXRoIiwiYXV0aE9iaiIsImF1dGgwRG9tYWluIiwib2F1dGgyIiwia2V5IiwidmFsdWUiLCJ1bmRlZmluZWQiLCJpbmZvIiwic2NoZW1hIiwiaXRlbSIsInJlcXVlc3QiLCJ1cmwiLCJyYXciLCJob3N0IiwicGF0aCIsImJ1aWxkRW52aXJvbm1lbnRZYW1sIiwiYXV0aDBTZWN0aW9uIiwiYXV0aDBBdWRpZW5jZSIsImF1dGgwQ2xpZW50SWQiLCJqb2luIiwic2NhZmZvbGQiLCJvcHRpb25zIiwiYXV0aENvbmZpZ01vZGVsIiwiZ2V0TW9kZWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiQVVUSF9DT05GSUciLCJhdXRoQ2ZnIiwiY29uZmlnIiwic3BhQ2xpZW50SWQiLCJpc3N1ZXJCYXNlVXJsIiwiYXBwIiwiYXV0aDBDbGkiLCJjcmVhdGVTcGFBcHAiLCJjbGllbnRfaWQiLCJhdXRoMEVudiIsInJlcGxhY2UiLCJhdWRpZW5jZSIsImNvbGxlY3Rpb24iLCJlbnZZYW1sIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiY29sUmVzIiwiZW52VmFycyIsImVuYWJsZWQiLCJlbnZSZXMiLCJlbnZpcm9ubWVudCIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkEyT2FBOzs7ZUFBQUE7Ozt3QkEzT1E7dUJBQ1k7a0VBSVA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVExQixlQUFlQyxXQUNkQyxVQUE2QixFQUM3QkMsVUFBbUM7SUFFbkMsSUFBSUEsV0FBV0MsZUFBZSxJQUFJLE1BQU0sT0FBTyxDQUFDO0lBRWhELE1BQU1DLFVBQVU7UUFDZjtZQUFFQyxPQUFPO1lBQWlCQyxhQUFhO1FBQU87UUFDOUM7WUFBRUQsT0FBTztZQUFrQkMsYUFBYTtRQUF1QztRQUMvRTtZQUFFRCxPQUFPO1lBQWdCQyxhQUFhO1FBQXdDO0tBQzlFO0lBQ0QsTUFBTUMsV0FBVyxNQUFNQyxJQUFBQSxZQUFJLEVBQzFCLGlCQUNBSixTQUNBLENBQUNLLElBQU0sR0FBR0EsRUFBRUosS0FBSyxDQUFDLEdBQUcsRUFBRUksRUFBRUgsV0FBVyxF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
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ApiPackageJson", {
6
- enumerable: true,
7
- get: function() {
8
- return ApiPackageJson;
9
- }
10
- });
11
- const _const = require("../../models/const.js");
12
- const _version = require("../../version.js");
13
- class ApiPackageJson {
14
- projectName;
15
- key = _const.WELL_KNOWN_FILES.API_PACKAGE_JSON;
16
- _dependencies;
17
- _devDependencies = {};
18
- constructor(projectName){
19
- this.projectName = projectName;
20
- this._dependencies = {
21
- "@decohere/cortex": _version.CREATE_VERSION,
22
- "@decohere/crucible": _version.CREATE_VERSION
23
- };
24
- }
25
- addDependency(name, version) {
26
- this._dependencies[name] = version;
27
- return this;
28
- }
29
- addDevDependency(name, version) {
30
- this._devDependencies[name] = version;
31
- return this;
32
- }
33
- files() {
34
- const pkg = {
35
- name: `@${this.projectName}/api`,
36
- version: "0.0.1",
37
- type: "module",
38
- main: "src/main.ts",
39
- dependencies: {
40
- ...this._dependencies
41
- }
42
- };
43
- if (Object.keys(this._devDependencies).length > 0) {
44
- pkg.devDependencies = {
45
- ...this._devDependencies
46
- };
47
- }
48
- return [
49
- {
50
- filePath: "package.json",
51
- content: JSON.stringify(pkg, null, 2)
52
- }
53
- ];
54
- }
55
- }
56
-
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy9hcGktcGFja2FnZS1qc29uLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWVkTW9kZWwsIFNvdXJjZUZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5pbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi92ZXJzaW9uLmpzXCI7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgYHByb2plY3RzL2FwaS9wYWNrYWdlLmpzb25gLlxuICpcbiAqIFN0YXJ0cyB3aXRoIHRoZSBjb3JlIGNvcnRleCArIGNydWNpYmxlIGRlcHMuIEZlYXR1cmVzIGNhbiBjYWxsXG4gKiBgYWRkRGVwZW5kZW5jeWAgLyBgYWRkRGV2RGVwZW5kZW5jeWAgdG8gZXh0ZW5kLlxuICovXG5leHBvcnQgY2xhc3MgQXBpUGFja2FnZUpzb24gaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuQVBJX1BBQ0tBR0VfSlNPTjtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdHByaXZhdGUgcmVhZG9ubHkgX2RldkRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb2plY3ROYW1lOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXMgPSB7XG5cdFx0XHRcIkBkZWNvaGVyZS9jb3J0ZXhcIjogQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcIkBkZWNvaGVyZS9jcnVjaWJsZVwiOiBDUkVBVEVfVkVSU0lPTixcblx0XHR9O1xuXHR9XG5cblx0cHVibGljIGFkZERlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZERldkRlcGVuZGVuY3kobmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9kZXZEZXBlbmRlbmNpZXNbbmFtZV0gPSB2ZXJzaW9uO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgcGtnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcblx0XHRcdG5hbWU6IGBAJHt0aGlzLnByb2plY3ROYW1lfS9hcGlgLFxuXHRcdFx0dmVyc2lvbjogXCIwLjAuMVwiLFxuXHRcdFx0dHlwZTogXCJtb2R1bGVcIixcblx0XHRcdG1haW46IFwic3JjL21haW4udHNcIixcblx0XHRcdGRlcGVuZGVuY2llczogeyAuLi50aGlzLl9kZXBlbmRlbmNpZXMgfSxcblx0XHR9O1xuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLl9kZXZEZXBlbmRlbmNpZXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHBrZy5kZXZEZXBlbmRlbmNpZXMgPSB7IC4uLnRoaXMuX2RldkRlcGVuZGVuY2llcyB9O1xuXHRcdH1cblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJwYWNrYWdlLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkFwaVBhY2thZ2VKc29uIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIkFQSV9QQUNLQUdFX0pTT04iLCJfZGVwZW5kZW5jaWVzIiwiX2RldkRlcGVuZGVuY2llcyIsInByb2plY3ROYW1lIiwiQ1JFQVRFX1ZFUlNJT04iLCJhZGREZXBlbmRlbmN5IiwibmFtZSIsInZlcnNpb24iLCJhZGREZXZEZXBlbmRlbmN5IiwiZmlsZXMiLCJwa2ciLCJ0eXBlIiwibWFpbiIsImRlcGVuZGVuY2llcyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJkZXZEZXBlbmRlbmNpZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7OytCQVVhQTs7O2VBQUFBOzs7dUJBVm9CO3lCQUVGO0FBUXhCLE1BQU1BOztJQUNJQyxNQUFNQyx1QkFBZ0IsQ0FBQ0MsZ0JBQWdCLENBQUM7SUFFdkNDLGNBQXNDO0lBQ3RDQyxtQkFBMkMsQ0FBQyxFQUFFO0lBRS9ELFlBQW1CLEFBQWlCQyxXQUFtQixDQUFFO2FBQXJCQSxjQUFBQTtRQUNuQyxJQUFJLENBQUNGLGFBQWEsR0FBRztZQUNwQixvQkFBb0JHLHVCQUFjO1lBQ2xDLHNCQUFzQkEsdUJBQWM7UUFDckM7SUFDRDtJQUVPQyxjQUFjQyxJQUFZLEVBQUVDLE9BQWUsRUFBUTtRQUN6RCxJQUFJLENBQUNOLGFBQWEsQ0FBQ0ssS0FBSyxHQUFHQztRQUMzQixPQUFPLElBQUk7SUFDWjtJQUVPQyxpQkFBaUJGLElBQVksRUFBRUMsT0FBZSxFQUFRO1FBQzVELElBQUksQ0FBQ0wsZ0JBQWdCLENBQUNJLEtBQUssR0FBR0M7UUFDOUIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsUUFBc0I7UUFDNUIsTUFBTUMsTUFBK0I7WUFDcENKLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDSCxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2hDSSxTQUFTO1lBQ1RJLE1BQU07WUFDTkMsTUFBTTtZQUNOQyxjQUFjO2dCQUFFLEdBQUcsSUFBSSxDQUFDWixhQUFhO1lBQUM7UUFDdkM7UUFDQSxJQUFJYSxPQUFPQyxJQUFJLENBQUMsSUFBSSxDQUFDYixnQkFBZ0IsRUFBRWMsTUFBTSxHQUFHLEdBQUc7WUFDbEROLElBQUlPLGVBQWUsR0FBRztnQkFBRSxHQUFHLElBQUksQ0FBQ2YsZ0JBQWdCO1lBQUM7UUFDbEQ7UUFDQSxPQUFPO1lBQ047Z0JBQ0NnQixVQUFVO2dCQUNWQyxTQUFTQyxLQUFLQyxTQUFTLENBQUNYLEtBQUssTUFBTTtZQUNwQztTQUNBO0lBQ0Y7QUFDRCJ9