framer-export 4.3.0 → 4.3.7
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/dist/cli/index.js +296 -239
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var init_package = __esm({
|
|
|
15
15
|
"package.json"() {
|
|
16
16
|
package_default = {
|
|
17
17
|
name: "framer-export",
|
|
18
|
-
version: "4.3.
|
|
18
|
+
version: "4.3.7",
|
|
19
19
|
description: "Export any Framer, Webflow, or Wix site into a fully working local mirror. Downloads all assets, strips badges, rewrites URLs, and pretty-prints JS.",
|
|
20
20
|
type: "module",
|
|
21
21
|
main: "dist/cli/index.js",
|
|
@@ -100,8 +100,8 @@ function showBanner() {
|
|
|
100
100
|
const gold = chalk.hex("#D4A017").bold;
|
|
101
101
|
const gray = chalk.gray;
|
|
102
102
|
console.log("");
|
|
103
|
-
ASCII_ART.forEach((
|
|
104
|
-
console.log(" " + gold(
|
|
103
|
+
ASCII_ART.forEach((line) => {
|
|
104
|
+
console.log(" " + gold(line));
|
|
105
105
|
});
|
|
106
106
|
console.log("");
|
|
107
107
|
console.log(` ${gray(`v${package_default.version}`)} ${chalk.white.bold("Framer \xB7 Webflow \xB7 Wix Exporter")}
|
|
@@ -263,71 +263,76 @@ import chalk3 from "chalk";
|
|
|
263
263
|
function setCooking(spinner) {
|
|
264
264
|
_cooking = spinner;
|
|
265
265
|
}
|
|
266
|
-
function nextMsgColor() {
|
|
267
|
-
return MSG_COLORS[_msgIdx++ % MSG_COLORS.length];
|
|
268
|
-
}
|
|
269
266
|
function trunc(text, max) {
|
|
270
267
|
if (text.length <= max) return text;
|
|
271
|
-
return text.slice(0, max - 2) + "
|
|
268
|
+
return text.slice(0, max - 2) + "..";
|
|
272
269
|
}
|
|
273
|
-
function output(
|
|
274
|
-
if (_cooking)
|
|
275
|
-
|
|
276
|
-
} else {
|
|
277
|
-
console.log(line2);
|
|
278
|
-
}
|
|
270
|
+
function output(line) {
|
|
271
|
+
if (_cooking) _cooking.log(line);
|
|
272
|
+
else console.log(line);
|
|
279
273
|
}
|
|
280
|
-
var _cooking, T,
|
|
274
|
+
var _cooking, T, LOG_PALETTE, _li, log, INFO_PALETTE, _ii, info, warn, success;
|
|
281
275
|
var init_logger = __esm({
|
|
282
276
|
"src/logger/index.ts"() {
|
|
283
277
|
"use strict";
|
|
284
278
|
_cooking = null;
|
|
285
279
|
T = () => (/* @__PURE__ */ new Date()).toISOString().slice(11, 19);
|
|
286
|
-
|
|
287
|
-
chalk3.gray,
|
|
288
|
-
chalk3.hex("#9e9e9e"),
|
|
289
|
-
chalk3.hex("#757575"),
|
|
290
|
-
chalk3.hex("#6d6d6d")
|
|
291
|
-
];
|
|
292
|
-
TAG_ROTATION = [
|
|
280
|
+
LOG_PALETTE = [
|
|
293
281
|
(s) => chalk3.hex("#D4A017")(s),
|
|
294
|
-
(s) => chalk3.hex("#E0A030")(s),
|
|
295
282
|
(s) => chalk3.hex("#DAA520")(s),
|
|
296
|
-
(s) => chalk3.hex("#C4953A")(s),
|
|
297
|
-
(s) => chalk3.hex("#F0C040")(s)
|
|
298
|
-
];
|
|
299
|
-
MSG_COLORS = [
|
|
300
|
-
(s) => chalk3.hex("#D4A017")(s),
|
|
301
283
|
(s) => chalk3.hex("#C8A951")(s),
|
|
302
|
-
(s) => chalk3.hex("#
|
|
284
|
+
(s) => chalk3.hex("#E0B040")(s),
|
|
285
|
+
(s) => chalk3.hex("#daa520")(s),
|
|
286
|
+
(s) => chalk3.hex("#c4953a")(s),
|
|
287
|
+
(s) => chalk3.hex("#e8c33a")(s),
|
|
288
|
+
(s) => chalk3.hex("#dab660")(s),
|
|
289
|
+
(s) => chalk3.hex("#b8960a")(s),
|
|
303
290
|
(s) => chalk3.hex("#d4a76a")(s),
|
|
304
|
-
(s) => chalk3.hex("#
|
|
305
|
-
(s) => chalk3.hex("#
|
|
291
|
+
(s) => chalk3.hex("#e0a030")(s),
|
|
292
|
+
(s) => chalk3.hex("#c0a060")(s)
|
|
306
293
|
];
|
|
307
|
-
|
|
294
|
+
_li = 0;
|
|
308
295
|
log = (m) => {
|
|
309
|
-
|
|
310
|
-
const
|
|
311
|
-
|
|
312
|
-
const msg = nextMsgColor()(trunc(m, 120));
|
|
313
|
-
output(`${t} ${tag} ${msg}`);
|
|
296
|
+
_li++;
|
|
297
|
+
const c = LOG_PALETTE[_li % LOG_PALETTE.length];
|
|
298
|
+
output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.hex("#B8960A")("[LOG]")} ${c(trunc(m, 120))}`);
|
|
314
299
|
};
|
|
300
|
+
INFO_PALETTE = [
|
|
301
|
+
(s) => chalk3.hex("#4DB8B0")(s),
|
|
302
|
+
(s) => chalk3.hex("#5CC0BA")(s),
|
|
303
|
+
(s) => chalk3.hex("#3AA89E")(s),
|
|
304
|
+
(s) => chalk3.hex("#6BC4BE")(s),
|
|
305
|
+
(s) => chalk3.hex("#48B5AD")(s),
|
|
306
|
+
(s) => chalk3.hex("#52BAB4")(s)
|
|
307
|
+
];
|
|
308
|
+
_ii = 0;
|
|
315
309
|
info = (m) => {
|
|
316
|
-
|
|
317
|
-
const
|
|
318
|
-
|
|
319
|
-
output(`${t} ${tag} ${chalk3.bold(trunc(m, 120))}`);
|
|
310
|
+
_ii++;
|
|
311
|
+
const c = INFO_PALETTE[_ii % INFO_PALETTE.length];
|
|
312
|
+
output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.hex("#3AA89E").bold("[INFO]")} ${c(trunc(m, 120))}`);
|
|
320
313
|
};
|
|
321
314
|
warn = (m) => {
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
315
|
+
const colors = [
|
|
316
|
+
(s) => chalk3.hex("#E8833A")(s),
|
|
317
|
+
(s) => chalk3.hex("#F09040")(s),
|
|
318
|
+
(s) => chalk3.hex("#CC7722")(s),
|
|
319
|
+
(s) => chalk3.hex("#E87D2A")(s)
|
|
320
|
+
];
|
|
321
|
+
const c = colors[Math.floor(Math.random() * colors.length)];
|
|
322
|
+
const line = `${chalk3.hex("#7a7a7a")(`[${T()}]`)} ${chalk3.hex("#E8833A").bold("[WARN]")} ${c(trunc(m, 120))}`;
|
|
323
|
+
if (_cooking) _cooking.log(line);
|
|
324
|
+
else console.warn(line);
|
|
325
325
|
};
|
|
326
326
|
success = (m) => {
|
|
327
|
-
const
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
327
|
+
const colors = [
|
|
328
|
+
(s) => chalk3.hex("#4CAF50")(s),
|
|
329
|
+
(s) => chalk3.hex("#66BB6A")(s),
|
|
330
|
+
(s) => chalk3.hex("#43A047")(s),
|
|
331
|
+
(s) => chalk3.hex("#81C784")(s),
|
|
332
|
+
(s) => chalk3.hex("#2E7D32")(s)
|
|
333
|
+
];
|
|
334
|
+
const c = colors[Math.floor(Math.random() * colors.length)];
|
|
335
|
+
output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.greenBright("[OK]")} ${c(trunc(m, 120))}`);
|
|
331
336
|
};
|
|
332
337
|
}
|
|
333
338
|
});
|
|
@@ -1180,16 +1185,64 @@ var init_output = __esm({
|
|
|
1180
1185
|
}
|
|
1181
1186
|
});
|
|
1182
1187
|
|
|
1188
|
+
// src/cli/box.ts
|
|
1189
|
+
import chalk4 from "chalk";
|
|
1190
|
+
function maxWidth() {
|
|
1191
|
+
return Math.min(process.stdout.columns || 80, 62);
|
|
1192
|
+
}
|
|
1193
|
+
function padRight(text, w) {
|
|
1194
|
+
const visible = stripAnsi(text).length;
|
|
1195
|
+
if (visible >= w) return text;
|
|
1196
|
+
return text + " ".repeat(w - visible);
|
|
1197
|
+
}
|
|
1198
|
+
function stripAnsi(s) {
|
|
1199
|
+
return s.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, "");
|
|
1200
|
+
}
|
|
1201
|
+
function boxTop(w) {
|
|
1202
|
+
const inner = w - 4;
|
|
1203
|
+
return " " + B("\u2554\u2550") + B("\u2550".repeat(inner)) + B("\u2550\u2557");
|
|
1204
|
+
}
|
|
1205
|
+
function boxBot(w) {
|
|
1206
|
+
const inner = w - 4;
|
|
1207
|
+
return " " + B("\u255A\u2550") + B("\u2550".repeat(inner)) + B("\u2550\u255D");
|
|
1208
|
+
}
|
|
1209
|
+
function boxLine(w, text) {
|
|
1210
|
+
const inner = w - 4;
|
|
1211
|
+
const padded = padRight(text, inner);
|
|
1212
|
+
return " " + B("\u2551 ") + padded + B(" \u2551");
|
|
1213
|
+
}
|
|
1214
|
+
function boxSep(w) {
|
|
1215
|
+
const inner = w - 4;
|
|
1216
|
+
return " " + B("\u2560\u2550") + B("\u2550".repeat(inner)) + B("\u2550\u2563");
|
|
1217
|
+
}
|
|
1218
|
+
function boxRow(w, label, value) {
|
|
1219
|
+
const inner = w - 4;
|
|
1220
|
+
const labelPlain = stripAnsi(chalk4.bold(label));
|
|
1221
|
+
const visible = labelPlain.length + 1 + value.length;
|
|
1222
|
+
if (visible > inner) {
|
|
1223
|
+
const avail = inner - labelPlain.length - 2;
|
|
1224
|
+
const truncated = value.length > avail ? value.slice(0, avail - 1) + ".." : value;
|
|
1225
|
+
return " " + G("\u2551 ") + chalk4.bold(label) + ": " + chalk4.yellow(truncated) + " ".repeat(Math.max(0, inner - labelPlain.length - 1 - truncated.length)) + G(" \u2551");
|
|
1226
|
+
}
|
|
1227
|
+
const right = inner - labelPlain.length - 1 - value.length;
|
|
1228
|
+
return " " + G("\u2551 ") + chalk4.bold(label) + ": " + chalk4.yellow(value) + " ".repeat(right) + G(" \u2551");
|
|
1229
|
+
}
|
|
1230
|
+
var B, G;
|
|
1231
|
+
var init_box = __esm({
|
|
1232
|
+
"src/cli/box.ts"() {
|
|
1233
|
+
"use strict";
|
|
1234
|
+
B = chalk4.hex("#8B6914");
|
|
1235
|
+
G = chalk4.hex("#C4953A");
|
|
1236
|
+
}
|
|
1237
|
+
});
|
|
1238
|
+
|
|
1183
1239
|
// src/exporter/summary.ts
|
|
1184
1240
|
import fs3 from "fs/promises";
|
|
1185
1241
|
import path4 from "path";
|
|
1186
|
-
import
|
|
1187
|
-
function getWidth2() {
|
|
1188
|
-
return process.stdout.columns || 80;
|
|
1189
|
-
}
|
|
1242
|
+
import chalk5 from "chalk";
|
|
1190
1243
|
async function printSummary(exporter) {
|
|
1191
|
-
const
|
|
1192
|
-
const isSmall =
|
|
1244
|
+
const w = maxWidth();
|
|
1245
|
+
const isSmall = w < 50;
|
|
1193
1246
|
const count = async (d) => {
|
|
1194
1247
|
try {
|
|
1195
1248
|
return (await fs3.readdir(path4.join(exporter.outDir, d))).length;
|
|
@@ -1197,7 +1250,7 @@ async function printSummary(exporter) {
|
|
|
1197
1250
|
return 0;
|
|
1198
1251
|
}
|
|
1199
1252
|
};
|
|
1200
|
-
const [imgs, fonts, videos, misc, scripts, vendor, styles, data] = await Promise.all([
|
|
1253
|
+
const [imgs, fonts, videos, misc, scripts, vendor, styles, data, subpages] = await Promise.all([
|
|
1201
1254
|
count("assets/images"),
|
|
1202
1255
|
count("assets/fonts"),
|
|
1203
1256
|
count("assets/videos"),
|
|
@@ -1205,106 +1258,105 @@ async function printSummary(exporter) {
|
|
|
1205
1258
|
count("scripts/modules"),
|
|
1206
1259
|
count("scripts/vendor"),
|
|
1207
1260
|
count("styles"),
|
|
1208
|
-
count("data")
|
|
1261
|
+
count("data"),
|
|
1262
|
+
count("subpages")
|
|
1209
1263
|
]);
|
|
1210
|
-
const
|
|
1264
|
+
const G2 = chalk5.hex("#D4A017");
|
|
1265
|
+
const G22 = chalk5.hex("#DAA520");
|
|
1266
|
+
const C2 = chalk5.hex("#E0B040");
|
|
1267
|
+
const Y = chalk5.yellow;
|
|
1268
|
+
const O = chalk5.hex("#CC7722");
|
|
1269
|
+
const Br = chalk5.hex("#B8860B");
|
|
1270
|
+
const Gr = chalk5.gray;
|
|
1271
|
+
const Gn = chalk5.green;
|
|
1272
|
+
const entries = [
|
|
1273
|
+
["styles/", styles, "CSS", G2],
|
|
1274
|
+
["scripts/vendor/", vendor, "JS vendor", G22],
|
|
1275
|
+
["scripts/modules/", scripts, "JS modules", C2],
|
|
1276
|
+
["assets/images/", imgs, "images", Y],
|
|
1277
|
+
["assets/videos/", videos, "videos", O],
|
|
1278
|
+
["assets/fonts/", fonts, "fonts", Br],
|
|
1279
|
+
["assets/misc/", misc, "misc", Gr],
|
|
1280
|
+
["data/", data, "data", Gr],
|
|
1281
|
+
["subpages/", subpages, "pages", Gn]
|
|
1282
|
+
];
|
|
1211
1283
|
console.log("");
|
|
1212
1284
|
if (!isSmall) {
|
|
1213
|
-
console.log(
|
|
1214
|
-
console.log(
|
|
1215
|
-
console.log(
|
|
1285
|
+
console.log(boxTop(w));
|
|
1286
|
+
console.log(boxLine(w, chalk5.bold.white(" Export Summary")));
|
|
1287
|
+
console.log(boxSep(w));
|
|
1216
1288
|
} else {
|
|
1217
|
-
console.log(
|
|
1218
|
-
}
|
|
1219
|
-
const
|
|
1220
|
-
if (
|
|
1221
|
-
const
|
|
1222
|
-
const
|
|
1289
|
+
console.log(chalk5.bold.white(" Export Summary:"));
|
|
1290
|
+
}
|
|
1291
|
+
for (const [label, cnt, type, color] of entries) {
|
|
1292
|
+
if (cnt === 0) continue;
|
|
1293
|
+
const inner = w - 4;
|
|
1294
|
+
const l = label.padEnd(16);
|
|
1295
|
+
const c = String(cnt).padStart(3);
|
|
1296
|
+
const rowText = `${color(l)}${chalk5.white(c)} ${chalk5.gray(type)}`;
|
|
1297
|
+
const visible = 16 + 3 + 2 + type.length;
|
|
1298
|
+
const pad = Math.max(0, inner - visible);
|
|
1223
1299
|
if (isSmall) {
|
|
1224
|
-
console.log(` ${
|
|
1300
|
+
console.log(` ${color(label)} ${chalk5.white(String(cnt))} ${chalk5.gray(type)}`);
|
|
1225
1301
|
} else {
|
|
1226
|
-
console.log(
|
|
1302
|
+
console.log(" " + chalk5.hex("#C4953A")("\u2551 ") + rowText + " ".repeat(pad) + chalk5.hex("#C4953A")(" \u2551"));
|
|
1227
1303
|
}
|
|
1228
|
-
}
|
|
1229
|
-
row("styles/", styles, "CSS files");
|
|
1230
|
-
row("scripts/vendor/", vendor, "JS modules");
|
|
1231
|
-
row("scripts/modules/", scripts, "components");
|
|
1232
|
-
row("assets/images/", imgs, "images");
|
|
1233
|
-
row("assets/videos/", videos, "videos");
|
|
1234
|
-
row("assets/fonts/", fonts, "fonts");
|
|
1235
|
-
row("assets/misc/", misc, "misc files");
|
|
1236
|
-
row("data/", data, "data files");
|
|
1304
|
+
}
|
|
1237
1305
|
if (!isSmall) {
|
|
1238
|
-
console.log(
|
|
1306
|
+
console.log(boxBot(w));
|
|
1239
1307
|
}
|
|
1240
1308
|
console.log("");
|
|
1241
|
-
const
|
|
1309
|
+
const cdCmd = "cd " + path4.basename(exporter.outDir) + " && node serve.cjs";
|
|
1242
1310
|
if (!isSmall) {
|
|
1243
|
-
console.log(
|
|
1244
|
-
console.log(
|
|
1245
|
-
console.log(
|
|
1246
|
-
|
|
1247
|
-
|
|
1311
|
+
console.log(boxTop(w));
|
|
1312
|
+
console.log(boxLine(w, chalk5.bold.white(" To serve locally")));
|
|
1313
|
+
console.log(boxSep(w));
|
|
1314
|
+
const inner = w - 6;
|
|
1315
|
+
const cmdLen = cdCmd.length;
|
|
1316
|
+
const pad = Math.max(0, inner - cmdLen);
|
|
1317
|
+
console.log(" " + chalk5.hex("#C4953A")("\u2551 ") + G2(cdCmd) + " ".repeat(pad) + chalk5.hex("#9e9e9e")(" \u{1F5D0}") + chalk5.hex("#C4953A")(" \u2551"));
|
|
1318
|
+
console.log(boxBot(w));
|
|
1248
1319
|
} else {
|
|
1249
|
-
console.log(
|
|
1250
|
-
console.log(` ${
|
|
1320
|
+
console.log(chalk5.bold.white(" To serve locally:"));
|
|
1321
|
+
console.log(` ${G2(cdCmd)}`);
|
|
1251
1322
|
}
|
|
1252
1323
|
console.log("");
|
|
1253
|
-
console.log(
|
|
1324
|
+
console.log(chalk5.gray(" NOTE: Must be served via HTTP for JS modules to work."));
|
|
1254
1325
|
console.log("");
|
|
1255
1326
|
}
|
|
1256
1327
|
var init_summary = __esm({
|
|
1257
1328
|
"src/exporter/summary.ts"() {
|
|
1258
1329
|
"use strict";
|
|
1330
|
+
init_box();
|
|
1259
1331
|
}
|
|
1260
1332
|
});
|
|
1261
1333
|
|
|
1262
1334
|
// src/cli/cooking.ts
|
|
1263
|
-
import
|
|
1264
|
-
var SHINE_WIDTH, FRAME_INTERVAL,
|
|
1335
|
+
import chalk6 from "chalk";
|
|
1336
|
+
var SHINE_WIDTH, FRAME_INTERVAL, DOT_PHASES, CookingSpinner;
|
|
1265
1337
|
var init_cooking = __esm({
|
|
1266
1338
|
"src/cli/cooking.ts"() {
|
|
1267
1339
|
"use strict";
|
|
1268
1340
|
SHINE_WIDTH = 10;
|
|
1269
1341
|
FRAME_INTERVAL = 140;
|
|
1270
|
-
|
|
1271
|
-
PALETTE = [
|
|
1272
|
-
(s) => chalk5.hex("#D4A017")(s),
|
|
1273
|
-
(s) => chalk5.hex("#E8A317")(s),
|
|
1274
|
-
(s) => chalk5.hex("#DAA520")(s),
|
|
1275
|
-
(s) => chalk5.hex("#F0C040")(s),
|
|
1276
|
-
(s) => chalk5.hex("#C4953A")(s),
|
|
1277
|
-
(s) => chalk5.hex("#E6B83C")(s),
|
|
1278
|
-
(s) => chalk5.hex("#C8A951")(s),
|
|
1279
|
-
(s) => chalk5.hex("#D9B44D")(s)
|
|
1280
|
-
];
|
|
1342
|
+
DOT_PHASES = [" ", ". ", ".. ", "...", " ..", " .", " "];
|
|
1281
1343
|
CookingSpinner = class {
|
|
1282
1344
|
interval = null;
|
|
1283
|
-
bgInterval = null;
|
|
1284
1345
|
frame = 0;
|
|
1285
1346
|
phase = "";
|
|
1286
1347
|
active = false;
|
|
1287
|
-
bar = 0;
|
|
1288
|
-
barDir = 1;
|
|
1289
1348
|
start(phase = "") {
|
|
1290
1349
|
this.phase = phase;
|
|
1291
1350
|
this.frame = 0;
|
|
1292
|
-
this.bar = 0;
|
|
1293
|
-
this.barDir = 1;
|
|
1294
1351
|
this.active = true;
|
|
1295
1352
|
this.draw();
|
|
1296
1353
|
this.interval = setInterval(() => {
|
|
1297
1354
|
this.frame++;
|
|
1298
1355
|
this.draw();
|
|
1299
1356
|
}, FRAME_INTERVAL);
|
|
1300
|
-
this.bgInterval = setInterval(() => {
|
|
1301
|
-
this.bar++;
|
|
1302
|
-
this.draw();
|
|
1303
|
-
}, 800);
|
|
1304
1357
|
}
|
|
1305
1358
|
update(phase) {
|
|
1306
1359
|
this.phase = phase;
|
|
1307
|
-
if (!this.active) this.draw();
|
|
1308
1360
|
}
|
|
1309
1361
|
log(message) {
|
|
1310
1362
|
if (this.active) {
|
|
@@ -1321,27 +1373,15 @@ var init_cooking = __esm({
|
|
|
1321
1373
|
clearInterval(this.interval);
|
|
1322
1374
|
this.interval = null;
|
|
1323
1375
|
}
|
|
1324
|
-
if (this.bgInterval) {
|
|
1325
|
-
clearInterval(this.bgInterval);
|
|
1326
|
-
this.bgInterval = null;
|
|
1327
|
-
}
|
|
1328
1376
|
process.stdout.write("\r\x1B[2K");
|
|
1329
1377
|
}
|
|
1330
1378
|
draw() {
|
|
1331
1379
|
if (!this.active) return;
|
|
1332
|
-
const
|
|
1333
|
-
const paletteFn = PALETTE[this.frame % PALETTE.length];
|
|
1334
|
-
const dotPhase = Math.floor(this.frame / 3) % 4;
|
|
1335
|
-
const dotStr = dotPhase === 0 ? " " : dotPhase === 1 ? ". " : dotPhase === 2 ? ".. " : "...";
|
|
1380
|
+
const dots = DOT_PHASES[this.frame % DOT_PHASES.length];
|
|
1336
1381
|
const shimmer = this.renderShimmer("Cooking");
|
|
1337
|
-
const
|
|
1338
|
-
const
|
|
1339
|
-
|
|
1340
|
-
const barStr = this.renderBar(barLen, barPos);
|
|
1341
|
-
const phaseStr = this.phase ? ` ${chalk5.gray(this.limitLen(this.phase, 38))}` : "";
|
|
1342
|
-
process.stdout.write(
|
|
1343
|
-
`\r\x1B[2K ${spinnerChar} ${shimmer} ${paletteFn(dotStr)} ${barStr}${phaseStr}`
|
|
1344
|
-
);
|
|
1382
|
+
const dotStr = chalk6.hex("#D4A017")(dots);
|
|
1383
|
+
const phaseStr = this.phase ? ` ${chalk6.gray(this.limitLen(this.phase, 38))}` : "";
|
|
1384
|
+
process.stdout.write(`\r\x1B[2K ${shimmer} ${dotStr}${phaseStr}`);
|
|
1345
1385
|
}
|
|
1346
1386
|
renderShimmer(text) {
|
|
1347
1387
|
let result = "";
|
|
@@ -1351,34 +1391,16 @@ var init_cooking = __esm({
|
|
|
1351
1391
|
if (dist < SHINE_WIDTH) {
|
|
1352
1392
|
const t = 1 - dist / SHINE_WIDTH;
|
|
1353
1393
|
const g = Math.floor(160 + t * 95);
|
|
1354
|
-
result +=
|
|
1394
|
+
result += chalk6.rgb(g, g, g)(text[i]);
|
|
1355
1395
|
} else {
|
|
1356
|
-
result +=
|
|
1396
|
+
result += chalk6.rgb(160, 160, 160)(text[i]);
|
|
1357
1397
|
}
|
|
1358
1398
|
}
|
|
1359
1399
|
return result;
|
|
1360
1400
|
}
|
|
1361
|
-
renderBar(len, pos) {
|
|
1362
|
-
let s = "";
|
|
1363
|
-
for (let i = 0; i < len; i++) {
|
|
1364
|
-
const dist = Math.abs(i - pos);
|
|
1365
|
-
if (dist < 3) {
|
|
1366
|
-
const t = 1 - dist / 3;
|
|
1367
|
-
const r = Math.floor(200 + t * 55);
|
|
1368
|
-
const g = Math.floor(160 + t * 50);
|
|
1369
|
-
const b = Math.floor(20 + t * 30);
|
|
1370
|
-
s += chalk5.rgb(r, g, b)("\u258C");
|
|
1371
|
-
} else if (dist < 6) {
|
|
1372
|
-
s += chalk5.rgb(140, 100, 20)("\u258C");
|
|
1373
|
-
} else {
|
|
1374
|
-
s += chalk5.rgb(50, 35, 10)(" ");
|
|
1375
|
-
}
|
|
1376
|
-
}
|
|
1377
|
-
return `[${s}]`;
|
|
1378
|
-
}
|
|
1379
1401
|
limitLen(s, max) {
|
|
1380
1402
|
if (s.length <= max) return s;
|
|
1381
|
-
return s.slice(0, max -
|
|
1403
|
+
return s.slice(0, max - 1) + "\u2026";
|
|
1382
1404
|
}
|
|
1383
1405
|
};
|
|
1384
1406
|
}
|
|
@@ -1392,7 +1414,7 @@ __export(exporter_exports, {
|
|
|
1392
1414
|
});
|
|
1393
1415
|
import fs4 from "fs/promises";
|
|
1394
1416
|
import path5 from "path";
|
|
1395
|
-
import
|
|
1417
|
+
import chalk7 from "chalk";
|
|
1396
1418
|
function deriveOutputName(url, platformName) {
|
|
1397
1419
|
try {
|
|
1398
1420
|
const parsed = new URL(url);
|
|
@@ -1451,12 +1473,12 @@ var init_exporter = __esm({
|
|
|
1451
1473
|
}
|
|
1452
1474
|
}
|
|
1453
1475
|
async run(includeSubpages = false) {
|
|
1454
|
-
console.log(
|
|
1455
|
-
info("Source : " +
|
|
1456
|
-
info("Output : " +
|
|
1457
|
-
info("Platform : " +
|
|
1476
|
+
console.log(chalk7.bold.hex("#D4A017")("\n Cooksite v4 - Full Mirror & Clean Export\n"));
|
|
1477
|
+
info("Source : " + chalk7.underline(this.siteUrl));
|
|
1478
|
+
info("Output : " + chalk7.yellow(this.outDir));
|
|
1479
|
+
info("Platform : " + chalk7.hex("#D4A017")(this.platform.displayName));
|
|
1458
1480
|
if (includeSubpages) {
|
|
1459
|
-
info("Subpages : " +
|
|
1481
|
+
info("Subpages : " + chalk7.green("enabled"));
|
|
1460
1482
|
}
|
|
1461
1483
|
console.log("");
|
|
1462
1484
|
this.cooking = new CookingSpinner();
|
|
@@ -1484,12 +1506,12 @@ var init_exporter = __esm({
|
|
|
1484
1506
|
this.ssrHTML = buf.toString("utf-8");
|
|
1485
1507
|
success("SSR HTML fetched (" + (this.ssrHTML.length / 1024).toFixed(1) + " KB)");
|
|
1486
1508
|
} catch (e) {
|
|
1487
|
-
log(
|
|
1509
|
+
log(chalk7.red("Could not fetch SSR HTML: " + e.message));
|
|
1488
1510
|
}
|
|
1489
1511
|
const htmlDetected = detectPlatform(this.siteUrl, this.ssrHTML);
|
|
1490
1512
|
if (htmlDetected.name !== this.platform.name) {
|
|
1491
1513
|
this.platform = htmlDetected;
|
|
1492
|
-
log("Platform refined: " +
|
|
1514
|
+
log("Platform refined: " + chalk7.hex("#D4A017")(this.platform.displayName) + " (from HTML analysis)");
|
|
1493
1515
|
}
|
|
1494
1516
|
await launchAndCapture(this);
|
|
1495
1517
|
if (includeSubpages && this.page) {
|
|
@@ -1571,8 +1593,18 @@ var init_exporter = __esm({
|
|
|
1571
1593
|
// src/cli/select.ts
|
|
1572
1594
|
import readline from "readline";
|
|
1573
1595
|
import { stdin, stdout } from "process";
|
|
1574
|
-
import
|
|
1596
|
+
import chalk8 from "chalk";
|
|
1597
|
+
function stripAnsi2(s) {
|
|
1598
|
+
return s.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, "");
|
|
1599
|
+
}
|
|
1575
1600
|
async function select(question, options, defaultIndex = 0) {
|
|
1601
|
+
const isTTY = stdin.isTTY && stdout.isTTY;
|
|
1602
|
+
if (!isTTY) {
|
|
1603
|
+
return fallbackPrompt(question, options, defaultIndex);
|
|
1604
|
+
}
|
|
1605
|
+
return arrowSelect(question, options, defaultIndex);
|
|
1606
|
+
}
|
|
1607
|
+
async function arrowSelect(question, options, defaultIndex) {
|
|
1576
1608
|
return new Promise((resolve) => {
|
|
1577
1609
|
let selected = defaultIndex;
|
|
1578
1610
|
const render = (initial = false) => {
|
|
@@ -1580,19 +1612,18 @@ async function select(question, options, defaultIndex = 0) {
|
|
|
1580
1612
|
stdout.write(`\x1B[${options.length + 1}A`);
|
|
1581
1613
|
stdout.write("\x1B[J");
|
|
1582
1614
|
}
|
|
1583
|
-
console.log(` ${
|
|
1615
|
+
console.log(` ${chalk8.hex("#D4A017")("?")} ${chalk8.white.bold(question)}`);
|
|
1584
1616
|
for (let i = 0; i < options.length; i++) {
|
|
1585
1617
|
if (i === selected) {
|
|
1586
|
-
console.log(` ${
|
|
1618
|
+
console.log(` ${chalk8.hex("#D4A017")(">")} ${chalk8.white.bold(options[i].label)}`);
|
|
1587
1619
|
} else {
|
|
1588
|
-
console.log(` ${
|
|
1620
|
+
console.log(` ${chalk8.gray(options[i].label)}`);
|
|
1589
1621
|
}
|
|
1590
1622
|
}
|
|
1591
1623
|
};
|
|
1592
1624
|
render(true);
|
|
1593
1625
|
readline.emitKeypressEvents(stdin);
|
|
1594
|
-
|
|
1595
|
-
if (wasTTY) stdin.setRawMode(true);
|
|
1626
|
+
stdin.setRawMode(true);
|
|
1596
1627
|
const onKeypress = (_str, key) => {
|
|
1597
1628
|
if (!key) return;
|
|
1598
1629
|
if (key.name === "up" && selected > 0) {
|
|
@@ -1602,16 +1633,16 @@ async function select(question, options, defaultIndex = 0) {
|
|
|
1602
1633
|
selected++;
|
|
1603
1634
|
render();
|
|
1604
1635
|
} else if (key.name === "return") {
|
|
1605
|
-
|
|
1636
|
+
stdin.setRawMode(false);
|
|
1606
1637
|
stdin.removeListener("keypress", onKeypress);
|
|
1607
1638
|
stdin.pause();
|
|
1608
1639
|
stdout.write(`\x1B[${options.length + 1}A`);
|
|
1609
1640
|
stdout.write("\x1B[J");
|
|
1610
|
-
console.log(` ${
|
|
1641
|
+
console.log(` ${chalk8.green("\u2713")} ${chalk8.white.bold(question)} ${chalk8.hex("#D4A017")(stripAnsi2(options[selected].label))}
|
|
1611
1642
|
`);
|
|
1612
1643
|
resolve(options[selected].value);
|
|
1613
1644
|
} else if (key.ctrl && key.name === "c" || key.name === "escape") {
|
|
1614
|
-
|
|
1645
|
+
stdin.setRawMode(false);
|
|
1615
1646
|
stdin.removeListener("keypress", onKeypress);
|
|
1616
1647
|
process.exit(0);
|
|
1617
1648
|
}
|
|
@@ -1620,6 +1651,45 @@ async function select(question, options, defaultIndex = 0) {
|
|
|
1620
1651
|
stdin.on("keypress", onKeypress);
|
|
1621
1652
|
});
|
|
1622
1653
|
}
|
|
1654
|
+
async function fallbackPrompt(question, options, defaultIndex) {
|
|
1655
|
+
return new Promise((resolve) => {
|
|
1656
|
+
const rl = readline.createInterface({ input: stdin, output: stdout });
|
|
1657
|
+
console.log(` ${chalk8.hex("#D4A017")("?")} ${chalk8.white.bold(question)}
|
|
1658
|
+
`);
|
|
1659
|
+
for (let i = 0; i < options.length; i++) {
|
|
1660
|
+
const marker = i === defaultIndex ? chalk8.green(" \u2605") : " ";
|
|
1661
|
+
console.log(` ${chalk8.gray(`[${i + 1}]`)}${marker} ${chalk8.white(options[i].label)}`);
|
|
1662
|
+
}
|
|
1663
|
+
console.log("");
|
|
1664
|
+
const def = String(defaultIndex + 1);
|
|
1665
|
+
const ask = () => {
|
|
1666
|
+
rl.question(` ${chalk8.hex("#D4A017")(">")} ${chalk8.gray(`Choose [1-${options.length}] (${def})`)}: `, (answer) => {
|
|
1667
|
+
const trimmed = answer.trim();
|
|
1668
|
+
if (!trimmed) {
|
|
1669
|
+
rl.close();
|
|
1670
|
+
const label = stripAnsi2(options[defaultIndex].label);
|
|
1671
|
+
console.log(` ${chalk8.green("\u2713")} ${chalk8.hex("#D4A017")(label)}
|
|
1672
|
+
`);
|
|
1673
|
+
resolve(options[defaultIndex].value);
|
|
1674
|
+
return;
|
|
1675
|
+
}
|
|
1676
|
+
const idx = parseInt(trimmed, 10);
|
|
1677
|
+
if (idx >= 1 && idx <= options.length) {
|
|
1678
|
+
rl.close();
|
|
1679
|
+
const label = stripAnsi2(options[idx - 1].label);
|
|
1680
|
+
console.log(` ${chalk8.green("\u2713")} ${chalk8.hex("#D4A017")(label)}
|
|
1681
|
+
`);
|
|
1682
|
+
resolve(options[idx - 1].value);
|
|
1683
|
+
} else {
|
|
1684
|
+
console.log(` ${chalk8.red("\u2717")} Enter 1-${options.length}
|
|
1685
|
+
`);
|
|
1686
|
+
ask();
|
|
1687
|
+
}
|
|
1688
|
+
});
|
|
1689
|
+
};
|
|
1690
|
+
ask();
|
|
1691
|
+
});
|
|
1692
|
+
}
|
|
1623
1693
|
var init_select = __esm({
|
|
1624
1694
|
"src/cli/select.ts"() {
|
|
1625
1695
|
"use strict";
|
|
@@ -1635,46 +1705,27 @@ import readline2 from "readline/promises";
|
|
|
1635
1705
|
import { stdin as stdin2, stdout as stdout2 } from "process";
|
|
1636
1706
|
import path6 from "path";
|
|
1637
1707
|
import { URL as URL4 } from "url";
|
|
1638
|
-
import
|
|
1639
|
-
function getWidth3() {
|
|
1640
|
-
return process.stdout.columns || 80;
|
|
1641
|
-
}
|
|
1708
|
+
import chalk9 from "chalk";
|
|
1642
1709
|
function drawHeader(title) {
|
|
1643
|
-
const
|
|
1644
|
-
|
|
1645
|
-
const magenta = chalk8.hex("#D4A017");
|
|
1646
|
-
const boldWhite = chalk8.bold.white;
|
|
1647
|
-
if (isSmall) {
|
|
1710
|
+
const w = maxWidth();
|
|
1711
|
+
if (w < 50) {
|
|
1648
1712
|
console.log(`
|
|
1649
|
-
${
|
|
1713
|
+
${chalk9.hex("#D4A017")("\u25CF")} ${chalk9.bold.white(title)}`);
|
|
1650
1714
|
return;
|
|
1651
1715
|
}
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
console.log(magenta(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
|
|
1656
|
-
console.log(magenta(" \u2502") + boldWhite(" " + title) + rightPad + magenta("\u2502"));
|
|
1657
|
-
console.log(magenta(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
|
|
1716
|
+
console.log(boxTop(w));
|
|
1717
|
+
console.log(boxLine(w, chalk9.bold.white(" " + title)));
|
|
1718
|
+
console.log(boxBot(w));
|
|
1658
1719
|
console.log("");
|
|
1659
1720
|
}
|
|
1660
|
-
function line(label, value) {
|
|
1661
|
-
const width = getWidth3();
|
|
1662
|
-
const isSmall = width < 50;
|
|
1663
|
-
const magenta = chalk8.hex("#D4A017");
|
|
1664
|
-
if (isSmall) {
|
|
1665
|
-
console.log(` ${chalk8.bold(label)}: ${chalk8.yellow(value)}`);
|
|
1666
|
-
return;
|
|
1667
|
-
}
|
|
1668
|
-
console.log(` ${magenta("\u2502")} ${chalk8.bold(label.padEnd(14))} ${chalk8.yellow(value)}`);
|
|
1669
|
-
}
|
|
1670
1721
|
async function runSetup(legacyMode = false) {
|
|
1671
1722
|
showBanner();
|
|
1672
|
-
console.log(
|
|
1673
|
-
console.log(
|
|
1723
|
+
console.log(chalk9.bold.white(" Welcome to Framer Export setup.\n"));
|
|
1724
|
+
console.log(chalk9.gray(" Supports Framer, Webflow, and Wix sites.\n"));
|
|
1674
1725
|
const rl = readline2.createInterface({ input: stdin2, output: stdout2 });
|
|
1675
1726
|
const ask = async (question, defaultVal) => {
|
|
1676
|
-
const suffix = defaultVal ?
|
|
1677
|
-
const prompt = ` ${
|
|
1727
|
+
const suffix = defaultVal ? chalk9.gray(` (${defaultVal})`) : "";
|
|
1728
|
+
const prompt = ` ${chalk9.hex("#D4A017")("?")} ${chalk9.white.bold(question)}${suffix} ${chalk9.gray(">")} `;
|
|
1678
1729
|
const answer = await rl.question(prompt);
|
|
1679
1730
|
return answer.trim() || defaultVal || "";
|
|
1680
1731
|
};
|
|
@@ -1686,42 +1737,42 @@ async function runSetup(legacyMode = false) {
|
|
|
1686
1737
|
new URL4(input);
|
|
1687
1738
|
siteUrl = input;
|
|
1688
1739
|
} catch {
|
|
1689
|
-
console.log(` ${
|
|
1740
|
+
console.log(` ${chalk9.red("\u2717")} ${chalk9.red("Invalid URL. Enter a valid URL (https://...)")}
|
|
1690
1741
|
`);
|
|
1691
1742
|
}
|
|
1692
1743
|
}
|
|
1693
|
-
console.log(` ${
|
|
1744
|
+
console.log(` ${chalk9.green("\u2713")} ${chalk9.green("URL:")} ${chalk9.underline(siteUrl)}
|
|
1694
1745
|
`);
|
|
1695
1746
|
drawHeader("Step 2 : Platform");
|
|
1696
1747
|
const detected = detectPlatform(siteUrl);
|
|
1697
1748
|
let platformName;
|
|
1698
1749
|
if (legacyMode) {
|
|
1699
|
-
console.log(` ${
|
|
1750
|
+
console.log(` ${chalk9.blue("i")} Auto-detected: ${chalk9.hex("#D4A017")(detected.displayName)}`);
|
|
1700
1751
|
const platformInput = await ask("Platform (framer/webflow/wix)", detected.name);
|
|
1701
1752
|
platformName = ["framer", "webflow", "wix"].includes(platformInput) ? platformInput : detected.name;
|
|
1702
|
-
console.log(` ${
|
|
1753
|
+
console.log(` ${chalk9.green("\u2713")} ${chalk9.green("Platform:")} ${chalk9.hex("#D4A017")(platformName)}
|
|
1703
1754
|
`);
|
|
1704
1755
|
} else {
|
|
1705
1756
|
rl.close();
|
|
1706
1757
|
const platforms = [
|
|
1707
|
-
{ label: `Framer${detected.name === "framer" ?
|
|
1708
|
-
{ label: `Webflow${detected.name === "webflow" ?
|
|
1709
|
-
{ label: `Wix${detected.name === "wix" ?
|
|
1758
|
+
{ label: `Framer${detected.name === "framer" ? chalk9.gray(" (detected)") : ""}`, value: "framer" },
|
|
1759
|
+
{ label: `Webflow${detected.name === "webflow" ? chalk9.gray(" (detected)") : ""}`, value: "webflow" },
|
|
1760
|
+
{ label: `Wix${detected.name === "wix" ? chalk9.gray(" (detected)") : ""}`, value: "wix" }
|
|
1710
1761
|
];
|
|
1711
1762
|
const defaultIdx = ["framer", "webflow", "wix"].indexOf(detected.name);
|
|
1712
1763
|
platformName = await select("Select platform", platforms, Math.max(0, defaultIdx));
|
|
1713
1764
|
}
|
|
1714
1765
|
const rl2 = legacyMode ? rl : readline2.createInterface({ input: stdin2, output: stdout2 });
|
|
1715
1766
|
const ask2 = async (question, defaultVal) => {
|
|
1716
|
-
const suffix = defaultVal ?
|
|
1717
|
-
const prompt = ` ${
|
|
1767
|
+
const suffix = defaultVal ? chalk9.gray(` (${defaultVal})`) : "";
|
|
1768
|
+
const prompt = ` ${chalk9.hex("#D4A017")("?")} ${chalk9.white.bold(question)}${suffix} ${chalk9.gray(">")} `;
|
|
1718
1769
|
const answer = await rl2.question(prompt);
|
|
1719
1770
|
return answer.trim() || defaultVal || "";
|
|
1720
1771
|
};
|
|
1721
1772
|
const derivedName = deriveOutputName(siteUrl, platformName);
|
|
1722
1773
|
drawHeader("Step 3 : Output Directory");
|
|
1723
1774
|
const outDir = await ask2("Output directory", "./" + derivedName);
|
|
1724
|
-
console.log(` ${
|
|
1775
|
+
console.log(` ${chalk9.green("\u2713")} ${chalk9.green("Output:")} ${chalk9.yellow(outDir)}
|
|
1725
1776
|
`);
|
|
1726
1777
|
drawHeader("Step 4 : Options");
|
|
1727
1778
|
let prettyPrint;
|
|
@@ -1730,15 +1781,15 @@ async function runSetup(legacyMode = false) {
|
|
|
1730
1781
|
if (legacyMode) {
|
|
1731
1782
|
const prettyAnswer = await ask2("Pretty-print JS files? (y/n)", "y");
|
|
1732
1783
|
prettyPrint = prettyAnswer.toLowerCase().startsWith("y");
|
|
1733
|
-
console.log(` ${
|
|
1784
|
+
console.log(` ${chalk9.green("\u2713")} Pretty-print: ${prettyPrint ? chalk9.green("yes") : chalk9.red("no")}
|
|
1734
1785
|
`);
|
|
1735
1786
|
const subpagesAnswer = await ask2("Export sub-pages? (y/n)", "n");
|
|
1736
1787
|
includeSubpages = subpagesAnswer.toLowerCase().startsWith("y");
|
|
1737
|
-
console.log(` ${
|
|
1788
|
+
console.log(` ${chalk9.green("\u2713")} Sub-pages: ${includeSubpages ? chalk9.green("yes") : chalk9.red("no")}
|
|
1738
1789
|
`);
|
|
1739
1790
|
const concurrencyAnswer = await ask2("Download concurrency", "12");
|
|
1740
1791
|
concurrency = parseInt(concurrencyAnswer, 10) || 12;
|
|
1741
|
-
console.log(` ${
|
|
1792
|
+
console.log(` ${chalk9.green("\u2713")} Concurrency: ${chalk9.yellow(String(concurrency))}
|
|
1742
1793
|
`);
|
|
1743
1794
|
} else {
|
|
1744
1795
|
rl2.close();
|
|
@@ -1759,24 +1810,29 @@ async function runSetup(legacyMode = false) {
|
|
|
1759
1810
|
], 1);
|
|
1760
1811
|
concurrency = parseInt(concurrencyVal, 10);
|
|
1761
1812
|
}
|
|
1813
|
+
const w = maxWidth();
|
|
1814
|
+
const isSmall = w < 50;
|
|
1815
|
+
const G2 = chalk9.hex("#C4953A");
|
|
1816
|
+
const B2 = chalk9.hex("#8B6914");
|
|
1762
1817
|
console.log("");
|
|
1763
|
-
const width = getWidth3();
|
|
1764
|
-
const isSmall = width < 50;
|
|
1765
1818
|
if (!isSmall) {
|
|
1766
|
-
console.log(
|
|
1767
|
-
console.log(
|
|
1768
|
-
console.log(chalk8.hex("#D4A017")(" \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"));
|
|
1819
|
+
console.log(boxTop(w));
|
|
1820
|
+
console.log(boxLine(w, chalk9.bold.white(" Summary")));
|
|
1769
1821
|
} else {
|
|
1770
|
-
console.log(
|
|
1771
|
-
}
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1822
|
+
console.log(chalk9.bold.white(" Summary:"));
|
|
1823
|
+
}
|
|
1824
|
+
for (const [label, value] of [
|
|
1825
|
+
["URL", siteUrl],
|
|
1826
|
+
["Platform", platformName],
|
|
1827
|
+
["Output", path6.resolve(outDir)],
|
|
1828
|
+
["Pretty-print", prettyPrint ? "yes" : "no"],
|
|
1829
|
+
["Sub-pages", includeSubpages ? "yes" : "no"],
|
|
1830
|
+
["Concurrency", String(concurrency)]
|
|
1831
|
+
]) {
|
|
1832
|
+
console.log(boxRow(w, label, value));
|
|
1833
|
+
}
|
|
1778
1834
|
if (!isSmall) {
|
|
1779
|
-
console.log(
|
|
1835
|
+
console.log(boxBot(w));
|
|
1780
1836
|
}
|
|
1781
1837
|
console.log("");
|
|
1782
1838
|
let startExport;
|
|
@@ -1793,7 +1849,7 @@ async function runSetup(legacyMode = false) {
|
|
|
1793
1849
|
}
|
|
1794
1850
|
if (!startExport) {
|
|
1795
1851
|
console.log(`
|
|
1796
|
-
${
|
|
1852
|
+
${chalk9.yellow("Export cancelled.")}
|
|
1797
1853
|
`);
|
|
1798
1854
|
return;
|
|
1799
1855
|
}
|
|
@@ -1811,6 +1867,7 @@ var init_setup = __esm({
|
|
|
1811
1867
|
init_exporter();
|
|
1812
1868
|
init_platforms();
|
|
1813
1869
|
init_select();
|
|
1870
|
+
init_box();
|
|
1814
1871
|
}
|
|
1815
1872
|
});
|
|
1816
1873
|
|
|
@@ -1917,28 +1974,28 @@ async function main() {
|
|
|
1917
1974
|
process.exit(0);
|
|
1918
1975
|
}
|
|
1919
1976
|
if (args.includes("--about")) {
|
|
1920
|
-
const
|
|
1977
|
+
const chalk10 = (await import("chalk")).default;
|
|
1921
1978
|
showBanner();
|
|
1922
|
-
console.log(` ${
|
|
1923
|
-
console.log(` ${
|
|
1979
|
+
console.log(` ${chalk10.white.bold("Framer Export")} ${chalk10.gray(`v${package_default.version}`)}`);
|
|
1980
|
+
console.log(` ${chalk10.white(package_default.description)}
|
|
1924
1981
|
`);
|
|
1925
|
-
console.log(` ${
|
|
1926
|
-
console.log(` ${
|
|
1927
|
-
console.log(` ${
|
|
1928
|
-
console.log(` ${
|
|
1929
|
-
console.log(` ${
|
|
1930
|
-
console.log(` ${
|
|
1982
|
+
console.log(` ${chalk10.white.bold("Author")} ${chalk10.hex("#D4A017")("Dany (danbenba)")}`);
|
|
1983
|
+
console.log(` ${chalk10.white.bold("Portfolio")} ${chalk10.underline.hex("#D4A017")("https://github.com/danbenba")}`);
|
|
1984
|
+
console.log(` ${chalk10.white.bold("GitHub")} ${chalk10.underline.hex("#D4A017")(package_default.repository.url.replace("git+", "").replace(".git", ""))}`);
|
|
1985
|
+
console.log(` ${chalk10.white.bold("npm")} ${chalk10.underline.hex("#D4A017")(`https://www.npmjs.com/package/${package_default.name}`)}`);
|
|
1986
|
+
console.log(` ${chalk10.white.bold("License")} ${chalk10.green(package_default.license)}`);
|
|
1987
|
+
console.log(` ${chalk10.white.bold("Node")} ${chalk10.gray(`>=${package_default.engines.node}`)}`);
|
|
1931
1988
|
console.log("");
|
|
1932
1989
|
process.exit(0);
|
|
1933
1990
|
}
|
|
1934
1991
|
checkForUpdates(VERSION).then((latest) => {
|
|
1935
1992
|
if (!latest) return;
|
|
1936
|
-
import("chalk").then((
|
|
1993
|
+
import("chalk").then((chalk10) => {
|
|
1937
1994
|
console.log("");
|
|
1938
1995
|
console.log(
|
|
1939
|
-
` ${
|
|
1996
|
+
` ${chalk10.default.yellow("\u21B3")} Update available: ${chalk10.default.gray(VERSION)} \u2192 ${chalk10.default.green(latest)}`
|
|
1940
1997
|
);
|
|
1941
|
-
console.log(` ${
|
|
1998
|
+
console.log(` ${chalk10.default.hex("#D4A017")(" Run:")} ${chalk10.default.hex("#B8860B")("npm i -g framer-export@latest")}`);
|
|
1942
1999
|
console.log("");
|
|
1943
2000
|
});
|
|
1944
2001
|
});
|
|
@@ -1965,9 +2022,9 @@ async function main() {
|
|
|
1965
2022
|
try {
|
|
1966
2023
|
new URL5(url);
|
|
1967
2024
|
} catch {
|
|
1968
|
-
const
|
|
1969
|
-
console.log(` ${
|
|
1970
|
-
console.log(` ${
|
|
2025
|
+
const chalk10 = (await import("chalk")).default;
|
|
2026
|
+
console.log(` ${chalk10.red("\u2717")} ${chalk10.red.bold("Invalid URL:")} ${chalk10.white(url)}`);
|
|
2027
|
+
console.log(` ${chalk10.gray("Expected: https://yoursite.framer.app")}
|
|
1971
2028
|
`);
|
|
1972
2029
|
process.exit(1);
|
|
1973
2030
|
}
|
|
@@ -1979,10 +2036,10 @@ async function main() {
|
|
|
1979
2036
|
try {
|
|
1980
2037
|
await new FramerExporter2(url, path7.resolve(out), platformOverride || void 0).run(includeSubpages);
|
|
1981
2038
|
} catch (e) {
|
|
1982
|
-
const
|
|
2039
|
+
const chalk10 = (await import("chalk")).default;
|
|
1983
2040
|
console.log(`
|
|
1984
|
-
${
|
|
1985
|
-
console.log(
|
|
2041
|
+
${chalk10.red("\u2717")} ${chalk10.red.bold("FAILED:")} ${chalk10.white(e.message)}`);
|
|
2042
|
+
console.log(chalk10.gray(e.stack || ""));
|
|
1986
2043
|
process.exit(1);
|
|
1987
2044
|
}
|
|
1988
2045
|
}
|