quidproquo-cli 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/docker/cdk-deployer/Dockerfile +13 -0
- package/docker/dev-server/Dockerfile +48 -0
- package/lib/commonjs/bin/qpq.d.ts +2 -0
- package/lib/commonjs/bin/qpq.js +6 -0
- package/lib/commonjs/bin/qpq.js.map +1 -0
- package/lib/commonjs/bin/qpqCdkApp.d.ts +1 -0
- package/lib/commonjs/bin/qpqCdkApp.js +8 -0
- package/lib/commonjs/bin/qpqCdkApp.js.map +1 -0
- package/lib/commonjs/cli/index.d.ts +1 -0
- package/lib/commonjs/cli/index.js +18 -0
- package/lib/commonjs/cli/index.js.map +1 -0
- package/lib/commonjs/cli/runCli.d.ts +1 -0
- package/lib/commonjs/cli/runCli.js +80 -0
- package/lib/commonjs/cli/runCli.js.map +1 -0
- package/lib/commonjs/commands/go.d.ts +1 -0
- package/lib/commonjs/commands/go.js +28 -0
- package/lib/commonjs/commands/go.js.map +1 -0
- package/lib/commonjs/commands/goDev.d.ts +1 -0
- package/lib/commonjs/commands/goDev.js +143 -0
- package/lib/commonjs/commands/goDev.js.map +1 -0
- package/lib/commonjs/commands/goDevWeb.d.ts +1 -0
- package/lib/commonjs/commands/goDevWeb.js +122 -0
- package/lib/commonjs/commands/goDevWeb.js.map +1 -0
- package/lib/commonjs/commands/goDocker.d.ts +1 -0
- package/lib/commonjs/commands/goDocker.js +32 -0
- package/lib/commonjs/commands/goDocker.js.map +1 -0
- package/lib/commonjs/commands/hooks.d.ts +1 -0
- package/lib/commonjs/commands/hooks.js +26 -0
- package/lib/commonjs/commands/hooks.js.map +1 -0
- package/lib/commonjs/commands/prep.d.ts +1 -0
- package/lib/commonjs/commands/prep.js +28 -0
- package/lib/commonjs/commands/prep.js.map +1 -0
- package/lib/commonjs/commands/publish.d.ts +4 -0
- package/lib/commonjs/commands/publish.js +54 -0
- package/lib/commonjs/commands/publish.js.map +1 -0
- package/lib/commonjs/commands/synth.d.ts +1 -0
- package/lib/commonjs/commands/synth.js +79 -0
- package/lib/commonjs/commands/synth.js.map +1 -0
- package/lib/commonjs/commands/teardown.d.ts +1 -0
- package/lib/commonjs/commands/teardown.js +33 -0
- package/lib/commonjs/commands/teardown.js.map +1 -0
- package/lib/commonjs/index.d.ts +1 -0
- package/lib/commonjs/index.js +18 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lib/args.d.ts +2 -0
- package/lib/commonjs/lib/args.js +21 -0
- package/lib/commonjs/lib/args.js.map +1 -0
- package/lib/commonjs/lib/deployEnv.d.ts +6 -0
- package/lib/commonjs/lib/deployEnv.js +76 -0
- package/lib/commonjs/lib/deployEnv.js.map +1 -0
- package/lib/commonjs/lib/deployPrompts.d.ts +25 -0
- package/lib/commonjs/lib/deployPrompts.js +83 -0
- package/lib/commonjs/lib/deployPrompts.js.map +1 -0
- package/lib/commonjs/lib/devServerEntry.d.ts +1 -0
- package/lib/commonjs/lib/devServerEntry.js +53 -0
- package/lib/commonjs/lib/devServerEntry.js.map +1 -0
- package/lib/commonjs/lib/discovery.d.ts +10 -0
- package/lib/commonjs/lib/discovery.js +56 -0
- package/lib/commonjs/lib/discovery.js.map +1 -0
- package/lib/commonjs/lib/hooks.d.ts +2 -0
- package/lib/commonjs/lib/hooks.js +45 -0
- package/lib/commonjs/lib/hooks.js.map +1 -0
- package/lib/commonjs/lib/packageRoot.d.ts +1 -0
- package/lib/commonjs/lib/packageRoot.js +21 -0
- package/lib/commonjs/lib/packageRoot.js.map +1 -0
- package/lib/commonjs/lib/prompts.d.ts +3 -0
- package/lib/commonjs/lib/prompts.js +64 -0
- package/lib/commonjs/lib/prompts.js.map +1 -0
- package/lib/commonjs/lib/qpqConfigs.d.ts +3 -0
- package/lib/commonjs/lib/qpqConfigs.js +19 -0
- package/lib/commonjs/lib/qpqConfigs.js.map +1 -0
- package/lib/commonjs/lib/resolveAppSelection.d.ts +6 -0
- package/lib/commonjs/lib/resolveAppSelection.js +58 -0
- package/lib/commonjs/lib/resolveAppSelection.js.map +1 -0
- package/lib/commonjs/lib/rspackRun.d.ts +2 -0
- package/lib/commonjs/lib/rspackRun.js +23 -0
- package/lib/commonjs/lib/rspackRun.js.map +1 -0
- package/lib/commonjs/lib/runCommand.d.ts +13 -0
- package/lib/commonjs/lib/runCommand.js +78 -0
- package/lib/commonjs/lib/runCommand.js.map +1 -0
- package/lib/commonjs/lib/runTasks.d.ts +10 -0
- package/lib/commonjs/lib/runTasks.js +42 -0
- package/lib/commonjs/lib/runTasks.js.map +1 -0
- package/lib/commonjs/lib/timing.d.ts +2 -0
- package/lib/commonjs/lib/timing.js +11 -0
- package/lib/commonjs/lib/timing.js.map +1 -0
- package/lib/commonjs/lib/views.d.ts +2 -0
- package/lib/commonjs/lib/views.js +32 -0
- package/lib/commonjs/lib/views.js.map +1 -0
- package/lib/commonjs/platforms/aws/awsCredentials.d.ts +1 -0
- package/lib/commonjs/platforms/aws/awsCredentials.js +28 -0
- package/lib/commonjs/platforms/aws/awsCredentials.js.map +1 -0
- package/lib/commonjs/platforms/aws/cdkApp.d.ts +2 -0
- package/lib/commonjs/platforms/aws/cdkApp.js +19 -0
- package/lib/commonjs/platforms/aws/cdkApp.js.map +1 -0
- package/lib/commonjs/platforms/aws/go.d.ts +2 -0
- package/lib/commonjs/platforms/aws/go.js +116 -0
- package/lib/commonjs/platforms/aws/go.js.map +1 -0
- package/lib/commonjs/platforms/aws/goDocker.d.ts +2 -0
- package/lib/commonjs/platforms/aws/goDocker.js +287 -0
- package/lib/commonjs/platforms/aws/goDocker.js.map +1 -0
- package/lib/commonjs/platforms/aws/identity.d.ts +2 -0
- package/lib/commonjs/platforms/aws/identity.js +26 -0
- package/lib/commonjs/platforms/aws/identity.js.map +1 -0
- package/lib/commonjs/platforms/aws/index.d.ts +2 -0
- package/lib/commonjs/platforms/aws/index.js +19 -0
- package/lib/commonjs/platforms/aws/index.js.map +1 -0
- package/lib/commonjs/platforms/aws/publish.d.ts +4 -0
- package/lib/commonjs/platforms/aws/publish.js +66 -0
- package/lib/commonjs/platforms/aws/publish.js.map +1 -0
- package/lib/commonjs/platforms/aws/remote.d.ts +11 -0
- package/lib/commonjs/platforms/aws/remote.js +106 -0
- package/lib/commonjs/platforms/aws/remote.js.map +1 -0
- package/lib/commonjs/platforms/aws/stacks.d.ts +7 -0
- package/lib/commonjs/platforms/aws/stacks.js +91 -0
- package/lib/commonjs/platforms/aws/stacks.js.map +1 -0
- package/lib/commonjs/platforms/aws/teardown.d.ts +2 -0
- package/lib/commonjs/platforms/aws/teardown.js +59 -0
- package/lib/commonjs/platforms/aws/teardown.js.map +1 -0
- package/lib/commonjs/platforms/aws/viewsSync.d.ts +2 -0
- package/lib/commonjs/platforms/aws/viewsSync.js +39 -0
- package/lib/commonjs/platforms/aws/viewsSync.js.map +1 -0
- package/lib/commonjs/platforms/docker/go.d.ts +2 -0
- package/lib/commonjs/platforms/docker/go.js +160 -0
- package/lib/commonjs/platforms/docker/go.js.map +1 -0
- package/lib/commonjs/platforms/docker/index.d.ts +2 -0
- package/lib/commonjs/platforms/docker/index.js +27 -0
- package/lib/commonjs/platforms/docker/index.js.map +1 -0
- package/lib/commonjs/platforms/index.d.ts +4 -0
- package/lib/commonjs/platforms/index.js +39 -0
- package/lib/commonjs/platforms/index.js.map +1 -0
- package/lib/commonjs/platforms/types.d.ts +16 -0
- package/lib/commonjs/platforms/types.js +9 -0
- package/lib/commonjs/platforms/types.js.map +1 -0
- package/lib/esm/bin/qpq.d.ts +2 -0
- package/lib/esm/bin/qpq.js +4 -0
- package/lib/esm/bin/qpq.js.map +1 -0
- package/lib/esm/bin/qpqCdkApp.d.ts +1 -0
- package/lib/esm/bin/qpqCdkApp.js +6 -0
- package/lib/esm/bin/qpqCdkApp.js.map +1 -0
- package/lib/esm/cli/index.d.ts +1 -0
- package/lib/esm/cli/index.js +2 -0
- package/lib/esm/cli/index.js.map +1 -0
- package/lib/esm/cli/runCli.d.ts +1 -0
- package/lib/esm/cli/runCli.js +67 -0
- package/lib/esm/cli/runCli.js.map +1 -0
- package/lib/esm/commands/go.d.ts +1 -0
- package/lib/esm/commands/go.js +15 -0
- package/lib/esm/commands/go.js.map +1 -0
- package/lib/esm/commands/goDev.d.ts +1 -0
- package/lib/esm/commands/goDev.js +127 -0
- package/lib/esm/commands/goDev.js.map +1 -0
- package/lib/esm/commands/goDevWeb.d.ts +1 -0
- package/lib/esm/commands/goDevWeb.js +107 -0
- package/lib/esm/commands/goDevWeb.js.map +1 -0
- package/lib/esm/commands/goDocker.d.ts +1 -0
- package/lib/esm/commands/goDocker.js +19 -0
- package/lib/esm/commands/goDocker.js.map +1 -0
- package/lib/esm/commands/hooks.d.ts +1 -0
- package/lib/esm/commands/hooks.js +13 -0
- package/lib/esm/commands/hooks.js.map +1 -0
- package/lib/esm/commands/prep.d.ts +1 -0
- package/lib/esm/commands/prep.js +15 -0
- package/lib/esm/commands/prep.js.map +1 -0
- package/lib/esm/commands/publish.d.ts +4 -0
- package/lib/esm/commands/publish.js +38 -0
- package/lib/esm/commands/publish.js.map +1 -0
- package/lib/esm/commands/synth.d.ts +1 -0
- package/lib/esm/commands/synth.js +63 -0
- package/lib/esm/commands/synth.js.map +1 -0
- package/lib/esm/commands/teardown.d.ts +1 -0
- package/lib/esm/commands/teardown.js +20 -0
- package/lib/esm/commands/teardown.js.map +1 -0
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/lib/args.d.ts +2 -0
- package/lib/esm/lib/args.js +16 -0
- package/lib/esm/lib/args.js.map +1 -0
- package/lib/esm/lib/deployEnv.d.ts +6 -0
- package/lib/esm/lib/deployEnv.js +60 -0
- package/lib/esm/lib/deployEnv.js.map +1 -0
- package/lib/esm/lib/deployPrompts.d.ts +25 -0
- package/lib/esm/lib/deployPrompts.js +69 -0
- package/lib/esm/lib/deployPrompts.js.map +1 -0
- package/lib/esm/lib/devServerEntry.d.ts +1 -0
- package/lib/esm/lib/devServerEntry.js +46 -0
- package/lib/esm/lib/devServerEntry.js.map +1 -0
- package/lib/esm/lib/discovery.d.ts +10 -0
- package/lib/esm/lib/discovery.js +40 -0
- package/lib/esm/lib/discovery.js.map +1 -0
- package/lib/esm/lib/hooks.d.ts +2 -0
- package/lib/esm/lib/hooks.js +27 -0
- package/lib/esm/lib/hooks.js.map +1 -0
- package/lib/esm/lib/packageRoot.d.ts +1 -0
- package/lib/esm/lib/packageRoot.js +14 -0
- package/lib/esm/lib/packageRoot.js.map +1 -0
- package/lib/esm/lib/prompts.d.ts +3 -0
- package/lib/esm/lib/prompts.js +16 -0
- package/lib/esm/lib/prompts.js.map +1 -0
- package/lib/esm/lib/qpqConfigs.d.ts +3 -0
- package/lib/esm/lib/qpqConfigs.js +14 -0
- package/lib/esm/lib/qpqConfigs.js.map +1 -0
- package/lib/esm/lib/resolveAppSelection.d.ts +6 -0
- package/lib/esm/lib/resolveAppSelection.js +45 -0
- package/lib/esm/lib/resolveAppSelection.js.map +1 -0
- package/lib/esm/lib/rspackRun.d.ts +2 -0
- package/lib/esm/lib/rspackRun.js +19 -0
- package/lib/esm/lib/rspackRun.js.map +1 -0
- package/lib/esm/lib/runCommand.d.ts +13 -0
- package/lib/esm/lib/runCommand.js +69 -0
- package/lib/esm/lib/runCommand.js.map +1 -0
- package/lib/esm/lib/runTasks.d.ts +10 -0
- package/lib/esm/lib/runTasks.js +28 -0
- package/lib/esm/lib/runTasks.js.map +1 -0
- package/lib/esm/lib/timing.d.ts +2 -0
- package/lib/esm/lib/timing.js +6 -0
- package/lib/esm/lib/timing.js.map +1 -0
- package/lib/esm/lib/views.d.ts +2 -0
- package/lib/esm/lib/views.js +15 -0
- package/lib/esm/lib/views.js.map +1 -0
- package/lib/esm/platforms/aws/awsCredentials.d.ts +1 -0
- package/lib/esm/platforms/aws/awsCredentials.js +15 -0
- package/lib/esm/platforms/aws/awsCredentials.js.map +1 -0
- package/lib/esm/platforms/aws/cdkApp.d.ts +2 -0
- package/lib/esm/platforms/aws/cdkApp.js +11 -0
- package/lib/esm/platforms/aws/cdkApp.js.map +1 -0
- package/lib/esm/platforms/aws/go.d.ts +2 -0
- package/lib/esm/platforms/aws/go.js +100 -0
- package/lib/esm/platforms/aws/go.js.map +1 -0
- package/lib/esm/platforms/aws/goDocker.d.ts +2 -0
- package/lib/esm/platforms/aws/goDocker.js +271 -0
- package/lib/esm/platforms/aws/goDocker.js.map +1 -0
- package/lib/esm/platforms/aws/identity.d.ts +2 -0
- package/lib/esm/platforms/aws/identity.js +22 -0
- package/lib/esm/platforms/aws/identity.js.map +1 -0
- package/lib/esm/platforms/aws/index.d.ts +2 -0
- package/lib/esm/platforms/aws/index.js +16 -0
- package/lib/esm/platforms/aws/index.js.map +1 -0
- package/lib/esm/platforms/aws/publish.d.ts +4 -0
- package/lib/esm/platforms/aws/publish.js +50 -0
- package/lib/esm/platforms/aws/publish.js.map +1 -0
- package/lib/esm/platforms/aws/remote.d.ts +11 -0
- package/lib/esm/platforms/aws/remote.js +90 -0
- package/lib/esm/platforms/aws/remote.js.map +1 -0
- package/lib/esm/platforms/aws/stacks.d.ts +7 -0
- package/lib/esm/platforms/aws/stacks.js +69 -0
- package/lib/esm/platforms/aws/stacks.js.map +1 -0
- package/lib/esm/platforms/aws/teardown.d.ts +2 -0
- package/lib/esm/platforms/aws/teardown.js +46 -0
- package/lib/esm/platforms/aws/teardown.js.map +1 -0
- package/lib/esm/platforms/aws/viewsSync.d.ts +2 -0
- package/lib/esm/platforms/aws/viewsSync.js +25 -0
- package/lib/esm/platforms/aws/viewsSync.js.map +1 -0
- package/lib/esm/platforms/docker/go.d.ts +2 -0
- package/lib/esm/platforms/docker/go.js +143 -0
- package/lib/esm/platforms/docker/go.js.map +1 -0
- package/lib/esm/platforms/docker/index.d.ts +2 -0
- package/lib/esm/platforms/docker/index.js +15 -0
- package/lib/esm/platforms/docker/index.js.map +1 -0
- package/lib/esm/platforms/index.d.ts +4 -0
- package/lib/esm/platforms/index.js +20 -0
- package/lib/esm/platforms/index.js.map +1 -0
- package/lib/esm/platforms/types.d.ts +16 -0
- package/lib/esm/platforms/types.js +6 -0
- package/lib/esm/platforms/types.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.hooksCommand = void 0;
|
|
13
|
+
// `qpq hooks <name>` — run the `qpq:<name>` script of every app that defines
|
|
14
|
+
// one (apps/<app>/package.json). Wire the root package.json's lifecycle to it,
|
|
15
|
+
// e.g. "postinstall": "qpq hooks postinstall".
|
|
16
|
+
const hooks_1 = require("../lib/hooks");
|
|
17
|
+
const hooksCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
const [hook] = argv.filter((a) => !a.startsWith('--'));
|
|
19
|
+
if (!hook) {
|
|
20
|
+
console.error('Usage: qpq hooks <name> (runs qpq:<name> in every app that defines it)');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
yield (0, hooks_1.runAppHookForAllApps)(hook);
|
|
24
|
+
});
|
|
25
|
+
exports.hooksCommand = hooksCommand;
|
|
26
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/commands/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,+CAA+C;AAC/C,wCAAoD;AAE7C,MAAM,YAAY,GAAG,CAAO,IAAc,EAAiB,EAAE;IAClE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAA,4BAAoB,EAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAA,CAAC;AATW,QAAA,YAAY,gBASvB","sourcesContent":["// `qpq hooks <name>` — run the `qpq:<name>` script of every app that defines\n// one (apps/<app>/package.json). Wire the root package.json's lifecycle to it,\n// e.g. \"postinstall\": \"qpq hooks postinstall\".\nimport { runAppHookForAllApps } from '../lib/hooks';\n\nexport const hooksCommand = async (argv: string[]): Promise<void> => {\n const [hook] = argv.filter((a) => !a.startsWith('--'));\n\n if (!hook) {\n console.error('Usage: qpq hooks <name> (runs qpq:<name> in every app that defines it)');\n process.exit(1);\n }\n\n await runAppHookForAllApps(hook);\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const prepCommand: (argv: string[]) => Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.prepCommand = void 0;
|
|
13
|
+
// `qpq prep` — regenerates apps/<app>/tsconfig.federated.json (the TypeScript
|
|
14
|
+
// path aliases for cross-view federated imports). Run after adding/removing a
|
|
15
|
+
// `// federated.export` marker.
|
|
16
|
+
const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
|
|
17
|
+
const discovery_1 = require("../lib/discovery");
|
|
18
|
+
const resolveAppSelection_1 = require("../lib/resolveAppSelection");
|
|
19
|
+
const prepCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
const selection = yield (0, resolveAppSelection_1.resolveAppSelection)({ argv, allowAll: true });
|
|
21
|
+
const appNames = selection === 'all' ? (0, discovery_1.getAvailableApps)() : [selection];
|
|
22
|
+
for (const appName of appNames) {
|
|
23
|
+
const exposeCount = (0, quidproquo_deploy_rspack_1.writeFederatedTsconfigForApp)((0, discovery_1.getRoot)(), appName);
|
|
24
|
+
console.log(`prep: wrote ${exposeCount} federated aliases to apps/${appName}/tsconfig.federated.json`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
exports.prepCommand = prepCommand;
|
|
28
|
+
//# sourceMappingURL=prep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prep.js","sourceRoot":"","sources":["../../../src/commands/prep.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,gCAAgC;AAChC,uEAAwE;AAExE,gDAA6D;AAC7D,oEAAiE;AAE1D,MAAM,WAAW,GAAG,CAAO,IAAc,EAAiB,EAAE;IACjE,MAAM,SAAS,GAAG,MAAM,IAAA,yCAAmB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,4BAAgB,GAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAExE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAA,uDAA4B,EAAC,IAAA,mBAAO,GAAE,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,8BAA8B,OAAO,0BAA0B,CAAC,CAAC;IACzG,CAAC;AACH,CAAC,CAAA,CAAC;AARW,QAAA,WAAW,eAQtB","sourcesContent":["// `qpq prep` — regenerates apps/<app>/tsconfig.federated.json (the TypeScript\n// path aliases for cross-view federated imports). Run after adding/removing a\n// `// federated.export` marker.\nimport { writeFederatedTsconfigForApp } from 'quidproquo-deploy-rspack';\n\nimport { getAvailableApps, getRoot } from '../lib/discovery';\nimport { resolveAppSelection } from '../lib/resolveAppSelection';\n\nexport const prepCommand = async (argv: string[]): Promise<void> => {\n const selection = await resolveAppSelection({ argv, allowAll: true });\n const appNames = selection === 'all' ? getAvailableApps() : [selection];\n\n for (const appName of appNames) {\n const exposeCount = writeFederatedTsconfigForApp(getRoot(), appName);\n console.log(`prep: wrote ${exposeCount} federated aliases to apps/${appName}/tsconfig.federated.json`);\n }\n};\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const publishCommand: (argv: string[]) => Promise<void>;
|
|
2
|
+
export declare const publishBuildCommand: (argv: string[]) => Promise<void>;
|
|
3
|
+
export declare const publishUploadCommand: (argv: string[]) => Promise<void>;
|
|
4
|
+
export declare const publishDeployCommand: (argv: string[]) => Promise<void>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.publishDeployCommand = exports.publishUploadCommand = exports.publishBuildCommand = exports.publishCommand = void 0;
|
|
13
|
+
// `qpq publish[:build|:upload|:deploy]` — build each backend service as a
|
|
14
|
+
// module-federation remote and publish it into the platform's federated code
|
|
15
|
+
// store, so the deployed backends federate their story code instead of running
|
|
16
|
+
// the bundled copy. The mechanics live in the platform driver (AWS: S3-backed,
|
|
17
|
+
// see platforms/aws/publish).
|
|
18
|
+
//
|
|
19
|
+
// Usage:
|
|
20
|
+
// qpq publish --app docgen (all services)
|
|
21
|
+
// qpq publish --app docgen --service template
|
|
22
|
+
const args_1 = require("../lib/args");
|
|
23
|
+
const deployEnv_1 = require("../lib/deployEnv");
|
|
24
|
+
const discovery_1 = require("../lib/discovery");
|
|
25
|
+
const resolveAppSelection_1 = require("../lib/resolveAppSelection");
|
|
26
|
+
const platforms_1 = require("../platforms");
|
|
27
|
+
const resolvePublishSelection = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
const appName = yield (0, resolveAppSelection_1.resolveAppSelection)({ argv, envVar: 'DEPLOY_APP_NAME' });
|
|
29
|
+
const { platform } = yield (0, deployEnv_1.resolveDeployEnvironment)(argv, appName);
|
|
30
|
+
const requestedService = (0, args_1.getArgValue)(argv, '--service');
|
|
31
|
+
const serviceNames = requestedService ? [requestedService] : (0, discovery_1.getServiceNames)(appName);
|
|
32
|
+
return { driver: (0, platforms_1.getPlatformDriver)(platform), appName, serviceNames };
|
|
33
|
+
});
|
|
34
|
+
const publishCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
+
const { driver, appName, serviceNames } = yield resolvePublishSelection(argv);
|
|
36
|
+
yield driver.publish(appName, serviceNames);
|
|
37
|
+
});
|
|
38
|
+
exports.publishCommand = publishCommand;
|
|
39
|
+
const publishBuildCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
const { driver, appName, serviceNames } = yield resolvePublishSelection(argv);
|
|
41
|
+
yield driver.publishBuild(appName, serviceNames);
|
|
42
|
+
});
|
|
43
|
+
exports.publishBuildCommand = publishBuildCommand;
|
|
44
|
+
const publishUploadCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
const { driver, appName, serviceNames } = yield resolvePublishSelection(argv);
|
|
46
|
+
yield driver.publishUpload(appName, serviceNames);
|
|
47
|
+
});
|
|
48
|
+
exports.publishUploadCommand = publishUploadCommand;
|
|
49
|
+
const publishDeployCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
+
const { driver, appName, serviceNames } = yield resolvePublishSelection(argv);
|
|
51
|
+
yield driver.publishDeploy(appName, serviceNames);
|
|
52
|
+
});
|
|
53
|
+
exports.publishDeployCommand = publishDeployCommand;
|
|
54
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,8BAA8B;AAC9B,EAAE;AACF,SAAS;AACT,+DAA+D;AAC/D,gDAAgD;AAChD,sCAA0C;AAC1C,gDAA4D;AAC5D,gDAAmD;AACnD,oEAAiE;AACjE,4CAAoE;AAQpE,MAAM,uBAAuB,GAAG,CAAO,IAAc,EAA6B,EAAE;IAClF,MAAM,OAAO,GAAG,MAAM,IAAA,yCAAmB,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,oCAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEnE,MAAM,gBAAgB,GAAG,IAAA,kBAAW,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAe,EAAC,OAAO,CAAC,CAAC;IAEtF,OAAO,EAAE,MAAM,EAAE,IAAA,6BAAiB,EAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACxE,CAAC,CAAA,CAAC;AAEK,MAAM,cAAc,GAAG,CAAO,IAAc,EAAiB,EAAE;IACpE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC9C,CAAC,CAAA,CAAC;AAHW,QAAA,cAAc,kBAGzB;AAEK,MAAM,mBAAmB,GAAG,CAAO,IAAc,EAAiB,EAAE;IACzE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC,CAAA,CAAC;AAHW,QAAA,mBAAmB,uBAG9B;AAEK,MAAM,oBAAoB,GAAG,CAAO,IAAc,EAAiB,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC,CAAA,CAAC;AAHW,QAAA,oBAAoB,wBAG/B;AAEK,MAAM,oBAAoB,GAAG,CAAO,IAAc,EAAiB,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC,CAAA,CAAC;AAHW,QAAA,oBAAoB,wBAG/B","sourcesContent":["// `qpq publish[:build|:upload|:deploy]` — build each backend service as a\n// module-federation remote and publish it into the platform's federated code\n// store, so the deployed backends federate their story code instead of running\n// the bundled copy. The mechanics live in the platform driver (AWS: S3-backed,\n// see platforms/aws/publish).\n//\n// Usage:\n// qpq publish --app docgen (all services)\n// qpq publish --app docgen --service template\nimport { getArgValue } from '../lib/args';\nimport { resolveDeployEnvironment } from '../lib/deployEnv';\nimport { getServiceNames } from '../lib/discovery';\nimport { resolveAppSelection } from '../lib/resolveAppSelection';\nimport { getPlatformDriver, QpqPlatformDriver } from '../platforms';\n\ntype PublishSelection = {\n driver: QpqPlatformDriver;\n appName: string;\n serviceNames: string[];\n};\n\nconst resolvePublishSelection = async (argv: string[]): Promise<PublishSelection> => {\n const appName = await resolveAppSelection({ argv, envVar: 'DEPLOY_APP_NAME' });\n const { platform } = await resolveDeployEnvironment(argv, appName);\n\n const requestedService = getArgValue(argv, '--service');\n const serviceNames = requestedService ? [requestedService] : getServiceNames(appName);\n\n return { driver: getPlatformDriver(platform), appName, serviceNames };\n};\n\nexport const publishCommand = async (argv: string[]): Promise<void> => {\n const { driver, appName, serviceNames } = await resolvePublishSelection(argv);\n await driver.publish(appName, serviceNames);\n};\n\nexport const publishBuildCommand = async (argv: string[]): Promise<void> => {\n const { driver, appName, serviceNames } = await resolvePublishSelection(argv);\n await driver.publishBuild(appName, serviceNames);\n};\n\nexport const publishUploadCommand = async (argv: string[]): Promise<void> => {\n const { driver, appName, serviceNames } = await resolvePublishSelection(argv);\n await driver.publishUpload(appName, serviceNames);\n};\n\nexport const publishDeployCommand = async (argv: string[]): Promise<void> => {\n const { driver, appName, serviceNames } = await resolvePublishSelection(argv);\n await driver.publishDeploy(appName, serviceNames);\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const synthCommand: (argv: string[]) => Promise<void>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.synthCommand = void 0;
|
|
16
|
+
// `qpq synth [service]` — synthesizes each backend service's QPQ config to
|
|
17
|
+
// dist/apps/<app>/infrastructure/<module>-config.json.
|
|
18
|
+
//
|
|
19
|
+
// Runs with ts-node hooks registered (see runCli), which transpiles each
|
|
20
|
+
// service's infrastructure.ts on require. Cross-package `@scope/*` imports
|
|
21
|
+
// resolve through the workspace node_modules symlinks to already-built dist.
|
|
22
|
+
const quidproquo_core_1 = require("quidproquo-core");
|
|
23
|
+
const fs_1 = __importDefault(require("fs"));
|
|
24
|
+
const path_1 = __importDefault(require("path"));
|
|
25
|
+
const args_1 = require("../lib/args");
|
|
26
|
+
const deployEnv_1 = require("../lib/deployEnv");
|
|
27
|
+
const discovery_1 = require("../lib/discovery");
|
|
28
|
+
const qpqConfigs_1 = require("../lib/qpqConfigs");
|
|
29
|
+
const resolveAppSelection_1 = require("../lib/resolveAppSelection");
|
|
30
|
+
const processConfig = (folderName, appName) => {
|
|
31
|
+
console.log(`Processing infrastructure: [${folderName}] for app [${appName}]`);
|
|
32
|
+
const qpqConfig = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, folderName);
|
|
33
|
+
const moduleName = quidproquo_core_1.qpqCoreUtils.getApplicationModuleName(qpqConfig);
|
|
34
|
+
const directoryPath = path_1.default.join((0, discovery_1.getRoot)(), 'dist', 'apps', appName, 'infrastructure');
|
|
35
|
+
fs_1.default.mkdirSync(directoryPath, { recursive: true });
|
|
36
|
+
fs_1.default.writeFileSync(path_1.default.join(directoryPath, `${moduleName}-config.json`), JSON.stringify(qpqConfig, null, 2));
|
|
37
|
+
console.log(` -> ${appName}/infrastructure/${moduleName}-config.json`);
|
|
38
|
+
};
|
|
39
|
+
const synthCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
const [specifiedServiceName] = (0, args_1.getPositionalArgs)(argv, ['--app', '--env']);
|
|
41
|
+
const hasExplicitApp = argv.includes('--app') || argv.some((a) => a.startsWith('--app=')) || !!process.env.npm_config_app || !!process.env.DEPLOY_APP_NAME;
|
|
42
|
+
let appNames;
|
|
43
|
+
if (specifiedServiceName && !hasExplicitApp) {
|
|
44
|
+
// A bare service name is unambiguous — synth it in whichever app owns it.
|
|
45
|
+
const appWithService = (0, discovery_1.getAvailableApps)().find((appName) => (0, discovery_1.getServiceNamesWithSubdir)(appName, 'service').includes(specifiedServiceName));
|
|
46
|
+
if (!appWithService) {
|
|
47
|
+
console.error(`Service '${specifiedServiceName}' not found in any app`);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
appNames = [appWithService];
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const selection = yield (0, resolveAppSelection_1.resolveAppSelection)({
|
|
54
|
+
argv,
|
|
55
|
+
envVar: 'DEPLOY_APP_NAME',
|
|
56
|
+
allowAll: true,
|
|
57
|
+
});
|
|
58
|
+
appNames = selection === 'all' ? (0, discovery_1.getAvailableApps)() : [selection];
|
|
59
|
+
}
|
|
60
|
+
console.log(`QPQ synthesizing apps: ${appNames.join(', ')}`);
|
|
61
|
+
for (const appName of appNames) {
|
|
62
|
+
// Service configs read ENVIRONMENT / AWS_DEFAULT_* at require time. When
|
|
63
|
+
// invoked inside a deploy they're already primed; standalone synth primes
|
|
64
|
+
// them from deploy.config.json (development default).
|
|
65
|
+
(0, deployEnv_1.primeDeployEnvFromConfig)(appName);
|
|
66
|
+
const serviceNames = specifiedServiceName ? [specifiedServiceName] : (0, discovery_1.getServiceNamesWithSubdir)(appName, 'service');
|
|
67
|
+
for (const folderName of serviceNames) {
|
|
68
|
+
try {
|
|
69
|
+
processConfig(folderName, appName);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error(`Failed to process ${folderName} in ${appName}:`, error);
|
|
73
|
+
process.exitCode = 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
exports.synthCommand = synthCommand;
|
|
79
|
+
//# sourceMappingURL=synth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synth.js","sourceRoot":"","sources":["../../../src/commands/synth.ts"],"names":[],"mappings":"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","sourcesContent":["// `qpq synth [service]` — synthesizes each backend service's QPQ config to\n// dist/apps/<app>/infrastructure/<module>-config.json.\n//\n// Runs with ts-node hooks registered (see runCli), which transpiles each\n// service's infrastructure.ts on require. Cross-package `@scope/*` imports\n// resolve through the workspace node_modules symlinks to already-built dist.\nimport { qpqCoreUtils } from 'quidproquo-core';\n\nimport fs from 'fs';\nimport path from 'path';\n\nimport { getPositionalArgs } from '../lib/args';\nimport { primeDeployEnvFromConfig } from '../lib/deployEnv';\nimport { getAvailableApps, getRoot, getServiceNamesWithSubdir } from '../lib/discovery';\nimport { loadServiceQpqConfig } from '../lib/qpqConfigs';\nimport { resolveAppSelection } from '../lib/resolveAppSelection';\n\nconst processConfig = (folderName: string, appName: string): void => {\n console.log(`Processing infrastructure: [${folderName}] for app [${appName}]`);\n const qpqConfig = loadServiceQpqConfig(appName, folderName);\n const moduleName = qpqCoreUtils.getApplicationModuleName(qpqConfig);\n\n const directoryPath = path.join(getRoot(), 'dist', 'apps', appName, 'infrastructure');\n fs.mkdirSync(directoryPath, { recursive: true });\n fs.writeFileSync(path.join(directoryPath, `${moduleName}-config.json`), JSON.stringify(qpqConfig, null, 2));\n console.log(` -> ${appName}/infrastructure/${moduleName}-config.json`);\n};\n\nexport const synthCommand = async (argv: string[]): Promise<void> => {\n const [specifiedServiceName] = getPositionalArgs(argv, ['--app', '--env']);\n\n const hasExplicitApp =\n argv.includes('--app') || argv.some((a) => a.startsWith('--app=')) || !!process.env.npm_config_app || !!process.env.DEPLOY_APP_NAME;\n\n let appNames: string[];\n if (specifiedServiceName && !hasExplicitApp) {\n // A bare service name is unambiguous — synth it in whichever app owns it.\n const appWithService = getAvailableApps().find((appName) => getServiceNamesWithSubdir(appName, 'service').includes(specifiedServiceName));\n if (!appWithService) {\n console.error(`Service '${specifiedServiceName}' not found in any app`);\n process.exit(1);\n }\n appNames = [appWithService];\n } else {\n const selection = await resolveAppSelection({\n argv,\n envVar: 'DEPLOY_APP_NAME',\n allowAll: true,\n });\n appNames = selection === 'all' ? getAvailableApps() : [selection];\n }\n\n console.log(`QPQ synthesizing apps: ${appNames.join(', ')}`);\n\n for (const appName of appNames) {\n // Service configs read ENVIRONMENT / AWS_DEFAULT_* at require time. When\n // invoked inside a deploy they're already primed; standalone synth primes\n // them from deploy.config.json (development default).\n primeDeployEnvFromConfig(appName);\n\n const serviceNames = specifiedServiceName ? [specifiedServiceName] : getServiceNamesWithSubdir(appName, 'service');\n\n for (const folderName of serviceNames) {\n try {\n processConfig(folderName, appName);\n } catch (error) {\n console.error(`Failed to process ${folderName} in ${appName}:`, error);\n process.exitCode = 1;\n }\n }\n }\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const teardownCommand: (argv: string[]) => Promise<void>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.teardownCommand = void 0;
|
|
13
|
+
// `qpq teardown` — interactive destroy, the counterpart of `qpq go`. Resolves
|
|
14
|
+
// the app + environment the same way, asks which services to tear down (with
|
|
15
|
+
// a typed confirmation — this deletes stored data), then hands off to the
|
|
16
|
+
// platform driver to destroy the web, api and inf stacks in that order.
|
|
17
|
+
const deployEnv_1 = require("../lib/deployEnv");
|
|
18
|
+
const deployPrompts_1 = require("../lib/deployPrompts");
|
|
19
|
+
const resolveAppSelection_1 = require("../lib/resolveAppSelection");
|
|
20
|
+
const platforms_1 = require("../platforms");
|
|
21
|
+
const teardownCommand = (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
const appName = yield (0, resolveAppSelection_1.resolveAppSelection)({ argv, envVar: 'DEPLOY_APP_NAME' });
|
|
23
|
+
const { platform } = yield (0, deployEnv_1.resolveDeployEnvironment)(argv, appName);
|
|
24
|
+
const driver = (0, platforms_1.getPlatformDriver)(platform);
|
|
25
|
+
if (!driver.teardown) {
|
|
26
|
+
console.error(`The '${platform}' platform has no teardown strategy.`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
const plan = yield (0, deployPrompts_1.promptTeardownPlan)(appName);
|
|
30
|
+
yield driver.teardown(appName, plan);
|
|
31
|
+
});
|
|
32
|
+
exports.teardownCommand = teardownCommand;
|
|
33
|
+
//# sourceMappingURL=teardown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teardown.js","sourceRoot":"","sources":["../../../src/commands/teardown.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,wEAAwE;AACxE,gDAA4D;AAC5D,wDAA0D;AAC1D,oEAAiE;AACjE,4CAAiD;AAE1C,MAAM,eAAe,GAAG,CAAO,IAAc,EAAiB,EAAE;IACrE,MAAM,OAAO,GAAG,MAAM,IAAA,yCAAmB,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,oCAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,QAAQ,sCAAsC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAA,kCAAkB,EAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC,CAAA,CAAC;AAbW,QAAA,eAAe,mBAa1B","sourcesContent":["// `qpq teardown` — interactive destroy, the counterpart of `qpq go`. Resolves\n// the app + environment the same way, asks which services to tear down (with\n// a typed confirmation — this deletes stored data), then hands off to the\n// platform driver to destroy the web, api and inf stacks in that order.\nimport { resolveDeployEnvironment } from '../lib/deployEnv';\nimport { promptTeardownPlan } from '../lib/deployPrompts';\nimport { resolveAppSelection } from '../lib/resolveAppSelection';\nimport { getPlatformDriver } from '../platforms';\n\nexport const teardownCommand = async (argv: string[]): Promise<void> => {\n const appName = await resolveAppSelection({ argv, envVar: 'DEPLOY_APP_NAME' });\n const { platform } = await resolveDeployEnvironment(argv, appName);\n const driver = getPlatformDriver(platform);\n\n if (!driver.teardown) {\n console.error(`The '${platform}' platform has no teardown strategy.`);\n process.exit(1);\n }\n\n const plan = await promptTeardownPlan(appName);\n\n await driver.teardown(appName, plan);\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './cli';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./cli"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB","sourcesContent":["export * from './cli';\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPositionalArgs = exports.getArgValue = void 0;
|
|
4
|
+
// Flag parsing over the command's argv (everything after the command name).
|
|
5
|
+
const getArgValue = (argv, flag) => {
|
|
6
|
+
const eq = argv.find((a) => a.startsWith(`${flag}=`));
|
|
7
|
+
if (eq)
|
|
8
|
+
return eq.slice(`${flag}=`.length);
|
|
9
|
+
const idx = argv.indexOf(flag);
|
|
10
|
+
return idx >= 0 ? argv[idx + 1] : undefined;
|
|
11
|
+
};
|
|
12
|
+
exports.getArgValue = getArgValue;
|
|
13
|
+
// Positional args = non-flag args, skipping values consumed by known flags.
|
|
14
|
+
const getPositionalArgs = (argv, valueFlags) => argv.filter((arg, index) => {
|
|
15
|
+
if (arg.startsWith('--'))
|
|
16
|
+
return false;
|
|
17
|
+
const previous = argv[index - 1];
|
|
18
|
+
return !(previous && valueFlags.includes(previous));
|
|
19
|
+
});
|
|
20
|
+
exports.getPositionalArgs = getPositionalArgs;
|
|
21
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AACrE,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,IAAY,EAAsB,EAAE;IAC9E,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IACtD,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC,CAAC;AALW,QAAA,WAAW,eAKtB;AAEF,4EAA4E;AACrE,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAAE,UAAoB,EAAY,EAAE,CAClF,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IACzB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AALQ,QAAA,iBAAiB,qBAKzB","sourcesContent":["// Flag parsing over the command's argv (everything after the command name).\nexport const getArgValue = (argv: string[], flag: string): string | undefined => {\n const eq = argv.find((a) => a.startsWith(`${flag}=`));\n if (eq) return eq.slice(`${flag}=`.length);\n const idx = argv.indexOf(flag);\n return idx >= 0 ? argv[idx + 1] : undefined;\n};\n\n// Positional args = non-flag args, skipping values consumed by known flags.\nexport const getPositionalArgs = (argv: string[], valueFlags: string[]): string[] =>\n argv.filter((arg, index) => {\n if (arg.startsWith('--')) return false;\n const previous = argv[index - 1];\n return !(previous && valueFlags.includes(previous));\n });\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const primeDeployEnvFromConfig: (appName: string, defaultEnvironment?: string) => void;
|
|
2
|
+
export interface ResolvedDeployEnvironment {
|
|
3
|
+
environment: string;
|
|
4
|
+
platform: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const resolveDeployEnvironment: (argv: string[], appName: string) => Promise<ResolvedDeployEnvironment>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.resolveDeployEnvironment = exports.primeDeployEnvFromConfig = void 0;
|
|
13
|
+
const quidproquo_deploy_awscdk_1 = require("quidproquo-deploy-awscdk");
|
|
14
|
+
const platforms_1 = require("../platforms");
|
|
15
|
+
const args_1 = require("./args");
|
|
16
|
+
const discovery_1 = require("./discovery");
|
|
17
|
+
const prompts_1 = require("./prompts");
|
|
18
|
+
// Best-effort identity priming for local dev/build commands (go:dev, synth):
|
|
19
|
+
// fills ENVIRONMENT and the platform driver's identity env vars from the app's
|
|
20
|
+
// deploy.config.json when they're unset — never prompts, never exits. Service
|
|
21
|
+
// configs read those env vars at load time, so this must run before any
|
|
22
|
+
// infrastructure.ts is required.
|
|
23
|
+
const primeDeployEnvFromConfig = (appName, defaultEnvironment = 'development') => {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
process.env.ENVIRONMENT = process.env.ENVIRONMENT || defaultEnvironment;
|
|
26
|
+
try {
|
|
27
|
+
const deployConfig = (0, quidproquo_deploy_awscdk_1.getQpqAppDeployConfig)((0, discovery_1.getRoot)(), appName);
|
|
28
|
+
const target = (_a = deployConfig.environments) === null || _a === void 0 ? void 0 : _a[process.env.ENVIRONMENT];
|
|
29
|
+
(_b = (0, platforms_1.findPlatformDriver)((target === null || target === void 0 ? void 0 : target.platform) || platforms_1.QpqDeployPlatform.aws)) === null || _b === void 0 ? void 0 : _b.primeDeployIdentity(target);
|
|
30
|
+
}
|
|
31
|
+
catch (_c) {
|
|
32
|
+
// no deploy.config.json — fine for local dev
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.primeDeployEnvFromConfig = primeDeployEnvFromConfig;
|
|
36
|
+
// Resolves the deploy identity for an app and primes the process environment
|
|
37
|
+
// with it. The app's deploy.config.json owns environment -> platform +
|
|
38
|
+
// identity (config-owned identity); already-set env vars win, so CI overrides
|
|
39
|
+
// and older setups keep working.
|
|
40
|
+
//
|
|
41
|
+
// Environment resolution: --env flag, then the sole configured environment,
|
|
42
|
+
// then an interactive prompt over the configured environments (a shell
|
|
43
|
+
// ENVIRONMENT is only the prompt's default, never a silent pick), then — for
|
|
44
|
+
// headless runs and configs without an environments map — ENVIRONMENT itself.
|
|
45
|
+
const resolveDeployEnvironment = (argv, appName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
const deployConfig = (0, quidproquo_deploy_awscdk_1.getQpqAppDeployConfig)((0, discovery_1.getRoot)(), appName);
|
|
48
|
+
const configuredEnvironments = Object.keys((_a = deployConfig.environments) !== null && _a !== void 0 ? _a : {});
|
|
49
|
+
let environment = (0, args_1.getArgValue)(argv, '--env');
|
|
50
|
+
if (!environment && configuredEnvironments.length === 1) {
|
|
51
|
+
environment = configuredEnvironments[0];
|
|
52
|
+
console.log(`Using environment: ${environment}`);
|
|
53
|
+
}
|
|
54
|
+
if (!environment && configuredEnvironments.length > 1 && process.stdin.isTTY) {
|
|
55
|
+
const defaultEnvironment = process.env.ENVIRONMENT && configuredEnvironments.includes(process.env.ENVIRONMENT) ? process.env.ENVIRONMENT : undefined;
|
|
56
|
+
environment = yield (0, prompts_1.promptSelect)('Select environment', configuredEnvironments, defaultEnvironment);
|
|
57
|
+
}
|
|
58
|
+
if (!environment) {
|
|
59
|
+
environment = process.env.ENVIRONMENT;
|
|
60
|
+
}
|
|
61
|
+
if (!environment) {
|
|
62
|
+
console.error(`No environment selected — pass --env <name> or add "environments" to apps/${appName}/deploy.config.json`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
process.env.ENVIRONMENT = environment;
|
|
66
|
+
const target = (_b = deployConfig.environments) === null || _b === void 0 ? void 0 : _b[environment];
|
|
67
|
+
const platform = (0, args_1.getArgValue)(argv, '--platform') || (target === null || target === void 0 ? void 0 : target.platform) || platforms_1.QpqDeployPlatform.aws;
|
|
68
|
+
const missingIdentity = (0, platforms_1.getPlatformDriver)(platform).primeDeployIdentity(target);
|
|
69
|
+
if (missingIdentity.length > 0) {
|
|
70
|
+
console.error(`Deploy identity for environment '${environment}' (platform '${platform}') is incomplete — missing ${missingIdentity.join(', ')}. Add it to apps/${appName}/deploy.config.json under "environments".`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
return { environment, platform };
|
|
74
|
+
});
|
|
75
|
+
exports.resolveDeployEnvironment = resolveDeployEnvironment;
|
|
76
|
+
//# sourceMappingURL=deployEnv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployEnv.js","sourceRoot":"","sources":["../../../src/lib/deployEnv.ts"],"names":[],"mappings":"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","sourcesContent":["import { getQpqAppDeployConfig } from 'quidproquo-deploy-awscdk';\n\nimport { findPlatformDriver, getPlatformDriver, QpqDeployPlatform } from '../platforms';\nimport { getArgValue } from './args';\nimport { getRoot } from './discovery';\nimport { promptSelect } from './prompts';\n\n// Best-effort identity priming for local dev/build commands (go:dev, synth):\n// fills ENVIRONMENT and the platform driver's identity env vars from the app's\n// deploy.config.json when they're unset — never prompts, never exits. Service\n// configs read those env vars at load time, so this must run before any\n// infrastructure.ts is required.\nexport const primeDeployEnvFromConfig = (appName: string, defaultEnvironment = 'development'): void => {\n process.env.ENVIRONMENT = process.env.ENVIRONMENT || defaultEnvironment;\n\n try {\n const deployConfig = getQpqAppDeployConfig(getRoot(), appName);\n const target = deployConfig.environments?.[process.env.ENVIRONMENT];\n\n findPlatformDriver(target?.platform || QpqDeployPlatform.aws)?.primeDeployIdentity(target);\n } catch {\n // no deploy.config.json — fine for local dev\n }\n};\n\nexport interface ResolvedDeployEnvironment {\n environment: string;\n // The deploy platform driver for this environment: --platform flag, then\n // the environment's \"platform\" in deploy.config.json, then aws.\n platform: string;\n}\n\n// Resolves the deploy identity for an app and primes the process environment\n// with it. The app's deploy.config.json owns environment -> platform +\n// identity (config-owned identity); already-set env vars win, so CI overrides\n// and older setups keep working.\n//\n// Environment resolution: --env flag, then the sole configured environment,\n// then an interactive prompt over the configured environments (a shell\n// ENVIRONMENT is only the prompt's default, never a silent pick), then — for\n// headless runs and configs without an environments map — ENVIRONMENT itself.\nexport const resolveDeployEnvironment = async (argv: string[], appName: string): Promise<ResolvedDeployEnvironment> => {\n const deployConfig = getQpqAppDeployConfig(getRoot(), appName);\n const configuredEnvironments = Object.keys(deployConfig.environments ?? {});\n\n let environment = getArgValue(argv, '--env');\n\n if (!environment && configuredEnvironments.length === 1) {\n environment = configuredEnvironments[0];\n console.log(`Using environment: ${environment}`);\n }\n\n if (!environment && configuredEnvironments.length > 1 && process.stdin.isTTY) {\n const defaultEnvironment =\n process.env.ENVIRONMENT && configuredEnvironments.includes(process.env.ENVIRONMENT) ? process.env.ENVIRONMENT : undefined;\n environment = await promptSelect('Select environment', configuredEnvironments, defaultEnvironment);\n }\n\n if (!environment) {\n environment = process.env.ENVIRONMENT;\n }\n\n if (!environment) {\n console.error(`No environment selected — pass --env <name> or add \"environments\" to apps/${appName}/deploy.config.json`);\n process.exit(1);\n }\n\n process.env.ENVIRONMENT = environment;\n\n const target = deployConfig.environments?.[environment];\n const platform = getArgValue(argv, '--platform') || target?.platform || QpqDeployPlatform.aws;\n\n const missingIdentity = getPlatformDriver(platform).primeDeployIdentity(target);\n if (missingIdentity.length > 0) {\n console.error(\n `Deploy identity for environment '${environment}' (platform '${platform}') is incomplete — missing ${missingIdentity.join(', ')}. Add it to apps/${appName}/deploy.config.json under \"environments\".`,\n );\n process.exit(1);\n }\n\n return { environment, platform };\n};\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type StackType = 'all' | 'inf' | 'api' | 'web' | 'views';
|
|
2
|
+
export type DeployPlan = {
|
|
3
|
+
kind: 'cancelled';
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'account';
|
|
6
|
+
appName: string;
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'bootstrap';
|
|
9
|
+
appName: string;
|
|
10
|
+
includeDomain: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'services';
|
|
13
|
+
appName: string;
|
|
14
|
+
services: string[];
|
|
15
|
+
stacks: StackType;
|
|
16
|
+
};
|
|
17
|
+
export declare const promptDeployPlan: (appName: string) => Promise<DeployPlan>;
|
|
18
|
+
export type TeardownPlan = {
|
|
19
|
+
kind: 'cancelled';
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'services';
|
|
22
|
+
appName: string;
|
|
23
|
+
services: string[];
|
|
24
|
+
};
|
|
25
|
+
export declare const promptTeardownPlan: (appName: string) => Promise<TeardownPlan>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.promptTeardownPlan = exports.promptDeployPlan = void 0;
|
|
13
|
+
// The interactive question flow shared by `qpq go` (sequential AWS deploy) and
|
|
14
|
+
// a future dockerized variant: pick an app, confirm the target, pick services
|
|
15
|
+
// (or domain/bootstrap), pick stacks.
|
|
16
|
+
const discovery_1 = require("./discovery");
|
|
17
|
+
const prompts_1 = require("./prompts");
|
|
18
|
+
const promptDeployPlan = (appName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const deployInfo = process.env.ACTOR_NAME
|
|
20
|
+
? `${appName}-${process.env.ENVIRONMENT}-${process.env.ACTOR_NAME}`
|
|
21
|
+
: `${appName}-${process.env.ENVIRONMENT}`;
|
|
22
|
+
if (!(yield (0, prompts_1.promptYesNo)(`Deploying to: [${deployInfo}]`))) {
|
|
23
|
+
console.log('Exiting!');
|
|
24
|
+
return { kind: 'cancelled' };
|
|
25
|
+
}
|
|
26
|
+
let services = [];
|
|
27
|
+
do {
|
|
28
|
+
const allServices = (0, discovery_1.getServiceNames)(appName);
|
|
29
|
+
// Bracketed so the meta options can't be mistaken for actual services.
|
|
30
|
+
const allText = '[ all ]';
|
|
31
|
+
const accountText = '[ account ]';
|
|
32
|
+
const domainEnvText = '[ domain ]';
|
|
33
|
+
const bootstrapEnvText = '[ bootstrap environment ]';
|
|
34
|
+
const service = yield (0, prompts_1.promptSelect)('Select services to deploy', [allText, ...allServices, accountText, domainEnvText, bootstrapEnvText]);
|
|
35
|
+
if (service === allText) {
|
|
36
|
+
services = allServices;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
if (service === accountText) {
|
|
40
|
+
return { kind: 'account', appName };
|
|
41
|
+
}
|
|
42
|
+
if (service === domainEnvText) {
|
|
43
|
+
return { kind: 'bootstrap', appName, includeDomain: true };
|
|
44
|
+
}
|
|
45
|
+
if (service === bootstrapEnvText) {
|
|
46
|
+
return { kind: 'bootstrap', appName, includeDomain: false };
|
|
47
|
+
}
|
|
48
|
+
services.push(service);
|
|
49
|
+
} while (yield (0, prompts_1.promptYesNo)('Do you want to deploy another service?'));
|
|
50
|
+
services = [...new Set(services)];
|
|
51
|
+
const stacks = (yield (0, prompts_1.promptSelect)('Stacks to deploy', ['all', 'inf', 'api', 'web', 'views']));
|
|
52
|
+
return { kind: 'services', appName, services, stacks };
|
|
53
|
+
});
|
|
54
|
+
exports.promptDeployPlan = promptDeployPlan;
|
|
55
|
+
// The question flow for `qpq teardown`: pick services, then type the deploy
|
|
56
|
+
// target back to confirm — destroying inf stacks takes user data (key value
|
|
57
|
+
// stores, user directories) with it, so a y/n prompt isn't enough friction.
|
|
58
|
+
const promptTeardownPlan = (appName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
const deployInfo = process.env.ACTOR_NAME
|
|
60
|
+
? `${appName}-${process.env.ENVIRONMENT}-${process.env.ACTOR_NAME}`
|
|
61
|
+
: `${appName}-${process.env.ENVIRONMENT}`;
|
|
62
|
+
let services = [];
|
|
63
|
+
do {
|
|
64
|
+
const allServices = (0, discovery_1.getServiceNames)(appName);
|
|
65
|
+
const allText = '[ all ]';
|
|
66
|
+
const service = yield (0, prompts_1.promptSelect)('Select services to tear down', [allText, ...allServices]);
|
|
67
|
+
if (service === allText) {
|
|
68
|
+
services = allServices;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
services.push(service);
|
|
72
|
+
} while (yield (0, prompts_1.promptYesNo)('Do you want to tear down another service?'));
|
|
73
|
+
services = [...new Set(services)];
|
|
74
|
+
console.log(`\nThis will DESTROY the web, api and inf stacks (including all stored data) for: ${services.join(', ')}`);
|
|
75
|
+
const confirmation = yield (0, prompts_1.promptText)(`Type '${deployInfo}' to confirm`);
|
|
76
|
+
if (confirmation !== deployInfo) {
|
|
77
|
+
console.log('Confirmation did not match. Exiting!');
|
|
78
|
+
return { kind: 'cancelled' };
|
|
79
|
+
}
|
|
80
|
+
return { kind: 'services', appName, services };
|
|
81
|
+
});
|
|
82
|
+
exports.promptTeardownPlan = promptTeardownPlan;
|
|
83
|
+
//# sourceMappingURL=deployPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployPrompts.js","sourceRoot":"","sources":["../../../src/lib/deployPrompts.ts"],"names":[],"mappings":"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","sourcesContent":["// The interactive question flow shared by `qpq go` (sequential AWS deploy) and\n// a future dockerized variant: pick an app, confirm the target, pick services\n// (or domain/bootstrap), pick stacks.\nimport { getServiceNames } from './discovery';\nimport { promptSelect, promptText, promptYesNo } from './prompts';\n\nexport type StackType = 'all' | 'inf' | 'api' | 'web' | 'views';\n\nexport type DeployPlan =\n | { kind: 'cancelled' }\n // Deploy only the account-level guardrails stack (one per AWS account).\n | { kind: 'account'; appName: string }\n // Deploy the bootstrap stack (and optionally the domain stack first).\n | { kind: 'bootstrap'; appName: string; includeDomain: boolean }\n // Deploy the selected stacks for the selected services.\n | {\n kind: 'services';\n appName: string;\n services: string[];\n stacks: StackType;\n };\n\nexport const promptDeployPlan = async (appName: string): Promise<DeployPlan> => {\n const deployInfo = process.env.ACTOR_NAME\n ? `${appName}-${process.env.ENVIRONMENT}-${process.env.ACTOR_NAME}`\n : `${appName}-${process.env.ENVIRONMENT}`;\n\n if (!(await promptYesNo(`Deploying to: [${deployInfo}]`))) {\n console.log('Exiting!');\n return { kind: 'cancelled' };\n }\n\n let services: string[] = [];\n\n do {\n const allServices = getServiceNames(appName);\n\n // Bracketed so the meta options can't be mistaken for actual services.\n const allText = '[ all ]';\n const accountText = '[ account ]';\n const domainEnvText = '[ domain ]';\n const bootstrapEnvText = '[ bootstrap environment ]';\n\n const service = await promptSelect('Select services to deploy', [allText, ...allServices, accountText, domainEnvText, bootstrapEnvText]);\n\n if (service === allText) {\n services = allServices;\n break;\n }\n if (service === accountText) {\n return { kind: 'account', appName };\n }\n if (service === domainEnvText) {\n return { kind: 'bootstrap', appName, includeDomain: true };\n }\n if (service === bootstrapEnvText) {\n return { kind: 'bootstrap', appName, includeDomain: false };\n }\n\n services.push(service);\n } while (await promptYesNo('Do you want to deploy another service?'));\n\n services = [...new Set(services)];\n\n const stacks = (await promptSelect('Stacks to deploy', ['all', 'inf', 'api', 'web', 'views'])) as StackType;\n\n return { kind: 'services', appName, services, stacks };\n};\n\nexport type TeardownPlan =\n | { kind: 'cancelled' }\n // Destroy the web, api and inf stacks for the selected services.\n | { kind: 'services'; appName: string; services: string[] };\n\n// The question flow for `qpq teardown`: pick services, then type the deploy\n// target back to confirm — destroying inf stacks takes user data (key value\n// stores, user directories) with it, so a y/n prompt isn't enough friction.\nexport const promptTeardownPlan = async (appName: string): Promise<TeardownPlan> => {\n const deployInfo = process.env.ACTOR_NAME\n ? `${appName}-${process.env.ENVIRONMENT}-${process.env.ACTOR_NAME}`\n : `${appName}-${process.env.ENVIRONMENT}`;\n\n let services: string[] = [];\n\n do {\n const allServices = getServiceNames(appName);\n const allText = '[ all ]';\n\n const service = await promptSelect('Select services to tear down', [allText, ...allServices]);\n\n if (service === allText) {\n services = allServices;\n break;\n }\n\n services.push(service);\n } while (await promptYesNo('Do you want to tear down another service?'));\n\n services = [...new Set(services)];\n\n console.log(`\\nThis will DESTROY the web, api and inf stacks (including all stored data) for: ${services.join(', ')}`);\n const confirmation = await promptText(`Type '${deployInfo}' to confirm`);\n\n if (confirmation !== deployInfo) {\n console.log('Confirmation did not match. Exiting!');\n return { kind: 'cancelled' };\n }\n\n return { kind: 'services', appName, services };\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const writeDevServerEntry: (root: string, appName: string) => string;
|