@solidxai/solidctl 0.1.50 → 0.1.51-beta.1

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 CHANGED
@@ -82,6 +82,36 @@ solidctl create-app [options]
82
82
 
83
83
  ---
84
84
 
85
+ ### `setup-app`
86
+
87
+ Sets up an **already-bootstrapped** SolidX project you've just cloned — the counterpart to `create-app` for a project that already exists. Infers what it can from the repo (project name, UI port), prompts only for the database connection, then installs, configures, builds, seeds, and starts the project.
88
+
89
+ ```bash
90
+ solidctl setup-app [options]
91
+ ```
92
+
93
+ | Flag | Description |
94
+ |---|---|
95
+ | `--no-start` | Skip starting the dev servers after setup |
96
+ | `--no-interactive` | Skip all prompts and use defaults (or provided flags) |
97
+ | `--verbose` | Show detailed logs during installation |
98
+ | `--skip-install` | Skip `npm install` for `solid-api` and `solid-ui` |
99
+ | `--skip-build` | Skip the build step |
100
+ | `--skip-seed` | Skip the seed step |
101
+ | `--force-env` | Regenerate `.env` files even if they already exist |
102
+ | `--db-client <client>` | `PostgreSQL`, `MySQL`, or `MSSQL` |
103
+ | `--db-host <host>` | Database host |
104
+ | `--db-port <port>` | Database port |
105
+ | `--db-name <name>` | Database name |
106
+ | `--db-username <username>` | Database username |
107
+ | `--db-password <password>` | Database password |
108
+
109
+ If `solid-api/.env` already exists, it's left untouched (pass `--force-env` to regenerate). If a `solid-api/.env.example` exists, its non-secret values are carried over and only the gaps (and the database password) are prompted for. Otherwise, only the database connection is prompted for — other project-specific settings (RabbitMQ, OAuth, SMTP, Redis, etc., if the project uses them) aren't known ahead of time and need to be added manually afterward.
110
+
111
+ > Requires both `solid-api/package.json` and `solid-ui/package.json` to define a `solidx:dev` script. If either is missing (a project that predates that script), setup fails fast and tells you the exact line to add.
112
+
113
+ ---
114
+
85
115
  ### `build`
86
116
 
87
117
  Builds the NestJS API and sets up the local `solid` CLI shim so subsequent `solidctl` commands that proxy into the API (like `seed`, `generate`, and `test`) work correctly. Run this after project creation and after any changes to `solid-api`.
@@ -108,6 +138,7 @@ solidctl seed
108
138
  ```
109
139
 
110
140
  Proxies to the `solid seed` command inside `solid-api/`. Any additional arguments are passed through.
141
+ Use `solidctl seed --verbose` to show detailed Nest/Winston logs during seeding.
111
142
 
112
143
  ---
113
144
 
@@ -1,2 +1,5 @@
1
1
  import { Command } from 'commander';
2
+ export declare function runBuild(projectRoot: string, options?: {
3
+ uiOnly?: boolean;
4
+ }): void;
2
5
  export declare function registerBuildCommand(program: Command): void;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runBuild = runBuild;
6
7
  exports.registerBuildCommand = registerBuildCommand;
7
8
  const child_process_1 = require("child_process");
8
9
  const fs_1 = __importDefault(require("fs"));
@@ -101,6 +102,43 @@ function ensureGlobalSolid(shimFiles, shimDir) {
101
102
  }
102
103
  return { linked: false, location: shimDir, viaPath: false };
103
104
  }
105
+ function runBuild(projectRoot, options = {}) {
106
+ if (options.uiOnly) {
107
+ const solidUiDir = path_1.default.join(projectRoot, 'solid-ui');
108
+ if (!fs_1.default.existsSync(solidUiDir)) {
109
+ throw new Error(`Required folder not found: ${solidUiDir}`);
110
+ }
111
+ console.log('▶ Building solid-ui');
112
+ exec('npm run build', solidUiDir);
113
+ return;
114
+ }
115
+ console.log('▶ Building solid-api');
116
+ exec('npm run build', `${projectRoot}/solid-api`);
117
+ console.log('▶ Ensuring CLI files are executable');
118
+ const mainCli = path_1.default.join(projectRoot, 'solid-api', 'dist', 'main-cli.js');
119
+ chmodIfExists(mainCli);
120
+ console.log('▶ Updating solid CLI shim');
121
+ const shimFiles = ensureSolidShim(mainCli);
122
+ console.log('▶ Linking solid CLI for global use');
123
+ const linkResult = ensureGlobalSolid(shimFiles, shimFiles.solidctlBinDir);
124
+ if (!linkResult.linked) {
125
+ console.warn(`⚠️ Add ${shimFiles.solidctlBinDir} to PATH to use "solid" globally.`);
126
+ }
127
+ console.log('▶ Adding local bin to PATH');
128
+ process.env.PATH = `${shimFiles.solidctlBinDir}${path_1.default.delimiter}${process.env.PATH || ''}`;
129
+ console.log('▶ Verifying solid CLI availability');
130
+ const solidCommand = process.platform === 'win32' ? 'solid.cmd' : 'solid';
131
+ const result = (0, child_process_1.spawnSync)(solidCommand, ['--help'], {
132
+ stdio: 'ignore',
133
+ env: process.env,
134
+ shell: process.platform === 'win32' ? true : false,
135
+ });
136
+ if (result.error) {
137
+ console.error('❌ solid CLI not found');
138
+ process.exit(1);
139
+ }
140
+ console.log('✔ solid CLI ready');
141
+ }
104
142
  function registerBuildCommand(program) {
105
143
  program
106
144
  .command('build')
@@ -108,42 +146,7 @@ function registerBuildCommand(program) {
108
146
  .option('--ui-only', 'Build only solid-ui and skip solid-api build')
109
147
  .action((options) => {
110
148
  (0, helper_1.validateProjectRoot)();
111
- const projectRoot = process.cwd();
112
- if (options.uiOnly) {
113
- const solidUiDir = path_1.default.join(projectRoot, 'solid-ui');
114
- if (!fs_1.default.existsSync(solidUiDir)) {
115
- throw new Error(`Required folder not found: ${solidUiDir}`);
116
- }
117
- console.log('▶ Building solid-ui');
118
- exec('npm run build', solidUiDir);
119
- return;
120
- }
121
- console.log('▶ Building solid-api');
122
- exec('npm run build', `${projectRoot}/solid-api`);
123
- console.log('▶ Ensuring CLI files are executable');
124
- const mainCli = path_1.default.join(projectRoot, 'solid-api', 'dist', 'main-cli.js');
125
- chmodIfExists(mainCli);
126
- console.log('▶ Updating solid CLI shim');
127
- const shimFiles = ensureSolidShim(mainCli);
128
- console.log('▶ Linking solid CLI for global use');
129
- const linkResult = ensureGlobalSolid(shimFiles, shimFiles.solidctlBinDir);
130
- if (!linkResult.linked) {
131
- console.warn(`⚠️ Add ${shimFiles.solidctlBinDir} to PATH to use "solid" globally.`);
132
- }
133
- console.log('▶ Adding local bin to PATH');
134
- process.env.PATH = `${shimFiles.solidctlBinDir}${path_1.default.delimiter}${process.env.PATH || ''}`;
135
- console.log('▶ Verifying solid CLI availability');
136
- const solidCommand = process.platform === 'win32' ? 'solid.cmd' : 'solid';
137
- const result = (0, child_process_1.spawnSync)(solidCommand, ['--help'], {
138
- stdio: 'ignore',
139
- env: process.env,
140
- shell: process.platform === 'win32' ? true : false,
141
- });
142
- if (result.error) {
143
- console.error('❌ solid CLI not found');
144
- process.exit(1);
145
- }
146
- console.log('✔ solid CLI ready');
149
+ runBuild(process.cwd(), options);
147
150
  });
148
151
  }
149
152
  //# sourceMappingURL=build.command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.command.js","sourceRoot":"","sources":["../../src/commands/build.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.command.js","sourceRoot":"","sources":["../../src/commands/build.command.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  import { Command } from 'commander';
2
+ export declare function runSeed(projectRoot: string, passthroughArgs?: string[]): void;
2
3
  export declare function registerSeedCommand(program: Command): void;
@@ -1,8 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runSeed = runSeed;
3
4
  exports.registerSeedCommand = registerSeedCommand;
4
5
  const child_process_1 = require("child_process");
5
6
  const helper_1 = require("../helper");
7
+ function runSeed(projectRoot, passthroughArgs = []) {
8
+ const solidApiDir = `${projectRoot}/solid-api`;
9
+ const args = ['seed', ...passthroughArgs];
10
+ const solidCommand = process.platform === 'win32' ? 'solid.cmd' : 'solid';
11
+ const result = (0, child_process_1.spawnSync)(solidCommand, args, {
12
+ cwd: solidApiDir,
13
+ stdio: 'inherit',
14
+ env: (0, helper_1.getSolidCommandEnv)(),
15
+ shell: process.platform === 'win32' ? true : false,
16
+ });
17
+ if (result.error) {
18
+ console.error('❌ Failed to run solid seed:', result.error.message);
19
+ process.exit(1);
20
+ }
21
+ if (result.status !== 0) {
22
+ console.error('❌ solid seed exited with code', result.status);
23
+ process.exit(result.status ?? 1);
24
+ }
25
+ }
6
26
  function registerSeedCommand(program) {
7
27
  program
8
28
  .command('seed')
@@ -10,29 +30,14 @@ function registerSeedCommand(program) {
10
30
  .helpOption(false)
11
31
  .allowUnknownOption(true)
12
32
  .allowExcessArguments(true)
33
+ .addHelpText('after', '\nOptions forwarded to the Solid CLI:\n' +
34
+ ' -v, --verbose Show detailed Nest/Winston logs during seeding\n')
13
35
  .action((_options, command) => {
14
36
  (0, helper_1.validateProjectRoot)();
15
- const projectRoot = process.cwd();
16
- const solidApiDir = `${projectRoot}/solid-api`;
17
37
  const rawArgs = command.parent ? command.parent.rawArgs : process.argv;
18
38
  const seedIndex = rawArgs.lastIndexOf('seed');
19
39
  const passthroughArgs = seedIndex >= 0 ? rawArgs.slice(seedIndex + 1) : [];
20
- const args = ['seed', ...passthroughArgs];
21
- const solidCommand = process.platform === 'win32' ? 'solid.cmd' : 'solid';
22
- const result = (0, child_process_1.spawnSync)(solidCommand, args, {
23
- cwd: solidApiDir,
24
- stdio: 'inherit',
25
- env: (0, helper_1.getSolidCommandEnv)(),
26
- shell: process.platform === 'win32' ? true : false,
27
- });
28
- if (result.error) {
29
- console.error('❌ Failed to run solid seed:', result.error.message);
30
- process.exit(1);
31
- }
32
- if (result.status !== 0) {
33
- console.error('❌ solid seed exited with code', result.status);
34
- process.exit(result.status ?? 1);
35
- }
40
+ runSeed(process.cwd(), passthroughArgs);
36
41
  });
37
42
  }
38
43
  //# sourceMappingURL=seed.command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seed.command.js","sourceRoot":"","sources":["../../src/commands/seed.command.ts"],"names":[],"mappings":";;AAIA,kDAmCC;AAtCD,iDAA0C;AAC1C,sCAAoE;AAEpE,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0DAA0D,CAAC;SACvE,UAAU,CAAC,KAAK,CAAC;SACjB,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC;SAC1B,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC5B,IAAA,4BAAmB,GAAE,CAAC;QACtB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,GAAG,WAAW,YAAY,CAAC;QAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;QAE1C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,YAAY,EAAE,IAAI,EAAE;YAC3C,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,IAAA,2BAAkB,GAAE;YACzB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SACnD,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"seed.command.js","sourceRoot":"","sources":["../../src/commands/seed.command.ts"],"names":[],"mappings":";;AAUA,0BAqBC;AAED,kDAqBC;AArDD,iDAA0C;AAC1C,sCAAoE;AAQpE,SAAgB,OAAO,CAAC,WAAmB,EAAE,kBAA4B,EAAE;IACzE,MAAM,WAAW,GAAG,GAAG,WAAW,YAAY,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAE1C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,YAAY,EAAE,IAAI,EAAE;QAC3C,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,IAAA,2BAAkB,GAAE;QACzB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;KACnD,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0DAA0D,CAAC;SACvE,UAAU,CAAC,KAAK,CAAC;SACjB,kBAAkB,CAAC,IAAI,CAAC;SACxB,oBAAoB,CAAC,IAAI,CAAC;SAC1B,WAAW,CACV,OAAO,EACP,yCAAyC;QACvC,mEAAmE,CACtE;SACA,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC5B,IAAA,4BAAmB,GAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { SetupAnswers } from '../create-app/setup-questions';
2
+ import { SetupProjectAnswers } from './setup-questions';
3
+ export interface MinimalPackageJson {
4
+ name?: string;
5
+ scripts?: Record<string, string>;
6
+ }
7
+ export declare function inferProjectName(apiPackageJson: MinimalPackageJson | undefined, cwd: string): string;
8
+ export declare function inferUiPort(uiPackageJson: MinimalPackageJson | undefined): string;
9
+ export declare function parseEnvFile(content: string): Record<string, string>;
10
+ export declare function isSecretKey(key: string): boolean;
11
+ export declare const GENERATED_SECRET_KEYS: Set<string>;
12
+ export declare function isGeneratedSecretKey(key: string): boolean;
13
+ export declare const DB_ENV_KEYS: {
14
+ readonly host: "DEFAULT_DATABASE_HOST";
15
+ readonly port: "DEFAULT_DATABASE_PORT";
16
+ readonly name: "DEFAULT_DATABASE_NAME";
17
+ readonly username: "DEFAULT_DATABASE_USER";
18
+ readonly password: "DEFAULT_DATABASE_PASSWORD";
19
+ };
20
+ export type DbField = keyof typeof DB_ENV_KEYS | 'client';
21
+ export declare function toDbTypeEnvValue(client: string): 'postgres' | 'mysql' | 'mssql';
22
+ export declare function fromDbTypeEnvValue(raw: string | undefined): string | null;
23
+ export declare function defaultDbPortForClient(client: string): string;
24
+ export declare function buildDatabaseUrl(answers: SetupProjectAnswers): string;
25
+ export interface EnvExamplePlan {
26
+ parsed: Record<string, string>;
27
+ promptDbFields: DbField[];
28
+ otherBlankKeys: string[];
29
+ }
30
+ export declare function planEnvFromExample(exampleContent: string): EnvExamplePlan;
31
+ export type EnvPlan = {
32
+ action: 'skip-existing';
33
+ } | {
34
+ action: 'from-example';
35
+ promptDbFields: DbField[];
36
+ otherBlankKeys: string[];
37
+ parsed: Record<string, string>;
38
+ } | {
39
+ action: 'prompt-full';
40
+ };
41
+ export declare function planEnvWrite(opts: {
42
+ envExists: boolean;
43
+ exampleContent: string | null;
44
+ forceEnv: boolean;
45
+ }): EnvPlan;
46
+ export declare function resolveAnswersFromExample(parsed: Record<string, string>, prompted: Partial<SetupProjectAnswers>): SetupProjectAnswers;
47
+ export declare function toCreateAppAnswers(answers: SetupProjectAnswers, inferred: {
48
+ projectName: string;
49
+ apiPort: string;
50
+ uiPort: string;
51
+ }): SetupAnswers;
52
+ export declare function properAppNameFor(projectName: string): string;
53
+ export declare function generateJwtSecret(): string;
54
+ export declare function buildEnvFromExample(exampleContent: string, overrides: Record<string, string>): string;
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DB_ENV_KEYS = exports.GENERATED_SECRET_KEYS = void 0;
7
+ exports.inferProjectName = inferProjectName;
8
+ exports.inferUiPort = inferUiPort;
9
+ exports.parseEnvFile = parseEnvFile;
10
+ exports.isSecretKey = isSecretKey;
11
+ exports.isGeneratedSecretKey = isGeneratedSecretKey;
12
+ exports.toDbTypeEnvValue = toDbTypeEnvValue;
13
+ exports.fromDbTypeEnvValue = fromDbTypeEnvValue;
14
+ exports.defaultDbPortForClient = defaultDbPortForClient;
15
+ exports.buildDatabaseUrl = buildDatabaseUrl;
16
+ exports.planEnvFromExample = planEnvFromExample;
17
+ exports.planEnvWrite = planEnvWrite;
18
+ exports.resolveAnswersFromExample = resolveAnswersFromExample;
19
+ exports.toCreateAppAnswers = toCreateAppAnswers;
20
+ exports.properAppNameFor = properAppNameFor;
21
+ exports.generateJwtSecret = generateJwtSecret;
22
+ exports.buildEnvFromExample = buildEnvFromExample;
23
+ const crypto_1 = __importDefault(require("crypto"));
24
+ const lodash_1 = require("lodash");
25
+ const path_1 = __importDefault(require("path"));
26
+ const setup_questions_1 = require("./setup-questions");
27
+ function inferProjectName(apiPackageJson, cwd) {
28
+ const scopedMatch = /^@([^/]+)\//.exec(apiPackageJson?.name ?? '');
29
+ if (scopedMatch) {
30
+ return scopedMatch[1];
31
+ }
32
+ return (0, lodash_1.kebabCase)(path_1.default.basename(cwd));
33
+ }
34
+ function inferUiPort(uiPackageJson) {
35
+ const devScript = uiPackageJson?.scripts?.dev ?? '';
36
+ const match = /(?:^|\s)--port\s+(\d{1,5})(?:\s|$)/.exec(devScript);
37
+ return match ? match[1] : '5173';
38
+ }
39
+ function parseEnvFile(content) {
40
+ const result = {};
41
+ for (const rawLine of content.split(/\r?\n/)) {
42
+ const line = rawLine.trim();
43
+ if (!line || line.startsWith('#')) {
44
+ continue;
45
+ }
46
+ const eqIndex = line.indexOf('=');
47
+ if (eqIndex < 0) {
48
+ continue;
49
+ }
50
+ const key = line.slice(0, eqIndex).trim();
51
+ const value = line
52
+ .slice(eqIndex + 1)
53
+ .trim()
54
+ .replace(/^['"]|['"]$/g, '');
55
+ if (key) {
56
+ result[key] = value;
57
+ }
58
+ }
59
+ return result;
60
+ }
61
+ function isSecretKey(key) {
62
+ return /(_PASSWORD|_SECRET)$/i.test(key);
63
+ }
64
+ exports.GENERATED_SECRET_KEYS = new Set([
65
+ 'IAM_JWT_SECRET',
66
+ 'NEXTAUTH_SECRET',
67
+ ]);
68
+ function isGeneratedSecretKey(key) {
69
+ return exports.GENERATED_SECRET_KEYS.has(key);
70
+ }
71
+ exports.DB_ENV_KEYS = {
72
+ host: 'DEFAULT_DATABASE_HOST',
73
+ port: 'DEFAULT_DATABASE_PORT',
74
+ name: 'DEFAULT_DATABASE_NAME',
75
+ username: 'DEFAULT_DATABASE_USER',
76
+ password: 'DEFAULT_DATABASE_PASSWORD',
77
+ };
78
+ function toDbTypeEnvValue(client) {
79
+ if (client === 'MySQL')
80
+ return 'mysql';
81
+ if (client === 'MSSQL')
82
+ return 'mssql';
83
+ return 'postgres';
84
+ }
85
+ function fromDbTypeEnvValue(raw) {
86
+ switch ((raw ?? '').trim().toLowerCase()) {
87
+ case 'mysql':
88
+ return 'MySQL';
89
+ case 'mssql':
90
+ return 'MSSQL';
91
+ case 'postgres':
92
+ case 'postgresql':
93
+ return 'PostgreSQL';
94
+ default:
95
+ return null;
96
+ }
97
+ }
98
+ function defaultDbPortForClient(client) {
99
+ if (client === 'MySQL')
100
+ return setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabasePortMysql;
101
+ if (client === 'MSSQL')
102
+ return setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabasePortMssql;
103
+ return setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabasePortPostgres;
104
+ }
105
+ function buildDatabaseUrl(answers) {
106
+ const dbType = toDbTypeEnvValue(answers.solidApiDatabaseClient);
107
+ const { solidApiDatabaseHost: host, solidApiDatabasePort: port, solidApiDatabaseUsername: user, solidApiDatabasePassword: password, solidApiDatabaseName: name, } = answers;
108
+ const encodedPassword = password ? `:${encodeURIComponent(password)}` : '';
109
+ if (dbType === 'mssql') {
110
+ return `mssql+pyodbc://${user}${encodedPassword}@${host}:${port}/${name}?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes&Encrypt=no`;
111
+ }
112
+ if (dbType === 'mysql') {
113
+ return `mysql+pymysql://${user}${encodedPassword}@${host}:${port}/${name}`;
114
+ }
115
+ return `postgresql://${user}${encodedPassword}@${host}:${port}/${name}`;
116
+ }
117
+ function planEnvFromExample(exampleContent) {
118
+ const parsed = parseEnvFile(exampleContent);
119
+ const dbEnvKeySet = new Set(Object.values(exports.DB_ENV_KEYS));
120
+ const promptDbFields = [];
121
+ if (fromDbTypeEnvValue(parsed.SOLID_CORE_DB_TYPE) === null) {
122
+ promptDbFields.push('client');
123
+ }
124
+ for (const [field, envKey] of Object.entries(exports.DB_ENV_KEYS)) {
125
+ const value = parsed[envKey];
126
+ const isBlank = value === undefined || value === '';
127
+ if (isBlank || isSecretKey(envKey)) {
128
+ promptDbFields.push(field);
129
+ }
130
+ }
131
+ const otherBlankKeys = Object.entries(parsed)
132
+ .filter(([key, value]) => value === '' && !isGeneratedSecretKey(key) && !dbEnvKeySet.has(key))
133
+ .map(([key]) => key);
134
+ return { parsed, promptDbFields, otherBlankKeys };
135
+ }
136
+ function planEnvWrite(opts) {
137
+ if (opts.envExists && !opts.forceEnv) {
138
+ return { action: 'skip-existing' };
139
+ }
140
+ if (opts.exampleContent !== null) {
141
+ const { parsed, promptDbFields, otherBlankKeys } = planEnvFromExample(opts.exampleContent);
142
+ return { action: 'from-example', promptDbFields, otherBlankKeys, parsed };
143
+ }
144
+ return { action: 'prompt-full' };
145
+ }
146
+ function resolveAnswersFromExample(parsed, prompted) {
147
+ const client = prompted.solidApiDatabaseClient ??
148
+ fromDbTypeEnvValue(parsed.SOLID_CORE_DB_TYPE) ??
149
+ setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabaseClient;
150
+ return {
151
+ solidApiDatabaseClient: client,
152
+ solidApiDatabaseHost: prompted.solidApiDatabaseHost ??
153
+ parsed[exports.DB_ENV_KEYS.host] ??
154
+ setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabaseHost,
155
+ solidApiDatabasePort: prompted.solidApiDatabasePort ??
156
+ parsed[exports.DB_ENV_KEYS.port] ??
157
+ defaultDbPortForClient(client),
158
+ solidApiDatabaseName: prompted.solidApiDatabaseName ??
159
+ parsed[exports.DB_ENV_KEYS.name] ??
160
+ setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabaseName,
161
+ solidApiDatabaseUsername: prompted.solidApiDatabaseUsername ??
162
+ parsed[exports.DB_ENV_KEYS.username] ??
163
+ setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabaseUsername,
164
+ solidApiDatabasePassword: prompted.solidApiDatabasePassword ??
165
+ parsed[exports.DB_ENV_KEYS.password] ??
166
+ setup_questions_1.SETUP_DB_DEFAULTS.solidApiDatabasePassword,
167
+ };
168
+ }
169
+ function toCreateAppAnswers(answers, inferred) {
170
+ return {
171
+ projectName: inferred.projectName,
172
+ solidxVersion: 'stable',
173
+ solidApiPort: inferred.apiPort,
174
+ solidApiDatabaseClient: answers.solidApiDatabaseClient,
175
+ solidApiDatabaseHost: answers.solidApiDatabaseHost,
176
+ solidApiDatabasePort: answers.solidApiDatabasePort,
177
+ solidApiDatabaseName: answers.solidApiDatabaseName,
178
+ solidApiDatabaseUsername: answers.solidApiDatabaseUsername,
179
+ solidApiDatabasePassword: answers.solidApiDatabasePassword,
180
+ solidApiDatabaseSynchronize: 'Yes',
181
+ databaseExists: 'Yes',
182
+ solidUiPort: inferred.uiPort,
183
+ };
184
+ }
185
+ function properAppNameFor(projectName) {
186
+ return (0, lodash_1.startCase)(projectName);
187
+ }
188
+ function generateJwtSecret() {
189
+ return crypto_1.default.randomBytes(64).toString('hex');
190
+ }
191
+ function buildEnvFromExample(exampleContent, overrides) {
192
+ const parsed = parseEnvFile(exampleContent);
193
+ let content = exampleContent;
194
+ const setInline = (key, value) => {
195
+ const pattern = new RegExp(`^${key}=.*$`, 'm');
196
+ content = pattern.test(content)
197
+ ? content.replace(pattern, `${key}=${value}`)
198
+ : `${content}${content.endsWith('\n') ? '' : '\n'}${key}=${value}\n`;
199
+ };
200
+ for (const [key, value] of Object.entries(parsed)) {
201
+ if (isGeneratedSecretKey(key) && value === '' && !(key in overrides)) {
202
+ setInline(key, generateJwtSecret());
203
+ }
204
+ }
205
+ for (const [key, value] of Object.entries(overrides)) {
206
+ setInline(key, value);
207
+ }
208
+ return content;
209
+ }
210
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/setup-app/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Command } from 'commander';
2
+ import { SetupProjectAnswers } from './setup-questions';
3
+ export interface SetupOptions {
4
+ start?: boolean;
5
+ interactive?: boolean;
6
+ verbose?: boolean;
7
+ skipInstall?: boolean;
8
+ skipBuild?: boolean;
9
+ skipSeed?: boolean;
10
+ forceEnv?: boolean;
11
+ dbClient?: string;
12
+ dbHost?: string;
13
+ dbPort?: string;
14
+ dbName?: string;
15
+ dbUsername?: string;
16
+ dbPassword?: string;
17
+ }
18
+ export declare function collectExplicitDbFlags(options: SetupOptions): Partial<SetupProjectAnswers>;
19
+ export declare function registerSetupAppCommand(program: Command): void;