better-ts-stack 0.1.0 → 1.0.8
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 +12 -6
- package/dist/builder/configGenerator.d.ts.map +1 -1
- package/dist/builder/configGenerator.js +26 -23
- package/dist/builder/configGenerator.js.map +1 -1
- package/dist/builder/dependencyInstaller.d.ts.map +1 -1
- package/dist/builder/dependencyInstaller.js +1 -10
- package/dist/builder/dependencyInstaller.js.map +1 -1
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +3 -7
- package/dist/builder/index.js.map +1 -1
- package/dist/builder/templateContext.d.ts +1 -1
- package/dist/builder/templateContext.d.ts.map +1 -1
- package/dist/builder/templateContext.js +0 -2
- package/dist/builder/templateContext.js.map +1 -1
- package/dist/modules/registry.d.ts.map +1 -1
- package/dist/modules/registry.js +2 -5
- package/dist/modules/registry.js.map +1 -1
- package/dist/output/nextSteps.d.ts.map +1 -1
- package/dist/output/nextSteps.js +7 -34
- package/dist/output/nextSteps.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +3 -14
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/stack.d.ts +3 -0
- package/dist/prompts/stack.d.ts.map +1 -0
- package/dist/prompts/stack.js +72 -0
- package/dist/prompts/stack.js.map +1 -0
- package/dist/types/index.d.ts +4 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -9
- package/dist/types/index.js.map +1 -1
- package/dist/validators/index.d.ts +1 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +1 -1
- package/package.json +12 -12
- package/templates/backend/express/config.json +44 -42
- package/templates/backend/express/eslint.config.mjs +40 -31
- package/templates/backend/express/src/index.ts +61 -46
- package/templates/backend/express/src/routes/health.ts +12 -12
- package/templates/backend/express/tsconfig.json +25 -23
- package/templates/frontend/nextjs/app/globals.css +89 -99
- package/templates/frontend/nextjs/app/page.tsx.hbs +9 -10
- package/templates/frontend/nextjs/config.json +33 -27
- package/templates/frontend/nextjs/eslint.config.mjs +11 -11
- package/templates/frontend/nextjs/proxy.ts.hbs +9 -8
- package/templates/frontend/nextjs/tsconfig.json +34 -21
- package/templates/modules/auth/express/config.json +26 -1
- package/templates/modules/auth/express/src/routes/auth.ts.hbs +1 -1
- package/templates/modules/auth/express/src/services/userStore.ts.hbs +95 -107
- package/templates/modules/auth/nextjs/config.json +6 -6
- package/templates/modules/auth/nextjs/lib/auth.ts.hbs +34 -32
- package/templates/modules/docker/.dockerignore +14 -13
- package/templates/modules/docker/Dockerfile.hbs +80 -70
- package/templates/modules/docker/config.json +19 -16
- package/templates/modules/docker/docker-compose.yml.hbs +9 -9
- package/templates/modules/drizzle/express/config.json +27 -0
- package/templates/modules/drizzle/express/drizzle.config.ts +13 -0
- package/templates/modules/drizzle/express/src/lib/db.ts +13 -0
- package/templates/modules/drizzle/express/src/lib/schema.ts +10 -0
- package/templates/modules/drizzle/nextjs/config.json +27 -19
- package/templates/modules/drizzle/nextjs/lib/db.ts +3 -1
- package/templates/modules/drizzle/nextjs/lib/schema.ts.hbs +84 -84
- package/templates/modules/mongoose/config.json +16 -16
- package/templates/modules/mongoose/src/lib/db.ts.hbs +0 -13
- package/templates/modules/mongoose/src/models/User.ts +48 -47
- package/templates/modules/prisma/express/config.json +27 -21
- package/templates/modules/prisma/express/prisma/schema.prisma +3 -2
- package/templates/modules/prisma/express/prisma.config.ts +12 -13
- package/templates/modules/prisma/express/src/lib/prisma.ts +24 -37
- package/templates/modules/prisma/nextjs/config.json +28 -23
- package/templates/modules/prisma/nextjs/prisma/schema.prisma.hbs +91 -90
- package/dist/prompts/backend/index.d.ts +0 -3
- package/dist/prompts/backend/index.d.ts.map +0 -1
- package/dist/prompts/backend/index.js +0 -128
- package/dist/prompts/backend/index.js.map +0 -1
- package/dist/prompts/frontend/index.d.ts +0 -3
- package/dist/prompts/frontend/index.d.ts.map +0 -1
- package/dist/prompts/frontend/index.js +0 -111
- package/dist/prompts/frontend/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -19,10 +19,10 @@ Run the command, answer the prompts, and the CLI generates a ready-to-work proje
|
|
|
19
19
|
|
|
20
20
|
## What It Can Scaffold
|
|
21
21
|
|
|
22
|
-
| Project type
|
|
23
|
-
|
|
|
24
|
-
| Backend API
|
|
25
|
-
| Full-stack app | Next.js 16 + React 19 + TypeScript | PostgreSQL, MongoDB, Prisma, Better Auth, Docker, git
|
|
22
|
+
| Project type | Stack | Optional setup |
|
|
23
|
+
| -------------- | ---------------------------------- | --------------------------------------------------------------------- |
|
|
24
|
+
| Backend API | Express + TypeScript | PostgreSQL, MongoDB, Prisma, Drizzle, Mongoose, JWT auth, Docker, git |
|
|
25
|
+
| Full-stack app | Next.js 16 + React 19 + TypeScript | PostgreSQL, MongoDB, Prisma, Better Auth, Docker, git |
|
|
26
26
|
|
|
27
27
|
Notes:
|
|
28
28
|
|
|
@@ -42,7 +42,7 @@ You will be guided through:
|
|
|
42
42
|
4. Database: `none`, `PostgreSQL`, or `MongoDB`
|
|
43
43
|
5. ORM/ODM when a database is selected
|
|
44
44
|
- PostgreSQL: `Prisma` or `Drizzle`
|
|
45
|
-
- MongoDB: `
|
|
45
|
+
- MongoDB: `Mongoose`
|
|
46
46
|
6. Package manager: `npm`, `pnpm`, or `bun`
|
|
47
47
|
7. Docker setup
|
|
48
48
|
8. Authentication
|
|
@@ -70,7 +70,7 @@ Every generated project includes the essentials:
|
|
|
70
70
|
|
|
71
71
|
## Requirements
|
|
72
72
|
|
|
73
|
-
- Node.js
|
|
73
|
+
- Node.js 24 or later
|
|
74
74
|
|
|
75
75
|
## Links
|
|
76
76
|
|
|
@@ -81,3 +81,9 @@ Every generated project includes the essentials:
|
|
|
81
81
|
## License
|
|
82
82
|
|
|
83
83
|
MIT
|
|
84
|
+
|
|
85
|
+
## Release 1.0.8
|
|
86
|
+
|
|
87
|
+
Requires Node.js 24+. Dependencies and templates use current stable releases, with TypeScript 6.0.3 held for typescript-eslint compatibility and Node.js types aligned to 24.x. Express and Next.js support PostgreSQL with Prisma or Drizzle and MongoDB with Mongoose. Prisma generation runs before builds; Docker uses Node.js 24 and Compose v2.
|
|
88
|
+
|
|
89
|
+
See [upgrade notes](https://better-ts-stack.abdullahtech.me/docs/upgrade-notes) for compatibility changes and maintainer publishing commands.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configGenerator.d.ts","sourceRoot":"","sources":["../../src/builder/configGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configGenerator.d.ts","sourceRoot":"","sources":["../../src/builder/configGenerator.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EAChB,MAAM,UAAU,CAAC;AAGlB,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,eAAe,GACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,eAAe,GACvB,YAAY,CAuBd;AAGD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAyCf;AAGD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgCf"}
|
|
@@ -10,18 +10,18 @@ exports.generateEnvFile = generateEnvFile;
|
|
|
10
10
|
// Utilities for merging module configurations and generating project files
|
|
11
11
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
12
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
13
|
+
const node_crypto_1 = require("node:crypto");
|
|
13
14
|
const path_1 = __importDefault(require("path"));
|
|
14
15
|
const types_1 = require("../types");
|
|
15
16
|
// Replaces Handlebars variables within script command strings
|
|
16
17
|
function processScriptVariables(scripts, context) {
|
|
17
|
-
const helpers = {
|
|
18
|
-
...context.helpers,
|
|
19
|
-
};
|
|
20
18
|
const processedScripts = {};
|
|
21
19
|
for (const [scriptName, scriptCommand] of Object.entries(scripts)) {
|
|
22
20
|
try {
|
|
23
21
|
const template = handlebars_1.default.compile(scriptCommand, { noEscape: true });
|
|
24
|
-
processedScripts[scriptName] = template(context, {
|
|
22
|
+
processedScripts[scriptName] = template(context, {
|
|
23
|
+
helpers: context.helpers,
|
|
24
|
+
});
|
|
25
25
|
}
|
|
26
26
|
catch (error) {
|
|
27
27
|
throw (0, types_1.buildError)(error, "TEMPLATE_SCRIPT_ERROR", `Failed to process script "${scriptName}"`);
|
|
@@ -34,29 +34,18 @@ function mergeConfigurations(modules, context) {
|
|
|
34
34
|
const merged = {
|
|
35
35
|
dependencies: {},
|
|
36
36
|
devDependencies: {},
|
|
37
|
+
overrides: {},
|
|
37
38
|
scripts: {},
|
|
38
39
|
envVars: {},
|
|
39
40
|
};
|
|
40
41
|
// Merge each module's configuration
|
|
41
42
|
// Later modules override earlier ones
|
|
42
43
|
for (const module of modules) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (module.devDependencies) {
|
|
49
|
-
Object.assign(merged.devDependencies, module.devDependencies);
|
|
50
|
-
}
|
|
51
|
-
// Merge scripts - process variables before merging
|
|
52
|
-
if (module.scripts) {
|
|
53
|
-
const processedScripts = processScriptVariables(module.scripts, context);
|
|
54
|
-
Object.assign(merged.scripts, processedScripts);
|
|
55
|
-
}
|
|
56
|
-
// Merge environment variables
|
|
57
|
-
if (module.envVars) {
|
|
58
|
-
Object.assign(merged.envVars, module.envVars);
|
|
59
|
-
}
|
|
44
|
+
Object.assign(merged.dependencies, module.dependencies);
|
|
45
|
+
Object.assign(merged.devDependencies, module.devDependencies);
|
|
46
|
+
Object.assign(merged.overrides, module.overrides);
|
|
47
|
+
Object.assign(merged.scripts, processScriptVariables(module.scripts, context));
|
|
48
|
+
Object.assign(merged.envVars, module.envVars);
|
|
60
49
|
}
|
|
61
50
|
return merged;
|
|
62
51
|
}
|
|
@@ -64,9 +53,14 @@ function mergeConfigurations(modules, context) {
|
|
|
64
53
|
async function generatePackageJson(targetDir, mergedConfig, config) {
|
|
65
54
|
try {
|
|
66
55
|
const isFullstack = config.applicationType === "fullstack";
|
|
56
|
+
const overrides = Object.keys(mergedConfig.overrides).length
|
|
57
|
+
? mergedConfig.overrides
|
|
58
|
+
: undefined;
|
|
67
59
|
const packageJson = {
|
|
68
60
|
name: config.projectName,
|
|
69
61
|
version: "1.0.0",
|
|
62
|
+
private: true,
|
|
63
|
+
engines: { node: ">=24.0.0" },
|
|
70
64
|
description: `Project created with better-ts-stack using ${config.database !== "none" ? config.database : "no database"}`,
|
|
71
65
|
...(isFullstack ? {} : { main: "dist/index.js" }),
|
|
72
66
|
scripts: mergedConfig.scripts,
|
|
@@ -77,6 +71,10 @@ async function generatePackageJson(targetDir, mergedConfig, config) {
|
|
|
77
71
|
license: "MIT",
|
|
78
72
|
dependencies: mergedConfig.dependencies,
|
|
79
73
|
devDependencies: mergedConfig.devDependencies,
|
|
74
|
+
overrides,
|
|
75
|
+
pnpm: config.packageManager === "pnpm" && overrides
|
|
76
|
+
? { overrides }
|
|
77
|
+
: undefined,
|
|
80
78
|
};
|
|
81
79
|
const packageJsonPath = path_1.default.join(targetDir, "package.json");
|
|
82
80
|
await fs_extra_1.default.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n", "utf-8");
|
|
@@ -92,16 +90,21 @@ async function generateEnvFile(targetDir, envVars) {
|
|
|
92
90
|
let envContent = "# Environment Variables\n";
|
|
93
91
|
envContent +=
|
|
94
92
|
"# Copy this file to .env and update with your actual values\n\n";
|
|
93
|
+
let localEnvContent = envContent;
|
|
95
94
|
// Add each environment variable
|
|
96
95
|
for (const [key, value] of Object.entries(envVars)) {
|
|
96
|
+
const resolvedValue = ["JWT_SECRET", "BETTER_AUTH_SECRET"].includes(key)
|
|
97
|
+
? (0, node_crypto_1.randomBytes)(32).toString("hex")
|
|
98
|
+
: value;
|
|
97
99
|
envContent += `${key}=${value}\n`;
|
|
100
|
+
localEnvContent += `${key}=${resolvedValue}\n`;
|
|
98
101
|
}
|
|
99
102
|
// Write .env.example
|
|
100
103
|
const envExamplePath = path_1.default.join(targetDir, ".env.example");
|
|
101
104
|
await fs_extra_1.default.writeFile(envExamplePath, envContent, "utf-8");
|
|
102
|
-
//
|
|
105
|
+
// Keep generated secrets out of the shareable example file.
|
|
103
106
|
const envPath = path_1.default.join(targetDir, ".env");
|
|
104
|
-
await fs_extra_1.default.
|
|
107
|
+
await fs_extra_1.default.writeFile(envPath, localEnvContent, "utf-8");
|
|
105
108
|
}
|
|
106
109
|
catch (error) {
|
|
107
110
|
throw (0, types_1.buildError)(error, "ENV_FILE_ERROR", "Failed to generate environment files");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configGenerator.js","sourceRoot":"","sources":["../../src/builder/configGenerator.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"configGenerator.js","sourceRoot":"","sources":["../../src/builder/configGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyInstaller.d.ts","sourceRoot":"","sources":["../../src/builder/dependencyInstaller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"dependencyInstaller.d.ts","sourceRoot":"","sources":["../../src/builder/dependencyInstaller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAyBT"}
|
|
@@ -6,18 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.installDependencies = installDependencies;
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
8
|
const consola_1 = __importDefault(require("consola"));
|
|
9
|
-
// Returns the installation command for the given package manager
|
|
10
|
-
function getInstallCommand(packageManager) {
|
|
11
|
-
const commands = {
|
|
12
|
-
npm: "npm install",
|
|
13
|
-
pnpm: "pnpm install",
|
|
14
|
-
bun: "bun install",
|
|
15
|
-
};
|
|
16
|
-
return commands[packageManager];
|
|
17
|
-
}
|
|
18
9
|
// Installs project dependencies in the target directory
|
|
19
10
|
function installDependencies(packageManager, cwd) {
|
|
20
|
-
const command =
|
|
11
|
+
const command = `${packageManager} install`;
|
|
21
12
|
consola_1.default.info(`Installing dependencies with ${packageManager}...`);
|
|
22
13
|
consola_1.default.debug(`Running: ${command}`);
|
|
23
14
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyInstaller.js","sourceRoot":"","sources":["../../src/builder/dependencyInstaller.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"dependencyInstaller.js","sourceRoot":"","sources":["../../src/builder/dependencyInstaller.ts"],"names":[],"mappings":";;;;;AAMA,kDA4BC;AAlCD,iDAAyC;AACzC,sDAA8B;AAI9B,wDAAwD;AACxD,SAAgB,mBAAmB,CACjC,cAA8B,EAC9B,GAAW;IAEX,MAAM,OAAO,GAAG,GAAG,cAAc,UAAU,CAAC;IAE5C,iBAAO,CAAC,IAAI,CAAC,gCAAgC,cAAc,KAAK,CAAC,CAAC;IAClE,iBAAO,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,OAAO,EAAE;YAChB,GAAG;YACH,KAAK,EAAE,SAAS,EAAE,0CAA0C;SAC7D,CAAC,CAAC;QAEH,iBAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6EAA6E;QAC7E,iBAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,iBAAO,CAAC,KAAK,CACX,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CAAC;QACF,iBAAO,CAAC,IAAI,CACV,2DAA2D,OAAO,EAAE,CACrE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,WAAW,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AAchF,wBAAsB,KAAK,CACzB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,WAAW,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AAchF,wBAAsB,KAAK,CACzB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAyItB"}
|
package/dist/builder/index.js
CHANGED
|
@@ -68,7 +68,7 @@ async function build(config, targetDir) {
|
|
|
68
68
|
// 8. Process Handlebars templates
|
|
69
69
|
consola_1.default.info("Processing template files...");
|
|
70
70
|
try {
|
|
71
|
-
const allTemplateFiles = modules.flatMap((m) => m.config.templateFiles
|
|
71
|
+
const allTemplateFiles = modules.flatMap((m) => m.config.templateFiles);
|
|
72
72
|
if (allTemplateFiles.length > 0) {
|
|
73
73
|
await (0, fileProcessor_1.processTemplateFiles)(targetDir, templateContext, allTemplateFiles);
|
|
74
74
|
consola_1.default.success(`Processed ${allTemplateFiles.length} template file(s)`);
|
|
@@ -82,15 +82,11 @@ async function build(config, targetDir) {
|
|
|
82
82
|
}
|
|
83
83
|
// 9. Generate package.json
|
|
84
84
|
consola_1.default.info("Generating package.json...");
|
|
85
|
-
await (0, configGenerator_1.generatePackageJson)(targetDir, mergedConfig, config)
|
|
86
|
-
throw (0, types_1.buildError)(e, "PACKAGE_JSON_ERROR", "Failed to generate package.json");
|
|
87
|
-
});
|
|
85
|
+
await (0, configGenerator_1.generatePackageJson)(targetDir, mergedConfig, config);
|
|
88
86
|
consola_1.default.success("package.json generated");
|
|
89
87
|
// 10. Generate environment files
|
|
90
88
|
consola_1.default.info("Generating environment files...");
|
|
91
|
-
await (0, configGenerator_1.generateEnvFile)(targetDir, mergedConfig.envVars)
|
|
92
|
-
throw (0, types_1.buildError)(e, "ENV_FILE_ERROR", "Failed to generate environment files");
|
|
93
|
-
});
|
|
89
|
+
await (0, configGenerator_1.generateEnvFile)(targetDir, mergedConfig.envVars);
|
|
94
90
|
consola_1.default.success("Environment files generated");
|
|
95
91
|
// 11. Install dependencies (optional)
|
|
96
92
|
let depsInstalled = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":";;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export declare function buildTemplateContext(config: ProjectConfig): {
|
|
|
15
15
|
uppercase: typeof uppercase;
|
|
16
16
|
kebabCase: typeof kebabCase;
|
|
17
17
|
eq: (a: string, b: string) => boolean;
|
|
18
|
-
runner: () => "
|
|
18
|
+
runner: () => "bun" | "node";
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
//# sourceMappingURL=templateContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateContext.d.ts","sourceRoot":"","sources":["../../src/builder/templateContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa;;;;;;;;;;;;gBAe5C,MAAM,KAAK,MAAM;;;
|
|
1
|
+
{"version":3,"file":"templateContext.d.ts","sourceRoot":"","sources":["../../src/builder/templateContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa;;;;;;;;;;;;gBAe5C,MAAM,KAAK,MAAM;;;EAO9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateContext.js","sourceRoot":"","sources":["../../src/builder/templateContext.ts"],"names":[],"mappings":";;AAIA,8BAEC;AAGD,8BAEC;AAGD,8BAKC;AAED,
|
|
1
|
+
{"version":3,"file":"templateContext.js","sourceRoot":"","sources":["../../src/builder/templateContext.ts"],"names":[],"mappings":";;AAIA,8BAEC;AAGD,8BAEC;AAGD,8BAKC;AAED,oDAsBC;AAxCD,+BAA+B;AAC/B,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED,+BAA+B;AAC/B,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED,gCAAgC;AAChC,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,0BAA0B;SAC9D,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,oCAAoC;SAC5D,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAqB;IACxD,MAAM,SAAS,GACb,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrE,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM;QACnC,SAAS;QACT,IAAI,EAAE,IAAI,EAAE,eAAe;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE;YACP,SAAS;YACT,SAAS;YACT,SAAS;YACT,EAAE,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;YACrC,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAClD,OAAO,MAAM,CAAC;YAChB,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,YAAY,EAAE,MAAM,UAAU,CAAC;AA4CpD,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM;;;GAiBzC"}
|
package/dist/modules/registry.js
CHANGED
|
@@ -16,6 +16,7 @@ const moduleConfigSchema = zod_1.z.object({
|
|
|
16
16
|
type: zod_1.z.enum(["base", "database", "feature"]),
|
|
17
17
|
dependencies: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).default({}),
|
|
18
18
|
devDependencies: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).default({}),
|
|
19
|
+
overrides: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).default({}),
|
|
19
20
|
scripts: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).default({}),
|
|
20
21
|
envVars: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).default({}),
|
|
21
22
|
templateFiles: zod_1.z.array(zod_1.z.string()).default([]),
|
|
@@ -26,11 +27,7 @@ function resolveModulePath(id) {
|
|
|
26
27
|
if (id.startsWith("backend/") || id.startsWith("frontend/")) {
|
|
27
28
|
return path_1.default.join(__dirname, `../../templates/${id}`);
|
|
28
29
|
}
|
|
29
|
-
//
|
|
30
|
-
if (id.includes("/")) {
|
|
31
|
-
return path_1.default.join(__dirname, `../../templates/modules/${id}`);
|
|
32
|
-
}
|
|
33
|
-
// Simple module ids: docker, mongoose
|
|
30
|
+
// Feature modules: auth/express, prisma/nextjs, docker, mongoose, etc.
|
|
34
31
|
return path_1.default.join(__dirname, `../../templates/modules/${id}`);
|
|
35
32
|
}
|
|
36
33
|
// Reads and parses a module's config.json file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/modules/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextSteps.d.ts","sourceRoot":"","sources":["../../src/output/nextSteps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,OAAO,GACrB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"nextSteps.d.ts","sourceRoot":"","sources":["../../src/output/nextSteps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,OAAO,GACrB,MAAM,EAAE,CAgDV;AAGD,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,CAeR"}
|
package/dist/output/nextSteps.js
CHANGED
|
@@ -9,7 +9,7 @@ function generateNextSteps(config, depsInstalled) {
|
|
|
9
9
|
// Step 1: cd into project directory
|
|
10
10
|
steps.push(`cd ${config.projectName}`);
|
|
11
11
|
// Step 2: Set environment variables
|
|
12
|
-
steps.push("
|
|
12
|
+
steps.push("Review the generated .env and set your database connection details");
|
|
13
13
|
if (isFullstack) {
|
|
14
14
|
if (config.useAuth) {
|
|
15
15
|
steps.push("Set BETTER_AUTH_SECRET and BETTER_AUTH_URL in .env");
|
|
@@ -24,51 +24,24 @@ function generateNextSteps(config, depsInstalled) {
|
|
|
24
24
|
}
|
|
25
25
|
// Step 3: Install dependencies if not already done
|
|
26
26
|
if (!depsInstalled) {
|
|
27
|
-
|
|
28
|
-
steps.push(installCmd);
|
|
27
|
+
steps.push(`${config.packageManager} install`);
|
|
29
28
|
}
|
|
30
29
|
// Step 4: Database-specific steps
|
|
31
30
|
if (config.database === "prisma") {
|
|
32
|
-
steps.push(`${
|
|
33
|
-
steps.push(`${
|
|
31
|
+
steps.push(`${config.packageManager} run prisma:generate`);
|
|
32
|
+
steps.push(`${config.packageManager} run prisma:migrate`);
|
|
34
33
|
}
|
|
35
34
|
else if (config.database === "drizzle") {
|
|
36
|
-
steps.push(`${
|
|
37
|
-
steps.push(`${
|
|
35
|
+
steps.push(`${config.packageManager} run db:generate`);
|
|
36
|
+
steps.push(`${config.packageManager} run db:migrate`);
|
|
38
37
|
}
|
|
39
38
|
else if (config.database === "mongoose") {
|
|
40
39
|
steps.push("Ensure MongoDB is running locally or update MONGODB_URI in .env");
|
|
41
40
|
}
|
|
42
41
|
// Step 5: Start dev server
|
|
43
|
-
steps.push(`${
|
|
42
|
+
steps.push(`${config.packageManager} run dev`);
|
|
44
43
|
return steps;
|
|
45
44
|
}
|
|
46
|
-
// Returns the dependency installation command for a package manager
|
|
47
|
-
function getInstallCommand(packageManager) {
|
|
48
|
-
switch (packageManager) {
|
|
49
|
-
case "npm":
|
|
50
|
-
return "npm install";
|
|
51
|
-
case "pnpm":
|
|
52
|
-
return "pnpm install";
|
|
53
|
-
case "bun":
|
|
54
|
-
return "bun install";
|
|
55
|
-
default:
|
|
56
|
-
return "npm install";
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Returns the script execution prefix for a package manager
|
|
60
|
-
function getRunCommand(packageManager) {
|
|
61
|
-
switch (packageManager) {
|
|
62
|
-
case "npm":
|
|
63
|
-
return "npm run";
|
|
64
|
-
case "pnpm":
|
|
65
|
-
return "pnpm run";
|
|
66
|
-
case "bun":
|
|
67
|
-
return "bun run";
|
|
68
|
-
default:
|
|
69
|
-
return "npm run";
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
45
|
// Formats the next steps into a success message string
|
|
73
46
|
function displayNextSteps(_projectName, steps) {
|
|
74
47
|
const formattedSteps = steps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextSteps.js","sourceRoot":"","sources":["../../src/output/nextSteps.ts"],"names":[],"mappings":";;AAGA,
|
|
1
|
+
{"version":3,"file":"nextSteps.js","sourceRoot":"","sources":["../../src/output/nextSteps.ts"],"names":[],"mappings":";;AAGA,8CAmDC;AAGD,4CAkBC;AAzED,iFAAiF;AACjF,SAAgB,iBAAiB,CAC/B,MAAqB,EACrB,aAAsB;IAEtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,KAAK,WAAW,CAAC;IAE3D,oCAAoC;IACpC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEvC,oCAAoC;IACpC,KAAK,CAAC,IAAI,CACR,oEAAoE,CACrE,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CACR,mEAAmE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,kCAAkC;IAClC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,sBAAsB,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,qBAAqB,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,kBAAkB,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,iBAAiB,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CACR,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,UAAU,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uDAAuD;AACvD,SAAgB,gBAAgB,CAC9B,YAAoB,EACpB,KAAe;IAEf,MAAM,cAAc,GAAG,KAAK;SACzB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,OAAO,GAAG;;;;EAIhB,cAAc;;;CAGf,CAAC;IAEA,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,aAAa,EACd,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,wBAAsB,kBAAkB,2BAoCvC;AAGD,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAiC1E"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -9,14 +9,13 @@ const prompts_1 = require("@clack/prompts");
|
|
|
9
9
|
const consola_1 = __importDefault(require("consola"));
|
|
10
10
|
const types_1 = require("../types");
|
|
11
11
|
const validators_1 = require("../validators");
|
|
12
|
-
const
|
|
13
|
-
const frontend_1 = require("./frontend");
|
|
12
|
+
const stack_1 = require("./stack");
|
|
14
13
|
// Collects user input via interactive prompts
|
|
15
14
|
async function collectUserChoices() {
|
|
16
15
|
const projectName = await (0, prompts_1.text)({
|
|
17
16
|
message: "Project name:",
|
|
18
17
|
placeholder: "my-awesome-project",
|
|
19
|
-
validate: (value) => (0, validators_1.validateProjectName)(value),
|
|
18
|
+
validate: (value) => (0, validators_1.validateProjectName)(value ?? ""),
|
|
20
19
|
});
|
|
21
20
|
if ((0, prompts_1.isCancel)(projectName)) {
|
|
22
21
|
(0, prompts_1.cancel)("Operation cancelled.");
|
|
@@ -31,17 +30,7 @@ async function collectUserChoices() {
|
|
|
31
30
|
(0, prompts_1.cancel)("Operation cancelled.");
|
|
32
31
|
process.exit(0);
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
if (applicationType === "backend") {
|
|
36
|
-
userChoices = await (0, backend_1.collectBackendChoices)();
|
|
37
|
-
}
|
|
38
|
-
else if (applicationType === "fullstack") {
|
|
39
|
-
userChoices = await (0, frontend_1.collectFrontendChoices)();
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
(0, prompts_1.cancel)("Invalid application type selected.");
|
|
43
|
-
process.exit(0);
|
|
44
|
-
}
|
|
33
|
+
const userChoices = await (0, stack_1.collectStackChoices)(applicationType);
|
|
45
34
|
// Derive database field from databaseType + orm for backward compatibility
|
|
46
35
|
const database = (0, types_1.deriveDatabase)(userChoices.databaseType, userChoices.orm);
|
|
47
36
|
const choices = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":";;;;;AAaA,gDAoCC;AAGD,oCAiCC;AArFD,4CAAyE;AACzE,sDAA8B;AAE9B,oCAKkB;AAClB,8CAAoD;AACpD,mCAA8C;AAE9C,8CAA8C;AACvC,KAAK,UAAU,kBAAkB;IACtC,MAAM,WAAW,GAAG,MAAM,IAAA,cAAI,EAAC;QAC7B,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gCAAmB,EAAC,KAAK,IAAI,EAAE,CAAC;KACtD,CAAC,CAAC;IAEH,IAAI,IAAA,kBAAQ,EAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,IAAA,gBAAM,EAAC,sBAAsB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,IAAA,gBAAM,EAAkB;QACpD,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE,8BAAsB;QAC/B,YAAY,EAAE,SAAS;KACxB,CAAC,CAAC;IAEH,IAAI,IAAA,kBAAQ,EAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,IAAA,gBAAM,EAAC,sBAAsB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAmB,EAAC,eAAe,CAAC,CAAC;IAE/D,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAE3E,MAAM,OAAO,GAAkB;QAC7B,WAAW;QACX,eAAe;QACf,GAAG,WAAW;QACd,QAAQ;KACT,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qEAAqE;AAC9D,KAAK,UAAU,YAAY,CAAC,MAAqB,EAAE,SAAiB;IACzE,iBAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEjC,MAAM,YAAY,GAChB,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAE1E,iBAAO,CAAC,GAAG,CACT,oBAAoB,MAAM,CAAC,WAAW,IAAI;QACxC,oBAAoB,SAAS,IAAI;QACjC,oBAAoB,YAAY,IAAI;QACpC,oBAAoB,MAAM,CAAC,SAAS,IAAI;QACxC,oBAAoB,MAAM,CAAC,QAAQ,IAAI;QACvC,oBAAoB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;QACrD,oBAAoB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;QACvD,oBAAoB,MAAM,CAAC,cAAc,IAAI;QAC7C,oBAAoB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;QACrD,oBAAoB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAC1D,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,iBAAO,EAAC;QACnC,OAAO,EAAE,6BAA6B;QACtC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,IAAA,kBAAQ,EAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,IAAA,gBAAM,EAAC,sBAAsB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAA,gBAAM,EAAC,6BAA6B,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../src/prompts/stack.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EAWf,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,aAAa,CAAC,CAsExB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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.collectStackChoices = collectStackChoices;
|
|
7
|
+
const prompts_1 = require("@clack/prompts");
|
|
8
|
+
const consola_1 = __importDefault(require("consola"));
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
async function collectStackChoices(applicationType) {
|
|
11
|
+
return (0, prompts_1.group)({
|
|
12
|
+
framework: async () => {
|
|
13
|
+
if (applicationType === "fullstack")
|
|
14
|
+
return "nextjs";
|
|
15
|
+
while (true) {
|
|
16
|
+
const selection = await (0, prompts_1.select)({
|
|
17
|
+
message: "Select a backend framework:",
|
|
18
|
+
options: types_1.backendFrameworkOptions,
|
|
19
|
+
initialValue: "express",
|
|
20
|
+
});
|
|
21
|
+
if ((0, prompts_1.isCancel)(selection) || selection !== "nestjs")
|
|
22
|
+
return selection;
|
|
23
|
+
consola_1.default.warn("This framework is coming soon! Please select another option.");
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
databaseType: () => (0, prompts_1.select)({
|
|
27
|
+
message: "Select a database:",
|
|
28
|
+
options: types_1.databaseTypeOptions,
|
|
29
|
+
initialValue: "none",
|
|
30
|
+
}),
|
|
31
|
+
orm: async ({ results }) => {
|
|
32
|
+
if (results.databaseType === "none")
|
|
33
|
+
return "none";
|
|
34
|
+
const options = results.databaseType === "mongodb"
|
|
35
|
+
? types_1.mongodbOrmOptions
|
|
36
|
+
: types_1.postgresqlOrmOptions;
|
|
37
|
+
return (0, prompts_1.select)({
|
|
38
|
+
message: `Select an ORM for ${results.databaseType}:`,
|
|
39
|
+
options,
|
|
40
|
+
initialValue: options[0].value,
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
packageManager: () => (0, prompts_1.select)({
|
|
44
|
+
message: "Select a package manager:",
|
|
45
|
+
options: types_1.packageManagerOptions,
|
|
46
|
+
initialValue: "npm",
|
|
47
|
+
}),
|
|
48
|
+
useDocker: () => (0, prompts_1.confirm)({ message: "Use Docker?", initialValue: false }),
|
|
49
|
+
useAuth: async ({ results }) => {
|
|
50
|
+
if (applicationType === "fullstack" && results.databaseType === "none")
|
|
51
|
+
return false;
|
|
52
|
+
return (0, prompts_1.select)({
|
|
53
|
+
message: applicationType === "fullstack"
|
|
54
|
+
? "Add Better Auth?"
|
|
55
|
+
: "Add authentication?",
|
|
56
|
+
options: types_1.authOptions,
|
|
57
|
+
initialValue: false,
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
initGit: () => (0, prompts_1.confirm)({
|
|
61
|
+
message: "Initialize a git repository?",
|
|
62
|
+
initialValue: true,
|
|
63
|
+
}),
|
|
64
|
+
installDeps: () => (0, prompts_1.confirm)({ message: "Install dependencies now?", initialValue: false }),
|
|
65
|
+
}, {
|
|
66
|
+
onCancel: () => {
|
|
67
|
+
(0, prompts_1.cancel)("Operation cancelled.");
|
|
68
|
+
process.exit(0);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.js","sourceRoot":"","sources":["../../src/prompts/stack.ts"],"names":[],"mappings":";;;;;AAkBA,kDAwEC;AA1FD,4CAA0E;AAC1E,sDAA8B;AAE9B,oCAakB;AAEX,KAAK,UAAU,mBAAmB,CACvC,eAAgC;IAEhC,OAAO,IAAA,eAAK,EACV;QACE,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,IAAI,eAAe,KAAK,WAAW;gBAAE,OAAO,QAAiB,CAAC;YAE9D,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,SAAS,GAAG,MAAM,IAAA,gBAAM,EAAmB;oBAC/C,OAAO,EAAE,6BAA6B;oBACtC,OAAO,EAAE,+BAAuB;oBAChC,YAAY,EAAE,SAAS;iBACxB,CAAC,CAAC;gBACH,IAAI,IAAA,kBAAQ,EAAC,SAAS,CAAC,IAAI,SAAS,KAAK,QAAQ;oBAAE,OAAO,SAAS,CAAC;gBACpE,iBAAO,CAAC,IAAI,CACV,8DAA8D,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CACjB,IAAA,gBAAM,EAAe;YACnB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,2BAAmB;YAC5B,YAAY,EAAE,MAAM;SACrB,CAAC;QACJ,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAA+B,EAAE;YACtD,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM;gBAAE,OAAO,MAAe,CAAC;YAC5D,MAAM,OAAO,GACX,OAAO,CAAC,YAAY,KAAK,SAAS;gBAChC,CAAC,CAAC,yBAAiB;gBACnB,CAAC,CAAC,4BAAoB,CAAC;YAC3B,OAAO,IAAA,gBAAM,EAAY;gBACvB,OAAO,EAAE,qBAAqB,OAAO,CAAC,YAAY,GAAG;gBACrD,OAAO;gBACP,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CACnB,IAAA,gBAAM,EAAiB;YACrB,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE,6BAAqB;YAC9B,YAAY,EAAE,KAAK;SACpB,CAAC;QACJ,SAAS,EAAE,GAAG,EAAE,CAAC,IAAA,iBAAO,EAAC,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACzE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAA6B,EAAE;YACxD,IAAI,eAAe,KAAK,WAAW,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM;gBACpE,OAAO,KAAK,CAAC;YACf,OAAO,IAAA,gBAAM,EAAC;gBACZ,OAAO,EACL,eAAe,KAAK,WAAW;oBAC7B,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,qBAAqB;gBAC3B,OAAO,EAAE,mBAAW;gBACpB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CACZ,IAAA,iBAAO,EAAC;YACN,OAAO,EAAE,8BAA8B;YACvC,YAAY,EAAE,IAAI;SACnB,CAAC;QACJ,WAAW,EAAE,GAAG,EAAE,CAChB,IAAA,iBAAO,EAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;KACzE,EACD;QACE,QAAQ,EAAE,GAAG,EAAE;YACb,IAAA,gBAAM,EAAC,sBAAsB,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -27,8 +27,6 @@ export interface ProjectConfig {
|
|
|
27
27
|
* This is essentially ProjectConfig without the derived/initial fields.
|
|
28
28
|
*/
|
|
29
29
|
export type PromptChoices = Omit<ProjectConfig, "projectName" | "applicationType" | "database">;
|
|
30
|
-
/** Type guard to validate OrmOption values */
|
|
31
|
-
export declare function isValidOrmOption(value: unknown): value is OrmOption;
|
|
32
30
|
/**
|
|
33
31
|
* Derives the database option from database type and ORM selection.
|
|
34
32
|
* Returns "none" if either is "none", otherwise returns the ORM which
|
|
@@ -42,6 +40,7 @@ export interface ModuleConfig {
|
|
|
42
40
|
type: ModuleType;
|
|
43
41
|
dependencies: Dependencies;
|
|
44
42
|
devDependencies: Dependencies;
|
|
43
|
+
overrides: Dependencies;
|
|
45
44
|
scripts: Record<string, string>;
|
|
46
45
|
envVars: Record<string, string>;
|
|
47
46
|
templateFiles: string[];
|
|
@@ -53,6 +52,7 @@ export interface Module {
|
|
|
53
52
|
export interface MergedConfig {
|
|
54
53
|
dependencies: Dependencies;
|
|
55
54
|
devDependencies: Dependencies;
|
|
55
|
+
overrides: Dependencies;
|
|
56
56
|
scripts: Record<string, string>;
|
|
57
57
|
envVars: Record<string, string>;
|
|
58
58
|
}
|
|
@@ -110,13 +110,10 @@ export declare const databaseTypeOptions: ({
|
|
|
110
110
|
value: "postgresql";
|
|
111
111
|
label: string;
|
|
112
112
|
})[];
|
|
113
|
-
export declare const mongodbOrmOptions:
|
|
114
|
-
value: "prisma";
|
|
115
|
-
label: string;
|
|
116
|
-
} | {
|
|
113
|
+
export declare const mongodbOrmOptions: {
|
|
117
114
|
value: "mongoose";
|
|
118
115
|
label: string;
|
|
119
|
-
}
|
|
116
|
+
}[];
|
|
120
117
|
export declare const postgresqlOrmOptions: ({
|
|
121
118
|
value: "prisma";
|
|
122
119
|
label: string;
|