@idealyst/cli 1.0.30 → 1.0.32

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.
@@ -0,0 +1,493 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { spawn } from 'child_process';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import validatePackageName from 'validate-npm-package-name';
7
+ import inquirer from 'inquirer';
8
+ export function validateProjectName(name) {
9
+ const validation = validatePackageName(name);
10
+ return validation.validForNewPackages;
11
+ }
12
+ export function createPackageName(name) {
13
+ return name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
14
+ }
15
+ export async function updateWorkspacePackageJson(workspacePath, directory) {
16
+ // Look for package.json in the directory to see if we're in a workspace
17
+ const packageJsonPath = path.join(directory, 'package.json');
18
+ if (await fs.pathExists(packageJsonPath)) {
19
+ try {
20
+ const packageJson = await fs.readJSON(packageJsonPath);
21
+ // Check if this is a workspace (has workspaces property)
22
+ if (packageJson.workspaces && Array.isArray(packageJson.workspaces)) {
23
+ // Check if workspace already covers this path with a wildcard
24
+ const workspaceDir = path.dirname(workspacePath);
25
+ const wildcardPattern = `${workspaceDir}/*`;
26
+ const isAlreadyCovered = packageJson.workspaces.some((ws) => ws === wildcardPattern || ws === workspacePath);
27
+ // Add the new project to workspaces if not already present or covered
28
+ if (!isAlreadyCovered) {
29
+ packageJson.workspaces.push(workspacePath);
30
+ await fs.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
31
+ console.log(chalk.green(`✅ Added ${workspacePath} to workspace configuration`));
32
+ }
33
+ else {
34
+ console.log(chalk.blue(`📦 Project ${workspacePath} already covered by existing workspace configuration`));
35
+ }
36
+ }
37
+ }
38
+ catch (error) {
39
+ // Silently ignore if we can't read/write package.json
40
+ console.log(chalk.yellow(`⚠️ Could not update workspace configuration: ${error instanceof Error ? error.message : 'Unknown error'}`));
41
+ }
42
+ }
43
+ }
44
+ export async function copyTemplate(templatePath, destPath, data) {
45
+ const spinner = ora(`Copying template files...`).start();
46
+ try {
47
+ await fs.ensureDir(destPath);
48
+ await fs.copy(templatePath, destPath, {
49
+ filter: (src) => {
50
+ const relativePath = path.relative(templatePath, src);
51
+ // Skip App-with-trpc.tsx as it's only copied when tRPC is enabled
52
+ return !relativePath.includes('node_modules') &&
53
+ !relativePath.includes('.git') &&
54
+ !relativePath.endsWith('App-with-trpc.tsx');
55
+ }
56
+ });
57
+ // Process template files
58
+ await processTemplateFiles(destPath, data);
59
+ spinner.succeed('Template files copied successfully');
60
+ }
61
+ catch (error) {
62
+ spinner.fail('Failed to copy template files');
63
+ throw error;
64
+ }
65
+ }
66
+ export async function processTemplateFiles(dir, data) {
67
+ const files = await fs.readdir(dir);
68
+ for (const file of files) {
69
+ const filePath = path.join(dir, file);
70
+ const stat = await fs.stat(filePath);
71
+ if (stat.isDirectory()) {
72
+ await processTemplateFiles(filePath, data);
73
+ }
74
+ else if (file.endsWith('.json') || file.endsWith('.js') || file.endsWith('.ts') || file.endsWith('.tsx') || file.endsWith('.md')) {
75
+ await processTemplateFile(filePath, data);
76
+ }
77
+ }
78
+ }
79
+ export async function processTemplateFile(filePath, data) {
80
+ try {
81
+ let content = await fs.readFile(filePath, 'utf8');
82
+ // Replace template variables
83
+ content = content.replace(/\{\{projectName\}\}/g, data.projectName);
84
+ content = content.replace(/\{\{packageName\}\}/g, data.packageName);
85
+ content = content.replace(/\{\{version\}\}/g, data.version);
86
+ content = content.replace(/\{\{description\}\}/g, data.description);
87
+ // Handle appName (with fallback to projectName if not provided)
88
+ const appName = data.appName || data.projectName;
89
+ content = content.replace(/\{\{appName\}\}/g, appName);
90
+ await fs.writeFile(filePath, content);
91
+ }
92
+ catch (error) {
93
+ // Skip files that can't be processed
94
+ console.warn(chalk.yellow(`Warning: Could not process template file ${filePath}`));
95
+ }
96
+ }
97
+ export async function installDependencies(projectPath, skipInstall = false) {
98
+ if (skipInstall) {
99
+ console.log(chalk.yellow('Skipping dependency installation'));
100
+ return;
101
+ }
102
+ const spinner = ora('Installing dependencies...').start();
103
+ try {
104
+ await runCommand('yarn', ['install'], { cwd: projectPath });
105
+ spinner.succeed('Dependencies installed successfully');
106
+ }
107
+ catch (error) {
108
+ spinner.fail('Failed to install dependencies with yarn');
109
+ console.log(chalk.yellow('You can install dependencies manually by running:'));
110
+ console.log(chalk.white(' cd ' + path.basename(projectPath)));
111
+ console.log(chalk.white(' yarn install'));
112
+ console.log(chalk.white(' # or alternatively:'));
113
+ console.log(chalk.white(' npm install'));
114
+ }
115
+ }
116
+ export function runCommand(command, args, options) {
117
+ return new Promise((resolve, reject) => {
118
+ const timeoutMs = options.timeout || 300000; // 5 minutes default timeout
119
+ const process = spawn(command, args, {
120
+ cwd: options.cwd,
121
+ stdio: ['pipe', 'inherit', 'inherit'], // Pipe stdin to prevent hanging on prompts
122
+ shell: true
123
+ });
124
+ // Set up timeout
125
+ const timeoutId = setTimeout(() => {
126
+ process.kill('SIGTERM');
127
+ reject(new Error(`Command timed out after ${timeoutMs / 1000} seconds`));
128
+ }, timeoutMs);
129
+ // Close stdin immediately to prevent hanging on interactive prompts
130
+ if (process.stdin) {
131
+ process.stdin.end();
132
+ }
133
+ process.on('close', (code) => {
134
+ clearTimeout(timeoutId);
135
+ if (code === 0) {
136
+ resolve();
137
+ }
138
+ else {
139
+ reject(new Error(`Command failed with code ${code}`));
140
+ }
141
+ });
142
+ process.on('error', (error) => {
143
+ clearTimeout(timeoutId);
144
+ reject(error);
145
+ });
146
+ });
147
+ }
148
+ export function getTemplateData(projectName, description, appName, workspaceScope) {
149
+ let packageName = createPackageName(projectName);
150
+ // If we have a workspace scope, prefix the package name with it
151
+ if (workspaceScope) {
152
+ packageName = `@${workspaceScope}/${packageName}`;
153
+ }
154
+ return {
155
+ projectName,
156
+ packageName,
157
+ version: '1.0.0',
158
+ description: description || `A new Idealyst project: ${projectName}`,
159
+ appName
160
+ };
161
+ }
162
+ /**
163
+ * Detects if we're in a workspace root directory
164
+ */
165
+ export async function isWorkspaceRoot(directory) {
166
+ const packageJsonPath = path.join(directory, 'package.json');
167
+ if (await fs.pathExists(packageJsonPath)) {
168
+ try {
169
+ const packageJson = await fs.readJSON(packageJsonPath);
170
+ return !!(packageJson.workspaces && Array.isArray(packageJson.workspaces));
171
+ }
172
+ catch (error) {
173
+ return false;
174
+ }
175
+ }
176
+ return false;
177
+ }
178
+ /**
179
+ * Gets the workspace name from the workspace root's package.json
180
+ */
181
+ export async function getWorkspaceName(directory) {
182
+ const packageJsonPath = path.join(directory, 'package.json');
183
+ if (await fs.pathExists(packageJsonPath)) {
184
+ try {
185
+ const packageJson = await fs.readJSON(packageJsonPath);
186
+ return packageJson.name || null;
187
+ }
188
+ catch (error) {
189
+ return null;
190
+ }
191
+ }
192
+ return null;
193
+ }
194
+ /**
195
+ * Resolves the correct project path for individual projects (native, web, shared).
196
+ * Individual projects can ONLY be created within an existing workspace.
197
+ * This enforces proper monorepo structure and prevents scattered individual projects.
198
+ */
199
+ export async function resolveProjectPath(projectName, directory) {
200
+ // Check if we're in a workspace directory
201
+ const isWorkspace = await isWorkspaceRoot(directory);
202
+ if (!isWorkspace) {
203
+ throw new Error(`Individual projects can only be created within a workspace.\n` +
204
+ `Please first create a workspace with: idealyst init my-workspace\n` +
205
+ `Then navigate to the workspace directory and create your project.`);
206
+ }
207
+ // Get the workspace name to use as scope
208
+ const workspaceScope = await getWorkspaceName(directory);
209
+ // Create project in workspace's packages/ folder
210
+ const packagesDir = path.join(directory, 'packages');
211
+ await fs.ensureDir(packagesDir);
212
+ return {
213
+ projectPath: path.join(packagesDir, projectName),
214
+ workspacePath: `packages/${projectName}`,
215
+ workspaceScope
216
+ };
217
+ }
218
+ export async function initializeReactNativeProject(projectName, directory, displayName, skipInstall) {
219
+ const spinner = ora('Initializing React Native project...').start();
220
+ try {
221
+ // Use create-react-native-app for a more reliable setup
222
+ const cliCommand = 'npx';
223
+ const args = [
224
+ 'react-native@latest',
225
+ 'init',
226
+ projectName,
227
+ '--pm', 'yarn',
228
+ '--skip-git-init'
229
+ ];
230
+ // Add title if displayName is provided
231
+ if (displayName) {
232
+ args.push('--title', displayName);
233
+ }
234
+ // Skip install if requested (we'll handle it separately for workspace integration)
235
+ if (skipInstall) {
236
+ args.push('--skip-install');
237
+ }
238
+ spinner.text = 'Initializing React Native project (this may take a few minutes)...';
239
+ // Run React Native initialization with timeout
240
+ await runCommand(cliCommand, args, {
241
+ cwd: directory,
242
+ timeout: 600000 // 10 minutes timeout for React Native init
243
+ });
244
+ spinner.succeed('React Native project initialized successfully');
245
+ }
246
+ catch (error) {
247
+ spinner.fail('Failed to initialize React Native project');
248
+ if (error instanceof Error && error.message.includes('timed out')) {
249
+ console.log(chalk.red('❌ React Native initialization timed out'));
250
+ console.log(chalk.yellow('This can happen due to:'));
251
+ console.log(chalk.white(' • Slow internet connection'));
252
+ console.log(chalk.white(' • Network issues downloading dependencies'));
253
+ console.log(chalk.white(' • React Native CLI hanging on prompts'));
254
+ }
255
+ console.log(chalk.yellow('\n💡 Alternative approaches:'));
256
+ console.log(chalk.white('1. Try manually creating the project:'));
257
+ console.log(chalk.white(` npx react-native@latest init ${projectName} --pm yarn --skip-git-init`));
258
+ console.log(chalk.white('\n2. Use Expo (faster alternative):'));
259
+ console.log(chalk.white(` npx create-expo-app@latest ${projectName} --template blank-typescript`));
260
+ console.log(chalk.white('\n3. Ensure prerequisites:'));
261
+ console.log(chalk.white(' npm install -g react-native-cli'));
262
+ console.log(chalk.white(' npm install -g @react-native-community/cli'));
263
+ throw error;
264
+ }
265
+ }
266
+ export async function overlayIdealystFiles(templatePath, projectPath, data) {
267
+ const spinner = ora('Applying Idealyst Framework files...').start();
268
+ try {
269
+ // Copy Idealyst-specific files over the React Native project
270
+ await fs.copy(templatePath, projectPath, {
271
+ overwrite: true,
272
+ filter: (src) => {
273
+ const relativePath = path.relative(templatePath, src);
274
+ // Skip package.json as we'll merge it separately
275
+ // Skip App-with-trpc.tsx as it's only copied when tRPC is enabled
276
+ return !relativePath.includes('node_modules') &&
277
+ !relativePath.includes('.git') &&
278
+ !relativePath.endsWith('package.json') &&
279
+ !relativePath.endsWith('App-with-trpc.tsx');
280
+ }
281
+ });
282
+ // Process template files
283
+ await processTemplateFiles(projectPath, data);
284
+ // Merge package.json dependencies
285
+ await mergePackageJsonDependencies(templatePath, projectPath);
286
+ spinner.succeed('Idealyst Framework files applied successfully');
287
+ }
288
+ catch (error) {
289
+ spinner.fail('Failed to apply Idealyst Framework files');
290
+ throw error;
291
+ }
292
+ }
293
+ export async function mergePackageJsonDependencies(templatePath, projectPath) {
294
+ const templatePackageJsonPath = path.join(templatePath, 'package.json');
295
+ const projectPackageJsonPath = path.join(projectPath, 'package.json');
296
+ try {
297
+ // Read both package.json files
298
+ const templatePackageJson = await fs.readJSON(templatePackageJsonPath);
299
+ const projectPackageJson = await fs.readJSON(projectPackageJsonPath);
300
+ // Merge dependencies
301
+ const idealystDependencies = {
302
+ '@idealyst/components': '^1.0.3',
303
+ '@idealyst/navigation': '^1.0.3',
304
+ '@idealyst/theme': '^1.0.3',
305
+ '@react-native-vector-icons/common': '^12.0.1',
306
+ '@react-native-vector-icons/material-design-icons': '^12.0.1',
307
+ '@react-navigation/bottom-tabs': '^7.4.2',
308
+ '@react-navigation/drawer': '^7.5.3',
309
+ '@react-navigation/native': '^7.1.14',
310
+ '@react-navigation/native-stack': '^7.3.21',
311
+ '@tanstack/react-query': '^5.83.0',
312
+ '@trpc/client': '^11.4.3',
313
+ '@trpc/react-query': '^11.4.3',
314
+ '@trpc/server': '^11.4.3',
315
+ 'react-native-edge-to-edge': '^1.6.2',
316
+ 'react-native-gesture-handler': '^2.27.1',
317
+ 'react-native-nitro-modules': '^0.26.3',
318
+ 'react-native-reanimated': '^3.18.0',
319
+ 'react-native-safe-area-context': '^5.5.1',
320
+ 'react-native-screens': '^4.11.1',
321
+ 'react-native-unistyles': '^3.0.4',
322
+ 'react-native-vector-icons': '^10.2.0'
323
+ };
324
+ // Merge the dependencies
325
+ projectPackageJson.dependencies = {
326
+ ...projectPackageJson.dependencies,
327
+ ...idealystDependencies
328
+ };
329
+ // Write back the merged package.json
330
+ await fs.writeJSON(projectPackageJsonPath, projectPackageJson, { spaces: 2 });
331
+ console.log(chalk.green('✅ Merged Idealyst dependencies into package.json'));
332
+ }
333
+ catch (error) {
334
+ console.warn(chalk.yellow('⚠️ Could not merge package.json dependencies'));
335
+ throw error;
336
+ }
337
+ }
338
+ export async function promptForProjectName() {
339
+ const { projectName } = await inquirer.prompt([
340
+ {
341
+ type: 'input',
342
+ name: 'projectName',
343
+ message: 'What is your project name?',
344
+ validate: (input) => {
345
+ if (!input || input.trim().length === 0) {
346
+ return 'Project name is required';
347
+ }
348
+ const lowerName = input.toLowerCase();
349
+ if (!validateProjectName(lowerName)) {
350
+ return 'Project name must be a valid npm package name (lowercase, no spaces)';
351
+ }
352
+ return true;
353
+ },
354
+ filter: (input) => input.toLowerCase().trim()
355
+ }
356
+ ]);
357
+ return projectName;
358
+ }
359
+ export async function promptForProjectType() {
360
+ const { projectType } = await inquirer.prompt([
361
+ {
362
+ type: 'list',
363
+ name: 'projectType',
364
+ message: 'What type of project would you like to create?',
365
+ choices: [
366
+ { name: 'React Native App', value: 'native' },
367
+ { name: 'React Web App', value: 'web' },
368
+ { name: 'Shared Library', value: 'shared' },
369
+ { name: 'API Server (tRPC + Prisma + Zod)', value: 'api' }
370
+ ],
371
+ default: 'native'
372
+ }
373
+ ]);
374
+ return projectType;
375
+ }
376
+ export async function promptForAppName(projectName) {
377
+ const { appName } = await inquirer.prompt([
378
+ {
379
+ type: 'input',
380
+ name: 'appName',
381
+ message: 'What is the display name for your app? (used for native app titles)',
382
+ default: projectName.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' '),
383
+ validate: (input) => {
384
+ if (!input || input.trim().length === 0) {
385
+ return 'App name is required';
386
+ }
387
+ return true;
388
+ },
389
+ filter: (input) => input.trim()
390
+ }
391
+ ]);
392
+ return appName;
393
+ }
394
+ export async function promptForTrpcIntegration() {
395
+ const { withTrpc } = await inquirer.prompt([
396
+ {
397
+ type: 'confirm',
398
+ name: 'withTrpc',
399
+ message: 'Would you like to include tRPC client setup and boilerplate?',
400
+ default: false
401
+ }
402
+ ]);
403
+ return withTrpc;
404
+ }
405
+ export async function copyTrpcFiles(templatePath, projectPath, data) {
406
+ const spinner = ora('Adding tRPC client utilities...').start();
407
+ try {
408
+ const trpcUtilsSource = path.join(templatePath, 'src', 'utils', 'trpc.ts');
409
+ const trpcUtilsTarget = path.join(projectPath, 'src', 'utils', 'trpc.ts');
410
+ // Ensure utils directory exists
411
+ await fs.ensureDir(path.join(projectPath, 'src', 'utils'));
412
+ // Copy and process the tRPC utils file
413
+ await fs.copy(trpcUtilsSource, trpcUtilsTarget);
414
+ await processTemplateFile(trpcUtilsTarget, data);
415
+ spinner.succeed('tRPC client utilities added');
416
+ }
417
+ catch (error) {
418
+ spinner.fail('Failed to add tRPC client utilities');
419
+ console.warn(chalk.yellow('⚠️ tRPC utilities could not be copied, but the project was created successfully'));
420
+ }
421
+ }
422
+ export async function copyTrpcAppComponent(templatePath, projectPath, data) {
423
+ const spinner = ora('Setting up tRPC App component...').start();
424
+ try {
425
+ const trpcAppSource = path.join(templatePath, 'src', 'App-with-trpc.tsx');
426
+ const appTarget = path.join(projectPath, 'src', 'App.tsx');
427
+ // Copy the tRPC-enabled App component over the default one
428
+ await fs.copy(trpcAppSource, appTarget, { overwrite: true });
429
+ await processTemplateFile(appTarget, data);
430
+ spinner.succeed('tRPC App component configured');
431
+ }
432
+ catch (error) {
433
+ spinner.fail('Failed to configure tRPC App component');
434
+ console.warn(chalk.yellow('⚠️ tRPC App component could not be configured, but the project was created successfully'));
435
+ }
436
+ }
437
+ export async function removeTrpcDependencies(projectPath) {
438
+ try {
439
+ const packageJsonPath = path.join(projectPath, 'package.json');
440
+ const packageJson = await fs.readJSON(packageJsonPath);
441
+ // Remove tRPC-related dependencies
442
+ const trpcDeps = [
443
+ '@tanstack/react-query',
444
+ '@trpc/client',
445
+ '@trpc/react-query',
446
+ '@trpc/server'
447
+ ];
448
+ trpcDeps.forEach(dep => {
449
+ if (packageJson.dependencies && packageJson.dependencies[dep]) {
450
+ delete packageJson.dependencies[dep];
451
+ }
452
+ });
453
+ await fs.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
454
+ }
455
+ catch (error) {
456
+ console.warn(chalk.yellow('⚠️ Could not remove tRPC dependencies from package.json'));
457
+ }
458
+ }
459
+ export async function configureAndroidVectorIcons(projectPath) {
460
+ const buildGradlePath = path.join(projectPath, 'android', 'app', 'build.gradle');
461
+ try {
462
+ if (await fs.pathExists(buildGradlePath)) {
463
+ let content = await fs.readFile(buildGradlePath, 'utf8');
464
+ // Check if the vector icons line is already present
465
+ if (content.includes('react-native-vector-icons/fonts.gradle')) {
466
+ console.log(chalk.yellow('Vector icons configuration already exists in build.gradle'));
467
+ return;
468
+ }
469
+ // Find the line with jscFlavor definition and add the vector icons line after it
470
+ const jscFlavorRegex = /def jscFlavor = ['"][^'"]*['"]/;
471
+ const match = content.match(jscFlavorRegex);
472
+ if (match) {
473
+ const insertionPoint = content.indexOf(match[0]) + match[0].length;
474
+ const beforeInsertion = content.substring(0, insertionPoint);
475
+ const afterInsertion = content.substring(insertionPoint);
476
+ const vectorIconsLine = '\napply from: file("../../node_modules/react-native-vector-icons/fonts.gradle")';
477
+ content = beforeInsertion + vectorIconsLine + afterInsertion;
478
+ await fs.writeFile(buildGradlePath, content);
479
+ console.log(chalk.green('✅ Added react-native-vector-icons configuration to Android build.gradle'));
480
+ }
481
+ else {
482
+ console.log(chalk.yellow('⚠️ Could not find jscFlavor line in build.gradle, vector icons configuration not added'));
483
+ }
484
+ }
485
+ else {
486
+ console.log(chalk.yellow('⚠️ Android build.gradle not found, skipping vector icons configuration'));
487
+ }
488
+ }
489
+ catch (error) {
490
+ console.log(chalk.yellow(`⚠️ Could not configure vector icons in build.gradle: ${error instanceof Error ? error.message : 'Unknown error'}`));
491
+ }
492
+ }
493
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/generators/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import chalk from 'chalk';
4
+ import { validateProjectName, copyTemplate, installDependencies, getTemplateData, updateWorkspacePackageJson, resolveProjectPath, copyTrpcFiles, copyTrpcAppComponent, removeTrpcDependencies } from './utils';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ export async function generateWebProject(options) {
8
+ const { name, directory, skipInstall, withTrpc } = options;
9
+ if (!validateProjectName(name)) {
10
+ throw new Error(`Invalid project name: ${name}`);
11
+ }
12
+ console.log(chalk.blue(`🌐 Creating React Web project: ${name}`));
13
+ const { projectPath, workspacePath, workspaceScope } = await resolveProjectPath(name, directory);
14
+ const templatePath = path.join(__dirname, '..', 'templates', 'web');
15
+ const templateData = getTemplateData(name, `React web app built with Idealyst Framework`, undefined, workspaceScope || undefined);
16
+ await copyTemplate(templatePath, projectPath, templateData);
17
+ // Handle tRPC setup
18
+ if (withTrpc) {
19
+ await copyTrpcFiles(templatePath, projectPath, templateData);
20
+ await copyTrpcAppComponent(templatePath, projectPath, templateData);
21
+ }
22
+ else {
23
+ // Remove tRPC dependencies if not requested
24
+ await removeTrpcDependencies(projectPath);
25
+ }
26
+ await installDependencies(projectPath, skipInstall);
27
+ await updateWorkspacePackageJson(workspacePath, directory);
28
+ console.log(chalk.green('✅ React Web project created successfully!'));
29
+ console.log(chalk.blue('📋 Project includes:'));
30
+ console.log(chalk.white(' • React 19.1'));
31
+ console.log(chalk.white(' • Vite build system'));
32
+ console.log(chalk.white(' • Idealyst Components'));
33
+ console.log(chalk.white(' • Idealyst Navigation'));
34
+ console.log(chalk.white(' • Idealyst Theme'));
35
+ console.log(chalk.white(' • TypeScript configuration'));
36
+ console.log(chalk.white(' • React Router'));
37
+ if (withTrpc) {
38
+ console.log(chalk.white(' • tRPC client setup and utilities'));
39
+ console.log(chalk.white(' • React Query integration'));
40
+ console.log(chalk.white(' • Pre-configured tRPC provider'));
41
+ }
42
+ }
43
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/generators/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import chalk from 'chalk';
4
+ import { validateProjectName, copyTemplate, installDependencies, getTemplateData } from './utils';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ export async function generateWorkspace(options) {
8
+ const { name, directory, skipInstall } = options;
9
+ if (!validateProjectName(name)) {
10
+ throw new Error(`Invalid project name: ${name}`);
11
+ }
12
+ console.log(chalk.blue(`🏗️ Creating Idealyst workspace: ${name}`));
13
+ const projectPath = path.join(directory, name);
14
+ const templatePath = path.join(__dirname, '..', 'templates', 'workspace');
15
+ const templateData = getTemplateData(name, `Idealyst Framework monorepo workspace`);
16
+ await copyTemplate(templatePath, projectPath, templateData);
17
+ await installDependencies(projectPath, skipInstall);
18
+ console.log(chalk.green('✅ Workspace created successfully!'));
19
+ console.log(chalk.blue('📋 Workspace includes:'));
20
+ console.log(chalk.white(' • Yarn workspace configuration'));
21
+ console.log(chalk.white(' • Idealyst packages (theme, components, navigation)'));
22
+ console.log(chalk.white(' • TypeScript configuration'));
23
+ console.log(chalk.white(' • Build scripts'));
24
+ console.log(chalk.white(' • Version management scripts'));
25
+ }
26
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/generators/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAElG,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA+B;IACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEjD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAE1E,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;IAEpF,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAC7D,CAAC"}