@solidnumber/cli 1.5.0 → 1.6.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 (89) hide show
  1. package/README.md +41 -5
  2. package/dist/__tests__/commands/auth.test.d.ts +6 -0
  3. package/dist/__tests__/commands/auth.test.d.ts.map +1 -0
  4. package/dist/__tests__/commands/auth.test.js +91 -0
  5. package/dist/__tests__/commands/auth.test.js.map +1 -0
  6. package/dist/__tests__/commands/billing.test.d.ts +6 -0
  7. package/dist/__tests__/commands/billing.test.d.ts.map +1 -0
  8. package/dist/__tests__/commands/billing.test.js +141 -0
  9. package/dist/__tests__/commands/billing.test.js.map +1 -0
  10. package/dist/__tests__/commands/company.test.d.ts +6 -0
  11. package/dist/__tests__/commands/company.test.d.ts.map +1 -0
  12. package/dist/__tests__/commands/company.test.js +129 -0
  13. package/dist/__tests__/commands/company.test.js.map +1 -0
  14. package/dist/__tests__/commands/import.test.d.ts +4 -0
  15. package/dist/__tests__/commands/import.test.d.ts.map +1 -0
  16. package/dist/__tests__/commands/import.test.js +71 -0
  17. package/dist/__tests__/commands/import.test.js.map +1 -0
  18. package/dist/__tests__/commands/pages.test.d.ts +5 -0
  19. package/dist/__tests__/commands/pages.test.d.ts.map +1 -0
  20. package/dist/__tests__/commands/pages.test.js +103 -0
  21. package/dist/__tests__/commands/pages.test.js.map +1 -0
  22. package/dist/__tests__/commands/push.test.d.ts +6 -0
  23. package/dist/__tests__/commands/push.test.d.ts.map +1 -0
  24. package/dist/__tests__/commands/push.test.js +113 -0
  25. package/dist/__tests__/commands/push.test.js.map +1 -0
  26. package/dist/__tests__/commands/sandbox.test.d.ts +5 -0
  27. package/dist/__tests__/commands/sandbox.test.d.ts.map +1 -0
  28. package/dist/__tests__/commands/sandbox.test.js +132 -0
  29. package/dist/__tests__/commands/sandbox.test.js.map +1 -0
  30. package/dist/__tests__/commands/serve.test.d.ts +5 -0
  31. package/dist/__tests__/commands/serve.test.d.ts.map +1 -0
  32. package/dist/__tests__/commands/serve.test.js +115 -0
  33. package/dist/__tests__/commands/serve.test.js.map +1 -0
  34. package/dist/__tests__/commands/site.test.d.ts +5 -0
  35. package/dist/__tests__/commands/site.test.d.ts.map +1 -0
  36. package/dist/__tests__/commands/site.test.js +92 -0
  37. package/dist/__tests__/commands/site.test.js.map +1 -0
  38. package/dist/__tests__/integration/smoke.test.d.ts +7 -0
  39. package/dist/__tests__/integration/smoke.test.d.ts.map +1 -0
  40. package/dist/__tests__/integration/smoke.test.js +135 -0
  41. package/dist/__tests__/integration/smoke.test.js.map +1 -0
  42. package/dist/__tests__/lib/api-client.test.d.ts +6 -0
  43. package/dist/__tests__/lib/api-client.test.d.ts.map +1 -0
  44. package/dist/__tests__/lib/api-client.test.js +74 -0
  45. package/dist/__tests__/lib/api-client.test.js.map +1 -0
  46. package/dist/__tests__/lib/company-isolation.test.d.ts +19 -0
  47. package/dist/__tests__/lib/company-isolation.test.d.ts.map +1 -0
  48. package/dist/__tests__/lib/company-isolation.test.js +96 -0
  49. package/dist/__tests__/lib/company-isolation.test.js.map +1 -0
  50. package/dist/__tests__/lib/config.test.d.ts +6 -0
  51. package/dist/__tests__/lib/config.test.d.ts.map +1 -0
  52. package/dist/__tests__/lib/config.test.js +131 -0
  53. package/dist/__tests__/lib/config.test.js.map +1 -0
  54. package/dist/__tests__/setup.d.ts +4 -0
  55. package/dist/__tests__/setup.d.ts.map +1 -0
  56. package/dist/__tests__/setup.js +25 -0
  57. package/dist/__tests__/setup.js.map +1 -0
  58. package/dist/commands/company.js +93 -25
  59. package/dist/commands/company.js.map +1 -1
  60. package/dist/commands/diff.d.ts +14 -0
  61. package/dist/commands/diff.d.ts.map +1 -0
  62. package/dist/commands/diff.js +286 -0
  63. package/dist/commands/diff.js.map +1 -0
  64. package/dist/commands/import.d.ts +14 -0
  65. package/dist/commands/import.d.ts.map +1 -0
  66. package/dist/commands/import.js +552 -0
  67. package/dist/commands/import.js.map +1 -0
  68. package/dist/commands/open.d.ts +15 -0
  69. package/dist/commands/open.d.ts.map +1 -0
  70. package/dist/commands/open.js +179 -0
  71. package/dist/commands/open.js.map +1 -0
  72. package/dist/commands/sandbox.d.ts +15 -0
  73. package/dist/commands/sandbox.d.ts.map +1 -0
  74. package/dist/commands/sandbox.js +321 -0
  75. package/dist/commands/sandbox.js.map +1 -0
  76. package/dist/commands/serve.d.ts +19 -0
  77. package/dist/commands/serve.d.ts.map +1 -0
  78. package/dist/commands/serve.js +449 -0
  79. package/dist/commands/serve.js.map +1 -0
  80. package/dist/commands/watch.d.ts +15 -0
  81. package/dist/commands/watch.d.ts.map +1 -0
  82. package/dist/commands/watch.js +252 -0
  83. package/dist/commands/watch.js.map +1 -0
  84. package/dist/index.js +12 -0
  85. package/dist/index.js.map +1 -1
  86. package/dist/lib/api-client.d.ts.map +1 -1
  87. package/dist/lib/api-client.js +9 -4
  88. package/dist/lib/api-client.js.map +1 -1
  89. package/package.json +8 -2
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ /**
3
+ * Open command for Solid CLI
4
+ *
5
+ * Opens the web dashboard for a specific page, site, or section.
6
+ * Bridge between local CLI workflow and the web WYSIWYG builder.
7
+ *
8
+ * solid open home → Open page builder for "home" page
9
+ * solid open home --preview → Open public preview
10
+ * solid open home --editor → Open code editor view
11
+ * solid open --dashboard → Open CMS dashboard
12
+ * solid open --sites → Open sites manager
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.openCommand = void 0;
52
+ const commander_1 = require("commander");
53
+ const chalk_1 = __importDefault(require("chalk"));
54
+ const fs = __importStar(require("fs"));
55
+ const path = __importStar(require("path"));
56
+ const config_1 = require("../lib/config");
57
+ const api_client_1 = require("../lib/api-client");
58
+ // Cross-platform browser open
59
+ async function openBrowser(url) {
60
+ const { exec } = await Promise.resolve().then(() => __importStar(require('child_process')));
61
+ const platform = process.platform;
62
+ const cmd = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
63
+ exec(`${cmd} "${url}"`);
64
+ }
65
+ exports.openCommand = new commander_1.Command('open')
66
+ .description('Open pages, sites, or dashboard in the web builder')
67
+ .argument('[slug]', 'Page slug to open (e.g., "home", "pricing")')
68
+ .option('--preview', 'Open the public preview URL')
69
+ .option('--editor', 'Open the code editor (not drag-drop builder)')
70
+ .option('--dashboard', 'Open the CMS dashboard')
71
+ .option('--sites', 'Open sites manager')
72
+ .option('--settings', 'Open CMS settings')
73
+ .option('--analytics', 'Open CMS analytics')
74
+ .action(async (slug, options) => {
75
+ if (!config_1.config.isLoggedIn()) {
76
+ console.error(chalk_1.default.red('Not logged in. Run `solid auth login` first.'));
77
+ process.exit(1);
78
+ }
79
+ const apiUrl = config_1.config.apiUrl;
80
+ // Derive app URL from API URL
81
+ const appUrl = apiUrl.replace('api.', 'app.').replace('/api/v1', '').replace(':8090', ':3000');
82
+ // Dashboard shortcuts (no slug needed)
83
+ if (options.dashboard) {
84
+ const url = `${appUrl}/dashboard/cms`;
85
+ console.log(chalk_1.default.dim(`Opening: ${url}`));
86
+ await openBrowser(url);
87
+ return;
88
+ }
89
+ if (options.sites) {
90
+ const url = `${appUrl}/dashboard/cms/builder`;
91
+ console.log(chalk_1.default.dim(`Opening: ${url}`));
92
+ await openBrowser(url);
93
+ return;
94
+ }
95
+ if (options.settings) {
96
+ const url = `${appUrl}/dashboard/cms/settings`;
97
+ console.log(chalk_1.default.dim(`Opening: ${url}`));
98
+ await openBrowser(url);
99
+ return;
100
+ }
101
+ if (options.analytics) {
102
+ const url = `${appUrl}/dashboard/cms/analytics`;
103
+ console.log(chalk_1.default.dim(`Opening: ${url}`));
104
+ await openBrowser(url);
105
+ return;
106
+ }
107
+ if (!slug) {
108
+ console.error(chalk_1.default.red('Provide a page slug or use --dashboard, --sites, --settings, --analytics'));
109
+ console.log(chalk_1.default.dim(' solid open home Open page builder'));
110
+ console.log(chalk_1.default.dim(' solid open home --preview Open public preview'));
111
+ console.log(chalk_1.default.dim(' solid open --dashboard Open CMS dashboard'));
112
+ process.exit(1);
113
+ }
114
+ // Find page ID from slug — check local manifest first, then API
115
+ let pageId = null;
116
+ // Try local manifest
117
+ const manifestPath = path.join(process.cwd(), '.solid', 'manifest.json');
118
+ if (fs.existsSync(manifestPath)) {
119
+ try {
120
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
121
+ const fileName = `${slug}.json`;
122
+ if (manifest.pages?.[fileName]) {
123
+ pageId = manifest.pages[fileName].id;
124
+ }
125
+ }
126
+ catch { /* ignore */ }
127
+ }
128
+ // Fallback: search local pages/ directory
129
+ if (!pageId) {
130
+ const pagesDir = path.join(process.cwd(), 'pages');
131
+ if (fs.existsSync(pagesDir)) {
132
+ const pageFile = path.join(pagesDir, `${slug}.json`);
133
+ if (fs.existsSync(pageFile)) {
134
+ try {
135
+ const page = JSON.parse(fs.readFileSync(pageFile, 'utf-8'));
136
+ pageId = page._id || page.id;
137
+ }
138
+ catch { /* ignore */ }
139
+ }
140
+ }
141
+ }
142
+ // Fallback: query API by slug
143
+ if (!pageId) {
144
+ try {
145
+ const response = await api_client_1.apiClient.pagesList();
146
+ const pages = response.data?.pages || [];
147
+ const match = pages.find((p) => p.slug === slug);
148
+ if (match) {
149
+ pageId = match.id;
150
+ }
151
+ }
152
+ catch (error) {
153
+ const err = (0, api_client_1.handleApiError)(error);
154
+ console.error(chalk_1.default.red(`API error: ${err.message}`));
155
+ process.exit(1);
156
+ }
157
+ }
158
+ if (!pageId) {
159
+ console.error(chalk_1.default.red(`Page "${slug}" not found. Run \`solid pages list\` to see available pages.`));
160
+ process.exit(1);
161
+ }
162
+ // Build URL based on mode
163
+ let url;
164
+ if (options.preview) {
165
+ // Public preview — tenant site
166
+ url = `${appUrl.replace('app.', '')}/${slug}`;
167
+ }
168
+ else if (options.editor) {
169
+ url = `${appUrl}/dashboard/cms/pages/edit/${pageId}`;
170
+ }
171
+ else {
172
+ // Default: visual builder
173
+ url = `${appUrl}/dashboard/cms/builder/${pageId}`;
174
+ }
175
+ console.log(chalk_1.default.green(`Opening ${options.preview ? 'preview' : options.editor ? 'editor' : 'builder'} for "${slug}"`));
176
+ console.log(chalk_1.default.dim(url));
177
+ await openBrowser(url);
178
+ });
179
+ //# sourceMappingURL=open.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Sandbox command for Solid CLI
3
+ *
4
+ * Isolated testing environment — fork the live site, make changes safely,
5
+ * preview, diff, and promote to production when ready.
6
+ *
7
+ * solid sandbox create → Fork current site into sandbox
8
+ * solid sandbox status → Show sandbox state and changes
9
+ * solid sandbox diff → Compare sandbox vs production
10
+ * solid sandbox push → Promote sandbox → production
11
+ * solid sandbox reset → Discard sandbox, back to production state
12
+ */
13
+ import { Command } from 'commander';
14
+ export declare const sandboxCommand: Command;
15
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,cAAc,SAC6B,CAAC"}
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ /**
3
+ * Sandbox command for Solid CLI
4
+ *
5
+ * Isolated testing environment — fork the live site, make changes safely,
6
+ * preview, diff, and promote to production when ready.
7
+ *
8
+ * solid sandbox create → Fork current site into sandbox
9
+ * solid sandbox status → Show sandbox state and changes
10
+ * solid sandbox diff → Compare sandbox vs production
11
+ * solid sandbox push → Promote sandbox → production
12
+ * solid sandbox reset → Discard sandbox, back to production state
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.sandboxCommand = void 0;
52
+ const commander_1 = require("commander");
53
+ const ora_1 = __importDefault(require("ora"));
54
+ const chalk_1 = __importDefault(require("chalk"));
55
+ const fs = __importStar(require("fs"));
56
+ const path = __importStar(require("path"));
57
+ const SANDBOX_DIR = '.sandbox';
58
+ const SANDBOX_META = '.sandbox/meta.json';
59
+ exports.sandboxCommand = new commander_1.Command('sandbox')
60
+ .description('Isolated sandbox for safe site editing');
61
+ // ── Create ──────────────────────────────────────────────────────────
62
+ exports.sandboxCommand
63
+ .command('create')
64
+ .description('Fork current site into a sandbox')
65
+ .option('--dir <path>', 'Working directory', process.cwd())
66
+ .action(async (options) => {
67
+ const dir = options.dir;
68
+ const sandboxPath = path.join(dir, SANDBOX_DIR);
69
+ const manifestPath = path.join(dir, '.solid', 'manifest.json');
70
+ if (!fs.existsSync(manifestPath)) {
71
+ console.error(chalk_1.default.red('No pulled site found. Run `solid pull` first.'));
72
+ process.exit(1);
73
+ }
74
+ if (fs.existsSync(path.join(sandboxPath, 'meta.json'))) {
75
+ console.error(chalk_1.default.red('Sandbox already exists. Run `solid sandbox reset` to discard it first.'));
76
+ process.exit(1);
77
+ }
78
+ const spinner = (0, ora_1.default)('Creating sandbox...').start();
79
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
80
+ // Create sandbox directory
81
+ fs.mkdirSync(sandboxPath, { recursive: true });
82
+ // Copy pages/
83
+ const pagesDir = path.join(dir, 'pages');
84
+ const sandboxPages = path.join(sandboxPath, 'pages');
85
+ if (fs.existsSync(pagesDir)) {
86
+ fs.mkdirSync(sandboxPages, { recursive: true });
87
+ for (const f of fs.readdirSync(pagesDir)) {
88
+ fs.copyFileSync(path.join(pagesDir, f), path.join(sandboxPages, f));
89
+ }
90
+ }
91
+ // Copy kb/
92
+ const kbDir = path.join(dir, 'kb');
93
+ const sandboxKb = path.join(sandboxPath, 'kb');
94
+ if (fs.existsSync(kbDir)) {
95
+ fs.mkdirSync(sandboxKb, { recursive: true });
96
+ for (const f of fs.readdirSync(kbDir)) {
97
+ fs.copyFileSync(path.join(kbDir, f), path.join(sandboxKb, f));
98
+ }
99
+ }
100
+ // Copy config
101
+ const configPath = path.join(dir, 'solid.config.json');
102
+ if (fs.existsSync(configPath)) {
103
+ fs.copyFileSync(configPath, path.join(sandboxPath, 'solid.config.json'));
104
+ }
105
+ // Save sandbox metadata
106
+ const meta = {
107
+ created_at: new Date().toISOString(),
108
+ forked_from: dir,
109
+ company_id: manifest.company_id,
110
+ company_name: manifest.company_name,
111
+ original_manifest: manifest,
112
+ };
113
+ fs.writeFileSync(path.join(sandboxPath, 'meta.json'), JSON.stringify(meta, null, 2), 'utf-8');
114
+ // Copy manifest
115
+ fs.mkdirSync(path.join(sandboxPath, '.solid'), { recursive: true });
116
+ fs.copyFileSync(manifestPath, path.join(sandboxPath, '.solid', 'manifest.json'));
117
+ const pageCount = fs.existsSync(sandboxPages) ? fs.readdirSync(sandboxPages).filter(f => f.endsWith('.json')).length : 0;
118
+ const kbCount = fs.existsSync(sandboxKb) ? fs.readdirSync(sandboxKb).filter(f => f.endsWith('.md')).length : 0;
119
+ spinner.succeed('Sandbox created');
120
+ console.log('');
121
+ console.log(` ${chalk_1.default.bold('Sandbox')} — ${manifest.company_name}`);
122
+ console.log(` ${chalk_1.default.dim('Pages:')} ${pageCount} ${chalk_1.default.dim('KB:')} ${kbCount}`);
123
+ console.log('');
124
+ console.log(chalk_1.default.dim(' Edit files in .sandbox/ — your main files are untouched.'));
125
+ console.log(chalk_1.default.dim(' solid sandbox status See changes'));
126
+ console.log(chalk_1.default.dim(' solid sandbox diff Compare to production'));
127
+ console.log(chalk_1.default.dim(' solid serve --dir .sandbox Preview sandbox'));
128
+ console.log(chalk_1.default.dim(' solid sandbox push Promote to production'));
129
+ console.log(chalk_1.default.dim(' solid sandbox reset Discard sandbox'));
130
+ });
131
+ // ── Status ──────────────────────────────────────────────────────────
132
+ exports.sandboxCommand
133
+ .command('status')
134
+ .description('Show sandbox state and what changed')
135
+ .option('--dir <path>', 'Working directory', process.cwd())
136
+ .action(async (options) => {
137
+ const dir = options.dir;
138
+ const metaPath = path.join(dir, SANDBOX_META);
139
+ if (!fs.existsSync(metaPath)) {
140
+ console.log(chalk_1.default.dim('No active sandbox. Run `solid sandbox create` to start one.'));
141
+ return;
142
+ }
143
+ const meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
144
+ const sandboxPath = path.join(dir, SANDBOX_DIR);
145
+ // Count changes
146
+ let pagesChanged = 0;
147
+ let pagesNew = 0;
148
+ let kbChanged = 0;
149
+ let kbNew = 0;
150
+ // Compare sandbox pages vs original
151
+ const sandboxPages = path.join(sandboxPath, 'pages');
152
+ const origPages = path.join(dir, 'pages');
153
+ if (fs.existsSync(sandboxPages)) {
154
+ for (const f of fs.readdirSync(sandboxPages).filter(f => f.endsWith('.json'))) {
155
+ const origFile = path.join(origPages, f);
156
+ const sandboxFile = path.join(sandboxPages, f);
157
+ if (!fs.existsSync(origFile)) {
158
+ pagesNew++;
159
+ }
160
+ else if (fs.readFileSync(origFile, 'utf-8') !== fs.readFileSync(sandboxFile, 'utf-8')) {
161
+ pagesChanged++;
162
+ }
163
+ }
164
+ }
165
+ // Compare sandbox kb vs original
166
+ const sandboxKb = path.join(sandboxPath, 'kb');
167
+ const origKb = path.join(dir, 'kb');
168
+ if (fs.existsSync(sandboxKb)) {
169
+ for (const f of fs.readdirSync(sandboxKb).filter(f => f.endsWith('.md'))) {
170
+ const origFile = path.join(origKb, f);
171
+ const sandboxFile = path.join(sandboxKb, f);
172
+ if (!fs.existsSync(origFile)) {
173
+ kbNew++;
174
+ }
175
+ else if (fs.readFileSync(origFile, 'utf-8') !== fs.readFileSync(sandboxFile, 'utf-8')) {
176
+ kbChanged++;
177
+ }
178
+ }
179
+ }
180
+ const total = pagesChanged + pagesNew + kbChanged + kbNew;
181
+ const age = Math.round((Date.now() - new Date(meta.created_at).getTime()) / 60000);
182
+ console.log('');
183
+ console.log(` ${chalk_1.default.bold('Sandbox Active')} — ${meta.company_name}`);
184
+ console.log(` ${chalk_1.default.dim('Created:')} ${age < 60 ? `${age}m ago` : `${Math.round(age / 60)}h ago`}`);
185
+ console.log('');
186
+ if (total === 0) {
187
+ console.log(chalk_1.default.dim(' No changes yet. Edit files in .sandbox/ to get started.'));
188
+ }
189
+ else {
190
+ if (pagesChanged)
191
+ console.log(` ${chalk_1.default.yellow(`${pagesChanged} page(s) modified`)}`);
192
+ if (pagesNew)
193
+ console.log(` ${chalk_1.default.green(`${pagesNew} page(s) added`)}`);
194
+ if (kbChanged)
195
+ console.log(` ${chalk_1.default.yellow(`${kbChanged} KB entry(ies) modified`)}`);
196
+ if (kbNew)
197
+ console.log(` ${chalk_1.default.green(`${kbNew} KB entry(ies) added`)}`);
198
+ console.log('');
199
+ console.log(chalk_1.default.dim(' solid sandbox push Promote these changes to production'));
200
+ }
201
+ console.log('');
202
+ });
203
+ // ── Diff ────────────────────────────────────────────────────────────
204
+ exports.sandboxCommand
205
+ .command('diff')
206
+ .description('Compare sandbox files to original (pre-fork) state')
207
+ .option('--dir <path>', 'Working directory', process.cwd())
208
+ .action(async (options) => {
209
+ const dir = options.dir;
210
+ const sandboxPath = path.join(dir, SANDBOX_DIR);
211
+ if (!fs.existsSync(path.join(sandboxPath, 'meta.json'))) {
212
+ console.error(chalk_1.default.red('No active sandbox.'));
213
+ process.exit(1);
214
+ }
215
+ // Compare sandbox pages to original pages
216
+ const sandboxPages = path.join(sandboxPath, 'pages');
217
+ const origPages = path.join(dir, 'pages');
218
+ if (fs.existsSync(sandboxPages)) {
219
+ for (const f of fs.readdirSync(sandboxPages).filter(f => f.endsWith('.json'))) {
220
+ const origFile = path.join(origPages, f);
221
+ const sandboxFile = path.join(sandboxPages, f);
222
+ if (!fs.existsSync(origFile)) {
223
+ console.log(chalk_1.default.green(`+ pages/${f}`) + chalk_1.default.dim(' (new)'));
224
+ continue;
225
+ }
226
+ const orig = fs.readFileSync(origFile, 'utf-8');
227
+ const sandbox = fs.readFileSync(sandboxFile, 'utf-8');
228
+ if (orig !== sandbox) {
229
+ try {
230
+ const origJson = JSON.parse(orig);
231
+ const sandboxJson = JSON.parse(sandbox);
232
+ const changes = [];
233
+ for (const key of Object.keys(sandboxJson)) {
234
+ if (['_id', 'id', 'updated_at', 'created_at'].includes(key))
235
+ continue;
236
+ if (JSON.stringify(origJson[key]) !== JSON.stringify(sandboxJson[key])) {
237
+ changes.push(key);
238
+ }
239
+ }
240
+ console.log(chalk_1.default.yellow(`~ pages/${f}`) + chalk_1.default.dim(` (${changes.length} fields: ${changes.join(', ')})`));
241
+ }
242
+ catch {
243
+ console.log(chalk_1.default.yellow(`~ pages/${f}`) + chalk_1.default.dim(' (content changed)'));
244
+ }
245
+ }
246
+ }
247
+ }
248
+ // Compare sandbox KB
249
+ const sandboxKb = path.join(sandboxPath, 'kb');
250
+ const origKb = path.join(dir, 'kb');
251
+ if (fs.existsSync(sandboxKb)) {
252
+ for (const f of fs.readdirSync(sandboxKb).filter(f => f.endsWith('.md'))) {
253
+ const origFile = path.join(origKb, f);
254
+ const sandboxFile = path.join(sandboxKb, f);
255
+ if (!fs.existsSync(origFile)) {
256
+ console.log(chalk_1.default.green(`+ kb/${f}`) + chalk_1.default.dim(' (new)'));
257
+ }
258
+ else if (fs.readFileSync(origFile, 'utf-8') !== fs.readFileSync(sandboxFile, 'utf-8')) {
259
+ console.log(chalk_1.default.yellow(`~ kb/${f}`) + chalk_1.default.dim(' (content changed)'));
260
+ }
261
+ }
262
+ }
263
+ });
264
+ // ── Push (promote sandbox → production) ─────────────────────────────
265
+ exports.sandboxCommand
266
+ .command('push')
267
+ .description('Promote sandbox changes to production (copies sandbox → main, then pushes)')
268
+ .option('--dir <path>', 'Working directory', process.cwd())
269
+ .action(async (options) => {
270
+ const dir = options.dir;
271
+ const sandboxPath = path.join(dir, SANDBOX_DIR);
272
+ if (!fs.existsSync(path.join(sandboxPath, 'meta.json'))) {
273
+ console.error(chalk_1.default.red('No active sandbox.'));
274
+ process.exit(1);
275
+ }
276
+ const spinner = (0, ora_1.default)('Promoting sandbox to main files...').start();
277
+ // Copy sandbox files back to main
278
+ const sandboxPages = path.join(sandboxPath, 'pages');
279
+ const mainPages = path.join(dir, 'pages');
280
+ if (fs.existsSync(sandboxPages)) {
281
+ if (!fs.existsSync(mainPages))
282
+ fs.mkdirSync(mainPages, { recursive: true });
283
+ for (const f of fs.readdirSync(sandboxPages)) {
284
+ fs.copyFileSync(path.join(sandboxPages, f), path.join(mainPages, f));
285
+ }
286
+ }
287
+ const sandboxKb = path.join(sandboxPath, 'kb');
288
+ const mainKb = path.join(dir, 'kb');
289
+ if (fs.existsSync(sandboxKb)) {
290
+ if (!fs.existsSync(mainKb))
291
+ fs.mkdirSync(mainKb, { recursive: true });
292
+ for (const f of fs.readdirSync(sandboxKb)) {
293
+ fs.copyFileSync(path.join(sandboxKb, f), path.join(mainKb, f));
294
+ }
295
+ }
296
+ const sandboxConfig = path.join(sandboxPath, 'solid.config.json');
297
+ if (fs.existsSync(sandboxConfig)) {
298
+ fs.copyFileSync(sandboxConfig, path.join(dir, 'solid.config.json'));
299
+ }
300
+ spinner.succeed('Sandbox promoted to main files');
301
+ console.log('');
302
+ console.log(chalk_1.default.dim(' Run `solid push` to deploy to production.'));
303
+ console.log(chalk_1.default.dim(' Run `solid sandbox reset` to clean up the sandbox.'));
304
+ });
305
+ // ── Reset ───────────────────────────────────────────────────────────
306
+ exports.sandboxCommand
307
+ .command('reset')
308
+ .description('Discard sandbox and all changes')
309
+ .option('--dir <path>', 'Working directory', process.cwd())
310
+ .action(async (options) => {
311
+ const dir = options.dir;
312
+ const sandboxPath = path.join(dir, SANDBOX_DIR);
313
+ if (!fs.existsSync(sandboxPath)) {
314
+ console.log(chalk_1.default.dim('No sandbox to reset.'));
315
+ return;
316
+ }
317
+ // Recursively delete sandbox directory
318
+ fs.rmSync(sandboxPath, { recursive: true, force: true });
319
+ console.log(chalk_1.default.green('Sandbox discarded. Main files unchanged.'));
320
+ });
321
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/commands/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Serve command for Solid CLI
3
+ *
4
+ * Local preview server that renders CMS pages from pulled layout_json files.
5
+ * Uses a built-in HTTP server + HTML renderer for the 25 block types.
6
+ *
7
+ * solid serve → Start at localhost:4000
8
+ * solid serve --port 3333 → Custom port
9
+ * solid serve --open → Auto-open browser
10
+ *
11
+ * Reads from:
12
+ * ./pages/*.json → Page layout_json
13
+ * ./solid.config.json → Company branding (name, colors, logo)
14
+ *
15
+ * Hot reloads on file changes.
16
+ */
17
+ import { Command } from 'commander';
18
+ export declare const serveCommand: Command;
19
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4UpC,eAAO,MAAM,YAAY,SAqFrB,CAAC"}