cmssy-cli 0.4.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +71 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/build.d.ts +6 -0
  8. package/dist/commands/build.d.ts.map +1 -0
  9. package/dist/commands/build.js +153 -0
  10. package/dist/commands/build.js.map +1 -0
  11. package/dist/commands/configure.d.ts +6 -0
  12. package/dist/commands/configure.d.ts.map +1 -0
  13. package/dist/commands/configure.js +42 -0
  14. package/dist/commands/configure.js.map +1 -0
  15. package/dist/commands/create.d.ts +8 -0
  16. package/dist/commands/create.d.ts.map +1 -0
  17. package/dist/commands/create.js +314 -0
  18. package/dist/commands/create.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +9 -0
  20. package/dist/commands/deploy.d.ts.map +1 -0
  21. package/dist/commands/deploy.js +226 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/dev.d.ts +6 -0
  24. package/dist/commands/dev.d.ts.map +1 -0
  25. package/dist/commands/dev.js +489 -0
  26. package/dist/commands/dev.js.map +1 -0
  27. package/dist/commands/init.d.ts +6 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +517 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/sync.d.ts +6 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +208 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/utils/blockforge-config.d.ts +19 -0
  36. package/dist/utils/blockforge-config.d.ts.map +1 -0
  37. package/dist/utils/blockforge-config.js +19 -0
  38. package/dist/utils/blockforge-config.js.map +1 -0
  39. package/dist/utils/cmssy-config.d.ts +19 -0
  40. package/dist/utils/cmssy-config.d.ts.map +1 -0
  41. package/dist/utils/cmssy-config.js +19 -0
  42. package/dist/utils/cmssy-config.js.map +1 -0
  43. package/dist/utils/config.d.ts +8 -0
  44. package/dist/utils/config.d.ts.map +1 -0
  45. package/dist/utils/config.js +45 -0
  46. package/dist/utils/config.js.map +1 -0
  47. package/dist/utils/graphql.d.ts +4 -0
  48. package/dist/utils/graphql.d.ts.map +1 -0
  49. package/dist/utils/graphql.js +26 -0
  50. package/dist/utils/graphql.js.map +1 -0
  51. package/package.json +66 -0
@@ -0,0 +1,489 @@
1
+ import chalk from "chalk";
2
+ import chokidar from "chokidar";
3
+ import { build } from "esbuild";
4
+ import { execSync } from "child_process";
5
+ import express from "express";
6
+ import fs from "fs-extra";
7
+ import ora from "ora";
8
+ import path from "path";
9
+ import { getPackageJson, loadConfig } from "../utils/cmssy-config.js";
10
+ export async function devCommand(options) {
11
+ const spinner = ora("Starting development server...").start();
12
+ try {
13
+ const config = await loadConfig();
14
+ const port = parseInt(options.port, 10);
15
+ // Scan for blocks and templates
16
+ const resources = await scanResources();
17
+ if (resources.length === 0) {
18
+ spinner.warn("No blocks or templates found");
19
+ console.log(chalk.yellow("\nCreate your first block:\n"));
20
+ console.log(chalk.white(" npx blockforge create block my-block\n"));
21
+ process.exit(0);
22
+ }
23
+ // Build all resources initially
24
+ spinner.text = "Building resources...";
25
+ await buildAllResources(resources, config);
26
+ // Create Express server
27
+ const app = express();
28
+ // SSE clients for hot reload
29
+ const sseClients = [];
30
+ // SSE endpoint for hot reload
31
+ app.get("/events", (req, res) => {
32
+ res.setHeader("Content-Type", "text/event-stream");
33
+ res.setHeader("Cache-Control", "no-cache");
34
+ res.setHeader("Connection", "keep-alive");
35
+ sseClients.push(res);
36
+ req.on("close", () => {
37
+ const index = sseClients.indexOf(res);
38
+ if (index !== -1)
39
+ sseClients.splice(index, 1);
40
+ });
41
+ });
42
+ // Setup file watcher with SSE notifications
43
+ const watcher = setupWatcher(resources, config, sseClients);
44
+ // Serve static files
45
+ app.use("/assets", express.static(path.join(process.cwd(), ".blockforge", "dev")));
46
+ // API endpoint to list resources
47
+ app.get("/api/resources", (_req, res) => {
48
+ const resourceList = resources.map((r) => ({
49
+ type: r.type,
50
+ name: r.name,
51
+ displayName: r.displayName,
52
+ description: r.description,
53
+ category: r.category,
54
+ }));
55
+ res.json(resourceList);
56
+ });
57
+ // Preview page for a specific resource
58
+ app.get("/preview/:type/:name", async (req, res) => {
59
+ const { type, name } = req.params;
60
+ const resource = resources.find((r) => r.type === type && r.name === name);
61
+ if (!resource) {
62
+ res.status(404).send("Resource not found");
63
+ return;
64
+ }
65
+ const html = generatePreviewHTML(resource, config);
66
+ res.send(html);
67
+ });
68
+ // Home page with resource list
69
+ app.get("/", (_req, res) => {
70
+ const html = generateIndexHTML(resources);
71
+ res.send(html);
72
+ });
73
+ // Start server
74
+ app.listen(port, () => {
75
+ spinner.succeed("Development server started");
76
+ console.log(chalk.green.bold("\n┌─────────────────────────────────────────┐"));
77
+ console.log(chalk.green.bold("│ Cmssy Dev Server │"));
78
+ console.log(chalk.green.bold("├─────────────────────────────────────────┤"));
79
+ console.log(chalk.green("│ │"));
80
+ const blocks = resources.filter((r) => r.type === "block");
81
+ const templates = resources.filter((r) => r.type === "template");
82
+ if (blocks.length > 0) {
83
+ console.log(chalk.cyan(`│ Blocks (${blocks.length}) │`));
84
+ blocks.forEach((block) => {
85
+ const url = `/preview/block/${block.name}`;
86
+ console.log(chalk.white(`│ ● ${block.displayName.padEnd(20)} ${url.padEnd(15)}│`));
87
+ });
88
+ console.log(chalk.green("│ │"));
89
+ }
90
+ if (templates.length > 0) {
91
+ console.log(chalk.cyan(`│ Templates (${templates.length}) │`));
92
+ templates.forEach((template) => {
93
+ const url = `/preview/template/${template.name}`;
94
+ console.log(chalk.white(`│ ● ${template.displayName.padEnd(20)} ${url.padEnd(15)}│`));
95
+ });
96
+ console.log(chalk.green("│ │"));
97
+ }
98
+ console.log(chalk.green(`│ Local: ${chalk.cyan(`http://localhost:${port}`).padEnd(36)}│`));
99
+ console.log(chalk.green("│ Hot reload enabled ✓ │"));
100
+ console.log(chalk.green.bold("└─────────────────────────────────────────┘\n"));
101
+ });
102
+ }
103
+ catch (error) {
104
+ spinner.fail("Failed to start development server");
105
+ console.error(chalk.red("Error:"), error);
106
+ process.exit(1);
107
+ }
108
+ }
109
+ async function scanResources() {
110
+ const resources = [];
111
+ // Scan blocks
112
+ const blocksDir = path.join(process.cwd(), "blocks");
113
+ if (fs.existsSync(blocksDir)) {
114
+ const blockDirs = fs
115
+ .readdirSync(blocksDir, { withFileTypes: true })
116
+ .filter((dirent) => dirent.isDirectory())
117
+ .map((dirent) => dirent.name);
118
+ for (const blockName of blockDirs) {
119
+ const blockPath = path.join(blocksDir, blockName);
120
+ const pkg = getPackageJson(blockPath);
121
+ if (!pkg || !pkg.blockforge)
122
+ continue;
123
+ const previewPath = path.join(blockPath, "preview.json");
124
+ const previewData = fs.existsSync(previewPath)
125
+ ? fs.readJsonSync(previewPath)
126
+ : pkg.blockforge.defaultContent || {};
127
+ resources.push({
128
+ type: "block",
129
+ name: blockName,
130
+ path: blockPath,
131
+ displayName: pkg.blockforge.displayName || blockName,
132
+ description: pkg.description,
133
+ category: pkg.blockforge.category,
134
+ previewData,
135
+ });
136
+ }
137
+ }
138
+ // Scan templates
139
+ const templatesDir = path.join(process.cwd(), "templates");
140
+ if (fs.existsSync(templatesDir)) {
141
+ const templateDirs = fs
142
+ .readdirSync(templatesDir, { withFileTypes: true })
143
+ .filter((dirent) => dirent.isDirectory())
144
+ .map((dirent) => dirent.name);
145
+ for (const templateName of templateDirs) {
146
+ const templatePath = path.join(templatesDir, templateName);
147
+ const pkg = getPackageJson(templatePath);
148
+ if (!pkg || !pkg.blockforge)
149
+ continue;
150
+ const previewPath = path.join(templatePath, "preview.json");
151
+ const previewData = fs.existsSync(previewPath)
152
+ ? fs.readJsonSync(previewPath)
153
+ : pkg.blockforge.defaultContent || {};
154
+ resources.push({
155
+ type: "template",
156
+ name: templateName,
157
+ path: templatePath,
158
+ displayName: pkg.blockforge.displayName || templateName,
159
+ description: pkg.description,
160
+ category: pkg.blockforge.category,
161
+ previewData,
162
+ });
163
+ }
164
+ }
165
+ return resources;
166
+ }
167
+ async function buildAllResources(resources, config) {
168
+ const devDir = path.join(process.cwd(), ".blockforge", "dev");
169
+ fs.ensureDirSync(devDir);
170
+ for (const resource of resources) {
171
+ await buildResource(resource, config, devDir);
172
+ }
173
+ }
174
+ async function buildResource(resource, config, outDir) {
175
+ const srcPath = path.join(resource.path, "src");
176
+ const entryPoint = config.framework === "react"
177
+ ? path.join(srcPath, "index.tsx")
178
+ : path.join(srcPath, "index.ts");
179
+ if (!fs.existsSync(entryPoint)) {
180
+ console.warn(chalk.yellow(`Warning: Entry point not found for ${resource.name}`));
181
+ return;
182
+ }
183
+ const outFile = path.join(outDir, `${resource.type}.${resource.name}.js`);
184
+ try {
185
+ await build({
186
+ entryPoints: [entryPoint],
187
+ bundle: true,
188
+ format: "esm",
189
+ outfile: outFile,
190
+ jsx: "transform",
191
+ minify: false,
192
+ sourcemap: true,
193
+ target: "es2020",
194
+ external: ["*.css"],
195
+ });
196
+ // Process CSS with PostCSS if exists
197
+ const cssPath = path.join(srcPath, "index.css");
198
+ if (fs.existsSync(cssPath)) {
199
+ const outCssFile = path.join(outDir, `${resource.type}.${resource.name}.css`);
200
+ // Check if postcss.config.js exists (Tailwind enabled)
201
+ const postcssConfigPath = path.join(process.cwd(), "postcss.config.js");
202
+ if (fs.existsSync(postcssConfigPath)) {
203
+ // Use PostCSS to process CSS (includes Tailwind)
204
+ try {
205
+ execSync(`npx postcss "${cssPath}" -o "${outCssFile}"`, {
206
+ stdio: "pipe",
207
+ cwd: process.cwd(),
208
+ });
209
+ }
210
+ catch (error) {
211
+ console.warn(chalk.yellow(`Warning: PostCSS processing failed for ${resource.name}: ${error.message}`));
212
+ console.log(chalk.gray("Copying CSS as-is..."));
213
+ fs.copyFileSync(cssPath, outCssFile);
214
+ }
215
+ }
216
+ else {
217
+ // No PostCSS config - just copy CSS
218
+ fs.copyFileSync(cssPath, outCssFile);
219
+ }
220
+ }
221
+ }
222
+ catch (error) {
223
+ console.error(chalk.red(`Build error for ${resource.name}:`), error);
224
+ }
225
+ }
226
+ function setupWatcher(resources, config, sseClients) {
227
+ const devDir = path.join(process.cwd(), ".blockforge", "dev");
228
+ // Watch directories directly instead of globs (globs don't work reliably in chokidar)
229
+ const watchPaths = [];
230
+ const blocksDir = path.join(process.cwd(), "blocks");
231
+ const templatesDir = path.join(process.cwd(), "templates");
232
+ if (fs.existsSync(blocksDir))
233
+ watchPaths.push(blocksDir);
234
+ if (fs.existsSync(templatesDir))
235
+ watchPaths.push(templatesDir);
236
+ console.log(chalk.gray(`\nSetting up watcher for:`));
237
+ watchPaths.forEach((p) => console.log(chalk.gray(` ${p}`)));
238
+ const watcher = chokidar.watch(watchPaths, {
239
+ persistent: true,
240
+ ignoreInitial: true,
241
+ awaitWriteFinish: {
242
+ stabilityThreshold: 100,
243
+ pollInterval: 100,
244
+ },
245
+ });
246
+ // Debug: log all watcher events
247
+ watcher.on("add", (filepath) => {
248
+ console.log(chalk.gray(`File added: ${filepath}`));
249
+ });
250
+ watcher.on("change", async (filepath) => {
251
+ console.log(chalk.yellow(`\n📝 File changed: ${filepath}`));
252
+ // Extract resource name from path (e.g., "blocks/hero/src/Hero.tsx" -> "hero")
253
+ const pathParts = filepath.split(path.sep);
254
+ const blockOrTemplateIndex = pathParts.indexOf("blocks") !== -1
255
+ ? pathParts.indexOf("blocks")
256
+ : pathParts.indexOf("templates");
257
+ if (blockOrTemplateIndex === -1)
258
+ return;
259
+ const resourceName = pathParts[blockOrTemplateIndex + 1];
260
+ const resource = resources.find((r) => r.name === resourceName);
261
+ if (resource) {
262
+ console.log(chalk.blue(`♻ Rebuilding ${resource.name}...`));
263
+ await buildResource(resource, config, devDir);
264
+ console.log(chalk.green(`✓ ${resource.name} rebuilt\n`));
265
+ // Notify SSE clients to reload
266
+ sseClients.forEach((client) => {
267
+ try {
268
+ client.write(`data: ${JSON.stringify({ type: "reload" })}\n\n`);
269
+ }
270
+ catch (error) {
271
+ // Client disconnected
272
+ }
273
+ });
274
+ }
275
+ else {
276
+ console.log(chalk.yellow(`Warning: Could not find resource for ${filepath}`));
277
+ }
278
+ });
279
+ watcher.on("ready", () => {
280
+ const watched = watcher.getWatched();
281
+ console.log(chalk.gray("\nFile watcher ready. Watching:"));
282
+ Object.keys(watched).forEach((dir) => {
283
+ if (watched[dir].length > 0) {
284
+ console.log(chalk.gray(` ${dir}/`));
285
+ }
286
+ });
287
+ });
288
+ watcher.on("error", (error) => {
289
+ console.error(chalk.red("Watcher error:"), error);
290
+ });
291
+ return watcher;
292
+ }
293
+ function generateIndexHTML(resources) {
294
+ const blocks = resources.filter((r) => r.type === "block");
295
+ const templates = resources.filter((r) => r.type === "template");
296
+ return `
297
+ <!DOCTYPE html>
298
+ <html lang="en">
299
+ <head>
300
+ <meta charset="UTF-8">
301
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
302
+ <title>Cmssy Dev Server</title>
303
+ <style>
304
+ * { margin: 0; padding: 0; box-sizing: border-box; }
305
+ body {
306
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
307
+ background: #f5f5f5;
308
+ padding: 2rem;
309
+ }
310
+ .container { max-width: 1200px; margin: 0 auto; }
311
+ h1 { font-size: 2.5rem; margin-bottom: 0.5rem; }
312
+ .subtitle { color: #666; margin-bottom: 3rem; }
313
+ .section { margin-bottom: 3rem; }
314
+ .section-title { font-size: 1.5rem; margin-bottom: 1rem; color: #333; }
315
+ .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1.5rem; }
316
+ .card {
317
+ background: white;
318
+ border-radius: 8px;
319
+ padding: 1.5rem;
320
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
321
+ transition: transform 0.2s, box-shadow 0.2s;
322
+ }
323
+ .card:hover {
324
+ transform: translateY(-4px);
325
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
326
+ }
327
+ .card-title { font-size: 1.25rem; margin-bottom: 0.5rem; }
328
+ .card-desc { color: #666; font-size: 0.9rem; margin-bottom: 1rem; }
329
+ .card-category {
330
+ display: inline-block;
331
+ padding: 0.25rem 0.75rem;
332
+ background: #e3f2fd;
333
+ color: #1976d2;
334
+ border-radius: 4px;
335
+ font-size: 0.8rem;
336
+ margin-bottom: 1rem;
337
+ }
338
+ .card-link {
339
+ display: inline-block;
340
+ padding: 0.5rem 1rem;
341
+ background: #667eea;
342
+ color: white;
343
+ text-decoration: none;
344
+ border-radius: 4px;
345
+ font-weight: 500;
346
+ }
347
+ .card-link:hover { background: #5568d3; }
348
+ .empty {
349
+ text-align: center;
350
+ padding: 3rem;
351
+ color: #999;
352
+ }
353
+ </style>
354
+ </head>
355
+ <body>
356
+ <div class="container">
357
+ <h1>🔨 Cmssy</h1>
358
+ <p class="subtitle">Development Server</p>
359
+
360
+ ${blocks.length > 0
361
+ ? `
362
+ <div class="section">
363
+ <h2 class="section-title">Blocks (${blocks.length})</h2>
364
+ <div class="grid">
365
+ ${blocks
366
+ .map((block) => `
367
+ <div class="card">
368
+ <h3 class="card-title">${block.displayName}</h3>
369
+ ${block.description
370
+ ? `<p class="card-desc">${block.description}</p>`
371
+ : ""}
372
+ ${block.category
373
+ ? `<div class="card-category">${block.category}</div>`
374
+ : ""}
375
+ <a href="/preview/block/${block.name}" class="card-link">Preview →</a>
376
+ </div>
377
+ `)
378
+ .join("")}
379
+ </div>
380
+ </div>
381
+ `
382
+ : '<div class="empty">No blocks found. Create one with: <code>npx blockforge create block my-block</code></div>'}
383
+
384
+ ${templates.length > 0
385
+ ? `
386
+ <div class="section">
387
+ <h2 class="section-title">Templates (${templates.length})</h2>
388
+ <div class="grid">
389
+ ${templates
390
+ .map((template) => `
391
+ <div class="card">
392
+ <h3 class="card-title">${template.displayName}</h3>
393
+ ${template.description
394
+ ? `<p class="card-desc">${template.description}</p>`
395
+ : ""}
396
+ <a href="/preview/template/${template.name}" class="card-link">Preview →</a>
397
+ </div>
398
+ `)
399
+ .join("")}
400
+ </div>
401
+ </div>
402
+ `
403
+ : ""}
404
+ </div>
405
+ </body>
406
+ </html>
407
+ `;
408
+ }
409
+ function generatePreviewHTML(resource, config) {
410
+ const timestamp = Date.now();
411
+ const jsPath = `/assets/${resource.type}.${resource.name}.js?v=${timestamp}`;
412
+ const cssPath = `/assets/${resource.type}.${resource.name}.css?v=${timestamp}`;
413
+ return `
414
+ <!DOCTYPE html>
415
+ <html lang="en">
416
+ <head>
417
+ <meta charset="UTF-8">
418
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
419
+ <title>${resource.displayName} - Preview</title>
420
+ <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
421
+ <meta http-equiv="Pragma" content="no-cache">
422
+ <meta http-equiv="Expires" content="0">
423
+ <link rel="stylesheet" href="${cssPath}">
424
+ <style>
425
+ * { margin: 0; padding: 0; box-sizing: border-box; }
426
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
427
+ .preview-header {
428
+ position: fixed;
429
+ top: 0;
430
+ left: 0;
431
+ right: 0;
432
+ background: white;
433
+ border-bottom: 1px solid #e0e0e0;
434
+ padding: 1rem 2rem;
435
+ z-index: 1000;
436
+ display: flex;
437
+ justify-content: space-between;
438
+ align-items: center;
439
+ }
440
+ .preview-title {
441
+ font-size: 1.25rem;
442
+ font-weight: 600;
443
+ }
444
+ .preview-back {
445
+ color: #667eea;
446
+ text-decoration: none;
447
+ font-weight: 500;
448
+ }
449
+ .preview-container {
450
+ margin-top: 60px;
451
+ min-height: calc(100vh - 60px);
452
+ }
453
+ </style>
454
+ </head>
455
+ <body>
456
+ <div class="preview-header">
457
+ <div class="preview-title">${resource.displayName}</div>
458
+ <a href="/" class="preview-back">← Back to Home</a>
459
+ </div>
460
+ <div class="preview-container">
461
+ <div id="preview-root"></div>
462
+ </div>
463
+
464
+ <script type="module">
465
+ import module from '${jsPath}';
466
+ const element = document.getElementById('preview-root');
467
+ const props = ${JSON.stringify(resource.previewData)};
468
+ module.mount(element, props);
469
+ </script>
470
+
471
+ <!-- Hot Reload SSE -->
472
+ <script>
473
+ const evtSource = new EventSource('/events');
474
+ evtSource.onmessage = function(event) {
475
+ const data = JSON.parse(event.data);
476
+ if (data.type === 'reload') {
477
+ console.log('🔄 Hot reload: Changes detected, reloading...');
478
+ window.location.reload();
479
+ }
480
+ };
481
+ evtSource.onerror = function() {
482
+ console.warn('SSE connection lost, retrying...');
483
+ };
484
+ </script>
485
+ </body>
486
+ </html>
487
+ `;
488
+ }
489
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface InitOptions {
2
+ framework: string;
3
+ }
4
+ export declare function initCommand(name?: string, options?: InitOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,iBAijBrE"}