better-ts-stack 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.
- package/README.md +83 -0
- package/dist/builder/configGenerator.d.ts +6 -0
- package/dist/builder/configGenerator.d.ts.map +1 -0
- package/dist/builder/configGenerator.js +110 -0
- package/dist/builder/configGenerator.js.map +1 -0
- package/dist/builder/dependencyInstaller.d.ts +3 -0
- package/dist/builder/dependencyInstaller.d.ts.map +1 -0
- package/dist/builder/dependencyInstaller.js +39 -0
- package/dist/builder/dependencyInstaller.js.map +1 -0
- package/dist/builder/fileProcessor.d.ts +6 -0
- package/dist/builder/fileProcessor.d.ts.map +1 -0
- package/dist/builder/fileProcessor.js +108 -0
- package/dist/builder/fileProcessor.js.map +1 -0
- package/dist/builder/gitInitializer.d.ts +2 -0
- package/dist/builder/gitInitializer.d.ts.map +1 -0
- package/dist/builder/gitInitializer.js +52 -0
- package/dist/builder/gitInitializer.js.map +1 -0
- package/dist/builder/index.d.ts +3 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +126 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/moduleSelector.d.ts +9 -0
- package/dist/builder/moduleSelector.d.ts.map +1 -0
- package/dist/builder/moduleSelector.js +29 -0
- package/dist/builder/moduleSelector.js.map +1 -0
- package/dist/builder/templateContext.d.ts +21 -0
- package/dist/builder/templateContext.d.ts.map +1 -0
- package/dist/builder/templateContext.js +47 -0
- package/dist/builder/templateContext.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/intro.d.ts +2 -0
- package/dist/intro.d.ts.map +1 -0
- package/dist/intro.js +27 -0
- package/dist/intro.js.map +1 -0
- package/dist/modules/registry.d.ts +6 -0
- package/dist/modules/registry.d.ts.map +1 -0
- package/dist/modules/registry.js +64 -0
- package/dist/modules/registry.js.map +1 -0
- package/dist/output/nextSteps.d.ts +4 -0
- package/dist/output/nextSteps.d.ts.map +1 -0
- package/dist/output/nextSteps.js +87 -0
- package/dist/output/nextSteps.js.map +1 -0
- package/dist/prompts/backend/index.d.ts +3 -0
- package/dist/prompts/backend/index.d.ts.map +1 -0
- package/dist/prompts/backend/index.js +128 -0
- package/dist/prompts/backend/index.js.map +1 -0
- package/dist/prompts/frontend/index.d.ts +3 -0
- package/dist/prompts/frontend/index.d.ts.map +1 -0
- package/dist/prompts/frontend/index.js +111 -0
- package/dist/prompts/frontend/index.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +82 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/types/index.d.ts +157 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +81 -0
- package/dist/types/index.js.map +1 -0
- package/dist/validators/index.d.ts +5 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +73 -0
- package/dist/validators/index.js.map +1 -0
- package/package.json +66 -0
- package/templates/backend/express/.eslintrc.js +24 -0
- package/templates/backend/express/.prettierignore +52 -0
- package/templates/backend/express/.prettierrc +16 -0
- package/templates/backend/express/config.json +42 -0
- package/templates/backend/express/eslint.config.mjs +31 -0
- package/templates/backend/express/gitignore +39 -0
- package/templates/backend/express/src/index.ts +46 -0
- package/templates/backend/express/src/routes/health.ts +12 -0
- package/templates/backend/express/tsconfig.eslint.json +9 -0
- package/templates/backend/express/tsconfig.json +23 -0
- package/templates/frontend/nextjs/app/globals.css +99 -0
- package/templates/frontend/nextjs/app/layout.tsx +34 -0
- package/templates/frontend/nextjs/app/page.tsx.hbs +98 -0
- package/templates/frontend/nextjs/components/ui/button.tsx +51 -0
- package/templates/frontend/nextjs/components/ui/card.tsx +60 -0
- package/templates/frontend/nextjs/components/ui/field.tsx +67 -0
- package/templates/frontend/nextjs/components/ui/input.tsx +18 -0
- package/templates/frontend/nextjs/components.json +19 -0
- package/templates/frontend/nextjs/config.json +33 -0
- package/templates/frontend/nextjs/eslint.config.mjs +11 -0
- package/templates/frontend/nextjs/gitignore +41 -0
- package/templates/frontend/nextjs/lib/utils.ts +6 -0
- package/templates/frontend/nextjs/next.config.ts +8 -0
- package/templates/frontend/nextjs/postcss.config.mjs +7 -0
- package/templates/frontend/nextjs/proxy.ts.hbs +23 -0
- package/templates/frontend/nextjs/public/file.svg +1 -0
- package/templates/frontend/nextjs/public/globe.svg +1 -0
- package/templates/frontend/nextjs/public/next.svg +1 -0
- package/templates/frontend/nextjs/public/vercel.svg +1 -0
- package/templates/frontend/nextjs/public/window.svg +1 -0
- package/templates/frontend/nextjs/tsconfig.json +21 -0
- package/templates/modules/auth/express/config.json +1 -0
- package/templates/modules/auth/express/src/controllers/authController.ts.hbs +81 -0
- package/templates/modules/auth/express/src/lib/jwt.ts.hbs +27 -0
- package/templates/modules/auth/express/src/middleware/requireAuth.ts.hbs +26 -0
- package/templates/modules/auth/express/src/routes/auth.ts.hbs +19 -0
- package/templates/modules/auth/express/src/services/userStore.ts.hbs +107 -0
- package/templates/modules/auth/nextjs/app/api/auth/[...all]/route.ts +4 -0
- package/templates/modules/auth/nextjs/app/dashboard/page.tsx +96 -0
- package/templates/modules/auth/nextjs/app/sign-in/page.tsx +35 -0
- package/templates/modules/auth/nextjs/app/sign-up/page.tsx +35 -0
- package/templates/modules/auth/nextjs/components/auth/sign-in-form.tsx +132 -0
- package/templates/modules/auth/nextjs/components/auth/sign-out-button.tsx +50 -0
- package/templates/modules/auth/nextjs/components/auth/sign-up-form.tsx +152 -0
- package/templates/modules/auth/nextjs/config.json +31 -0
- package/templates/modules/auth/nextjs/lib/auth-client.ts +3 -0
- package/templates/modules/auth/nextjs/lib/auth-schema.ts +39 -0
- package/templates/modules/auth/nextjs/lib/auth.ts.hbs +35 -0
- package/templates/modules/docker/.dockerignore +13 -0
- package/templates/modules/docker/Dockerfile.hbs +71 -0
- package/templates/modules/docker/config.json +16 -0
- package/templates/modules/docker/docker-compose.yml.hbs +10 -0
- package/templates/modules/drizzle/nextjs/config.json +21 -0
- package/templates/modules/drizzle/nextjs/drizzle.config.ts +13 -0
- package/templates/modules/drizzle/nextjs/lib/db.ts +11 -0
- package/templates/modules/drizzle/nextjs/lib/schema.ts.hbs +84 -0
- package/templates/modules/mongoose/config.json +16 -0
- package/templates/modules/mongoose/src/lib/db.ts +43 -0
- package/templates/modules/mongoose/src/lib/db.ts.hbs +56 -0
- package/templates/modules/mongoose/src/models/User.ts +47 -0
- package/templates/modules/prisma/express/config.json +21 -0
- package/templates/modules/prisma/express/prisma/schema.prisma +23 -0
- package/templates/modules/prisma/express/prisma.config.ts +13 -0
- package/templates/modules/prisma/express/src/lib/prisma.ts +37 -0
- package/templates/modules/prisma/nextjs/config.json +23 -0
- package/templates/modules/prisma/nextjs/lib/prisma.ts +18 -0
- package/templates/modules/prisma/nextjs/prisma/schema.prisma.hbs +90 -0
- package/templates/modules/prisma/nextjs/prisma.config.ts +12 -0
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# better-ts-stack
|
|
2
|
+
|
|
3
|
+
> Generate production-ready TypeScript apps from an interactive CLI
|
|
4
|
+
|
|
5
|
+
`better-ts-stack` scaffolds backend and full-stack TypeScript projects with sensible defaults, batteries-included tooling, and optional database, auth, Docker, and git setup.
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Run instantly with npx
|
|
11
|
+
npx better-ts-stack
|
|
12
|
+
|
|
13
|
+
# Or install globally
|
|
14
|
+
npm install -g better-ts-stack
|
|
15
|
+
better-ts-stack
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Run the command, answer the prompts, and the CLI generates a ready-to-work project for you.
|
|
19
|
+
|
|
20
|
+
## What It Can Scaffold
|
|
21
|
+
|
|
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
|
+
|
|
27
|
+
Notes:
|
|
28
|
+
|
|
29
|
+
- Express is the current backend implementation.
|
|
30
|
+
- NestJS appears in the prompt flow as "Coming Soon".
|
|
31
|
+
- Better Auth is only available for full-stack projects when a database is selected.
|
|
32
|
+
|
|
33
|
+
## Interactive Prompt Flow
|
|
34
|
+
|
|
35
|
+
The CLI is fully interactive. There are no subcommands or flags.
|
|
36
|
+
|
|
37
|
+
You will be guided through:
|
|
38
|
+
|
|
39
|
+
1. Project name
|
|
40
|
+
2. Application type: `Backend API` or `Full-stack App`
|
|
41
|
+
3. Backend framework for backend apps: `Express` (`NestJS` is coming soon)
|
|
42
|
+
4. Database: `none`, `PostgreSQL`, or `MongoDB`
|
|
43
|
+
5. ORM/ODM when a database is selected
|
|
44
|
+
- PostgreSQL: `Prisma` or `Drizzle`
|
|
45
|
+
- MongoDB: `Prisma` or `Mongoose`
|
|
46
|
+
6. Package manager: `npm`, `pnpm`, or `bun`
|
|
47
|
+
7. Docker setup
|
|
48
|
+
8. Authentication
|
|
49
|
+
- Express apps: JWT-based auth
|
|
50
|
+
- Next.js apps: Better Auth when a database is enabled
|
|
51
|
+
9. Git initialization
|
|
52
|
+
10. Dependency installation
|
|
53
|
+
|
|
54
|
+
The CLI does not ask for a port. Backend projects default to `PORT=3000`.
|
|
55
|
+
|
|
56
|
+
## What You Get
|
|
57
|
+
|
|
58
|
+
Every generated project includes the essentials:
|
|
59
|
+
|
|
60
|
+
- TypeScript with strict mode enabled
|
|
61
|
+
- ESLint and Prettier pre-configured
|
|
62
|
+
- `.env.example` and `.env` setup
|
|
63
|
+
- Ready-to-run project scripts
|
|
64
|
+
- Health check endpoint at `/health` for backend projects
|
|
65
|
+
- shadcn-compatible UI foundation for Next.js projects
|
|
66
|
+
- Database wiring and schema setup when selected
|
|
67
|
+
- Authentication scaffolding when selected
|
|
68
|
+
- Docker files when selected
|
|
69
|
+
- Optional git repository initialization
|
|
70
|
+
|
|
71
|
+
## Requirements
|
|
72
|
+
|
|
73
|
+
- Node.js 18 or later
|
|
74
|
+
|
|
75
|
+
## Links
|
|
76
|
+
|
|
77
|
+
- [Documentation](https://better-ts-stack.abdullahtech.me/docs)
|
|
78
|
+
- [GitHub Repository](https://github.com/Abdullah-dev0/better-ts-stack)
|
|
79
|
+
- [Issue Tracker](https://github.com/Abdullah-dev0/better-ts-stack/issues)
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MergedConfig, ModuleConfig, ProjectConfig, TemplateContext } from "../types";
|
|
2
|
+
export declare function processScriptVariables(scripts: Record<string, string>, context: TemplateContext): Record<string, string>;
|
|
3
|
+
export declare function mergeConfigurations(modules: ModuleConfig[], context: TemplateContext): MergedConfig;
|
|
4
|
+
export declare function generatePackageJson(targetDir: string, mergedConfig: MergedConfig, config: ProjectConfig): Promise<void>;
|
|
5
|
+
export declare function generateEnvFile(targetDir: string, envVars: Record<string, string>): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=configGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configGenerator.d.ts","sourceRoot":"","sources":["../../src/builder/configGenerator.ts"],"names":[],"mappings":"AAKA,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,CAqBxB;AAGD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,eAAe,GACvB,YAAY,CAkCd;AAGD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAGD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -0,0 +1,110 @@
|
|
|
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.processScriptVariables = processScriptVariables;
|
|
7
|
+
exports.mergeConfigurations = mergeConfigurations;
|
|
8
|
+
exports.generatePackageJson = generatePackageJson;
|
|
9
|
+
exports.generateEnvFile = generateEnvFile;
|
|
10
|
+
// Utilities for merging module configurations and generating project files
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const handlebars_1 = __importDefault(require("handlebars"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const types_1 = require("../types");
|
|
15
|
+
// Replaces Handlebars variables within script command strings
|
|
16
|
+
function processScriptVariables(scripts, context) {
|
|
17
|
+
const helpers = {
|
|
18
|
+
...context.helpers,
|
|
19
|
+
};
|
|
20
|
+
const processedScripts = {};
|
|
21
|
+
for (const [scriptName, scriptCommand] of Object.entries(scripts)) {
|
|
22
|
+
try {
|
|
23
|
+
const template = handlebars_1.default.compile(scriptCommand, { noEscape: true });
|
|
24
|
+
processedScripts[scriptName] = template(context, { helpers });
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
throw (0, types_1.buildError)(error, "TEMPLATE_SCRIPT_ERROR", `Failed to process script "${scriptName}"`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return processedScripts;
|
|
31
|
+
}
|
|
32
|
+
// Merges configurations from multiple modules, processing script variables
|
|
33
|
+
function mergeConfigurations(modules, context) {
|
|
34
|
+
const merged = {
|
|
35
|
+
dependencies: {},
|
|
36
|
+
devDependencies: {},
|
|
37
|
+
scripts: {},
|
|
38
|
+
envVars: {},
|
|
39
|
+
};
|
|
40
|
+
// Merge each module's configuration
|
|
41
|
+
// Later modules override earlier ones
|
|
42
|
+
for (const module of modules) {
|
|
43
|
+
// Merge dependencies
|
|
44
|
+
if (module.dependencies) {
|
|
45
|
+
Object.assign(merged.dependencies, module.dependencies);
|
|
46
|
+
}
|
|
47
|
+
// Merge devDependencies
|
|
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
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return merged;
|
|
62
|
+
}
|
|
63
|
+
// Generates the final package.json file from the merged configuration
|
|
64
|
+
async function generatePackageJson(targetDir, mergedConfig, config) {
|
|
65
|
+
try {
|
|
66
|
+
const isFullstack = config.applicationType === "fullstack";
|
|
67
|
+
const packageJson = {
|
|
68
|
+
name: config.projectName,
|
|
69
|
+
version: "1.0.0",
|
|
70
|
+
description: `Project created with better-ts-stack using ${config.database !== "none" ? config.database : "no database"}`,
|
|
71
|
+
...(isFullstack ? {} : { main: "dist/index.js" }),
|
|
72
|
+
scripts: mergedConfig.scripts,
|
|
73
|
+
keywords: isFullstack
|
|
74
|
+
? ["nextjs", "react", "typescript"]
|
|
75
|
+
: ["backend", "typescript", "express"],
|
|
76
|
+
author: "",
|
|
77
|
+
license: "MIT",
|
|
78
|
+
dependencies: mergedConfig.dependencies,
|
|
79
|
+
devDependencies: mergedConfig.devDependencies,
|
|
80
|
+
};
|
|
81
|
+
const packageJsonPath = path_1.default.join(targetDir, "package.json");
|
|
82
|
+
await fs_extra_1.default.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n", "utf-8");
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw (0, types_1.buildError)(error, "PACKAGE_JSON_ERROR", "Failed to generate package.json");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Generates .env and .env.example files from merged environment variables
|
|
89
|
+
async function generateEnvFile(targetDir, envVars) {
|
|
90
|
+
try {
|
|
91
|
+
// Build .env.example content with comments
|
|
92
|
+
let envContent = "# Environment Variables\n";
|
|
93
|
+
envContent +=
|
|
94
|
+
"# Copy this file to .env and update with your actual values\n\n";
|
|
95
|
+
// Add each environment variable
|
|
96
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
97
|
+
envContent += `${key}=${value}\n`;
|
|
98
|
+
}
|
|
99
|
+
// Write .env.example
|
|
100
|
+
const envExamplePath = path_1.default.join(targetDir, ".env.example");
|
|
101
|
+
await fs_extra_1.default.writeFile(envExamplePath, envContent, "utf-8");
|
|
102
|
+
// Copy .env.example to .env
|
|
103
|
+
const envPath = path_1.default.join(targetDir, ".env");
|
|
104
|
+
await fs_extra_1.default.copy(envExamplePath, envPath);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw (0, types_1.buildError)(error, "ENV_FILE_ERROR", "Failed to generate environment files");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=configGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configGenerator.js","sourceRoot":"","sources":["../../src/builder/configGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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;AAc/C,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAyBT"}
|
|
@@ -0,0 +1,39 @@
|
|
|
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.installDependencies = installDependencies;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
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
|
+
// Installs project dependencies in the target directory
|
|
19
|
+
function installDependencies(packageManager, cwd) {
|
|
20
|
+
const command = getInstallCommand(packageManager);
|
|
21
|
+
consola_1.default.info(`Installing dependencies with ${packageManager}...`);
|
|
22
|
+
consola_1.default.debug(`Running: ${command}`);
|
|
23
|
+
try {
|
|
24
|
+
(0, child_process_1.execSync)(command, {
|
|
25
|
+
cwd,
|
|
26
|
+
stdio: "inherit", // Show installation progress in real-time
|
|
27
|
+
});
|
|
28
|
+
consola_1.default.success("Dependencies installed successfully");
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// Display helpful error message but don't throw - allow building to continue
|
|
33
|
+
consola_1.default.warn("Failed to install dependencies");
|
|
34
|
+
consola_1.default.debug(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
+
consola_1.default.info(`You can install dependencies manually later by running: ${command}`);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dependencyInstaller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyInstaller.js","sourceRoot":"","sources":["../../src/builder/dependencyInstaller.ts"],"names":[],"mappings":";;;;;AAiBA,kDA4BC;AA7CD,iDAAyC;AACzC,sDAA8B;AAI9B,iEAAiE;AACjE,SAAS,iBAAiB,CAAC,cAA8B;IACvD,MAAM,QAAQ,GAAmC;QAC/C,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,aAAa;KACnB,CAAC;IAEF,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC;AAED,wDAAwD;AACxD,SAAgB,mBAAmB,CACjC,cAA8B,EAC9B,GAAW;IAEX,MAAM,OAAO,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAElD,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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateContext } from "../types";
|
|
2
|
+
export declare function copyModuleFiles(moduleDir: string, targetDir: string): Promise<void>;
|
|
3
|
+
export declare function compileTemplate(content: string, context: TemplateContext): string;
|
|
4
|
+
export declare function processTemplateFiles(targetDir: string, context: TemplateContext, templateFiles: string[]): Promise<void>;
|
|
5
|
+
export declare function processTemplateFile(filePath: string, context: TemplateContext): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=fileProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/builder/fileProcessor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,eAAe,EAAE,MAAM,UAAU,CAAC;AA0BvD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAGD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,GACvB,MAAM,CAmBR;AAGD,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAIf;AAGD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -0,0 +1,108 @@
|
|
|
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.copyModuleFiles = copyModuleFiles;
|
|
7
|
+
exports.compileTemplate = compileTemplate;
|
|
8
|
+
exports.processTemplateFiles = processTemplateFiles;
|
|
9
|
+
exports.processTemplateFile = processTemplateFile;
|
|
10
|
+
// Utilities for copying files and processing Handlebars templates
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const handlebars_1 = __importDefault(require("handlebars"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const types_1 = require("../types");
|
|
15
|
+
async function restoreGitignore(targetDir) {
|
|
16
|
+
const templateGitignorePath = path_1.default.join(targetDir, "gitignore");
|
|
17
|
+
const npmIgnorePath = path_1.default.join(targetDir, ".npmignore");
|
|
18
|
+
const gitIgnorePath = path_1.default.join(targetDir, ".gitignore");
|
|
19
|
+
const [hasTemplateGitignore, hasNpmIgnore, hasGitIgnore] = await Promise.all([
|
|
20
|
+
fs_extra_1.default.pathExists(templateGitignorePath),
|
|
21
|
+
fs_extra_1.default.pathExists(npmIgnorePath),
|
|
22
|
+
fs_extra_1.default.pathExists(gitIgnorePath),
|
|
23
|
+
]);
|
|
24
|
+
// Prefer a plain "gitignore" template file because npm packaging preserves
|
|
25
|
+
// it reliably, then fall back to ".npmignore" for already-published builds.
|
|
26
|
+
if (hasTemplateGitignore && !hasGitIgnore) {
|
|
27
|
+
await fs_extra_1.default.move(templateGitignorePath, gitIgnorePath);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (hasNpmIgnore && !hasGitIgnore) {
|
|
31
|
+
await fs_extra_1.default.move(npmIgnorePath, gitIgnorePath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Copies files from a module to the destination, skipping config.json
|
|
35
|
+
async function copyModuleFiles(moduleDir, targetDir) {
|
|
36
|
+
try {
|
|
37
|
+
// Ensure target directory exists
|
|
38
|
+
await fs_extra_1.default.ensureDir(targetDir);
|
|
39
|
+
// Copy all files from module to target
|
|
40
|
+
await fs_extra_1.default.copy(moduleDir, targetDir, {
|
|
41
|
+
overwrite: true,
|
|
42
|
+
filter: (src) => {
|
|
43
|
+
// Skip config.json files
|
|
44
|
+
const basename = path_1.default.basename(src);
|
|
45
|
+
return basename !== "config.json";
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
await restoreGitignore(targetDir);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw (0, types_1.buildError)(error, "FILE_COPY_ERROR", `Failed to copy module files from ${moduleDir}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Compiles and renders template content with Handlebars and provided context
|
|
55
|
+
function compileTemplate(content, context) {
|
|
56
|
+
try {
|
|
57
|
+
// Register helper functions with Handlebars
|
|
58
|
+
Object.entries(context.helpers).forEach(([name, fn]) => {
|
|
59
|
+
handlebars_1.default.registerHelper(name, fn);
|
|
60
|
+
});
|
|
61
|
+
// Compile the template
|
|
62
|
+
const template = handlebars_1.default.compile(content);
|
|
63
|
+
// Render with context
|
|
64
|
+
return template(context);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
throw (0, types_1.buildError)(error, "TEMPLATE_SYNTAX_ERROR", "Failed to compile Handlebars template");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Processes multiple template files by replacing variables and handling extensions
|
|
71
|
+
async function processTemplateFiles(targetDir, context, templateFiles) {
|
|
72
|
+
for (const templateFile of templateFiles) {
|
|
73
|
+
await processTemplateFile(path_1.default.join(targetDir, templateFile), context);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Processes a single template file, replaces variables, and renames/deletes .hbs files
|
|
77
|
+
async function processTemplateFile(filePath, context) {
|
|
78
|
+
try {
|
|
79
|
+
// Check if file exists
|
|
80
|
+
const exists = await fs_extra_1.default.pathExists(filePath);
|
|
81
|
+
if (!exists) {
|
|
82
|
+
return; // Skip if file doesn't exist
|
|
83
|
+
}
|
|
84
|
+
// Read template file
|
|
85
|
+
const content = await fs_extra_1.default.readFile(filePath, "utf-8");
|
|
86
|
+
// Compile and render template with Handlebars
|
|
87
|
+
const rendered = compileTemplate(content, context);
|
|
88
|
+
// Determine output path (remove .hbs extension if present)
|
|
89
|
+
const outputPath = filePath.endsWith(".hbs")
|
|
90
|
+
? filePath.slice(0, -4)
|
|
91
|
+
: filePath;
|
|
92
|
+
// Write processed content
|
|
93
|
+
await fs_extra_1.default.writeFile(outputPath, rendered, "utf-8");
|
|
94
|
+
// Remove original .hbs file if it was renamed
|
|
95
|
+
if (outputPath !== filePath) {
|
|
96
|
+
await fs_extra_1.default.remove(filePath);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
// Re-throw BuildErrors as-is
|
|
101
|
+
if (error && typeof error === "object" && "code" in error) {
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
// Wrap other errors
|
|
105
|
+
throw (0, types_1.buildError)(error, "TEMPLATE_WRITE_ERROR", `Failed to process template file ${filePath}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=fileProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/builder/fileProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitInitializer.d.ts","sourceRoot":"","sources":["../../src/builder/gitInitializer.ts"],"names":[],"mappings":"AAiCA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAkB5D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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.initializeGitRepository = initializeGitRepository;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const consola_1 = __importDefault(require("consola"));
|
|
9
|
+
// Checks if git is installed and available in the system PATH
|
|
10
|
+
function isGitAvailable() {
|
|
11
|
+
try {
|
|
12
|
+
(0, child_process_1.execSync)("git --version", { stdio: "ignore" });
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
consola_1.default.warn("Git is not installed or not available in PATH");
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// Initializes a new git repository in the given directory
|
|
21
|
+
function initGit(cwd) {
|
|
22
|
+
consola_1.default.info("Initializing git repository...");
|
|
23
|
+
try {
|
|
24
|
+
(0, child_process_1.execSync)("git init", {
|
|
25
|
+
cwd,
|
|
26
|
+
stdio: "ignore",
|
|
27
|
+
});
|
|
28
|
+
consola_1.default.success("Git repository initialized");
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
consola_1.default.warn("Failed to initialize git repository");
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Coordinates the git initialization process
|
|
37
|
+
function initializeGitRepository(cwd) {
|
|
38
|
+
// Check if git is available
|
|
39
|
+
if (!isGitAvailable()) {
|
|
40
|
+
consola_1.default.warn("Git is not installed or not available in PATH");
|
|
41
|
+
consola_1.default.info("Skipping git initialization. You can initialize git manually later.");
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
// Initialize git repository
|
|
45
|
+
const gitInitSuccess = initGit(cwd);
|
|
46
|
+
if (!gitInitSuccess) {
|
|
47
|
+
consola_1.default.info("Continuing with building...");
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=gitInitializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitInitializer.js","sourceRoot":"","sources":["../../src/builder/gitInitializer.ts"],"names":[],"mappings":";;;;;AAiCA,0DAkBC;AAnDD,iDAAyC;AACzC,sDAA8B;AAE9B,8DAA8D;AAC9D,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,iBAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,OAAO,CAAC,GAAW;IAC1B,iBAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,UAAU,EAAE;YACnB,GAAG;YACH,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QAEH,iBAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,iBAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,SAAgB,uBAAuB,CAAC,GAAW;IACjD,4BAA4B;IAC5B,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,iBAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,iBAAO,CAAC,IAAI,CACV,qEAAqE,CACtE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4BAA4B;IAC5B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,iBAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +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,CAuJtB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
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.build = build;
|
|
7
|
+
const consola_1 = __importDefault(require("consola"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const registry_1 = require("../modules/registry");
|
|
10
|
+
const nextSteps_1 = require("../output/nextSteps");
|
|
11
|
+
const types_1 = require("../types");
|
|
12
|
+
const validators_1 = require("../validators");
|
|
13
|
+
const configGenerator_1 = require("./configGenerator");
|
|
14
|
+
const dependencyInstaller_1 = require("./dependencyInstaller");
|
|
15
|
+
const fileProcessor_1 = require("./fileProcessor");
|
|
16
|
+
const gitInitializer_1 = require("./gitInitializer");
|
|
17
|
+
const moduleSelector_1 = require("./moduleSelector");
|
|
18
|
+
const templateContext_1 = require("./templateContext");
|
|
19
|
+
// Main function to orchestrate the project construction process
|
|
20
|
+
async function build(config, targetDir) {
|
|
21
|
+
consola_1.default.start("Starting project building...");
|
|
22
|
+
try {
|
|
23
|
+
// 1. Validate target directory
|
|
24
|
+
consola_1.default.info("Validating target directory...");
|
|
25
|
+
const validationResult = await (0, validators_1.validateDirectoryEmpty)(targetDir);
|
|
26
|
+
if (validationResult)
|
|
27
|
+
throw (0, types_1.buildError)(validationResult, "DIRECTORY_NOT_EMPTY");
|
|
28
|
+
// 2. Create target directory
|
|
29
|
+
consola_1.default.info("Creating project directory...");
|
|
30
|
+
await fs_extra_1.default.ensureDir(targetDir).catch((e) => {
|
|
31
|
+
throw (0, types_1.buildError)(e, "DIRECTORY_CREATE_ERROR", "Failed to create directory");
|
|
32
|
+
});
|
|
33
|
+
// 3. Select modules
|
|
34
|
+
consola_1.default.info("Selecting modules...");
|
|
35
|
+
const selection = (0, moduleSelector_1.selectModules)(config);
|
|
36
|
+
// 4. Load modules
|
|
37
|
+
consola_1.default.info("Loading module configurations...");
|
|
38
|
+
const modules = [];
|
|
39
|
+
try {
|
|
40
|
+
const baseModule = await (0, registry_1.getModule)(selection.base);
|
|
41
|
+
modules.push({ ...baseModule, framework: config.framework });
|
|
42
|
+
for (const moduleWithFramework of selection.modules) {
|
|
43
|
+
const module = await (0, registry_1.getModule)(moduleWithFramework.id);
|
|
44
|
+
modules.push({ ...module, framework: moduleWithFramework.framework });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
throw (0, types_1.buildError)(e, "MODULE_LOADING_ERROR", "Failed to load modules");
|
|
49
|
+
}
|
|
50
|
+
consola_1.default.success(`Selected ${modules.length} modules: ${modules.map((m) => m.config.id).join(", ")}`);
|
|
51
|
+
// 5. Build template context
|
|
52
|
+
consola_1.default.info("Building template context...");
|
|
53
|
+
const templateContext = (0, templateContext_1.buildTemplateContext)(config);
|
|
54
|
+
// 6. Merge configurations
|
|
55
|
+
const mergedConfig = (0, configGenerator_1.mergeConfigurations)(modules.map((m) => m.config), templateContext);
|
|
56
|
+
// 7. Copy module files
|
|
57
|
+
consola_1.default.info("Copying module files...");
|
|
58
|
+
try {
|
|
59
|
+
for (const module of modules) {
|
|
60
|
+
consola_1.default.debug(` - Copying ${module.config.id}...`);
|
|
61
|
+
await (0, fileProcessor_1.copyModuleFiles)(module.path, targetDir);
|
|
62
|
+
}
|
|
63
|
+
consola_1.default.success("Module files copied");
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
throw (0, types_1.buildError)(e, "FILE_COPY_ERROR", "Failed to copy module files");
|
|
67
|
+
}
|
|
68
|
+
// 8. Process Handlebars templates
|
|
69
|
+
consola_1.default.info("Processing template files...");
|
|
70
|
+
try {
|
|
71
|
+
const allTemplateFiles = modules.flatMap((m) => m.config.templateFiles || []);
|
|
72
|
+
if (allTemplateFiles.length > 0) {
|
|
73
|
+
await (0, fileProcessor_1.processTemplateFiles)(targetDir, templateContext, allTemplateFiles);
|
|
74
|
+
consola_1.default.success(`Processed ${allTemplateFiles.length} template file(s)`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
consola_1.default.info(" No template files to process");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
throw (0, types_1.buildError)(e, "TEMPLATE_PROCESSING_ERROR", "Failed to process template files");
|
|
82
|
+
}
|
|
83
|
+
// 9. Generate package.json
|
|
84
|
+
consola_1.default.info("Generating package.json...");
|
|
85
|
+
await (0, configGenerator_1.generatePackageJson)(targetDir, mergedConfig, config).catch((e) => {
|
|
86
|
+
throw (0, types_1.buildError)(e, "PACKAGE_JSON_ERROR", "Failed to generate package.json");
|
|
87
|
+
});
|
|
88
|
+
consola_1.default.success("package.json generated");
|
|
89
|
+
// 10. Generate environment files
|
|
90
|
+
consola_1.default.info("Generating environment files...");
|
|
91
|
+
await (0, configGenerator_1.generateEnvFile)(targetDir, mergedConfig.envVars).catch((e) => {
|
|
92
|
+
throw (0, types_1.buildError)(e, "ENV_FILE_ERROR", "Failed to generate environment files");
|
|
93
|
+
});
|
|
94
|
+
consola_1.default.success("Environment files generated");
|
|
95
|
+
// 11. Install dependencies (optional)
|
|
96
|
+
let depsInstalled = false;
|
|
97
|
+
if (config.installDeps) {
|
|
98
|
+
try {
|
|
99
|
+
depsInstalled = (0, dependencyInstaller_1.installDependencies)(config.packageManager, targetDir);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
consola_1.default.warn("Continuing despite dependency installation issues");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// 12. Initialize git (optional)
|
|
106
|
+
if (config.initGit) {
|
|
107
|
+
try {
|
|
108
|
+
(0, gitInitializer_1.initializeGitRepository)(targetDir);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
consola_1.default.warn("Continuing despite git initialization issues");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// 13. Done!
|
|
115
|
+
consola_1.default.success("Project building completed successfully!");
|
|
116
|
+
return {
|
|
117
|
+
success: true,
|
|
118
|
+
projectPath: targetDir,
|
|
119
|
+
nextSteps: (0, nextSteps_1.generateNextSteps)(config, depsInstalled),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
throw (0, types_1.buildError)(error, "BUILDING_ERROR", "Building failed");
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleSelector.d.ts","sourceRoot":"","sources":["../../src/builder/moduleSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa;;;YAWtB,MAAM;mBAAa,MAAM;;EAqBrD"}
|