create-react-forge 1.0.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 +109 -0
- package/dist/assembler/index.d.ts +100 -0
- package/dist/assembler/index.d.ts.map +1 -0
- package/dist/assembler/index.js +198 -0
- package/dist/assembler/index.js.map +1 -0
- package/dist/assembler/merger.d.ts +14 -0
- package/dist/assembler/merger.d.ts.map +1 -0
- package/dist/assembler/merger.js +58 -0
- package/dist/assembler/merger.js.map +1 -0
- package/dist/cli/index.d.ts +57 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +110 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +3 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +50 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/prompts.d.ts +24 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +126 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/config/builder.d.ts +42 -0
- package/dist/config/builder.d.ts.map +1 -0
- package/dist/config/builder.js +113 -0
- package/dist/config/builder.js.map +1 -0
- package/dist/config/defaults.d.ts +51 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +41 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/schema.d.ts +318 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +100 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/dependencies/resolver.d.ts +43 -0
- package/dist/dependencies/resolver.d.ts.map +1 -0
- package/dist/dependencies/resolver.js +117 -0
- package/dist/dependencies/resolver.js.map +1 -0
- package/dist/docs/architecture-generator.d.ts +3 -0
- package/dist/docs/architecture-generator.d.ts.map +1 -0
- package/dist/docs/architecture-generator.js +73 -0
- package/dist/docs/architecture-generator.js.map +1 -0
- package/dist/docs/index.d.ts +2 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +2 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/generator/index.d.ts +41 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +201 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/index.d.ts +2 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +2 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/installer.d.ts +2 -0
- package/dist/lifecycle/installer.d.ts.map +1 -0
- package/dist/lifecycle/installer.js +14 -0
- package/dist/lifecycle/installer.js.map +1 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +5 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +16 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +9 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +41 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +17 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/templates/registry.d.ts +108 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +238 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/templates/utils.d.ts +49 -0
- package/dist/templates/utils.d.ts.map +1 -0
- package/dist/templates/utils.js +103 -0
- package/dist/templates/utils.js.map +1 -0
- package/dist/testing/configurer.d.ts +29 -0
- package/dist/testing/configurer.d.ts.map +1 -0
- package/dist/testing/configurer.js +163 -0
- package/dist/testing/configurer.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function generateArchitectureDoc(config) {
|
|
2
|
+
const { runtime, language, styling, stateManagement, dataFetching, testing } = config;
|
|
3
|
+
return `# Project Architecture
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This project was bootstrapped with \`react-setup\` using:
|
|
8
|
+
|
|
9
|
+
- **Runtime**: ${runtime === 'vite' ? 'Vite (SPA)' : 'Next.js (App Router)'}
|
|
10
|
+
- **Language**: ${language === 'typescript' ? 'TypeScript' : 'JavaScript'}
|
|
11
|
+
- **Styling**: ${styling.solution}
|
|
12
|
+
- **State Management**: ${stateManagement}
|
|
13
|
+
- **Data Fetching**: ${dataFetching.enabled ? dataFetching.library : 'None'}
|
|
14
|
+
- **Testing**: ${testing.enabled ? 'Enabled' : 'Disabled'}
|
|
15
|
+
|
|
16
|
+
## Directory Structure
|
|
17
|
+
|
|
18
|
+
\`\`\`
|
|
19
|
+
src/
|
|
20
|
+
├── components/ # Reusable UI components
|
|
21
|
+
│ └── ui/ # Base UI primitives
|
|
22
|
+
├── features/ # Feature-based modules
|
|
23
|
+
├── hooks/ # Custom React hooks
|
|
24
|
+
${dataFetching.enabled ? '├── lib/ # Third-party library configs\n' : ''}├── providers/ # React context providers
|
|
25
|
+
${stateManagement !== 'none' ? '├── stores/ # State management stores\n' : ''}├── types/ # TypeScript type definitions
|
|
26
|
+
└── utils/ # Utility functions
|
|
27
|
+
\`\`\`
|
|
28
|
+
|
|
29
|
+
## Naming Conventions
|
|
30
|
+
|
|
31
|
+
### Files
|
|
32
|
+
- **Components**: PascalCase (e.g., \`UserProfile.tsx\`)
|
|
33
|
+
- **Hooks**: camelCase with \`use\` prefix (e.g., \`useAuth.ts\`)
|
|
34
|
+
- **Utilities**: camelCase (e.g., \`formatDate.ts\`)
|
|
35
|
+
- **Constants**: SCREAMING_SNAKE_CASE (e.g., \`constants.ts\`)
|
|
36
|
+
|
|
37
|
+
### Code
|
|
38
|
+
- **Components**: PascalCase
|
|
39
|
+
- **Functions**: camelCase
|
|
40
|
+
- **Variables**: camelCase
|
|
41
|
+
- **Constants**: SCREAMING_SNAKE_CASE
|
|
42
|
+
- **Types/Interfaces**: PascalCase
|
|
43
|
+
|
|
44
|
+
## Testing Strategy
|
|
45
|
+
|
|
46
|
+
${testing.enabled ? `
|
|
47
|
+
- **Unit Tests**: ${testing.unit.runner}
|
|
48
|
+
- **Component Tests**: ${testing.component.library}
|
|
49
|
+
${testing.e2e.enabled ? `- **E2E Tests**: ${testing.e2e.runner}` : ''}
|
|
50
|
+
|
|
51
|
+
Run tests:
|
|
52
|
+
\`\`\`bash
|
|
53
|
+
npm run test
|
|
54
|
+
\`\`\`
|
|
55
|
+
` : 'Testing is currently disabled.'}
|
|
56
|
+
|
|
57
|
+
## Data Fetching
|
|
58
|
+
|
|
59
|
+
${dataFetching.enabled ? `
|
|
60
|
+
We use **${dataFetching.library}** for server state management.
|
|
61
|
+
|
|
62
|
+
- **Queries**: Located in \`features/*/api/*.queries.ts\` or \`hooks/queries/*.ts\`
|
|
63
|
+
- **Mutations**: Co-located with queries
|
|
64
|
+
` : 'Standard \`fetch\` or \`axios\` is used for data fetching.'}
|
|
65
|
+
|
|
66
|
+
## State Management
|
|
67
|
+
|
|
68
|
+
${stateManagement !== 'none' ? `
|
|
69
|
+
We use **${stateManagement}** for global client state.
|
|
70
|
+
` : 'Local state (`useState`) is preferred. Global state is managed via Context API if needed.'}
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=architecture-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-generator.js","sourceRoot":"","sources":["../../src/docs/architecture-generator.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,MAAqB;IAC3D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEtF,OAAO;;;;;;iBAMQ,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,sBAAsB;kBACzD,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;iBACxD,OAAO,CAAC,QAAQ;0BACP,eAAe;uBAClB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;iBAC1D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;;;;;;;;;;EAUvD,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,0DAA0D,CAAC,CAAC,CAAC,EAAE;EACtF,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;EAqBxF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACA,OAAO,CAAC,IAAI,CAAC,MAAM;yBACd,OAAO,CAAC,SAAS,CAAC,OAAO;EAChD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;CAMpE,CAAC,CAAC,CAAC,gCAAgC;;;;EAIlC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;WACd,YAAY,CAAC,OAAO;;;;CAI9B,CAAC,CAAC,CAAC,4DAA4D;;;;EAI9D,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC;WACpB,eAAe;CACzB,CAAC,CAAC,CAAC,2FAA2F;CAC9F,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ProjectConfig } from '../config/schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Project generation result
|
|
4
|
+
*/
|
|
5
|
+
export interface GenerationResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
projectPath: string;
|
|
8
|
+
filesWritten: number;
|
|
9
|
+
errors: string[];
|
|
10
|
+
warnings: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Project generator - orchestrates the entire generation flow
|
|
14
|
+
*/
|
|
15
|
+
export declare class ProjectGenerator {
|
|
16
|
+
private config;
|
|
17
|
+
private registry;
|
|
18
|
+
private assembler;
|
|
19
|
+
constructor(config: ProjectConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Generate the project
|
|
22
|
+
*/
|
|
23
|
+
generate(): Promise<GenerationResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Initialize git repository
|
|
26
|
+
*/
|
|
27
|
+
private initializeGit;
|
|
28
|
+
/**
|
|
29
|
+
* Get the install command based on package manager
|
|
30
|
+
*/
|
|
31
|
+
private getInstallCommand;
|
|
32
|
+
/**
|
|
33
|
+
* Get the dev command based on package manager
|
|
34
|
+
*/
|
|
35
|
+
private getDevCommand;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate a project from configuration
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateProject(config: ProjectConfig): Promise<GenerationResult>;
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,SAAS,CAAmB;gBAExB,MAAM,EAAE,aAAa;IAMjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAmG3C;;OAEG;IACH,OAAO,CAAC,aAAa;IA+DrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,aAAa;CAQtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGtF"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { ProjectAssembler } from '../assembler/index.js';
|
|
6
|
+
import { TemplateRegistry } from '../templates/registry.js';
|
|
7
|
+
import { generateArchitectureDoc } from '../docs/architecture-generator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Project generator - orchestrates the entire generation flow
|
|
10
|
+
*/
|
|
11
|
+
export class ProjectGenerator {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.registry = new TemplateRegistry();
|
|
15
|
+
this.assembler = new ProjectAssembler(config.path, config);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate the project
|
|
19
|
+
*/
|
|
20
|
+
async generate() {
|
|
21
|
+
const result = {
|
|
22
|
+
success: false,
|
|
23
|
+
projectPath: this.config.path,
|
|
24
|
+
filesWritten: 0,
|
|
25
|
+
errors: [],
|
|
26
|
+
warnings: [],
|
|
27
|
+
};
|
|
28
|
+
const spinner = ora();
|
|
29
|
+
try {
|
|
30
|
+
// Step 1: Check if directory already exists
|
|
31
|
+
if (existsSync(this.config.path)) {
|
|
32
|
+
result.errors.push(`Directory already exists: ${this.config.path}`);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
// Step 2: Load templates
|
|
36
|
+
spinner.start('Loading templates...');
|
|
37
|
+
const templates = this.registry.loadTemplatesForConfig({
|
|
38
|
+
runtime: this.config.runtime,
|
|
39
|
+
styling: this.config.styling,
|
|
40
|
+
stateManagement: this.config.stateManagement,
|
|
41
|
+
testing: {
|
|
42
|
+
enabled: this.config.testing.enabled,
|
|
43
|
+
unit: this.config.testing.unit,
|
|
44
|
+
e2e: this.config.testing.e2e,
|
|
45
|
+
},
|
|
46
|
+
dataFetching: this.config.dataFetching,
|
|
47
|
+
});
|
|
48
|
+
spinner.succeed(`Loaded ${templates.length} templates`);
|
|
49
|
+
// Step 3: Merge all template files
|
|
50
|
+
spinner.start('Assembling project files...');
|
|
51
|
+
const mergedFiles = this.registry.getMergedFiles();
|
|
52
|
+
this.assembler.addFiles(mergedFiles);
|
|
53
|
+
// Add Architecture Documentation
|
|
54
|
+
const archDoc = generateArchitectureDoc(this.config);
|
|
55
|
+
this.assembler.addFile('ARCHITECTURE.md', archDoc);
|
|
56
|
+
// Step 4: Merge dependencies
|
|
57
|
+
const { dependencies, devDependencies, scripts } = this.registry.getMergedDependencies();
|
|
58
|
+
this.assembler.mergeTemplateDeps({ dependencies, devDependencies, scripts });
|
|
59
|
+
// Add TypeScript if configured
|
|
60
|
+
if (this.config.language === 'typescript') {
|
|
61
|
+
this.assembler.addDevDependencies({
|
|
62
|
+
'typescript': '^5.3.0',
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
spinner.succeed(`Assembled ${mergedFiles.size} files`);
|
|
66
|
+
// Step 5: Write files to disk
|
|
67
|
+
spinner.start('Writing files...');
|
|
68
|
+
const writeResult = this.assembler.writeFiles();
|
|
69
|
+
result.filesWritten = writeResult.filesWritten;
|
|
70
|
+
if (writeResult.errors.length > 0) {
|
|
71
|
+
result.errors.push(...writeResult.errors);
|
|
72
|
+
spinner.warn(`Written ${writeResult.filesWritten} files with ${writeResult.errors.length} errors`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
spinner.succeed(`Written ${writeResult.filesWritten} files`);
|
|
76
|
+
}
|
|
77
|
+
// Step 6: Initialize git if configured
|
|
78
|
+
if (this.config.git.init) {
|
|
79
|
+
spinner.start('Initializing git repository...');
|
|
80
|
+
try {
|
|
81
|
+
this.initializeGit();
|
|
82
|
+
spinner.succeed('Git repository initialized');
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
result.warnings.push(`Git initialization failed: ${error}`);
|
|
86
|
+
spinner.warn('Git initialization failed');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Step 7: Install dependencies if user confirms
|
|
90
|
+
// (We'll skip automatic installation for now and let user do it)
|
|
91
|
+
console.log();
|
|
92
|
+
console.log(chalk.green('✓ Project created successfully!'));
|
|
93
|
+
console.log();
|
|
94
|
+
console.log(chalk.cyan('Next steps:'));
|
|
95
|
+
console.log(chalk.gray(` cd ${this.config.name}`));
|
|
96
|
+
console.log(chalk.gray(` ${this.getInstallCommand()}`));
|
|
97
|
+
console.log(chalk.gray(` ${this.getDevCommand()}`));
|
|
98
|
+
console.log();
|
|
99
|
+
result.success = result.errors.length === 0;
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
spinner.fail('Generation failed');
|
|
104
|
+
result.errors.push(`Generation error: ${error}`);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Initialize git repository
|
|
110
|
+
*/
|
|
111
|
+
initializeGit() {
|
|
112
|
+
execSync('git init', {
|
|
113
|
+
cwd: this.config.path,
|
|
114
|
+
stdio: 'ignore',
|
|
115
|
+
});
|
|
116
|
+
// Create .gitignore if it doesn't exist
|
|
117
|
+
const gitignoreContent = `# Dependencies
|
|
118
|
+
node_modules/
|
|
119
|
+
|
|
120
|
+
# Build output
|
|
121
|
+
dist/
|
|
122
|
+
build/
|
|
123
|
+
.next/
|
|
124
|
+
out/
|
|
125
|
+
|
|
126
|
+
# Environment
|
|
127
|
+
.env
|
|
128
|
+
.env.local
|
|
129
|
+
.env.*.local
|
|
130
|
+
|
|
131
|
+
# IDE
|
|
132
|
+
.idea/
|
|
133
|
+
.vscode/
|
|
134
|
+
*.swp
|
|
135
|
+
*.swo
|
|
136
|
+
|
|
137
|
+
# OS
|
|
138
|
+
.DS_Store
|
|
139
|
+
Thumbs.db
|
|
140
|
+
|
|
141
|
+
# Test coverage
|
|
142
|
+
coverage/
|
|
143
|
+
|
|
144
|
+
# Logs
|
|
145
|
+
*.log
|
|
146
|
+
npm-debug.log*
|
|
147
|
+
yarn-debug.log*
|
|
148
|
+
yarn-error.log*
|
|
149
|
+
|
|
150
|
+
# Playwright
|
|
151
|
+
test-results/
|
|
152
|
+
playwright-report/
|
|
153
|
+
`;
|
|
154
|
+
this.assembler.addFile('.gitignore', gitignoreContent);
|
|
155
|
+
if (this.config.git.initialCommit) {
|
|
156
|
+
try {
|
|
157
|
+
execSync('git add -A', {
|
|
158
|
+
cwd: this.config.path,
|
|
159
|
+
stdio: 'ignore',
|
|
160
|
+
});
|
|
161
|
+
execSync('git commit -m "Initial commit from react-setup"', {
|
|
162
|
+
cwd: this.config.path,
|
|
163
|
+
stdio: 'ignore',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Git commit may fail if git user is not configured
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get the install command based on package manager
|
|
173
|
+
*/
|
|
174
|
+
getInstallCommand() {
|
|
175
|
+
const commands = {
|
|
176
|
+
npm: 'npm install',
|
|
177
|
+
yarn: 'yarn',
|
|
178
|
+
pnpm: 'pnpm install',
|
|
179
|
+
};
|
|
180
|
+
return commands[this.config.packageManager] || 'npm install';
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get the dev command based on package manager
|
|
184
|
+
*/
|
|
185
|
+
getDevCommand() {
|
|
186
|
+
const commands = {
|
|
187
|
+
npm: 'npm run dev',
|
|
188
|
+
yarn: 'yarn dev',
|
|
189
|
+
pnpm: 'pnpm dev',
|
|
190
|
+
};
|
|
191
|
+
return commands[this.config.packageManager] || 'npm run dev';
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Generate a project from configuration
|
|
196
|
+
*/
|
|
197
|
+
export async function generateProject(config) {
|
|
198
|
+
const generator = new ProjectGenerator(config);
|
|
199
|
+
return generator.generate();
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/lifecycle/installer.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
export async function installDependencies(cwd, pm) {
|
|
4
|
+
const spinner = ora(`Installing dependencies with ${pm}...`).start();
|
|
5
|
+
try {
|
|
6
|
+
await execa(pm, ['install'], { cwd });
|
|
7
|
+
spinner.succeed('Dependencies installed');
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
spinner.fail('Failed to install dependencies');
|
|
11
|
+
throw error;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/lifecycle/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,EAA2B;IAChF,MAAM,OAAO,GAAG,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,YAAY;IACjB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAU1D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { pathToFileURL } from 'url';
|
|
3
|
+
export class PluginLoader {
|
|
4
|
+
async loadPlugin(path) {
|
|
5
|
+
try {
|
|
6
|
+
// dynamic import requires file URL
|
|
7
|
+
const pluginUrl = pathToFileURL(resolve(path)).href;
|
|
8
|
+
const module = await import(pluginUrl);
|
|
9
|
+
return module.default || module;
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
throw new Error(`Failed to load plugin at ${path}: ${error}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProjectConfig } from '../config/schema.js';
|
|
2
|
+
import type { ReactSetupPlugin, PluginContext } from './types.js';
|
|
3
|
+
export declare class PluginManager {
|
|
4
|
+
private plugins;
|
|
5
|
+
register(plugin: ReactSetupPlugin): void;
|
|
6
|
+
runHook(hookName: keyof NonNullable<ReactSetupPlugin['hooks']>, context: PluginContext): Promise<void>;
|
|
7
|
+
runBeforeCreate(config: ProjectConfig): Promise<ProjectConfig>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA0B;IAEzC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IAI3B,OAAO,CACX,QAAQ,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EACtD,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC;IAeV,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;CAgBrE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class PluginManager {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.plugins = [];
|
|
4
|
+
}
|
|
5
|
+
register(plugin) {
|
|
6
|
+
this.plugins.push(plugin);
|
|
7
|
+
}
|
|
8
|
+
async runHook(hookName, context) {
|
|
9
|
+
for (const plugin of this.plugins) {
|
|
10
|
+
const hook = plugin.hooks?.[hookName];
|
|
11
|
+
if (hook) {
|
|
12
|
+
try {
|
|
13
|
+
// Type assertion needed because TypeScript doesn't correlate the hookName with the specific hook signature
|
|
14
|
+
// efficiently in this generic context without more complex types
|
|
15
|
+
await hook(context);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.warn(`Plugin ${plugin.name} failed at hook ${hookName}:`, error);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async runBeforeCreate(config) {
|
|
24
|
+
let currentConfig = { ...config };
|
|
25
|
+
for (const plugin of this.plugins) {
|
|
26
|
+
if (plugin.hooks?.beforeCreate) {
|
|
27
|
+
try {
|
|
28
|
+
const result = await plugin.hooks.beforeCreate(currentConfig);
|
|
29
|
+
if (result) {
|
|
30
|
+
currentConfig = result;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.warn(`Plugin ${plugin.name} failed at hook beforeCreate:`, error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return currentConfig;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IAA1B;QACU,YAAO,GAAuB,EAAE,CAAC;IAwC3C,CAAC;IAtCC,QAAQ,CAAC,MAAwB;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,QAAsD,EACtD,OAAsB;QAEtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC;oBACH,2GAA2G;oBAC3G,iEAAiE;oBACjE,MAAO,IAAiB,CAAC,OAAO,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,mBAAmB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAqB;QACzC,IAAI,aAAa,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC9D,IAAI,MAAM,EAAE,CAAC;wBACX,aAAa,GAAG,MAAM,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ProjectAssembler } from '../assembler/index.js';
|
|
2
|
+
import type { ProjectConfig } from '../config/schema.js';
|
|
3
|
+
export interface PluginContext {
|
|
4
|
+
config: ProjectConfig;
|
|
5
|
+
assembler?: ProjectAssembler;
|
|
6
|
+
}
|
|
7
|
+
export interface ReactSetupPlugin {
|
|
8
|
+
name: string;
|
|
9
|
+
version: string;
|
|
10
|
+
hooks?: {
|
|
11
|
+
beforeCreate?: (config: ProjectConfig) => Promise<ProjectConfig | void>;
|
|
12
|
+
afterTemplateApply?: (context: PluginContext) => Promise<void>;
|
|
13
|
+
beforeInstall?: (context: PluginContext) => Promise<void>;
|
|
14
|
+
afterInstall?: (context: PluginContext) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;QACxE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":""}
|