mycontext-cli 2.0.26 → 2.0.28

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.
Files changed (129) hide show
  1. package/README.md +36 -355
  2. package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
  3. package/dist/agents/implementations/CodeGenSubAgent.js +67 -14
  4. package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
  5. package/dist/agents/implementations/DesignPipelineAgent.d.ts +80 -0
  6. package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -0
  7. package/dist/agents/implementations/DesignPipelineAgent.js +1406 -0
  8. package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -0
  9. package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +67 -0
  10. package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -0
  11. package/dist/agents/implementations/FeatureAssemblyAgent.js +564 -0
  12. package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -0
  13. package/dist/agents/implementations/PromptConstructorAgent.d.ts +10 -0
  14. package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
  15. package/dist/agents/implementations/PromptConstructorAgent.js +172 -12
  16. package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
  17. package/dist/agents/implementations/RoleBasedGenerator.d.ts +52 -0
  18. package/dist/agents/implementations/RoleBasedGenerator.d.ts.map +1 -0
  19. package/dist/agents/implementations/RoleBasedGenerator.js +370 -0
  20. package/dist/agents/implementations/RoleBasedGenerator.js.map +1 -0
  21. package/dist/cli.js +65 -0
  22. package/dist/cli.js.map +1 -1
  23. package/dist/clients/ClaudeSDKClient.d.ts +48 -0
  24. package/dist/clients/ClaudeSDKClient.d.ts.map +1 -0
  25. package/dist/clients/ClaudeSDKClient.js +158 -0
  26. package/dist/clients/ClaudeSDKClient.js.map +1 -0
  27. package/dist/clients/MyContextAIClient.d.ts +73 -0
  28. package/dist/clients/MyContextAIClient.d.ts.map +1 -0
  29. package/dist/clients/MyContextAIClient.js +280 -0
  30. package/dist/clients/MyContextAIClient.js.map +1 -0
  31. package/dist/clients/ProviderChain.d.ts +87 -0
  32. package/dist/clients/ProviderChain.d.ts.map +1 -0
  33. package/dist/clients/ProviderChain.js +246 -0
  34. package/dist/clients/ProviderChain.js.map +1 -0
  35. package/dist/clients/XAIClient.d.ts +48 -0
  36. package/dist/clients/XAIClient.d.ts.map +1 -0
  37. package/dist/clients/XAIClient.js +152 -0
  38. package/dist/clients/XAIClient.js.map +1 -0
  39. package/dist/commands/assemble-features.d.ts +40 -0
  40. package/dist/commands/assemble-features.d.ts.map +1 -0
  41. package/dist/commands/assemble-features.js +383 -0
  42. package/dist/commands/assemble-features.js.map +1 -0
  43. package/dist/commands/clone-starter.d.ts +32 -0
  44. package/dist/commands/clone-starter.d.ts.map +1 -0
  45. package/dist/commands/clone-starter.js +218 -0
  46. package/dist/commands/clone-starter.js.map +1 -0
  47. package/dist/commands/design-analyze.d.ts +46 -0
  48. package/dist/commands/design-analyze.d.ts.map +1 -0
  49. package/dist/commands/design-analyze.js +232 -0
  50. package/dist/commands/design-analyze.js.map +1 -0
  51. package/dist/commands/generate-components.d.ts +1 -0
  52. package/dist/commands/generate-components.d.ts.map +1 -1
  53. package/dist/commands/generate-components.js +42 -9
  54. package/dist/commands/generate-components.js.map +1 -1
  55. package/dist/commands/generate.d.ts.map +1 -1
  56. package/dist/commands/generate.js +34 -1
  57. package/dist/commands/generate.js.map +1 -1
  58. package/dist/commands/setup-complete.d.ts.map +1 -1
  59. package/dist/commands/setup-complete.js +38 -2
  60. package/dist/commands/setup-complete.js.map +1 -1
  61. package/dist/commands/workflow.d.ts.map +1 -1
  62. package/dist/commands/workflow.js +86 -7
  63. package/dist/commands/workflow.js.map +1 -1
  64. package/dist/config/intent-dictionary.json +3700 -0
  65. package/dist/package.json +3 -1
  66. package/dist/services/IntentEnricher.d.ts +61 -0
  67. package/dist/services/IntentEnricher.d.ts.map +1 -0
  68. package/dist/services/IntentEnricher.js +318 -0
  69. package/dist/services/IntentEnricher.js.map +1 -0
  70. package/dist/services/IntentValidator.d.ts +114 -0
  71. package/dist/services/IntentValidator.d.ts.map +1 -0
  72. package/dist/services/IntentValidator.js +680 -0
  73. package/dist/services/IntentValidator.js.map +1 -0
  74. package/dist/types/design-pipeline.d.ts +300 -0
  75. package/dist/types/design-pipeline.d.ts.map +1 -0
  76. package/dist/types/design-pipeline.js +9 -0
  77. package/dist/types/design-pipeline.js.map +1 -0
  78. package/dist/types/feature-bundle.d.ts +239 -0
  79. package/dist/types/feature-bundle.d.ts.map +1 -0
  80. package/dist/types/feature-bundle.js +9 -0
  81. package/dist/types/feature-bundle.js.map +1 -0
  82. package/dist/types/index.d.ts +2 -0
  83. package/dist/types/index.d.ts.map +1 -1
  84. package/dist/types/index.js +2 -0
  85. package/dist/types/index.js.map +1 -1
  86. package/dist/types/intent-dictionary.d.ts +525 -0
  87. package/dist/types/intent-dictionary.d.ts.map +1 -0
  88. package/dist/types/intent-dictionary.js +11 -0
  89. package/dist/types/intent-dictionary.js.map +1 -0
  90. package/dist/types/role-permissions.d.ts +167 -0
  91. package/dist/types/role-permissions.d.ts.map +1 -0
  92. package/dist/types/role-permissions.js +9 -0
  93. package/dist/types/role-permissions.js.map +1 -0
  94. package/dist/utils/contextEnricher.d.ts +41 -0
  95. package/dist/utils/contextEnricher.d.ts.map +1 -0
  96. package/dist/utils/contextEnricher.js +327 -0
  97. package/dist/utils/contextEnricher.js.map +1 -0
  98. package/dist/utils/designFallbacks.d.ts +48 -0
  99. package/dist/utils/designFallbacks.d.ts.map +1 -0
  100. package/dist/utils/designFallbacks.js +885 -0
  101. package/dist/utils/designFallbacks.js.map +1 -0
  102. package/dist/utils/designManifestManager.d.ts +89 -0
  103. package/dist/utils/designManifestManager.d.ts.map +1 -0
  104. package/dist/utils/designManifestManager.js +533 -0
  105. package/dist/utils/designManifestManager.js.map +1 -0
  106. package/dist/utils/designPipelineStateManager.d.ts +63 -0
  107. package/dist/utils/designPipelineStateManager.d.ts.map +1 -0
  108. package/dist/utils/designPipelineStateManager.js +174 -0
  109. package/dist/utils/designPipelineStateManager.js.map +1 -0
  110. package/dist/utils/envExampleGenerator.d.ts.map +1 -1
  111. package/dist/utils/envExampleGenerator.js +35 -171
  112. package/dist/utils/envExampleGenerator.js.map +1 -1
  113. package/dist/utils/featureBundleManager.d.ts +90 -0
  114. package/dist/utils/featureBundleManager.d.ts.map +1 -0
  115. package/dist/utils/featureBundleManager.js +340 -0
  116. package/dist/utils/featureBundleManager.js.map +1 -0
  117. package/dist/utils/githubCloner.d.ts +93 -0
  118. package/dist/utils/githubCloner.d.ts.map +1 -0
  119. package/dist/utils/githubCloner.js +305 -0
  120. package/dist/utils/githubCloner.js.map +1 -0
  121. package/dist/utils/rolePermissionMapper.d.ts +89 -0
  122. package/dist/utils/rolePermissionMapper.d.ts.map +1 -0
  123. package/dist/utils/rolePermissionMapper.js +337 -0
  124. package/dist/utils/rolePermissionMapper.js.map +1 -0
  125. package/dist/utils/unifiedDesignContextLoader.d.ts +76 -0
  126. package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -0
  127. package/dist/utils/unifiedDesignContextLoader.js +344 -0
  128. package/dist/utils/unifiedDesignContextLoader.js.map +1 -0
  129. package/package.json +3 -1
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ /**
3
+ * Assemble Features Command
4
+ *
5
+ * Combines generated components into complete working features
6
+ * with actions, hooks, routes, and role-based permissions.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.AssembleFeaturesCommand = void 0;
46
+ const commander_1 = require("commander");
47
+ const fs = __importStar(require("fs/promises"));
48
+ const path = __importStar(require("path"));
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ const FeatureAssemblyAgent_1 = require("../agents/implementations/FeatureAssemblyAgent");
51
+ const RoleBasedGenerator_1 = require("../agents/implementations/RoleBasedGenerator");
52
+ class AssembleFeaturesCommand {
53
+ constructor() {
54
+ this.command = new commander_1.Command("assemble-features");
55
+ this.setupCommand();
56
+ }
57
+ setupCommand() {
58
+ this.command
59
+ .description("Assemble components into complete working features")
60
+ .option("--from-components", "Assemble from generated components")
61
+ .option("--use-starter", "Use admin starter template")
62
+ .option("--role <role>", "Generate for specific role (admin/user/guest)", "admin")
63
+ .option("--feature <name>", "Generate specific feature")
64
+ .option("--output <path>", "Output directory for features", "./features")
65
+ .option("--template <name>", "Use specific feature template")
66
+ .option("--include-tests", "Include test files")
67
+ .option("--include-docs", "Include documentation")
68
+ .option("--verbose", "Verbose output")
69
+ .action(async (options) => {
70
+ await this.execute(options);
71
+ });
72
+ }
73
+ async execute(options) {
74
+ console.log(chalk_1.default.cyan("šŸ”§ Feature Assembly starting..."));
75
+ try {
76
+ const projectPath = process.cwd();
77
+ const outputPath = path.resolve(options.output || "./features");
78
+ // Ensure output directory exists
79
+ await fs.mkdir(outputPath, { recursive: true });
80
+ if (options.useStarter) {
81
+ await this.assembleFromStarter(projectPath, outputPath, options);
82
+ }
83
+ else if (options.fromComponents) {
84
+ await this.assembleFromComponents(projectPath, outputPath, options);
85
+ }
86
+ else {
87
+ // Auto-detect approach
88
+ const hasComponents = await this.hasGeneratedComponents(projectPath);
89
+ const hasStarter = await this.hasAdminStarter(projectPath);
90
+ if (hasStarter) {
91
+ console.log(chalk_1.default.blue(" šŸ“¦ Using admin starter template"));
92
+ await this.assembleFromStarter(projectPath, outputPath, options);
93
+ }
94
+ else if (hasComponents) {
95
+ console.log(chalk_1.default.blue(" 🧩 Using generated components"));
96
+ await this.assembleFromComponents(projectPath, outputPath, options);
97
+ }
98
+ else {
99
+ throw new Error('No components or starter found. Run "mycontext generate-components" first or use --use-starter');
100
+ }
101
+ }
102
+ console.log(chalk_1.default.green("āœ… Feature assembly completed successfully!"));
103
+ this.showNextSteps(outputPath, options);
104
+ }
105
+ catch (error) {
106
+ console.log(chalk_1.default.red(`āŒ Feature assembly failed: ${error}`));
107
+ process.exit(1);
108
+ }
109
+ }
110
+ async assembleFromStarter(projectPath, outputPath, options) {
111
+ console.log(chalk_1.default.gray(" šŸ“¦ Loading admin starter template..."));
112
+ // Load admin starter bundle
113
+ const starterBundle = await this.loadAdminStarterBundle();
114
+ // Extract features from starter
115
+ const adminFeatures = await this.extractFeaturesFromStarter(starterBundle, projectPath);
116
+ // Generate role-based features
117
+ const roleHierarchy = RoleBasedGenerator_1.RoleBasedGenerator.createDefaultRoleHierarchy();
118
+ const targetRoles = this.getTargetRoles(options.role);
119
+ const roleGenerator = new RoleBasedGenerator_1.RoleBasedGenerator(projectPath);
120
+ const roleContext = {
121
+ projectPath,
122
+ adminFeatures,
123
+ targetRoles,
124
+ roleHierarchy,
125
+ outputPath,
126
+ };
127
+ const roleResult = await roleGenerator.run(roleContext);
128
+ if (!roleResult.success) {
129
+ throw new Error(`Role-based generation failed: ${roleResult.errors.join(", ")}`);
130
+ }
131
+ // Save feature bundles
132
+ await this.saveFeatureBundles(roleResult.roleFeatures, outputPath);
133
+ console.log(chalk_1.default.green(` āœ“ Generated features for ${roleResult.metadata.totalRoles} roles`));
134
+ console.log(chalk_1.default.green(` āœ“ Total features: ${roleResult.metadata.totalFeatures}`));
135
+ }
136
+ async assembleFromComponents(projectPath, outputPath, options) {
137
+ console.log(chalk_1.default.gray(" 🧩 Loading generated components..."));
138
+ // Load components and context files
139
+ const components = await this.loadGeneratedComponents(projectPath);
140
+ const contextFiles = await this.loadContextFiles(projectPath);
141
+ const designManifest = await this.loadDesignManifest(projectPath);
142
+ // Load feature templates
143
+ const featureTemplates = await this.loadFeatureTemplates();
144
+ // Generate features
145
+ const assemblyAgent = new FeatureAssemblyAgent_1.FeatureAssemblyAgent(projectPath);
146
+ const assemblyContext = {
147
+ projectPath,
148
+ components,
149
+ contextFiles,
150
+ designManifest,
151
+ targetRole: options.role || "admin",
152
+ featureTemplates,
153
+ outputPath,
154
+ };
155
+ const result = await assemblyAgent.run(assemblyContext);
156
+ if (!result.success) {
157
+ throw new Error(`Feature assembly failed: ${result.errors.join(", ")}`);
158
+ }
159
+ console.log(chalk_1.default.green(` āœ“ Generated ${result.metadata.totalFeatures} features`));
160
+ console.log(chalk_1.default.green(` āœ“ Generated ${result.metadata.totalComponents} components`));
161
+ console.log(chalk_1.default.green(` āœ“ Generated ${result.metadata.totalActions} actions`));
162
+ console.log(chalk_1.default.green(` āœ“ Generated ${result.metadata.totalHooks} hooks`));
163
+ console.log(chalk_1.default.green(` āœ“ Generated ${result.metadata.totalRoutes} routes`));
164
+ }
165
+ async loadAdminStarterBundle() {
166
+ const bundlePath = path.join(__dirname, "../../templates/admin-starter-bundle.json");
167
+ const bundleContent = await fs.readFile(bundlePath, "utf-8");
168
+ return JSON.parse(bundleContent);
169
+ }
170
+ async extractFeaturesFromStarter(starterBundle, projectPath) {
171
+ const features = [];
172
+ for (const [featureName, template] of Object.entries(starterBundle.features)) {
173
+ const featureTemplate = template;
174
+ const feature = {
175
+ name: featureName,
176
+ description: featureTemplate.description,
177
+ role: "admin",
178
+ components: featureTemplate.components.map((c) => c.name),
179
+ types: featureTemplate.components.map((c) => c.name),
180
+ actions: featureTemplate.actions.map((a) => ({
181
+ name: a.name,
182
+ description: a.description,
183
+ file: `actions/${a.name}.ts`,
184
+ function: a.name,
185
+ parameters: a.parameters,
186
+ returnType: a.returnType,
187
+ permissions: a.permissions,
188
+ validation: undefined,
189
+ })),
190
+ hooks: featureTemplate.hooks.map((h) => ({
191
+ name: h.name,
192
+ description: h.description,
193
+ file: `hooks/${h.name}.ts`,
194
+ function: h.name,
195
+ parameters: h.parameters,
196
+ returnType: h.returnType,
197
+ dependencies: h.dependencies,
198
+ })),
199
+ routes: featureTemplate.routes.map((r) => ({
200
+ path: r.path,
201
+ method: r.method,
202
+ description: r.description,
203
+ file: `app/api${r.path}/route.ts`,
204
+ function: r.path.replace(/\//g, "_").replace(/\[.*?\]/g, "id"),
205
+ parameters: r.parameters,
206
+ responseType: r.responseType,
207
+ permissions: r.permissions,
208
+ middleware: undefined,
209
+ })),
210
+ database: {
211
+ schema: JSON.stringify(featureTemplate.database, null, 2),
212
+ queries: featureTemplate.database.tables.map((t) => `SELECT * FROM ${t.name}`),
213
+ mutations: featureTemplate.database.tables.map((t) => `INSERT INTO ${t.name}`),
214
+ },
215
+ permissions: featureTemplate.permissions.map((p) => ({
216
+ id: `${featureName}-${p.role}-${p.resource}`,
217
+ resource: p.resource,
218
+ action: p.actions[0],
219
+ conditions: p.conditions,
220
+ description: `Permission for ${p.role} on ${p.resource}`,
221
+ })),
222
+ metadata: {
223
+ createdAt: new Date().toISOString(),
224
+ updatedAt: new Date().toISOString(),
225
+ version: "1.0.0",
226
+ dependencies: featureTemplate.dependencies,
227
+ },
228
+ };
229
+ features.push(feature);
230
+ }
231
+ return features;
232
+ }
233
+ async loadGeneratedComponents(projectPath) {
234
+ const componentsDir = path.join(projectPath, "components");
235
+ try {
236
+ const files = await fs.readdir(componentsDir, { recursive: true });
237
+ return files
238
+ .filter((file) => typeof file === "string" && file.endsWith(".tsx"))
239
+ .map((file) => file.replace(".tsx", ""));
240
+ }
241
+ catch {
242
+ return [];
243
+ }
244
+ }
245
+ async loadContextFiles(projectPath) {
246
+ const contextDir = path.join(projectPath, ".mycontext");
247
+ const contextFiles = {};
248
+ try {
249
+ const files = ["prd.md", "types.ts", "brand.md", "component-list.json"];
250
+ for (const file of files) {
251
+ const filePath = path.join(contextDir, file);
252
+ try {
253
+ const content = await fs.readFile(filePath, "utf-8");
254
+ contextFiles[file.replace(/\.(md|ts|json)$/, "")] = content;
255
+ }
256
+ catch {
257
+ // File doesn't exist, skip
258
+ }
259
+ }
260
+ }
261
+ catch {
262
+ // Context directory doesn't exist
263
+ }
264
+ return contextFiles;
265
+ }
266
+ async loadDesignManifest(projectPath) {
267
+ const manifestPath = path.join(projectPath, ".mycontext", "design-manifest.json");
268
+ try {
269
+ const content = await fs.readFile(manifestPath, "utf-8");
270
+ return JSON.parse(content);
271
+ }
272
+ catch {
273
+ return null;
274
+ }
275
+ }
276
+ async loadFeatureTemplates() {
277
+ // Load feature templates from templates directory
278
+ const templatesDir = path.join(__dirname, "../../templates/feature-templates");
279
+ try {
280
+ const files = await fs.readdir(templatesDir);
281
+ const templates = [];
282
+ for (const file of files) {
283
+ if (file.endsWith(".json")) {
284
+ const content = await fs.readFile(path.join(templatesDir, file), "utf-8");
285
+ templates.push(JSON.parse(content));
286
+ }
287
+ }
288
+ return templates;
289
+ }
290
+ catch {
291
+ return [];
292
+ }
293
+ }
294
+ getTargetRoles(role) {
295
+ if (role) {
296
+ return [role];
297
+ }
298
+ // Default to all roles
299
+ return ["admin", "user", "guest"];
300
+ }
301
+ async saveFeatureBundles(roleFeatures, outputPath) {
302
+ const bundlesDir = path.join(outputPath, ".mycontext", "feature-bundles");
303
+ await fs.mkdir(bundlesDir, { recursive: true });
304
+ for (const [role, features] of roleFeatures) {
305
+ const roleDir = path.join(bundlesDir, role);
306
+ await fs.mkdir(roleDir, { recursive: true });
307
+ for (const feature of features) {
308
+ const featureFile = path.join(roleDir, `${feature.name}.json`);
309
+ await fs.writeFile(featureFile, JSON.stringify(feature, null, 2));
310
+ }
311
+ // Save role summary
312
+ const summary = {
313
+ role,
314
+ features: features.map((f) => ({
315
+ name: f.name,
316
+ description: f.description,
317
+ components: f.components.length,
318
+ actions: f.actions.length,
319
+ hooks: f.hooks.length,
320
+ routes: f.routes.length,
321
+ })),
322
+ metadata: {
323
+ totalFeatures: features.length,
324
+ totalComponents: features.reduce((sum, f) => sum + f.components.length, 0),
325
+ totalActions: features.reduce((sum, f) => sum + f.actions.length, 0),
326
+ totalHooks: features.reduce((sum, f) => sum + f.hooks.length, 0),
327
+ totalRoutes: features.reduce((sum, f) => sum + f.routes.length, 0),
328
+ generatedAt: new Date().toISOString(),
329
+ },
330
+ };
331
+ const summaryFile = path.join(roleDir, "summary.json");
332
+ await fs.writeFile(summaryFile, JSON.stringify(summary, null, 2));
333
+ }
334
+ }
335
+ async hasGeneratedComponents(projectPath) {
336
+ const componentsDir = path.join(projectPath, "components");
337
+ try {
338
+ const files = await fs.readdir(componentsDir);
339
+ return files.some((file) => file.endsWith(".tsx"));
340
+ }
341
+ catch {
342
+ return false;
343
+ }
344
+ }
345
+ async hasAdminStarter(projectPath) {
346
+ const starterPath = path.join(projectPath, ".mycontext", "admin-starter.json");
347
+ try {
348
+ await fs.access(starterPath);
349
+ return true;
350
+ }
351
+ catch {
352
+ return false;
353
+ }
354
+ }
355
+ showNextSteps(outputPath, options) {
356
+ console.log(chalk_1.default.blue("\nšŸ“‹ Next Steps:"));
357
+ console.log(chalk_1.default.cyan(" 1. Review generated features:"));
358
+ console.log(chalk_1.default.white(` cd ${outputPath}`));
359
+ console.log(chalk_1.default.cyan(" 2. Install dependencies:"));
360
+ console.log(chalk_1.default.white(" npm install"));
361
+ console.log(chalk_1.default.cyan(" 3. Set up database:"));
362
+ console.log(chalk_1.default.white(" mycontext setup-database"));
363
+ console.log(chalk_1.default.cyan(" 4. Start development:"));
364
+ console.log(chalk_1.default.white(" npm run dev"));
365
+ if (options.includeTests) {
366
+ console.log(chalk_1.default.cyan(" 5. Run tests:"));
367
+ console.log(chalk_1.default.white(" npm test"));
368
+ }
369
+ if (options.includeDocs) {
370
+ console.log(chalk_1.default.cyan(" 6. Generate documentation:"));
371
+ console.log(chalk_1.default.white(" mycontext docs generate"));
372
+ }
373
+ console.log(chalk_1.default.gray("\n Additional:"));
374
+ console.log(chalk_1.default.gray(" • Review feature bundles in .mycontext/feature-bundles/"));
375
+ console.log(chalk_1.default.gray(" • Customize features for your specific needs"));
376
+ console.log(chalk_1.default.gray(" • Deploy with: mycontext deploy"));
377
+ }
378
+ getCommand() {
379
+ return this.command;
380
+ }
381
+ }
382
+ exports.AssembleFeaturesCommand = AssembleFeaturesCommand;
383
+ //# sourceMappingURL=assemble-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble-features.js","sourceRoot":"","sources":["../../src/commands/assemble-features.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAoC;AACpC,gDAAkC;AAClC,2CAA6B;AAC7B,kDAA0B;AAC1B,yFAGwD;AACxD,qFAGsD;AAiBtD,MAAa,uBAAuB;IAGlC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAO,CAAC,mBAAmB,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,OAAO;aACT,WAAW,CAAC,oDAAoD,CAAC;aACjE,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;aACjE,MAAM,CAAC,eAAe,EAAE,4BAA4B,CAAC;aACrD,MAAM,CACL,eAAe,EACf,+CAA+C,EAC/C,OAAO,CACR;aACA,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;aACvD,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,YAAY,CAAC;aACxE,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;aAC5D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;aAC/C,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;aACjD,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;aACrC,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;YACjD,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAgC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC;YAEhE,iCAAiC;YACjC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBAE3D,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;oBAC7D,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBACnE,CAAC;qBAAM,IAAI,aAAa,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBAC3D,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,WAAmB,EACnB,UAAkB,EAClB,OAAgC;QAEhC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAElE,4BAA4B;QAC5B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE1D,gCAAgC;QAChC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,0BAA0B,CACzD,aAAa,EACb,WAAW,CACZ,CAAC;QAEF,+BAA+B;QAC/B,MAAM,aAAa,GAAG,uCAAkB,CAAC,0BAA0B,EAAE,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEtD,MAAM,aAAa,GAAG,IAAI,uCAAkB,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,WAAW,GAA+B;YAC9C,WAAW;YACX,aAAa;YACb,WAAW;YACX,aAAa;YACb,UAAU;SACX,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,iCAAiC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEnE,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CACT,8BAA8B,UAAU,CAAC,QAAQ,CAAC,UAAU,QAAQ,CACrE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CACxE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,WAAmB,EACnB,UAAkB,EAClB,OAAgC;QAEhC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAEhE,oCAAoC;QACpC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAElE,yBAAyB;QACzB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE3D,oBAAoB;QACpB,MAAM,aAAa,GAAG,IAAI,2CAAoB,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,eAAe,GAA2B;YAC9C,WAAW;YACX,UAAU;YACV,YAAY;YACZ,cAAc;YACd,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;YACnC,gBAAgB;YAChB,UAAU;SACX,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,aAAa,WAAW,CAAC,CACvE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,eAAe,aAAa,CAAC,CAC3E,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,YAAY,UAAU,CAAC,CACrE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,UAAU,QAAQ,CAAC,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,WAAW,SAAS,CAAC,CACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,2CAA2C,CAC5C,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,aAAiC,EACjC,WAAmB;QAEnB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAClD,aAAa,CAAC,QAAQ,CACvB,EAAE,CAAC;YACF,MAAM,eAAe,GAAG,QAAe,CAAC;YACxC,MAAM,OAAO,GAAkB;gBAC7B,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,eAAe,CAAC,WAAW;gBACxC,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9D,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzD,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAChD,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,KAAK;oBAC5B,QAAQ,EAAE,CAAC,CAAC,IAAI;oBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,SAAS;iBACtB,CAAC,CAAC;gBACH,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAC5C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK;oBAC1B,QAAQ,EAAE,CAAC,CAAC,IAAI;oBAChB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,YAAY,EAAE,CAAC,CAAC,YAAY;iBAC7B,CAAC,CAAC;gBACH,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAC9C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAa;oBACvB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,WAAW;oBACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;oBAC9D,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,SAAS;iBACtB,CAAC,CAAC;gBACH,QAAQ,EAAE;oBACR,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzD,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAC1C,CAAC,CAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CACtC;oBACD,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAC5C,CAAC,CAAM,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CACpC;iBACF;gBACD,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBACxD,EAAE,EAAE,GAAG,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE;oBAC5C,QAAQ,EAAE,CAAC,CAAC,QAAe;oBAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAQ;oBAC3B,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,WAAW,EAAE,kBAAkB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE;iBACzD,CAAC,CAAC;gBACH,QAAQ,EAAE;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,OAAO,EAAE,OAAO;oBAChB,YAAY,EAAE,eAAe,CAAC,YAAY;iBAC3C;aACF,CAAC;YAEF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,WAAmB;QAEnB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,OAAO,KAAK;iBACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACnE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxD,MAAM,YAAY,GAAQ,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;YAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC7C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACrD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;gBAC9D,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,WAAW,EACX,YAAY,EACZ,sBAAsB,CACvB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,kDAAkD;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,SAAS,EACT,mCAAmC,CACpC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,EAAE,CAAC;YAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAC7B,OAAO,CACR,CAAC;oBACF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAW;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,YAAwC,EACxC,UAAkB;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;gBAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,oBAAoB;YACpB,MAAM,OAAO,GAAG;gBACd,IAAI;gBACJ,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM;oBAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;oBACzB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;oBACrB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;iBACxB,CAAC,CAAC;gBACH,QAAQ,EAAE;oBACR,aAAa,EAAE,QAAQ,CAAC,MAAM;oBAC9B,eAAe,EAAE,QAAQ,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EACrC,CAAC,CACF;oBACD,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;oBACpE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;oBAChE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC;aACF,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACvD,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,WAAmB;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,WAAmB;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,WAAW,EACX,YAAY,EACZ,oBAAoB,CACrB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,aAAa,CACnB,UAAkB,EAClB,OAAgC;QAEhC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CACxE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AA/bD,0DA+bC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Clone Starter Command
3
+ *
4
+ * Clones the admin starter repository and sets up the project
5
+ * with InstantDB, shadcn/ui, and authentication.
6
+ */
7
+ import { Command } from "commander";
8
+ export interface CloneStarterOptions {
9
+ url?: string;
10
+ output?: string;
11
+ branch?: string;
12
+ install?: boolean;
13
+ setup?: boolean;
14
+ verbose?: boolean;
15
+ }
16
+ export declare class CloneStarterCommand {
17
+ private command;
18
+ constructor();
19
+ private setupCommand;
20
+ execute(options: CloneStarterOptions): Promise<void>;
21
+ private cloneRepository;
22
+ private loadStarterBundle;
23
+ private installDependencies;
24
+ private setupEnvironment;
25
+ private generateEnvironmentFile;
26
+ private updatePackageJson;
27
+ private runSetupCommands;
28
+ private saveStarterConfiguration;
29
+ private showNextSteps;
30
+ getCommand(): Command;
31
+ }
32
+ //# sourceMappingURL=clone-starter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-starter.d.ts","sourceRoot":"","sources":["../../src/commands/clone-starter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAU;;IAOzB,OAAO,CAAC,YAAY;IAsBd,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YA4C5C,eAAe;YAcf,iBAAiB;YASjB,mBAAmB;YAcnB,gBAAgB;IAuB9B,OAAO,CAAC,uBAAuB;YASjB,iBAAiB;YA4BjB,gBAAgB;YAiBhB,wBAAwB;IAYtC,OAAO,CAAC,aAAa;IAmCrB,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /**
3
+ * Clone Starter Command
4
+ *
5
+ * Clones the admin starter repository and sets up the project
6
+ * with InstantDB, shadcn/ui, and authentication.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.CloneStarterCommand = void 0;
46
+ const commander_1 = require("commander");
47
+ const fs = __importStar(require("fs/promises"));
48
+ const path = __importStar(require("path"));
49
+ const child_process_1 = require("child_process");
50
+ const util_1 = require("util");
51
+ const chalk_1 = __importDefault(require("chalk"));
52
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
53
+ class CloneStarterCommand {
54
+ constructor() {
55
+ this.command = new commander_1.Command("clone-starter");
56
+ this.setupCommand();
57
+ }
58
+ setupCommand() {
59
+ this.command
60
+ .description("Clone admin starter repository and set up project")
61
+ .option("--url <url>", "GitHub repository URL", "https://github.com/mycontext/admin-starter")
62
+ .option("--output <path>", "Output directory for cloned project", "./admin-starter")
63
+ .option("--branch <branch>", "Git branch to clone", "main")
64
+ .option("--install", "Install dependencies after cloning", true)
65
+ .option("--setup", "Run setup commands after cloning", true)
66
+ .option("--verbose", "Verbose output")
67
+ .action(async (options) => {
68
+ await this.execute(options);
69
+ });
70
+ }
71
+ async execute(options) {
72
+ console.log(chalk_1.default.cyan("šŸ“¦ Cloning admin starter..."));
73
+ try {
74
+ const outputPath = path.resolve(options.output || "./admin-starter");
75
+ // Step 1: Clone repository
76
+ console.log(chalk_1.default.gray(" šŸ“„ Cloning repository..."));
77
+ await this.cloneRepository(options.url, outputPath, options.branch);
78
+ // Step 2: Load starter bundle configuration
79
+ console.log(chalk_1.default.gray(" šŸ“‹ Loading starter configuration..."));
80
+ const starterBundle = await this.loadStarterBundle();
81
+ // Step 3: Install dependencies
82
+ if (options.install) {
83
+ console.log(chalk_1.default.gray(" šŸ“¦ Installing dependencies..."));
84
+ await this.installDependencies(outputPath);
85
+ }
86
+ // Step 4: Set up environment
87
+ console.log(chalk_1.default.gray(" āš™ļø Setting up environment..."));
88
+ await this.setupEnvironment(outputPath, starterBundle);
89
+ // Step 5: Run setup commands
90
+ if (options.setup) {
91
+ console.log(chalk_1.default.gray(" šŸ”§ Running setup commands..."));
92
+ await this.runSetupCommands(outputPath, starterBundle);
93
+ }
94
+ // Step 6: Save starter configuration
95
+ console.log(chalk_1.default.gray(" šŸ’¾ Saving starter configuration..."));
96
+ await this.saveStarterConfiguration(outputPath, starterBundle);
97
+ console.log(chalk_1.default.green("āœ… Admin starter cloned and set up successfully!"));
98
+ this.showNextSteps(outputPath, starterBundle);
99
+ }
100
+ catch (error) {
101
+ console.log(chalk_1.default.red(`āŒ Failed to clone starter: ${error}`));
102
+ process.exit(1);
103
+ }
104
+ }
105
+ async cloneRepository(url, outputPath, branch) {
106
+ try {
107
+ const command = `git clone -b ${branch} ${url} ${outputPath}`;
108
+ await execAsync(command);
109
+ console.log(chalk_1.default.green(` āœ“ Repository cloned to ${outputPath}`));
110
+ }
111
+ catch (error) {
112
+ throw new Error(`Failed to clone repository: ${error}`);
113
+ }
114
+ }
115
+ async loadStarterBundle() {
116
+ const bundlePath = path.join(__dirname, "../../templates/admin-starter-bundle.json");
117
+ const bundleContent = await fs.readFile(bundlePath, "utf-8");
118
+ return JSON.parse(bundleContent);
119
+ }
120
+ async installDependencies(outputPath) {
121
+ try {
122
+ await execAsync("npm install", { cwd: outputPath });
123
+ console.log(chalk_1.default.green(" āœ“ Dependencies installed"));
124
+ }
125
+ catch (error) {
126
+ console.log(chalk_1.default.yellow(` āš ļø Failed to install dependencies: ${error}`));
127
+ console.log(chalk_1.default.gray(' Run "npm install" manually in the project directory'));
128
+ }
129
+ }
130
+ async setupEnvironment(outputPath, starterBundle) {
131
+ const envPath = path.join(outputPath, ".env.local");
132
+ const envExamplePath = path.join(outputPath, ".env.example");
133
+ // Create .env.local from .env.example if it exists
134
+ try {
135
+ const envExample = await fs.readFile(envExamplePath, "utf-8");
136
+ await fs.writeFile(envPath, envExample);
137
+ console.log(chalk_1.default.green(" āœ“ Environment file created"));
138
+ }
139
+ catch {
140
+ // Create basic .env.local
141
+ const envContent = this.generateEnvironmentFile(starterBundle);
142
+ await fs.writeFile(envPath, envContent);
143
+ console.log(chalk_1.default.green(" āœ“ Environment file created"));
144
+ }
145
+ // Update package.json with starter bundle info
146
+ await this.updatePackageJson(outputPath, starterBundle);
147
+ }
148
+ generateEnvironmentFile(starterBundle) {
149
+ const envVars = starterBundle.setup.environment;
150
+ return (Object.entries(envVars)
151
+ .map(([key, value]) => `${key}=${value}`)
152
+ .join("\n") + "\n");
153
+ }
154
+ async updatePackageJson(outputPath, starterBundle) {
155
+ const packageJsonPath = path.join(outputPath, "package.json");
156
+ try {
157
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
158
+ // Add starter bundle metadata
159
+ packageJson.mycontext = {
160
+ starter: starterBundle.name,
161
+ version: starterBundle.version,
162
+ features: starterBundle.features,
163
+ stack: starterBundle.stack,
164
+ };
165
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
166
+ console.log(chalk_1.default.green(" āœ“ Package.json updated"));
167
+ }
168
+ catch (error) {
169
+ console.log(chalk_1.default.yellow(` āš ļø Failed to update package.json: ${error}`));
170
+ }
171
+ }
172
+ async runSetupCommands(outputPath, starterBundle) {
173
+ for (const command of starterBundle.setup.commands) {
174
+ try {
175
+ console.log(chalk_1.default.gray(` Running: ${command}`));
176
+ await execAsync(command, { cwd: outputPath });
177
+ console.log(chalk_1.default.green(` āœ“ ${command}`));
178
+ }
179
+ catch (error) {
180
+ console.log(chalk_1.default.yellow(` āš ļø Failed to run "${command}": ${error}`));
181
+ }
182
+ }
183
+ }
184
+ async saveStarterConfiguration(outputPath, starterBundle) {
185
+ const mycontextDir = path.join(outputPath, ".mycontext");
186
+ await fs.mkdir(mycontextDir, { recursive: true });
187
+ const configPath = path.join(mycontextDir, "admin-starter.json");
188
+ await fs.writeFile(configPath, JSON.stringify(starterBundle, null, 2));
189
+ console.log(chalk_1.default.green(" āœ“ Starter configuration saved"));
190
+ }
191
+ showNextSteps(outputPath, starterBundle) {
192
+ console.log(chalk_1.default.blue("\nšŸ“‹ Next Steps:"));
193
+ console.log(chalk_1.default.cyan(" 1. Navigate to project:"));
194
+ console.log(chalk_1.default.white(` cd ${outputPath}`));
195
+ console.log(chalk_1.default.cyan(" 2. Configure environment:"));
196
+ console.log(chalk_1.default.white(" # Edit .env.local with your API keys"));
197
+ console.log(chalk_1.default.cyan(" 3. Set up database:"));
198
+ console.log(chalk_1.default.white(" mycontext setup-database"));
199
+ console.log(chalk_1.default.cyan(" 4. Start development:"));
200
+ console.log(chalk_1.default.white(" npm run dev"));
201
+ console.log(chalk_1.default.gray("\n Features included:"));
202
+ starterBundle.features.forEach((feature) => {
203
+ console.log(chalk_1.default.gray(` • ${feature}`));
204
+ });
205
+ console.log(chalk_1.default.gray("\n Stack:"));
206
+ Object.entries(starterBundle.stack).forEach(([key, value]) => {
207
+ console.log(chalk_1.default.gray(` • ${key}: ${value}`));
208
+ });
209
+ console.log(chalk_1.default.blue("\nšŸš€ Ready to build!"));
210
+ console.log(chalk_1.default.gray(" The admin starter includes authentication, user management,"));
211
+ console.log(chalk_1.default.gray(" and invite system. Customize it for your needs."));
212
+ }
213
+ getCommand() {
214
+ return this.command;
215
+ }
216
+ }
217
+ exports.CloneStarterCommand = CloneStarterCommand;
218
+ //# sourceMappingURL=clone-starter.js.map