framer-export 4.3.2 → 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 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.2",
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",
@@ -267,41 +267,73 @@ function trunc(text, max) {
267
267
  if (text.length <= max) return text;
268
268
  return text.slice(0, max - 2) + "..";
269
269
  }
270
- function nextColor() {
271
- return MSG_COLORS[_msgIdx++ % MSG_COLORS.length];
272
- }
273
270
  function output(line) {
274
- if (_cooking) {
275
- _cooking.log(line);
276
- } else {
277
- console.log(line);
278
- }
271
+ if (_cooking) _cooking.log(line);
272
+ else console.log(line);
279
273
  }
280
- var _cooking, T, MSG_COLORS, _msgIdx, log, info, warn, success;
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
- MSG_COLORS = [
280
+ LOG_PALETTE = [
281
+ (s) => chalk3.hex("#D4A017")(s),
282
+ (s) => chalk3.hex("#DAA520")(s),
283
+ (s) => chalk3.hex("#C8A951")(s),
284
+ (s) => chalk3.hex("#E0B040")(s),
285
+ (s) => chalk3.hex("#daa520")(s),
286
+ (s) => chalk3.hex("#c4953a")(s),
287
287
  (s) => chalk3.hex("#e8c33a")(s),
288
- (s) => chalk3.hex("#d4a76a")(s),
289
- (s) => chalk3.hex("#c8a040")(s),
290
- (s) => chalk3.hex("#e0b040")(s),
291
288
  (s) => chalk3.hex("#dab660")(s),
292
- (s) => chalk3.hex("#c4953a")(s),
293
- (s) => chalk3.hex("#daa520")(s),
294
- (s) => chalk3.hex("#b8960a")(s)
289
+ (s) => chalk3.hex("#b8960a")(s),
290
+ (s) => chalk3.hex("#d4a76a")(s),
291
+ (s) => chalk3.hex("#e0a030")(s),
292
+ (s) => chalk3.hex("#c0a060")(s)
293
+ ];
294
+ _li = 0;
295
+ log = (m) => {
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))}`);
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)
295
307
  ];
296
- _msgIdx = 0;
297
- log = (m) => output(`${chalk3.hex("#6d6d6d")(`[${T()}]`)} ${chalk3.hex("#D4A017")("[LOG]")} ${nextColor()(trunc(m, 120))}`);
298
- info = (m) => output(`${chalk3.hex("#757575")(`[${T()}]`)} ${chalk3.hex("#E8A317").bold("[INFO]")} ${chalk3.bold(trunc(m, 120))}`);
308
+ _ii = 0;
309
+ info = (m) => {
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))}`);
313
+ };
299
314
  warn = (m) => {
300
- const line = `${chalk3.hex("#8a8a8a")(`[${T()}]`)} ${chalk3.hex("#CC7722").bold("[WARN]")} ${chalk3.hex("#CC7722")(trunc(m, 120))}`;
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))}`;
301
323
  if (_cooking) _cooking.log(line);
302
324
  else console.warn(line);
303
325
  };
304
- success = (m) => output(`${chalk3.hex("#7a7a7a")(`[${T()}]`)} ${chalk3.greenBright("[OK]")} ${chalk3.green(trunc(m, 120))}`);
326
+ success = (m) => {
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))}`);
336
+ };
305
337
  }
306
338
  });
307
339
 
@@ -1301,50 +1333,30 @@ var init_summary = __esm({
1301
1333
 
1302
1334
  // src/cli/cooking.ts
1303
1335
  import chalk6 from "chalk";
1304
- var SHINE_WIDTH, FRAME_INTERVAL, SPINNER_FRAMES, PALETTE, CookingSpinner;
1336
+ var SHINE_WIDTH, FRAME_INTERVAL, DOT_PHASES, CookingSpinner;
1305
1337
  var init_cooking = __esm({
1306
1338
  "src/cli/cooking.ts"() {
1307
1339
  "use strict";
1308
1340
  SHINE_WIDTH = 10;
1309
1341
  FRAME_INTERVAL = 140;
1310
- SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
1311
- PALETTE = [
1312
- (s) => chalk6.hex("#D4A017")(s),
1313
- (s) => chalk6.hex("#E8A317")(s),
1314
- (s) => chalk6.hex("#DAA520")(s),
1315
- (s) => chalk6.hex("#F0C040")(s),
1316
- (s) => chalk6.hex("#C4953A")(s),
1317
- (s) => chalk6.hex("#E6B83C")(s),
1318
- (s) => chalk6.hex("#C8A951")(s),
1319
- (s) => chalk6.hex("#D9B44D")(s)
1320
- ];
1342
+ DOT_PHASES = [" ", ". ", ".. ", "...", " ..", " .", " "];
1321
1343
  CookingSpinner = class {
1322
1344
  interval = null;
1323
- bgInterval = null;
1324
1345
  frame = 0;
1325
1346
  phase = "";
1326
1347
  active = false;
1327
- bar = 0;
1328
- barDir = 1;
1329
1348
  start(phase = "") {
1330
1349
  this.phase = phase;
1331
1350
  this.frame = 0;
1332
- this.bar = 0;
1333
- this.barDir = 1;
1334
1351
  this.active = true;
1335
1352
  this.draw();
1336
1353
  this.interval = setInterval(() => {
1337
1354
  this.frame++;
1338
1355
  this.draw();
1339
1356
  }, FRAME_INTERVAL);
1340
- this.bgInterval = setInterval(() => {
1341
- this.bar++;
1342
- this.draw();
1343
- }, 800);
1344
1357
  }
1345
1358
  update(phase) {
1346
1359
  this.phase = phase;
1347
- if (!this.active) this.draw();
1348
1360
  }
1349
1361
  log(message) {
1350
1362
  if (this.active) {
@@ -1361,27 +1373,15 @@ var init_cooking = __esm({
1361
1373
  clearInterval(this.interval);
1362
1374
  this.interval = null;
1363
1375
  }
1364
- if (this.bgInterval) {
1365
- clearInterval(this.bgInterval);
1366
- this.bgInterval = null;
1367
- }
1368
1376
  process.stdout.write("\r\x1B[2K");
1369
1377
  }
1370
1378
  draw() {
1371
1379
  if (!this.active) return;
1372
- const spinner = SPINNER_FRAMES[this.frame % SPINNER_FRAMES.length];
1373
- const paletteFn = PALETTE[this.frame % PALETTE.length];
1374
- const dotPhase = Math.floor(this.frame / 3) % 4;
1375
- const dotStr = dotPhase === 0 ? " " : dotPhase === 1 ? ". " : dotPhase === 2 ? ".. " : "...";
1380
+ const dots = DOT_PHASES[this.frame % DOT_PHASES.length];
1376
1381
  const shimmer = this.renderShimmer("Cooking");
1377
- const spinnerChar = chalk6.hex("#F0C040")(spinner);
1378
- const barLen = 12;
1379
- const barPos = this.bar % (barLen * 2);
1380
- const barStr = this.renderBar(barLen, barPos);
1382
+ const dotStr = chalk6.hex("#D4A017")(dots);
1381
1383
  const phaseStr = this.phase ? ` ${chalk6.gray(this.limitLen(this.phase, 38))}` : "";
1382
- process.stdout.write(
1383
- `\r\x1B[2K ${spinnerChar} ${shimmer} ${paletteFn(dotStr)} ${barStr}${phaseStr}`
1384
- );
1384
+ process.stdout.write(`\r\x1B[2K ${shimmer} ${dotStr}${phaseStr}`);
1385
1385
  }
1386
1386
  renderShimmer(text) {
1387
1387
  let result = "";
@@ -1398,27 +1398,9 @@ var init_cooking = __esm({
1398
1398
  }
1399
1399
  return result;
1400
1400
  }
1401
- renderBar(len, pos) {
1402
- let s = "";
1403
- for (let i = 0; i < len; i++) {
1404
- const dist = Math.abs(i - pos);
1405
- if (dist < 3) {
1406
- const t = 1 - dist / 3;
1407
- const r = Math.floor(200 + t * 55);
1408
- const g = Math.floor(160 + t * 50);
1409
- const b = Math.floor(20 + t * 30);
1410
- s += chalk6.rgb(r, g, b)("\u258C");
1411
- } else if (dist < 6) {
1412
- s += chalk6.rgb(140, 100, 20)("\u258C");
1413
- } else {
1414
- s += chalk6.rgb(50, 35, 10)(" ");
1415
- }
1416
- }
1417
- return `[${s}]`;
1418
- }
1419
1401
  limitLen(s, max) {
1420
1402
  if (s.length <= max) return s;
1421
- return s.slice(0, max - 3) + "\u2026";
1403
+ return s.slice(0, max - 1) + "\u2026";
1422
1404
  }
1423
1405
  };
1424
1406
  }
@@ -1612,7 +1594,17 @@ var init_exporter = __esm({
1612
1594
  import readline from "readline";
1613
1595
  import { stdin, stdout } from "process";
1614
1596
  import chalk8 from "chalk";
1597
+ function stripAnsi2(s) {
1598
+ return s.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, "");
1599
+ }
1615
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) {
1616
1608
  return new Promise((resolve) => {
1617
1609
  let selected = defaultIndex;
1618
1610
  const render = (initial = false) => {
@@ -1631,8 +1623,7 @@ async function select(question, options, defaultIndex = 0) {
1631
1623
  };
1632
1624
  render(true);
1633
1625
  readline.emitKeypressEvents(stdin);
1634
- const wasTTY = stdin.isTTY || false;
1635
- if (wasTTY) stdin.setRawMode(true);
1626
+ stdin.setRawMode(true);
1636
1627
  const onKeypress = (_str, key) => {
1637
1628
  if (!key) return;
1638
1629
  if (key.name === "up" && selected > 0) {
@@ -1642,16 +1633,16 @@ async function select(question, options, defaultIndex = 0) {
1642
1633
  selected++;
1643
1634
  render();
1644
1635
  } else if (key.name === "return") {
1645
- if (wasTTY) stdin.setRawMode(false);
1636
+ stdin.setRawMode(false);
1646
1637
  stdin.removeListener("keypress", onKeypress);
1647
1638
  stdin.pause();
1648
1639
  stdout.write(`\x1B[${options.length + 1}A`);
1649
1640
  stdout.write("\x1B[J");
1650
- console.log(` ${chalk8.green("\u2713")} ${chalk8.white.bold(question)} ${chalk8.hex("#D4A017")(options[selected].label)}
1641
+ console.log(` ${chalk8.green("\u2713")} ${chalk8.white.bold(question)} ${chalk8.hex("#D4A017")(stripAnsi2(options[selected].label))}
1651
1642
  `);
1652
1643
  resolve(options[selected].value);
1653
1644
  } else if (key.ctrl && key.name === "c" || key.name === "escape") {
1654
- if (wasTTY) stdin.setRawMode(false);
1645
+ stdin.setRawMode(false);
1655
1646
  stdin.removeListener("keypress", onKeypress);
1656
1647
  process.exit(0);
1657
1648
  }
@@ -1660,6 +1651,45 @@ async function select(question, options, defaultIndex = 0) {
1660
1651
  stdin.on("keypress", onKeypress);
1661
1652
  });
1662
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
+ }
1663
1693
  var init_select = __esm({
1664
1694
  "src/cli/select.ts"() {
1665
1695
  "use strict";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../package.json","../../src/cli/banner.ts","../../src/assets/asset-map.ts","../../src/config/index.ts","../../src/network/download.ts","../../src/logger/index.ts","../../src/platforms/framer.ts","../../src/platforms/webflow.ts","../../src/platforms/wix.ts","../../src/platforms/detect.ts","../../src/platforms/index.ts","../../src/exporter/capture.ts","../../src/network/pool.ts","../../src/exporter/download.ts","../../src/formatter/prettify.ts","../../src/server/template.ts","../../src/exporter/output.ts","../../src/cli/box.ts","../../src/exporter/summary.ts","../../src/cli/cooking.ts","../../src/exporter/index.ts","../../src/cli/select.ts","../../src/cli/setup.ts","../../src/cli/index.ts","../../src/cli/help.ts","../../src/cli/update-check.ts"],"sourcesContent":["{\n \"name\": \"framer-export\",\n \"version\": \"4.3.2\",\n \"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.\",\n \"type\": \"module\",\n \"main\": \"dist/cli/index.js\",\n \"types\": \"dist/cli/index.d.ts\",\n \"bin\": {\n \"framer-export\": \"./bin/framer-export.js\",\n \"fexport\": \"./bin/fexport.js\",\n \"framerexport\": \"./bin/framerexport.js\"\n },\n \"files\": [\n \"dist/\",\n \"bin/\",\n \"LICENSE\",\n \"README.md\"\n ],\n \"scripts\": {\n \"start\": \"tsx src/cli/index.ts\",\n \"dev\": \"tsx src/cli/index.ts\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"format\": \"prettier --write \\\"src/**/*.ts\\\"\",\n \"prepublishOnly\": \"npm run build\",\n \"prepack\": \"npm run build\"\n },\n \"keywords\": [\n \"framer\",\n \"webflow\",\n \"wix\",\n \"exporter\",\n \"export\",\n \"scraper\",\n \"mirror\",\n \"site-downloader\",\n \"site-export\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/danbenba/FramerExport.git\"\n },\n \"homepage\": \"https://github.com/danbenba/FramerExport#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/danbenba/FramerExport/issues\"\n },\n \"license\": \"MIT\",\n \"author\": \"Dany (danbenba)\",\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.3.0\",\n \"ora\": \"^8.0.0\",\n \"prettier\": \"^3.2.0\",\n \"puppeteer\": \"^22.0.0\",\n \"readline-promise\": \"^1.0.5\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.0.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.7.0\",\n \"typescript\": \"^5.4.0\"\n }\n}\n","import chalk from 'chalk';\nimport pkg from '../../package.json';\n\nfunction getWidth(): number {\n return process.stdout.columns || 80;\n}\n\nconst ASCII_ART = [\n '███████╗███████╗██╗ ██╗██████╗ ██████╗ ██████╗ ████████╗',\n '██╔════╝██╔════╝╚██╗██╔╝██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝',\n '█████╗ █████╗ ╚███╔╝ ██████╔╝██║ ██║██████╔╝ ██║ ',\n '██╔══╝ ██╔══╝ ██╔██╗ ██╔═══╝ ██║ ██║██╔══██╗ ██║ ',\n '██║ ███████╗██╔╝ ██╗██║ ╚██████╔╝██║ ██║ ██║ ',\n '╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝',\n];\n\nexport function showBanner(): void {\n const width = getWidth();\n const isSmall = width < 65;\n\n if (isSmall) {\n console.log(`\\n ${chalk.hex('#D4A017').bold('F-EXPORT')} ${chalk.gray(`v${pkg.version}`)}`);\n console.log(` ${chalk.white.bold('Framer · Webflow · Wix Exporter')}\\n`);\n return;\n }\n\n const gold = chalk.hex('#D4A017').bold;\n const gray = chalk.gray;\n\n console.log('');\n ASCII_ART.forEach((line) => {\n console.log(' ' + gold(line));\n });\n console.log('');\n console.log(` ${gray(`v${pkg.version}`)} ${chalk.white.bold('Framer · Webflow · Wix Exporter')}\\n`);\n}\n","import path from 'path';\nimport crypto from 'crypto';\nimport { URL } from 'url';\nimport type { PlatformHandler } from '../platforms/types.js';\n\ninterface AssetEntry {\n localPath: string;\n}\n\nexport class AssetMap {\n entries: Map<string, AssetEntry> = new Map();\n buffers: Map<string, Buffer> = new Map();\n\n localPathFor(urlStr: string, platform?: PlatformHandler): string | null {\n if (this.entries.has(urlStr)) return this.entries.get(urlStr)!.localPath;\n\n let parsed: URL;\n try {\n parsed = new URL(urlStr);\n } catch {\n return null;\n }\n\n const host: string = parsed.hostname;\n const pathname: string = parsed.pathname;\n const ext: string = path.extname(pathname.split('?')[0]).toLowerCase();\n\n let dir: string | null = null;\n\n if (platform) {\n dir = platform.mapAssetDir(host, pathname, ext);\n }\n\n if (!dir) {\n dir = this.fallbackDir(host, ext);\n }\n\n let filename: string;\n const baseName: string = path.basename(pathname.split('?')[0]);\n const hash: string = crypto.createHash('md5').update(urlStr).digest('hex').slice(0, 6);\n\n if (baseName && baseName.length > 1 && baseName !== '/') {\n const clean: string = baseName.replace(/[^a-zA-Z0-9._-]/g, '_');\n filename = clean.includes('.') ? clean : `${clean}-${hash}`;\n } else {\n filename = `asset-${hash}${ext || ''}`;\n }\n\n if (ext === '.mjs' || ext === '.js') {\n filename = baseName.replace(/[^a-zA-Z0-9._-]/g, '_');\n }\n\n const localPath: string = `${dir}/${filename}`;\n this.entries.set(urlStr, { localPath });\n\n const base: string = urlStr.split('?')[0];\n if (base !== urlStr && !this.entries.has(base)) {\n this.entries.set(base, { localPath });\n }\n\n return localPath;\n }\n\n rewrite(text: string, fromDir: string = ''): string {\n const sorted = [...this.entries.entries()].sort((a, b) => b[0].length - a[0].length);\n let out: string = text;\n for (const [url, { localPath }] of sorted) {\n const rel: string = fromDir ? path.posix.relative(fromDir, localPath) : localPath;\n out = out.split(url).join(rel);\n if (url.includes('&')) {\n out = out.split(url.replace(/&/g, '&amp;')).join(rel);\n }\n }\n return out;\n }\n\n private fallbackDir(host: string, ext: string): string {\n if (host.includes('fonts.gstatic.com') || host.includes('fonts.googleapis.com')) {\n return 'assets/fonts';\n }\n return ext === '.mjs' || ext === '.js' ? 'scripts/vendor' : 'assets/misc';\n }\n}\n","import type { Config } from '../types.js';\n\nexport const CFG: Config = {\n viewport: { width: 1440, height: 900 },\n timeout: 90000,\n scrollStep: 250,\n scrollDelay: 60,\n concurrency: 12,\n retries: 3,\n dlTimeout: 30000,\n sharedStripDomains: [\n 'sentry.io', 'www.googletagmanager.com', 'connect.facebook.net',\n 'stats.g.doubleclick.net',\n 'google-analytics.com',\n ],\n};\n","import https from 'https';\nimport http from 'http';\nimport { URL } from 'url';\nimport { CFG } from '../config/index.js';\n\nexport function dlBuffer(url: string, retries: number = CFG.retries): Promise<Buffer> {\n return new Promise((resolve, reject) => {\n const proto = url.startsWith('https') ? https : http;\n const go = (left: number): void => {\n const req = proto.get(url, { timeout: CFG.dlTimeout }, (res) => {\n if (res.statusCode! >= 300 && res.statusCode! < 400 && res.headers.location) {\n return dlBuffer(new URL(res.headers.location, url).href, left).then(resolve, reject);\n }\n if (res.statusCode !== 200) {\n return left > 1\n ? setTimeout(() => go(left - 1), 500)\n : reject(new Error(`HTTP ${res.statusCode}`));\n }\n const ch: Buffer[] = [];\n res.on('data', (c: Buffer) => ch.push(c));\n res.on('end', () => resolve(Buffer.concat(ch)));\n res.on('error', (e: Error) => (left > 1 ? setTimeout(() => go(left - 1), 500) : reject(e)));\n });\n req.on('error', (e: Error) => (left > 1 ? setTimeout(() => go(left - 1), 500) : reject(e)));\n req.on('timeout', () => {\n req.destroy();\n left > 1 ? setTimeout(() => go(left - 1), 500) : reject(new Error('Timeout'));\n });\n };\n go(retries);\n });\n}\n","import chalk from 'chalk';\nimport type { CookingSpinner } from '../cli/cooking.js';\n\nlet _cooking: CookingSpinner | null = null;\n\nexport function setCooking(spinner: CookingSpinner | null): void {\n _cooking = spinner;\n}\n\nconst T = (): string => new Date().toISOString().slice(11, 19);\n\nconst MSG_COLORS: Array<(s: string) => string> = [\n (s: string) => chalk.hex('#e8c33a')(s),\n (s: string) => chalk.hex('#d4a76a')(s),\n (s: string) => chalk.hex('#c8a040')(s),\n (s: string) => chalk.hex('#e0b040')(s),\n (s: string) => chalk.hex('#dab660')(s),\n (s: string) => chalk.hex('#c4953a')(s),\n (s: string) => chalk.hex('#daa520')(s),\n (s: string) => chalk.hex('#b8960a')(s),\n];\n\nlet _msgIdx = 0;\n\nfunction trunc(text: string, max: number): string {\n if (text.length <= max) return text;\n return text.slice(0, max - 2) + '..';\n}\n\nfunction nextColor(): (s: string) => string {\n return MSG_COLORS[_msgIdx++ % MSG_COLORS.length];\n}\n\nfunction output(line: string): void {\n if (_cooking) {\n _cooking.log(line);\n } else {\n console.log(line);\n }\n}\n\nexport const log = (m: string): void =>\n output(`${chalk.hex('#6d6d6d')(`[${T()}]`)} ${chalk.hex('#D4A017')('[LOG]')} ${nextColor()(trunc(m, 120))}`);\n\nexport const info = (m: string): void =>\n output(`${chalk.hex('#757575')(`[${T()}]`)} ${chalk.hex('#E8A317').bold('[INFO]')} ${chalk.bold(trunc(m, 120))}`);\n\nexport const warn = (m: string): void => {\n const line = `${chalk.hex('#8a8a8a')(`[${T()}]`)} ${chalk.hex('#CC7722').bold('[WARN]')} ${chalk.hex('#CC7722')(trunc(m, 120))}`;\n if (_cooking) _cooking.log(line);\n else console.warn(line);\n};\n\nexport const success = (m: string): void =>\n output(`${chalk.hex('#7a7a7a')(`[${T()}]`)} ${chalk.greenBright('[OK]')} ${chalk.green(trunc(m, 120))}`);\n\nexport const error = (m: string): void => {\n const line = `${chalk.hex('#888888')(`[${T()}]`)} ${chalk.redBright('[ERROR]')} ${chalk.red.bold(trunc(m, 120))}`;\n if (_cooking) _cooking.log(line);\n else console.error(line);\n};\n","import type { PlatformHandler } from './types.js';\n\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf'];\n\nexport const framer: PlatformHandler = {\n name: 'framer',\n displayName: 'Framer',\n\n detectByUrl(url: string): boolean {\n return /\\.framer\\.(app|website)|framercanvas\\.com/.test(url);\n },\n\n detectByHtml(html: string): boolean {\n return (\n html.includes('id=\"main\"') &&\n (html.includes('framerstatic.com') || html.includes('framerusercontent.com'))\n );\n },\n\n stripDomains: ['events.framer.com', 'api.framer.com', 'collect.frameranalytics.com'],\n\n stripSelectors: [\n 'script[src*=\"events.framer.com\"]',\n '#__framer-badge-container',\n '#__framer-badge',\n 'link[href*=\"canvas-sandbox\"]',\n 'script[src*=\"framer.com/bootstrap\"]',\n ],\n\n stripPatterns: [\n /<div id=\"__framer-badge-container\"[^>]*><\\/div>/g,\n /<script>try\\{if\\(localStorage\\.get\\(\"__framer_force_showing_editorbar_since\"\\)\\)[^<]*<\\/script>/g,\n ],\n\n hydrationTimeout: 10000,\n needsHydrationCheck: true,\n\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('framerusercontent.com')) {\n if (pathname.startsWith('/images/')) return 'assets/images';\n if (pathname.startsWith('/assets/')) {\n return FONT_EXTS.includes(ext) ? 'assets/fonts' : 'assets/misc';\n }\n if (pathname.startsWith('/sites/')) {\n if (ext === '.mjs' || ext === '.js') return 'scripts/vendor';\n if (ext === '.json') return 'data';\n if (ext === '.css') return 'styles';\n if (ext === '.framercms') return 'data';\n return 'assets/misc';\n }\n if (pathname.startsWith('/modules/')) {\n return ext === '.framercms' ? 'data' : 'scripts/modules';\n }\n return 'assets/misc';\n }\n\n if (host.includes('app.framerstatic.com')) {\n if (ext === '.css') return 'styles';\n if (ext === '.mjs' || ext === '.js') return 'scripts/vendor';\n if (ext === '.woff2' || ext === '.woff') return 'assets/fonts';\n if (ext === '.png' || ext === '.svg') return 'assets/images';\n return 'assets/misc';\n }\n\n if (host.includes('framercanvas.com') || host.includes('framer.com')) {\n if (ext === '.mjs' || ext === '.js') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n return 'assets/misc';\n }\n\n return null;\n },\n};\n","import type { PlatformHandler } from './types.js';\n\nconst IMG_EXTS: string[] = ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.webp', '.avif'];\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf', '.eot'];\nconst VIDEO_EXTS: string[] = ['.mp4', '.webm', '.ogg'];\n\nexport const webflow: PlatformHandler = {\n name: 'webflow',\n displayName: 'Webflow',\n\n detectByUrl(url: string): boolean {\n return /\\.webflow\\.(io|com)/.test(url);\n },\n\n detectByHtml(html: string): boolean {\n return (\n html.includes('data-wf-site') ||\n html.includes('w-webflow-badge') ||\n html.includes('Webflow') ||\n html.includes('webflow.js')\n );\n },\n\n stripDomains: ['js-agent.newrelic.com', 'cdn.heapanalytics.com', 'tr.snapchat.com'],\n\n stripSelectors: ['.w-webflow-badge', 'link[href*=\"editorbar\"]'],\n\n stripPatterns: [\n /<a[^>]*class=\"[^\"]*w-webflow-badge[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n /<a[^>]*href=\"[^\"]*webflow\\.com\\?utm_campaign=brandjs[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n /<style>[^<]*\\.w-webflow-badge[^<]*<\\/style>/g,\n /Powered by <a[^>]*href=\"[^\"]*webflow\\.com\"[^>]*>[^<]*<\\/a>/g,\n /<!-- This site was created in Webflow\\.[^>]*-->/g,\n /<html([^>]*) data-wf-domain=\"[^\"]*\"/g,\n /<html([^>]*) data-wf-page=\"[^\"]*\"/g,\n /<html([^>]*) data-wf-site=\"[^\"]*\"/g,\n /<html([^>]*) data-wf-status=\"[^\"]*\"/g,\n /<meta[^>]*content=\"Webflow\"[^>]*>/g,\n ],\n\n hydrationTimeout: 2000,\n needsHydrationCheck: false,\n\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (\n host.includes('website-files.com') ||\n host.includes('webflow.com') ||\n host.includes('uploads-ssl.webflow.com')\n ) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (pathname.includes('/css/') || ext === '.css') return 'styles';\n if (pathname.includes('/js/') || ext === '.js') return 'scripts/vendor';\n if (pathname.includes('/gsap/') || pathname.includes('/plugins/')) return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n\n if (host.includes('d3e54v103j8qbb.cloudfront.net')) {\n if (ext === '.js') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n\n return null;\n },\n};\n","import type { PlatformHandler } from './types.js';\n\nconst IMG_EXTS: string[] = ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.webp', '.avif', '.ico'];\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf', '.eot'];\nconst VIDEO_EXTS: string[] = ['.mp4', '.webm', '.ogg'];\n\nexport const wix: PlatformHandler = {\n name: 'wix',\n displayName: 'Wix',\n\n detectByUrl(url: string): boolean {\n return /\\.wixsite\\.com|\\.wix\\.com/.test(url);\n },\n\n detectByHtml(html: string): boolean {\n return (\n html.includes('wix-viewer-model') ||\n html.includes('id=\"WIX_ADS\"') ||\n html.includes('X-Wix-') ||\n html.includes('Wix.com') ||\n html.includes('wixcode-sdk') ||\n html.includes('data-wix') ||\n html.includes('wix-code') ||\n html.includes('WixCode') ||\n /\\bwix\\.com\\b/.test(html) ||\n /meta\\s+name=[\"']generator[\"']\\s+content=[\"'][^\"']*Wix[^\"']*[\"']/i.test(html) ||\n /_wix_/i.test(html) ||\n /wix-ecom/i.test(html)\n );\n },\n\n stripDomains: [\n 'frog.wix.com',\n 'bi.wixapi.com',\n 'fed.wixcodescheduler.com',\n 'editor.wix.com',\n 'panorama.wixapps.net',\n ],\n\n stripSelectors: ['#WIX_ADS', '.wix-ads', '#wix-badge', '#SCROLL_TO_TOP'],\n\n stripPatterns: [\n /<div[^>]*class=\"[^\"]*wix-ads[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/g,\n ],\n\n hydrationTimeout: 3000,\n needsHydrationCheck: false,\n\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host === 'video.wixstatic.com') {\n return 'assets/videos';\n }\n\n if (host.includes('wixstatic.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n\n if (host.includes('parastorage.com')) {\n if (ext === '.js') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n\n return null;\n },\n};\n","import type { PlatformHandler, PlatformType } from './types.js';\nimport type { Page } from 'puppeteer';\nimport { framer } from './framer.js';\nimport { webflow } from './webflow.js';\nimport { wix } from './wix.js';\n\nconst ALL_PLATFORMS: PlatformHandler[] = [framer, webflow, wix];\n\nexport function detectByUrl(url: string): PlatformHandler | null {\n for (const platform of ALL_PLATFORMS) {\n if (platform.detectByUrl(url)) return platform;\n }\n return null;\n}\n\nexport function detectByHtml(html: string): PlatformHandler | null {\n for (const platform of ALL_PLATFORMS) {\n if (platform.detectByHtml(html)) return platform;\n }\n return null;\n}\n\nexport function detectPlatform(url: string, html?: string): PlatformHandler {\n const byUrl = detectByUrl(url);\n if (byUrl) return byUrl;\n\n if (html) {\n const byHtml = detectByHtml(html);\n if (byHtml) return byHtml;\n }\n\n return framer;\n}\n\nexport async function detectByDom(page: Page): Promise<PlatformHandler | null> {\n try {\n const signal: string = await page.evaluate(() => {\n const html: string = document.documentElement.outerHTML || '';\n\n if (/wix-viewer-model|_wix_|wix-ecom/i.test(html)) return 'wix';\n if (/data-wf-|w-webflow-badge|webflow\\.js/i.test(html)) return 'webflow';\n if (/framerusercontent|framercanvas|framerstatic/i.test(html)) return 'framer';\n\n const srcs: string[] = [];\n const scripts: NodeListOf<HTMLScriptElement> = document.querySelectorAll('script[src]');\n scripts.forEach((s) => { if (s.src) srcs.push(s.src); });\n const allSrcs: string = srcs.join(' ');\n if (/wixstatic\\.com|parastorage\\.com/.test(allSrcs)) return 'wix';\n if (/website-files\\.com|webflow\\.com/.test(allSrcs)) return 'webflow';\n if (/framerusercontent\\.com|framerstatic\\.com|framer\\.app/.test(allSrcs)) return 'framer';\n\n return '';\n });\n\n if (signal === 'wix') return wix;\n if (signal === 'webflow') return webflow;\n if (signal === 'framer') return framer;\n } catch {}\n return null;\n}\n\nexport function getPlatformByName(name: PlatformType): PlatformHandler {\n const map: Record<string, PlatformHandler> = { framer, webflow, wix };\n return map[name] || framer;\n}\n","export type { PlatformHandler, PlatformType } from './types.js';\nexport { framer } from './framer.js';\nexport { webflow } from './webflow.js';\nexport { wix } from './wix.js';\nexport { detectPlatform, detectByUrl, detectByHtml, detectByDom, getPlatformByName } from './detect.js';\n","import puppeteer, { type Page } from 'puppeteer';\nimport { CFG } from '../config/index.js';\nimport { log, success, info } from '../logger/index.js';\nimport { detectByDom } from '../platforms/index.js';\nimport type { ExporterContext } from '../types.js';\n\nexport async function launchAndCapture(exporter: ExporterContext): Promise<void> {\n exporter.cooking?.update('Launching browser...');\n log('Launching headless Chromium...');\n\n exporter.browser = await puppeteer.launch({\n headless: true,\n args: ['--no-sandbox', '--disable-setuid-sandbox'],\n });\n success('Chromium launched');\n\n exporter.page = await exporter.browser.newPage();\n await exporter.page.setViewport(CFG.viewport);\n log('Viewport set to ' + CFG.viewport.width + 'x' + CFG.viewport.height);\n\n await exporter.page.setUserAgent(\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' +\n '(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'\n );\n log('User agent set to Chrome 131');\n\n const allStripDomains: string[] = [\n ...CFG.sharedStripDomains,\n ...exporter.platform.stripDomains,\n ];\n log('Blocking ' + allStripDomains.length + ' tracking domains:');\n for (const domain of allStripDomains) {\n log(' - ' + domain);\n }\n\n let intercepted = 0;\n let blocked = 0;\n\n exporter.page.on('response', async (res) => {\n const url: string = res.url();\n if (url.startsWith('data:') || url.startsWith('blob:')) return;\n\n try {\n const host: string = new URL(url).hostname;\n if (allStripDomains.some((d) => host.includes(d))) {\n blocked++;\n return;\n }\n } catch {\n return;\n }\n\n exporter.assets.localPathFor(url, exporter.platform);\n try {\n exporter.assets.buffers.set(url, await res.buffer());\n intercepted++;\n } catch {}\n });\n\n log('Network interception enabled');\n\n exporter.cooking?.update('Navigating to site...');\n info('Navigating to ' + exporter.siteUrl);\n await exporter.page.goto(exporter.siteUrl, {\n waitUntil: 'networkidle2',\n timeout: CFG.timeout,\n });\n success('Page loaded (networkidle2)');\n log('Intercepted ' + intercepted + ' resources, blocked ' + blocked + ' tracking requests');\n\n log('Checking DOM-based platform detection...');\n const domDetected = await detectByDom(exporter.page);\n if (domDetected && domDetected.name !== exporter.platform.name) {\n log('Platform refined from DOM: ' + domDetected.displayName + ' (override: ' + exporter.platform.name + ')');\n exporter.platform = domDetected;\n }\n\n exporter.cooking?.update('Waiting for ' + exporter.platform.displayName + ' hydration...');\n\n if (exporter.platform.needsHydrationCheck) {\n log('Checking for #main element hydration...');\n log('Hydration timeout: ' + exporter.platform.hydrationTimeout + 'ms');\n const timeout = exporter.platform.hydrationTimeout;\n await exporter.page.evaluate(`\n new Promise(function(r) {\n var start = Date.now();\n var tick = function() {\n var m = document.getElementById('main') || document.body;\n if (m && m.children.length > 0) setTimeout(r, 2000);\n else if (Date.now() - start > ${timeout}) r();\n else setTimeout(tick, 200);\n };\n tick();\n })\n `);\n success('Hydration complete (SPA rendered)');\n } else {\n log('Static site detected, waiting ' + exporter.platform.hydrationTimeout + 'ms for render...');\n await new Promise<void>((r) => setTimeout(r, exporter.platform.hydrationTimeout));\n success(exporter.platform.displayName + ' page rendered');\n }\n\n exporter.cooking?.update('Scrolling page...');\n log('Starting full-page scroll (step: ' + CFG.scrollStep + 'px, delay: ' + CFG.scrollDelay + 'ms)');\n\n const scrollStep = CFG.scrollStep;\n const scrollDelay = CFG.scrollDelay;\n\n const pageHeight: number = await exporter.page.evaluate(`\n Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)\n `) as number;\n log('Page height: ' + pageHeight + 'px (' + Math.ceil(pageHeight / scrollStep) + ' scroll steps)');\n\n await exporter.page.evaluate(`\n new Promise(function(r) {\n var y = 0;\n var max = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n var step = function() {\n y += ${scrollStep};\n window.scrollTo({ top: y, behavior: 'instant' });\n y < max + 500 ? setTimeout(step, ${scrollDelay}) : (window.scrollTo(0, 0), r());\n };\n step();\n })\n `);\n success('Full-page scroll complete');\n\n exporter.cooking?.update('Waiting for lazy resources...');\n log('Waiting 2s for lazy-loaded resources...');\n await new Promise<void>((r) => setTimeout(r, 2000));\n\n log('Checking network idle (1.5s quiet, 8s timeout)...');\n try {\n await exporter.page.waitForNetworkIdle({ idleTime: 1500, timeout: 8000 });\n success('Network idle confirmed');\n } catch {\n log('Network idle timeout reached (continuing anyway)');\n }\n\n const totalCaptured: number = exporter.assets.buffers.size;\n success('Captured ' + totalCaptured + ' network resources total');\n\n const cssCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.endsWith('.css')).length;\n const jsCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.endsWith('.js') || e.localPath.endsWith('.mjs')).length;\n const imgCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.startsWith('assets/images')).length;\n const fontCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.startsWith('assets/fonts')).length;\n log(' CSS: ' + cssCount + ' | JS: ' + jsCount + ' | Images: ' + imgCount + ' | Fonts: ' + fontCount);\n}\n\nexport async function closeBrowser(exporter: { browser: import('puppeteer').Browser | null }): Promise<void> {\n if (exporter.browser) {\n await exporter.browser.close();\n exporter.browser = null;\n log('Browser closed');\n }\n}\n\nexport async function captureSubpage(\n page: Page,\n url: string,\n platform: { needsHydrationCheck: boolean; hydrationTimeout: number }\n): Promise<string> {\n log(' Navigating to sub-page: ' + url);\n await page.goto(url, { waitUntil: 'networkidle2', timeout: CFG.timeout });\n\n if (platform.needsHydrationCheck) {\n await page.evaluate(\n `new Promise(function(r) {\n var t = Date.now();\n (function tick() {\n var m = document.getElementById('main') || document.body;\n if (m && m.children.length > 0) setTimeout(r, 500);\n else if (Date.now() - t > ${platform.hydrationTimeout}) r();\n else setTimeout(tick, 200);\n })();\n })`\n );\n } else {\n await new Promise<void>((r) => setTimeout(r, 1000));\n }\n\n const html: string = await page.evaluate(() => document.documentElement.outerHTML || document.body.innerHTML);\n log(' Sub-page fetched: ' + (html.length / 1024).toFixed(1) + ' KB');\n return html;\n}\n","export async function pool(tasks: Array<() => Promise<void>>, n: number): Promise<void> {\n let i = 0;\n const run = async (): Promise<void> => {\n while (i < tasks.length) {\n const j = i++;\n await tasks[j]();\n }\n };\n await Promise.all(Array.from({ length: Math.min(n, tasks.length) }, () => run()));\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { CFG } from '../config/index.js';\nimport { log, warn, success } from '../logger/index.js';\nimport { dlBuffer } from '../network/download.js';\nimport { pool } from '../network/pool.js';\nimport type { ExporterContext } from '../types.js';\n\nexport async function downloadAll(exporter: ExporterContext): Promise<void> {\n const seen: Set<string> = new Set();\n const toDownload: Array<{ url: string; localPath: string }> = [];\n for (const [url, { localPath }] of exporter.assets.entries) {\n if (seen.has(localPath)) continue;\n seen.add(localPath);\n toDownload.push({ url, localPath });\n }\n\n const total: number = toDownload.length;\n log('Starting download of ' + total + ' unique assets');\n log('Concurrency: ' + CFG.concurrency + ' parallel downloads');\n log('Retry policy: ' + CFG.retries + ' attempts, ' + CFG.dlTimeout + 'ms timeout');\n\n let ok = 0;\n let cached = 0;\n let fail = 0;\n let completed = 0;\n let lastReported = 0;\n\n const tasks: Array<() => Promise<void>> = toDownload.map(\n ({ url, localPath }) =>\n async (): Promise<void> => {\n const dest: string = path.join(exporter.outDir, localPath);\n await fs.mkdir(path.dirname(dest), { recursive: true });\n\n try {\n const buf: Buffer | undefined =\n exporter.assets.buffers.get(url) ||\n exporter.assets.buffers.get(url.split('?')[0]);\n if (buf) {\n await fs.writeFile(dest, buf);\n cached++;\n ok++;\n } else {\n const data: Buffer = await dlBuffer(url);\n await fs.writeFile(dest, data);\n ok++;\n }\n } catch (e) {\n fail++;\n if (\n !url.includes('framer.com/edit') &&\n !url.includes('framerstatic.com/editorbar')\n ) {\n warn('Download failed: ' + path.basename(localPath) + ' - ' + (e as Error).message);\n }\n }\n\n completed++;\n const pct: number = Math.floor((completed / total) * 100);\n if (pct >= lastReported + 10 || completed === total) {\n exporter.cooking?.update('Downloading... ' + completed + '/' + total + ' (' + pct + '%)');\n log('Download progress: ' + completed + '/' + total + ' (' + pct + '%)');\n lastReported = pct;\n }\n }\n );\n\n await pool(tasks, CFG.concurrency);\n\n success('Downloads complete: ' + ok + ' succeeded, ' + cached + ' from cache, ' + fail + ' failed');\n\n const totalBytes: number = [...exporter.assets.entries.values()].length;\n log('Total unique assets written to disk: ' + totalBytes);\n\n exporter.assets.buffers.clear();\n log('Network buffer cache cleared');\n}\n","import prettier from 'prettier';\n\nexport async function prettifyJS(src: string): Promise<string> {\n try {\n return await prettier.format(src, {\n parser: 'babel',\n printWidth: 100,\n tabWidth: 2,\n useTabs: false,\n semi: true,\n singleQuote: false,\n trailingComma: 'es5',\n bracketSpacing: true,\n arrowParens: 'always',\n });\n } catch {\n return src;\n }\n}\n","export const SERVE_SCRIPT: string = `#!/usr/bin/env node\nconst http = require('http');\nconst fs = require('fs');\nconst path = require('path');\n\nconst PORT = process.env.PORT || 3000;\nconst ROOT = __dirname;\n\nconst MIME = {\n '.html': 'text/html; charset=utf-8',\n '.css': 'text/css; charset=utf-8',\n '.js': 'application/javascript; charset=utf-8',\n '.mjs': 'application/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.webp': 'image/webp',\n '.avif': 'image/avif',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.otf': 'font/otf',\n '.mp4': 'video/mp4',\n '.webm': 'video/webm',\n '.ogg': 'video/ogg',\n '.framercms': 'application/octet-stream',\n};\n\nconst server = http.createServer((req, res) => {\n let url = decodeURIComponent(req.url.split('?')[0]);\n if (url === '/') url = '/index.html';\n\n let filePath = path.join(ROOT, url);\n if (!filePath.startsWith(ROOT)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n const serveFile = (pathToFile) => {\n fs.readFile(pathToFile, (err, data) => {\n if (err) {\n // SPA Fallback: if it's not a file, serve index.html\n if (url !== '/index.html' && !path.extname(url)) {\n return serveFile(path.join(ROOT, 'index.html'));\n }\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n const ext = path.extname(pathToFile).toLowerCase();\n const mime = MIME[ext] || 'application/octet-stream';\n res.writeHead(200, {\n 'Content-Type': mime,\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'public, max-age=3600',\n });\n res.end(data);\n });\n };\n\n serveFile(filePath);\n});\n\nserver.listen(PORT, () => {\n console.log('\\\\x1b[32m%s\\\\x1b[0m', ' 🚀 Cooksite Local Server Running');\n console.log('\\\\x1b[36m%s\\\\x1b[0m', ' ├─ URL: http://localhost:' + PORT);\n console.log('\\\\x1b[35m%s\\\\x1b[0m', ' └─ Directory: ' + ROOT);\n console.log('\\\\n Press Ctrl+C to stop.');\n});\n`;\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { log, warn, success } from '../logger/index.js';\nimport { prettifyJS } from '../formatter/prettify.js';\nimport { SERVE_SCRIPT } from '../server/template.js';\nimport type { ExporterContext } from '../types.js';\n\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction stripBySelector(html: string, sel: string): string {\n if (sel.includes('[src*=\"')) {\n const match = sel.match(/\\[src\\*=\"([^\"]+)\"\\]/);\n if (match) {\n const domain: string = escapeRegex(match[1]);\n html = html.replace(new RegExp(`<script[^>]*${domain}[^>]*>[^<]*<\\\\/script>`, 'g'), '');\n html = html.replace(new RegExp(`<script[^>]*${domain}[^>]*><\\\\/script>`, 'g'), '');\n }\n } else if (sel.includes('[href*=\"')) {\n const match = sel.match(/\\[href\\*=\"([^\"]+)\"\\]/);\n if (match) {\n const href: string = escapeRegex(match[1]);\n html = html.replace(new RegExp(`<link[^>]*${href}[^>]*>`, 'g'), '');\n }\n } else if (sel.startsWith('.')) {\n const cls: string = escapeRegex(sel.slice(1));\n html = html.replace(\n new RegExp(`<[^>]*class=\"[^\"]*${cls}[^\"]*\"[^>]*>[\\\\s\\\\S]*?<\\\\/[^>]*>`, 'g'),\n ''\n );\n } else if (sel.startsWith('#')) {\n const id: string = sel.slice(1);\n html = removeElementById(html, id);\n }\n return html;\n}\n\nfunction removeElementById(html: string, id: string): string {\n const marker: string = `id=\"${id}\"`;\n let idx: number = html.indexOf(marker);\n while (idx !== -1) {\n const tagStart: number = html.lastIndexOf('<', idx);\n if (tagStart === -1) break;\n\n const tagNameEnd: number = html.indexOf(' ', tagStart + 1);\n const tagName: string = html.slice(tagStart + 1, tagNameEnd).toLowerCase();\n\n let depth = 0;\n let i: number = tagStart;\n while (i < html.length) {\n if (html.startsWith(`<${tagName}`, i) && (html[i + tagName.length + 1] === ' ' || html[i + tagName.length + 1] === '>')) {\n depth++;\n i += tagName.length + 1;\n } else if (html.startsWith(`</${tagName}>`, i)) {\n depth--;\n if (depth === 0) {\n html = html.slice(0, tagStart) + html.slice(i + tagName.length + 3);\n break;\n }\n i += tagName.length + 3;\n } else {\n i++;\n }\n }\n\n idx = html.indexOf(marker);\n }\n return html;\n}\n\nfunction processSEO(html: string, url: string): string {\n const canonical = url.split('?')[0].replace(/\\/$/, '');\n \n // Inject Canonical\n if (!html.includes('rel=\"canonical\"')) {\n html = html.replace('</head>', ` <link rel=\"canonical\" href=\"${canonical}\">\\n </head>`);\n }\n\n // Inject Meta Description if missing\n if (!html.includes('name=\"description\"')) {\n html = html.replace('</head>', ` <meta name=\"description\" content=\"Exported with Cooksite - Fast, SEO-optimized, and clean.\">\\n </head>`);\n }\n\n // Inject OG Tags if missing\n if (!html.includes('property=\"og:')) {\n html = html.replace('</head>', ` <meta property=\"og:type\" content=\"website\">\\n <meta property=\"og:url\" content=\"${canonical}\">\\n <meta property=\"og:title\" content=\"Exported Site\">\\n <meta property=\"og:description\" content=\"A fast, clean version of this site, exported for performance.\">\\n </head>`);\n }\n\n // Inject Robot tags\n if (!html.includes('name=\"robots\"')) {\n html = html.replace('</head>', ` <meta name=\"robots\" content=\"index, follow\">\\n </head>`);\n }\n\n return html;\n}\n\nfunction stripIntegrityAndCors(html: string): string {\n html = html.replace(/\\s+integrity=\"[^\"]*\"/g, '');\n html = html.replace(/\\s+crossorigin=\"[^\"]*\"/g, '');\n html = html.replace(/\\s+crossorigin/g, '');\n html = html.replace(/<link[^>]*rel=\"preconnect\"[^>]*>/g, '');\n html = html.replace(/<link[^>]*rel=\"dns-prefetch\"[^>]*>/g, '');\n html = html.replace(/<meta[^>]*content-security-policy[^>]*>/gi, '');\n return html;\n}\n\nfunction stripSrcsetCdnUrls(html: string): string {\n html = html.replace(/srcset=\"([^\"]*)\"/g, (_match: string, srcset: string) => {\n const cleaned: string = srcset\n .split(',')\n .map((entry: string) => entry.trim())\n .filter((entry: string) => !entry.startsWith('http'))\n .join(', ');\n return cleaned ? 'srcset=\"' + cleaned + '\"' : '';\n });\n return html;\n}\n\nexport async function buildOutput(exporter: ExporterContext): Promise<void> {\n exporter.cooking?.update('Stripping platform badges...');\n log('Starting HTML post-processing...');\n log('HTML size: ' + (exporter.ssrHTML.length / 1024).toFixed(1) + ' KB');\n\n let html: string = exporter.ssrHTML;\n if (!html) {\n warn('No SSR HTML available, cannot build output');\n return;\n }\n\n exporter.cooking?.update('Removing integrity checks...');\n const beforeIntegrity: number = html.length;\n html = stripIntegrityAndCors(html);\n log('Stripped integrity/crossorigin/preconnect (' + (beforeIntegrity - html.length) + ' chars)');\n success('Integrity and CORS restrictions removed');\n\n if (typeof processSEO === 'function') {\n exporter.cooking?.update('Optimizing SEO...');\n html = processSEO(html, exporter.siteUrl);\n success('SEO meta tags optimized');\n }\n\n log('Stripping ' + exporter.platform.stripSelectors.length + ' selectors:');\n for (const sel of exporter.platform.stripSelectors) {\n const before: number = html.length;\n html = stripBySelector(html, sel);\n const removed: number = before - html.length;\n if (removed > 0) {\n log(' Stripped ' + sel + ' (' + removed + ' chars removed)');\n }\n }\n\n log('Applying ' + exporter.platform.stripPatterns.length + ' regex patterns...');\n for (const pattern of exporter.platform.stripPatterns) {\n const before: number = html.length;\n html = html.replace(new RegExp(pattern.source, pattern.flags), '');\n const removed: number = before - html.length;\n if (removed > 0) {\n log(' Pattern removed ' + removed + ' chars');\n }\n }\n success('Platform badges and tracking stripped');\n\n exporter.cooking?.update('Rewriting asset URLs...');\n log('Rewriting ' + exporter.assets.entries.size + ' CDN URLs to local paths...');\n const beforeRewrite: number = html.length;\n html = exporter.assets.rewrite(html, '');\n log('HTML rewrite delta: ' + (html.length - beforeRewrite) + ' chars');\n\n exporter.cooking?.update('Cleaning srcset references...');\n html = stripSrcsetCdnUrls(html);\n log('Cleaned remaining CDN URLs from srcset attributes');\n\n await rewriteDownloadedFiles(exporter);\n success('All URLs rewritten to local paths');\n\n exporter.cooking?.update('Pretty-printing JS files...');\n await prettifyDownloadedJS(exporter);\n\n exporter.cooking?.update('Writing final output...');\n log('Writing index.html (' + (html.length / 1024).toFixed(1) + ' KB)...');\n await fs.writeFile(path.join(exporter.outDir, 'index.html'), html);\n success('index.html written');\n\n await fs.writeFile(path.join(exporter.outDir, 'serve.cjs'), SERVE_SCRIPT);\n log('serve.cjs written');\n success('Output build complete');\n}\n\nasync function rewriteDownloadedFiles(exporter: ExporterContext): Promise<void> {\n const dirs: string[] = ['scripts/vendor', 'scripts/modules', 'styles'];\n let rewritten = 0;\n\n for (const dir of dirs) {\n const fullDir: string = path.join(exporter.outDir, dir);\n let files: string[];\n try {\n files = await fs.readdir(fullDir);\n } catch {\n continue;\n }\n\n for (const file of files) {\n const ext: string = path.extname(file).toLowerCase();\n if (!['.mjs', '.js', '.css'].includes(ext)) continue;\n\n const filePath: string = path.join(fullDir, file);\n try {\n let content: string = await fs.readFile(filePath, 'utf-8');\n const before: string = content;\n content = exporter.assets.rewrite(content, dir);\n if (content !== before) {\n await fs.writeFile(filePath, content);\n rewritten++;\n }\n } catch {}\n }\n }\n log('Rewrote URLs in ' + rewritten + ' JS/CSS files');\n}\n\nasync function prettifyDownloadedJS(exporter: ExporterContext): Promise<void> {\n const dirs: string[] = ['scripts/vendor', 'scripts/modules'];\n let count = 0;\n let total = 0;\n\n for (const dir of dirs) {\n const fullDir: string = path.join(exporter.outDir, dir);\n let files: string[];\n try {\n files = await fs.readdir(fullDir);\n } catch {\n continue;\n }\n\n const jsFiles: string[] = files.filter((f) => {\n const ext: string = path.extname(f).toLowerCase();\n return ext === '.mjs' || ext === '.js';\n });\n total += jsFiles.length;\n\n for (const file of jsFiles) {\n const filePath: string = path.join(fullDir, file);\n try {\n const raw: string = await fs.readFile(filePath, 'utf-8');\n\n const nlRatio: number = (raw.match(/\\n/g) || []).length / raw.length;\n if (nlRatio > 0.05) {\n count++;\n continue;\n }\n\n const pretty: string = await prettifyJS(raw);\n await fs.writeFile(filePath, pretty, 'utf-8');\n count++;\n\n if (count % 5 === 0) {\n exporter.cooking?.update('Pretty-printing... (' + count + '/' + total + ')');\n }\n } catch (e) {\n warn('Pretty-print skipped: ' + file + ' - ' + (e as Error).message);\n count++;\n }\n }\n }\n\n success('Formatted ' + count + '/' + total + ' JS/MJS files');\n}\n","import chalk from 'chalk';\n\nexport function maxWidth(): number {\n return Math.min(process.stdout.columns || 80, 62);\n}\n\nconst B = chalk.hex('#8B6914');\nconst G = chalk.hex('#C4953A');\n\nfunction padRight(text: string, w: number): string {\n const visible = stripAnsi(text).length;\n if (visible >= w) return text;\n return text + ' '.repeat(w - visible);\n}\n\nfunction stripAnsi(s: string): string {\n return s.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n}\n\nexport function boxTop(w: number): string {\n const inner = w - 4;\n return ' ' + B('╔═') + B('═'.repeat(inner)) + B('═╗');\n}\n\nexport function boxBot(w: number): string {\n const inner = w - 4;\n return ' ' + B('╚═') + B('═'.repeat(inner)) + B('═╝');\n}\n\nexport function boxLine(w: number, text: string): string {\n const inner = w - 4;\n const padded = padRight(text, inner);\n return ' ' + B('║ ') + padded + B(' ║');\n}\n\nexport function boxSep(w: number): string {\n const inner = w - 4;\n return ' ' + B('╠═') + B('═'.repeat(inner)) + B('═╣');\n}\n\nexport function boxRow(w: number, label: string, value: string): string {\n const inner = w - 4;\n const labelPlain = stripAnsi(chalk.bold(label));\n const visible = labelPlain.length + 1 + value.length;\n if (visible > inner) {\n const avail = inner - labelPlain.length - 2;\n const truncated = value.length > avail ? value.slice(0, avail - 1) + '..' : value;\n return ' ' + G('║ ') + chalk.bold(label) + ': ' + chalk.yellow(truncated) + ' '.repeat(Math.max(0, inner - labelPlain.length - 1 - truncated.length)) + G(' ║');\n }\n const right = inner - labelPlain.length - 1 - value.length;\n return ' ' + G('║ ') + chalk.bold(label) + ': ' + chalk.yellow(value) + ' '.repeat(right) + G(' ║');\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport type { ExporterContext } from '../types.js';\nimport { boxTop, boxLine, boxBot, boxSep, maxWidth } from '../cli/box.js';\n\nexport async function printSummary(exporter: ExporterContext): Promise<void> {\n const w = maxWidth();\n const isSmall = w < 50;\n\n const count = async (d: string): Promise<number> => {\n try {\n return (await fs.readdir(path.join(exporter.outDir, d))).length;\n } catch {\n return 0;\n }\n };\n const [imgs, fonts, videos, misc, scripts, vendor, styles, data, subpages] = await Promise.all([\n count('assets/images'),\n count('assets/fonts'),\n count('assets/videos'),\n count('assets/misc'),\n count('scripts/modules'),\n count('scripts/vendor'),\n count('styles'),\n count('data'),\n count('subpages'),\n ]);\n\n const G = chalk.hex('#D4A017');\n const G2 = chalk.hex('#DAA520');\n const C2 = chalk.hex('#E0B040');\n const Y = chalk.yellow;\n const O = chalk.hex('#CC7722');\n const Br = chalk.hex('#B8860B');\n const Gr = chalk.gray;\n const Gn = chalk.green;\n\n const entries: Array<[string, number, string, (s: string) => string]> = [\n ['styles/', styles, 'CSS', G],\n ['scripts/vendor/', vendor, 'JS vendor', G2],\n ['scripts/modules/', scripts, 'JS modules', C2],\n ['assets/images/', imgs, 'images', Y],\n ['assets/videos/', videos, 'videos', O],\n ['assets/fonts/', fonts, 'fonts', Br],\n ['assets/misc/', misc, 'misc', Gr],\n ['data/', data, 'data', Gr],\n ['subpages/', subpages, 'pages', Gn],\n ];\n\n console.log('');\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' Export Summary')));\n console.log(boxSep(w));\n } else {\n console.log(chalk.bold.white(' Export Summary:'));\n }\n\n for (const [label, cnt, type, color] of entries) {\n if (cnt === 0) continue;\n const inner = w - 4;\n const l = label.padEnd(16);\n const c = String(cnt).padStart(3);\n const rowText = `${color(l)}${chalk.white(c)} ${chalk.gray(type)}`;\n const visible = 16 + 3 + 2 + type.length;\n const pad = Math.max(0, inner - visible);\n if (isSmall) {\n console.log(` ${color(label)} ${chalk.white(String(cnt))} ${chalk.gray(type)}`);\n } else {\n console.log(' ' + chalk.hex('#C4953A')('║ ') + rowText + ' '.repeat(pad) + chalk.hex('#C4953A')(' ║'));\n }\n }\n\n if (!isSmall) {\n console.log(boxBot(w));\n }\n\n console.log('');\n const cdCmd = 'cd ' + path.basename(exporter.outDir) + ' && node serve.cjs';\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' To serve locally')));\n console.log(boxSep(w));\n const inner = w - 6;\n const cmdLen = cdCmd.length;\n const pad = Math.max(0, inner - cmdLen);\n console.log(' ' + chalk.hex('#C4953A')('║ ') + G(cdCmd) + ' '.repeat(pad) + chalk.hex('#9e9e9e')(' 🗐') + chalk.hex('#C4953A')(' ║'));\n console.log(boxBot(w));\n } else {\n console.log(chalk.bold.white(' To serve locally:'));\n console.log(` ${G(cdCmd)}`);\n }\n \n console.log('');\n console.log(chalk.gray(' NOTE: Must be served via HTTP for JS modules to work.'));\n console.log('');\n}\n","import chalk from 'chalk';\n\nconst SHINE_WIDTH = 10;\nconst FRAME_INTERVAL = 140;\nconst SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nconst PALETTE: Array<(s: string) => string> = [\n (s) => chalk.hex('#D4A017')(s),\n (s) => chalk.hex('#E8A317')(s),\n (s) => chalk.hex('#DAA520')(s),\n (s) => chalk.hex('#F0C040')(s),\n (s) => chalk.hex('#C4953A')(s),\n (s) => chalk.hex('#E6B83C')(s),\n (s) => chalk.hex('#C8A951')(s),\n (s) => chalk.hex('#D9B44D')(s),\n];\n\nexport class CookingSpinner {\n private interval: NodeJS.Timeout | null = null;\n private bgInterval: NodeJS.Timeout | null = null;\n private frame = 0;\n private phase = '';\n private active = false;\n private bar = 0;\n private barDir = 1;\n\n start(phase: string = ''): void {\n this.phase = phase;\n this.frame = 0;\n this.bar = 0;\n this.barDir = 1;\n this.active = true;\n this.draw();\n this.interval = setInterval(() => {\n this.frame++;\n this.draw();\n }, FRAME_INTERVAL);\n this.bgInterval = setInterval(() => {\n this.bar++;\n this.draw();\n }, 800);\n }\n\n update(phase: string): void {\n this.phase = phase;\n if (!this.active) this.draw();\n }\n\n log(message: string): void {\n if (this.active) {\n process.stdout.write('\\r\\x1B[2K');\n }\n process.stdout.write(message + '\\n');\n if (this.active) {\n this.draw();\n }\n }\n\n stop(): void {\n this.active = false;\n if (this.interval) { clearInterval(this.interval); this.interval = null; }\n if (this.bgInterval) { clearInterval(this.bgInterval); this.bgInterval = null; }\n process.stdout.write('\\r\\x1B[2K');\n }\n\n private draw(): void {\n if (!this.active) return;\n\n const spinner = SPINNER_FRAMES[this.frame % SPINNER_FRAMES.length];\n const paletteFn = PALETTE[this.frame % PALETTE.length];\n\n const dotPhase = Math.floor(this.frame / 3) % 4;\n const dotStr = dotPhase === 0 ? ' ' : dotPhase === 1 ? '. ' : dotPhase === 2 ? '.. ' : '...';\n\n const shimmer = this.renderShimmer('Cooking');\n const spinnerChar = chalk.hex('#F0C040')(spinner);\n\n const barLen = 12;\n const barPos = this.bar % (barLen * 2);\n const barStr = this.renderBar(barLen, barPos);\n\n const phaseStr = this.phase ? ` ${chalk.gray(this.limitLen(this.phase, 38))}` : '';\n\n process.stdout.write(\n `\\r\\x1B[2K ${spinnerChar} ${shimmer} ${paletteFn(dotStr)} ${barStr}${phaseStr}`\n );\n }\n\n private renderShimmer(text: string): string {\n let result = '';\n const pos = this.frame % (text.length + SHINE_WIDTH * 2) - SHINE_WIDTH;\n for (let i = 0; i < text.length; i++) {\n const dist = Math.abs(i - pos);\n if (dist < SHINE_WIDTH) {\n const t = 1 - dist / SHINE_WIDTH;\n const g = Math.floor(160 + t * 95);\n result += chalk.rgb(g, g, g)(text[i]);\n } else {\n result += chalk.rgb(160, 160, 160)(text[i]);\n }\n }\n return result;\n }\n\n private renderBar(len: number, pos: number): string {\n let s = '';\n for (let i = 0; i < len; i++) {\n const dist = Math.abs(i - pos);\n if (dist < 3) {\n const t = 1 - dist / 3;\n const r = Math.floor(200 + t * 55);\n const g = Math.floor(160 + t * 50);\n const b = Math.floor(20 + t * 30);\n s += chalk.rgb(r, g, b)('▌');\n } else if (dist < 6) {\n s += chalk.rgb(140, 100, 20)('▌');\n } else {\n s += chalk.rgb(50, 35, 10)(' ');\n }\n }\n return `[${s}]`;\n }\n\n private limitLen(s: string, max: number): string {\n if (s.length <= max) return s;\n return s.slice(0, max - 3) + '…';\n }\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport type { Browser, Page } from 'puppeteer';\nimport { AssetMap } from '../assets/asset-map.js';\nimport { dlBuffer } from '../network/download.js';\nimport { info, log, success, setCooking } from '../logger/index.js';\nimport { launchAndCapture, captureSubpage, closeBrowser } from './capture.js';\nimport { downloadAll } from './download.js';\nimport { buildOutput } from './output.js';\nimport { printSummary } from './summary.js';\nimport { detectPlatform, getPlatformByName } from '../platforms/index.js';\nimport type { PlatformHandler, PlatformType } from '../platforms/types.js';\nimport type { ExporterContext } from '../types.js';\nimport { CookingSpinner } from '../cli/cooking.js';\n\nexport function deriveOutputName(url: string, platformName: PlatformType): string {\n try {\n const parsed = new URL(url);\n const hostname: string = parsed.hostname;\n\n let siteName: string;\n if (hostname.endsWith('.webflow.io')) {\n siteName = hostname.replace('.webflow.io', '');\n } else if (hostname.includes('.wixsite.com')) {\n const parts: string[] = parsed.pathname.split('/').filter(Boolean);\n siteName = parts[0] || hostname.split('.')[0];\n } else if (hostname.match(/\\.framer\\.(app|website|ai)$/)) {\n siteName = hostname.split('.framer.')[0];\n } else {\n siteName = hostname.replace(/\\./g, '-');\n }\n\n return `${platformName}-${siteName}`;\n } catch {\n return 'framer-export-output';\n }\n}\n\nexport class FramerExporter implements ExporterContext {\n siteUrl: string;\n outDir: string;\n assets: AssetMap;\n browser: Browser | null;\n page: Page | null;\n ssrHTML: string;\n prettyPrint: boolean;\n platform: PlatformHandler;\n cooking?: CookingSpinner;\n\n constructor(siteUrl: string, outDir: string, platformOverride?: PlatformType) {\n this.siteUrl = siteUrl;\n this.outDir = outDir;\n this.assets = new AssetMap();\n this.browser = null;\n this.page = null;\n this.ssrHTML = '';\n this.prettyPrint = true;\n\n if (platformOverride && platformOverride !== 'unknown') {\n this.platform = getPlatformByName(platformOverride);\n } else {\n this.platform = detectPlatform(siteUrl);\n }\n }\n\n async run(includeSubpages: boolean = false): Promise<void> {\n console.log(chalk.bold.hex('#D4A017')('\\n Cooksite v4 - Full Mirror & Clean Export\\n'));\n info('Source : ' + chalk.underline(this.siteUrl));\n info('Output : ' + chalk.yellow(this.outDir));\n info('Platform : ' + chalk.hex('#D4A017')(this.platform.displayName));\n if (includeSubpages) {\n info('Subpages : ' + chalk.green('enabled'));\n }\n console.log('');\n\n this.cooking = new CookingSpinner();\n setCooking(this.cooking);\n this.cooking.start('Preparing directories...');\n\n for (const d of [\n '',\n 'assets/images',\n 'assets/fonts',\n 'assets/videos',\n 'assets/misc',\n 'styles',\n 'scripts/vendor',\n 'scripts/modules',\n 'data',\n 'subpages',\n ]) {\n await fs.mkdir(path.join(this.outDir, d), { recursive: true });\n }\n log('Output directory structure created');\n\n this.cooking.update('Fetching SSR HTML...');\n log('Fetching SSR HTML from ' + this.siteUrl);\n try {\n const buf: Buffer = await dlBuffer(this.siteUrl);\n this.ssrHTML = buf.toString('utf-8');\n success('SSR HTML fetched (' + (this.ssrHTML.length / 1024).toFixed(1) + ' KB)');\n } catch (e) {\n log(chalk.red('Could not fetch SSR HTML: ' + (e as Error).message));\n }\n\n const htmlDetected = detectPlatform(this.siteUrl, this.ssrHTML);\n if (htmlDetected.name !== this.platform.name) {\n this.platform = htmlDetected;\n log('Platform refined: ' + chalk.hex('#D4A017')(this.platform.displayName) + ' (from HTML analysis)');\n }\n\n await launchAndCapture(this);\n\n if (includeSubpages && this.page) {\n await this.crawlSubpages();\n }\n\n await closeBrowser(this);\n\n this.cooking.update('Downloading assets...');\n await downloadAll(this);\n\n this.cooking.update('Building output...');\n await buildOutput(this);\n\n this.cooking.stop();\n setCooking(null);\n\n console.log('');\n success('Export complete!');\n await printSummary(this);\n }\n\n private async crawlSubpages(): Promise<void> {\n this.cooking?.update('Discovering sub-pages...');\n log('Scanning page for internal links...');\n\n const page = this.page!;\n const baseUrl = new URL(this.siteUrl);\n const baseHost = baseUrl.hostname.replace(/^www\\./, '');\n\n const links: string[] = await page.evaluate((host: string) => {\n const anchors = Array.from(document.querySelectorAll('a[href]'));\n const hrefs = new Set<string>();\n for (const a of anchors) {\n const href = (a as HTMLAnchorElement).href;\n if (!href || href.startsWith('javascript:') || href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('#')) continue;\n try {\n const u = new URL(href);\n const h = u.hostname.replace(/^www\\./, '');\n if (h === host && u.pathname !== '/' && u.pathname !== '' && !u.pathname.startsWith('/#')) {\n hrefs.add(href.split('#')[0]);\n }\n } catch {}\n }\n return Array.from(hrefs);\n }, baseHost);\n\n log('Found ' + links.length + ' sub-page links');\n const uniqueLinks = [...new Set(links)].slice(0, 50);\n\n if (uniqueLinks.length === 0) {\n log('No sub-pages to crawl');\n return;\n }\n\n for (let i = 0; i < uniqueLinks.length; i++) {\n const link = uniqueLinks[i];\n this.cooking?.update('Crawling sub-page ' + (i + 1) + '/' + uniqueLinks.length);\n try {\n const html = await captureSubpage(page, link, {\n needsHydrationCheck: this.platform.needsHydrationCheck,\n hydrationTimeout: this.platform.hydrationTimeout,\n });\n\n const slug = this.deriveSlug(link, baseUrl);\n const filename = slug + '.html';\n const filepath = path.join(this.outDir, 'subpages', filename);\n\n await fs.writeFile(filepath, html, 'utf-8');\n log(' Saved: subpages/' + filename);\n } catch (e) {\n log(' Skipped ' + link + ': ' + (e as Error).message);\n }\n }\n\n success('Sub-pages crawled: ' + uniqueLinks.length);\n }\n\n private deriveSlug(link: string, baseUrl: URL): string {\n try {\n const u = new URL(link);\n let pathname = u.pathname.replace(/\\/+$/, '').replace(/^\\//, '');\n if (!pathname) return 'index';\n return pathname.replace(/[^a-zA-Z0-9_-]/g, '_').replace(/_+/g, '_') || 'page';\n } catch {\n return 'page';\n }\n }\n}\n","import readline from 'node:readline';\nimport { stdin, stdout } from 'node:process';\nimport chalk from 'chalk';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport async function select(question: string, options: SelectOption[], defaultIndex: number = 0): Promise<string> {\n return new Promise((resolve) => {\n let selected: number = defaultIndex;\n\n const render = (initial: boolean = false): void => {\n if (!initial) {\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[J');\n }\n console.log(` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}`);\n for (let i = 0; i < options.length; i++) {\n if (i === selected) {\n console.log(` ${chalk.hex('#D4A017')('>')} ${chalk.white.bold(options[i].label)}`);\n } else {\n console.log(` ${chalk.gray(options[i].label)}`);\n }\n }\n };\n\n render(true);\n\n readline.emitKeypressEvents(stdin);\n const wasTTY: boolean = stdin.isTTY || false;\n if (wasTTY) stdin.setRawMode(true);\n\n const onKeypress = (_str: string | undefined, key: readline.Key): void => {\n if (!key) return;\n\n if (key.name === 'up' && selected > 0) {\n selected--;\n render();\n } else if (key.name === 'down' && selected < options.length - 1) {\n selected++;\n render();\n } else if (key.name === 'return') {\n if (wasTTY) stdin.setRawMode(false);\n stdin.removeListener('keypress', onKeypress);\n stdin.pause();\n\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[J');\n console.log(` ${chalk.green('✓')} ${chalk.white.bold(question)} ${chalk.hex('#D4A017')(options[selected].label)}\\n`);\n\n resolve(options[selected].value);\n } else if ((key.ctrl && key.name === 'c') || key.name === 'escape') {\n if (wasTTY) stdin.setRawMode(false);\n stdin.removeListener('keypress', onKeypress);\n process.exit(0);\n }\n };\n\n stdin.resume();\n stdin.on('keypress', onKeypress);\n });\n}\n","import readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\nimport path from 'node:path';\nimport { URL } from 'node:url';\nimport chalk from 'chalk';\nimport { showBanner } from './banner.js';\nimport { FramerExporter, deriveOutputName } from '../exporter/index.js';\nimport { detectPlatform } from '../platforms/index.js';\nimport { select } from './select.js';\nimport type { PlatformType } from '../platforms/types.js';\nimport { boxTop, boxLine, boxSep, boxBot, boxRow, maxWidth } from './box.js';\n\nfunction drawHeader(title: string): void {\n const w = maxWidth();\n if (w < 50) {\n console.log(`\\n ${chalk.hex('#D4A017')('●')} ${chalk.bold.white(title)}`);\n return;\n }\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' ' + title)));\n console.log(boxBot(w));\n console.log('');\n}\n\nexport async function runSetup(legacyMode: boolean = false): Promise<void> {\n showBanner();\n\n console.log(chalk.bold.white(' Welcome to Framer Export setup.\\n'));\n console.log(chalk.gray(' Supports Framer, Webflow, and Wix sites.\\n'));\n\n const rl = readline.createInterface({ input: stdin, output: stdout });\n\n const ask = async (question: string, defaultVal?: string): Promise<string> => {\n const suffix: string = defaultVal ? chalk.gray(` (${defaultVal})`) : '';\n const prompt: string = ` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}${suffix} ${chalk.gray('>')} `;\n const answer: string = await rl.question(prompt);\n return answer.trim() || defaultVal || '';\n };\n\n drawHeader('Step 1 : Site URL');\n\n let siteUrl = '';\n while (!siteUrl) {\n const input: string = await ask('Enter the site URL');\n try {\n new URL(input);\n siteUrl = input;\n } catch {\n console.log(` ${chalk.red('✗')} ${chalk.red('Invalid URL. Enter a valid URL (https://...)')}\\n`);\n }\n }\n console.log(` ${chalk.green('✓')} ${chalk.green('URL:')} ${chalk.underline(siteUrl)}\\n`);\n\n drawHeader('Step 2 : Platform');\n\n const detected = detectPlatform(siteUrl);\n let platformName: PlatformType;\n\n if (legacyMode) {\n console.log(` ${chalk.blue('i')} Auto-detected: ${chalk.hex('#D4A017')(detected.displayName)}`);\n const platformInput: string = await ask('Platform (framer/webflow/wix)', detected.name);\n platformName = (['framer', 'webflow', 'wix'].includes(platformInput)\n ? platformInput\n : detected.name) as PlatformType;\n console.log(` ${chalk.green('✓')} ${chalk.green('Platform:')} ${chalk.hex('#D4A017')(platformName)}\\n`);\n } else {\n rl.close();\n const platforms = [\n { label: `Framer${detected.name === 'framer' ? chalk.gray(' (detected)') : ''}`, value: 'framer' },\n { label: `Webflow${detected.name === 'webflow' ? chalk.gray(' (detected)') : ''}`, value: 'webflow' },\n { label: `Wix${detected.name === 'wix' ? chalk.gray(' (detected)') : ''}`, value: 'wix' },\n ];\n const defaultIdx = ['framer', 'webflow', 'wix'].indexOf(detected.name);\n platformName = await select('Select platform', platforms, Math.max(0, defaultIdx)) as PlatformType;\n }\n\n const rl2 = legacyMode ? rl : readline.createInterface({ input: stdin, output: stdout });\n\n const ask2 = async (question: string, defaultVal?: string): Promise<string> => {\n const suffix: string = defaultVal ? chalk.gray(` (${defaultVal})`) : '';\n const prompt: string = ` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}${suffix} ${chalk.gray('>')} `;\n const answer: string = await rl2.question(prompt);\n return answer.trim() || defaultVal || '';\n };\n\n const derivedName: string = deriveOutputName(siteUrl, platformName);\n\n drawHeader('Step 3 : Output Directory');\n\n const outDir: string = await ask2('Output directory', './' + derivedName);\n console.log(` ${chalk.green('✓')} ${chalk.green('Output:')} ${chalk.yellow(outDir)}\\n`);\n\n drawHeader('Step 4 : Options');\n\n let prettyPrint: boolean;\n let concurrency: number;\n let includeSubpages: boolean;\n\n if (legacyMode) {\n const prettyAnswer: string = await ask2('Pretty-print JS files? (y/n)', 'y');\n prettyPrint = prettyAnswer.toLowerCase().startsWith('y');\n console.log(` ${chalk.green('✓')} Pretty-print: ${prettyPrint ? chalk.green('yes') : chalk.red('no')}\\n`);\n\n const subpagesAnswer: string = await ask2('Export sub-pages? (y/n)', 'n');\n includeSubpages = subpagesAnswer.toLowerCase().startsWith('y');\n console.log(` ${chalk.green('✓')} Sub-pages: ${includeSubpages ? chalk.green('yes') : chalk.red('no')}\\n`);\n\n const concurrencyAnswer: string = await ask2('Download concurrency', '12');\n concurrency = parseInt(concurrencyAnswer, 10) || 12;\n console.log(` ${chalk.green('✓')} Concurrency: ${chalk.yellow(String(concurrency))}\\n`);\n } else {\n rl2.close();\n const prettyVal = await select('Pretty-print JS files?', [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' },\n ]);\n prettyPrint = prettyVal === 'yes';\n\n const subpagesVal = await select('Export sub-pages?', [\n { label: 'No', value: 'no' },\n { label: 'Yes, crawl and export', value: 'yes' },\n ], 0);\n includeSubpages = subpagesVal === 'yes';\n\n const concurrencyVal = await select('Download concurrency', [\n { label: '6 (slow connection)', value: '6' },\n { label: '12 (default)', value: '12' },\n { label: '20 (fast connection)', value: '20' },\n ], 1);\n concurrency = parseInt(concurrencyVal, 10);\n }\n\n const w = maxWidth();\n const isSmall = w < 50;\n const G = chalk.hex('#C4953A');\n const B = chalk.hex('#8B6914');\n\n console.log('');\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' Summary')));\n } else {\n console.log(chalk.bold.white(' Summary:'));\n }\n\n for (const [label, value] of [\n ['URL', siteUrl],\n ['Platform', platformName],\n ['Output', path.resolve(outDir)],\n ['Pretty-print', prettyPrint ? 'yes' : 'no'],\n ['Sub-pages', includeSubpages ? 'yes' : 'no'],\n ['Concurrency', String(concurrency)],\n ]) {\n console.log(boxRow(w, label, value));\n }\n\n if (!isSmall) {\n console.log(boxBot(w));\n }\n console.log('');\n\n let startExport: boolean;\n\n if (legacyMode) {\n const confirm: string = await ask2('Start export? (y/n)', 'y');\n startExport = confirm.toLowerCase().startsWith('y');\n rl2.close();\n } else {\n const confirmVal = await select('Start export?', [\n { label: 'Yes, start now', value: 'yes' },\n { label: 'Cancel', value: 'no' },\n ]);\n startExport = confirmVal === 'yes';\n }\n\n if (!startExport) {\n console.log(`\\n ${chalk.yellow('Export cancelled.')}\\n`);\n return;\n }\n\n console.log('');\n\n const { CFG } = await import('../config/index.js');\n CFG.concurrency = concurrency;\n\n const exporter = new FramerExporter(siteUrl, path.resolve(outDir), platformName);\n exporter.prettyPrint = prettyPrint;\n await exporter.run(includeSubpages);\n}\n","import path from 'path';\nimport { URL } from 'url';\nimport pkg from '../../package.json';\nimport { showHelp } from './help.js';\nimport { showBanner } from './banner.js';\nimport { checkForUpdates } from './update-check.js';\nimport type { PlatformType } from '../platforms/types.js';\n\nconst VERSION = pkg.version;\n\nfunction extractFlag(args: string[], flag: string): string | null {\n const idx: number = args.indexOf(flag);\n if (idx === -1 || idx + 1 >= args.length) return null;\n const value: string = args[idx + 1];\n args.splice(idx, 2);\n return value;\n}\n\nfunction hasFlag(args: string[], flag: string): boolean {\n const idx: number = args.indexOf(flag);\n if (idx === -1) return false;\n args.splice(idx, 1);\n return true;\n}\n\nasync function main(): Promise<void> {\n const args: string[] = process.argv.slice(2);\n\n if (args.includes('--version') || args.includes('-v')) {\n console.log(VERSION);\n process.exit(0);\n }\n\n if (args.includes('--about')) {\n const chalk = (await import('chalk')).default;\n showBanner();\n console.log(` ${chalk.white.bold('Framer Export')} ${chalk.gray(`v${pkg.version}`)}`);\n console.log(` ${chalk.white(pkg.description)}\\n`);\n console.log(` ${chalk.white.bold('Author')} ${chalk.hex('#D4A017')('Dany (danbenba)')}`);\n console.log(` ${chalk.white.bold('Portfolio')} ${chalk.underline.hex('#D4A017')('https://github.com/danbenba')}`);\n console.log(` ${chalk.white.bold('GitHub')} ${chalk.underline.hex('#D4A017')(pkg.repository.url.replace('git+', '').replace('.git', ''))}`);\n console.log(` ${chalk.white.bold('npm')} ${chalk.underline.hex('#D4A017')(`https://www.npmjs.com/package/${pkg.name}`)}`);\n console.log(` ${chalk.white.bold('License')} ${chalk.green(pkg.license)}`);\n console.log(` ${chalk.white.bold('Node')} ${chalk.gray(`>=${pkg.engines.node}`)}`);\n console.log('');\n process.exit(0);\n }\n\n checkForUpdates(VERSION).then((latest) => {\n if (!latest) return;\n import('chalk').then((chalk) => {\n console.log('');\n console.log(\n ` ${chalk.default.yellow('↳')} Update available: ${chalk.default.gray(VERSION)} → ${chalk.default.green(latest)}`,\n );\n console.log(` ${chalk.default.hex('#D4A017')(' Run:')} ${chalk.default.hex('#B8860B')('npm i -g framer-export@latest')}`);\n console.log('');\n });\n });\n\n if (args.includes('--help') || args.includes('-h')) {\n showHelp();\n process.exit(0);\n }\n\n if (args.includes('--setup')) {\n hasFlag(args, '--setup');\n const legacyMode: boolean = hasFlag(args, '--legacy-mode');\n const { runSetup } = await import('./setup.js');\n await runSetup(legacyMode);\n return;\n }\n\n if (!args.length) {\n const { runSetup } = await import('./setup.js');\n await runSetup(false);\n return;\n }\n\n const platformOverride = extractFlag(args, '--platform') as PlatformType | null;\n const includeSubpages: boolean = hasFlag(args, '--subpages');\n\n showBanner();\n\n const url: string = args[0];\n\n try {\n new URL(url);\n } catch {\n const chalk = (await import('chalk')).default;\n console.log(` ${chalk.red('✗')} ${chalk.red.bold('Invalid URL:')} ${chalk.white(url)}`);\n console.log(` ${chalk.gray('Expected: https://yoursite.framer.app')}\\n`);\n process.exit(1);\n }\n\n const { FramerExporter, deriveOutputName } = await import('../exporter/index.js');\n const { detectPlatform } = await import('../platforms/index.js');\n\n const detected = platformOverride || detectPlatform(url).name;\n const defaultDir: string = deriveOutputName(url, detected as PlatformType);\n const out: string = args[1] || `./${defaultDir}`;\n\n try {\n await new FramerExporter(url, path.resolve(out), platformOverride || undefined).run(includeSubpages);\n } catch (e) {\n const chalk = (await import('chalk')).default;\n console.log(`\\n ${chalk.red('✗')} ${chalk.red.bold('FAILED:')} ${chalk.white((e as Error).message)}`);\n console.log(chalk.gray((e as Error).stack || ''));\n process.exit(1);\n }\n}\n\nmain();\n","import chalk from 'chalk';\nimport { showBanner } from './banner.js';\n\nexport function showHelp(): void {\n showBanner();\n\n console.log(chalk.white.bold(' USAGE\\n'));\n console.log(` ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('<url>')} ${chalk.gray('[output-dir]')}`);\n console.log(` ${chalk.hex('#D4A017')('fexport')} ${chalk.yellow('<url>')} ${chalk.gray('[output-dir]')}`);\n\n console.log('');\n console.log(chalk.white.bold(' OPTIONS\\n'));\n\n const opts: Array<[string, string]> = [\n ['--setup', 'Launch the interactive setup assistant'],\n ['--platform <p>', 'Force platform: framer, webflow, wix'],\n ['--subpages', 'Crawl and export sub-pages'],\n ['--legacy-mode', 'Use text input instead of arrow selection'],\n ['--help, -h', 'Show this help message'],\n ];\n\n for (const [flag, desc] of opts) {\n console.log(` ${chalk.green(flag.padEnd(18))} ${chalk.white(desc)}`);\n }\n\n console.log('');\n console.log(chalk.white.bold(' SUPPORTED PLATFORMS\\n'));\n\n const platforms: Array<[string, string]> = [\n ['Framer', 'Auto-detected via .framer.app / .framer.website URLs'],\n ['Webflow', 'Auto-detected via .webflow.io URLs'],\n ['Wix', 'Auto-detected via .wixsite.com URLs + HTML analysis'],\n ];\n\n for (const [name, desc] of platforms) {\n console.log(` ${chalk.hex('#D4A017')(name.padEnd(12))} ${chalk.gray(desc)}`);\n }\n\n console.log('');\n console.log(chalk.white.bold(' EXAMPLES\\n'));\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('https://mysite.framer.app')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('https://mysite.webflow.io')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('https://user.wixsite.com/my-site')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--platform webflow')} ${chalk.yellow('https://custom.com')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--subpages')} ${chalk.yellow('https://mysite.com')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--setup')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--setup --legacy-mode')}`);\n console.log('');\n}\n","import https from 'https';\n\nexport async function checkForUpdates(currentVersion: string): Promise<string | null> {\n return new Promise((resolve) => {\n const req = https.get(\n 'https://registry.npmjs.org/framer-export/latest',\n { timeout: 3000 },\n (res) => {\n let data = '';\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n const json = JSON.parse(data);\n const latest = json.version;\n if (!latest) return resolve(null);\n if (latest !== currentVersion) return resolve(latest);\n resolve(null);\n } catch {\n resolve(null);\n }\n });\n },\n );\n req.on('error', () => resolve(null));\n req.on('timeout', () => {\n req.destroy();\n resolve(null);\n });\n });\n}\n"],"mappings":"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","names":["URL","https","URL","chalk","FONT_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","path","init_download","fs","path","chalk","fs","path","chalk","G","G2","chalk","fs","path","chalk","init_download","chalk","readline","stdin","stdout","path","URL","chalk","G","B","CFG","path","URL","chalk","chalk","runSetup","URL","FramerExporter","deriveOutputName","detectPlatform","path"]}
1
+ {"version":3,"sources":["../../package.json","../../src/cli/banner.ts","../../src/assets/asset-map.ts","../../src/config/index.ts","../../src/network/download.ts","../../src/logger/index.ts","../../src/platforms/framer.ts","../../src/platforms/webflow.ts","../../src/platforms/wix.ts","../../src/platforms/detect.ts","../../src/platforms/index.ts","../../src/exporter/capture.ts","../../src/network/pool.ts","../../src/exporter/download.ts","../../src/formatter/prettify.ts","../../src/server/template.ts","../../src/exporter/output.ts","../../src/cli/box.ts","../../src/exporter/summary.ts","../../src/cli/cooking.ts","../../src/exporter/index.ts","../../src/cli/select.ts","../../src/cli/setup.ts","../../src/cli/index.ts","../../src/cli/help.ts","../../src/cli/update-check.ts"],"sourcesContent":["{\n \"name\": \"framer-export\",\n \"version\": \"4.3.7\",\n \"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.\",\n \"type\": \"module\",\n \"main\": \"dist/cli/index.js\",\n \"types\": \"dist/cli/index.d.ts\",\n \"bin\": {\n \"framer-export\": \"./bin/framer-export.js\",\n \"fexport\": \"./bin/fexport.js\",\n \"framerexport\": \"./bin/framerexport.js\"\n },\n \"files\": [\n \"dist/\",\n \"bin/\",\n \"LICENSE\",\n \"README.md\"\n ],\n \"scripts\": {\n \"start\": \"tsx src/cli/index.ts\",\n \"dev\": \"tsx src/cli/index.ts\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"format\": \"prettier --write \\\"src/**/*.ts\\\"\",\n \"prepublishOnly\": \"npm run build\",\n \"prepack\": \"npm run build\"\n },\n \"keywords\": [\n \"framer\",\n \"webflow\",\n \"wix\",\n \"exporter\",\n \"export\",\n \"scraper\",\n \"mirror\",\n \"site-downloader\",\n \"site-export\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/danbenba/FramerExport.git\"\n },\n \"homepage\": \"https://github.com/danbenba/FramerExport#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/danbenba/FramerExport/issues\"\n },\n \"license\": \"MIT\",\n \"author\": \"Dany (danbenba)\",\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.3.0\",\n \"ora\": \"^8.0.0\",\n \"prettier\": \"^3.2.0\",\n \"puppeteer\": \"^22.0.0\",\n \"readline-promise\": \"^1.0.5\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.0.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.7.0\",\n \"typescript\": \"^5.4.0\"\n }\n}\n","import chalk from 'chalk';\nimport pkg from '../../package.json';\n\nfunction getWidth(): number {\n return process.stdout.columns || 80;\n}\n\nconst ASCII_ART = [\n '███████╗███████╗██╗ ██╗██████╗ ██████╗ ██████╗ ████████╗',\n '██╔════╝██╔════╝╚██╗██╔╝██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝',\n '█████╗ █████╗ ╚███╔╝ ██████╔╝██║ ██║██████╔╝ ██║ ',\n '██╔══╝ ██╔══╝ ██╔██╗ ██╔═══╝ ██║ ██║██╔══██╗ ██║ ',\n '██║ ███████╗██╔╝ ██╗██║ ╚██████╔╝██║ ██║ ██║ ',\n '╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝',\n];\n\nexport function showBanner(): void {\n const width = getWidth();\n const isSmall = width < 65;\n\n if (isSmall) {\n console.log(`\\n ${chalk.hex('#D4A017').bold('F-EXPORT')} ${chalk.gray(`v${pkg.version}`)}`);\n console.log(` ${chalk.white.bold('Framer · Webflow · Wix Exporter')}\\n`);\n return;\n }\n\n const gold = chalk.hex('#D4A017').bold;\n const gray = chalk.gray;\n\n console.log('');\n ASCII_ART.forEach((line) => {\n console.log(' ' + gold(line));\n });\n console.log('');\n console.log(` ${gray(`v${pkg.version}`)} ${chalk.white.bold('Framer · Webflow · Wix Exporter')}\\n`);\n}\n","import path from 'path';\nimport crypto from 'crypto';\nimport { URL } from 'url';\nimport type { PlatformHandler } from '../platforms/types.js';\n\ninterface AssetEntry {\n localPath: string;\n}\n\nexport class AssetMap {\n entries: Map<string, AssetEntry> = new Map();\n buffers: Map<string, Buffer> = new Map();\n\n localPathFor(urlStr: string, platform?: PlatformHandler): string | null {\n if (this.entries.has(urlStr)) return this.entries.get(urlStr)!.localPath;\n\n let parsed: URL;\n try {\n parsed = new URL(urlStr);\n } catch {\n return null;\n }\n\n const host: string = parsed.hostname;\n const pathname: string = parsed.pathname;\n const ext: string = path.extname(pathname.split('?')[0]).toLowerCase();\n\n let dir: string | null = null;\n\n if (platform) {\n dir = platform.mapAssetDir(host, pathname, ext);\n }\n\n if (!dir) {\n dir = this.fallbackDir(host, ext);\n }\n\n let filename: string;\n const baseName: string = path.basename(pathname.split('?')[0]);\n const hash: string = crypto.createHash('md5').update(urlStr).digest('hex').slice(0, 6);\n\n if (baseName && baseName.length > 1 && baseName !== '/') {\n const clean: string = baseName.replace(/[^a-zA-Z0-9._-]/g, '_');\n filename = clean.includes('.') ? clean : `${clean}-${hash}`;\n } else {\n filename = `asset-${hash}${ext || ''}`;\n }\n\n if (ext === '.mjs' || ext === '.js') {\n filename = baseName.replace(/[^a-zA-Z0-9._-]/g, '_');\n }\n\n const localPath: string = `${dir}/${filename}`;\n this.entries.set(urlStr, { localPath });\n\n const base: string = urlStr.split('?')[0];\n if (base !== urlStr && !this.entries.has(base)) {\n this.entries.set(base, { localPath });\n }\n\n return localPath;\n }\n\n rewrite(text: string, fromDir: string = ''): string {\n const sorted = [...this.entries.entries()].sort((a, b) => b[0].length - a[0].length);\n let out: string = text;\n for (const [url, { localPath }] of sorted) {\n const rel: string = fromDir ? path.posix.relative(fromDir, localPath) : localPath;\n out = out.split(url).join(rel);\n if (url.includes('&')) {\n out = out.split(url.replace(/&/g, '&amp;')).join(rel);\n }\n }\n return out;\n }\n\n private fallbackDir(host: string, ext: string): string {\n if (host.includes('fonts.gstatic.com') || host.includes('fonts.googleapis.com')) {\n return 'assets/fonts';\n }\n return ext === '.mjs' || ext === '.js' ? 'scripts/vendor' : 'assets/misc';\n }\n}\n","import type { Config } from '../types.js';\n\nexport const CFG: Config = {\n viewport: { width: 1440, height: 900 },\n timeout: 90000,\n scrollStep: 250,\n scrollDelay: 60,\n concurrency: 12,\n retries: 3,\n dlTimeout: 30000,\n sharedStripDomains: [\n 'sentry.io', 'www.googletagmanager.com', 'connect.facebook.net',\n 'stats.g.doubleclick.net',\n 'google-analytics.com',\n ],\n};\n","import https from 'https';\nimport http from 'http';\nimport { URL } from 'url';\nimport { CFG } from '../config/index.js';\n\nexport function dlBuffer(url: string, retries: number = CFG.retries): Promise<Buffer> {\n return new Promise((resolve, reject) => {\n const proto = url.startsWith('https') ? https : http;\n const go = (left: number): void => {\n const req = proto.get(url, { timeout: CFG.dlTimeout }, (res) => {\n if (res.statusCode! >= 300 && res.statusCode! < 400 && res.headers.location) {\n return dlBuffer(new URL(res.headers.location, url).href, left).then(resolve, reject);\n }\n if (res.statusCode !== 200) {\n return left > 1\n ? setTimeout(() => go(left - 1), 500)\n : reject(new Error(`HTTP ${res.statusCode}`));\n }\n const ch: Buffer[] = [];\n res.on('data', (c: Buffer) => ch.push(c));\n res.on('end', () => resolve(Buffer.concat(ch)));\n res.on('error', (e: Error) => (left > 1 ? setTimeout(() => go(left - 1), 500) : reject(e)));\n });\n req.on('error', (e: Error) => (left > 1 ? setTimeout(() => go(left - 1), 500) : reject(e)));\n req.on('timeout', () => {\n req.destroy();\n left > 1 ? setTimeout(() => go(left - 1), 500) : reject(new Error('Timeout'));\n });\n };\n go(retries);\n });\n}\n","import chalk from 'chalk';\nimport type { CookingSpinner } from '../cli/cooking.js';\n\nlet _cooking: CookingSpinner | null = null;\n\nexport function setCooking(spinner: CookingSpinner | null): void {\n _cooking = spinner;\n}\n\nconst T = (): string => new Date().toISOString().slice(11, 19);\n\nfunction trunc(text: string, max: number): string {\n if (text.length <= max) return text;\n return text.slice(0, max - 2) + '..';\n}\n\nfunction output(line: string): void {\n if (_cooking) _cooking.log(line);\n else console.log(line);\n}\n\nconst LOG_PALETTE: Array<(s: string) => string> = [\n (s) => chalk.hex('#D4A017')(s),\n (s) => chalk.hex('#DAA520')(s),\n (s) => chalk.hex('#C8A951')(s),\n (s) => chalk.hex('#E0B040')(s),\n (s) => chalk.hex('#daa520')(s),\n (s) => chalk.hex('#c4953a')(s),\n (s) => chalk.hex('#e8c33a')(s),\n (s) => chalk.hex('#dab660')(s),\n (s) => chalk.hex('#b8960a')(s),\n (s) => chalk.hex('#d4a76a')(s),\n (s) => chalk.hex('#e0a030')(s),\n (s) => chalk.hex('#c0a060')(s),\n];\nlet _li = 0;\n\nexport const log = (m: string): void => {\n _li++;\n const c = LOG_PALETTE[_li % LOG_PALETTE.length];\n output(`${chalk.hex('#6d6d6d')(`[${T()}]`)} ${chalk.hex('#B8960A')('[LOG]')} ${c(trunc(m, 120))}`);\n};\n\nconst INFO_PALETTE: Array<(s: string) => string> = [\n (s) => chalk.hex('#4DB8B0')(s),\n (s) => chalk.hex('#5CC0BA')(s),\n (s) => chalk.hex('#3AA89E')(s),\n (s) => chalk.hex('#6BC4BE')(s),\n (s) => chalk.hex('#48B5AD')(s),\n (s) => chalk.hex('#52BAB4')(s),\n];\nlet _ii = 0;\n\nexport const info = (m: string): void => {\n _ii++;\n const c = INFO_PALETTE[_ii % INFO_PALETTE.length];\n output(`${chalk.hex('#6d6d6d')(`[${T()}]`)} ${chalk.hex('#3AA89E').bold('[INFO]')} ${c(trunc(m, 120))}`);\n};\n\nexport const warn = (m: string): void => {\n const colors: Array<(s: string) => string> = [\n (s) => chalk.hex('#E8833A')(s),\n (s) => chalk.hex('#F09040')(s),\n (s) => chalk.hex('#CC7722')(s),\n (s) => chalk.hex('#E87D2A')(s),\n ];\n const c = colors[Math.floor(Math.random() * colors.length)];\n const line = `${chalk.hex('#7a7a7a')(`[${T()}]`)} ${chalk.hex('#E8833A').bold('[WARN]')} ${c(trunc(m, 120))}`;\n if (_cooking) _cooking.log(line);\n else console.warn(line);\n};\n\nexport const success = (m: string): void => {\n const colors: Array<(s: string) => string> = [\n (s) => chalk.hex('#4CAF50')(s),\n (s) => chalk.hex('#66BB6A')(s),\n (s) => chalk.hex('#43A047')(s),\n (s) => chalk.hex('#81C784')(s),\n (s) => chalk.hex('#2E7D32')(s),\n ];\n const c = colors[Math.floor(Math.random() * colors.length)];\n output(`${chalk.hex('#6d6d6d')(`[${T()}]`)} ${chalk.greenBright('[OK]')} ${c(trunc(m, 120))}`);\n};\n\nexport const error = (m: string): void => {\n const colors: Array<(s: string) => string> = [\n (s) => chalk.hex('#EF5350')(s),\n (s) => chalk.hex('#E53935')(s),\n (s) => chalk.hex('#F44336')(s),\n (s) => chalk.hex('#D32F2F')(s),\n ];\n const c = colors[Math.floor(Math.random() * colors.length)];\n const line = `${chalk.hex('#7a7a7a')(`[${T()}]`)} ${chalk.redBright('[ERROR]')} ${c(trunc(m, 120))}`;\n if (_cooking) _cooking.log(line);\n else console.error(line);\n};\n","import type { PlatformHandler } from './types.js';\n\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf'];\n\nexport const framer: PlatformHandler = {\n name: 'framer',\n displayName: 'Framer',\n\n detectByUrl(url: string): boolean {\n return /\\.framer\\.(app|website)|framercanvas\\.com/.test(url);\n },\n\n detectByHtml(html: string): boolean {\n return (\n html.includes('id=\"main\"') &&\n (html.includes('framerstatic.com') || html.includes('framerusercontent.com'))\n );\n },\n\n stripDomains: ['events.framer.com', 'api.framer.com', 'collect.frameranalytics.com'],\n\n stripSelectors: [\n 'script[src*=\"events.framer.com\"]',\n '#__framer-badge-container',\n '#__framer-badge',\n 'link[href*=\"canvas-sandbox\"]',\n 'script[src*=\"framer.com/bootstrap\"]',\n ],\n\n stripPatterns: [\n /<div id=\"__framer-badge-container\"[^>]*><\\/div>/g,\n /<script>try\\{if\\(localStorage\\.get\\(\"__framer_force_showing_editorbar_since\"\\)\\)[^<]*<\\/script>/g,\n ],\n\n hydrationTimeout: 10000,\n needsHydrationCheck: true,\n\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('framerusercontent.com')) {\n if (pathname.startsWith('/images/')) return 'assets/images';\n if (pathname.startsWith('/assets/')) {\n return FONT_EXTS.includes(ext) ? 'assets/fonts' : 'assets/misc';\n }\n if (pathname.startsWith('/sites/')) {\n if (ext === '.mjs' || ext === '.js') return 'scripts/vendor';\n if (ext === '.json') return 'data';\n if (ext === '.css') return 'styles';\n if (ext === '.framercms') return 'data';\n return 'assets/misc';\n }\n if (pathname.startsWith('/modules/')) {\n return ext === '.framercms' ? 'data' : 'scripts/modules';\n }\n return 'assets/misc';\n }\n\n if (host.includes('app.framerstatic.com')) {\n if (ext === '.css') return 'styles';\n if (ext === '.mjs' || ext === '.js') return 'scripts/vendor';\n if (ext === '.woff2' || ext === '.woff') return 'assets/fonts';\n if (ext === '.png' || ext === '.svg') return 'assets/images';\n return 'assets/misc';\n }\n\n if (host.includes('framercanvas.com') || host.includes('framer.com')) {\n if (ext === '.mjs' || ext === '.js') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n return 'assets/misc';\n }\n\n return null;\n },\n};\n","import type { PlatformHandler } from './types.js';\n\nconst IMG_EXTS: string[] = ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.webp', '.avif'];\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf', '.eot'];\nconst VIDEO_EXTS: string[] = ['.mp4', '.webm', '.ogg'];\n\nexport const webflow: PlatformHandler = {\n name: 'webflow',\n displayName: 'Webflow',\n\n detectByUrl(url: string): boolean {\n return /\\.webflow\\.(io|com)/.test(url);\n },\n\n detectByHtml(html: string): boolean {\n return (\n html.includes('data-wf-site') ||\n html.includes('w-webflow-badge') ||\n html.includes('Webflow') ||\n html.includes('webflow.js')\n );\n },\n\n stripDomains: ['js-agent.newrelic.com', 'cdn.heapanalytics.com', 'tr.snapchat.com'],\n\n stripSelectors: ['.w-webflow-badge', 'link[href*=\"editorbar\"]'],\n\n stripPatterns: [\n /<a[^>]*class=\"[^\"]*w-webflow-badge[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n /<a[^>]*href=\"[^\"]*webflow\\.com\\?utm_campaign=brandjs[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n /<style>[^<]*\\.w-webflow-badge[^<]*<\\/style>/g,\n /Powered by <a[^>]*href=\"[^\"]*webflow\\.com\"[^>]*>[^<]*<\\/a>/g,\n /<!-- This site was created in Webflow\\.[^>]*-->/g,\n /<html([^>]*) data-wf-domain=\"[^\"]*\"/g,\n /<html([^>]*) data-wf-page=\"[^\"]*\"/g,\n /<html([^>]*) data-wf-site=\"[^\"]*\"/g,\n /<html([^>]*) data-wf-status=\"[^\"]*\"/g,\n /<meta[^>]*content=\"Webflow\"[^>]*>/g,\n ],\n\n hydrationTimeout: 2000,\n needsHydrationCheck: false,\n\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (\n host.includes('website-files.com') ||\n host.includes('webflow.com') ||\n host.includes('uploads-ssl.webflow.com')\n ) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (pathname.includes('/css/') || ext === '.css') return 'styles';\n if (pathname.includes('/js/') || ext === '.js') return 'scripts/vendor';\n if (pathname.includes('/gsap/') || pathname.includes('/plugins/')) return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n\n if (host.includes('d3e54v103j8qbb.cloudfront.net')) {\n if (ext === '.js') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n\n return null;\n },\n};\n","import type { PlatformHandler } from './types.js';\n\nconst IMG_EXTS: string[] = ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.webp', '.avif', '.ico'];\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf', '.eot'];\nconst VIDEO_EXTS: string[] = ['.mp4', '.webm', '.ogg'];\n\nexport const wix: PlatformHandler = {\n name: 'wix',\n displayName: 'Wix',\n\n detectByUrl(url: string): boolean {\n return /\\.wixsite\\.com|\\.wix\\.com/.test(url);\n },\n\n detectByHtml(html: string): boolean {\n return (\n html.includes('wix-viewer-model') ||\n html.includes('id=\"WIX_ADS\"') ||\n html.includes('X-Wix-') ||\n html.includes('Wix.com') ||\n html.includes('wixcode-sdk') ||\n html.includes('data-wix') ||\n html.includes('wix-code') ||\n html.includes('WixCode') ||\n /\\bwix\\.com\\b/.test(html) ||\n /meta\\s+name=[\"']generator[\"']\\s+content=[\"'][^\"']*Wix[^\"']*[\"']/i.test(html) ||\n /_wix_/i.test(html) ||\n /wix-ecom/i.test(html)\n );\n },\n\n stripDomains: [\n 'frog.wix.com',\n 'bi.wixapi.com',\n 'fed.wixcodescheduler.com',\n 'editor.wix.com',\n 'panorama.wixapps.net',\n ],\n\n stripSelectors: ['#WIX_ADS', '.wix-ads', '#wix-badge', '#SCROLL_TO_TOP'],\n\n stripPatterns: [\n /<div[^>]*class=\"[^\"]*wix-ads[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/g,\n ],\n\n hydrationTimeout: 3000,\n needsHydrationCheck: false,\n\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host === 'video.wixstatic.com') {\n return 'assets/videos';\n }\n\n if (host.includes('wixstatic.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n\n if (host.includes('parastorage.com')) {\n if (ext === '.js') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n\n return null;\n },\n};\n","import type { PlatformHandler, PlatformType } from './types.js';\nimport type { Page } from 'puppeteer';\nimport { framer } from './framer.js';\nimport { webflow } from './webflow.js';\nimport { wix } from './wix.js';\n\nconst ALL_PLATFORMS: PlatformHandler[] = [framer, webflow, wix];\n\nexport function detectByUrl(url: string): PlatformHandler | null {\n for (const platform of ALL_PLATFORMS) {\n if (platform.detectByUrl(url)) return platform;\n }\n return null;\n}\n\nexport function detectByHtml(html: string): PlatformHandler | null {\n for (const platform of ALL_PLATFORMS) {\n if (platform.detectByHtml(html)) return platform;\n }\n return null;\n}\n\nexport function detectPlatform(url: string, html?: string): PlatformHandler {\n const byUrl = detectByUrl(url);\n if (byUrl) return byUrl;\n\n if (html) {\n const byHtml = detectByHtml(html);\n if (byHtml) return byHtml;\n }\n\n return framer;\n}\n\nexport async function detectByDom(page: Page): Promise<PlatformHandler | null> {\n try {\n const signal: string = await page.evaluate(() => {\n const html: string = document.documentElement.outerHTML || '';\n\n if (/wix-viewer-model|_wix_|wix-ecom/i.test(html)) return 'wix';\n if (/data-wf-|w-webflow-badge|webflow\\.js/i.test(html)) return 'webflow';\n if (/framerusercontent|framercanvas|framerstatic/i.test(html)) return 'framer';\n\n const srcs: string[] = [];\n const scripts: NodeListOf<HTMLScriptElement> = document.querySelectorAll('script[src]');\n scripts.forEach((s) => { if (s.src) srcs.push(s.src); });\n const allSrcs: string = srcs.join(' ');\n if (/wixstatic\\.com|parastorage\\.com/.test(allSrcs)) return 'wix';\n if (/website-files\\.com|webflow\\.com/.test(allSrcs)) return 'webflow';\n if (/framerusercontent\\.com|framerstatic\\.com|framer\\.app/.test(allSrcs)) return 'framer';\n\n return '';\n });\n\n if (signal === 'wix') return wix;\n if (signal === 'webflow') return webflow;\n if (signal === 'framer') return framer;\n } catch {}\n return null;\n}\n\nexport function getPlatformByName(name: PlatformType): PlatformHandler {\n const map: Record<string, PlatformHandler> = { framer, webflow, wix };\n return map[name] || framer;\n}\n","export type { PlatformHandler, PlatformType } from './types.js';\nexport { framer } from './framer.js';\nexport { webflow } from './webflow.js';\nexport { wix } from './wix.js';\nexport { detectPlatform, detectByUrl, detectByHtml, detectByDom, getPlatformByName } from './detect.js';\n","import puppeteer, { type Page } from 'puppeteer';\nimport { CFG } from '../config/index.js';\nimport { log, success, info } from '../logger/index.js';\nimport { detectByDom } from '../platforms/index.js';\nimport type { ExporterContext } from '../types.js';\n\nexport async function launchAndCapture(exporter: ExporterContext): Promise<void> {\n exporter.cooking?.update('Launching browser...');\n log('Launching headless Chromium...');\n\n exporter.browser = await puppeteer.launch({\n headless: true,\n args: ['--no-sandbox', '--disable-setuid-sandbox'],\n });\n success('Chromium launched');\n\n exporter.page = await exporter.browser.newPage();\n await exporter.page.setViewport(CFG.viewport);\n log('Viewport set to ' + CFG.viewport.width + 'x' + CFG.viewport.height);\n\n await exporter.page.setUserAgent(\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' +\n '(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'\n );\n log('User agent set to Chrome 131');\n\n const allStripDomains: string[] = [\n ...CFG.sharedStripDomains,\n ...exporter.platform.stripDomains,\n ];\n log('Blocking ' + allStripDomains.length + ' tracking domains:');\n for (const domain of allStripDomains) {\n log(' - ' + domain);\n }\n\n let intercepted = 0;\n let blocked = 0;\n\n exporter.page.on('response', async (res) => {\n const url: string = res.url();\n if (url.startsWith('data:') || url.startsWith('blob:')) return;\n\n try {\n const host: string = new URL(url).hostname;\n if (allStripDomains.some((d) => host.includes(d))) {\n blocked++;\n return;\n }\n } catch {\n return;\n }\n\n exporter.assets.localPathFor(url, exporter.platform);\n try {\n exporter.assets.buffers.set(url, await res.buffer());\n intercepted++;\n } catch {}\n });\n\n log('Network interception enabled');\n\n exporter.cooking?.update('Navigating to site...');\n info('Navigating to ' + exporter.siteUrl);\n await exporter.page.goto(exporter.siteUrl, {\n waitUntil: 'networkidle2',\n timeout: CFG.timeout,\n });\n success('Page loaded (networkidle2)');\n log('Intercepted ' + intercepted + ' resources, blocked ' + blocked + ' tracking requests');\n\n log('Checking DOM-based platform detection...');\n const domDetected = await detectByDom(exporter.page);\n if (domDetected && domDetected.name !== exporter.platform.name) {\n log('Platform refined from DOM: ' + domDetected.displayName + ' (override: ' + exporter.platform.name + ')');\n exporter.platform = domDetected;\n }\n\n exporter.cooking?.update('Waiting for ' + exporter.platform.displayName + ' hydration...');\n\n if (exporter.platform.needsHydrationCheck) {\n log('Checking for #main element hydration...');\n log('Hydration timeout: ' + exporter.platform.hydrationTimeout + 'ms');\n const timeout = exporter.platform.hydrationTimeout;\n await exporter.page.evaluate(`\n new Promise(function(r) {\n var start = Date.now();\n var tick = function() {\n var m = document.getElementById('main') || document.body;\n if (m && m.children.length > 0) setTimeout(r, 2000);\n else if (Date.now() - start > ${timeout}) r();\n else setTimeout(tick, 200);\n };\n tick();\n })\n `);\n success('Hydration complete (SPA rendered)');\n } else {\n log('Static site detected, waiting ' + exporter.platform.hydrationTimeout + 'ms for render...');\n await new Promise<void>((r) => setTimeout(r, exporter.platform.hydrationTimeout));\n success(exporter.platform.displayName + ' page rendered');\n }\n\n exporter.cooking?.update('Scrolling page...');\n log('Starting full-page scroll (step: ' + CFG.scrollStep + 'px, delay: ' + CFG.scrollDelay + 'ms)');\n\n const scrollStep = CFG.scrollStep;\n const scrollDelay = CFG.scrollDelay;\n\n const pageHeight: number = await exporter.page.evaluate(`\n Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)\n `) as number;\n log('Page height: ' + pageHeight + 'px (' + Math.ceil(pageHeight / scrollStep) + ' scroll steps)');\n\n await exporter.page.evaluate(`\n new Promise(function(r) {\n var y = 0;\n var max = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n var step = function() {\n y += ${scrollStep};\n window.scrollTo({ top: y, behavior: 'instant' });\n y < max + 500 ? setTimeout(step, ${scrollDelay}) : (window.scrollTo(0, 0), r());\n };\n step();\n })\n `);\n success('Full-page scroll complete');\n\n exporter.cooking?.update('Waiting for lazy resources...');\n log('Waiting 2s for lazy-loaded resources...');\n await new Promise<void>((r) => setTimeout(r, 2000));\n\n log('Checking network idle (1.5s quiet, 8s timeout)...');\n try {\n await exporter.page.waitForNetworkIdle({ idleTime: 1500, timeout: 8000 });\n success('Network idle confirmed');\n } catch {\n log('Network idle timeout reached (continuing anyway)');\n }\n\n const totalCaptured: number = exporter.assets.buffers.size;\n success('Captured ' + totalCaptured + ' network resources total');\n\n const cssCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.endsWith('.css')).length;\n const jsCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.endsWith('.js') || e.localPath.endsWith('.mjs')).length;\n const imgCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.startsWith('assets/images')).length;\n const fontCount: number = [...exporter.assets.entries.values()].filter((e) => e.localPath.startsWith('assets/fonts')).length;\n log(' CSS: ' + cssCount + ' | JS: ' + jsCount + ' | Images: ' + imgCount + ' | Fonts: ' + fontCount);\n}\n\nexport async function closeBrowser(exporter: { browser: import('puppeteer').Browser | null }): Promise<void> {\n if (exporter.browser) {\n await exporter.browser.close();\n exporter.browser = null;\n log('Browser closed');\n }\n}\n\nexport async function captureSubpage(\n page: Page,\n url: string,\n platform: { needsHydrationCheck: boolean; hydrationTimeout: number }\n): Promise<string> {\n log(' Navigating to sub-page: ' + url);\n await page.goto(url, { waitUntil: 'networkidle2', timeout: CFG.timeout });\n\n if (platform.needsHydrationCheck) {\n await page.evaluate(\n `new Promise(function(r) {\n var t = Date.now();\n (function tick() {\n var m = document.getElementById('main') || document.body;\n if (m && m.children.length > 0) setTimeout(r, 500);\n else if (Date.now() - t > ${platform.hydrationTimeout}) r();\n else setTimeout(tick, 200);\n })();\n })`\n );\n } else {\n await new Promise<void>((r) => setTimeout(r, 1000));\n }\n\n const html: string = await page.evaluate(() => document.documentElement.outerHTML || document.body.innerHTML);\n log(' Sub-page fetched: ' + (html.length / 1024).toFixed(1) + ' KB');\n return html;\n}\n","export async function pool(tasks: Array<() => Promise<void>>, n: number): Promise<void> {\n let i = 0;\n const run = async (): Promise<void> => {\n while (i < tasks.length) {\n const j = i++;\n await tasks[j]();\n }\n };\n await Promise.all(Array.from({ length: Math.min(n, tasks.length) }, () => run()));\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { CFG } from '../config/index.js';\nimport { log, warn, success } from '../logger/index.js';\nimport { dlBuffer } from '../network/download.js';\nimport { pool } from '../network/pool.js';\nimport type { ExporterContext } from '../types.js';\n\nexport async function downloadAll(exporter: ExporterContext): Promise<void> {\n const seen: Set<string> = new Set();\n const toDownload: Array<{ url: string; localPath: string }> = [];\n for (const [url, { localPath }] of exporter.assets.entries) {\n if (seen.has(localPath)) continue;\n seen.add(localPath);\n toDownload.push({ url, localPath });\n }\n\n const total: number = toDownload.length;\n log('Starting download of ' + total + ' unique assets');\n log('Concurrency: ' + CFG.concurrency + ' parallel downloads');\n log('Retry policy: ' + CFG.retries + ' attempts, ' + CFG.dlTimeout + 'ms timeout');\n\n let ok = 0;\n let cached = 0;\n let fail = 0;\n let completed = 0;\n let lastReported = 0;\n\n const tasks: Array<() => Promise<void>> = toDownload.map(\n ({ url, localPath }) =>\n async (): Promise<void> => {\n const dest: string = path.join(exporter.outDir, localPath);\n await fs.mkdir(path.dirname(dest), { recursive: true });\n\n try {\n const buf: Buffer | undefined =\n exporter.assets.buffers.get(url) ||\n exporter.assets.buffers.get(url.split('?')[0]);\n if (buf) {\n await fs.writeFile(dest, buf);\n cached++;\n ok++;\n } else {\n const data: Buffer = await dlBuffer(url);\n await fs.writeFile(dest, data);\n ok++;\n }\n } catch (e) {\n fail++;\n if (\n !url.includes('framer.com/edit') &&\n !url.includes('framerstatic.com/editorbar')\n ) {\n warn('Download failed: ' + path.basename(localPath) + ' - ' + (e as Error).message);\n }\n }\n\n completed++;\n const pct: number = Math.floor((completed / total) * 100);\n if (pct >= lastReported + 10 || completed === total) {\n exporter.cooking?.update('Downloading... ' + completed + '/' + total + ' (' + pct + '%)');\n log('Download progress: ' + completed + '/' + total + ' (' + pct + '%)');\n lastReported = pct;\n }\n }\n );\n\n await pool(tasks, CFG.concurrency);\n\n success('Downloads complete: ' + ok + ' succeeded, ' + cached + ' from cache, ' + fail + ' failed');\n\n const totalBytes: number = [...exporter.assets.entries.values()].length;\n log('Total unique assets written to disk: ' + totalBytes);\n\n exporter.assets.buffers.clear();\n log('Network buffer cache cleared');\n}\n","import prettier from 'prettier';\n\nexport async function prettifyJS(src: string): Promise<string> {\n try {\n return await prettier.format(src, {\n parser: 'babel',\n printWidth: 100,\n tabWidth: 2,\n useTabs: false,\n semi: true,\n singleQuote: false,\n trailingComma: 'es5',\n bracketSpacing: true,\n arrowParens: 'always',\n });\n } catch {\n return src;\n }\n}\n","export const SERVE_SCRIPT: string = `#!/usr/bin/env node\nconst http = require('http');\nconst fs = require('fs');\nconst path = require('path');\n\nconst PORT = process.env.PORT || 3000;\nconst ROOT = __dirname;\n\nconst MIME = {\n '.html': 'text/html; charset=utf-8',\n '.css': 'text/css; charset=utf-8',\n '.js': 'application/javascript; charset=utf-8',\n '.mjs': 'application/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.webp': 'image/webp',\n '.avif': 'image/avif',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.ttf': 'font/ttf',\n '.otf': 'font/otf',\n '.mp4': 'video/mp4',\n '.webm': 'video/webm',\n '.ogg': 'video/ogg',\n '.framercms': 'application/octet-stream',\n};\n\nconst server = http.createServer((req, res) => {\n let url = decodeURIComponent(req.url.split('?')[0]);\n if (url === '/') url = '/index.html';\n\n let filePath = path.join(ROOT, url);\n if (!filePath.startsWith(ROOT)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n const serveFile = (pathToFile) => {\n fs.readFile(pathToFile, (err, data) => {\n if (err) {\n // SPA Fallback: if it's not a file, serve index.html\n if (url !== '/index.html' && !path.extname(url)) {\n return serveFile(path.join(ROOT, 'index.html'));\n }\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n const ext = path.extname(pathToFile).toLowerCase();\n const mime = MIME[ext] || 'application/octet-stream';\n res.writeHead(200, {\n 'Content-Type': mime,\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'public, max-age=3600',\n });\n res.end(data);\n });\n };\n\n serveFile(filePath);\n});\n\nserver.listen(PORT, () => {\n console.log('\\\\x1b[32m%s\\\\x1b[0m', ' 🚀 Cooksite Local Server Running');\n console.log('\\\\x1b[36m%s\\\\x1b[0m', ' ├─ URL: http://localhost:' + PORT);\n console.log('\\\\x1b[35m%s\\\\x1b[0m', ' └─ Directory: ' + ROOT);\n console.log('\\\\n Press Ctrl+C to stop.');\n});\n`;\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { log, warn, success } from '../logger/index.js';\nimport { prettifyJS } from '../formatter/prettify.js';\nimport { SERVE_SCRIPT } from '../server/template.js';\nimport type { ExporterContext } from '../types.js';\n\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction stripBySelector(html: string, sel: string): string {\n if (sel.includes('[src*=\"')) {\n const match = sel.match(/\\[src\\*=\"([^\"]+)\"\\]/);\n if (match) {\n const domain: string = escapeRegex(match[1]);\n html = html.replace(new RegExp(`<script[^>]*${domain}[^>]*>[^<]*<\\\\/script>`, 'g'), '');\n html = html.replace(new RegExp(`<script[^>]*${domain}[^>]*><\\\\/script>`, 'g'), '');\n }\n } else if (sel.includes('[href*=\"')) {\n const match = sel.match(/\\[href\\*=\"([^\"]+)\"\\]/);\n if (match) {\n const href: string = escapeRegex(match[1]);\n html = html.replace(new RegExp(`<link[^>]*${href}[^>]*>`, 'g'), '');\n }\n } else if (sel.startsWith('.')) {\n const cls: string = escapeRegex(sel.slice(1));\n html = html.replace(\n new RegExp(`<[^>]*class=\"[^\"]*${cls}[^\"]*\"[^>]*>[\\\\s\\\\S]*?<\\\\/[^>]*>`, 'g'),\n ''\n );\n } else if (sel.startsWith('#')) {\n const id: string = sel.slice(1);\n html = removeElementById(html, id);\n }\n return html;\n}\n\nfunction removeElementById(html: string, id: string): string {\n const marker: string = `id=\"${id}\"`;\n let idx: number = html.indexOf(marker);\n while (idx !== -1) {\n const tagStart: number = html.lastIndexOf('<', idx);\n if (tagStart === -1) break;\n\n const tagNameEnd: number = html.indexOf(' ', tagStart + 1);\n const tagName: string = html.slice(tagStart + 1, tagNameEnd).toLowerCase();\n\n let depth = 0;\n let i: number = tagStart;\n while (i < html.length) {\n if (html.startsWith(`<${tagName}`, i) && (html[i + tagName.length + 1] === ' ' || html[i + tagName.length + 1] === '>')) {\n depth++;\n i += tagName.length + 1;\n } else if (html.startsWith(`</${tagName}>`, i)) {\n depth--;\n if (depth === 0) {\n html = html.slice(0, tagStart) + html.slice(i + tagName.length + 3);\n break;\n }\n i += tagName.length + 3;\n } else {\n i++;\n }\n }\n\n idx = html.indexOf(marker);\n }\n return html;\n}\n\nfunction processSEO(html: string, url: string): string {\n const canonical = url.split('?')[0].replace(/\\/$/, '');\n \n // Inject Canonical\n if (!html.includes('rel=\"canonical\"')) {\n html = html.replace('</head>', ` <link rel=\"canonical\" href=\"${canonical}\">\\n </head>`);\n }\n\n // Inject Meta Description if missing\n if (!html.includes('name=\"description\"')) {\n html = html.replace('</head>', ` <meta name=\"description\" content=\"Exported with Cooksite - Fast, SEO-optimized, and clean.\">\\n </head>`);\n }\n\n // Inject OG Tags if missing\n if (!html.includes('property=\"og:')) {\n html = html.replace('</head>', ` <meta property=\"og:type\" content=\"website\">\\n <meta property=\"og:url\" content=\"${canonical}\">\\n <meta property=\"og:title\" content=\"Exported Site\">\\n <meta property=\"og:description\" content=\"A fast, clean version of this site, exported for performance.\">\\n </head>`);\n }\n\n // Inject Robot tags\n if (!html.includes('name=\"robots\"')) {\n html = html.replace('</head>', ` <meta name=\"robots\" content=\"index, follow\">\\n </head>`);\n }\n\n return html;\n}\n\nfunction stripIntegrityAndCors(html: string): string {\n html = html.replace(/\\s+integrity=\"[^\"]*\"/g, '');\n html = html.replace(/\\s+crossorigin=\"[^\"]*\"/g, '');\n html = html.replace(/\\s+crossorigin/g, '');\n html = html.replace(/<link[^>]*rel=\"preconnect\"[^>]*>/g, '');\n html = html.replace(/<link[^>]*rel=\"dns-prefetch\"[^>]*>/g, '');\n html = html.replace(/<meta[^>]*content-security-policy[^>]*>/gi, '');\n return html;\n}\n\nfunction stripSrcsetCdnUrls(html: string): string {\n html = html.replace(/srcset=\"([^\"]*)\"/g, (_match: string, srcset: string) => {\n const cleaned: string = srcset\n .split(',')\n .map((entry: string) => entry.trim())\n .filter((entry: string) => !entry.startsWith('http'))\n .join(', ');\n return cleaned ? 'srcset=\"' + cleaned + '\"' : '';\n });\n return html;\n}\n\nexport async function buildOutput(exporter: ExporterContext): Promise<void> {\n exporter.cooking?.update('Stripping platform badges...');\n log('Starting HTML post-processing...');\n log('HTML size: ' + (exporter.ssrHTML.length / 1024).toFixed(1) + ' KB');\n\n let html: string = exporter.ssrHTML;\n if (!html) {\n warn('No SSR HTML available, cannot build output');\n return;\n }\n\n exporter.cooking?.update('Removing integrity checks...');\n const beforeIntegrity: number = html.length;\n html = stripIntegrityAndCors(html);\n log('Stripped integrity/crossorigin/preconnect (' + (beforeIntegrity - html.length) + ' chars)');\n success('Integrity and CORS restrictions removed');\n\n if (typeof processSEO === 'function') {\n exporter.cooking?.update('Optimizing SEO...');\n html = processSEO(html, exporter.siteUrl);\n success('SEO meta tags optimized');\n }\n\n log('Stripping ' + exporter.platform.stripSelectors.length + ' selectors:');\n for (const sel of exporter.platform.stripSelectors) {\n const before: number = html.length;\n html = stripBySelector(html, sel);\n const removed: number = before - html.length;\n if (removed > 0) {\n log(' Stripped ' + sel + ' (' + removed + ' chars removed)');\n }\n }\n\n log('Applying ' + exporter.platform.stripPatterns.length + ' regex patterns...');\n for (const pattern of exporter.platform.stripPatterns) {\n const before: number = html.length;\n html = html.replace(new RegExp(pattern.source, pattern.flags), '');\n const removed: number = before - html.length;\n if (removed > 0) {\n log(' Pattern removed ' + removed + ' chars');\n }\n }\n success('Platform badges and tracking stripped');\n\n exporter.cooking?.update('Rewriting asset URLs...');\n log('Rewriting ' + exporter.assets.entries.size + ' CDN URLs to local paths...');\n const beforeRewrite: number = html.length;\n html = exporter.assets.rewrite(html, '');\n log('HTML rewrite delta: ' + (html.length - beforeRewrite) + ' chars');\n\n exporter.cooking?.update('Cleaning srcset references...');\n html = stripSrcsetCdnUrls(html);\n log('Cleaned remaining CDN URLs from srcset attributes');\n\n await rewriteDownloadedFiles(exporter);\n success('All URLs rewritten to local paths');\n\n exporter.cooking?.update('Pretty-printing JS files...');\n await prettifyDownloadedJS(exporter);\n\n exporter.cooking?.update('Writing final output...');\n log('Writing index.html (' + (html.length / 1024).toFixed(1) + ' KB)...');\n await fs.writeFile(path.join(exporter.outDir, 'index.html'), html);\n success('index.html written');\n\n await fs.writeFile(path.join(exporter.outDir, 'serve.cjs'), SERVE_SCRIPT);\n log('serve.cjs written');\n success('Output build complete');\n}\n\nasync function rewriteDownloadedFiles(exporter: ExporterContext): Promise<void> {\n const dirs: string[] = ['scripts/vendor', 'scripts/modules', 'styles'];\n let rewritten = 0;\n\n for (const dir of dirs) {\n const fullDir: string = path.join(exporter.outDir, dir);\n let files: string[];\n try {\n files = await fs.readdir(fullDir);\n } catch {\n continue;\n }\n\n for (const file of files) {\n const ext: string = path.extname(file).toLowerCase();\n if (!['.mjs', '.js', '.css'].includes(ext)) continue;\n\n const filePath: string = path.join(fullDir, file);\n try {\n let content: string = await fs.readFile(filePath, 'utf-8');\n const before: string = content;\n content = exporter.assets.rewrite(content, dir);\n if (content !== before) {\n await fs.writeFile(filePath, content);\n rewritten++;\n }\n } catch {}\n }\n }\n log('Rewrote URLs in ' + rewritten + ' JS/CSS files');\n}\n\nasync function prettifyDownloadedJS(exporter: ExporterContext): Promise<void> {\n const dirs: string[] = ['scripts/vendor', 'scripts/modules'];\n let count = 0;\n let total = 0;\n\n for (const dir of dirs) {\n const fullDir: string = path.join(exporter.outDir, dir);\n let files: string[];\n try {\n files = await fs.readdir(fullDir);\n } catch {\n continue;\n }\n\n const jsFiles: string[] = files.filter((f) => {\n const ext: string = path.extname(f).toLowerCase();\n return ext === '.mjs' || ext === '.js';\n });\n total += jsFiles.length;\n\n for (const file of jsFiles) {\n const filePath: string = path.join(fullDir, file);\n try {\n const raw: string = await fs.readFile(filePath, 'utf-8');\n\n const nlRatio: number = (raw.match(/\\n/g) || []).length / raw.length;\n if (nlRatio > 0.05) {\n count++;\n continue;\n }\n\n const pretty: string = await prettifyJS(raw);\n await fs.writeFile(filePath, pretty, 'utf-8');\n count++;\n\n if (count % 5 === 0) {\n exporter.cooking?.update('Pretty-printing... (' + count + '/' + total + ')');\n }\n } catch (e) {\n warn('Pretty-print skipped: ' + file + ' - ' + (e as Error).message);\n count++;\n }\n }\n }\n\n success('Formatted ' + count + '/' + total + ' JS/MJS files');\n}\n","import chalk from 'chalk';\n\nexport function maxWidth(): number {\n return Math.min(process.stdout.columns || 80, 62);\n}\n\nconst B = chalk.hex('#8B6914');\nconst G = chalk.hex('#C4953A');\n\nfunction padRight(text: string, w: number): string {\n const visible = stripAnsi(text).length;\n if (visible >= w) return text;\n return text + ' '.repeat(w - visible);\n}\n\nfunction stripAnsi(s: string): string {\n return s.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n}\n\nexport function boxTop(w: number): string {\n const inner = w - 4;\n return ' ' + B('╔═') + B('═'.repeat(inner)) + B('═╗');\n}\n\nexport function boxBot(w: number): string {\n const inner = w - 4;\n return ' ' + B('╚═') + B('═'.repeat(inner)) + B('═╝');\n}\n\nexport function boxLine(w: number, text: string): string {\n const inner = w - 4;\n const padded = padRight(text, inner);\n return ' ' + B('║ ') + padded + B(' ║');\n}\n\nexport function boxSep(w: number): string {\n const inner = w - 4;\n return ' ' + B('╠═') + B('═'.repeat(inner)) + B('═╣');\n}\n\nexport function boxRow(w: number, label: string, value: string): string {\n const inner = w - 4;\n const labelPlain = stripAnsi(chalk.bold(label));\n const visible = labelPlain.length + 1 + value.length;\n if (visible > inner) {\n const avail = inner - labelPlain.length - 2;\n const truncated = value.length > avail ? value.slice(0, avail - 1) + '..' : value;\n return ' ' + G('║ ') + chalk.bold(label) + ': ' + chalk.yellow(truncated) + ' '.repeat(Math.max(0, inner - labelPlain.length - 1 - truncated.length)) + G(' ║');\n }\n const right = inner - labelPlain.length - 1 - value.length;\n return ' ' + G('║ ') + chalk.bold(label) + ': ' + chalk.yellow(value) + ' '.repeat(right) + G(' ║');\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport type { ExporterContext } from '../types.js';\nimport { boxTop, boxLine, boxBot, boxSep, maxWidth } from '../cli/box.js';\n\nexport async function printSummary(exporter: ExporterContext): Promise<void> {\n const w = maxWidth();\n const isSmall = w < 50;\n\n const count = async (d: string): Promise<number> => {\n try {\n return (await fs.readdir(path.join(exporter.outDir, d))).length;\n } catch {\n return 0;\n }\n };\n const [imgs, fonts, videos, misc, scripts, vendor, styles, data, subpages] = await Promise.all([\n count('assets/images'),\n count('assets/fonts'),\n count('assets/videos'),\n count('assets/misc'),\n count('scripts/modules'),\n count('scripts/vendor'),\n count('styles'),\n count('data'),\n count('subpages'),\n ]);\n\n const G = chalk.hex('#D4A017');\n const G2 = chalk.hex('#DAA520');\n const C2 = chalk.hex('#E0B040');\n const Y = chalk.yellow;\n const O = chalk.hex('#CC7722');\n const Br = chalk.hex('#B8860B');\n const Gr = chalk.gray;\n const Gn = chalk.green;\n\n const entries: Array<[string, number, string, (s: string) => string]> = [\n ['styles/', styles, 'CSS', G],\n ['scripts/vendor/', vendor, 'JS vendor', G2],\n ['scripts/modules/', scripts, 'JS modules', C2],\n ['assets/images/', imgs, 'images', Y],\n ['assets/videos/', videos, 'videos', O],\n ['assets/fonts/', fonts, 'fonts', Br],\n ['assets/misc/', misc, 'misc', Gr],\n ['data/', data, 'data', Gr],\n ['subpages/', subpages, 'pages', Gn],\n ];\n\n console.log('');\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' Export Summary')));\n console.log(boxSep(w));\n } else {\n console.log(chalk.bold.white(' Export Summary:'));\n }\n\n for (const [label, cnt, type, color] of entries) {\n if (cnt === 0) continue;\n const inner = w - 4;\n const l = label.padEnd(16);\n const c = String(cnt).padStart(3);\n const rowText = `${color(l)}${chalk.white(c)} ${chalk.gray(type)}`;\n const visible = 16 + 3 + 2 + type.length;\n const pad = Math.max(0, inner - visible);\n if (isSmall) {\n console.log(` ${color(label)} ${chalk.white(String(cnt))} ${chalk.gray(type)}`);\n } else {\n console.log(' ' + chalk.hex('#C4953A')('║ ') + rowText + ' '.repeat(pad) + chalk.hex('#C4953A')(' ║'));\n }\n }\n\n if (!isSmall) {\n console.log(boxBot(w));\n }\n\n console.log('');\n const cdCmd = 'cd ' + path.basename(exporter.outDir) + ' && node serve.cjs';\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' To serve locally')));\n console.log(boxSep(w));\n const inner = w - 6;\n const cmdLen = cdCmd.length;\n const pad = Math.max(0, inner - cmdLen);\n console.log(' ' + chalk.hex('#C4953A')('║ ') + G(cdCmd) + ' '.repeat(pad) + chalk.hex('#9e9e9e')(' 🗐') + chalk.hex('#C4953A')(' ║'));\n console.log(boxBot(w));\n } else {\n console.log(chalk.bold.white(' To serve locally:'));\n console.log(` ${G(cdCmd)}`);\n }\n \n console.log('');\n console.log(chalk.gray(' NOTE: Must be served via HTTP for JS modules to work.'));\n console.log('');\n}\n","import chalk from 'chalk';\n\nconst SHINE_WIDTH = 10;\nconst FRAME_INTERVAL = 140;\n\nconst DOT_PHASES = [' ', '. ', '.. ', '...', ' ..', ' .', ' '];\n\nexport class CookingSpinner {\n private interval: NodeJS.Timeout | null = null;\n private frame = 0;\n private phase = '';\n private active = false;\n\n start(phase: string = ''): void {\n this.phase = phase;\n this.frame = 0;\n this.active = true;\n this.draw();\n this.interval = setInterval(() => {\n this.frame++;\n this.draw();\n }, FRAME_INTERVAL);\n }\n\n update(phase: string): void {\n this.phase = phase;\n }\n\n log(message: string): void {\n if (this.active) {\n process.stdout.write('\\r\\x1B[2K');\n }\n process.stdout.write(message + '\\n');\n if (this.active) {\n this.draw();\n }\n }\n\n stop(): void {\n this.active = false;\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n process.stdout.write('\\r\\x1B[2K');\n }\n\n private draw(): void {\n if (!this.active) return;\n\n const dots = DOT_PHASES[this.frame % DOT_PHASES.length];\n const shimmer = this.renderShimmer('Cooking');\n const dotStr = chalk.hex('#D4A017')(dots);\n const phaseStr = this.phase\n ? ` ${chalk.gray(this.limitLen(this.phase, 38))}`\n : '';\n\n process.stdout.write(`\\r\\x1B[2K ${shimmer} ${dotStr}${phaseStr}`);\n }\n\n private renderShimmer(text: string): string {\n let result = '';\n const pos = this.frame % (text.length + SHINE_WIDTH * 2) - SHINE_WIDTH;\n for (let i = 0; i < text.length; i++) {\n const dist = Math.abs(i - pos);\n if (dist < SHINE_WIDTH) {\n const t = 1 - dist / SHINE_WIDTH;\n const g = Math.floor(160 + t * 95);\n result += chalk.rgb(g, g, g)(text[i]);\n } else {\n result += chalk.rgb(160, 160, 160)(text[i]);\n }\n }\n return result;\n }\n\n private limitLen(s: string, max: number): string {\n if (s.length <= max) return s;\n return s.slice(0, max - 1) + '…';\n }\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport type { Browser, Page } from 'puppeteer';\nimport { AssetMap } from '../assets/asset-map.js';\nimport { dlBuffer } from '../network/download.js';\nimport { info, log, success, setCooking } from '../logger/index.js';\nimport { launchAndCapture, captureSubpage, closeBrowser } from './capture.js';\nimport { downloadAll } from './download.js';\nimport { buildOutput } from './output.js';\nimport { printSummary } from './summary.js';\nimport { detectPlatform, getPlatformByName } from '../platforms/index.js';\nimport type { PlatformHandler, PlatformType } from '../platforms/types.js';\nimport type { ExporterContext } from '../types.js';\nimport { CookingSpinner } from '../cli/cooking.js';\n\nexport function deriveOutputName(url: string, platformName: PlatformType): string {\n try {\n const parsed = new URL(url);\n const hostname: string = parsed.hostname;\n\n let siteName: string;\n if (hostname.endsWith('.webflow.io')) {\n siteName = hostname.replace('.webflow.io', '');\n } else if (hostname.includes('.wixsite.com')) {\n const parts: string[] = parsed.pathname.split('/').filter(Boolean);\n siteName = parts[0] || hostname.split('.')[0];\n } else if (hostname.match(/\\.framer\\.(app|website|ai)$/)) {\n siteName = hostname.split('.framer.')[0];\n } else {\n siteName = hostname.replace(/\\./g, '-');\n }\n\n return `${platformName}-${siteName}`;\n } catch {\n return 'framer-export-output';\n }\n}\n\nexport class FramerExporter implements ExporterContext {\n siteUrl: string;\n outDir: string;\n assets: AssetMap;\n browser: Browser | null;\n page: Page | null;\n ssrHTML: string;\n prettyPrint: boolean;\n platform: PlatformHandler;\n cooking?: CookingSpinner;\n\n constructor(siteUrl: string, outDir: string, platformOverride?: PlatformType) {\n this.siteUrl = siteUrl;\n this.outDir = outDir;\n this.assets = new AssetMap();\n this.browser = null;\n this.page = null;\n this.ssrHTML = '';\n this.prettyPrint = true;\n\n if (platformOverride && platformOverride !== 'unknown') {\n this.platform = getPlatformByName(platformOverride);\n } else {\n this.platform = detectPlatform(siteUrl);\n }\n }\n\n async run(includeSubpages: boolean = false): Promise<void> {\n console.log(chalk.bold.hex('#D4A017')('\\n Cooksite v4 - Full Mirror & Clean Export\\n'));\n info('Source : ' + chalk.underline(this.siteUrl));\n info('Output : ' + chalk.yellow(this.outDir));\n info('Platform : ' + chalk.hex('#D4A017')(this.platform.displayName));\n if (includeSubpages) {\n info('Subpages : ' + chalk.green('enabled'));\n }\n console.log('');\n\n this.cooking = new CookingSpinner();\n setCooking(this.cooking);\n this.cooking.start('Preparing directories...');\n\n for (const d of [\n '',\n 'assets/images',\n 'assets/fonts',\n 'assets/videos',\n 'assets/misc',\n 'styles',\n 'scripts/vendor',\n 'scripts/modules',\n 'data',\n 'subpages',\n ]) {\n await fs.mkdir(path.join(this.outDir, d), { recursive: true });\n }\n log('Output directory structure created');\n\n this.cooking.update('Fetching SSR HTML...');\n log('Fetching SSR HTML from ' + this.siteUrl);\n try {\n const buf: Buffer = await dlBuffer(this.siteUrl);\n this.ssrHTML = buf.toString('utf-8');\n success('SSR HTML fetched (' + (this.ssrHTML.length / 1024).toFixed(1) + ' KB)');\n } catch (e) {\n log(chalk.red('Could not fetch SSR HTML: ' + (e as Error).message));\n }\n\n const htmlDetected = detectPlatform(this.siteUrl, this.ssrHTML);\n if (htmlDetected.name !== this.platform.name) {\n this.platform = htmlDetected;\n log('Platform refined: ' + chalk.hex('#D4A017')(this.platform.displayName) + ' (from HTML analysis)');\n }\n\n await launchAndCapture(this);\n\n if (includeSubpages && this.page) {\n await this.crawlSubpages();\n }\n\n await closeBrowser(this);\n\n this.cooking.update('Downloading assets...');\n await downloadAll(this);\n\n this.cooking.update('Building output...');\n await buildOutput(this);\n\n this.cooking.stop();\n setCooking(null);\n\n console.log('');\n success('Export complete!');\n await printSummary(this);\n }\n\n private async crawlSubpages(): Promise<void> {\n this.cooking?.update('Discovering sub-pages...');\n log('Scanning page for internal links...');\n\n const page = this.page!;\n const baseUrl = new URL(this.siteUrl);\n const baseHost = baseUrl.hostname.replace(/^www\\./, '');\n\n const links: string[] = await page.evaluate((host: string) => {\n const anchors = Array.from(document.querySelectorAll('a[href]'));\n const hrefs = new Set<string>();\n for (const a of anchors) {\n const href = (a as HTMLAnchorElement).href;\n if (!href || href.startsWith('javascript:') || href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('#')) continue;\n try {\n const u = new URL(href);\n const h = u.hostname.replace(/^www\\./, '');\n if (h === host && u.pathname !== '/' && u.pathname !== '' && !u.pathname.startsWith('/#')) {\n hrefs.add(href.split('#')[0]);\n }\n } catch {}\n }\n return Array.from(hrefs);\n }, baseHost);\n\n log('Found ' + links.length + ' sub-page links');\n const uniqueLinks = [...new Set(links)].slice(0, 50);\n\n if (uniqueLinks.length === 0) {\n log('No sub-pages to crawl');\n return;\n }\n\n for (let i = 0; i < uniqueLinks.length; i++) {\n const link = uniqueLinks[i];\n this.cooking?.update('Crawling sub-page ' + (i + 1) + '/' + uniqueLinks.length);\n try {\n const html = await captureSubpage(page, link, {\n needsHydrationCheck: this.platform.needsHydrationCheck,\n hydrationTimeout: this.platform.hydrationTimeout,\n });\n\n const slug = this.deriveSlug(link, baseUrl);\n const filename = slug + '.html';\n const filepath = path.join(this.outDir, 'subpages', filename);\n\n await fs.writeFile(filepath, html, 'utf-8');\n log(' Saved: subpages/' + filename);\n } catch (e) {\n log(' Skipped ' + link + ': ' + (e as Error).message);\n }\n }\n\n success('Sub-pages crawled: ' + uniqueLinks.length);\n }\n\n private deriveSlug(link: string, baseUrl: URL): string {\n try {\n const u = new URL(link);\n let pathname = u.pathname.replace(/\\/+$/, '').replace(/^\\//, '');\n if (!pathname) return 'index';\n return pathname.replace(/[^a-zA-Z0-9_-]/g, '_').replace(/_+/g, '_') || 'page';\n } catch {\n return 'page';\n }\n }\n}\n","import readline from 'node:readline';\nimport { stdin, stdout } from 'node:process';\nimport chalk from 'chalk';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nfunction stripAnsi(s: string): string {\n return s.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n}\n\nexport async function select(question: string, options: SelectOption[], defaultIndex: number = 0): Promise<string> {\n const isTTY = stdin.isTTY && stdout.isTTY;\n\n if (!isTTY) {\n return fallbackPrompt(question, options, defaultIndex);\n }\n\n return arrowSelect(question, options, defaultIndex);\n}\n\nasync function arrowSelect(question: string, options: SelectOption[], defaultIndex: number): Promise<string> {\n return new Promise((resolve) => {\n let selected: number = defaultIndex;\n\n const render = (initial: boolean = false): void => {\n if (!initial) {\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[J');\n }\n console.log(` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}`);\n for (let i = 0; i < options.length; i++) {\n if (i === selected) {\n console.log(` ${chalk.hex('#D4A017')('>')} ${chalk.white.bold(options[i].label)}`);\n } else {\n console.log(` ${chalk.gray(options[i].label)}`);\n }\n }\n };\n\n render(true);\n\n readline.emitKeypressEvents(stdin);\n stdin.setRawMode(true);\n\n const onKeypress = (_str: string | undefined, key: readline.Key): void => {\n if (!key) return;\n\n if (key.name === 'up' && selected > 0) {\n selected--;\n render();\n } else if (key.name === 'down' && selected < options.length - 1) {\n selected++;\n render();\n } else if (key.name === 'return') {\n stdin.setRawMode(false);\n stdin.removeListener('keypress', onKeypress);\n stdin.pause();\n\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[J');\n console.log(` ${chalk.green('✓')} ${chalk.white.bold(question)} ${chalk.hex('#D4A017')(stripAnsi(options[selected].label))}\\n`);\n\n resolve(options[selected].value);\n } else if ((key.ctrl && key.name === 'c') || key.name === 'escape') {\n stdin.setRawMode(false);\n stdin.removeListener('keypress', onKeypress);\n process.exit(0);\n }\n };\n\n stdin.resume();\n stdin.on('keypress', onKeypress);\n });\n}\n\nasync function fallbackPrompt(question: string, options: SelectOption[], defaultIndex: number): Promise<string> {\n return new Promise((resolve) => {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n\n console.log(` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}\\n`);\n for (let i = 0; i < options.length; i++) {\n const marker = i === defaultIndex ? chalk.green(' ★') : ' ';\n console.log(` ${chalk.gray(`[${i + 1}]`)}${marker} ${chalk.white(options[i].label)}`);\n }\n console.log('');\n const def = String(defaultIndex + 1);\n\n const ask = (): void => {\n rl.question(` ${chalk.hex('#D4A017')('>')} ${chalk.gray(`Choose [1-${options.length}] (${def})`)}: `, (answer) => {\n const trimmed = answer.trim();\n if (!trimmed) {\n rl.close();\n const label = stripAnsi(options[defaultIndex].label);\n console.log(` ${chalk.green('✓')} ${chalk.hex('#D4A017')(label)}\\n`);\n resolve(options[defaultIndex].value);\n return;\n }\n const idx = parseInt(trimmed, 10);\n if (idx >= 1 && idx <= options.length) {\n rl.close();\n const label = stripAnsi(options[idx - 1].label);\n console.log(` ${chalk.green('✓')} ${chalk.hex('#D4A017')(label)}\\n`);\n resolve(options[idx - 1].value);\n } else {\n console.log(` ${chalk.red('✗')} Enter 1-${options.length}\\n`);\n ask();\n }\n });\n };\n ask();\n });\n}\n","import readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\nimport path from 'node:path';\nimport { URL } from 'node:url';\nimport chalk from 'chalk';\nimport { showBanner } from './banner.js';\nimport { FramerExporter, deriveOutputName } from '../exporter/index.js';\nimport { detectPlatform } from '../platforms/index.js';\nimport { select } from './select.js';\nimport type { PlatformType } from '../platforms/types.js';\nimport { boxTop, boxLine, boxSep, boxBot, boxRow, maxWidth } from './box.js';\n\nfunction drawHeader(title: string): void {\n const w = maxWidth();\n if (w < 50) {\n console.log(`\\n ${chalk.hex('#D4A017')('●')} ${chalk.bold.white(title)}`);\n return;\n }\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' ' + title)));\n console.log(boxBot(w));\n console.log('');\n}\n\nexport async function runSetup(legacyMode: boolean = false): Promise<void> {\n showBanner();\n\n console.log(chalk.bold.white(' Welcome to Framer Export setup.\\n'));\n console.log(chalk.gray(' Supports Framer, Webflow, and Wix sites.\\n'));\n\n const rl = readline.createInterface({ input: stdin, output: stdout });\n\n const ask = async (question: string, defaultVal?: string): Promise<string> => {\n const suffix: string = defaultVal ? chalk.gray(` (${defaultVal})`) : '';\n const prompt: string = ` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}${suffix} ${chalk.gray('>')} `;\n const answer: string = await rl.question(prompt);\n return answer.trim() || defaultVal || '';\n };\n\n drawHeader('Step 1 : Site URL');\n\n let siteUrl = '';\n while (!siteUrl) {\n const input: string = await ask('Enter the site URL');\n try {\n new URL(input);\n siteUrl = input;\n } catch {\n console.log(` ${chalk.red('✗')} ${chalk.red('Invalid URL. Enter a valid URL (https://...)')}\\n`);\n }\n }\n console.log(` ${chalk.green('✓')} ${chalk.green('URL:')} ${chalk.underline(siteUrl)}\\n`);\n\n drawHeader('Step 2 : Platform');\n\n const detected = detectPlatform(siteUrl);\n let platformName: PlatformType;\n\n if (legacyMode) {\n console.log(` ${chalk.blue('i')} Auto-detected: ${chalk.hex('#D4A017')(detected.displayName)}`);\n const platformInput: string = await ask('Platform (framer/webflow/wix)', detected.name);\n platformName = (['framer', 'webflow', 'wix'].includes(platformInput)\n ? platformInput\n : detected.name) as PlatformType;\n console.log(` ${chalk.green('✓')} ${chalk.green('Platform:')} ${chalk.hex('#D4A017')(platformName)}\\n`);\n } else {\n rl.close();\n const platforms = [\n { label: `Framer${detected.name === 'framer' ? chalk.gray(' (detected)') : ''}`, value: 'framer' },\n { label: `Webflow${detected.name === 'webflow' ? chalk.gray(' (detected)') : ''}`, value: 'webflow' },\n { label: `Wix${detected.name === 'wix' ? chalk.gray(' (detected)') : ''}`, value: 'wix' },\n ];\n const defaultIdx = ['framer', 'webflow', 'wix'].indexOf(detected.name);\n platformName = await select('Select platform', platforms, Math.max(0, defaultIdx)) as PlatformType;\n }\n\n const rl2 = legacyMode ? rl : readline.createInterface({ input: stdin, output: stdout });\n\n const ask2 = async (question: string, defaultVal?: string): Promise<string> => {\n const suffix: string = defaultVal ? chalk.gray(` (${defaultVal})`) : '';\n const prompt: string = ` ${chalk.hex('#D4A017')('?')} ${chalk.white.bold(question)}${suffix} ${chalk.gray('>')} `;\n const answer: string = await rl2.question(prompt);\n return answer.trim() || defaultVal || '';\n };\n\n const derivedName: string = deriveOutputName(siteUrl, platformName);\n\n drawHeader('Step 3 : Output Directory');\n\n const outDir: string = await ask2('Output directory', './' + derivedName);\n console.log(` ${chalk.green('✓')} ${chalk.green('Output:')} ${chalk.yellow(outDir)}\\n`);\n\n drawHeader('Step 4 : Options');\n\n let prettyPrint: boolean;\n let concurrency: number;\n let includeSubpages: boolean;\n\n if (legacyMode) {\n const prettyAnswer: string = await ask2('Pretty-print JS files? (y/n)', 'y');\n prettyPrint = prettyAnswer.toLowerCase().startsWith('y');\n console.log(` ${chalk.green('✓')} Pretty-print: ${prettyPrint ? chalk.green('yes') : chalk.red('no')}\\n`);\n\n const subpagesAnswer: string = await ask2('Export sub-pages? (y/n)', 'n');\n includeSubpages = subpagesAnswer.toLowerCase().startsWith('y');\n console.log(` ${chalk.green('✓')} Sub-pages: ${includeSubpages ? chalk.green('yes') : chalk.red('no')}\\n`);\n\n const concurrencyAnswer: string = await ask2('Download concurrency', '12');\n concurrency = parseInt(concurrencyAnswer, 10) || 12;\n console.log(` ${chalk.green('✓')} Concurrency: ${chalk.yellow(String(concurrency))}\\n`);\n } else {\n rl2.close();\n const prettyVal = await select('Pretty-print JS files?', [\n { label: 'Yes', value: 'yes' },\n { label: 'No', value: 'no' },\n ]);\n prettyPrint = prettyVal === 'yes';\n\n const subpagesVal = await select('Export sub-pages?', [\n { label: 'No', value: 'no' },\n { label: 'Yes, crawl and export', value: 'yes' },\n ], 0);\n includeSubpages = subpagesVal === 'yes';\n\n const concurrencyVal = await select('Download concurrency', [\n { label: '6 (slow connection)', value: '6' },\n { label: '12 (default)', value: '12' },\n { label: '20 (fast connection)', value: '20' },\n ], 1);\n concurrency = parseInt(concurrencyVal, 10);\n }\n\n const w = maxWidth();\n const isSmall = w < 50;\n const G = chalk.hex('#C4953A');\n const B = chalk.hex('#8B6914');\n\n console.log('');\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, chalk.bold.white(' Summary')));\n } else {\n console.log(chalk.bold.white(' Summary:'));\n }\n\n for (const [label, value] of [\n ['URL', siteUrl],\n ['Platform', platformName],\n ['Output', path.resolve(outDir)],\n ['Pretty-print', prettyPrint ? 'yes' : 'no'],\n ['Sub-pages', includeSubpages ? 'yes' : 'no'],\n ['Concurrency', String(concurrency)],\n ]) {\n console.log(boxRow(w, label, value));\n }\n\n if (!isSmall) {\n console.log(boxBot(w));\n }\n console.log('');\n\n let startExport: boolean;\n\n if (legacyMode) {\n const confirm: string = await ask2('Start export? (y/n)', 'y');\n startExport = confirm.toLowerCase().startsWith('y');\n rl2.close();\n } else {\n const confirmVal = await select('Start export?', [\n { label: 'Yes, start now', value: 'yes' },\n { label: 'Cancel', value: 'no' },\n ]);\n startExport = confirmVal === 'yes';\n }\n\n if (!startExport) {\n console.log(`\\n ${chalk.yellow('Export cancelled.')}\\n`);\n return;\n }\n\n console.log('');\n\n const { CFG } = await import('../config/index.js');\n CFG.concurrency = concurrency;\n\n const exporter = new FramerExporter(siteUrl, path.resolve(outDir), platformName);\n exporter.prettyPrint = prettyPrint;\n await exporter.run(includeSubpages);\n}\n","import path from 'path';\nimport { URL } from 'url';\nimport pkg from '../../package.json';\nimport { showHelp } from './help.js';\nimport { showBanner } from './banner.js';\nimport { checkForUpdates } from './update-check.js';\nimport type { PlatformType } from '../platforms/types.js';\n\nconst VERSION = pkg.version;\n\nfunction extractFlag(args: string[], flag: string): string | null {\n const idx: number = args.indexOf(flag);\n if (idx === -1 || idx + 1 >= args.length) return null;\n const value: string = args[idx + 1];\n args.splice(idx, 2);\n return value;\n}\n\nfunction hasFlag(args: string[], flag: string): boolean {\n const idx: number = args.indexOf(flag);\n if (idx === -1) return false;\n args.splice(idx, 1);\n return true;\n}\n\nasync function main(): Promise<void> {\n const args: string[] = process.argv.slice(2);\n\n if (args.includes('--version') || args.includes('-v')) {\n console.log(VERSION);\n process.exit(0);\n }\n\n if (args.includes('--about')) {\n const chalk = (await import('chalk')).default;\n showBanner();\n console.log(` ${chalk.white.bold('Framer Export')} ${chalk.gray(`v${pkg.version}`)}`);\n console.log(` ${chalk.white(pkg.description)}\\n`);\n console.log(` ${chalk.white.bold('Author')} ${chalk.hex('#D4A017')('Dany (danbenba)')}`);\n console.log(` ${chalk.white.bold('Portfolio')} ${chalk.underline.hex('#D4A017')('https://github.com/danbenba')}`);\n console.log(` ${chalk.white.bold('GitHub')} ${chalk.underline.hex('#D4A017')(pkg.repository.url.replace('git+', '').replace('.git', ''))}`);\n console.log(` ${chalk.white.bold('npm')} ${chalk.underline.hex('#D4A017')(`https://www.npmjs.com/package/${pkg.name}`)}`);\n console.log(` ${chalk.white.bold('License')} ${chalk.green(pkg.license)}`);\n console.log(` ${chalk.white.bold('Node')} ${chalk.gray(`>=${pkg.engines.node}`)}`);\n console.log('');\n process.exit(0);\n }\n\n checkForUpdates(VERSION).then((latest) => {\n if (!latest) return;\n import('chalk').then((chalk) => {\n console.log('');\n console.log(\n ` ${chalk.default.yellow('↳')} Update available: ${chalk.default.gray(VERSION)} → ${chalk.default.green(latest)}`,\n );\n console.log(` ${chalk.default.hex('#D4A017')(' Run:')} ${chalk.default.hex('#B8860B')('npm i -g framer-export@latest')}`);\n console.log('');\n });\n });\n\n if (args.includes('--help') || args.includes('-h')) {\n showHelp();\n process.exit(0);\n }\n\n if (args.includes('--setup')) {\n hasFlag(args, '--setup');\n const legacyMode: boolean = hasFlag(args, '--legacy-mode');\n const { runSetup } = await import('./setup.js');\n await runSetup(legacyMode);\n return;\n }\n\n if (!args.length) {\n const { runSetup } = await import('./setup.js');\n await runSetup(false);\n return;\n }\n\n const platformOverride = extractFlag(args, '--platform') as PlatformType | null;\n const includeSubpages: boolean = hasFlag(args, '--subpages');\n\n showBanner();\n\n const url: string = args[0];\n\n try {\n new URL(url);\n } catch {\n const chalk = (await import('chalk')).default;\n console.log(` ${chalk.red('✗')} ${chalk.red.bold('Invalid URL:')} ${chalk.white(url)}`);\n console.log(` ${chalk.gray('Expected: https://yoursite.framer.app')}\\n`);\n process.exit(1);\n }\n\n const { FramerExporter, deriveOutputName } = await import('../exporter/index.js');\n const { detectPlatform } = await import('../platforms/index.js');\n\n const detected = platformOverride || detectPlatform(url).name;\n const defaultDir: string = deriveOutputName(url, detected as PlatformType);\n const out: string = args[1] || `./${defaultDir}`;\n\n try {\n await new FramerExporter(url, path.resolve(out), platformOverride || undefined).run(includeSubpages);\n } catch (e) {\n const chalk = (await import('chalk')).default;\n console.log(`\\n ${chalk.red('✗')} ${chalk.red.bold('FAILED:')} ${chalk.white((e as Error).message)}`);\n console.log(chalk.gray((e as Error).stack || ''));\n process.exit(1);\n }\n}\n\nmain();\n","import chalk from 'chalk';\nimport { showBanner } from './banner.js';\n\nexport function showHelp(): void {\n showBanner();\n\n console.log(chalk.white.bold(' USAGE\\n'));\n console.log(` ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('<url>')} ${chalk.gray('[output-dir]')}`);\n console.log(` ${chalk.hex('#D4A017')('fexport')} ${chalk.yellow('<url>')} ${chalk.gray('[output-dir]')}`);\n\n console.log('');\n console.log(chalk.white.bold(' OPTIONS\\n'));\n\n const opts: Array<[string, string]> = [\n ['--setup', 'Launch the interactive setup assistant'],\n ['--platform <p>', 'Force platform: framer, webflow, wix'],\n ['--subpages', 'Crawl and export sub-pages'],\n ['--legacy-mode', 'Use text input instead of arrow selection'],\n ['--help, -h', 'Show this help message'],\n ];\n\n for (const [flag, desc] of opts) {\n console.log(` ${chalk.green(flag.padEnd(18))} ${chalk.white(desc)}`);\n }\n\n console.log('');\n console.log(chalk.white.bold(' SUPPORTED PLATFORMS\\n'));\n\n const platforms: Array<[string, string]> = [\n ['Framer', 'Auto-detected via .framer.app / .framer.website URLs'],\n ['Webflow', 'Auto-detected via .webflow.io URLs'],\n ['Wix', 'Auto-detected via .wixsite.com URLs + HTML analysis'],\n ];\n\n for (const [name, desc] of platforms) {\n console.log(` ${chalk.hex('#D4A017')(name.padEnd(12))} ${chalk.gray(desc)}`);\n }\n\n console.log('');\n console.log(chalk.white.bold(' EXAMPLES\\n'));\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('https://mysite.framer.app')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('https://mysite.webflow.io')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.yellow('https://user.wixsite.com/my-site')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--platform webflow')} ${chalk.yellow('https://custom.com')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--subpages')} ${chalk.yellow('https://mysite.com')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--setup')}`);\n console.log(` ${chalk.gray('$')} ${chalk.hex('#D4A017')('framer-export')} ${chalk.green('--setup --legacy-mode')}`);\n console.log('');\n}\n","import https from 'https';\n\nexport async function checkForUpdates(currentVersion: string): Promise<string | null> {\n return new Promise((resolve) => {\n const req = https.get(\n 'https://registry.npmjs.org/framer-export/latest',\n { timeout: 3000 },\n (res) => {\n let data = '';\n res.on('data', (chunk) => (data += chunk));\n res.on('end', () => {\n try {\n const json = JSON.parse(data);\n const latest = json.version;\n if (!latest) return resolve(null);\n if (latest !== currentVersion) return resolve(latest);\n resolve(null);\n } catch {\n resolve(null);\n }\n });\n },\n );\n req.on('error', () => resolve(null));\n req.on('timeout', () => {\n req.destroy();\n resolve(null);\n });\n });\n}\n"],"mappings":"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","names":["URL","https","URL","chalk","FONT_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","path","init_download","fs","path","chalk","fs","path","chalk","G","G2","chalk","fs","path","chalk","init_download","chalk","stripAnsi","readline","stdin","stdout","path","URL","chalk","G","B","CFG","path","URL","chalk","chalk","runSetup","URL","FramerExporter","deriveOutputName","detectPlatform","path"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "framer-export",
3
- "version": "4.3.2",
3
+ "version": "4.3.7",
4
4
  "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.",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",