helix-lang 11.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.
Files changed (193) hide show
  1. package/README.md +168 -0
  2. package/dist/architect.d.ts +14 -0
  3. package/dist/architect.d.ts.map +1 -0
  4. package/dist/architect.js +127 -0
  5. package/dist/architect.js.map +1 -0
  6. package/dist/bin/helix.d.ts +20 -0
  7. package/dist/bin/helix.d.ts.map +1 -0
  8. package/dist/bin/helix.js +921 -0
  9. package/dist/bin/helix.js.map +1 -0
  10. package/dist/commands/collaborate/index.d.ts +2 -0
  11. package/dist/commands/collaborate/index.d.ts.map +1 -0
  12. package/dist/commands/collaborate/index.js +129 -0
  13. package/dist/commands/collaborate/index.js.map +1 -0
  14. package/dist/commands/collaborate/server.d.ts +31 -0
  15. package/dist/commands/collaborate/server.d.ts.map +1 -0
  16. package/dist/commands/collaborate/server.js +159 -0
  17. package/dist/commands/collaborate/server.js.map +1 -0
  18. package/dist/commands/deploy/index.d.ts +25 -0
  19. package/dist/commands/deploy/index.d.ts.map +1 -0
  20. package/dist/commands/deploy/index.js +130 -0
  21. package/dist/commands/deploy/index.js.map +1 -0
  22. package/dist/commands/deploy/platforms/fly.d.ts +9 -0
  23. package/dist/commands/deploy/platforms/fly.d.ts.map +1 -0
  24. package/dist/commands/deploy/platforms/fly.js +68 -0
  25. package/dist/commands/deploy/platforms/fly.js.map +1 -0
  26. package/dist/commands/deploy/platforms/railway.d.ts +9 -0
  27. package/dist/commands/deploy/platforms/railway.d.ts.map +1 -0
  28. package/dist/commands/deploy/platforms/railway.js +115 -0
  29. package/dist/commands/deploy/platforms/railway.js.map +1 -0
  30. package/dist/commands/deploy/platforms/vercel.d.ts +10 -0
  31. package/dist/commands/deploy/platforms/vercel.d.ts.map +1 -0
  32. package/dist/commands/deploy/platforms/vercel.js +126 -0
  33. package/dist/commands/deploy/platforms/vercel.js.map +1 -0
  34. package/dist/commands/deploy.d.ts +6 -0
  35. package/dist/commands/deploy.d.ts.map +1 -0
  36. package/dist/commands/deploy.js +56 -0
  37. package/dist/commands/deploy.js.map +1 -0
  38. package/dist/commands/evolve/analyzers/performance.d.ts +13 -0
  39. package/dist/commands/evolve/analyzers/performance.d.ts.map +1 -0
  40. package/dist/commands/evolve/analyzers/performance.js +591 -0
  41. package/dist/commands/evolve/analyzers/performance.js.map +1 -0
  42. package/dist/commands/evolve/analyzers/security.d.ts +21 -0
  43. package/dist/commands/evolve/analyzers/security.d.ts.map +1 -0
  44. package/dist/commands/evolve/analyzers/security.js +280 -0
  45. package/dist/commands/evolve/analyzers/security.js.map +1 -0
  46. package/dist/commands/evolve/index.d.ts +2 -0
  47. package/dist/commands/evolve/index.d.ts.map +1 -0
  48. package/dist/commands/evolve/index.js +122 -0
  49. package/dist/commands/evolve/index.js.map +1 -0
  50. package/dist/commands/generate.d.ts +6 -0
  51. package/dist/commands/generate.d.ts.map +1 -0
  52. package/dist/commands/generate.js +277 -0
  53. package/dist/commands/generate.js.map +1 -0
  54. package/dist/commands/install.d.ts +2 -0
  55. package/dist/commands/install.d.ts.map +1 -0
  56. package/dist/commands/install.js +176 -0
  57. package/dist/commands/install.js.map +1 -0
  58. package/dist/commands/library/index.d.ts +27 -0
  59. package/dist/commands/library/index.d.ts.map +1 -0
  60. package/dist/commands/library/index.js +126 -0
  61. package/dist/commands/library/index.js.map +1 -0
  62. package/dist/commands/migrate.d.ts +5 -0
  63. package/dist/commands/migrate.d.ts.map +1 -0
  64. package/dist/commands/migrate.js +258 -0
  65. package/dist/commands/migrate.js.map +1 -0
  66. package/dist/commands/new.d.ts +6 -0
  67. package/dist/commands/new.d.ts.map +1 -0
  68. package/dist/commands/new.js +195 -0
  69. package/dist/commands/new.js.map +1 -0
  70. package/dist/commands/preflight.d.ts +20 -0
  71. package/dist/commands/preflight.d.ts.map +1 -0
  72. package/dist/commands/preflight.js +182 -0
  73. package/dist/commands/preflight.js.map +1 -0
  74. package/dist/commands/preview.d.ts +13 -0
  75. package/dist/commands/preview.d.ts.map +1 -0
  76. package/dist/commands/preview.js +260 -0
  77. package/dist/commands/preview.js.map +1 -0
  78. package/dist/commands/run.d.ts +6 -0
  79. package/dist/commands/run.d.ts.map +1 -0
  80. package/dist/commands/run.js +96 -0
  81. package/dist/commands/run.js.map +1 -0
  82. package/dist/commands/spawn.d.ts +11 -0
  83. package/dist/commands/spawn.d.ts.map +1 -0
  84. package/dist/commands/spawn.js +916 -0
  85. package/dist/commands/spawn.js.map +1 -0
  86. package/dist/compiler.d.ts +12 -0
  87. package/dist/compiler.d.ts.map +1 -0
  88. package/dist/compiler.js +92 -0
  89. package/dist/compiler.js.map +1 -0
  90. package/dist/core/file-writer.d.ts +36 -0
  91. package/dist/core/file-writer.d.ts.map +1 -0
  92. package/dist/core/file-writer.js +268 -0
  93. package/dist/core/file-writer.js.map +1 -0
  94. package/dist/core/registry.d.ts +57 -0
  95. package/dist/core/registry.d.ts.map +1 -0
  96. package/dist/core/registry.js +222 -0
  97. package/dist/core/registry.js.map +1 -0
  98. package/dist/core/self-healing.d.ts +47 -0
  99. package/dist/core/self-healing.d.ts.map +1 -0
  100. package/dist/core/self-healing.js +250 -0
  101. package/dist/core/self-healing.js.map +1 -0
  102. package/dist/core/types.d.ts +126 -0
  103. package/dist/core/types.d.ts.map +1 -0
  104. package/dist/core/types.js +7 -0
  105. package/dist/core/types.js.map +1 -0
  106. package/dist/generators/databases/mongodb.d.ts +10 -0
  107. package/dist/generators/databases/mongodb.d.ts.map +1 -0
  108. package/dist/generators/databases/mongodb.js +83 -0
  109. package/dist/generators/databases/mongodb.js.map +1 -0
  110. package/dist/generators/databases/redis.d.ts +2 -0
  111. package/dist/generators/databases/redis.d.ts.map +1 -0
  112. package/dist/generators/databases/redis.js +140 -0
  113. package/dist/generators/databases/redis.js.map +1 -0
  114. package/dist/generators/flutter.d.ts +32 -0
  115. package/dist/generators/flutter.d.ts.map +1 -0
  116. package/dist/generators/flutter.js +628 -0
  117. package/dist/generators/flutter.js.map +1 -0
  118. package/dist/openrouter.d.ts +68 -0
  119. package/dist/openrouter.d.ts.map +1 -0
  120. package/dist/openrouter.js +241 -0
  121. package/dist/openrouter.js.map +1 -0
  122. package/dist/page-generator.d.ts +22 -0
  123. package/dist/page-generator.d.ts.map +1 -0
  124. package/dist/page-generator.js +192 -0
  125. package/dist/page-generator.js.map +1 -0
  126. package/dist/parser.d.ts +76 -0
  127. package/dist/parser.d.ts.map +1 -0
  128. package/dist/parser.js +691 -0
  129. package/dist/parser.js.map +1 -0
  130. package/dist/prompts/master-architect.d.ts +9 -0
  131. package/dist/prompts/master-architect.d.ts.map +1 -0
  132. package/dist/prompts/master-architect.js +150 -0
  133. package/dist/prompts/master-architect.js.map +1 -0
  134. package/dist/researcher.d.ts +12 -0
  135. package/dist/researcher.d.ts.map +1 -0
  136. package/dist/researcher.js +85 -0
  137. package/dist/researcher.js.map +1 -0
  138. package/dist/self-heal.d.ts +29 -0
  139. package/dist/self-heal.d.ts.map +1 -0
  140. package/dist/self-heal.js +260 -0
  141. package/dist/self-heal.js.map +1 -0
  142. package/dist/services/SupabaseDeployer.d.ts +9 -0
  143. package/dist/services/SupabaseDeployer.d.ts.map +1 -0
  144. package/dist/services/SupabaseDeployer.js +50 -0
  145. package/dist/services/SupabaseDeployer.js.map +1 -0
  146. package/dist/test-generator.d.ts +18 -0
  147. package/dist/test-generator.d.ts.map +1 -0
  148. package/dist/test-generator.js +180 -0
  149. package/dist/test-generator.js.map +1 -0
  150. package/dist/themes/index.d.ts +52 -0
  151. package/dist/themes/index.d.ts.map +1 -0
  152. package/dist/themes/index.js +273 -0
  153. package/dist/themes/index.js.map +1 -0
  154. package/dist/types.d.ts +9 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +81 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/utils/constitutional-validator.d.ts +73 -0
  159. package/dist/utils/constitutional-validator.d.ts.map +1 -0
  160. package/dist/utils/constitutional-validator.js +249 -0
  161. package/dist/utils/constitutional-validator.js.map +1 -0
  162. package/library/auth-flow/app/api/auth/[...nextauth]/route.ts +31 -0
  163. package/library/auth-flow/app/api/auth/login/route.ts +90 -0
  164. package/library/auth-flow/app/api/auth/register/route.ts +91 -0
  165. package/library/auth-flow/components/auth/AuthMiddleware.tsx +139 -0
  166. package/library/auth-flow/components/auth/LoginForm.tsx +125 -0
  167. package/library/auth-flow/components/auth/RegisterForm.tsx +168 -0
  168. package/library/auth-flow/components/auth/nextauth-config.ts +99 -0
  169. package/library/auth-flow/manifest.json +29 -0
  170. package/library/auth-flow/schema.prisma +45 -0
  171. package/library/dashboard-analytics/components/dashboard/ActivityFeed.tsx +109 -0
  172. package/library/dashboard-analytics/components/dashboard/LineChart.tsx +180 -0
  173. package/library/dashboard-analytics/components/dashboard/StatsCard.tsx +47 -0
  174. package/library/dashboard-analytics/components/dashboard/SummaryGrid.tsx +39 -0
  175. package/library/dashboard-analytics/manifest.json +19 -0
  176. package/library/data-table/components/table/BulkActions.tsx +59 -0
  177. package/library/data-table/components/table/ColumnToggle.tsx +65 -0
  178. package/library/data-table/components/table/DataTable.tsx +318 -0
  179. package/library/data-table/components/table/ExportCSV.tsx +52 -0
  180. package/library/data-table/components/table/SearchFilter.tsx +48 -0
  181. package/library/data-table/manifest.json +20 -0
  182. package/library/file-upload/app/api/upload/route.ts +107 -0
  183. package/library/file-upload/components/upload/DropZone.tsx +268 -0
  184. package/library/file-upload/components/upload/FilePreview.tsx +82 -0
  185. package/library/file-upload/components/upload/UploadProgress.tsx +92 -0
  186. package/library/file-upload/components/upload/fileStorage.ts +142 -0
  187. package/library/file-upload/manifest.json +21 -0
  188. package/library/notification-system/app/api/notifications/route.ts +121 -0
  189. package/library/notification-system/components/notifications/NotificationBell.tsx +154 -0
  190. package/library/notification-system/components/notifications/NotificationProvider.tsx +161 -0
  191. package/library/notification-system/components/notifications/Toast.tsx +112 -0
  192. package/library/notification-system/manifest.json +20 -0
  193. package/package.json +66 -0
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ /**
3
+ * Helix Command: generate
4
+ * The "Explosion" Pattern - Parses .helix and generates Prisma + API + UI layers
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.generateStack = generateStack;
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const fs = __importStar(require("fs-extra"));
46
+ const path = __importStar(require("path"));
47
+ const execa = require("execa");
48
+ const ora_1 = __importDefault(require("ora"));
49
+ const parser_1 = require("../parser");
50
+ async function generateStack(blueprintPath) {
51
+ const fullPath = path.isAbsolute(blueprintPath)
52
+ ? blueprintPath
53
+ : path.join(process.cwd(), blueprintPath);
54
+ // Validate file exists
55
+ if (!fs.existsSync(fullPath)) {
56
+ console.error(chalk_1.default.red(`āŒ Blueprint not found: ${fullPath}`));
57
+ process.exit(1);
58
+ }
59
+ // Check for helix.config.json to confirm we're in a Helix project
60
+ const configPath = path.join(process.cwd(), "helix.config.json");
61
+ if (!fs.existsSync(configPath)) {
62
+ console.error(chalk_1.default.red("āŒ Not a Helix project. Run 'helix new <name>' first."));
63
+ process.exit(1);
64
+ }
65
+ console.log(chalk_1.default.cyan("\n⚔ Helix Generate - The Explosion Pattern\n"));
66
+ // Read and parse the blueprint
67
+ const spinner1 = (0, ora_1.default)("Parsing Helix blueprint...").start();
68
+ let ast;
69
+ try {
70
+ const content = await fs.readFile(fullPath, "utf-8");
71
+ ast = (0, parser_1.parseHelix)(content);
72
+ spinner1.succeed(`Parsed ${ast.strands.length} strands, ${ast.views.length} views`);
73
+ }
74
+ catch (error) {
75
+ spinner1.fail("Failed to parse blueprint");
76
+ throw error;
77
+ }
78
+ // Layer A: Generate Prisma Schema
79
+ const spinner2 = (0, ora_1.default)("Layer A: Generating Prisma schema...").start();
80
+ try {
81
+ const schemaPath = path.join(process.cwd(), "prisma", "schema.prisma");
82
+ const schema = (0, parser_1.generatePrismaSchema)(ast);
83
+ await fs.writeFile(schemaPath, schema);
84
+ spinner2.succeed("Prisma schema generated");
85
+ }
86
+ catch (error) {
87
+ spinner2.fail("Failed to generate Prisma schema");
88
+ throw error;
89
+ }
90
+ // CLEANUP: Remove any hallucinated prisma.config.ts that could crash Prisma
91
+ const badConfigPath = path.join(process.cwd(), "prisma.config.ts");
92
+ if (fs.existsSync(badConfigPath)) {
93
+ await fs.remove(badConfigPath);
94
+ console.log(chalk_1.default.yellow("āš ļø Removed invalid prisma.config.ts (not supported by Prisma)"));
95
+ }
96
+ // Push database changes
97
+ const spinner3 = (0, ora_1.default)("Syncing database...").start();
98
+ try {
99
+ await execa("npm", ["exec", "--", "prisma", "db", "push", "--accept-data-loss"], {
100
+ cwd: process.cwd(),
101
+ stdio: "pipe",
102
+ });
103
+ spinner3.succeed("Database synced");
104
+ }
105
+ catch (error) {
106
+ spinner3.fail("Failed to sync database");
107
+ throw error;
108
+ }
109
+ // Generate Prisma client
110
+ const spinner4 = (0, ora_1.default)("Generating Prisma client...").start();
111
+ try {
112
+ await execa("npm", ["exec", "--", "prisma", "generate"], {
113
+ cwd: process.cwd(),
114
+ stdio: "pipe",
115
+ });
116
+ spinner4.succeed("Prisma client generated");
117
+ }
118
+ catch (error) {
119
+ spinner4.fail("Failed to generate Prisma client");
120
+ throw error;
121
+ }
122
+ // Layer B: Generate API Routes
123
+ const spinner5 = (0, ora_1.default)("Layer B: Generating API routes...").start();
124
+ try {
125
+ for (const strand of ast.strands) {
126
+ const apiDir = path.join(process.cwd(), "src", "app", "api", strand.name.toLowerCase());
127
+ await fs.ensureDir(apiDir);
128
+ const routeCode = (0, parser_1.generateAPIRoute)(strand);
129
+ await fs.writeFile(path.join(apiDir, "route.ts"), routeCode);
130
+ }
131
+ spinner5.succeed(`Generated ${ast.strands.length} API route(s)`);
132
+ }
133
+ catch (error) {
134
+ spinner5.fail("Failed to generate API routes");
135
+ throw error;
136
+ }
137
+ // Layer C: Generate UI Pages
138
+ const spinner6 = (0, ora_1.default)("Layer C: Generating UI components...").start();
139
+ try {
140
+ for (const view of ast.views) {
141
+ // Find the associated strand from view properties
142
+ const listProp = view.properties["list"] || "";
143
+ const strandName = listProp.split(".")[0] || ast.strands[0]?.name || "Item";
144
+ const strand = ast.strands.find((s) => s.name === strandName) || ast.strands[0];
145
+ if (!strand) {
146
+ console.log(chalk_1.default.yellow(`āš ļø No strand found for view ${view.name}`));
147
+ continue;
148
+ }
149
+ const viewDir = path.join(process.cwd(), "src", "app", view.name.toLowerCase());
150
+ await fs.ensureDir(viewDir);
151
+ const pageCode = (0, parser_1.generateUIPage)(view, strand, ast.strands);
152
+ await fs.writeFile(path.join(viewDir, "page.tsx"), pageCode);
153
+ }
154
+ spinner6.succeed(`Generated ${ast.views.length} UI page(s)`);
155
+ }
156
+ catch (error) {
157
+ spinner6.fail("Failed to generate UI pages");
158
+ throw error;
159
+ }
160
+ // Update the home page to link to generated views
161
+ const spinner7 = (0, ora_1.default)("Updating home page...").start();
162
+ try {
163
+ const homePage = generateHomePage(ast);
164
+ await fs.writeFile(path.join(process.cwd(), "src", "app", "page.tsx"), homePage);
165
+ spinner7.succeed("Home page updated");
166
+ }
167
+ catch (error) {
168
+ spinner7.fail("Failed to update home page");
169
+ throw error;
170
+ }
171
+ // Success summary
172
+ console.log(chalk_1.default.green("\nāœ… Generation complete!\n"));
173
+ console.log(chalk_1.default.white("Generated layers:"));
174
+ console.log(chalk_1.default.gray(" šŸ“Š Prisma Schema (prisma/schema.prisma)"));
175
+ for (const strand of ast.strands) {
176
+ console.log(chalk_1.default.gray(` šŸ”Œ API: /api/${strand.name.toLowerCase()}`));
177
+ }
178
+ for (const view of ast.views) {
179
+ console.log(chalk_1.default.gray(` šŸ–¼ļø UI: /${view.name.toLowerCase()}`));
180
+ }
181
+ console.log(chalk_1.default.gray("\nRun 'helix run' to start the dev server.\n"));
182
+ }
183
+ function generateHomePage(ast) {
184
+ if (ast.strands.length === 0) {
185
+ return `// Generated by Helix v11.0
186
+ export default function Home() {
187
+ return (<main className="min-h-screen p-8 flex items-center justify-center"><div className="text-center"><h1 className="text-4xl font-bold text-white mb-4">🧬 Helix App</h1><p className="text-gray-400">No strands defined</p></div></main>);
188
+ }`;
189
+ }
190
+ // Generate interfaces for ALL strands
191
+ const interfaces = ast.strands.map(s => {
192
+ const fields = s.fields.map(f => `${f.name}: ${f.type === 'String' ? 'string' : f.type === 'Int' || f.type === 'Float' ? 'number' : f.type === 'Boolean' ? 'boolean' : 'string'}`).join('; ');
193
+ return `interface ${s.name} { id: string; ${fields}; createdAt: string; }`;
194
+ }).join('\n');
195
+ // Generate state for ALL strands
196
+ const states = ast.strands.map(s => {
197
+ const lower = s.name.toLowerCase();
198
+ const init = s.fields.map(f => `${f.name}: ${f.type === 'Boolean' ? 'false' : f.type === 'Int' || f.type === 'Float' ? '0' : "''"}`).join(', ');
199
+ return `const [${lower}s, set${s.name}s] = useState<${s.name}[]>([]);
200
+ const [show${s.name}Form, setShow${s.name}Form] = useState(false);
201
+ const [${lower}Form, set${s.name}Form] = useState({ ${init} });`;
202
+ }).join('\n ');
203
+ // Generate fetch/submit/delete for ALL strands
204
+ const funcs = ast.strands.map(s => {
205
+ const lower = s.name.toLowerCase();
206
+ return `const fetch${s.name}s = async () => { const r = await fetch('/api/${lower}'); set${s.name}s(await r.json()); };
207
+ const submit${s.name} = async (e: React.FormEvent) => { e.preventDefault(); await fetch('/api/${lower}', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(${lower}Form) }); setShow${s.name}Form(false); fetch${s.name}s(); };
208
+ const delete${s.name} = async (id: string) => { if (!confirm('Delete?')) return; await fetch('/api/${lower}?id=' + id, { method: 'DELETE' }); fetch${s.name}s(); };`;
209
+ }).join('\n ');
210
+ const fetchAll = ast.strands.map(s => `fetch${s.name}s()`).join('; ');
211
+ // Generate sections for ALL strands
212
+ const sections = ast.strands.map(s => {
213
+ const lower = s.name.toLowerCase();
214
+ const formInputs = s.fields.map(f => {
215
+ const t = f.type === 'Int' || f.type === 'Float' ? 'number' : 'text';
216
+ return `<div className="mb-3"><label className="block text-gray-400 text-sm mb-1">${f.name}</label><input type="${t}" value={${lower}Form.${f.name} || ''} onChange={e => set${s.name}Form({...${lower}Form, ${f.name}: ${t === 'number' ? 'Number(e.target.value)' : 'e.target.value'}})} className="w-full bg-white/5 border border-white/10 rounded-md p-3 text-white placeholder-white/50 focus:outline-none focus:border-amber-500 focus:ring-1 focus:ring-amber-500 transition-colors" /></div>`;
217
+ }).join('\n ');
218
+ const displayFields = s.fields.slice(0, 4).map(f => `<div><span className="text-gray-500 text-xs">${f.name}</span><div className="text-white text-sm">{String(item.${f.name})}</div></div>`).join('\n ');
219
+ return `
220
+ {/* ${s.name} */}
221
+ <section className="mb-8">
222
+ <div className="flex justify-between items-center mb-3">
223
+ <h2 className="text-xl font-bold text-white">${s.name}s</h2>
224
+ <button onClick={() => setShow${s.name}Form(true)} className="bg-indigo-600 hover:bg-indigo-700 text-white px-4 py-2 rounded-lg text-sm">+ Add</button>
225
+ </div>
226
+ {show${s.name}Form && (
227
+ <div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50">
228
+ <div className="bg-gray-900 border border-white/10 rounded-xl p-6 w-full max-w-md">
229
+ <h3 className="text-lg font-bold text-white mb-4">Add ${s.name}</h3>
230
+ <form onSubmit={submit${s.name}}>
231
+ ${formInputs}
232
+ <div className="flex gap-3 mt-4">
233
+ <button type="button" onClick={() => setShow${s.name}Form(false)} className="flex-1 bg-white/10 text-white py-2 rounded-lg">Cancel</button>
234
+ <button type="submit" className="flex-1 bg-indigo-600 text-white py-2 rounded-lg">Create</button>
235
+ </div>
236
+ </form>
237
+ </div>
238
+ </div>
239
+ )}
240
+ <div className="space-y-2">
241
+ {${lower}s.length === 0 ? <div className="glass rounded-lg p-4 text-center text-gray-400 text-sm">No ${lower}s yet</div> : ${lower}s.map(item => (
242
+ <div key={item.id} className="glass rounded-lg p-3 group flex justify-between">
243
+ <div className="grid grid-cols-4 gap-4 flex-1">
244
+ ${displayFields}
245
+ </div>
246
+ <button onClick={() => delete${s.name}(item.id)} className="opacity-0 group-hover:opacity-100 text-red-400 text-sm">šŸ—‘ļø</button>
247
+ </div>
248
+ ))}
249
+ </div>
250
+ </section>`;
251
+ }).join('\n');
252
+ return `// Generated by Helix v11.0 - Multi-Strand Dashboard
253
+ 'use client';
254
+ import { useState, useEffect } from 'react';
255
+ ${interfaces}
256
+ export default function Home() {
257
+ const [loading, setLoading] = useState(true);
258
+ ${states}
259
+ ${funcs}
260
+ useEffect(() => { ${fetchAll}; setLoading(false); }, []);
261
+ if (loading) return <main className="min-h-screen p-8 flex items-center justify-center"><div className="text-white animate-pulse">Loading...</div></main>;
262
+ return (
263
+ <main className="min-h-screen p-8">
264
+ <div className="max-w-6xl mx-auto">
265
+ <div className="mb-6">
266
+ <span className="text-sm text-indigo-400 font-mono">🧬 Helix</span>
267
+ <h1 className="text-3xl font-bold text-white">Dashboard</h1>
268
+ <p className="text-gray-400 text-sm">${ast.strands.length} data types</p>
269
+ </div>
270
+ ${sections}
271
+ </div>
272
+ </main>
273
+ );
274
+ }
275
+ `;
276
+ }
277
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function installComponent(componentId: string, projectPath?: string): Promise<void>;
2
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAwBA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G/F"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.installComponent = installComponent;
40
+ /**
41
+ * Helix Component Marketplace
42
+ * Install library components into a Helix project
43
+ */
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const chalk_1 = __importDefault(require("chalk"));
47
+ const child_process_1 = require("child_process");
48
+ async function installComponent(componentId, projectPath) {
49
+ const targetDir = projectPath || process.cwd();
50
+ const libraryDir = path.resolve(__dirname, '..', '..', 'library');
51
+ // List available if no component specified
52
+ if (componentId === 'list' || !componentId) {
53
+ listComponents(libraryDir);
54
+ return;
55
+ }
56
+ const componentDir = path.join(libraryDir, componentId);
57
+ if (!fs.existsSync(componentDir)) {
58
+ console.error(chalk_1.default.red(`Component "${componentId}" not found.`));
59
+ console.log(chalk_1.default.gray('Available components:'));
60
+ listComponents(libraryDir);
61
+ return;
62
+ }
63
+ // Read manifest
64
+ const manifestPath = path.join(componentDir, 'manifest.json');
65
+ if (!fs.existsSync(manifestPath)) {
66
+ console.error(chalk_1.default.red(`No manifest.json found in ${componentId}`));
67
+ return;
68
+ }
69
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
70
+ console.log(chalk_1.default.cyan(`\nšŸ“¦ Installing: ${manifest.name} v${manifest.version}`));
71
+ console.log(chalk_1.default.gray(` ${manifest.description}\n`));
72
+ // Copy component files
73
+ let filesCopied = 0;
74
+ // Copy API routes
75
+ if (manifest.files.api) {
76
+ for (const apiFile of manifest.files.api) {
77
+ const src = path.join(componentDir, apiFile);
78
+ const dest = path.join(targetDir, apiFile);
79
+ if (fs.existsSync(src)) {
80
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
81
+ fs.copyFileSync(src, dest);
82
+ console.log(chalk_1.default.green(` āœ… ${apiFile}`));
83
+ filesCopied++;
84
+ }
85
+ }
86
+ }
87
+ // Copy components
88
+ if (manifest.files.components) {
89
+ for (const compFile of manifest.files.components) {
90
+ const src = path.join(componentDir, compFile);
91
+ const dest = path.join(targetDir, compFile);
92
+ if (fs.existsSync(src)) {
93
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
94
+ fs.copyFileSync(src, dest);
95
+ console.log(chalk_1.default.green(` āœ… ${compFile}`));
96
+ filesCopied++;
97
+ }
98
+ }
99
+ }
100
+ // Merge Prisma schema if present
101
+ if (manifest.files.schema) {
102
+ const schemaSrc = path.join(componentDir, manifest.files.schema);
103
+ const schemaDest = path.join(targetDir, 'prisma', 'schema.prisma');
104
+ if (fs.existsSync(schemaSrc) && fs.existsSync(schemaDest)) {
105
+ const existingSchema = fs.readFileSync(schemaDest, 'utf-8');
106
+ const newModels = fs.readFileSync(schemaSrc, 'utf-8');
107
+ // Extract model blocks from the component schema
108
+ const modelBlocks = newModels.match(/model\s+\w+\s*\{[^}]+\}/g) || [];
109
+ let merged = existingSchema;
110
+ for (const block of modelBlocks) {
111
+ const modelName = block.match(/model\s+(\w+)/)?.[1];
112
+ if (modelName && !existingSchema.includes(`model ${modelName}`)) {
113
+ merged += '\n\n' + block;
114
+ console.log(chalk_1.default.green(` āœ… Prisma model: ${modelName}`));
115
+ }
116
+ else {
117
+ console.log(chalk_1.default.yellow(` āš ļø Prisma model ${modelName} already exists, skipping`));
118
+ }
119
+ }
120
+ fs.writeFileSync(schemaDest, merged);
121
+ }
122
+ else if (fs.existsSync(schemaSrc)) {
123
+ fs.mkdirSync(path.join(targetDir, 'prisma'), { recursive: true });
124
+ fs.copyFileSync(schemaSrc, path.join(targetDir, 'prisma', 'schema.prisma'));
125
+ console.log(chalk_1.default.green(` āœ… prisma/schema.prisma`));
126
+ }
127
+ }
128
+ // Install dependencies
129
+ if (manifest.dependencies && manifest.dependencies.length > 0) {
130
+ console.log(chalk_1.default.cyan(`\n šŸ“„ Installing dependencies: ${manifest.dependencies.join(', ')}`));
131
+ try {
132
+ (0, child_process_1.execSync)(`npm install ${manifest.dependencies.join(' ')}`, {
133
+ cwd: targetDir,
134
+ stdio: 'inherit'
135
+ });
136
+ console.log(chalk_1.default.green(' āœ… Dependencies installed'));
137
+ }
138
+ catch {
139
+ console.log(chalk_1.default.yellow(' āš ļø Some dependencies failed to install. Run npm install manually.'));
140
+ }
141
+ }
142
+ // Show instructions
143
+ if (manifest.instructions) {
144
+ console.log(chalk_1.default.cyan('\n šŸ“‹ Setup Instructions:'));
145
+ console.log(chalk_1.default.gray(' ' + manifest.instructions.replace(/\n/g, '\n ')));
146
+ }
147
+ console.log(chalk_1.default.green(`\n šŸŽ‰ Installed ${manifest.name} (${filesCopied} files)\n`));
148
+ }
149
+ function listComponents(libraryDir) {
150
+ if (!fs.existsSync(libraryDir)) {
151
+ console.log(chalk_1.default.yellow('No library directory found.'));
152
+ return;
153
+ }
154
+ const dirs = fs.readdirSync(libraryDir, { withFileTypes: true })
155
+ .filter(d => d.isDirectory());
156
+ console.log(chalk_1.default.cyan(`\nšŸ“š Helix Component Library (${dirs.length} packages):\n`));
157
+ for (const dir of dirs) {
158
+ const manifestPath = path.join(libraryDir, dir.name, 'manifest.json');
159
+ if (fs.existsSync(manifestPath)) {
160
+ try {
161
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
162
+ console.log(` ${chalk_1.default.green(manifest.name)} ${chalk_1.default.gray(`v${manifest.version}`)}`);
163
+ console.log(` ${chalk_1.default.gray(manifest.description)}`);
164
+ if (manifest.dependencies.length > 0) {
165
+ console.log(` ${chalk_1.default.gray('deps: ' + manifest.dependencies.join(', '))}`);
166
+ }
167
+ console.log('');
168
+ }
169
+ catch {
170
+ console.log(` ${chalk_1.default.yellow(dir.name)} ${chalk_1.default.gray('(invalid manifest)')}\n`);
171
+ }
172
+ }
173
+ }
174
+ console.log(chalk_1.default.gray(' Usage: helix install <component-name>\n'));
175
+ }
176
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ComponentManifest {
2
+ name: string;
3
+ version: string;
4
+ description: string;
5
+ author: string;
6
+ category: 'auth' | 'dashboard' | 'payment' | 'analytics' | 'other';
7
+ dependencies: string[];
8
+ files: {
9
+ schema?: string;
10
+ api: string[];
11
+ components: string[];
12
+ };
13
+ }
14
+ export interface ComponentSearchResult {
15
+ name: string;
16
+ description: string;
17
+ downloads: number;
18
+ rating: number;
19
+ }
20
+ export declare function searchComponents(query: string): Promise<ComponentSearchResult[]>;
21
+ export declare function installComponent(componentName: string, options?: {
22
+ theme?: string;
23
+ projectPath?: string;
24
+ }): Promise<void>;
25
+ export declare function listInstalledComponents(projectPath?: string): Promise<void>;
26
+ export declare function publishComponent(componentPath: string): Promise<void>;
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/library/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACnE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,UAAU,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACL;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAWD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAetF;AAED,wBAAsB,gBAAgB,CAClC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,IAAI,CAAC,CAmEf;AAED,wBAAsB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhG;AAED,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.searchComponents = searchComponents;
40
+ exports.installComponent = installComponent;
41
+ exports.listInstalledComponents = listInstalledComponents;
42
+ exports.publishComponent = publishComponent;
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const fs = __importStar(require("fs-extra"));
45
+ const path = __importStar(require("path"));
46
+ const COMPONENT_REGISTRY = [
47
+ { name: 'auth-flow', description: 'Complete authentication flow with login, registration, session middleware, and NextAuth config', downloads: 1250, rating: 4.8 },
48
+ { name: 'dashboard-analytics', description: 'Analytics dashboard with stats cards, line charts, activity feed, and summary grid', downloads: 980, rating: 4.6 },
49
+ { name: 'data-table', description: 'Sortable data table with pagination, search, column toggle, CSV export, and bulk actions', downloads: 1540, rating: 4.7 },
50
+ { name: 'file-upload', description: 'Drag-and-drop file upload with preview, progress tracking, and server-side handling', downloads: 870, rating: 4.5 },
51
+ { name: 'notification-system', description: 'Toast notifications, React context provider, SSE real-time updates, and bell icon badge', downloads: 1120, rating: 4.6 },
52
+ { name: 'stripe-checkout', description: 'Stripe payment integration', downloads: 2100, rating: 4.9 },
53
+ ];
54
+ async function searchComponents(query) {
55
+ console.log(chalk_1.default.cyan(`\nšŸ” Searching for: ${query}\n`));
56
+ const results = COMPONENT_REGISTRY.filter(comp => comp.name.includes(query.toLowerCase()) ||
57
+ comp.description.toLowerCase().includes(query.toLowerCase()));
58
+ results.forEach(comp => {
59
+ console.log(chalk_1.default.white(`šŸ“¦ ${comp.name}`));
60
+ console.log(chalk_1.default.gray(` ${comp.description}`));
61
+ console.log(chalk_1.default.gray(` ā¬‡ļø ${comp.downloads} downloads | ⭐ ${comp.rating}/5.0\n`));
62
+ });
63
+ return results;
64
+ }
65
+ async function installComponent(componentName, options = {}) {
66
+ const projectPath = options.projectPath || process.cwd();
67
+ const componentPath = path.join(__dirname, '../../library', componentName);
68
+ console.log(chalk_1.default.cyan(`\nšŸ“¦ Installing component: ${componentName}\n`));
69
+ // Check if component exists
70
+ if (!await fs.pathExists(componentPath)) {
71
+ console.log(chalk_1.default.red(`āŒ Component not found: ${componentName}`));
72
+ console.log(chalk_1.default.yellow(`Available components: ${COMPONENT_REGISTRY.map(c => c.name).join(', ')}`));
73
+ return;
74
+ }
75
+ // Read manifest
76
+ const manifest = await fs.readJSON(path.join(componentPath, 'manifest.json'));
77
+ console.log(chalk_1.default.gray(`šŸ“„ ${manifest.description}`));
78
+ console.log(chalk_1.default.gray(`šŸ‘¤ By: ${manifest.author}`));
79
+ console.log(chalk_1.default.gray(`šŸ·ļø Category: ${manifest.category}\n`));
80
+ // Copy components
81
+ if (manifest.files.components) {
82
+ for (const component of manifest.files.components) {
83
+ const sourcePath = path.join(componentPath, component);
84
+ const targetPath = path.join(projectPath, 'src', component);
85
+ await fs.ensureDir(path.dirname(targetPath));
86
+ await fs.copy(sourcePath, targetPath);
87
+ console.log(chalk_1.default.green(`āœ… Copied: ${component}`));
88
+ }
89
+ }
90
+ // Copy API routes
91
+ if (manifest.files.api) {
92
+ for (const apiRoute of manifest.files.api) {
93
+ const sourcePath = path.join(componentPath, apiRoute);
94
+ const targetPath = path.join(projectPath, 'src', apiRoute);
95
+ await fs.ensureDir(path.dirname(targetPath));
96
+ await fs.copy(sourcePath, targetPath);
97
+ console.log(chalk_1.default.green(`āœ… Copied: ${apiRoute}`));
98
+ }
99
+ }
100
+ // Merge schema if exists
101
+ if (manifest.files.schema) {
102
+ const schemaPath = path.join(componentPath, manifest.files.schema);
103
+ const targetSchemaPath = path.join(projectPath, 'prisma', 'schema.prisma');
104
+ if (await fs.pathExists(schemaPath)) {
105
+ const newSchema = await fs.readFile(schemaPath, 'utf-8');
106
+ let existingSchema = '';
107
+ if (await fs.pathExists(targetSchemaPath)) {
108
+ existingSchema = await fs.readFile(targetSchemaPath, 'utf-8');
109
+ }
110
+ // Simple merge - append new schema
111
+ await fs.writeFile(targetSchemaPath, `${existingSchema}\n\n${newSchema}`);
112
+ console.log(chalk_1.default.green(`āœ… Merged schema changes`));
113
+ }
114
+ }
115
+ console.log(chalk_1.default.green(`\nāœ… Component installed successfully!`));
116
+ console.log(chalk_1.default.yellow(`\nāš ļø Don't forget to run: npx prisma generate\n`));
117
+ }
118
+ async function listInstalledComponents(projectPath = process.cwd()) {
119
+ console.log(chalk_1.default.cyan('\nšŸ“¦ Installed Components:\n'));
120
+ console.log(chalk_1.default.gray('(Feature coming soon)\n'));
121
+ }
122
+ async function publishComponent(componentPath) {
123
+ console.log(chalk_1.default.cyan('\nšŸ“¤ Publishing component...\n'));
124
+ console.log(chalk_1.default.yellow('āš ļø Component publishing will be available in v11.0\n'));
125
+ }
126
+ //# sourceMappingURL=index.js.map