@solidnumber/cli 1.5.0 → 1.6.1
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.
- package/README.md +41 -5
- package/dist/__tests__/commands/auth.test.d.ts +6 -0
- package/dist/__tests__/commands/auth.test.d.ts.map +1 -0
- package/dist/__tests__/commands/auth.test.js +91 -0
- package/dist/__tests__/commands/auth.test.js.map +1 -0
- package/dist/__tests__/commands/billing.test.d.ts +6 -0
- package/dist/__tests__/commands/billing.test.d.ts.map +1 -0
- package/dist/__tests__/commands/billing.test.js +141 -0
- package/dist/__tests__/commands/billing.test.js.map +1 -0
- package/dist/__tests__/commands/company.test.d.ts +6 -0
- package/dist/__tests__/commands/company.test.d.ts.map +1 -0
- package/dist/__tests__/commands/company.test.js +129 -0
- package/dist/__tests__/commands/company.test.js.map +1 -0
- package/dist/__tests__/commands/import.test.d.ts +4 -0
- package/dist/__tests__/commands/import.test.d.ts.map +1 -0
- package/dist/__tests__/commands/import.test.js +71 -0
- package/dist/__tests__/commands/import.test.js.map +1 -0
- package/dist/__tests__/commands/pages.test.d.ts +5 -0
- package/dist/__tests__/commands/pages.test.d.ts.map +1 -0
- package/dist/__tests__/commands/pages.test.js +103 -0
- package/dist/__tests__/commands/pages.test.js.map +1 -0
- package/dist/__tests__/commands/push.test.d.ts +6 -0
- package/dist/__tests__/commands/push.test.d.ts.map +1 -0
- package/dist/__tests__/commands/push.test.js +113 -0
- package/dist/__tests__/commands/push.test.js.map +1 -0
- package/dist/__tests__/commands/sandbox.test.d.ts +5 -0
- package/dist/__tests__/commands/sandbox.test.d.ts.map +1 -0
- package/dist/__tests__/commands/sandbox.test.js +132 -0
- package/dist/__tests__/commands/sandbox.test.js.map +1 -0
- package/dist/__tests__/commands/serve.test.d.ts +5 -0
- package/dist/__tests__/commands/serve.test.d.ts.map +1 -0
- package/dist/__tests__/commands/serve.test.js +115 -0
- package/dist/__tests__/commands/serve.test.js.map +1 -0
- package/dist/__tests__/commands/site.test.d.ts +5 -0
- package/dist/__tests__/commands/site.test.d.ts.map +1 -0
- package/dist/__tests__/commands/site.test.js +92 -0
- package/dist/__tests__/commands/site.test.js.map +1 -0
- package/dist/__tests__/integration/smoke.test.d.ts +7 -0
- package/dist/__tests__/integration/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/integration/smoke.test.js +135 -0
- package/dist/__tests__/integration/smoke.test.js.map +1 -0
- package/dist/__tests__/lib/api-client.test.d.ts +6 -0
- package/dist/__tests__/lib/api-client.test.d.ts.map +1 -0
- package/dist/__tests__/lib/api-client.test.js +74 -0
- package/dist/__tests__/lib/api-client.test.js.map +1 -0
- package/dist/__tests__/lib/company-isolation.test.d.ts +19 -0
- package/dist/__tests__/lib/company-isolation.test.d.ts.map +1 -0
- package/dist/__tests__/lib/company-isolation.test.js +96 -0
- package/dist/__tests__/lib/company-isolation.test.js.map +1 -0
- package/dist/__tests__/lib/config.test.d.ts +6 -0
- package/dist/__tests__/lib/config.test.d.ts.map +1 -0
- package/dist/__tests__/lib/config.test.js +131 -0
- package/dist/__tests__/lib/config.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +4 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +25 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/commands/company.js +93 -25
- package/dist/commands/company.js.map +1 -1
- package/dist/commands/diff.d.ts +14 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +286 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/import.d.ts +14 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +552 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/open.d.ts +15 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +179 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/sandbox.d.ts +15 -0
- package/dist/commands/sandbox.d.ts.map +1 -0
- package/dist/commands/sandbox.js +321 -0
- package/dist/commands/sandbox.js.map +1 -0
- package/dist/commands/serve.d.ts +19 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +449 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/watch.d.ts +15 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +252 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +9 -4
- package/dist/lib/api-client.js.map +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,552 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Import command for Solid CLI
|
|
4
|
+
*
|
|
5
|
+
* Converts raw HTML/JSX (from ChatGPT, v0, Bolt, etc.) into Solid# layout_json blocks.
|
|
6
|
+
* Creates a new page file locally that can be previewed with `solid serve` and pushed.
|
|
7
|
+
*
|
|
8
|
+
* solid import landing.html --page "Summer Sale"
|
|
9
|
+
* solid import --clipboard --page "Promo"
|
|
10
|
+
* solid import --url https://example.com/page --page "Competitor Reference"
|
|
11
|
+
* cat snippet.html | solid import --stdin --page "Quick Page"
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.importCommand = void 0;
|
|
51
|
+
const commander_1 = require("commander");
|
|
52
|
+
const ora_1 = __importDefault(require("ora"));
|
|
53
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
function parseHtmlToBlocks(html) {
|
|
57
|
+
const blocks = [];
|
|
58
|
+
// Strip doctype, html, head, body wrappers
|
|
59
|
+
let body = html
|
|
60
|
+
.replace(/<!DOCTYPE[^>]*>/i, '')
|
|
61
|
+
.replace(/<html[^>]*>/gi, '').replace(/<\/html>/gi, '')
|
|
62
|
+
.replace(/<head[\s\S]*?<\/head>/gi, '')
|
|
63
|
+
.replace(/<body[^>]*>/gi, '').replace(/<\/body>/gi, '')
|
|
64
|
+
.replace(/<script[\s\S]*?<\/script>/gi, '')
|
|
65
|
+
.replace(/<style[\s\S]*?<\/style>/gi, '')
|
|
66
|
+
.trim();
|
|
67
|
+
// Split into top-level sections
|
|
68
|
+
const sectionRegex = /<(section|header|footer|main|article|div)\b[^>]*>([\s\S]*?)<\/\1>/gi;
|
|
69
|
+
let match;
|
|
70
|
+
let lastIndex = 0;
|
|
71
|
+
const sections = [];
|
|
72
|
+
while ((match = sectionRegex.exec(body)) !== null) {
|
|
73
|
+
// Capture any text between sections
|
|
74
|
+
if (match.index > lastIndex) {
|
|
75
|
+
const between = body.slice(lastIndex, match.index).trim();
|
|
76
|
+
if (between)
|
|
77
|
+
sections.push(between);
|
|
78
|
+
}
|
|
79
|
+
sections.push(match[0]);
|
|
80
|
+
lastIndex = match.index + match[0].length;
|
|
81
|
+
}
|
|
82
|
+
// Remaining content after last section
|
|
83
|
+
if (lastIndex < body.length) {
|
|
84
|
+
const remaining = body.slice(lastIndex).trim();
|
|
85
|
+
if (remaining)
|
|
86
|
+
sections.push(remaining);
|
|
87
|
+
}
|
|
88
|
+
// If no sections found, treat whole body as one block
|
|
89
|
+
if (sections.length === 0 && body.trim()) {
|
|
90
|
+
sections.push(body);
|
|
91
|
+
}
|
|
92
|
+
for (const section of sections) {
|
|
93
|
+
const block = classifySection(section);
|
|
94
|
+
if (block)
|
|
95
|
+
blocks.push(block);
|
|
96
|
+
}
|
|
97
|
+
return blocks;
|
|
98
|
+
}
|
|
99
|
+
function classifySection(html) {
|
|
100
|
+
const lower = html.toLowerCase();
|
|
101
|
+
const text = stripTags(html).trim();
|
|
102
|
+
if (!text && !lower.includes('<img') && !lower.includes('<video'))
|
|
103
|
+
return null;
|
|
104
|
+
// Hero detection: large heading + optional subheading + optional CTA
|
|
105
|
+
if (isHero(lower)) {
|
|
106
|
+
return {
|
|
107
|
+
type: 'hero',
|
|
108
|
+
content: {
|
|
109
|
+
headline: extractFirst(html, 'h1') || extractFirst(html, 'h2') || '',
|
|
110
|
+
subheadline: extractFirst(html, 'p') || '',
|
|
111
|
+
cta_text: extractButtonText(html) || '',
|
|
112
|
+
cta_url: extractHref(html) || '#',
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Pricing detection: multiple price-like elements
|
|
117
|
+
if (lower.includes('pricing') || lower.includes('/mo') || lower.includes('$') && countPattern(lower, /\$\d/) >= 2) {
|
|
118
|
+
return {
|
|
119
|
+
type: 'pricing',
|
|
120
|
+
content: {
|
|
121
|
+
title: extractFirst(html, 'h2') || extractFirst(html, 'h3') || 'Pricing',
|
|
122
|
+
plans: extractPricingPlans(html),
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// FAQ detection
|
|
127
|
+
if (lower.includes('faq') || lower.includes('frequently') || lower.includes('questions')) {
|
|
128
|
+
return {
|
|
129
|
+
type: 'faq',
|
|
130
|
+
content: {
|
|
131
|
+
title: extractFirst(html, 'h2') || 'FAQ',
|
|
132
|
+
questions: extractFaqItems(html),
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Testimonials detection
|
|
137
|
+
if (lower.includes('testimonial') || lower.includes('review') || lower.includes('what our') || countPattern(lower, /[""\u201c]/) >= 2) {
|
|
138
|
+
return {
|
|
139
|
+
type: 'testimonials',
|
|
140
|
+
content: {
|
|
141
|
+
title: extractFirst(html, 'h2') || 'What Our Customers Say',
|
|
142
|
+
testimonials: extractTestimonials(html),
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// Features/grid detection: multiple similar child elements
|
|
147
|
+
if (lower.includes('feature') || lower.includes('benefit') || lower.includes('why choose') || countChildren(html) >= 3) {
|
|
148
|
+
const items = extractRepeatingItems(html);
|
|
149
|
+
if (items.length >= 3) {
|
|
150
|
+
return {
|
|
151
|
+
type: 'features',
|
|
152
|
+
content: {
|
|
153
|
+
title: extractFirst(html, 'h2') || '',
|
|
154
|
+
features: items,
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// CTA detection
|
|
160
|
+
if (lower.includes('get started') || lower.includes('sign up') || lower.includes('contact us') || lower.includes('book now') || lower.includes('call now')) {
|
|
161
|
+
return {
|
|
162
|
+
type: 'cta',
|
|
163
|
+
content: {
|
|
164
|
+
headline: extractFirst(html, 'h2') || extractFirst(html, 'h3') || '',
|
|
165
|
+
subheadline: extractFirst(html, 'p') || '',
|
|
166
|
+
cta_text: extractButtonText(html) || 'Get Started',
|
|
167
|
+
cta_url: extractHref(html) || '#',
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Contact/form detection
|
|
172
|
+
if (lower.includes('<form') || lower.includes('<input') || lower.includes('contact')) {
|
|
173
|
+
return {
|
|
174
|
+
type: 'contact',
|
|
175
|
+
content: {
|
|
176
|
+
title: extractFirst(html, 'h2') || extractFirst(html, 'h3') || 'Contact Us',
|
|
177
|
+
button_text: extractButtonText(html) || 'Send Message',
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Stats detection: numbers
|
|
182
|
+
if (countPattern(lower, /\d+[+%kKmM]/) >= 3) {
|
|
183
|
+
return {
|
|
184
|
+
type: 'stats',
|
|
185
|
+
content: {
|
|
186
|
+
stats: extractStats(html),
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Process/steps detection
|
|
191
|
+
if (lower.includes('step') || lower.includes('process') || lower.includes('how it works')) {
|
|
192
|
+
const items = extractRepeatingItems(html);
|
|
193
|
+
if (items.length >= 2) {
|
|
194
|
+
return {
|
|
195
|
+
type: 'process-steps',
|
|
196
|
+
content: {
|
|
197
|
+
title: extractFirst(html, 'h2') || 'How It Works',
|
|
198
|
+
steps: items,
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Team detection
|
|
204
|
+
if (lower.includes('team') || lower.includes('our people') || lower.includes('staff')) {
|
|
205
|
+
return {
|
|
206
|
+
type: 'team',
|
|
207
|
+
content: {
|
|
208
|
+
title: extractFirst(html, 'h2') || 'Our Team',
|
|
209
|
+
members: extractRepeatingItems(html).map(i => ({ name: i.title, role: i.description })),
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// Footer detection
|
|
214
|
+
if (lower.includes('<footer') || lower.includes('copyright') || lower.includes('\u00a9')) {
|
|
215
|
+
return null; // Skip footers — TenantShell handles this
|
|
216
|
+
}
|
|
217
|
+
// Navigation detection
|
|
218
|
+
if (lower.includes('<nav')) {
|
|
219
|
+
return null; // Skip nav — TenantShell handles this
|
|
220
|
+
}
|
|
221
|
+
// Default: text block
|
|
222
|
+
return {
|
|
223
|
+
type: 'text',
|
|
224
|
+
content: {
|
|
225
|
+
title: extractFirst(html, 'h2') || extractFirst(html, 'h3') || '',
|
|
226
|
+
text: extractAllText(html),
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// ─── Extraction helpers ─────────────────────────────────────────────
|
|
231
|
+
function stripTags(html) {
|
|
232
|
+
return html.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
|
|
233
|
+
}
|
|
234
|
+
function extractFirst(html, tag) {
|
|
235
|
+
const match = html.match(new RegExp(`<${tag}[^>]*>([\\s\\S]*?)<\\/${tag}>`, 'i'));
|
|
236
|
+
return match ? stripTags(match[1]).trim() : '';
|
|
237
|
+
}
|
|
238
|
+
function extractButtonText(html) {
|
|
239
|
+
const btn = html.match(/<button[^>]*>([\s\S]*?)<\/button>/i);
|
|
240
|
+
if (btn)
|
|
241
|
+
return stripTags(btn[1]).trim();
|
|
242
|
+
const a = html.match(/<a[^>]*class="[^"]*btn[^"]*"[^>]*>([\s\S]*?)<\/a>/i);
|
|
243
|
+
if (a)
|
|
244
|
+
return stripTags(a[1]).trim();
|
|
245
|
+
const aAny = html.match(/<a[^>]*>([\s\S]*?)<\/a>/i);
|
|
246
|
+
if (aAny)
|
|
247
|
+
return stripTags(aAny[1]).trim();
|
|
248
|
+
return '';
|
|
249
|
+
}
|
|
250
|
+
function extractHref(html) {
|
|
251
|
+
const match = html.match(/href="([^"]+)"/i);
|
|
252
|
+
return match ? match[1] : '#';
|
|
253
|
+
}
|
|
254
|
+
function extractAllText(html) {
|
|
255
|
+
// Get all paragraph and text content
|
|
256
|
+
const paragraphs = [];
|
|
257
|
+
const pRegex = /<p[^>]*>([\s\S]*?)<\/p>/gi;
|
|
258
|
+
let m;
|
|
259
|
+
while ((m = pRegex.exec(html)) !== null) {
|
|
260
|
+
const t = stripTags(m[1]).trim();
|
|
261
|
+
if (t)
|
|
262
|
+
paragraphs.push(t);
|
|
263
|
+
}
|
|
264
|
+
if (paragraphs.length > 0)
|
|
265
|
+
return paragraphs.join('\n\n');
|
|
266
|
+
return stripTags(html).slice(0, 500);
|
|
267
|
+
}
|
|
268
|
+
function countPattern(text, pattern) {
|
|
269
|
+
return (text.match(new RegExp(pattern, 'g')) || []).length;
|
|
270
|
+
}
|
|
271
|
+
function countChildren(html) {
|
|
272
|
+
return (html.match(/<(div|li|article|card)[^>]*>/gi) || []).length;
|
|
273
|
+
}
|
|
274
|
+
function isHero(lower) {
|
|
275
|
+
return (lower.includes('<h1') || (lower.includes('<h2') && lower.indexOf('<h2') < 200)) &&
|
|
276
|
+
(lower.includes('btn') || lower.includes('button') || lower.includes('cta') ||
|
|
277
|
+
lower.includes('get started') || lower.includes('learn more') || lower.includes('hero'));
|
|
278
|
+
}
|
|
279
|
+
function extractRepeatingItems(html) {
|
|
280
|
+
const items = [];
|
|
281
|
+
// Match divs/lis/articles with heading + text pattern
|
|
282
|
+
const itemRegex = /<(?:div|li|article|card)[^>]*>([\s\S]*?)<\/(?:div|li|article|card)>/gi;
|
|
283
|
+
let m;
|
|
284
|
+
while ((m = itemRegex.exec(html)) !== null) {
|
|
285
|
+
const inner = m[1];
|
|
286
|
+
const title = extractFirst(inner, 'h3') || extractFirst(inner, 'h4') || extractFirst(inner, 'strong') || '';
|
|
287
|
+
const desc = extractFirst(inner, 'p') || '';
|
|
288
|
+
if (title || desc) {
|
|
289
|
+
items.push({ title, description: desc });
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return items;
|
|
293
|
+
}
|
|
294
|
+
function extractPricingPlans(html) {
|
|
295
|
+
const plans = [];
|
|
296
|
+
const cardRegex = /<(?:div|article|section)[^>]*>([\s\S]*?)<\/(?:div|article|section)>/gi;
|
|
297
|
+
let m;
|
|
298
|
+
while ((m = cardRegex.exec(html)) !== null) {
|
|
299
|
+
const inner = m[1];
|
|
300
|
+
if (!inner.includes('$') && !inner.match(/\d+.*\/mo/))
|
|
301
|
+
continue;
|
|
302
|
+
const priceMatch = inner.match(/\$[\d,.]+(?:\s*\/\s*\w+)?/);
|
|
303
|
+
if (!priceMatch)
|
|
304
|
+
continue;
|
|
305
|
+
const features = [];
|
|
306
|
+
const liRegex = /<li[^>]*>([\s\S]*?)<\/li>/gi;
|
|
307
|
+
let li;
|
|
308
|
+
while ((li = liRegex.exec(inner)) !== null) {
|
|
309
|
+
features.push(stripTags(li[1]).trim());
|
|
310
|
+
}
|
|
311
|
+
plans.push({
|
|
312
|
+
name: extractFirst(inner, 'h3') || extractFirst(inner, 'h2') || '',
|
|
313
|
+
price: priceMatch[0],
|
|
314
|
+
description: extractFirst(inner, 'p') || '',
|
|
315
|
+
features,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return plans;
|
|
319
|
+
}
|
|
320
|
+
function extractFaqItems(html) {
|
|
321
|
+
const items = [];
|
|
322
|
+
const pairRegex = /<(?:div|dt|details)[^>]*>([\s\S]*?)<\/(?:div|dt|details)>/gi;
|
|
323
|
+
let m;
|
|
324
|
+
while ((m = pairRegex.exec(html)) !== null) {
|
|
325
|
+
const q = extractFirst(m[1], 'h3') || extractFirst(m[1], 'h4') || extractFirst(m[1], 'summary') || extractFirst(m[1], 'strong') || '';
|
|
326
|
+
const a = extractFirst(m[1], 'p') || extractFirst(m[1], 'dd') || '';
|
|
327
|
+
if (q && a)
|
|
328
|
+
items.push({ question: q, answer: a });
|
|
329
|
+
}
|
|
330
|
+
return items;
|
|
331
|
+
}
|
|
332
|
+
function extractTestimonials(html) {
|
|
333
|
+
const items = [];
|
|
334
|
+
const cardRegex = /<(?:div|blockquote|article)[^>]*>([\s\S]*?)<\/(?:div|blockquote|article)>/gi;
|
|
335
|
+
let m;
|
|
336
|
+
while ((m = cardRegex.exec(html)) !== null) {
|
|
337
|
+
const inner = m[1];
|
|
338
|
+
const quote = extractFirst(inner, 'p') || extractFirst(inner, 'blockquote') || '';
|
|
339
|
+
const name = extractFirst(inner, 'cite') || extractFirst(inner, 'strong') || extractFirst(inner, 'h4') || '';
|
|
340
|
+
if (quote && quote.length > 20) {
|
|
341
|
+
items.push({ quote: quote.replace(/^[""\u201c]+|[""\u201d]+$/g, ''), name });
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return items;
|
|
345
|
+
}
|
|
346
|
+
function extractStats(html) {
|
|
347
|
+
const stats = [];
|
|
348
|
+
const itemRegex = /<(?:div|li|span)[^>]*>([\s\S]*?)<\/(?:div|li|span)>/gi;
|
|
349
|
+
let m;
|
|
350
|
+
while ((m = itemRegex.exec(html)) !== null) {
|
|
351
|
+
const inner = m[1];
|
|
352
|
+
const numMatch = stripTags(inner).match(/(\d[\d,.]*[+%kKmM]?)/);
|
|
353
|
+
if (numMatch) {
|
|
354
|
+
const value = numMatch[1];
|
|
355
|
+
const label = stripTags(inner).replace(value, '').trim();
|
|
356
|
+
if (label)
|
|
357
|
+
stats.push({ value, label });
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return stats;
|
|
361
|
+
}
|
|
362
|
+
// ─── Claude AI Parser ───────────────────────────────────────────────
|
|
363
|
+
async function parseWithClaude(html) {
|
|
364
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
365
|
+
if (!apiKey) {
|
|
366
|
+
console.error(chalk_1.default.red('ANTHROPIC_API_KEY not set. Set it or remove --ai flag.'));
|
|
367
|
+
process.exit(1);
|
|
368
|
+
}
|
|
369
|
+
try {
|
|
370
|
+
const { default: Anthropic } = await Promise.resolve().then(() => __importStar(require('@anthropic-ai/sdk')));
|
|
371
|
+
const client = new Anthropic({ apiKey });
|
|
372
|
+
// Truncate very large HTML to avoid token limits
|
|
373
|
+
const truncated = html.length > 30000 ? html.slice(0, 30000) + '\n<!-- truncated -->' : html;
|
|
374
|
+
const response = await client.messages.create({
|
|
375
|
+
model: 'claude-sonnet-4-6',
|
|
376
|
+
max_tokens: 4096,
|
|
377
|
+
messages: [{
|
|
378
|
+
role: 'user',
|
|
379
|
+
content: `Convert this HTML into a JSON array of CMS content blocks.
|
|
380
|
+
|
|
381
|
+
Each block must have: { "type": "<block_type>", "content": { ... } }
|
|
382
|
+
|
|
383
|
+
Available block types and their content fields:
|
|
384
|
+
- hero: { headline, subheadline, cta_text, cta_url }
|
|
385
|
+
- features: { title, features: [{ title, description }] }
|
|
386
|
+
- pricing: { title, plans: [{ name, price, description, features: ["..."] }] }
|
|
387
|
+
- cta: { headline, subheadline, cta_text, cta_url }
|
|
388
|
+
- testimonials: { title, testimonials: [{ quote, name }] }
|
|
389
|
+
- faq: { title, questions: [{ question, answer }] }
|
|
390
|
+
- contact: { title, button_text }
|
|
391
|
+
- stats: { stats: [{ value, label }] }
|
|
392
|
+
- text: { title, text }
|
|
393
|
+
- team: { title, members: [{ name, role }] }
|
|
394
|
+
- gallery: { images: [{ url, alt }] }
|
|
395
|
+
- process-steps: { title, steps: [{ title, description }] }
|
|
396
|
+
- booking: { title, description, button_text }
|
|
397
|
+
- video: { url, title }
|
|
398
|
+
- divider: {}
|
|
399
|
+
|
|
400
|
+
Return ONLY a JSON array. No markdown, no explanation.
|
|
401
|
+
|
|
402
|
+
HTML:
|
|
403
|
+
${truncated}`,
|
|
404
|
+
}],
|
|
405
|
+
});
|
|
406
|
+
const text = response.content[0].type === 'text' ? response.content[0].text : '';
|
|
407
|
+
// Extract JSON array from response
|
|
408
|
+
const jsonMatch = text.match(/\[[\s\S]*\]/);
|
|
409
|
+
if (!jsonMatch)
|
|
410
|
+
return [];
|
|
411
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
412
|
+
if (!Array.isArray(parsed))
|
|
413
|
+
return [];
|
|
414
|
+
// Validate each block
|
|
415
|
+
return parsed.filter((b) => b && typeof b.type === 'string' && typeof b.content === 'object');
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
console.error(chalk_1.default.yellow(` AI parsing failed: ${error.message || 'Unknown error'}`));
|
|
419
|
+
console.error(chalk_1.default.dim(' Falling back to regex parser...'));
|
|
420
|
+
return [];
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
// ─── Main Command ───────────────────────────────────────────────────
|
|
424
|
+
exports.importCommand = new commander_1.Command('import')
|
|
425
|
+
.description('Convert HTML/JSX into Solid# CMS page blocks')
|
|
426
|
+
.argument('[file]', 'HTML file to import')
|
|
427
|
+
.option('--page <title>', 'Page title (required)')
|
|
428
|
+
.option('--slug <slug>', 'URL slug (auto-generated from title if omitted)')
|
|
429
|
+
.option('--type <type>', 'Page type: website, landing, blog', 'website')
|
|
430
|
+
.option('--stdin', 'Read HTML from stdin (pipe)')
|
|
431
|
+
.option('--clipboard', 'Read HTML from system clipboard')
|
|
432
|
+
.option('--publish', 'Mark page as published')
|
|
433
|
+
.option('--ai', 'Use Claude AI for smarter block classification (requires ANTHROPIC_API_KEY)')
|
|
434
|
+
.option('--dir <path>', 'Working directory', process.cwd())
|
|
435
|
+
.action(async (file, options) => {
|
|
436
|
+
let html = '';
|
|
437
|
+
// Read HTML from source
|
|
438
|
+
if (options.stdin) {
|
|
439
|
+
// Read from stdin
|
|
440
|
+
const chunks = [];
|
|
441
|
+
for await (const chunk of process.stdin) {
|
|
442
|
+
chunks.push(chunk);
|
|
443
|
+
}
|
|
444
|
+
html = Buffer.concat(chunks).toString('utf-8');
|
|
445
|
+
}
|
|
446
|
+
else if (options.clipboard) {
|
|
447
|
+
// Read from clipboard (macOS)
|
|
448
|
+
try {
|
|
449
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
450
|
+
if (process.platform === 'darwin') {
|
|
451
|
+
html = execSync('pbpaste', { encoding: 'utf-8' });
|
|
452
|
+
}
|
|
453
|
+
else if (process.platform === 'linux') {
|
|
454
|
+
html = execSync('xclip -selection clipboard -o', { encoding: 'utf-8' });
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
html = execSync('powershell Get-Clipboard', { encoding: 'utf-8' });
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
console.error(chalk_1.default.red('Failed to read clipboard. Paste your HTML into a file instead.'));
|
|
462
|
+
process.exit(1);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
else if (file) {
|
|
466
|
+
const filePath = path.resolve(file);
|
|
467
|
+
if (!fs.existsSync(filePath)) {
|
|
468
|
+
console.error(chalk_1.default.red(`File not found: ${filePath}`));
|
|
469
|
+
process.exit(1);
|
|
470
|
+
}
|
|
471
|
+
html = fs.readFileSync(filePath, 'utf-8');
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
console.error(chalk_1.default.red('Provide an HTML file, --stdin, or --clipboard'));
|
|
475
|
+
console.log(chalk_1.default.dim(' solid import landing.html --page "Summer Sale"'));
|
|
476
|
+
console.log(chalk_1.default.dim(' solid import --clipboard --page "Promo"'));
|
|
477
|
+
console.log(chalk_1.default.dim(' cat page.html | solid import --stdin --page "Quick"'));
|
|
478
|
+
process.exit(1);
|
|
479
|
+
}
|
|
480
|
+
if (!html.trim()) {
|
|
481
|
+
console.error(chalk_1.default.red('Empty HTML input.'));
|
|
482
|
+
process.exit(1);
|
|
483
|
+
}
|
|
484
|
+
if (!options.page) {
|
|
485
|
+
console.error(chalk_1.default.red('--page <title> is required'));
|
|
486
|
+
process.exit(1);
|
|
487
|
+
}
|
|
488
|
+
const title = options.page;
|
|
489
|
+
const slug = options.slug || title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
490
|
+
let blocks;
|
|
491
|
+
if (options.ai) {
|
|
492
|
+
const spinner = (0, ora_1.default)('Using Claude AI to parse HTML into blocks...').start();
|
|
493
|
+
blocks = await parseWithClaude(html);
|
|
494
|
+
if (blocks.length === 0) {
|
|
495
|
+
spinner.text = 'AI returned no blocks, falling back to regex parser...';
|
|
496
|
+
blocks = parseHtmlToBlocks(html);
|
|
497
|
+
}
|
|
498
|
+
if (blocks.length === 0) {
|
|
499
|
+
spinner.fail(chalk_1.default.red('Could not extract any content blocks from the HTML.'));
|
|
500
|
+
process.exit(1);
|
|
501
|
+
}
|
|
502
|
+
spinner.succeed(`AI detected ${blocks.length} content blocks`);
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
const spinner = (0, ora_1.default)('Parsing HTML into blocks...').start();
|
|
506
|
+
blocks = parseHtmlToBlocks(html);
|
|
507
|
+
if (blocks.length === 0) {
|
|
508
|
+
spinner.fail(chalk_1.default.red('Could not extract any content blocks. Try --ai for smarter parsing.'));
|
|
509
|
+
process.exit(1);
|
|
510
|
+
}
|
|
511
|
+
spinner.succeed(`Detected ${blocks.length} content blocks`);
|
|
512
|
+
}
|
|
513
|
+
// Show what was detected
|
|
514
|
+
for (const block of blocks) {
|
|
515
|
+
const icon = {
|
|
516
|
+
hero: '\u{1F3AC}', features: '\u2728', pricing: '\u{1F4B0}', cta: '\u{1F4E3}',
|
|
517
|
+
testimonials: '\u{1F4AC}', faq: '\u2753', contact: '\u{1F4E7}', stats: '\u{1F4CA}',
|
|
518
|
+
text: '\u{1F4DD}', team: '\u{1F465}', gallery: '\u{1F5BC}', 'process-steps': '\u{1F4CB}',
|
|
519
|
+
}[block.type] || '\u{1F4E6}';
|
|
520
|
+
console.log(` ${icon} ${chalk_1.default.bold(block.type)} — ${chalk_1.default.dim(block.content.headline || block.content.title || block.content.text?.slice(0, 50) || '')}`);
|
|
521
|
+
}
|
|
522
|
+
// Build page JSON
|
|
523
|
+
const page = {
|
|
524
|
+
title,
|
|
525
|
+
slug,
|
|
526
|
+
page_type: options.type,
|
|
527
|
+
is_published: options.publish || false,
|
|
528
|
+
is_landing_page: options.type === 'landing',
|
|
529
|
+
meta_title: title,
|
|
530
|
+
meta_description: '',
|
|
531
|
+
layout_json: {
|
|
532
|
+
sections: blocks,
|
|
533
|
+
},
|
|
534
|
+
};
|
|
535
|
+
// Save to pages/ directory
|
|
536
|
+
const dir = options.dir;
|
|
537
|
+
const pagesDir = path.join(dir, 'pages');
|
|
538
|
+
if (!fs.existsSync(pagesDir)) {
|
|
539
|
+
fs.mkdirSync(pagesDir, { recursive: true });
|
|
540
|
+
}
|
|
541
|
+
const outPath = path.join(pagesDir, `${slug}.json`);
|
|
542
|
+
fs.writeFileSync(outPath, JSON.stringify(page, null, 2), 'utf-8');
|
|
543
|
+
console.log('');
|
|
544
|
+
console.log(chalk_1.default.green(`Created: pages/${slug}.json`));
|
|
545
|
+
console.log(chalk_1.default.dim(` ${blocks.length} sections · ${options.type} · ${page.is_published ? 'published' : 'draft'}`));
|
|
546
|
+
console.log('');
|
|
547
|
+
console.log(chalk_1.default.dim('Next steps:'));
|
|
548
|
+
console.log(chalk_1.default.dim(` solid serve Preview locally`));
|
|
549
|
+
console.log(chalk_1.default.dim(` solid open ${slug} Edit in web builder`));
|
|
550
|
+
console.log(chalk_1.default.dim(` solid push Push to production`));
|
|
551
|
+
});
|
|
552
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open command for Solid CLI
|
|
3
|
+
*
|
|
4
|
+
* Opens the web dashboard for a specific page, site, or section.
|
|
5
|
+
* Bridge between local CLI workflow and the web WYSIWYG builder.
|
|
6
|
+
*
|
|
7
|
+
* solid open home → Open page builder for "home" page
|
|
8
|
+
* solid open home --preview → Open public preview
|
|
9
|
+
* solid open home --editor → Open code editor view
|
|
10
|
+
* solid open --dashboard → Open CMS dashboard
|
|
11
|
+
* solid open --sites → Open sites manager
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
export declare const openCommand: Command;
|
|
15
|
+
//# sourceMappingURL=open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,WAAW,SAsHpB,CAAC"}
|