@swovohq/fuel 0.1.0

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 (109) hide show
  1. package/dist/bin/fuel.d.ts +3 -0
  2. package/dist/bin/fuel.d.ts.map +1 -0
  3. package/dist/bin/fuel.js +353 -0
  4. package/dist/bin/fuel.js.map +1 -0
  5. package/dist/cleanup/finalize.d.ts +11 -0
  6. package/dist/cleanup/finalize.d.ts.map +1 -0
  7. package/dist/cleanup/finalize.js +116 -0
  8. package/dist/cleanup/finalize.js.map +1 -0
  9. package/dist/commands/create-app.d.ts +14 -0
  10. package/dist/commands/create-app.d.ts.map +1 -0
  11. package/dist/commands/create-app.js +354 -0
  12. package/dist/commands/create-app.js.map +1 -0
  13. package/dist/commands/infra-deploy.d.ts +8 -0
  14. package/dist/commands/infra-deploy.d.ts.map +1 -0
  15. package/dist/commands/infra-deploy.js +102 -0
  16. package/dist/commands/infra-deploy.js.map +1 -0
  17. package/dist/commands/infra-destroy.d.ts +5 -0
  18. package/dist/commands/infra-destroy.d.ts.map +1 -0
  19. package/dist/commands/infra-destroy.js +85 -0
  20. package/dist/commands/infra-destroy.js.map +1 -0
  21. package/dist/commands/infra-init.d.ts +75 -0
  22. package/dist/commands/infra-init.d.ts.map +1 -0
  23. package/dist/commands/infra-init.js +577 -0
  24. package/dist/commands/infra-init.js.map +1 -0
  25. package/dist/commands/list-modules.d.ts +2 -0
  26. package/dist/commands/list-modules.d.ts.map +1 -0
  27. package/dist/commands/list-modules.js +71 -0
  28. package/dist/commands/list-modules.js.map +1 -0
  29. package/dist/commands/migrate-init.d.ts +6 -0
  30. package/dist/commands/migrate-init.d.ts.map +1 -0
  31. package/dist/commands/migrate-init.js +174 -0
  32. package/dist/commands/migrate-init.js.map +1 -0
  33. package/dist/engines/convention.d.ts +3 -0
  34. package/dist/engines/convention.d.ts.map +1 -0
  35. package/dist/engines/convention.js +76 -0
  36. package/dist/engines/convention.js.map +1 -0
  37. package/dist/engines/dependencies.d.ts +20 -0
  38. package/dist/engines/dependencies.d.ts.map +1 -0
  39. package/dist/engines/dependencies.js +26 -0
  40. package/dist/engines/dependencies.js.map +1 -0
  41. package/dist/engines/monorepo.d.ts +6 -0
  42. package/dist/engines/monorepo.d.ts.map +1 -0
  43. package/dist/engines/monorepo.js +56 -0
  44. package/dist/engines/monorepo.js.map +1 -0
  45. package/dist/engines/template-source.d.ts +9 -0
  46. package/dist/engines/template-source.d.ts.map +1 -0
  47. package/dist/engines/template-source.js +123 -0
  48. package/dist/engines/template-source.js.map +1 -0
  49. package/dist/index.d.ts +8 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +16 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/infra/config-loader.d.ts +4 -0
  54. package/dist/infra/config-loader.d.ts.map +1 -0
  55. package/dist/infra/config-loader.js +57 -0
  56. package/dist/infra/config-loader.js.map +1 -0
  57. package/dist/infra/config-writer.d.ts +9 -0
  58. package/dist/infra/config-writer.d.ts.map +1 -0
  59. package/dist/infra/config-writer.js +58 -0
  60. package/dist/infra/config-writer.js.map +1 -0
  61. package/dist/infra/credentials.d.ts +3 -0
  62. package/dist/infra/credentials.d.ts.map +1 -0
  63. package/dist/infra/credentials.js +74 -0
  64. package/dist/infra/credentials.js.map +1 -0
  65. package/dist/infra/dependency-checker.d.ts +9 -0
  66. package/dist/infra/dependency-checker.d.ts.map +1 -0
  67. package/dist/infra/dependency-checker.js +41 -0
  68. package/dist/infra/dependency-checker.js.map +1 -0
  69. package/dist/infra/git-client.d.ts +2 -0
  70. package/dist/infra/git-client.d.ts.map +1 -0
  71. package/dist/infra/git-client.js +22 -0
  72. package/dist/infra/git-client.js.map +1 -0
  73. package/dist/infra/github-secrets-client.d.ts +3 -0
  74. package/dist/infra/github-secrets-client.d.ts.map +1 -0
  75. package/dist/infra/github-secrets-client.js +37 -0
  76. package/dist/infra/github-secrets-client.js.map +1 -0
  77. package/dist/infra/orchestrator.d.ts +7 -0
  78. package/dist/infra/orchestrator.d.ts.map +1 -0
  79. package/dist/infra/orchestrator.js +187 -0
  80. package/dist/infra/orchestrator.js.map +1 -0
  81. package/dist/infra/preflight.d.ts +9 -0
  82. package/dist/infra/preflight.d.ts.map +1 -0
  83. package/dist/infra/preflight.js +75 -0
  84. package/dist/infra/preflight.js.map +1 -0
  85. package/dist/infra/s3-state-bucket.d.ts +5 -0
  86. package/dist/infra/s3-state-bucket.d.ts.map +1 -0
  87. package/dist/infra/s3-state-bucket.js +92 -0
  88. package/dist/infra/s3-state-bucket.js.map +1 -0
  89. package/dist/infra/secrets-manager-client.d.ts +3 -0
  90. package/dist/infra/secrets-manager-client.d.ts.map +1 -0
  91. package/dist/infra/secrets-manager-client.js +26 -0
  92. package/dist/infra/secrets-manager-client.js.map +1 -0
  93. package/dist/infra/subprocess.d.ts +5 -0
  94. package/dist/infra/subprocess.d.ts.map +1 -0
  95. package/dist/infra/subprocess.js +26 -0
  96. package/dist/infra/subprocess.js.map +1 -0
  97. package/dist/infra/template-engine.d.ts +43 -0
  98. package/dist/infra/template-engine.d.ts.map +1 -0
  99. package/dist/infra/template-engine.js +233 -0
  100. package/dist/infra/template-engine.js.map +1 -0
  101. package/dist/infra/tofu-runner.d.ts +26 -0
  102. package/dist/infra/tofu-runner.d.ts.map +1 -0
  103. package/dist/infra/tofu-runner.js +210 -0
  104. package/dist/infra/tofu-runner.js.map +1 -0
  105. package/dist/infra/types.d.ts +69 -0
  106. package/dist/infra/types.d.ts.map +1 -0
  107. package/dist/infra/types.js +44 -0
  108. package/dist/infra/types.js.map +1 -0
  109. package/package.json +45 -0
@@ -0,0 +1,354 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createApp = void 0;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const child_process_1 = require("child_process");
44
+ const promises_1 = require("timers/promises");
45
+ const preflight_1 = require("../infra/preflight");
46
+ const config_writer_1 = require("../infra/config-writer");
47
+ const template_engine_1 = require("../infra/template-engine");
48
+ const orchestrator_1 = require("../infra/orchestrator");
49
+ const finalize_1 = require("../cleanup/finalize");
50
+ const convention_1 = require("../engines/convention");
51
+ const dependency_checker_1 = require("../infra/dependency-checker");
52
+ const dependencies_1 = require("../engines/dependencies");
53
+ const template_source_1 = require("../engines/template-source");
54
+ const IGNORE_PATTERNS = [
55
+ 'node_modules',
56
+ '.git',
57
+ 'dist',
58
+ '.next',
59
+ 'storybook-static',
60
+ 'coverage',
61
+ '.turbo',
62
+ 'apps/api/.env',
63
+ 'apps/web/.env',
64
+ 'apps/playwright/.env'
65
+ ];
66
+ const loadConfig = async (sourceRoot) => {
67
+ const configPath = path.join(sourceRoot, 'fuel.modules.json');
68
+ if (!(await fs.pathExists(configPath))) {
69
+ throw new Error(`fuel.modules.json not found at ${configPath}`);
70
+ }
71
+ return fs.readJson(configPath);
72
+ };
73
+ const runInProject = (projectRoot, command) => {
74
+ (0, child_process_1.execSync)(command, { cwd: projectRoot, stdio: 'inherit' });
75
+ };
76
+ const copyIfMissing = async (fromPath, toPath) => {
77
+ if (await fs.pathExists(toPath))
78
+ return;
79
+ if (!(await fs.pathExists(fromPath)))
80
+ return;
81
+ await fs.copy(fromPath, toPath, { overwrite: false, errorOnExist: true });
82
+ };
83
+ const ensureDotEnvs = async (projectRoot) => {
84
+ await copyIfMissing(path.join(projectRoot, 'apps/api/.env.example'), path.join(projectRoot, 'apps/api/.env'));
85
+ await copyIfMissing(path.join(projectRoot, 'apps/web/.env.example'), path.join(projectRoot, 'apps/web/.env'));
86
+ await copyIfMissing(path.join(projectRoot, 'apps/playwright/.env.example'), path.join(projectRoot, 'apps/playwright/.env'));
87
+ };
88
+ const tryGetContainerState = (containerIdOrName) => {
89
+ try {
90
+ const raw = (0, child_process_1.execSync)(`docker inspect ${containerIdOrName} --format "{{json .State}}"`, {
91
+ encoding: 'utf-8',
92
+ stdio: ['ignore', 'pipe', 'pipe'],
93
+ });
94
+ return JSON.parse(raw);
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ };
100
+ const waitForPostgresReady = async (opts) => {
101
+ const { composeCommand, projectRoot, service, user = 'postgres', database = 'postgres', timeoutMs = 120_000, intervalMs = 2_000, } = opts;
102
+ const startedAt = Date.now();
103
+ let lastPgIsReadyError;
104
+ while (true) {
105
+ const containerId = (() => {
106
+ try {
107
+ return (0, child_process_1.execSync)(`${composeCommand} ps -q ${service}`, {
108
+ cwd: projectRoot,
109
+ encoding: 'utf-8',
110
+ stdio: ['ignore', 'pipe', 'pipe'],
111
+ }).trim();
112
+ }
113
+ catch {
114
+ return '';
115
+ }
116
+ })();
117
+ const state = containerId ? tryGetContainerState(containerId) : null;
118
+ const health = state?.Health?.Status;
119
+ const status = state?.Status;
120
+ if (status && status !== 'running' && status !== 'created') {
121
+ throw new Error(`Postgres service "${service}" container is not running (status: ${status}). ` +
122
+ `This commonly happens when port 5432 is already in use by another Postgres.`);
123
+ }
124
+ if (health === 'healthy')
125
+ return;
126
+ try {
127
+ if (!containerId)
128
+ throw new Error('Container ID not found yet');
129
+ (0, child_process_1.execSync)(`docker exec ${containerId} pg_isready -U ${user} -d ${database}`, {
130
+ cwd: projectRoot,
131
+ stdio: ['ignore', 'pipe', 'pipe'],
132
+ encoding: 'utf-8',
133
+ timeout: 5_000,
134
+ });
135
+ return;
136
+ }
137
+ catch (err) {
138
+ lastPgIsReadyError = err instanceof Error ? err.message : 'pg_isready failed';
139
+ }
140
+ if (Date.now() - startedAt > timeoutMs) {
141
+ throw new Error(`Timed out waiting for Postgres service "${service}" to become ready. ` +
142
+ `Last state: ${JSON.stringify({
143
+ status,
144
+ health,
145
+ containerId: containerId || null,
146
+ lastPgIsReadyError: lastPgIsReadyError ?? null,
147
+ })}`);
148
+ }
149
+ await (0, promises_1.setTimeout)(intervalMs);
150
+ }
151
+ };
152
+ const createApp = async (appName, options) => {
153
+ const effectiveSkipMigrationGeneration = Boolean(options.skipMigrationGeneration) ||
154
+ Boolean(options.skipInstall) ||
155
+ Boolean(options.skipBuild);
156
+ // Validate and run preflight for ECS deployments BEFORE any file operations.
157
+ // NOTE: runPreflight calls process.exit(1) on failure — it does NOT throw.
158
+ // If runPreflight returns, all checks passed.
159
+ let infraContext;
160
+ if (options.deployment) {
161
+ if (options.deployment !== 'ecs') {
162
+ throw new Error(`Unsupported deployment type: "${options.deployment}". Only "ecs" is supported.`);
163
+ }
164
+ if (!options.config) {
165
+ throw new Error('The --config flag is required when using --deployment ecs. ' +
166
+ 'Run "fuel infra:init" to generate a config.json template.');
167
+ }
168
+ if (effectiveSkipMigrationGeneration) {
169
+ throw new Error('Cannot provision ECS infrastructure without migrations. ' +
170
+ 'Remove --skip-migration-generation, --skip-install, and --skip-build flags, or remove --deployment ecs.');
171
+ }
172
+ const configPath = path.resolve(options.config);
173
+ console.log('\n Running preflight checks...\n');
174
+ const { config, credentials } = await (0, preflight_1.runPreflight)(configPath);
175
+ infraContext = { config, credentials };
176
+ }
177
+ const resolution = await (0, template_source_1.resolveSourceRoot)({ source: options.source });
178
+ const sourceRoot = resolution.sourceRoot;
179
+ try {
180
+ const targetRoot = path.resolve(options.output ?? path.join(process.cwd(), appName));
181
+ const { dryRun = false, skipInstall = false, skipGit = false, skipBuild = false } = options;
182
+ const skipMigrationGeneration = effectiveSkipMigrationGeneration;
183
+ console.log(`\nCreating ${appName}...`);
184
+ console.log(` Source: ${sourceRoot}`);
185
+ console.log(` Target: ${targetRoot}`);
186
+ if (dryRun)
187
+ console.log(' [dry run] no files will be written\n');
188
+ else
189
+ console.log('');
190
+ const config = await loadConfig(sourceRoot);
191
+ const allModules = Object.keys(config.modules);
192
+ for (const mod of options.modules) {
193
+ if (!allModules.includes(mod)) {
194
+ throw new Error(`Unknown module "${mod}". Available modules: ${allModules.join(', ')}`);
195
+ }
196
+ }
197
+ const modulesToKeep = (0, dependencies_1.resolveModules)(options.modules, config);
198
+ const modulesToRemove = (0, dependencies_1.computeModulesToRemove)(options.modules, config);
199
+ console.log(` Modules to keep: ${modulesToKeep.length > 0 ? modulesToKeep.join(', ') : '(base only)'}`);
200
+ console.log(` Modules to remove: ${modulesToRemove.length > 0 ? modulesToRemove.join(', ') : '(none)'}`);
201
+ if (dryRun) {
202
+ console.log('\n [dry run] Would copy project (excluding migrations), remove excluded modules, clean deps, and finalize.');
203
+ if (infraContext) {
204
+ console.log(' Then: write fuel.config.json, generate /infra and .github/workflows/.');
205
+ }
206
+ if (!skipInstall && !skipBuild)
207
+ console.log(' Then: install, build.');
208
+ if (!skipMigrationGeneration)
209
+ console.log(' Then: validate Docker, run docker-compose, generate and run migrations.');
210
+ if (infraContext)
211
+ console.log(' Then: provision cloud infrastructure via OpenTofu.');
212
+ console.log(` Run without --dry-run to create the app at ${targetRoot}\n`);
213
+ return;
214
+ }
215
+ const dockerDeps = !skipMigrationGeneration ? (0, dependency_checker_1.assertDockerDependencies)() : undefined;
216
+ if (!skipMigrationGeneration) {
217
+ // Validate docker dependencies early so we can fail fast before copying files.
218
+ // dockerDeps computed above.
219
+ }
220
+ console.log('\n Copying project...');
221
+ if (await fs.pathExists(targetRoot)) {
222
+ throw new Error(`Target directory "${targetRoot}" already exists`);
223
+ }
224
+ try {
225
+ const MIGRATIONS_DIR = 'apps/api/src/common/database/migrations';
226
+ await fs.copy(sourceRoot, targetRoot, {
227
+ filter: (src) => {
228
+ const relativePath = path.relative(sourceRoot, src);
229
+ if (relativePath === MIGRATIONS_DIR ||
230
+ relativePath.startsWith(MIGRATIONS_DIR + path.sep)) {
231
+ return false;
232
+ }
233
+ return !IGNORE_PATTERNS.some((pattern) => relativePath === pattern ||
234
+ relativePath.startsWith(pattern + path.sep));
235
+ }
236
+ });
237
+ await fs.remove(path.join(targetRoot, 'packages/cli'));
238
+ await fs.remove(path.join(targetRoot, 'fuel.modules.json'));
239
+ console.log(' Removing excluded modules...');
240
+ for (const mod of modulesToRemove) {
241
+ const extraPaths = config.modules[mod]?.extraPaths ?? [];
242
+ const consumerPaths = config.modules[mod]?.consumerPaths ?? [];
243
+ const removed = await (0, convention_1.removeModulePaths)(targetRoot, mod, extraPaths, consumerPaths);
244
+ for (const p of removed) {
245
+ console.log(` - ${p}`);
246
+ }
247
+ }
248
+ console.log(' Applying stub replacements...');
249
+ for (const mod of modulesToRemove) {
250
+ const stubReplacements = config.modules[mod]?.stubReplacements ?? [];
251
+ for (const { file: filePath, stub: stubPath } of stubReplacements) {
252
+ const stubSrc = path.join(sourceRoot, stubPath);
253
+ const fileDest = path.join(targetRoot, filePath);
254
+ if (!(await fs.pathExists(stubSrc))) {
255
+ console.warn(` Stub not found: ${stubPath}`);
256
+ continue;
257
+ }
258
+ await fs.ensureDir(path.dirname(fileDest));
259
+ await fs.copy(stubSrc, fileDest);
260
+ console.log(` - ${filePath} (from stub)`);
261
+ }
262
+ }
263
+ const webStubsPath = path.join(targetRoot, 'apps/web/src/stubs');
264
+ if (await fs.pathExists(webStubsPath)) {
265
+ await fs.remove(webStubsPath);
266
+ console.log(' Removed apps/web/src/stubs');
267
+ }
268
+ console.log(' Cleaning package.json dependencies...');
269
+ await (0, finalize_1.cleanPackageJsonDeps)(targetRoot, modulesToRemove);
270
+ console.log(' Finalizing...');
271
+ (0, finalize_1.initializeProject)(targetRoot, { skipGit, skipInstall, skipBuild });
272
+ if (!skipMigrationGeneration) {
273
+ console.log(' Preparing local env files...');
274
+ await ensureDotEnvs(targetRoot);
275
+ console.log(' Starting Docker services...');
276
+ const compose = dockerDeps.composeCommand;
277
+ runInProject(targetRoot, `${compose} up -d`);
278
+ console.log(' Waiting for Postgres...');
279
+ await waitForPostgresReady({
280
+ composeCommand: compose,
281
+ projectRoot: targetRoot,
282
+ service: 'db',
283
+ });
284
+ console.log(' Generating initial migration...');
285
+ runInProject(targetRoot, 'yarn workspace api database:migration:generate initial-migration');
286
+ console.log(' Running migrations...');
287
+ runInProject(targetRoot, 'yarn workspace api database:migration:run');
288
+ if (!skipGit) {
289
+ console.log(' Committing initial migration...');
290
+ runInProject(targetRoot, 'git add -A');
291
+ const hasStagedChanges = (() => {
292
+ try {
293
+ (0, child_process_1.execSync)('git diff --cached --quiet', {
294
+ cwd: targetRoot,
295
+ stdio: ['ignore', 'ignore', 'ignore'],
296
+ });
297
+ return false;
298
+ }
299
+ catch {
300
+ return true;
301
+ }
302
+ })();
303
+ if (hasStagedChanges) {
304
+ runInProject(targetRoot, 'git commit -m "Add initial migration"');
305
+ }
306
+ }
307
+ }
308
+ if (infraContext) {
309
+ console.log('\n Writing fuel.config.json...');
310
+ await (0, config_writer_1.writeFuelConfig)(targetRoot, infraContext.config, appName, undefined, infraContext.credentials);
311
+ console.log(` ${chalk_1.default.green('✓')} fuel.config.json written`);
312
+ await (0, template_engine_1.generateInfra)(targetRoot, infraContext.config, infraContext.credentials);
313
+ }
314
+ }
315
+ catch (err) {
316
+ console.error('\n Error during scaffolding — cleaning up partial output...');
317
+ await fs.remove(targetRoot);
318
+ throw err;
319
+ }
320
+ if (infraContext) {
321
+ await (0, orchestrator_1.runInfraOrchestrator)(targetRoot, appName, infraContext.config, infraContext.credentials);
322
+ }
323
+ console.log(`\n Done! Your app is ready at ${targetRoot}`);
324
+ console.log(`\n Next steps:`);
325
+ console.log(` cd ${path.basename(targetRoot)}`);
326
+ if (skipMigrationGeneration) {
327
+ console.log(` docker-compose up -d`);
328
+ }
329
+ if (skipMigrationGeneration) {
330
+ console.log(` cp apps/api/.env.example apps/api/.env`);
331
+ console.log(` cp apps/web/.env.example apps/web/.env`);
332
+ console.log(` cp apps/playwright/.env.example apps/playwright/.env`);
333
+ }
334
+ if (skipInstall)
335
+ console.log(` yarn install`);
336
+ if (skipInstall || skipBuild)
337
+ console.log(` yarn build`);
338
+ if (skipMigrationGeneration) {
339
+ console.log(` yarn workspace api database:migration:generate initial-migration`);
340
+ console.log(` yarn workspace api database:migration:run`);
341
+ }
342
+ console.log(` yarn workspace api database:seed:run:dev`);
343
+ console.log(` yarn dev\n`);
344
+ if (infraContext) {
345
+ console.log(` Your cloud infrastructure has been provisioned.`);
346
+ console.log(` Push to main to trigger your first deploy.\n`);
347
+ }
348
+ }
349
+ finally {
350
+ await resolution.cleanup?.();
351
+ }
352
+ };
353
+ exports.createApp = createApp;
354
+ //# sourceMappingURL=create-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/commands/create-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface InfraDeployOptions {
2
+ path?: string;
3
+ regenerate?: boolean;
4
+ planOnly?: boolean;
5
+ config?: string;
6
+ }
7
+ export declare function infraDeploy(opts: InfraDeployOptions): Promise<void>;
8
+ //# sourceMappingURL=infra-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-deploy.d.ts","sourceRoot":"","sources":["../../src/commands/infra-deploy.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DzE"}
@@ -0,0 +1,102 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.infraDeploy = infraDeploy;
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs-extra"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const config_loader_1 = require("../infra/config-loader");
44
+ const credentials_1 = require("../infra/credentials");
45
+ const preflight_1 = require("../infra/preflight");
46
+ const template_engine_1 = require("../infra/template-engine");
47
+ const orchestrator_1 = require("../infra/orchestrator");
48
+ const config_writer_1 = require("../infra/config-writer");
49
+ async function infraDeploy(opts) {
50
+ const projectRoot = opts.path ? path.resolve(opts.path) : process.cwd();
51
+ const fuelConfigPath = path.join(projectRoot, 'fuel.config.json');
52
+ const hasFuelConfig = await fs.pathExists(fuelConfigPath);
53
+ // When --config is provided, generate fuel.config.json from the given config file
54
+ if (opts.config) {
55
+ const configSourcePath = path.resolve(opts.config);
56
+ if (!(await fs.pathExists(configSourcePath))) {
57
+ throw new Error(`Config file not found: ${configSourcePath}`);
58
+ }
59
+ const raw = await fs.readJson(configSourcePath);
60
+ const infraConfig = (0, config_loader_1.parseInfraConfig)(raw);
61
+ const credentials = await (0, credentials_1.resolveCredentials)(projectRoot);
62
+ console.log(chalk_1.default.cyan('\n Writing fuel.config.json...'));
63
+ await (0, config_writer_1.writeFuelConfig)(projectRoot, infraConfig, undefined, undefined, credentials);
64
+ console.log(chalk_1.default.green(' \u2713') + ' fuel.config.json written');
65
+ }
66
+ else if (!hasFuelConfig) {
67
+ throw new Error(`fuel.config.json not found at ${fuelConfigPath}.\n` +
68
+ `Run this command from a project created by "fuel create:app --deployment ecs", ` +
69
+ `or pass --config <path> to generate it from a config.json file.`);
70
+ }
71
+ console.log(chalk_1.default.cyan('\n Preflight checks'));
72
+ console.log(chalk_1.default.cyan(' ' + '\u2500'.repeat(40)));
73
+ const config = await (0, config_loader_1.loadInfraConfig)(fuelConfigPath);
74
+ console.log(chalk_1.default.green(' \u2713') +
75
+ ` fuel.config.json valid \u2014 ${config.apps.length} app(s)`);
76
+ const tofuVersion = (0, preflight_1.checkTofuVersion)();
77
+ console.log(chalk_1.default.green(' \u2713') + ` tofu ${tofuVersion}`);
78
+ const credentials = await (0, credentials_1.resolveCredentials)(projectRoot);
79
+ console.log(chalk_1.default.green(' \u2713') + ' Credentials resolved');
80
+ const infraDir = path.join(projectRoot, 'infra');
81
+ const infraExists = await fs.pathExists(infraDir);
82
+ if (!infraExists || opts.regenerate || opts.config) {
83
+ if (infraExists && (opts.regenerate || opts.config)) {
84
+ console.log(chalk_1.default.yellow('\n Regenerating /infra folder...'));
85
+ await fs.remove(infraDir);
86
+ }
87
+ else if (!infraExists) {
88
+ console.log(chalk_1.default.yellow('\n /infra folder not found, generating...'));
89
+ }
90
+ console.log(' Generating infra folder...');
91
+ await (0, template_engine_1.generateInfra)(projectRoot, config, credentials);
92
+ }
93
+ else {
94
+ console.log(chalk_1.default.green(' \u2713') + ' Existing /infra folder will be reused');
95
+ }
96
+ console.log('');
97
+ await (0, orchestrator_1.runInfraOrchestrator)(projectRoot, config.name, config, credentials, {
98
+ skipCompensation: true,
99
+ planOnly: opts.planOnly,
100
+ });
101
+ }
102
+ //# sourceMappingURL=infra-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-deploy.js","sourceRoot":"","sources":["../../src/commands/infra-deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface InfraDestroyOptions {
2
+ path?: string;
3
+ }
4
+ export declare function infraDestroy(opts: InfraDestroyOptions): Promise<void>;
5
+ //# sourceMappingURL=infra-destroy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-destroy.d.ts","sourceRoot":"","sources":["../../src/commands/infra-destroy.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAMD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD3E"}
@@ -0,0 +1,85 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.infraDestroy = infraDestroy;
40
+ const crypto = __importStar(require("crypto"));
41
+ const path = __importStar(require("path"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const config_loader_1 = require("../infra/config-loader");
45
+ const credentials_1 = require("../infra/credentials");
46
+ const preflight_1 = require("../infra/preflight");
47
+ const tofu_runner_1 = require("../infra/tofu-runner");
48
+ function slugify(name) {
49
+ return name.replace(/[^a-z0-9]/gi, '_').toLowerCase();
50
+ }
51
+ async function infraDestroy(opts) {
52
+ const projectRoot = opts.path ? path.resolve(opts.path) : process.cwd();
53
+ const fuelConfigPath = path.join(projectRoot, 'fuel.config.json');
54
+ if (!(await fs.pathExists(fuelConfigPath))) {
55
+ throw new Error(`fuel.config.json not found at ${fuelConfigPath}.\n` +
56
+ `Run this command from a project that has been provisioned with "fuel infra:deploy".`);
57
+ }
58
+ const infraDir = path.join(projectRoot, 'infra');
59
+ if (!(await fs.pathExists(infraDir))) {
60
+ throw new Error(`infra/ folder not found at ${projectRoot}.\n` +
61
+ `The /infra folder is required to run destroy. ` +
62
+ `Re-run "fuel infra:deploy --regenerate" to recreate it first.`);
63
+ }
64
+ console.log(chalk_1.default.cyan('\n Preflight checks'));
65
+ console.log(chalk_1.default.cyan(' ' + '\u2500'.repeat(40)));
66
+ const config = await (0, config_loader_1.loadInfraConfig)(fuelConfigPath);
67
+ console.log(chalk_1.default.green(' \u2713') +
68
+ ` fuel.config.json valid \u2014 ${config.apps.length} app(s)`);
69
+ const tofuVersion = (0, preflight_1.checkTofuVersion)();
70
+ console.log(chalk_1.default.green(' \u2713') + ` tofu ${tofuVersion}`);
71
+ const credentials = await (0, credentials_1.resolveCredentials)(projectRoot);
72
+ console.log(chalk_1.default.green(' \u2713') + ' Credentials resolved');
73
+ // TofuVars — db values are only needed to satisfy variable declarations,
74
+ // the actual values don't matter for destroy.
75
+ const tofuVars = {
76
+ db_password: crypto.randomBytes(32).toString('hex'),
77
+ db_username: slugify(config.name),
78
+ db_name: slugify(config.name),
79
+ };
80
+ console.log(chalk_1.default.yellow('\n WARNING: This will destroy ALL infrastructure resources.\n'));
81
+ console.log('');
82
+ await (0, tofu_runner_1.runTofuDestroy)(infraDir, credentials, tofuVars);
83
+ console.log(chalk_1.default.green('\n Infrastructure has been destroyed.\n'));
84
+ }
85
+ //# sourceMappingURL=infra-destroy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-destroy.js","sourceRoot":"","sources":["../../src/commands/infra-destroy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,oCAgDC;AAjED,+CAAgC;AAChC,2CAA4B;AAC5B,6CAA8B;AAC9B,kDAAyB;AACzB,0DAAwD;AACxD,sDAAyD;AACzD,kDAAqD;AACrD,sDAA+D;AAM/D,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;AACvD,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAyB;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IAEvE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;IACjE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,iCAAiC,cAAc,KAAK;YAClD,qFAAqF,CACxF,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAChD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,8BAA8B,WAAW,KAAK;YAC5C,gDAAgD;YAChD,+DAA+D,CAClE,CAAA;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEnD,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAe,EAAC,cAAc,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC;QACrB,kCAAkC,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,CAChE,CAAA;IAED,MAAM,WAAW,GAAG,IAAA,4BAAgB,GAAE,CAAA;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,WAAW,EAAE,CAAC,CAAA;IAE7D,MAAM,WAAW,GAAG,MAAM,IAAA,gCAAkB,EAAC,WAAW,CAAC,CAAA;IACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,uBAAuB,CAAC,CAAA;IAE9D,yEAAyE;IACzE,8CAA8C;IAC9C,MAAM,QAAQ,GAAa;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnD,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;KAC9B,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC,CAAA;IAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,MAAM,IAAA,4BAAc,EAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;IAErD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAA;AACtE,CAAC"}