framer-export 5.0.0-beta.3 → 5.0.2
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/CHANGELOG.md +47 -0
- package/README.md +129 -16
- package/assets/provider-icons/SOURCES.md +41 -0
- package/bin/fexport.js +0 -0
- package/bin/framer-export.js +0 -0
- package/bin/framerexport.js +0 -0
- package/dist/cli/index.js +1154 -7052
- package/package.json +22 -8
- package/dist/cli/index.js.map +0 -1
package/dist/cli/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../package.json","../../src/cli/theme.ts","../../src/cli/banner.ts","../../src/platforms/framer.ts","../../src/platforms/webflow.ts","../../src/platforms/wix.ts","../../src/platforms/builder/bubble.ts","../../src/platforms/builder/carrd.ts","../../src/platforms/builder/duda.ts","../../src/platforms/builder/squarespace.ts","../../src/platforms/builder/strikingly.ts","../../src/platforms/builder/tilda.ts","../../src/platforms/builder/weebly.ts","../../src/platforms/landing/clickfunnels.ts","../../src/platforms/landing/elementor.ts","../../src/platforms/landing/instapage.ts","../../src/platforms/landing/systemeio.ts","../../src/platforms/landing/unbounce.ts","../../src/platforms/cms/ghost.ts","../../src/platforms/cms/notion.ts","../../src/platforms/cms/wordpress.ts","../../src/platforms/course/kajabi.ts","../../src/platforms/course/podia.ts","../../src/platforms/course/teachable.ts","../../src/platforms/course/thinkific.ts","../../src/platforms/ecommerce/gumroad.ts","../../src/platforms/ecommerce/shopify.ts","../../src/platforms/ai/gamma.ts","../../src/platforms/registry.ts","../../src/platforms/detect.ts","../../src/platforms/index.ts","../../src/cli/cooking.ts","../../src/cli/input.ts","../../src/cli/box.ts","../../src/cli/backdrop.ts","../../src/cli/select.ts","../../src/ui/page.ts","../../src/ui/app-js.ts","../../src/ui/pixel-blast.ts","../../src/assets/asset-map.ts","../../src/config/index.ts","../../src/network/download.ts","../../src/logger/index.ts","../../src/exporter/progress.ts","../../src/cli/sidebar.ts","../../src/exporter/anti-bot.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/exporter/summary.ts","../../src/ai/prompt-assistant.ts","../../src/exporter/index.ts","../../src/ui/server.ts","../../src/cli/select-grouped.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\": \"5.0.0-beta.3\",\n \"description\": \"Export 25+ website platforms (Framer, Webflow, Wix, Shopify, Notion, WordPress, Squarespace, Ghost, and more) 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 \"test\": \"node --import tsx --test tests/unit/*.test.ts\",\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 \"shopify\",\n \"notion\",\n \"wordpress\",\n \"squarespace\",\n \"ghost\",\n \"carrd\",\n \"bubble\",\n \"gumroad\",\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 \"prettier\": \"^3.2.0\",\n \"puppeteer\": \"^22.0.0\"\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';\n\nexport const THEME = {\n background: '#0A0A0A',\n panel: '#141414',\n element: '#1E1E1E',\n border: '#484848',\n borderActive: '#606060',\n text: '#EEEEEE',\n muted: '#808080',\n primary: '#FAB283',\n primarySoft: '#FFC09F',\n secondary: '#5C9CF5',\n accent: '#9D7CD8',\n success: '#7FD88F',\n warning: '#F5A742',\n error: '#E06C75',\n info: '#56B6C2',\n};\n\nexport const ui = {\n text: chalk.hex(THEME.text),\n muted: chalk.hex(THEME.muted),\n primary: chalk.hex(THEME.primary),\n primarySoft: chalk.hex(THEME.primarySoft),\n secondary: chalk.hex(THEME.secondary),\n accent: chalk.hex(THEME.accent),\n success: chalk.hex(THEME.success),\n warning: chalk.hex(THEME.warning),\n error: chalk.hex(THEME.error),\n info: chalk.hex(THEME.info),\n border: chalk.hex(THEME.border),\n borderActive: chalk.hex(THEME.borderActive),\n panel: chalk.hex(THEME.panel),\n};\n\nexport function stripAnsi(s: string): string {\n return s.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n}\n\nexport function softGradient(text: string): string {\n const colors = [THEME.primary, THEME.primarySoft, THEME.text, THEME.primarySoft, THEME.primary];\n let cursor = 0;\n return text\n .split('')\n .map((char) => {\n if (char === ' ') return char;\n const color = colors[cursor % colors.length];\n cursor++;\n return chalk.hex(color).bold(char);\n })\n .join('');\n}\n\nexport function chip(label: string): string {\n return `${ui.border('[')}${ui.primary(label)}${ui.border(']')}`;\n}\n\nexport function bullet(label: string = '•'): string {\n return ui.primary(label);\n}\n\nexport function centerText(text: string, width: number): string {\n const visible = stripAnsi(text).length;\n if (visible >= width) return text;\n const left = Math.floor((width - visible) / 2);\n return ' '.repeat(left) + text + ' '.repeat(width - visible - left);\n}\n\nexport function truncatePlain(text: string, max: number): string {\n if (text.length <= max) return text;\n return text.slice(0, Math.max(0, max - 2)) + '..';\n}\n","import pkg from '../../package.json';\nimport { chip, softGradient, ui } from './theme.js';\n\nfunction getWidth(): number {\n return process.stdout.columns || 80;\n}\n\nconst ASCII_ART = [\n '███████╗██████╗ █████╗ ███╗ ███╗███████╗██████╗ ',\n '██╔════╝██╔══██╗██╔══██╗████╗ ████║██╔════╝██╔══██╗',\n '█████╗ ██████╔╝███████║██╔████╔██║█████╗ ██████╔╝',\n '██╔══╝ ██╔══██╗██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗',\n '██║ ██║ ██║██║ ██║██║ ╚═╝ ██║███████╗██║ ██║',\n '╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝',\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 `\\n ${ui.primary.bold('f-export')} ${ui.muted(`v${pkg.version}`)} ${chip('beta ui')}`\n );\n console.log(` ${ui.text.bold('Framer Export')} ${ui.muted('25+ platforms · local mirror')}\\n`);\n return;\n }\n\n console.log('');\n ASCII_ART.forEach((line) => {\n console.log(' ' + softGradient(line));\n });\n console.log('');\n console.log(\n ` ${ui.muted(`v${pkg.version}`)} ${ui.text.bold('Framer Export')} ${chip('fexport')} ${ui.muted('local mirror exporter')}`\n );\n console.log(\n ` ${ui.muted('Framer')} ${ui.border('/')} ${ui.muted('Webflow')} ${ui.border('/')} ${ui.muted('Wix')} ${ui.border('/')} ${ui.muted('+22 more')} ${ui.border('·')} ${ui.primary('clean assets')} ${ui.border('·')} ${ui.secondary('local serve')}\\n`\n );\n}\n","import type { PlatformHandler } from './types.js';\nconst FONT_EXTS: string[] = ['.woff2', '.woff', '.ttf', '.otf'];\nexport const framer: PlatformHandler = {\n name: 'framer',\n displayName: 'Framer',\n category: 'builder',\n priority: 95,\n detectByUrl(url: string): boolean {\n return /\\.framer\\.(app|website)|framercanvas\\.com/.test(url);\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 stripDomains: ['events.framer.com', 'api.framer.com', 'collect.frameranalytics.com'],\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 stripPatterns: [\n /<div id=\"__framer-badge-container\"[^>]*><\\/div>/g,\n /<script>try\\{if\\(localStorage\\.getItem\\(\"__framer_force_showing_editorbar_since\"\\)\\)[^<]*<\\/script>/g,\n ],\n hydrationTimeout: 10000,\n needsHydrationCheck: true,\n skipAssetUrls: [\n /^https:\\/\\/(?:www\\.)?framer\\.com\\/edit(?:[/?]|$)/,\n /^https:\\/\\/(?:[^/]+\\.)*(?:framer\\.com|framerstatic\\.com|framerusercontent\\.com|framercanvas\\.com)\\/[^?]*\\/init\\.mjs(?:\\?|$)/,\n /^https:\\/\\/(?:[^/]+\\.)*(?:framer\\.com|framerstatic\\.com|framerusercontent\\.com|framercanvas\\.com)\\/[^?]*\\/editorbar\\.[^/]*\\.mjs(?:\\?|$)/,\n /^https:\\/\\/(?:[^/]+\\.)*(?:framer\\.com|framerstatic\\.com|framerusercontent\\.com|framercanvas\\.com)\\/[^?]*\\/EditButton-[^/]*\\.mjs(?:\\?|$)/,\n ],\n lazyChunkDirs: ['scripts/vendor', 'scripts/modules'],\n rewritePatterns: [\n {\n from: /https:\\/\\/(?:www\\.)?framer\\.com\\/edit\\/init\\.mjs/g,\n to: 'data:text/javascript,export%20const%20createEditorBar=()=>()=>null',\n },\n {\n from: /\\(function\\(\\)\\{[\\w$]+&&[\\w$]+\\(\\(\\)=>\\{[\\s\\S]{0,200}?__framer-badge-container[\\s\\S]{0,300}?\\}\\)\\}\\)\\(\\)/g,\n to: '',\n },\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 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 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 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 category: 'builder',\n priority: 90,\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 category: 'builder',\n priority: 88,\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: [/<div[^>]*class=\"[^\"]*wix-ads[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/g],\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 } from '../types.js';\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'];\nexport const bubble: PlatformHandler = {\n name: 'bubble',\n displayName: 'Bubble',\n category: 'builder',\n priority: 85,\n detectByUrl(url: string): boolean {\n return /\\.bubbleapps\\.io/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('window.appquery = make_proxy(') ||\n html.includes('window._bubble_page_load_data') ||\n html.includes('window.bubble_session_uid') ||\n html.includes('/package/pre_run_jquery_js/')\n );\n },\n stripDomains: ['pluginpul.se'],\n stripSelectors: ['script[src*=\"pluginpul.se\"]'],\n stripPatterns: [\n /<a\\b[^>]*href=\"https?:\\/\\/(?:www\\.)?bubble\\.io\\/?(?:\\?[^\"]*)?\"[^>]*>[\\s\\S]*?<\\/a>/gi,\n ],\n needsHydrationCheck: true,\n hydrationTimeout: 8000,\n hydrationSelector: '#main-page',\n captureRenderedDom: true,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('meta-fonts.cdn.bubble.io')) {\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n if (host.includes('cdn.bubble.io')) {\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' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (\n host.includes('d3dqmih97rcqmh.cloudfront.net') ||\n host.includes('d1muf25xaso8hp.cloudfront.net')\n ) {\n if (ext === '.js' || ext === '.mjs') 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 if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const carrd: PlatformHandler = {\n name: 'carrd',\n displayName: 'Carrd',\n category: 'builder',\n priority: 85,\n detectByUrl(url: string): boolean {\n return /\\.carrd\\.co/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes(\"$inner = $('.inner')\") ||\n html.includes('href=\"https://carrd.co\"') ||\n /class=\"[^\"]*\\b(?:text|image|container|buttons|icons|divider|links)-component\\b/.test(html) ||\n (html.includes('class=\"site-wrapper\"') && html.includes('class=\"site-main\"'))\n );\n },\n stripDomains: [],\n stripSelectors: ['#credits'],\n stripPatterns: [\n /<p[^>]*id=\"credits\"[^>]*>[\\s\\S]*?<\\/p>/gi,\n /<a[^>]*href=\"https:\\/\\/carrd\\.co\"[^>]*>\\s*\\(\\s*Made with Carrd\\s*\\)\\s*<\\/a>/gi,\n ],\n hydrationTimeout: 2000,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('fonts.googleapis.com')) {\n return 'styles';\n }\n if (host.includes('carrd.co')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/assets/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (pathname.includes('/assets/css/') || ext === '.css') return 'styles';\n if (pathname.includes('/assets/js/') || ext === '.js' || ext === '.mjs')\n return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const duda: PlatformHandler = {\n name: 'duda',\n displayName: 'Duda',\n category: 'builder',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.(?:multiscreensite|dudaone)\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes(\"atob('RFVEQU9ORQ==')\") ||\n html.includes('id=\"dmRoot\"') ||\n html.includes('DM_DIRECT') ||\n html.includes('d_track_campaign')\n );\n },\n stripDomains: [],\n stripSelectors: ['#d_track_campaign', '#d_track_personalization', '#d_track_sp'],\n stripPatterns: [/<a[^>]*href=\"[^\"]*duda\\.co\\/inspiration[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n const isCdnWebsite = host.endsWith('.cdn-website.com');\n const isMsCdn = host === 'ms-cdn.multiscreensite.com' || host === 'irp-cdn.multiscreensite.com';\n if (!isCdnWebsite && !isMsCdn) return null;\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n const isResizeProxy = host.startsWith('irp') || host.startsWith('lirp');\n return isResizeProxy ? 'assets/images' : 'assets/misc';\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nconst STATIC_EDGE_RE = /^static\\d+\\.squarespace\\.com$/i;\nexport const squarespace: PlatformHandler = {\n name: 'squarespace',\n displayName: 'Squarespace',\n category: 'builder',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.squarespace\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('<!-- This is Squarespace. -->') ||\n html.includes('Static.SQUARESPACE_CONTEXT') ||\n html.includes('<!-- End of Squarespace Headers -->') ||\n html.includes('images.squarespace-cdn.com')\n );\n },\n stripDomains: [],\n stripSelectors: [],\n stripPatterns: [],\n hydrationTimeout: 3000,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('images.squarespace-cdn.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/images';\n }\n if (host.includes('file.squarespace-cdn.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (host.includes('assets.squarespace.com') || STATIC_EDGE_RE.test(host)) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n return 'assets/misc';\n }\n if (host.includes('definitions.sqspcdn.com')) {\n if (ext === '.json') return 'data';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const strikingly: PlatformHandler = {\n name: 'strikingly',\n displayName: 'Strikingly',\n category: 'builder',\n priority: 85,\n detectByUrl(url: string): boolean {\n return /\\.mystrikingly\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('strikingly-host-suffix') ||\n html.includes('data-hypernova-key=\"SiteBootstrapper\"') ||\n html.includes('id=\"s-page-client-container\"') ||\n html.includes('strikinglycdn.com')\n );\n },\n stripDomains: [\n 'google-analytics.com',\n 'www.google-analytics.com',\n 'notify.bugsnag.com',\n 'sessions.bugsnag.com',\n ],\n stripSelectors: ['.show-strikingly-logo'],\n stripPatterns: [/<a[^>]*href=\"[^\"]*strikingly\\.com\\/\\?ref=logo[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/gi],\n hydrationTimeout: 3000,\n needsHydrationCheck: false,\n hydrationSelector: '#s-page-client-container',\n captureRenderedDom: true,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('strikinglycdn.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (host.includes('static-fonts-css')) {\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n }\n if (host.includes('static-assets')) {\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n return 'assets/misc';\n }\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n if (host.includes('cdnjs.cloudflare.com')) {\n if (ext === '.js' || ext === '.mjs') 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 return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const tilda: PlatformHandler = {\n name: 'tilda',\n displayName: 'Tilda',\n category: 'builder',\n priority: 80,\n detectByUrl(url: string): boolean {\n return /\\.tilda\\.ws/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('data-tilda-project-id') ||\n html.includes('data-tilda-page-id') ||\n html.includes('tildacdn') ||\n html.includes('id=\"allrecords\"')\n );\n },\n stripDomains: ['www.google-analytics.com', 'google-analytics.com'],\n stripSelectors: ['#tildacopy', '.t-tildalabel', 'script[src*=\"tilda-stat\"]'],\n stripPatterns: [/<a[^>]*href=\"[^\"]*tilda\\.cc[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('tildacdn')) {\n if (host.startsWith('thb.')) return 'assets/images';\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (ext === '.css' || pathname.includes('/css/')) return 'styles';\n if (ext === '.js' || ext === '.mjs' || pathname.includes('/js/')) return 'scripts/vendor';\n if (FONT_EXTS.includes(ext) || pathname.includes('/fonts/')) return 'assets/fonts';\n if (ext === '.json') return 'data';\n if (\n IMG_EXTS.includes(ext) ||\n pathname.includes('/img/') ||\n pathname.includes('/images/') ||\n pathname.includes('/tild')\n ) {\n return 'assets/images';\n }\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const weebly: PlatformHandler = {\n name: 'weebly',\n displayName: 'Weebly',\n category: 'builder',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.weebly\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('Weebly.footer.setupContainer') ||\n html.includes('weebly-footer-signup-container-v3') ||\n html.includes('wsite-content') ||\n html.includes('window._W')\n );\n },\n stripDomains: ['google-analytics.com'],\n stripSelectors: ['#weebly-footer-signup-container-v3', 'script[src*=\"footerSignup.js\"]'],\n stripPatterns: [/<a[^>]*href=\"[^\"]*weebly\\.com\\/signup[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('editmysite.com')) {\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' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const clickfunnels: PlatformHandler = {\n name: 'clickfunnels',\n displayName: 'ClickFunnels (2.0 / \"CF2\")',\n category: 'landing',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.myclickfunnels\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('cf-head-scripts') ||\n html.includes('window.cfRootDomain') ||\n html.includes('cf-lander-serialized-custom-fonts') ||\n html.includes('data-page-element')\n );\n },\n stripDomains: ['bam.nr-data.net', 'js-agent.newrelic.com', 'events.myclickfunnels.com'],\n stripSelectors: [],\n stripPatterns: [],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('statics.myclickfunnels.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/image/') || pathname.includes('/images/') || IMG_EXTS.includes(ext))\n return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n if (host.includes('images.clickfunnels.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/images';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const elementor: PlatformHandler = {\n name: 'elementor',\n displayName: 'Elementor',\n category: 'landing',\n priority: 42,\n detectByUrl(url: string): boolean {\n return /\\.elementor\\.cloud/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('/wp-content/plugins/elementor/') ||\n html.includes('elementor-kit-') ||\n html.includes('data-elementor-type=') ||\n html.includes('elementorFrontendConfig')\n );\n },\n detectGenerator: /^Elementor\\s+\\d+\\.\\d+/i,\n stripDomains: [],\n stripSelectors: [],\n stripPatterns: [],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (!pathname.includes('/wp-content/') && !pathname.includes('/wp-includes/')) {\n return null;\n }\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const instapage: PlatformHandler = {\n name: 'instapage',\n displayName: 'Instapage',\n category: 'landing',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.(?:pagedemo|pageserve)\\.co/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('instapageSp') ||\n html.includes('_instapageSnowplow') ||\n html.includes('anthill.instapage.com') ||\n html.includes('pageserver.page2')\n );\n },\n stripDomains: [\n 'anthill.instapage.com',\n 'cdn.instapagemetrics.com',\n 'heatmap-events-collector.instapage.com',\n 'heatmap.services',\n ],\n stripSelectors: [\n 'script[src*=\"instapagemetrics.com\"]',\n 'script[src*=\"anthill.instapage.com\"]',\n 'script[src*=\"heatmap.services\"]',\n ],\n stripPatterns: [/<iframe[^>]*d3mwhxgzltpnyp\\.cloudfront\\.net[^>]*>[\\s\\S]*?<\\/iframe>/g],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('fastcdn.co')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext) || pathname.includes('/u/')) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (host.includes('d3mwhxgzltpnyp.cloudfront.net')) {\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (ext === '.css') return 'styles';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const systemeio: PlatformHandler = {\n name: 'systemeio',\n displayName: 'Systeme.io',\n category: 'landing',\n priority: 80,\n detectByUrl(url: string): boolean {\n return /\\.systeme\\.io/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('<!-- Created with https://systeme.io -->') ||\n html.includes('d3fit27i5nzkqh.cloudfront.net') ||\n html.includes('systeme.io/?sa=') ||\n html.includes('d3syewzhvzylbl.cloudfront.net')\n );\n },\n stripDomains: ['log.systeme.io'],\n stripSelectors: ['script[src*=\"log.systeme.io\"]'],\n stripPatterns: [\n /<a[^>]*href=\"[^\"]*systeme\\.io\\/\\?sa=[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n /<!--\\s*Created with https:\\/\\/systeme\\.io\\s*-->/g,\n ],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('d3fit27i5nzkqh.cloudfront.net')) {\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (host.includes('d3syewzhvzylbl.cloudfront.net')) {\n if (FONT_EXTS.includes(ext) || pathname.includes('/fonts/')) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n if (host.includes('d1yei2z3i6k35z.cloudfront.net')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n if (host.includes('d2543nuuc0wvdg.cloudfront.net')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const unbounce: PlatformHandler = {\n name: 'unbounce',\n displayName: 'Unbounce',\n category: 'landing',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.(?:unbouncepages|ubpages)\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('lp-pom-root') ||\n html.includes('window.ub.page') ||\n html.includes('builder-assets.unbounce.com') ||\n html.includes('ubembed.com')\n );\n },\n stripDomains: [],\n stripSelectors: [],\n stripPatterns: [/<a[^>]*href=\"https?:\\/\\/(?:www\\.)?unbounce\\.com[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/gi],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('builder-assets.unbounce.com') || host.includes('assets.unbounce.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext) || pathname.includes('/lp-image')) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (host.includes('ubembed.com')) {\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n if (host.includes('cloudfront.net')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const ghost: PlatformHandler = {\n name: 'ghost',\n displayName: 'Ghost',\n category: 'cms',\n priority: 78,\n detectByUrl(url: string): boolean {\n return /\\.ghost\\.io/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('/assets/built/screen.css') ||\n html.includes('/public/cards.min.css') ||\n html.includes('cdn.jsdelivr.net/ghost/') ||\n html.includes('gh-powered-by')\n );\n },\n detectGenerator: /Ghost [0-9.]+/i,\n stripDomains: [],\n stripSelectors: [],\n stripPatterns: [\n /<div[^>]*class=\"[^\"]*gh-powered-by[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/g,\n /<a[^>]*href=\"[^\"]*ghost\\.org[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n /<meta[^>]*name=\"generator\"[^>]*content=\"Ghost[^\"]*\"[^>]*>/gi,\n ],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n scrollStrategy: 'paginated',\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('storage.ghost.io')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n if (host.includes('cdn.jsdelivr.net')) {\n if (ext === '.js' || ext === '.mjs') 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 return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const notion: PlatformHandler = {\n name: 'notion',\n displayName: 'Notion (Notion Sites)',\n category: 'cms',\n priority: 85,\n detectByUrl(url: string): boolean {\n return /\\.notion\\.site/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('data-notion-html=\"web\"') ||\n html.includes('id=\"notion-app\"') ||\n html.includes('__notion_html_async') ||\n html.includes('window.__notion_boot_data')\n );\n },\n stripDomains: ['http-inputs-notion.splunkcloud.com'],\n stripSelectors: ['#initial-loading-spinner', '#skeleton', '#skeleton-sidebar'],\n stripPatterns: [\n /<a[^>]*href=\"[^\"]*notion\\.(so|com)[^\"]*\"[^>]*>[\\s\\S]*?Built with Notion[\\s\\S]*?<\\/a>/gi,\n ],\n hydrationTimeout: 8000,\n needsHydrationCheck: true,\n hydrationSelector: '#notion-app',\n captureRenderedDom: true,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('img.notionusercontent.com') || host.includes('app.notion.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext) || pathname.includes('/image')) return 'assets/images';\n return 'assets/images';\n }\n if (\n host.includes('prod-files-secure.s3.us-west-2.amazonaws.com') ||\n host === 's3.us-west-2.amazonaws.com'\n ) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n if (host.includes('www.notion.so') || host.includes('notion.so')) {\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const wordpress: PlatformHandler = {\n name: 'wordpress',\n displayName: 'WordPress',\n category: 'cms',\n priority: 40,\n detectByUrl(url: string): boolean {\n return /\\.wordpress\\.com|\\/wp-(content|includes|json)\\//i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('/wp-includes/') ||\n html.includes('/wp-content/') ||\n html.includes('api.w.org') ||\n html.includes('_wpemojiSettings')\n );\n },\n detectGenerator: /WordPress/i,\n stripDomains: ['stats.wp.com', 'pixel.wp.com'],\n stripSelectors: ['script[src*=\"stats.wp.com\"]', 'script[src*=\"pixel.wp.com\"]'],\n stripPatterns: [\n /<meta[^>]*name=[\"']generator[\"'][^>]*content=[\"'][^\"']*WordPress[^\"']*[\"'][^>]*>/gi,\n ],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('i0.wp.com') || host.includes('i1.wp.com') || host.includes('i2.wp.com')) {\n return 'assets/images';\n }\n if (host.includes('gravatar.com')) {\n return 'assets/images';\n }\n if (host.includes('fonts.wp.com')) {\n if (ext === '.css') return 'styles';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/fonts';\n }\n if (\n host.includes('s0.wp.com') ||\n host.includes('s1.wp.com') ||\n host.includes('s2.wp.com') ||\n host.includes('c0.wp.com') ||\n host.includes('s.w.org')\n ) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const kajabi: PlatformHandler = {\n name: 'kajabi',\n displayName: 'Kajabi',\n category: 'course',\n priority: 85,\n detectByUrl(url: string): boolean {\n return /\\.mykajabi\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('var Kajabi = Kajabi') ||\n html.includes('Kajabi.currentSiteUser') ||\n html.includes('kjb-settings-id=') ||\n html.includes('kajabi-cdn.com')\n );\n },\n stripDomains: ['rs-dp.kajabi.com', 'cdn.rudderlabs.com'],\n stripSelectors: ['.footer__powered-by'],\n stripPatterns: [\n /<div[^>]*class=\"[^\"]*footer__powered-by[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/g,\n /<a[^>]*href=\"[^\"]*app\\.kajabi\\.com\\/r\\/[^\"]*powered_by=true[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n ],\n hydrationTimeout: 2000,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('kajabi-cdn.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' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const podia: PlatformHandler = {\n name: 'podia',\n displayName: 'Podia',\n category: 'course',\n priority: 80,\n detectByUrl(url: string): boolean {\n return /\\.podia\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('0x4AAAAAAAJ5kwYW6AH1ybLx') ||\n html.includes('cdn.podia.com') ||\n html.includes('data-react-component=\"creator_ui/section_adapters/') ||\n html.includes('data-controller=\"editor--page-section\"')\n );\n },\n stripDomains: ['www.googletagmanager.com'],\n stripSelectors: ['script[src*=\"googletagmanager.com\"]'],\n stripPatterns: [\n /<a[^>]*href=['\"][^'\"]*podia\\.com[^'\"]*utm_medium=poweredby[^'\"]*['\"][^>]*>[\\s\\S]*?<\\/a>/gi,\n ],\n hydrationTimeout: 4000,\n needsHydrationCheck: true,\n hydrationSelector: '.react-page-section',\n captureRenderedDom: true,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('cdn.podia.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (IMG_EXTS.includes(ext) || pathname.includes('/images/')) return 'assets/images';\n return 'assets/misc';\n }\n if (host.includes('.podia.com') && pathname.includes('/content-assets/')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const teachable: PlatformHandler = {\n name: 'teachable',\n displayName: 'Teachable',\n category: 'course',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.teachable\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('teachablecdn.com') ||\n html.includes('eventable.internal.teachable.com') ||\n html.includes('Teach Online with') ||\n html.includes('src=school_footer')\n );\n },\n stripDomains: [\n 'cdn.heapanalytics.com',\n 'bam.nr-data.net',\n 'www.recaptcha.net',\n 'fast.wistia.com',\n ],\n stripSelectors: ['script[src*=\"heapanalytics.com\"]', 'script[src*=\"nr-data.net\"]'],\n stripPatterns: [\n /<a[^>]*class=['\"][^'\"]*powered-by[^'\"]*['\"][^>]*>[\\s\\S]*?<\\/a>/gi,\n /<a[^>]*href=['\"][^'\"]*teachable\\.com[^'\"]*src=school_footer[^'\"]*['\"][^>]*>[\\s\\S]*?<\\/a>/gi,\n ],\n hydrationTimeout: 0,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('teachablecdn.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (ext === '.json') return 'data';\n if (pathname.includes('/images/')) return 'assets/images';\n if (pathname.includes('/packs/')) return 'scripts/vendor';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const thinkific: PlatformHandler = {\n name: 'thinkific',\n displayName: 'Thinkific',\n category: 'course',\n priority: 82,\n detectByUrl(url: string): boolean {\n return /\\.thinkific\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('window.Thinkific') ||\n html.includes('assets.thinkific.com') ||\n html.includes('cdn.thinkific.com') ||\n html.includes('thnc.current_user-initialized')\n );\n },\n stripDomains: ['fast.wistia.net', 'www.google.com'],\n stripSelectors: [],\n stripPatterns: [\n /<div[^>]*class=\"[^\"]*footer__white-label[^\"]*\"[^>]*>[\\s\\S]*?<\\/div>/g,\n /<a[^>]*href=\"[^\"]*thinkific\\.com[^\"]*utm_medium=powered-by[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/g,\n ],\n hydrationTimeout: 2000,\n needsHydrationCheck: false,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('thinkific.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' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (host.includes('s3.amazonaws.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const gumroad: PlatformHandler = {\n name: 'gumroad',\n displayName: 'Gumroad',\n category: 'ecommerce',\n priority: 80,\n detectByUrl(url: string): boolean {\n return /\\.gumroad\\.com|\\bgum\\.co\\b/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('cable.gumroad.com') ||\n html.includes('assets.gumroad.com') ||\n html.includes('ns/fb/gumroad#') ||\n html.includes('gumroad:product')\n );\n },\n stripDomains: [\n 'gumroad-analytics.com',\n 'www.googletagmanager.com',\n 'connect.facebook.net',\n 'analytics.tiktok.com',\n ],\n stripSelectors: [\n 'script[src*=\"gumroad-analytics.com\"]',\n 'script[src*=\"googletagmanager.com\"]',\n 'script[src*=\"connect.facebook.net\"]',\n 'script[src*=\"analytics.tiktok.com\"]',\n ],\n stripPatterns: [],\n hydrationTimeout: 8000,\n needsHydrationCheck: true,\n hydrationSelector: '#app',\n captureRenderedDom: true,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (\n host.includes('assets.gumroad.com') ||\n host.includes('public-files.gumroad.com') ||\n host.includes('static-2.gumroad.com')\n ) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (pathname.includes('/fonts/') || FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (pathname.includes('/stylesheets/') || ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (pathname.includes('/images/') || IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const shopify: PlatformHandler = {\n name: 'shopify',\n displayName: 'Shopify',\n category: 'ecommerce',\n priority: 80,\n detectByUrl(url: string): boolean {\n return /\\.myshopify\\.com/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('cdn.shopify.com') ||\n html.includes('/cdn/shop/') ||\n html.includes('Shopify.shop') ||\n html.includes('ShopifyAnalytics')\n );\n },\n stripDomains: ['monorail-edge.shopifysvc.com'],\n stripSelectors: [],\n stripPatterns: [\n /<span[^>]*class=\"[^\"]*shopify-powered-by[^\"]*\"[^>]*>[\\s\\S]*?<\\/span>/gi,\n /<a[^>]*href=\"[^\"]*shopify\\.com\\?utm_campaign=poweredby[^\"]*\"[^>]*>[\\s\\S]*?<\\/a>/gi,\n ],\n hydrationTimeout: 3500,\n needsHydrationCheck: true,\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n const isShopifyAssetPath: boolean = pathname.includes('/cdn/shop/');\n if (host.includes('cdn.shopify.com') || isShopifyAssetPath) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.json') return 'data';\n return 'assets/misc';\n }\n if (host.includes('fonts.shopifycdn.com')) {\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n if (host.includes('extensions.shopifycdn.com')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n return 'assets/misc';\n }\n return null;\n },\n};\n","import type { PlatformHandler } from '../types.js';\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'];\nexport const gamma: PlatformHandler = {\n name: 'gamma',\n displayName: 'Gamma',\n category: 'ai',\n priority: 85,\n detectByUrl(url: string): boolean {\n return /\\.gamma\\.site/i.test(url);\n },\n detectByHtml(html: string): boolean {\n return (\n html.includes('assets.gammahosted.com') ||\n html.includes('imgproxy.gamma.app') ||\n html.includes('cdn.gamma.app') ||\n html.includes('gamma-moveable-wrapper')\n );\n },\n stripDomains: [],\n stripSelectors: [],\n stripPatterns: [],\n hydrationTimeout: 8000,\n needsHydrationCheck: true,\n hydrationSelector: '#__next',\n scrollStrategy: 'standard',\n mapAssetDir(host: string, pathname: string, ext: string): string | null {\n if (host.includes('assets.gammahosted.com')) {\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (ext === '.json') return 'data';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/misc';\n }\n if (host.includes('imgproxy.gamma.app')) {\n return 'assets/images';\n }\n if (host.includes('assets.api.gamma.app')) {\n return 'assets/images';\n }\n if (host.includes('cdn.gamma.app')) {\n if (VIDEO_EXTS.includes(ext)) return 'assets/videos';\n if (FONT_EXTS.includes(ext)) return 'assets/fonts';\n if (ext === '.css') return 'styles';\n if (ext === '.js' || ext === '.mjs') return 'scripts/vendor';\n if (IMG_EXTS.includes(ext)) return 'assets/images';\n return 'assets/images';\n }\n return null;\n },\n};\n","import type { PlatformHandler, PlatformCategory } from './types.js';\nimport { framer } from './framer.js';\nimport { webflow } from './webflow.js';\nimport { wix } from './wix.js';\nimport { bubble } from './builder/bubble.js';\nimport { carrd } from './builder/carrd.js';\nimport { duda } from './builder/duda.js';\nimport { squarespace } from './builder/squarespace.js';\nimport { strikingly } from './builder/strikingly.js';\nimport { tilda } from './builder/tilda.js';\nimport { weebly } from './builder/weebly.js';\nimport { clickfunnels } from './landing/clickfunnels.js';\nimport { elementor } from './landing/elementor.js';\nimport { instapage } from './landing/instapage.js';\nimport { systemeio } from './landing/systemeio.js';\nimport { unbounce } from './landing/unbounce.js';\nimport { ghost } from './cms/ghost.js';\nimport { notion } from './cms/notion.js';\nimport { wordpress } from './cms/wordpress.js';\nimport { kajabi } from './course/kajabi.js';\nimport { podia } from './course/podia.js';\nimport { teachable } from './course/teachable.js';\nimport { thinkific } from './course/thinkific.js';\nimport { gumroad } from './ecommerce/gumroad.js';\nimport { shopify } from './ecommerce/shopify.js';\nimport { gamma } from './ai/gamma.js';\nexport const PLATFORM_REGISTRY: PlatformHandler[] = [\n framer,\n webflow,\n wix,\n bubble,\n carrd,\n duda,\n squarespace,\n strikingly,\n tilda,\n weebly,\n clickfunnels,\n elementor,\n instapage,\n systemeio,\n unbounce,\n ghost,\n notion,\n wordpress,\n kajabi,\n podia,\n teachable,\n thinkific,\n gumroad,\n shopify,\n gamma,\n];\nexport const CATEGORY_LABELS: Record<PlatformCategory, string> = {\n builder: 'Website Builders',\n landing: 'Landing Pages & Funnels',\n cms: 'CMS & Blogs',\n course: 'Courses & Membership',\n ecommerce: 'E-commerce',\n ai: 'AI & Presentations',\n};\nexport const CATEGORY_ORDER: PlatformCategory[] = [\n 'builder',\n 'landing',\n 'cms',\n 'course',\n 'ecommerce',\n 'ai',\n];\nexport function sortedByPriority(): PlatformHandler[] {\n return [...PLATFORM_REGISTRY].sort((a, b) => b.priority - a.priority);\n}\nexport function platformsByCategory(): Record<PlatformCategory, PlatformHandler[]> {\n const out = {} as Record<PlatformCategory, PlatformHandler[]>;\n for (const cat of CATEGORY_ORDER) out[cat] = [];\n for (const handler of PLATFORM_REGISTRY) {\n if (!out[handler.category]) out[handler.category] = [];\n out[handler.category].push(handler);\n }\n for (const cat of CATEGORY_ORDER) {\n out[cat].sort((a, b) => b.priority - a.priority);\n }\n return out;\n}\nexport const STABLE_PLATFORMS = new Set<string>(['framer', 'webflow', 'wix']);\nexport function isBetaPlatform(name: string): boolean {\n return !STABLE_PLATFORMS.has(name);\n}\n","import type { PlatformHandler, PlatformType } from './types.js';\nimport type { Page } from 'puppeteer';\nimport { PLATFORM_REGISTRY, sortedByPriority } from './registry.js';\nimport { framer } from './framer.js';\nexport function readGenerator(html: string): string {\n const m =\n html.match(/<meta[^>]+name=[\"']generator[\"'][^>]*content=[\"']([^\"']*)[\"']/i) ||\n html.match(/<meta[^>]+content=[\"']([^\"']*)[\"'][^>]+name=[\"']generator[\"']/i);\n return m ? m[1] : '';\n}\nexport function detectByUrl(url: string): PlatformHandler | null {\n for (const platform of sortedByPriority()) {\n try {\n if (platform.detectByUrl(url)) return platform;\n } catch {}\n }\n return null;\n}\nexport function detectByGenerator(html: string): PlatformHandler | null {\n const gen = readGenerator(html);\n if (!gen) return null;\n for (const platform of sortedByPriority()) {\n if (platform.detectGenerator && platform.detectGenerator.test(gen)) return platform;\n }\n return null;\n}\nexport function detectByHtml(html: string): PlatformHandler | null {\n const byGen = detectByGenerator(html);\n if (byGen) return byGen;\n for (const platform of sortedByPriority()) {\n try {\n if (platform.detectByHtml(html)) return platform;\n } catch {}\n }\n return null;\n}\nexport function detectPlatform(url: string, html?: string): PlatformHandler {\n const byUrl = detectByUrl(url);\n if (byUrl) return byUrl;\n if (html) {\n const byHtml = detectByHtml(html);\n if (byHtml) return byHtml;\n }\n return framer;\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 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 const srcs: string[] = [];\n const scripts: NodeListOf<HTMLScriptElement> = document.querySelectorAll('script[src]');\n scripts.forEach((s) => {\n if (s.src) srcs.push(s.src);\n });\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 return '';\n });\n if (signal) return getPlatformByName(signal as PlatformType);\n } catch {}\n for (const platform of sortedByPriority()) {\n if (!platform.detectByDom) continue;\n try {\n if (await platform.detectByDom(page)) return platform;\n } catch {}\n }\n return null;\n}\nexport function getPlatformByName(name: PlatformType): PlatformHandler {\n const found = PLATFORM_REGISTRY.find((platform) => platform.name === name);\n return found || framer;\n}\n","export type { PlatformHandler, PlatformType, PlatformCategory, ScrollStrategy } from './types.js';\nexport { framer } from './framer.js';\nexport { webflow } from './webflow.js';\nexport { wix } from './wix.js';\nexport {\n PLATFORM_REGISTRY,\n CATEGORY_LABELS,\n CATEGORY_ORDER,\n STABLE_PLATFORMS,\n isBetaPlatform,\n sortedByPriority,\n platformsByCategory,\n} from './registry.js';\nexport {\n detectPlatform,\n detectByUrl,\n detectByHtml,\n detectByGenerator,\n detectByDom,\n readGenerator,\n getPlatformByName,\n} from './detect.js';\n","import chalk from 'chalk';\nimport { ui } from './theme.js';\n\nconst SHINE_WIDTH = 14;\nconst FRAME_INTERVAL = 70;\nconst INTRO_DURATION = 1400;\nconst SHINE_SPEED = 0.55;\n\nconst SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nexport async function showLoadingIntro(version: string): Promise<void> {\n if (!process.stdout.isTTY || process.env.CI) return;\n\n await new Promise<void>((resolve) => {\n let frame = 0;\n\n const draw = (): void => {\n const spinner = SPINNER_FRAMES[frame % SPINNER_FRAMES.length];\n const title = renderShinyText(`Framer Export v${version}`, frame, {\n baseColor: '#969696',\n shineColor: '#ffffff',\n shineWidth: 18,\n speed: 1.2,\n });\n const dots = '.'.repeat(frame % 4).padEnd(3, ' ');\n process.stdout.write(\n `\\r\\x1B[2K ${ui.primary(spinner)} ${title} ${ui.muted(`Loading${dots}`)}`\n );\n frame++;\n };\n\n process.stdout.write('\\x1B[?25l');\n draw();\n const interval = setInterval(draw, FRAME_INTERVAL);\n setTimeout(() => {\n clearInterval(interval);\n process.stdout.write('\\r\\x1B[2K\\x1B[?25h');\n resolve();\n }, INTRO_DURATION);\n });\n}\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 spinner = SPINNER_FRAMES[this.frame % SPINNER_FRAMES.length];\n const shimmer = renderShinyText('Exporting', this.frame);\n const frameStr = ui.primary(spinner);\n const phaseStr = this.phase ? ` ${ui.muted(this.limitLen(this.phase, 52))}` : '';\n\n process.stdout.write(`\\r\\x1B[2K ${frameStr} ${shimmer}${phaseStr}`);\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\nfunction renderShinyText(\n text: string,\n frame: number,\n options: { baseColor?: string; shineColor?: string; shineWidth?: number; speed?: number } = {}\n): string {\n const baseColor = options.baseColor || '#808080';\n const shineColor = options.shineColor || '#ffffff';\n const shineWidth = options.shineWidth || SHINE_WIDTH;\n const speed = options.speed ?? SHINE_SPEED;\n const travel = text.length + shineWidth * 2;\n const pos = ((frame * speed) % travel) - shineWidth;\n const base = hexToRgb(baseColor);\n const shine = hexToRgb(shineColor);\n\n let result = '';\n for (let i = 0; i < text.length; i++) {\n const dist = Math.abs(i - pos);\n const intensity = smoothstep(0, 1, 1 - Math.min(1, dist / shineWidth));\n const color = mixRgb(base, shine, intensity);\n const paint =\n intensity > 0.82\n ? chalk.rgb(color.r, color.g, color.b).bold\n : chalk.rgb(color.r, color.g, color.b);\n result += paint(text[i]);\n }\n return result;\n}\n\nfunction smoothstep(edge0: number, edge1: number, value: number): number {\n const t = Math.max(0, Math.min(1, (value - edge0) / (edge1 - edge0)));\n return t * t * (3 - 2 * t);\n}\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } {\n const clean = hex.replace('#', '');\n const normalized =\n clean.length === 3\n ? clean\n .split('')\n .map((char) => char + char)\n .join('')\n : clean.padEnd(6, '0').slice(0, 6);\n\n return {\n r: Number.parseInt(normalized.slice(0, 2), 16),\n g: Number.parseInt(normalized.slice(2, 4), 16),\n b: Number.parseInt(normalized.slice(4, 6), 16),\n };\n}\n\nfunction mixRgb(\n from: { r: number; g: number; b: number },\n to: { r: number; g: number; b: number },\n amount: number\n): { r: number; g: number; b: number } {\n return {\n r: Math.round(from.r + (to.r - from.r) * amount),\n g: Math.round(from.g + (to.g - from.g) * amount),\n b: Math.round(from.b + (to.b - from.b) * amount),\n };\n}\n","import { stdin } from 'node:process';\n\nexport type KeyName =\n | 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'tab'\n | 'return'\n | 'escape'\n | 'backspace'\n | 'delete'\n | 'ctrl-c';\n\nexport type MouseKind = 'move' | 'click' | 'press' | 'wheel-up' | 'wheel-down';\n\nexport type InputEvent =\n | { type: 'key'; name: KeyName }\n | { type: 'char'; char: string }\n | { type: 'mouse'; kind: MouseKind; x: number; y: number };\n\nconst ESC = '\\x1B';\nconst ESC_TIMEOUT_MS = 40;\n\nexport function parseInput(buffer: string): { events: InputEvent[]; rest: string } {\n const events: InputEvent[] = [];\n let i = 0;\n\n while (i < buffer.length) {\n const ch = buffer[i];\n\n if (ch === '\\x03') {\n events.push({ type: 'key', name: 'ctrl-c' });\n i++;\n continue;\n }\n if (ch === '\\r' || ch === '\\n') {\n events.push({ type: 'key', name: 'return' });\n i++;\n continue;\n }\n if (ch === '\\t') {\n events.push({ type: 'key', name: 'tab' });\n i++;\n continue;\n }\n if (ch === '\\x7f' || ch === '\\x08') {\n events.push({ type: 'key', name: 'backspace' });\n i++;\n continue;\n }\n\n if (ch === ESC) {\n const rest = buffer.slice(i);\n if (rest.length === 1) {\n return { events, rest };\n }\n const next = rest[1];\n\n if (next === '[' || next === 'O') {\n const sgr = rest.match(/^\\x1B\\[<(\\d+);(\\d+);(\\d+)([mM])/);\n if (sgr) {\n const code = Number(sgr[1]);\n const x = Number(sgr[2]);\n const y = Number(sgr[3]);\n const release = sgr[4] === 'm';\n if (code === 64) events.push({ type: 'mouse', kind: 'wheel-up', x, y });\n else if (code === 65) events.push({ type: 'mouse', kind: 'wheel-down', x, y });\n else if ((code & 32) === 32) events.push({ type: 'mouse', kind: 'move', x, y });\n else if (release) events.push({ type: 'mouse', kind: 'click', x, y });\n else events.push({ type: 'mouse', kind: 'press', x, y });\n i += sgr[0].length;\n continue;\n }\n if (/^\\x1B\\[<[\\d;]*$/.test(rest)) {\n return { events, rest };\n }\n\n const legacy = rest.match(/^\\x1B\\[M([\\s\\S])([\\s\\S])([\\s\\S])/);\n if (legacy) {\n const code = legacy[1].charCodeAt(0) - 32;\n const x = legacy[2].charCodeAt(0) - 32;\n const y = legacy[3].charCodeAt(0) - 32;\n if (code === 64) events.push({ type: 'mouse', kind: 'wheel-up', x, y });\n else if (code === 65) events.push({ type: 'mouse', kind: 'wheel-down', x, y });\n else if ((code & 32) === 32) events.push({ type: 'mouse', kind: 'move', x, y });\n else if ((code & 3) === 3) events.push({ type: 'mouse', kind: 'click', x, y });\n else events.push({ type: 'mouse', kind: 'press', x, y });\n i += legacy[0].length;\n continue;\n }\n if (/^\\x1B\\[M[\\s\\S]{0,2}$/.test(rest)) {\n return { events, rest };\n }\n\n const arrow = rest.match(/^\\x1B[[O]([ABCD])/);\n if (arrow) {\n const names: Record<string, KeyName> = { A: 'up', B: 'down', C: 'right', D: 'left' };\n events.push({ type: 'key', name: names[arrow[1]] });\n i += arrow[0].length;\n continue;\n }\n\n if (rest.startsWith('\\x1B[3~')) {\n events.push({ type: 'key', name: 'delete' });\n i += 4;\n continue;\n }\n\n const csi = rest.match(/^\\x1B\\[[0-?]*[ -/]*[@-~]/);\n if (csi) {\n i += csi[0].length;\n continue;\n }\n if (/^\\x1B\\[[0-?]*[ -/]*$/.test(rest)) {\n return { events, rest };\n }\n if (rest.length === 2) {\n return { events, rest };\n }\n i += 2;\n continue;\n }\n\n i += 2;\n continue;\n }\n\n if (ch >= ' ') {\n const code = buffer.codePointAt(i)!;\n const char = String.fromCodePoint(code);\n events.push({ type: 'char', char });\n i += char.length;\n continue;\n }\n\n i++;\n }\n\n return { events, rest: '' };\n}\n\nexport class RawInput {\n private buffer = '';\n private escTimer: NodeJS.Timeout | null = null;\n private active = false;\n private onData = (chunk: Buffer): void => {\n this.buffer += chunk.toString('utf-8');\n this.drain();\n };\n\n constructor(private handler: (event: InputEvent) => void) {}\n\n start(): void {\n if (this.active) return;\n this.active = true;\n stdin.setRawMode(true);\n stdin.resume();\n stdin.on('data', this.onData);\n }\n\n stop(): void {\n if (!this.active) return;\n this.active = false;\n if (this.escTimer) clearTimeout(this.escTimer);\n this.escTimer = null;\n stdin.removeListener('data', this.onData);\n stdin.setRawMode(false);\n stdin.pause();\n }\n\n private drain(): void {\n if (this.escTimer) {\n clearTimeout(this.escTimer);\n this.escTimer = null;\n }\n const { events, rest } = parseInput(this.buffer);\n this.buffer = rest;\n for (const event of events) {\n if (!this.active) return;\n this.handler(event);\n }\n if (rest === ESC) {\n this.escTimer = setTimeout(() => {\n if (this.buffer === ESC) {\n this.buffer = '';\n if (this.active) this.handler({ type: 'key', name: 'escape' });\n }\n }, ESC_TIMEOUT_MS);\n }\n }\n}\n","import chalk from 'chalk';\nimport { stripAnsi, ui } from './theme.js';\n\nexport function maxWidth(): number {\n return Math.min(process.stdout.columns || 80, 76);\n}\n\nfunction padRight(text: string, w: number): string {\n const fitted = fitAnsi(text, w);\n const visible = stripAnsi(fitted).length;\n if (visible >= w) return fitted;\n return fitted + ' '.repeat(w - visible);\n}\n\nexport function fitAnsi(text: string, width: number): string {\n if (stripAnsi(text).length <= width) return text;\n if (width <= 2) return '.'.repeat(Math.max(0, width));\n\n let out = '';\n let visible = 0;\n let i = 0;\n const limit = width - 2;\n\n while (i < text.length && visible < limit) {\n if (text[i] === '\\x1B') {\n const match = text.slice(i).match(/^\\x1B\\[[0-9;]*[a-zA-Z]/);\n if (match) {\n out += match[0];\n i += match[0].length;\n continue;\n }\n }\n\n out += text[i];\n visible++;\n i++;\n }\n\n return out + '..' + '\\x1B[0m';\n}\n\nfunction fitValue(value: string, width: number): string {\n if (value.length <= width) return value;\n\n const pathLike = value.includes('\\\\') || value.includes('/');\n if (pathLike) {\n const shortened = shortenPath(value, width);\n if (shortened.length <= width) return shortened;\n }\n\n if (width <= 3) return '.'.repeat(Math.max(0, width));\n return value.slice(0, width - 2) + '..';\n}\n\nexport function shortenPath(value: string, width: number): string {\n if (width <= 12) {\n return width <= 3 ? '.'.repeat(Math.max(0, width)) : value.slice(0, width - 2) + '..';\n }\n\n const separator = value.includes('\\\\') ? '\\\\' : '/';\n const parts = value.split(/[\\\\/]+/).filter(Boolean);\n const prefix = value.startsWith(separator) ? separator : '';\n const shortened = parts\n .map((part, index) => {\n const isLast = index === parts.length - 1;\n if (isLast) return part;\n if (/^[A-Za-z]:$/.test(part)) return part;\n return part.length > 5 ? part.slice(0, 3) + '..' : part;\n })\n .join(separator);\n\n const withPrefix = prefix + shortened;\n if (withPrefix.length <= width) return withPrefix;\n\n const last = parts.at(-1) || value;\n const first = parts\n .slice(0, -1)\n .map((part) => (/^[A-Za-z]:$/.test(part) ? part : part.slice(0, 3) + '..'));\n const compact = prefix + [...first, last].join(separator);\n if (compact.length <= width) return compact;\n\n const tailSpace = Math.max(8, Math.floor(width * 0.45));\n const headSpace = Math.max(0, width - tailSpace - 4);\n const middle =\n compact.slice(0, headSpace) + separator + '..' + separator + compact.slice(-tailSpace);\n return middle.length <= width ? middle : compact.slice(0, width - 2) + '..';\n}\n\nexport function boxTop(w: number): string {\n const inner = w - 4;\n return ' ' + ui.border('╭─') + ui.border('─'.repeat(inner)) + ui.border('─╮');\n}\n\nexport function panelTop(w: number): string {\n const inner = w - 4;\n return ui.border('╭─') + ui.border('─'.repeat(inner)) + ui.border('─╮');\n}\n\nexport function boxBot(w: number): string {\n const inner = w - 4;\n return ' ' + ui.border('╰─') + ui.border('─'.repeat(inner)) + ui.border('─╯');\n}\n\nexport function panelBot(w: number): string {\n const inner = w - 4;\n return ui.border('╰─') + ui.border('─'.repeat(inner)) + ui.border('─╯');\n}\n\nexport function boxLine(w: number, text: string): string {\n const inner = w - 4;\n const padded = padRight(text, inner);\n return ' ' + ui.border('│ ') + padded + ui.border(' │');\n}\n\nexport function panelLine(w: number, text: string): string {\n const inner = w - 4;\n const padded = padRight(text, inner);\n return ui.border('│ ') + padded + ui.border(' │');\n}\n\nexport function boxSep(w: number): string {\n const inner = w - 4;\n return ' ' + ui.border('├─') + ui.border('─'.repeat(inner)) + ui.border('─┤');\n}\n\nexport function panelSep(w: number): string {\n const inner = w - 4;\n return ui.border('├─') + ui.border('─'.repeat(inner)) + ui.border('─┤');\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 avail = Math.max(0, inner - labelPlain.length - 2);\n const fittedValue = fitValue(value, avail);\n const right = Math.max(0, inner - labelPlain.length - 2 - fittedValue.length);\n return (\n ' ' +\n ui.border('│ ') +\n chalk.bold(label) +\n ': ' +\n ui.primary(fittedValue) +\n ' '.repeat(right) +\n ui.border(' │')\n );\n}\n","import chalk from 'chalk';\nimport { stdout } from 'node:process';\n\nexport interface ExcludeRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nconst FRAME_MS = 100;\nconst FBM_OCTAVES = 5;\nconst FBM_LACUNARITY = 1.25;\nconst FBM_GAIN = 1.0;\nconst PATTERN_SCALE = 3;\nconst PATTERN_DENSITY = 1.1;\nconst PIXEL_JITTER = 0.4;\nconst SPEED = 0.5;\nconst EDGE_FADE = 0.18;\nconst RIPPLE_SPEED = 0.4;\nconst RIPPLE_THICKNESS = 0.12;\nconst RIPPLE_INTENSITY = 1.4;\nconst MAX_CLICKS = 10;\nconst DAMP_T = 1.0;\nconst DAMP_R = 10.0;\nconst CELL_PX = 8;\n\nconst GLYPHS = ['·', '•', '▪', '●'];\nconst COLORS = ['#54402f', '#6b4c37', '#82593d', '#8f6244'];\n\nfunction fract(v: number): number {\n return v - Math.floor(v);\n}\n\nfunction hash11(n: number): number {\n return fract(Math.sin(n) * 43758.5453);\n}\n\nfunction mix(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\nfunction vnoise(px: number, py: number, pz: number): number {\n const ix = Math.floor(px);\n const iy = Math.floor(py);\n const iz = Math.floor(pz);\n const fx = px - ix;\n const fy = py - iy;\n const fz = pz - iz;\n const dot = (ox: number, oy: number, oz: number): number =>\n (ix + ox) * 1.0 + (iy + oy) * 57.0 + (iz + oz) * 113.0;\n const n000 = hash11(dot(0, 0, 0));\n const n100 = hash11(dot(1, 0, 0));\n const n010 = hash11(dot(0, 1, 0));\n const n110 = hash11(dot(1, 1, 0));\n const n001 = hash11(dot(0, 0, 1));\n const n101 = hash11(dot(1, 0, 1));\n const n011 = hash11(dot(0, 1, 1));\n const n111 = hash11(dot(1, 1, 1));\n const wx = fx * fx * fx * (fx * (fx * 6 - 15) + 10);\n const wy = fy * fy * fy * (fy * (fy * 6 - 15) + 10);\n const wz = fz * fz * fz * (fz * (fz * 6 - 15) + 10);\n const x00 = mix(n000, n100, wx);\n const x10 = mix(n010, n110, wx);\n const x01 = mix(n001, n101, wx);\n const x11 = mix(n011, n111, wx);\n const y0 = mix(x00, x10, wy);\n const y1 = mix(x01, x11, wy);\n return mix(y0, y1, wz) * 2 - 1;\n}\n\nfunction fbm2(ux: number, uy: number, t: number): number {\n const px = ux * PATTERN_SCALE;\n const py = uy * PATTERN_SCALE;\n let amp = 1;\n let freq = 1;\n let sum = 1;\n for (let i = 0; i < FBM_OCTAVES; i++) {\n sum += amp * vnoise(px * freq, py * freq, t * freq);\n freq *= FBM_LACUNARITY;\n amp *= FBM_GAIN;\n }\n return sum * 0.5 + 0.5;\n}\n\nfunction bayer2exact(x: number, y: number): number {\n const ax = Math.floor(x);\n const ay = Math.floor(y);\n return fract(ax / 2 + ay * ay * 0.75);\n}\n\nfunction bayer4(x: number, y: number): number {\n return bayer2exact(0.5 * x, 0.5 * y) * 0.25 + bayer2exact(x, y);\n}\n\nfunction bayer8(x: number, y: number): number {\n return bayer4(0.5 * x, 0.5 * y) * 0.25 + bayer2exact(x, y);\n}\n\ninterface Click {\n x: number;\n y: number;\n time: number;\n}\n\nexport class Backdrop {\n private timer: NodeJS.Timeout | null = null;\n private disabled = false;\n private exclude: ExcludeRect | null = null;\n private prev = new Map<number, number>();\n private clicks: Click[] = [];\n private clickIx = 0;\n private timeOffset = Math.random() * 1000;\n private startedAt = Date.now();\n\n constructor() {\n if (process.env.FRAMER_EXPORT_NO_BG) this.disabled = true;\n }\n\n setExclude(rect: ExcludeRect): void {\n this.exclude = rect;\n }\n\n addClick(col: number, row: number): void {\n if (this.clicks.length < MAX_CLICKS) {\n this.clicks.push({ x: col, y: row * 2, time: this.now() });\n } else {\n this.clicks[this.clickIx] = { x: col, y: row * 2, time: this.now() };\n }\n this.clickIx = (this.clickIx + 1) % MAX_CLICKS;\n }\n\n start(): void {\n if (this.disabled || !stdout.isTTY || this.timer) return;\n this.startedAt = Date.now();\n this.paint();\n this.timer = setInterval(() => this.paint(), FRAME_MS);\n }\n\n stop(): void {\n if (this.timer) clearInterval(this.timer);\n this.timer = null;\n this.erase();\n }\n\n private now(): number {\n return this.timeOffset + ((Date.now() - this.startedAt) / 1000) * SPEED;\n }\n\n private inExclude(x: number, y: number): boolean {\n const r = this.exclude;\n if (!r) return false;\n return y >= r.top && y < r.top + r.height && x >= r.left && x < r.left + r.width;\n }\n\n private erase(): void {\n if (this.prev.size === 0) return;\n const columns = stdout.columns || 80;\n let out = '';\n for (const key of this.prev.keys()) {\n const x = (key % columns) + 1;\n const y = Math.floor(key / columns) + 1;\n out += `\\x1B[${y};${x}H `;\n }\n stdout.write(out);\n this.prev.clear();\n }\n\n private paint(): void {\n const rows = stdout.rows || 24;\n const columns = stdout.columns || 80;\n const resX = columns;\n const resY = rows * 2;\n const aspect = resX / resY;\n const t = this.now();\n const next = new Map<number, number>();\n let out = '';\n\n for (let row = 1; row <= rows; row++) {\n const fy = row * 2 - resY * 0.5;\n for (let col = 1; col <= columns; col++) {\n if (this.inExclude(col, row)) continue;\n const fx = col - resX * 0.5;\n const cellX = Math.floor(fx / CELL_PX) * CELL_PX;\n const cellY = Math.floor(fy / CELL_PX) * CELL_PX;\n const ux = (cellX / resX) * aspect;\n const uy = cellY / resY;\n let base = fbm2(ux, uy, t * 0.05);\n base = base * 0.5 - 0.65;\n let feed = base + (PATTERN_DENSITY - 0.5) * 0.3;\n\n for (const click of this.clicks) {\n const cux = ((click.x - resX * 0.5 - CELL_PX * 0.5) / resX) * aspect;\n const cuy = (click.y - resY * 0.5 - CELL_PX * 0.5) / resY;\n const dt = Math.max(t - click.time, 0);\n const r = Math.hypot(ux - cux, uy - cuy);\n const waveR = RIPPLE_SPEED * dt;\n const ring = Math.exp(-(((r - waveR) / RIPPLE_THICKNESS) ** 2));\n const atten = Math.exp(-DAMP_T * dt) * Math.exp(-DAMP_R * r);\n feed = Math.max(feed, ring * atten * RIPPLE_INTENSITY);\n }\n\n const bayer = bayer8(fx, fy) - 0.5;\n const bw = feed + bayer > 0.5 ? 1 : 0;\n if (!bw) continue;\n const h = fract(Math.sin(Math.floor(fx) * 127.1 + Math.floor(fy) * 311.7) * 43758.5453);\n const jitterScale = 1 + (h - 0.5) * PIXEL_JITTER;\n let coverage = bw * jitterScale;\n\n if (EDGE_FADE > 0) {\n const nx = col / columns;\n const ny = row / rows;\n const edge = Math.min(nx, ny, 1 - nx, 1 - ny);\n const fade = Math.min(1, Math.max(0, edge / EDGE_FADE));\n coverage *= fade * fade * (3 - 2 * fade);\n }\n if (coverage < 0.35) continue;\n\n const level = Math.min(3, Math.floor(h * 4));\n const key = (row - 1) * columns + (col - 1);\n next.set(key, level);\n if (this.prev.get(key) !== level) {\n out += `\\x1B[${row};${col}H${chalk.hex(COLORS[level])(GLYPHS[level])}`;\n }\n this.prev.delete(key);\n }\n }\n\n for (const key of this.prev.keys()) {\n const x = (key % columns) + 1;\n const y = Math.floor(key / columns) + 1;\n if (!this.inExclude(x, y)) out += `\\x1B[${y};${x}H `;\n }\n this.prev = next;\n if (out) stdout.write(out);\n }\n}\n","import readline from 'node:readline';\nimport { RawInput, type InputEvent } from './input.js';\nimport chalk from 'chalk';\nimport { stdin, stdout } from 'node:process';\nimport { maxWidth } from './box.js';\nimport { Backdrop } from './backdrop.js';\nimport { centerText, stripAnsi, truncatePlain, THEME, ui } from './theme.js';\nfunction panelRow(width: number, content: string = ''): string {\n const visible = stripAnsi(content).length;\n const pad = Math.max(0, width - visible);\n return chalk.bgHex(THEME.panel)(content + ' '.repeat(pad));\n}\nfunction selectedRow(width: number, content: string): string {\n const visible = content.length;\n const pad = Math.max(0, width - visible);\n return chalk\n .bgHex(THEME.primary)\n .hex(THEME.background)\n .bold(content + ' '.repeat(pad));\n}\nfunction titleRow(width: number, title: string): string {\n const left = ` ${ui.text.bold(title)}`;\n const right = `${ui.muted('esc')} `;\n const visible = stripAnsi(left).length + stripAnsi(right).length;\n const gap = Math.max(1, width - visible);\n return chalk.bgHex(THEME.panel)(left + ' '.repeat(gap) + right);\n}\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n heading?: boolean;\n}\nexport interface SelectAction {\n label: string;\n value: string;\n disabled?: boolean;\n}\nexport interface SelectConfig {\n headerLines?: string[];\n actions?: SelectAction[];\n footer?: string;\n searchable?: boolean;\n}\nlet pipedLinesPromise: Promise<string[]> | null = null;\nlet pipedLineIndex = 0;\nexport async function select(\n question: string,\n options: SelectOption[],\n defaultIndex: number = 0,\n config: SelectConfig = {}\n): Promise<string> {\n const isTTY = stdin.isTTY && stdout.isTTY;\n if (!isTTY) {\n const flat = options.map((o) => (o.heading ? { ...o, disabled: true } : o));\n return fallbackPrompt(question, flat, defaultIndex, config);\n }\n return arrowSelect(question, options, defaultIndex, config);\n}\nexport async function promptInput(\n question: string,\n defaultValue: string = '',\n config: Omit<SelectConfig, 'actions'> = {}\n): Promise<string> {\n if (!stdin.isTTY || !stdout.isTTY) {\n return fallbackInput(question, defaultValue);\n }\n return fullscreenInput(question, defaultValue, config);\n}\nasync function arrowSelect(\n question: string,\n options: SelectOption[],\n defaultIndex: number,\n config: SelectConfig\n): Promise<string> {\n const actions = config.actions ?? [];\n const headerLines = config.headerLines ?? [];\n const searchable = config.searchable === true;\n const hasActions = actions.length > 0;\n const headerCount = headerLines.length;\n const searchRows = searchable ? 1 : 0;\n const optionStartOffset = 3 + searchRows + headerCount + (headerCount > 0 ? 1 : 0);\n let width = 0;\n let inner = 0;\n let visibleCount = 0;\n let actionLineOffset = 0;\n let lineCount = 0;\n let panelTopRow = 0;\n let panelLeftCol = 0;\n let footerRow = 0;\n const recomputeLayout = (): void => {\n width = Math.max(50, Math.min(maxWidth(), 64));\n inner = width - 4;\n const rows = process.stdout.rows || 24;\n const columns = process.stdout.columns || 80;\n const chromeLines = optionStartOffset + (hasActions ? 3 : 1) + 2;\n const maxVisible = Math.max(4, rows - chromeLines);\n visibleCount = Math.min(options.length, maxVisible);\n actionLineOffset = optionStartOffset + visibleCount + 1;\n lineCount = actionLineOffset + (hasActions ? 2 : 1);\n panelTopRow = Math.max(2, Math.floor((rows - lineCount) / 2) + 1);\n panelLeftCol = Math.max(1, Math.floor((columns - width) / 2) + 1);\n footerRow = Math.min(rows, panelTopRow + lineCount + 1);\n };\n recomputeLayout();\n return new Promise((resolve) => {\n let query = '';\n const buildView = (): number[] => {\n if (!query) return options.map((_, i) => i);\n const q = query.toLowerCase();\n const matched = new Set<number>();\n options.forEach((option, i) => {\n if (!option.heading && stripAnsi(option.label).toLowerCase().includes(q)) matched.add(i);\n });\n const view: number[] = [];\n for (let i = 0; i < options.length; i++) {\n if (options[i].heading) {\n for (let j = i + 1; j < options.length && !options[j].heading; j++) {\n if (matched.has(j)) {\n view.push(i);\n break;\n }\n }\n } else if (matched.has(i)) {\n view.push(i);\n }\n }\n return view;\n };\n let view = buildView();\n const selectableAt = (pos: number): boolean => {\n const option = options[view[pos]];\n return !option.disabled && !option.heading;\n };\n const firstSelectable = (): number => {\n for (let pos = 0; pos < view.length; pos++) if (selectableAt(pos)) return pos;\n return 0;\n };\n let selected =\n defaultIndex >= 0 && defaultIndex < options.length && view.indexOf(defaultIndex) >= 0\n ? view.indexOf(defaultIndex)\n : firstSelectable();\n if (!view.length || !selectableAt(Math.min(selected, Math.max(0, view.length - 1)))) {\n selected = firstSelectable();\n }\n let selectedAction: number | null = null;\n let scrollOffset = 0;\n let prevLines: string[] = [];\n let prevFooter = '';\n const move = (direction: -1 | 1): void => {\n let next = selected + direction;\n while (next >= 0 && next < view.length) {\n if (selectableAt(next)) {\n selected = next;\n return;\n }\n next += direction;\n }\n };\n const syncScroll = (): void => {\n if (view.length <= visibleCount) {\n scrollOffset = 0;\n return;\n }\n const anchor = selected > 0 && options[view[selected - 1]].heading ? selected - 1 : selected;\n if (anchor < scrollOffset) scrollOffset = anchor;\n if (selected >= scrollOffset + visibleCount) scrollOffset = selected - visibleCount + 1;\n scrollOffset = Math.max(0, Math.min(scrollOffset, view.length - visibleCount));\n };\n const backdrop = new Backdrop();\n const syncBackdropExclude = (): void => {\n backdrop.setExclude({\n top: panelTopRow - 1,\n left: panelLeftCol - 2,\n width: width + 4,\n height: lineCount + 3,\n });\n };\n syncBackdropExclude();\n const searchRow = (): string => {\n const clipped = truncatePlain(query, Math.max(10, inner - 6));\n const shown = query\n ? `${chalk.hex(THEME.text)(clipped)}${chalk.hex(THEME.primary)('▌')}`\n : ui.muted('type to search');\n const content = ` ${chalk.hex(THEME.text)('▏')} ${shown}`;\n const visible = stripAnsi(content).length;\n return chalk.bgHex(THEME.element)(content + ' '.repeat(Math.max(0, width - visible)));\n };\n const render = (): void => {\n const lines: string[] = [];\n lines.push(panelRow(width));\n lines.push(titleRow(width, question));\n if (searchable) lines.push(searchRow());\n lines.push(panelRow(width));\n for (const header of headerLines) {\n lines.push(panelRow(width, ` ${ui.muted(truncatePlain(stripAnsi(header), inner))}`));\n }\n if (headerCount > 0) lines.push(panelRow(width));\n syncScroll();\n for (let pos = scrollOffset; pos < scrollOffset + visibleCount; pos++) {\n if (pos < view.length) {\n lines.push(\n renderOption(\n options[view[pos]],\n selectedAction === null && pos === selected,\n view[pos] === defaultIndex,\n width,\n inner\n )\n );\n } else {\n lines.push(panelRow(width));\n }\n }\n if (view.length === 0) {\n lines[optionStartOffset] = panelRow(width, ` ${ui.muted('No results found')}`);\n }\n lines.push(\n view.length > visibleCount\n ? panelRow(width, ` ${ui.muted(`${selected + 1}/${view.length} scroll for more`)}`)\n : panelRow(width)\n );\n if (hasActions) {\n lines.push(panelRow(width, renderActions(actions, selectedAction)));\n lines.push(panelRow(width));\n }\n const sameLength = prevLines.length === lines.length;\n lines.forEach((line, index) => {\n if (!sameLength || prevLines[index] !== line) {\n writeAt(panelTopRow + index, panelLeftCol, line);\n }\n });\n prevLines = lines;\n const footer = centerText(\n ui.muted(\n config.footer ||\n (searchable\n ? 'type to search ↑↓ move enter select esc close'\n : '↑↓ move enter select mouse click esc close')\n ),\n width\n );\n if (footer !== prevFooter) {\n writeAt(footerRow, panelLeftCol, footer);\n prevFooter = footer;\n }\n };\n const refilter = (): void => {\n view = buildView();\n selected = firstSelectable();\n scrollOffset = 0;\n render();\n };\n const choose = (value?: string): void => {\n if (value === undefined) {\n if (!view.length || !selectableAt(selected)) return;\n value = options[view[selected]].value;\n }\n cleanup();\n console.log(\n ` ${ui.success('✓')} ${ui.text.bold(question)} ${ui.primary(labelForValue(value, options, actions))}\\n`\n );\n resolve(value);\n };\n const hitOption = (x: number, y: number): number | null => {\n const relative = y - panelTopRow - optionStartOffset;\n if (relative < 0 || relative >= visibleCount) return null;\n if (x < panelLeftCol || x >= panelLeftCol + width) return null;\n const pos = scrollOffset + relative;\n if (pos >= view.length || !selectableAt(pos)) return null;\n return pos;\n };\n const onMouse = (kind: 'move' | 'click' | 'press', x: number, y: number): void => {\n if (kind === 'click') backdrop.addClick(x, y);\n if (hasActions && y === panelTopRow + actionLineOffset) {\n const actionIdx = actionIndexAtX(actions, x, panelLeftCol, inner);\n if (actionIdx === null || actions[actionIdx].disabled) return;\n if (selectedAction !== actionIdx) {\n selectedAction = actionIdx;\n render();\n }\n if (kind === 'click') choose(actions[actionIdx].value);\n return;\n }\n const pos = hitOption(x, y);\n if (pos === null) {\n if (kind === 'move' && selectedAction !== null) {\n selectedAction = null;\n render();\n }\n return;\n }\n if (selected !== pos || selectedAction !== null) {\n selected = pos;\n selectedAction = null;\n render();\n }\n if (kind === 'click') choose();\n };\n const onEvent = (event: InputEvent): void => {\n if (event.type === 'mouse') {\n if (event.kind === 'wheel-up') {\n move(-1);\n render();\n } else if (event.kind === 'wheel-down') {\n move(1);\n render();\n } else {\n onMouse(event.kind, event.x, event.y);\n }\n return;\n }\n if (event.type === 'key') {\n switch (event.name) {\n case 'up':\n move(-1);\n selectedAction = null;\n render();\n return;\n case 'down':\n move(1);\n selectedAction = null;\n render();\n return;\n case 'tab':\n if (hasActions) {\n selectedAction = selectedAction === null ? 0 : null;\n render();\n }\n return;\n case 'return':\n if (selectedAction !== null) choose(actions[selectedAction].value);\n else choose();\n return;\n case 'ctrl-c':\n cleanup();\n process.exit(0);\n return;\n case 'escape':\n if (searchable && query) {\n query = '';\n refilter();\n return;\n }\n cleanup();\n process.exit(0);\n return;\n case 'backspace':\n if (searchable) {\n query = query.slice(0, -1);\n refilter();\n }\n return;\n default:\n return;\n }\n }\n if (event.type === 'char' && searchable && query.length < 40) {\n query += cleanInputValue(event.char);\n refilter();\n }\n };\n const input = new RawInput(onEvent);\n const onResize = (): void => {\n recomputeLayout();\n syncBackdropExclude();\n prevLines = [];\n prevFooter = '';\n stdout.write('\\x1B[2J');\n render();\n };\n const cleanup = (): void => {\n backdrop.stop();\n stdout.removeListener('resize', onResize);\n input.stop();\n leaveInteractiveScreen();\n };\n enterInteractiveScreen(true);\n render();\n backdrop.start();\n stdout.on('resize', onResize);\n input.start();\n });\n}\nasync function fallbackPrompt(\n question: string,\n options: SelectOption[],\n defaultIndex: number,\n config: SelectConfig\n): Promise<string> {\n if (!stdin.isTTY) {\n const firstEnabled: number = options.findIndex((option) => !option.disabled);\n const enabledDefault: number = options[defaultIndex]?.disabled ? firstEnabled : defaultIndex;\n const def = String(enabledDefault + 1);\n printFallbackOptions(question, options, enabledDefault, config);\n while (true) {\n const trimmed = (await readPipedLine()).trim();\n if (trimmed.toLowerCase() === 'a') {\n const action = config.actions?.find((item) => !item.disabled);\n if (action) return action.value;\n }\n if (!trimmed) {\n const label = stripAnsi(options[enabledDefault].label);\n console.log(` ${ui.success('✓')} ${ui.primary(label)}\\n`);\n return options[enabledDefault].value;\n }\n const idx = parseInt(trimmed, 10);\n if (idx >= 1 && idx <= options.length && !options[idx - 1].disabled) {\n const label = stripAnsi(options[idx - 1].label);\n console.log(` ${ui.success('✓')} ${ui.primary(label)}\\n`);\n return options[idx - 1].value;\n }\n console.log(` ${ui.error('✗')} ${ui.warning(`Enter 1-${options.length} or ${def}`)}\\n`);\n }\n }\n return new Promise((resolve) => {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n const firstEnabled: number = options.findIndex((option) => !option.disabled);\n const enabledDefault: number = options[defaultIndex]?.disabled ? firstEnabled : defaultIndex;\n printFallbackOptions(question, options, enabledDefault, config);\n const def = String(enabledDefault + 1);\n const ask = (): void => {\n rl.question(\n ` ${ui.primary('>')} ${ui.muted(`Choose [1-${options.length}] (${def})`)}: `,\n (answer) => {\n const trimmed = answer.trim();\n if (trimmed.toLowerCase() === 'a') {\n const action = config.actions?.find((item) => !item.disabled);\n if (action) {\n rl.close();\n resolve(action.value);\n return;\n }\n }\n if (!trimmed) {\n rl.close();\n const label = stripAnsi(options[enabledDefault].label);\n console.log(` ${ui.success('✓')} ${ui.primary(label)}\\n`);\n resolve(options[enabledDefault].value);\n return;\n }\n const idx = parseInt(trimmed, 10);\n if (idx >= 1 && idx <= options.length && !options[idx - 1].disabled) {\n rl.close();\n const label = stripAnsi(options[idx - 1].label);\n console.log(` ${ui.success('✓')} ${ui.primary(label)}\\n`);\n resolve(options[idx - 1].value);\n } else if (idx >= 1 && idx <= options.length && options[idx - 1].disabled) {\n console.log(` ${ui.error('✗')} ${ui.warning('Option unavailable for now')}\\n`);\n ask();\n } else {\n console.log(` ${ui.error('✗')} ${ui.warning(`Enter 1-${options.length}`)}\\n`);\n ask();\n }\n }\n );\n };\n ask();\n });\n}\nfunction fullscreenInput(\n question: string,\n defaultValue: string,\n config: Omit<SelectConfig, 'actions'>\n): Promise<string> {\n const headerLines = config.headerLines ?? [];\n const headerCount = headerLines.length;\n const lineCount = 3 + headerCount + (headerCount > 0 ? 1 : 0) + 2;\n let width = 0;\n let inner = 0;\n let panelTopRow = 0;\n let panelLeftCol = 0;\n let footerRow = 0;\n const recomputeLayout = (): void => {\n width = Math.max(50, Math.min(maxWidth(), 64));\n inner = width - 4;\n const rows = process.stdout.rows || 24;\n const columns = process.stdout.columns || 80;\n panelTopRow = Math.max(2, Math.floor((rows - lineCount) / 2) + 1);\n panelLeftCol = Math.max(1, Math.floor((columns - width) / 2) + 1);\n footerRow = Math.min(rows, panelTopRow + lineCount + 1);\n };\n recomputeLayout();\n return new Promise((resolve) => {\n let value = defaultValue;\n let prevLines: string[] = [];\n let prevFooter = '';\n const backdrop = new Backdrop();\n const syncBackdropExclude = (): void => {\n backdrop.setExclude({\n top: panelTopRow - 1,\n left: panelLeftCol - 2,\n width: width + 4,\n height: lineCount + 3,\n });\n };\n syncBackdropExclude();\n const render = (): void => {\n const shown = value || '';\n const clipped = truncatePlain(shown, Math.max(12, inner - 6));\n const inputContent = ` ${chalk.hex(THEME.text)('▏')} ${chalk.hex(THEME.text)(clipped)}${chalk.hex(THEME.primary)('▌')}`;\n const inputVisible = stripAnsi(inputContent).length;\n const inputRow = chalk.bgHex(THEME.element)(\n inputContent + ' '.repeat(Math.max(0, width - inputVisible))\n );\n const lines: string[] = [];\n lines.push(panelRow(width));\n lines.push(titleRow(width, question));\n lines.push(panelRow(width));\n for (const header of headerLines) {\n lines.push(panelRow(width, ` ${ui.muted(truncatePlain(stripAnsi(header), inner))}`));\n }\n if (headerCount > 0) lines.push(panelRow(width));\n lines.push(inputRow);\n lines.push(panelRow(width));\n const sameLength = prevLines.length === lines.length;\n lines.forEach((line, index) => {\n if (!sameLength || prevLines[index] !== line) {\n writeAt(panelTopRow + index, panelLeftCol, line);\n }\n });\n prevLines = lines;\n const footer = centerText(\n ui.muted(config.footer || 'type value enter confirm esc close'),\n width\n );\n if (footer !== prevFooter) {\n writeAt(footerRow, panelLeftCol, footer);\n prevFooter = footer;\n }\n };\n const onResize = (): void => {\n recomputeLayout();\n syncBackdropExclude();\n prevLines = [];\n prevFooter = '';\n stdout.write('\\x1B[2J');\n render();\n };\n const cleanup = (): void => {\n backdrop.stop();\n stdout.removeListener('resize', onResize);\n input.stop();\n leaveInteractiveScreen();\n };\n const submit = (): void => {\n const output = cleanInputValue(value.trim() || defaultValue);\n cleanup();\n resolve(output);\n };\n const onEvent = (event: InputEvent): void => {\n if (event.type === 'key') {\n switch (event.name) {\n case 'ctrl-c':\n case 'escape':\n cleanup();\n process.exit(0);\n return;\n case 'return':\n submit();\n return;\n case 'backspace':\n value = value.slice(0, -1);\n render();\n return;\n case 'delete':\n value = '';\n render();\n return;\n default:\n return;\n }\n }\n if (event.type === 'char') {\n value += cleanInputValue(event.char);\n render();\n }\n };\n const input = new RawInput(onEvent);\n enterInteractiveScreen(false);\n render();\n backdrop.start();\n stdout.on('resize', onResize);\n input.start();\n });\n}\nasync function fallbackInput(question: string, defaultValue: string): Promise<string> {\n if (!stdin.isTTY) {\n const suffix = defaultValue ? ui.muted(` (${defaultValue})`) : '';\n console.log(` ${ui.primary('>')} ${ui.text.bold(question)}${suffix}: `);\n const answer = await readPipedLine();\n return cleanInputValue(answer.trim() || defaultValue);\n }\n return new Promise((resolve) => {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n const suffix = defaultValue ? ui.muted(` (${defaultValue})`) : '';\n rl.question(` ${ui.primary('>')} ${ui.text.bold(question)}${suffix}: `, (answer) => {\n rl.close();\n resolve(cleanInputValue(answer.trim() || defaultValue));\n });\n });\n}\nfunction printFallbackOptions(\n question: string,\n options: SelectOption[],\n enabledDefault: number,\n config: SelectConfig\n): void {\n console.log(` ${ui.primary('●')} ${ui.text.bold(question)}\\n`);\n for (const header of config.headerLines ?? []) {\n console.log(` ${ui.muted(header)}`);\n }\n for (const action of config.actions ?? []) {\n console.log(\n ` ${ui.muted('[A]')} ${action.disabled ? ui.muted(action.label) : ui.text(action.label)}`\n );\n }\n if ((config.headerLines?.length || 0) > 0 || (config.actions?.length || 0) > 0) {\n console.log('');\n }\n for (let i = 0; i < options.length; i++) {\n const marker = i === enabledDefault ? ui.success(' ◆') : ' ';\n const label = options[i].disabled\n ? ui.muted(stripAnsi(options[i].label))\n : ui.text(options[i].label);\n console.log(` ${ui.muted(`[${i + 1}]`)}${marker} ${label}`);\n }\n console.log('');\n}\nfunction readPipedLine(): Promise<string> {\n if (!pipedLinesPromise) {\n pipedLinesPromise = new Promise((resolve) => {\n let data = '';\n stdin.setEncoding('utf8');\n stdin.on('data', (chunk) => {\n data += chunk;\n });\n stdin.on('end', () => {\n resolve(data.split(/\\r?\\n/));\n });\n stdin.on('error', () => {\n resolve([]);\n });\n });\n }\n return pipedLinesPromise.then((lines) => lines[pipedLineIndex++] ?? '');\n}\nfunction renderActions(actions: SelectAction[], active: number | null): string {\n const rendered = actions\n .map((action, index) => {\n const label = stripAnsi(action.label);\n if (action.disabled) return ui.muted(label);\n if (active === index)\n return chalk.bgHex(THEME.primary).hex(THEME.background).bold(` ${label} `);\n return ui.text(label);\n })\n .join(' ');\n return ` ${rendered}`;\n}\nfunction actionIndexAtX(\n actions: SelectAction[],\n mouseX: number,\n panelLeftCol: number,\n inner: number\n): number | null {\n if (actions.length === 0) return null;\n const contentStart = panelLeftCol + 2;\n const relative = mouseX - contentStart;\n if (relative < 0 || relative > inner) return null;\n return Math.min(actions.length - 1, Math.floor((relative / Math.max(1, inner)) * actions.length));\n}\nfunction labelForValue(value: string, options: SelectOption[], actions: SelectAction[]): string {\n return stripAnsi(\n options.find((option) => option.value === value)?.label ||\n actions.find((action) => action.value === value)?.label ||\n value\n );\n}\nconst BETA_SUFFIX = '[beta]';\n\nfunction betaBadge(): string {\n return chalk.bgHex(THEME.warning).hex(THEME.background).bold(' beta ');\n}\n\nfunction splitBetaLabel(plain: string): { base: string; beta: boolean } {\n if (plain.endsWith(BETA_SUFFIX)) {\n return { base: plain.slice(0, -BETA_SUFFIX.length).trimEnd(), beta: true };\n }\n return { base: plain, beta: false };\n}\n\nfunction renderOption(\n option: SelectOption,\n isSelected: boolean,\n isDefault: boolean,\n width: number,\n inner: number\n): string {\n const plain = truncatePlain(stripAnsi(option.label), Math.max(10, inner - 2));\n if (option.heading) {\n return panelRow(width, ` ${ui.accent.bold(plain)}`);\n }\n const { base, beta } = splitBetaLabel(plain);\n if (isSelected && !option.disabled) {\n return selectedRow(width, ` ${isDefault ? '●' : ' '} ${plain}`);\n }\n const badge = beta ? ` ${betaBadge()}` : '';\n if (option.disabled) {\n return panelRow(width, ` ${ui.muted(base)}${badge}`);\n }\n if (isDefault) {\n return panelRow(width, ` ${ui.primary('●')} ${ui.primary(base)}${badge}`);\n }\n return panelRow(width, ` ${ui.text(base)}${badge}`);\n}\nfunction enterInteractiveScreen(enableMouse: boolean): void {\n stdout.write('\\x1B[?1049h' + '\\x1B[2J' + '\\x1B[H' + '\\x1B[?25l');\n if (enableMouse) {\n stdout.write('\\x1B[?1006h' + '\\x1B[?1000h' + '\\x1B[?1002h' + '\\x1B[?1003h');\n }\n}\nfunction leaveInteractiveScreen(): void {\n stdout.write(\n '\\x1B[?1003l' + '\\x1B[?1002l' + '\\x1B[?1000l' + '\\x1B[?1006l' + '\\x1B[?25h' + '\\x1B[?1049l'\n );\n}\nfunction writeAt(row: number, col: number, text: string): void {\n stdout.write(`\\x1B[${row};${col}H${text}`);\n}\nfunction cleanInputValue(value: string): string {\n return value\n .replace(/\\x1B\\[<\\d+;\\d+;\\d+[mM]/g, '')\n .replace(/\\x1B\\[[0-?]*[ -/]*[@-~]/g, '')\n .replace(/(?:\\d+;){2}\\d+[mM]/g, '')\n .replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]/g, '');\n}\n","export const UI_HTML = `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n<title>Framer Export</title>\n<style>\n :root {\n --bg: #0a0a0a;\n --bg-panel: #141414;\n --bg-element: #1e1e1e;\n --bg-hover: #232323;\n --text: #eeeeee;\n --muted: #808080;\n --primary: #fab283;\n --secondary: #5c9cf5;\n --accent: #9d7cd8;\n --success: #7fd88f;\n --warning: #f5a742;\n --error: #e06c75;\n --info: #56b6c2;\n --border: rgba(255, 255, 255, 0.10);\n --border-strong: rgba(255, 255, 255, 0.20);\n --radius: 5px;\n --font: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n }\n * { margin: 0; padding: 0; box-sizing: border-box; }\n html, body { height: 100%; }\n body {\n background: var(--bg);\n color: var(--text);\n font-family: var(--font);\n font-size: 14px;\n line-height: 1.55;\n overflow-x: hidden;\n }\n ::selection { background: #f2f7c8; color: #131010; }\n #bg {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n z-index: 0;\n opacity: 0.5;\n pointer-events: none;\n }\n .shell { position: relative; z-index: 1; min-height: 100%; display: flex; flex-direction: column; }\n header {\n position: sticky;\n top: 0;\n z-index: 5;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 64px;\n padding: 0 2.5rem;\n background: rgba(10, 10, 10, 0.82);\n backdrop-filter: blur(10px);\n border-bottom: 1px solid var(--border);\n }\n .brand { font-size: 15px; }\n .brand .dim { color: var(--muted); }\n .brand .strong { color: var(--text); font-weight: 700; }\n .status { color: var(--muted); font-size: 12px; display: flex; align-items: center; gap: 8px; }\n .status .dot { color: var(--muted); }\n .status.running .dot { color: var(--warning); }\n .status.done .dot { color: var(--success); }\n .status.error .dot { color: var(--error); }\n main { flex: 1; padding: 2.5rem; max-width: 1180px; width: 100%; margin: 0 auto; }\n .screen { display: none; }\n .screen.active { display: block; }\n h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.01em; }\n .sub { color: var(--muted); margin-top: 0.4rem; margin-bottom: 2rem; }\n .sub .star { color: var(--primary); }\n .grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));\n gap: 1rem;\n padding-bottom: 3rem;\n }\n .card {\n position: relative;\n background: rgba(20, 20, 20, 0.86);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 1.1rem 1.2rem 1rem;\n cursor: pointer;\n transition: border-color .15s ease, background .15s ease, transform .1s ease;\n }\n .card:hover { border-color: var(--border-strong); background: rgba(30, 30, 30, 0.92); }\n .card:active { transform: scale(0.98); }\n .card .cat { font-size: 11px; color: var(--muted); display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }\n .card .cat .dot { font-size: 12px; }\n .card .name { font-weight: 700; font-size: 15px; display: flex; align-items: center; gap: 8px; }\n .badge-beta {\n font-size: 10px;\n font-weight: 700;\n color: #131010;\n background: var(--warning);\n border-radius: 3px;\n padding: 2px 7px;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n box-shadow: 0 0 10px rgba(245, 167, 66, 0.35);\n }\n .search-wrap { max-width: 420px; margin-bottom: 1.6rem; }\n .card .hint { font-size: 12px; color: var(--muted); margin-top: 8px; opacity: 0; transition: opacity .15s ease; }\n .card:hover .hint { opacity: 1; }\n .card.auto { border-style: dashed; }\n .cat-heading {\n grid-column: 1 / -1;\n margin-top: 1.2rem;\n color: var(--accent);\n font-weight: 700;\n font-size: 13px;\n }\n .cat-heading:first-child { margin-top: 0; }\n .panel {\n background: rgba(20, 20, 20, 0.9);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 2rem;\n max-width: 640px;\n }\n .field-label { color: var(--muted); font-size: 12px; margin-bottom: 8px; }\n input[type=\"text\"] {\n width: 100%;\n background: var(--bg-element);\n color: var(--text);\n border: 1px solid var(--border);\n border-left: 3px solid var(--primary);\n border-radius: 3px;\n font-family: var(--font);\n font-size: 14px;\n padding: 12px 14px;\n outline: none;\n }\n input[type=\"text\"]:focus { border-color: var(--border-strong); border-left-color: var(--primary); }\n .error-line { color: var(--error); font-size: 12px; min-height: 18px; margin-top: 8px; }\n .row { display: flex; align-items: center; gap: 12px; margin-top: 1.6rem; }\n .btn {\n font-family: var(--font);\n font-size: 13px;\n padding: 9px 18px;\n border-radius: 4px;\n border: none;\n cursor: pointer;\n background: var(--bg-element);\n color: var(--text);\n box-shadow: 0 0 0 1px rgba(255,255,255,.10);\n transition: all .2s ease;\n }\n .btn:hover { box-shadow: 0 0 0 1px rgba(255,255,255,.22); }\n .btn:active { transform: scale(0.98); }\n .btn.primary { background: #f0efef; color: #131010; font-weight: 700; box-shadow: none; }\n .btn.primary:hover { background: #ffffff; }\n .btn.ghost { background: transparent; color: var(--muted); box-shadow: none; }\n .btn.ghost:hover { color: var(--text); }\n .chip {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n background: var(--bg-element);\n border: 1px solid var(--border);\n border-radius: 3px;\n padding: 4px 10px;\n font-size: 12px;\n color: var(--muted);\n margin-bottom: 1.4rem;\n }\n .chip b { color: var(--primary); font-weight: 700; }\n .opt {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 13px 4px;\n border-bottom: 1px solid var(--border);\n cursor: pointer;\n user-select: none;\n }\n .opt:last-of-type { border-bottom: none; }\n .opt .box {\n width: 18px;\n height: 18px;\n flex: none;\n border: 1.5px solid var(--border-strong);\n border-radius: 3px;\n display: grid;\n place-items: center;\n color: transparent;\n font-size: 13px;\n font-weight: 700;\n transition: all .15s ease;\n }\n .opt.on .box { background: var(--primary); border-color: var(--primary); color: #131010; }\n .opt .label b { display: block; font-size: 14px; font-weight: 600; }\n .opt .label span { font-size: 12px; color: var(--muted); }\n .seg { display: inline-flex; border: 1px solid var(--border); border-radius: 4px; overflow: hidden; }\n .seg button {\n font-family: var(--font);\n font-size: 12px;\n background: transparent;\n color: var(--muted);\n border: none;\n padding: 7px 16px;\n cursor: pointer;\n }\n .seg button.on { background: var(--primary); color: #131010; font-weight: 700; }\n .export-layout { display: flex; gap: 1.25rem; align-items: stretch; min-height: 62vh; }\n .term {\n flex: 1;\n min-width: 0;\n background: rgba(20, 20, 20, 0.94);\n border: 1px solid var(--border);\n border-left: 3px solid var(--primary);\n border-radius: var(--radius);\n padding: 1rem 1.2rem;\n overflow-y: auto;\n max-height: 72vh;\n font-size: 12.5px;\n line-height: 1.7;\n }\n .term .ln { white-space: pre-wrap; word-break: break-all; }\n .term .t { color: var(--muted); }\n .term .lv-log { color: var(--primary); }\n .term .lv-info { color: var(--info); font-weight: 700; }\n .term .lv-warn { color: var(--warning); font-weight: 700; }\n .term .lv-ok { color: var(--success); }\n .term .lv-error { color: var(--error); font-weight: 700; }\n .term .msg { color: var(--text); }\n .side {\n width: 300px;\n flex: none;\n background: rgba(20, 20, 20, 0.94);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 1.2rem 1.3rem;\n align-self: flex-start;\n position: sticky;\n top: 84px;\n }\n .side h3 { font-size: 13px; font-weight: 700; margin-bottom: 4px; }\n .side .sec { margin-bottom: 1.3rem; }\n .side .m { color: var(--muted); font-size: 12px; }\n .side .m.err { color: var(--error); }\n .side .file { color: var(--muted); font-size: 11.5px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; direction: rtl; text-align: left; }\n .side .sumrow { display: flex; justify-content: space-between; font-size: 12px; color: var(--muted); }\n .side .sumrow b { color: var(--text); font-weight: 600; }\n .donebar { display: none; margin-top: 1.1rem; gap: 10px; flex-wrap: wrap; }\n .donebar.visible { display: flex; }\n .toast {\n position: fixed;\n top: 76px;\n right: 20px;\n z-index: 20;\n background: var(--bg-panel);\n border-left: 3px solid var(--success);\n border-right: 3px solid var(--success);\n padding: 10px 16px;\n font-size: 13px;\n border-radius: 3px;\n opacity: 0;\n transition: opacity .2s ease;\n pointer-events: none;\n }\n .toast.show { opacity: 1; }\n footer {\n padding: 1.2rem 2.5rem;\n border-top: 1px solid var(--border);\n color: var(--muted);\n font-size: 12px;\n display: flex;\n justify-content: space-between;\n background: rgba(10, 10, 10, 0.82);\n }\n @media (max-width: 860px) {\n main { padding: 1.4rem; }\n .export-layout { flex-direction: column; }\n .side { width: 100%; position: static; }\n }\n</style>\n</head>\n<body>\n<canvas id=\"bg\"></canvas>\n<div class=\"shell\">\n <header>\n <div class=\"brand\"><span class=\"dim\">framer</span><span class=\"strong\">export</span></div>\n <div class=\"status\" id=\"status\"><span class=\"dot\">●</span><span id=\"statusText\">idle</span></div>\n </header>\n <main>\n <section class=\"screen active\" id=\"screen-gallery\">\n <h1>Select a tool</h1>\n <div class=\"sub\"><span class=\"star\">[*]</span> 25+ platforms supported. Click one, paste the URL, export.</div>\n <div class=\"search-wrap\">\n <input type=\"text\" id=\"searchInput\" placeholder=\"search a platform...\" spellcheck=\"false\" autocomplete=\"off\" />\n </div>\n <div class=\"grid\" id=\"gallery\"></div>\n </section>\n\n <section class=\"screen\" id=\"screen-url\">\n <div class=\"chip\">tool <b id=\"urlTool\"></b></div>\n <div class=\"panel\">\n <h1>Site URL</h1>\n <div class=\"sub\">The public URL of the site to export.</div>\n <div class=\"field-label\">URL</div>\n <input type=\"text\" id=\"urlInput\" placeholder=\"https://mysite.framer.app\" spellcheck=\"false\" autocomplete=\"off\" />\n <div class=\"error-line\" id=\"urlError\"></div>\n <div class=\"row\">\n <button class=\"btn primary\" id=\"urlNext\">Continue</button>\n <button class=\"btn ghost\" id=\"urlBack\">Back</button>\n </div>\n </div>\n </section>\n\n <section class=\"screen\" id=\"screen-options\">\n <div class=\"chip\">tool <b id=\"optTool\"></b> url <b id=\"optUrl\"></b></div>\n <div class=\"panel\">\n <h1>Options</h1>\n <div class=\"sub\">Everything has a sensible default.</div>\n <div class=\"opt on\" id=\"optPretty\">\n <div class=\"box\">✓</div>\n <div class=\"label\"><b>Pretty-print JS files</b><span>Reformat downloaded scripts for readability</span></div>\n </div>\n <div class=\"opt\" id=\"optSubpages\">\n <div class=\"box\">✓</div>\n <div class=\"label\"><b>Export sub-pages</b><span>Crawl internal links and mirror every page</span></div>\n </div>\n <div class=\"opt\" style=\"cursor: default;\">\n <div class=\"label\" style=\"flex:1;\"><b>Download concurrency</b><span>Parallel downloads</span></div>\n <div class=\"seg\" id=\"optConcurrency\">\n <button data-v=\"6\">6</button>\n <button data-v=\"12\" class=\"on\">12</button>\n <button data-v=\"20\">20</button>\n </div>\n </div>\n <div style=\"margin-top: 1.4rem;\">\n <div class=\"field-label\">Output directory</div>\n <input type=\"text\" id=\"outInput\" spellcheck=\"false\" autocomplete=\"off\" />\n </div>\n <div class=\"row\">\n <button class=\"btn primary\" id=\"startBtn\">Start export</button>\n <button class=\"btn ghost\" id=\"optBack\">Back</button>\n </div>\n </div>\n </section>\n\n <section class=\"screen\" id=\"screen-export\">\n <div class=\"chip\">tool <b id=\"runTool\"></b> url <b id=\"runUrl\"></b></div>\n <div class=\"export-layout\">\n <div class=\"term\" id=\"term\"></div>\n <aside class=\"side\">\n <div class=\"sec\">\n <h3>Export</h3>\n <div class=\"m\" id=\"sidePhase\">starting</div>\n <div class=\"m\" id=\"sideElapsed\">0:00 elapsed</div>\n </div>\n <div class=\"sec\">\n <h3>Assets</h3>\n <div class=\"m\" id=\"sideAssets\">0 downloaded</div>\n <div class=\"m err\" id=\"sideFailed\" style=\"display:none;\"></div>\n <div class=\"m\" id=\"sideWritten\">0 files written</div>\n </div>\n <div class=\"sec\">\n <h3>Files</h3>\n <div id=\"sideFiles\"><div class=\"m\">waiting for output...</div></div>\n </div>\n <div class=\"sec\" id=\"sideSummarySec\" style=\"display:none;\">\n <h3>Summary</h3>\n <div id=\"sideSummary\"></div>\n </div>\n <div class=\"donebar\" id=\"donebar\">\n <button class=\"btn\" id=\"copyLogs\">Copy logs</button>\n <button class=\"btn\" id=\"copyServe\">Copy serve command</button>\n <button class=\"btn ghost\" id=\"newExport\">New export</button>\n </div>\n </aside>\n </div>\n </section>\n </main>\n <footer>\n <span id=\"footLeft\">framer-export</span>\n <span>[*] served locally · nothing leaves your machine</span>\n </footer>\n</div>\n<div class=\"toast\" id=\"toast\"></div>\n<script src=\"/pixel-blast.js\"></script>\n<script src=\"/app.js\"></script>\n</body>\n</html>\n`;\n","export const APP_JS = `(function () {\n var CAT_COLORS = {\n builder: 'var(--primary)',\n landing: 'var(--warning)',\n cms: 'var(--info)',\n course: 'var(--accent)',\n ecommerce: 'var(--success)',\n ai: 'var(--secondary)'\n };\n var state = {\n tool: null,\n toolLabel: 'Auto-detect',\n url: '',\n pretty: true,\n subpages: false,\n concurrency: 12,\n outDir: '',\n running: false,\n serveCommand: '',\n startedAt: 0\n };\n var es = null;\n var elapsedTimer = null;\n\n function $(id) { return document.getElementById(id); }\n function show(name) {\n var screens = document.querySelectorAll('.screen');\n for (var i = 0; i < screens.length; i++) screens[i].classList.remove('active');\n $('screen-' + name).classList.add('active');\n window.scrollTo(0, 0);\n }\n function setStatus(kind, text) {\n var el = $('status');\n el.className = 'status ' + kind;\n $('statusText').textContent = text;\n }\n function toast(msg) {\n var el = $('toast');\n el.textContent = msg;\n el.classList.add('show');\n setTimeout(function () { el.classList.remove('show'); }, 1800);\n }\n function copyText(text, okMsg) {\n function fallback() {\n var ta = document.createElement('textarea');\n ta.value = text;\n document.body.appendChild(ta);\n ta.select();\n try { document.execCommand('copy'); toast(okMsg); } catch (e) { toast('copy failed'); }\n document.body.removeChild(ta);\n }\n if (navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(text).then(function () { toast(okMsg); }, fallback);\n } else fallback();\n }\n\n if (window.PixelBlast) {\n window.PixelBlast.mount($('bg'), {\n variant: 'circle',\n pixelSize: 5,\n color: '#FAB283',\n patternScale: 3,\n patternDensity: 1.1,\n pixelSizeJitter: 0.4,\n rippleIntensityScale: 1.4,\n rippleSpeed: 0.4,\n rippleThickness: 0.12,\n speed: 0.5,\n edgeFade: 0.18\n });\n }\n\n var galleryData = null;\n\n function renderGallery(filter) {\n if (!galleryData) return;\n var q = (filter || '').trim().toLowerCase();\n var grid = $('gallery');\n grid.innerHTML = '';\n if (!q) {\n var auto = document.createElement('div');\n auto.className = 'card auto';\n auto.innerHTML = '<div class=\"cat\"><span class=\"dot\" style=\"color: var(--muted)\">●</span>smart</div>' +\n '<div class=\"name\">Auto-detect</div>' +\n '<div class=\"hint\">figure out the platform from the URL</div>';\n auto.onclick = function () { pickTool(null, 'Auto-detect'); };\n grid.appendChild(auto);\n }\n var any = false;\n galleryData.categories.forEach(function (cat) {\n var matches = cat.platforms.filter(function (p) {\n return !q || p.displayName.toLowerCase().indexOf(q) !== -1 || cat.label.toLowerCase().indexOf(q) !== -1;\n });\n if (!matches.length) return;\n any = true;\n var heading = document.createElement('div');\n heading.className = 'cat-heading';\n heading.textContent = cat.label;\n grid.appendChild(heading);\n matches.forEach(function (p) {\n var card = document.createElement('div');\n card.className = 'card';\n var color = CAT_COLORS[cat.id] || 'var(--muted)';\n var badge = p.beta ? '<span class=\"badge-beta\">beta</span>' : '';\n card.innerHTML = '<div class=\"cat\"><span class=\"dot\" style=\"color: ' + color + '\">●</span>' + cat.label + '</div>' +\n '<div class=\"name\">' + p.displayName + badge + '</div>' +\n '<div class=\"hint\">export a ' + p.displayName + ' site</div>';\n card.onclick = function () { pickTool(p.name, p.displayName); };\n grid.appendChild(card);\n });\n });\n if (!any && q) {\n var empty = document.createElement('div');\n empty.className = 'cat-heading';\n empty.style.color = 'var(--muted)';\n empty.textContent = 'No results found';\n grid.appendChild(empty);\n }\n }\n\n function loadGallery() {\n fetch('/api/platforms').then(function (r) { return r.json(); }).then(function (data) {\n galleryData = data;\n renderGallery('');\n });\n }\n\n $('searchInput').addEventListener('input', function () {\n renderGallery(this.value);\n });\n\n function pickTool(name, label) {\n state.tool = name;\n state.toolLabel = label;\n $('urlTool').textContent = label;\n $('urlError').textContent = '';\n show('url');\n $('urlInput').focus();\n }\n\n function validUrl(value) {\n try { new URL(value); return true; } catch (e) { return false; }\n }\n\n $('urlBack').onclick = function () { show('gallery'); };\n $('urlNext').onclick = function () {\n var value = $('urlInput').value.trim();\n if (!validUrl(value)) {\n $('urlError').textContent = 'Invalid URL. Enter a valid URL (https://...)';\n return;\n }\n state.url = value;\n $('optTool').textContent = state.toolLabel;\n $('optUrl').textContent = value;\n var q = '/api/derive?url=' + encodeURIComponent(value) + (state.tool ? '&platform=' + encodeURIComponent(state.tool) : '');\n fetch(q).then(function (r) { return r.json(); }).then(function (d) {\n $('outInput').value = './' + d.name;\n state.outDir = './' + d.name;\n });\n show('options');\n };\n $('urlInput').addEventListener('keydown', function (e) {\n if (e.key === 'Enter') $('urlNext').click();\n });\n\n $('optPretty').onclick = function () {\n state.pretty = !state.pretty;\n this.classList.toggle('on', state.pretty);\n };\n $('optSubpages').onclick = function () {\n state.subpages = !state.subpages;\n this.classList.toggle('on', state.subpages);\n };\n var segButtons = $('optConcurrency').querySelectorAll('button');\n for (var i = 0; i < segButtons.length; i++) {\n segButtons[i].onclick = function () {\n for (var j = 0; j < segButtons.length; j++) segButtons[j].classList.remove('on');\n this.classList.add('on');\n state.concurrency = parseInt(this.getAttribute('data-v'), 10);\n };\n }\n $('optBack').onclick = function () { show('url'); };\n\n $('startBtn').onclick = function () {\n if (state.running) return;\n state.outDir = $('outInput').value.trim() || state.outDir;\n state.running = true;\n state.startedAt = Date.now();\n $('runTool').textContent = state.toolLabel;\n $('runUrl').textContent = state.url;\n $('term').innerHTML = '';\n $('donebar').classList.remove('visible');\n $('sideSummarySec').style.display = 'none';\n setStatus('running', 'exporting');\n show('export');\n startElapsed();\n connectEvents();\n fetch('/api/export', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n url: state.url,\n platform: state.tool,\n outDir: state.outDir,\n subpages: state.subpages,\n prettyPrint: state.pretty,\n concurrency: state.concurrency\n })\n }).then(function (r) {\n if (!r.ok) return r.json().then(function (d) { throw new Error(d.error || 'export failed'); });\n }).catch(function (e) {\n appendLog({ time: '', level: 'error', message: e.message });\n setStatus('error', 'error');\n state.running = false;\n stopElapsed();\n });\n };\n\n function startElapsed() {\n stopElapsed();\n elapsedTimer = setInterval(function () {\n var s = Math.floor((Date.now() - state.startedAt) / 1000);\n var m = Math.floor(s / 60);\n var r = s % 60;\n $('sideElapsed').textContent = m + ':' + (r < 10 ? '0' : '') + r + ' elapsed';\n }, 1000);\n }\n function stopElapsed() {\n if (elapsedTimer) clearInterval(elapsedTimer);\n elapsedTimer = null;\n }\n\n function appendLog(rec) {\n var term = $('term');\n var nearBottom = term.scrollTop + term.clientHeight >= term.scrollHeight - 60;\n var line = document.createElement('div');\n line.className = 'ln';\n var t = rec.time ? '[' + rec.time + '] ' : '';\n line.innerHTML = '<span class=\"t\">' + t + '</span>' +\n '<span class=\"lv-' + rec.level + '\">[' + rec.level + ']</span> ' +\n '<span class=\"msg\"></span>';\n line.querySelector('.msg').textContent = rec.message;\n term.appendChild(line);\n while (term.childNodes.length > 3000) term.removeChild(term.firstChild);\n if (nearBottom) term.scrollTop = term.scrollHeight;\n }\n\n function renderProgress(p) {\n $('sidePhase').textContent = p.phase || 'starting';\n $('sideAssets').textContent = p.downloaded + (p.totalAssets ? '/' + p.totalAssets : '') + ' downloaded';\n if (p.failed > 0) {\n $('sideFailed').style.display = 'block';\n $('sideFailed').textContent = p.failed + ' failed';\n } else {\n $('sideFailed').style.display = 'none';\n }\n var written = p.written + ' files written';\n if (p.subpages > 0) written += ' · ' + p.subpages + ' sub-pages';\n $('sideWritten').textContent = written;\n var files = $('sideFiles');\n files.innerHTML = '';\n if (!p.recentFiles || p.recentFiles.length === 0) {\n files.innerHTML = '<div class=\"m\">waiting for output...</div>';\n } else {\n p.recentFiles.forEach(function (f) {\n var d = document.createElement('div');\n d.className = 'file';\n d.textContent = f;\n files.appendChild(d);\n });\n }\n }\n\n function renderSummary(entries) {\n var el = $('sideSummary');\n el.innerHTML = '';\n entries.forEach(function (e) {\n if (!e.count) return;\n var row = document.createElement('div');\n row.className = 'sumrow';\n row.innerHTML = '<span>' + e.dir + '</span><b>' + e.count + ' ' + e.kind + '</b>';\n el.appendChild(row);\n });\n $('sideSummarySec').style.display = 'block';\n }\n\n function connectEvents() {\n if (es) return;\n es = new EventSource('/api/events');\n es.addEventListener('log', function (e) { appendLog(JSON.parse(e.data)); });\n es.addEventListener('progress', function (e) { renderProgress(JSON.parse(e.data)); });\n es.addEventListener('status', function (e) {\n var d = JSON.parse(e.data);\n if (d.state === 'done') {\n state.running = false;\n state.serveCommand = d.serveCommand || '';\n setStatus('done', 'done');\n stopElapsed();\n if (d.summary) renderSummary(d.summary);\n $('donebar').classList.add('visible');\n $('footLeft').textContent = d.outDir || 'framer-export';\n } else if (d.state === 'error') {\n state.running = false;\n setStatus('error', 'error');\n stopElapsed();\n appendLog({ time: '', level: 'error', message: d.error || 'export failed' });\n $('donebar').classList.add('visible');\n } else if (d.state === 'running') {\n setStatus('running', 'exporting');\n }\n });\n }\n\n $('copyLogs').onclick = function () {\n fetch('/api/log').then(function (r) { return r.text(); }).then(function (text) {\n copyText(text, 'logs copied');\n });\n };\n $('copyServe').onclick = function () {\n copyText(state.serveCommand || 'node serve.js', 'serve command copied');\n };\n $('newExport').onclick = function () {\n setStatus('idle', 'idle');\n show('gallery');\n };\n\n loadGallery();\n})();\n`;\n","const FRAGMENT_LINES = [\n '#version 300 es',\n 'precision highp float;',\n 'uniform vec3 uColor;',\n 'uniform vec2 uResolution;',\n 'uniform float uTime;',\n 'uniform float uPixelSize;',\n 'uniform float uScale;',\n 'uniform float uDensity;',\n 'uniform float uPixelJitter;',\n 'uniform int uEnableRipples;',\n 'uniform float uRippleSpeed;',\n 'uniform float uRippleThickness;',\n 'uniform float uRippleIntensity;',\n 'uniform float uEdgeFade;',\n 'uniform int uShapeType;',\n 'const int SHAPE_SQUARE = 0;',\n 'const int SHAPE_CIRCLE = 1;',\n 'const int SHAPE_TRIANGLE = 2;',\n 'const int SHAPE_DIAMOND = 3;',\n 'const int MAX_CLICKS = 10;',\n 'uniform vec2 uClickPos [MAX_CLICKS];',\n 'uniform float uClickTimes[MAX_CLICKS];',\n 'out vec4 fragColor;',\n 'float Bayer2(vec2 a) { a = floor(a); return fract(a.x / 2. + a.y * a.y * .75); }',\n '#define Bayer4(a) (Bayer2(.5*(a))*0.25 + Bayer2(a))',\n '#define Bayer8(a) (Bayer4(.5*(a))*0.25 + Bayer2(a))',\n '#define FBM_OCTAVES 5',\n '#define FBM_LACUNARITY 1.25',\n '#define FBM_GAIN 1.0',\n 'float hash11(float n){ return fract(sin(n)*43758.5453); }',\n 'float vnoise(vec3 p){',\n ' vec3 ip = floor(p);',\n ' vec3 fp = fract(p);',\n ' float n000 = hash11(dot(ip + vec3(0.0,0.0,0.0), vec3(1.0,57.0,113.0)));',\n ' float n100 = hash11(dot(ip + vec3(1.0,0.0,0.0), vec3(1.0,57.0,113.0)));',\n ' float n010 = hash11(dot(ip + vec3(0.0,1.0,0.0), vec3(1.0,57.0,113.0)));',\n ' float n110 = hash11(dot(ip + vec3(1.0,1.0,0.0), vec3(1.0,57.0,113.0)));',\n ' float n001 = hash11(dot(ip + vec3(0.0,0.0,1.0), vec3(1.0,57.0,113.0)));',\n ' float n101 = hash11(dot(ip + vec3(1.0,0.0,1.0), vec3(1.0,57.0,113.0)));',\n ' float n011 = hash11(dot(ip + vec3(0.0,1.0,1.0), vec3(1.0,57.0,113.0)));',\n ' float n111 = hash11(dot(ip + vec3(1.0,1.0,1.0), vec3(1.0,57.0,113.0)));',\n ' vec3 w = fp*fp*fp*(fp*(fp*6.0-15.0)+10.0);',\n ' float x00 = mix(n000, n100, w.x);',\n ' float x10 = mix(n010, n110, w.x);',\n ' float x01 = mix(n001, n101, w.x);',\n ' float x11 = mix(n011, n111, w.x);',\n ' float y0 = mix(x00, x10, w.y);',\n ' float y1 = mix(x01, x11, w.y);',\n ' return mix(y0, y1, w.z) * 2.0 - 1.0;',\n '}',\n 'float fbm2(vec2 uv, float t){',\n ' vec3 p = vec3(uv * uScale, t);',\n ' float amp = 1.0;',\n ' float freq = 1.0;',\n ' float sum = 1.0;',\n ' for (int i = 0; i < FBM_OCTAVES; ++i){',\n ' sum += amp * vnoise(p * freq);',\n ' freq *= FBM_LACUNARITY;',\n ' amp *= FBM_GAIN;',\n ' }',\n ' return sum * 0.5 + 0.5;',\n '}',\n 'float maskCircle(vec2 p, float cov){',\n ' float r = sqrt(cov) * .25;',\n ' float d = length(p - 0.5) - r;',\n ' float aa = 0.5 * fwidth(d);',\n ' return cov * (1.0 - smoothstep(-aa, aa, d * 2.0));',\n '}',\n 'float maskTriangle(vec2 p, vec2 id, float cov){',\n ' bool flip = mod(id.x + id.y, 2.0) > 0.5;',\n ' if (flip) p.x = 1.0 - p.x;',\n ' float r = sqrt(cov);',\n ' float d = p.y - r*(1.0 - p.x);',\n ' float aa = fwidth(d);',\n ' return cov * clamp(0.5 - d/aa, 0.0, 1.0);',\n '}',\n 'float maskDiamond(vec2 p, float cov){',\n ' float r = sqrt(cov) * 0.564;',\n ' return step(abs(p.x - 0.49) + abs(p.y - 0.49), r);',\n '}',\n 'void main(){',\n ' float pixelSize = uPixelSize;',\n ' vec2 fragCoord = gl_FragCoord.xy - uResolution * .5;',\n ' float aspectRatio = uResolution.x / uResolution.y;',\n ' vec2 pixelId = floor(fragCoord / pixelSize);',\n ' vec2 pixelUV = fract(fragCoord / pixelSize);',\n ' float cellPixelSize = 8.0 * pixelSize;',\n ' vec2 cellId = floor(fragCoord / cellPixelSize);',\n ' vec2 cellCoord = cellId * cellPixelSize;',\n ' vec2 uv = cellCoord / uResolution * vec2(aspectRatio, 1.0);',\n ' float base = fbm2(uv, uTime * 0.05);',\n ' base = base * 0.5 - 0.65;',\n ' float feed = base + (uDensity - 0.5) * 0.3;',\n ' float speed = uRippleSpeed;',\n ' float thickness = uRippleThickness;',\n ' const float dampT = 1.0;',\n ' const float dampR = 10.0;',\n ' if (uEnableRipples == 1) {',\n ' for (int i = 0; i < MAX_CLICKS; ++i){',\n ' vec2 pos = uClickPos[i];',\n ' if (pos.x < 0.0) continue;',\n ' vec2 cuv = (((pos - uResolution * .5 - cellPixelSize * .5) / (uResolution))) * vec2(aspectRatio, 1.0);',\n ' float t = max(uTime - uClickTimes[i], 0.0);',\n ' float r = distance(uv, cuv);',\n ' float waveR = speed * t;',\n ' float ring = exp(-pow((r - waveR) / thickness, 2.0));',\n ' float atten = exp(-dampT * t) * exp(-dampR * r);',\n ' feed = max(feed, ring * atten * uRippleIntensity);',\n ' }',\n ' }',\n ' float bayer = Bayer8(fragCoord / uPixelSize) - 0.5;',\n ' float bw = step(0.5, feed + bayer);',\n ' float h = fract(sin(dot(floor(fragCoord / uPixelSize), vec2(127.1, 311.7))) * 43758.5453);',\n ' float jitterScale = 1.0 + (h - 0.5) * uPixelJitter;',\n ' float coverage = bw * jitterScale;',\n ' float M;',\n ' if (uShapeType == SHAPE_CIRCLE) M = maskCircle (pixelUV, coverage);',\n ' else if (uShapeType == SHAPE_TRIANGLE) M = maskTriangle(pixelUV, pixelId, coverage);',\n ' else if (uShapeType == SHAPE_DIAMOND) M = maskDiamond(pixelUV, coverage);',\n ' else M = coverage;',\n ' if (uEdgeFade > 0.0) {',\n ' vec2 norm = gl_FragCoord.xy / uResolution;',\n ' float edge = min(min(norm.x, norm.y), min(1.0 - norm.x, 1.0 - norm.y));',\n ' float fade = smoothstep(0.0, uEdgeFade, edge);',\n ' M *= fade;',\n ' }',\n ' vec3 color = uColor;',\n ' vec3 srgbColor = mix(',\n ' color * 12.92,',\n ' 1.055 * pow(color, vec3(1.0 / 2.4)) - 0.055,',\n ' step(0.0031308, color)',\n ' );',\n ' fragColor = vec4(srgbColor, M);',\n '}',\n];\n\nconst VERTEX_LINES = [\n '#version 300 es',\n 'in vec2 position;',\n 'void main() {',\n ' gl_Position = vec4(position, 0.0, 1.0);',\n '}',\n];\n\nconst CLIENT_LINES = [\n '(function () {',\n ' var SHAPES = { square: 0, circle: 1, triangle: 2, diamond: 3 };',\n ' var MAX_CLICKS = 10;',\n ' function hexToRgb(hex) {',\n \" var value = hex.replace('#', '');\",\n ' var n = parseInt(value, 16);',\n ' return [((n >> 16) & 255) / 255, ((n >> 8) & 255) / 255, (n & 255) / 255];',\n ' }',\n ' function compile(gl, type, source) {',\n ' var shader = gl.createShader(type);',\n ' gl.shaderSource(shader, source);',\n ' gl.compileShader(shader);',\n ' if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {',\n ' throw new Error(gl.getShaderInfoLog(shader) || \"shader compile failed\");',\n ' }',\n ' return shader;',\n ' }',\n ' function mount(canvas, opts) {',\n ' opts = opts || {};',\n ' var gl = canvas.getContext(\"webgl2\", { alpha: true, antialias: false });',\n ' if (!gl) return null;',\n ' var program = gl.createProgram();',\n ' gl.attachShader(program, compile(gl, gl.VERTEX_SHADER, window.__PB_VERT__));',\n ' gl.attachShader(program, compile(gl, gl.FRAGMENT_SHADER, window.__PB_FRAG__));',\n ' gl.linkProgram(program);',\n ' if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {',\n ' throw new Error(gl.getProgramInfoLog(program) || \"link failed\");',\n ' }',\n ' gl.useProgram(program);',\n ' var buffer = gl.createBuffer();',\n ' gl.bindBuffer(gl.ARRAY_BUFFER, buffer);',\n ' gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);',\n ' var loc = gl.getAttribLocation(program, \"position\");',\n ' gl.enableVertexAttribArray(loc);',\n ' gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);',\n ' gl.enable(gl.BLEND);',\n ' gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);',\n ' var U = {};',\n ' [\"uColor\",\"uResolution\",\"uTime\",\"uPixelSize\",\"uScale\",\"uDensity\",\"uPixelJitter\",\"uEnableRipples\",\"uRippleSpeed\",\"uRippleThickness\",\"uRippleIntensity\",\"uEdgeFade\",\"uShapeType\",\"uClickPos\",\"uClickTimes\"].forEach(function (name) {',\n ' U[name] = gl.getUniformLocation(program, name);',\n ' });',\n ' var color = hexToRgb(opts.color || \"#FAB283\");',\n ' var pixelSize = opts.pixelSize || 5;',\n ' var dpr = Math.min(window.devicePixelRatio || 1, 2);',\n ' var clicks = new Float32Array(MAX_CLICKS * 2).fill(-1);',\n ' var clickTimes = new Float32Array(MAX_CLICKS);',\n ' var clickIx = 0;',\n ' var timeOffset = Math.random() * 1000;',\n ' var speed = opts.speed || 0.5;',\n ' var start = performance.now();',\n ' function resize() {',\n ' var w = canvas.clientWidth || window.innerWidth;',\n ' var h = canvas.clientHeight || window.innerHeight;',\n ' canvas.width = Math.floor(w * dpr);',\n ' canvas.height = Math.floor(h * dpr);',\n ' gl.viewport(0, 0, canvas.width, canvas.height);',\n ' }',\n ' resize();',\n ' window.addEventListener(\"resize\", resize);',\n ' document.addEventListener(\"pointerdown\", function (e) {',\n ' var rect = canvas.getBoundingClientRect();',\n ' var fx = (e.clientX - rect.left) * (canvas.width / rect.width);',\n ' var fy = (rect.height - (e.clientY - rect.top)) * (canvas.height / rect.height);',\n ' clicks[clickIx * 2] = fx;',\n ' clicks[clickIx * 2 + 1] = fy;',\n ' clickTimes[clickIx] = timeOffset + ((performance.now() - start) / 1000) * speed;',\n ' clickIx = (clickIx + 1) % MAX_CLICKS;',\n ' }, { passive: true });',\n ' function frame() {',\n ' var t = timeOffset + ((performance.now() - start) / 1000) * speed;',\n ' gl.uniform3f(U.uColor, color[0], color[1], color[2]);',\n ' gl.uniform2f(U.uResolution, canvas.width, canvas.height);',\n ' gl.uniform1f(U.uTime, t);',\n ' gl.uniform1f(U.uPixelSize, pixelSize * dpr);',\n ' gl.uniform1f(U.uScale, opts.patternScale || 3);',\n ' gl.uniform1f(U.uDensity, opts.patternDensity || 1.2);',\n ' gl.uniform1f(U.uPixelJitter, opts.pixelSizeJitter || 0.5);',\n ' gl.uniform1i(U.uEnableRipples, opts.enableRipples === false ? 0 : 1);',\n ' gl.uniform1f(U.uRippleSpeed, opts.rippleSpeed || 0.4);',\n ' gl.uniform1f(U.uRippleThickness, opts.rippleThickness || 0.12);',\n ' gl.uniform1f(U.uRippleIntensity, opts.rippleIntensityScale || 1.5);',\n ' gl.uniform1f(U.uEdgeFade, opts.edgeFade == null ? 0.25 : opts.edgeFade);',\n ' gl.uniform1i(U.uShapeType, SHAPES[opts.variant || \"circle\"] || 0);',\n ' gl.uniform2fv(U.uClickPos, clicks);',\n ' gl.uniform1fv(U.uClickTimes, clickTimes);',\n ' gl.clearColor(0, 0, 0, 0);',\n ' gl.clear(gl.COLOR_BUFFER_BIT);',\n ' gl.drawArrays(gl.TRIANGLES, 0, 3);',\n ' requestAnimationFrame(frame);',\n ' }',\n ' requestAnimationFrame(frame);',\n ' return { gl: gl };',\n ' }',\n ' window.PixelBlast = { mount: mount };',\n '})();',\n];\n\nexport const PIXEL_BLAST_JS = [\n 'window.__PB_VERT__ = ' + JSON.stringify(VERTEX_LINES.join('\\n')) + ';',\n 'window.__PB_FRAG__ = ' + JSON.stringify(FRAGMENT_LINES.join('\\n')) + ';',\n CLIENT_LINES.join('\\n'),\n].join('\\n');\n","import path from 'path';\nimport crypto from 'crypto';\nimport { URL } from 'url';\nimport type { PlatformHandler } from '../platforms/types.js';\ninterface AssetEntry {\n localPath: string;\n}\nexport function replaceUrl(text: string, url: string, rel: string): string {\n const parts: string[] = text.split(url);\n if (parts.length === 1) return text;\n let out: string = parts[0];\n for (let i = 1; i < parts.length; i++) {\n out += (parts[i].startsWith('/') ? url : rel) + parts[i];\n }\n return out;\n}\nexport class AssetMap {\n entries: Map<string, AssetEntry> = new Map();\n buffers: Map<string, Buffer> = new Map();\n localPathFor(urlStr: string, platform?: PlatformHandler): string | null {\n if (this.entries.has(urlStr)) return this.entries.get(urlStr)!.localPath;\n let parsed: URL;\n try {\n parsed = new URL(urlStr);\n } catch {\n return null;\n }\n const host: string = parsed.hostname;\n const pathname: string = parsed.pathname;\n const ext: string = path.extname(pathname.split('?')[0]).toLowerCase();\n let dir: string | null = null;\n if (platform) {\n dir = platform.mapAssetDir(host, pathname, ext);\n }\n if (!dir) {\n dir = this.fallbackDir(host, ext);\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 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 if (ext === '.mjs' || ext === '.js') {\n filename = baseName.replace(/[^a-zA-Z0-9._-]/g, '_');\n }\n const localPath: string = `${dir}/${filename}`;\n this.entries.set(urlStr, { localPath });\n const base: string = urlStr.split('?')[0];\n if (base !== urlStr && !this.entries.has(base)) {\n this.entries.set(base, { localPath });\n }\n return localPath;\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 let rel: string = fromDir ? path.posix.relative(fromDir, localPath) : localPath;\n if (fromDir && !rel.startsWith('.')) rel = './' + rel;\n out = replaceUrl(out, url, rel);\n if (url.includes('&')) {\n out = replaceUrl(out, url.replace(/&/g, '&'), rel);\n }\n }\n return out;\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, deviceScaleFactor: 1 },\n timeout: 90000,\n scrollStep: 250,\n scrollDelay: 60,\n concurrency: 12,\n retries: 3,\n dlTimeout: 30000,\n sharedStripDomains: [\n 'sentry.io',\n 'www.googletagmanager.com',\n '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';\nimport { THEME } from '../cli/theme.js';\nlet _cooking: CookingSpinner | null = null;\nexport function setCooking(spinner: CookingSpinner | null): void {\n _cooking = spinner;\n}\nconst T = (): string => new Date().toISOString().slice(11, 19);\nfunction trunc(text: string, max: number): string {\n if (text.length <= max) return text;\n return text.slice(0, max - 2) + '..';\n}\nexport type LogLevel = 'log' | 'info' | 'warn' | 'ok' | 'error';\nexport interface LogRecord {\n time: string;\n level: LogLevel;\n message: string;\n}\nexport type LogListener = (record: LogRecord) => void;\nconst _history: LogRecord[] = [];\nconst _listeners = new Set<LogListener>();\nconst HISTORY_LIMIT = 5000;\nexport function onLog(listener: LogListener): () => void {\n _listeners.add(listener);\n return () => _listeners.delete(listener);\n}\nexport function getLogHistory(): readonly LogRecord[] {\n return _history;\n}\nexport function clearLogHistory(): void {\n _history.length = 0;\n}\nlet _messageWidth = 120;\nlet _renderHook: (() => void) | null = null;\nexport function setMessageWidth(width: number | null): void {\n _messageWidth = width ?? 120;\n}\nexport function setRenderHook(hook: (() => void) | null): void {\n _renderHook = hook;\n}\nfunction record(level: LogLevel, message: string): LogRecord {\n const entry: LogRecord = { time: T(), level, message };\n _history.push(entry);\n if (_history.length > HISTORY_LIMIT) _history.shift();\n for (const listener of _listeners) listener(entry);\n return entry;\n}\nfunction output(line: string, channel: 'log' | 'warn' | 'error' = 'log'): void {\n if (_cooking) _cooking.log(line);\n else if (channel === 'warn') console.warn(line);\n else if (channel === 'error') console.error(line);\n else console.log(line);\n _renderHook?.();\n}\nconst LOG_PALETTE: Array<(s: string) => string> = [\n (s) => chalk.hex(THEME.primary)(s),\n (s) => chalk.hex(THEME.primarySoft)(s),\n (s) => chalk.hex(THEME.secondary)(s),\n (s) => chalk.hex(THEME.accent)(s),\n (s) => chalk.hex(THEME.info)(s),\n (s) => chalk.hex(THEME.text)(s),\n];\nlet _li = 0;\nexport const log = (m: string): void => {\n const { time } = record('log', m);\n _li++;\n const c = LOG_PALETTE[_li % LOG_PALETTE.length];\n output(\n `${chalk.hex(THEME.muted)(`[${time}]`)} ${chalk.hex(THEME.primary)('[log]')} ${c(trunc(m, _messageWidth))}`\n );\n};\nconst INFO_PALETTE: Array<(s: string) => string> = [\n (s) => chalk.hex(THEME.info)(s),\n (s) => chalk.hex(THEME.secondary)(s),\n (s) => chalk.hex(THEME.primarySoft)(s),\n];\nlet _ii = 0;\nexport const info = (m: string): void => {\n const { time } = record('info', m);\n _ii++;\n const c = INFO_PALETTE[_ii % INFO_PALETTE.length];\n output(\n `${chalk.hex(THEME.muted)(`[${time}]`)} ${chalk.hex(THEME.info).bold('[info]')} ${c(trunc(m, _messageWidth))}`\n );\n};\nexport const warn = (m: string): void => {\n const { time } = record('warn', m);\n const line = `${chalk.hex(THEME.muted)(`[${time}]`)} ${chalk.hex(THEME.warning).bold('[warn]')} ${chalk.hex(THEME.warning)(trunc(m, _messageWidth))}`;\n output(line, 'warn');\n};\nexport const success = (m: string): void => {\n const { time } = record('ok', m);\n output(\n `${chalk.hex(THEME.muted)(`[${time}]`)} ${chalk.hex(THEME.success)('[ok]')} ${chalk.hex(THEME.success)(trunc(m, _messageWidth))}`\n );\n};\nexport const error = (m: string): void => {\n const { time } = record('error', m);\n const line = `${chalk.hex(THEME.muted)(`[${time}]`)} ${chalk.hex(THEME.error)('[error]')} ${chalk.hex(THEME.error)(trunc(m, _messageWidth))}`;\n output(line, 'error');\n};\n","export interface ExportProgress {\n phase: string;\n startedAt: number;\n totalAssets: number;\n downloaded: number;\n failed: number;\n written: number;\n subpages: number;\n recentFiles: string[];\n}\n\nexport type ProgressListener = (progress: ExportProgress) => void;\n\nconst RECENT_LIMIT = 10;\n\nconst state: ExportProgress = {\n phase: '',\n startedAt: 0,\n totalAssets: 0,\n downloaded: 0,\n failed: 0,\n written: 0,\n subpages: 0,\n recentFiles: [],\n};\n\nconst listeners = new Set<ProgressListener>();\n\nfunction emit(): void {\n for (const listener of listeners) listener(state);\n}\n\nexport function onProgress(listener: ProgressListener): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function getProgress(): Readonly<ExportProgress> {\n return state;\n}\n\nexport function resetProgress(): void {\n state.phase = '';\n state.startedAt = Date.now();\n state.totalAssets = 0;\n state.downloaded = 0;\n state.failed = 0;\n state.written = 0;\n state.subpages = 0;\n state.recentFiles = [];\n emit();\n}\n\nexport function setPhase(phase: string): void {\n state.phase = phase;\n emit();\n}\n\nexport function setTotalAssets(total: number): void {\n state.totalAssets = total;\n emit();\n}\n\nexport function noteDownload(ok: boolean): void {\n if (ok) state.downloaded++;\n else state.failed++;\n emit();\n}\n\nexport function noteFile(relPath: string): void {\n state.written++;\n state.recentFiles.push(relPath.replace(/\\\\/g, '/'));\n if (state.recentFiles.length > RECENT_LIMIT) state.recentFiles.shift();\n emit();\n}\n\nexport function noteSubpage(): void {\n state.subpages++;\n emit();\n}\n","import chalk from 'chalk';\nimport { stdout } from 'node:process';\nimport { THEME, stripAnsi, ui } from './theme.js';\nimport { onProgress, getProgress, type ExportProgress } from '../exporter/progress.js';\nimport { setMessageWidth, setRenderHook } from '../logger/index.js';\n\nconst SIDEBAR_WIDTH = 40;\nconst MIN_COLUMNS = 100;\nconst TOP_ROW = 2;\n\nfunction leftTruncate(text: string, max: number): string {\n if (text.length <= max) return text;\n return '…' + text.slice(-(max - 1));\n}\n\nfunction row(content: string = ''): string {\n const visible = stripAnsi(content).length;\n const pad = Math.max(0, SIDEBAR_WIDTH - visible);\n return chalk.bgHex(THEME.panel)(content + ' '.repeat(pad));\n}\n\nfunction formatElapsed(startedAt: number): string {\n const seconds = Math.max(0, Math.floor((Date.now() - startedAt) / 1000));\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return `${m}:${String(s).padStart(2, '0')}`;\n}\n\nexport class ExportSidebar {\n private active = false;\n private unsubscribeProgress: (() => void) | null = null;\n private timer: NodeJS.Timeout | null = null;\n private lastDraw = 0;\n private height = 0;\n\n start(): void {\n const columns = stdout.columns || 0;\n if (!stdout.isTTY || columns < MIN_COLUMNS) return;\n this.active = true;\n setMessageWidth(Math.max(40, columns - SIDEBAR_WIDTH - 22));\n setRenderHook(() => this.draw(true));\n this.unsubscribeProgress = onProgress(() => this.draw(false));\n this.timer = setInterval(() => this.draw(true), 1000);\n this.draw(true);\n }\n\n stop(): void {\n if (!this.active) return;\n this.active = false;\n setMessageWidth(null);\n setRenderHook(null);\n this.unsubscribeProgress?.();\n if (this.timer) clearInterval(this.timer);\n this.timer = null;\n this.clear();\n }\n\n private draw(force: boolean): void {\n if (!this.active) return;\n const now = Date.now();\n if (!force && now - this.lastDraw < 80) return;\n this.lastDraw = now;\n\n const columns = stdout.columns || 0;\n if (columns < MIN_COLUMNS) return;\n const col = columns - SIDEBAR_WIDTH + 1;\n const p: Readonly<ExportProgress> = getProgress();\n\n const lines: string[] = [];\n lines.push(row());\n lines.push(row(` ${ui.text.bold('Export')}`));\n lines.push(row(` ${ui.muted(leftTruncate(p.phase || 'starting', SIDEBAR_WIDTH - 4))}`));\n lines.push(row(` ${ui.muted(formatElapsed(p.startedAt) + ' elapsed')}`));\n lines.push(row());\n lines.push(row(` ${ui.text.bold('Assets')}`));\n lines.push(\n row(\n ` ${ui.muted(`${p.downloaded}${p.totalAssets ? '/' + p.totalAssets : ''} downloaded`)}` +\n (p.failed > 0 ? ` ${ui.error(`${p.failed} failed`)}` : '')\n )\n );\n lines.push(row(` ${ui.muted(`${p.written} files written`)}`));\n if (p.subpages > 0) lines.push(row(` ${ui.muted(`${p.subpages} sub-pages`)}`));\n lines.push(row());\n lines.push(row(` ${ui.text.bold('Files')}`));\n if (p.recentFiles.length === 0) {\n lines.push(row(` ${ui.muted('waiting for output...')}`));\n } else {\n for (const file of p.recentFiles) {\n lines.push(row(` ${ui.muted(leftTruncate(file, SIDEBAR_WIDTH - 4))}`));\n }\n }\n lines.push(row());\n\n this.height = Math.max(this.height, lines.length);\n stdout.write('\\x1B7');\n lines.forEach((line, index) => {\n stdout.write(`\\x1B[${TOP_ROW + index};${col}H${line}`);\n });\n for (let extra = lines.length; extra < this.height; extra++) {\n stdout.write(`\\x1B[${TOP_ROW + extra};${col}H${' '.repeat(SIDEBAR_WIDTH)}`);\n }\n stdout.write('\\x1B8');\n }\n\n private clear(): void {\n const columns = stdout.columns || 0;\n if (columns < MIN_COLUMNS) return;\n const col = columns - SIDEBAR_WIDTH + 1;\n stdout.write('\\x1B7');\n for (let index = 0; index < this.height; index++) {\n stdout.write(`\\x1B[${TOP_ROW + index};${col}H${' '.repeat(SIDEBAR_WIDTH)}`);\n }\n stdout.write('\\x1B8');\n }\n}\n","import type { Page } from 'puppeteer';\nimport { ui } from '../cli/theme.js';\nexport type AntiBotType = 'cloudflare' | 'captcha' | 'waf';\nexport class AntiBotError extends Error {\n readonly type: AntiBotType;\n readonly platform: string;\n readonly url: string;\n constructor(type: AntiBotType, platform: string, url: string, message?: string) {\n super(message || `Anti-bot protection detected (${type})`);\n this.name = 'AntiBotError';\n this.type = type;\n this.platform = platform;\n this.url = url;\n }\n}\nexport function detectAntiBotHtml(html: string): AntiBotType | null {\n if (!html) return null;\n if (\n /<title>\\s*Just a moment/i.test(html) ||\n /cf-browser-verification|cf-challenge-running|cf_chl_opt|challenge-platform/i.test(html) ||\n /Attention Required!\\s*\\|\\s*Cloudflare/i.test(html) ||\n /Checking if the site connection is secure/i.test(html)\n ) {\n return 'cloudflare';\n }\n if (\n /class=\"g-recaptcha\"|h-captcha|hcaptcha\\.com|challenges\\.cloudflare\\.com\\/turnstile/i.test(html)\n ) {\n return 'captcha';\n }\n return null;\n}\nexport async function detectAntiBotPage(page: Page): Promise<AntiBotType | null> {\n try {\n const title = await page.title();\n if (/just a moment/i.test(title) || /attention required/i.test(title)) {\n return 'cloudflare';\n }\n const flagged: string = await page.evaluate(() => {\n if (document.querySelector('iframe[src*=\"challenges.cloudflare.com\"]')) return 'cloudflare';\n if (\n document.querySelector(\n '.g-recaptcha, .h-captcha, iframe[src*=\"hcaptcha.com\"], iframe[src*=\"recaptcha\"]'\n )\n ) {\n return 'captcha';\n }\n const body = document.body ? document.body.innerText || '' : '';\n const outer = document.documentElement.outerHTML || '';\n if (body.trim().length < 120 && /cf-chl|cloudflare|cf-browser-verification/i.test(outer)) {\n return 'cloudflare';\n }\n return '';\n });\n return (flagged as AntiBotType) || null;\n } catch {\n return null;\n }\n}\nexport function formatAntiBotError(err: AntiBotError): string {\n const label =\n err.type === 'cloudflare'\n ? 'Cloudflare (browser challenge)'\n : err.type === 'captcha'\n ? 'a captcha challenge'\n : 'a WAF / bot filter';\n const lines: string[] = [\n '',\n ` ${ui.error('✗')} ${ui.error.bold('EXPORT BLOCKED')} — ${err.platform} is protected by ${label}.`,\n '',\n ` ${ui.muted('The headless browser could not pass the verification, so nothing was exported.')}`,\n '',\n ` ${ui.text.bold(' What you can try:')}`,\n ` ${ui.muted(' 1.')} Retry in a few minutes — the challenge often expires.`,\n ` ${ui.muted(' 2.')} Use an alternative, non-protected canonical URL if one exists.`,\n ` ${ui.muted(' 3.')} Export from a network/IP the site trusts more.`,\n '',\n ` ${ui.muted('No files were written.')} ${ui.muted('(A stealth-browser mode is on the roadmap.)')}`,\n '',\n ];\n return lines.join('\\n');\n}\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 { detectAntiBotPage, AntiBotError } from './anti-bot.js';\nimport type { ExporterContext } from '../types.js';\nexport async function launchAndCapture(exporter: ExporterContext): Promise<void> {\n exporter.cooking?.update('Launching browser...');\n log('Launching headless Chromium...');\n exporter.browser = await puppeteer.launch({\n headless: true,\n args: ['--no-sandbox', '--disable-setuid-sandbox'],\n });\n success('Chromium launched');\n exporter.page = await exporter.browser.newPage();\n const viewport = {\n ...CFG.viewport,\n deviceScaleFactor: exporter.deviceScaleFactor ?? CFG.viewport.deviceScaleFactor ?? 1,\n };\n await exporter.page.setViewport(viewport);\n log(\n 'Viewport set to ' +\n viewport.width +\n 'x' +\n viewport.height +\n ' at ' +\n viewport.deviceScaleFactor +\n 'x DPR'\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 const allStripDomains: string[] = [...CFG.sharedStripDomains, ...exporter.platform.stripDomains];\n log('Blocking ' + allStripDomains.length + ' tracking domains:');\n for (const domain of allStripDomains) {\n log(' - ' + domain);\n }\n let intercepted = 0;\n let trackingBlocked = 0;\n let platformSkipped = 0;\n exporter.page.on('response', async (res) => {\n const url: string = res.url();\n if (url.startsWith('data:') || url.startsWith('blob:')) return;\n try {\n const host: string = new URL(url).hostname;\n if (allStripDomains.some((d) => host.includes(d))) {\n trackingBlocked++;\n return;\n }\n } catch {\n return;\n }\n if (exporter.platform.skipAssetUrls?.some((re) => re.test(url))) {\n platformSkipped++;\n return;\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 log('Network interception enabled');\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(\n 'Intercepted ' +\n intercepted +\n ' resources, blocked ' +\n trackingBlocked +\n ' tracking requests, skipped ' +\n platformSkipped +\n ' platform assets'\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(\n 'Platform refined from DOM: ' +\n domDetected.displayName +\n ' (override: ' +\n exporter.platform.name +\n ')'\n );\n exporter.platform = domDetected;\n }\n const antiBot = await detectAntiBotPage(exporter.page);\n if (antiBot) {\n throw new AntiBotError(antiBot, exporter.platform.displayName, exporter.siteUrl);\n }\n if (exporter.platform.preCapture) {\n try {\n exporter.cooking?.update('Preparing ' + exporter.platform.displayName + ' page...');\n await exporter.platform.preCapture(exporter.page);\n log('preCapture hook completed');\n } catch (e) {\n log('preCapture hook error (continuing): ' + (e as Error).message);\n }\n }\n exporter.cooking?.update('Waiting for ' + exporter.platform.displayName + ' hydration...');\n if (exporter.platform.needsHydrationCheck) {\n const sel: string = exporter.platform.hydrationSelector || '#main';\n log('Checking for ' + sel + ' 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.querySelector(${JSON.stringify(sel)}) || 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 const scrollStrategy = exporter.platform.scrollStrategy || 'standard';\n if (scrollStrategy === 'none') {\n log('Scroll skipped (scrollStrategy: none)');\n } else {\n exporter.cooking?.update('Scrolling page...');\n log(\n 'Starting full-page scroll (step: ' + CFG.scrollStep + 'px, delay: ' + CFG.scrollDelay + 'ms)'\n );\n const scrollStep = CFG.scrollStep;\n const scrollDelay = CFG.scrollDelay;\n const pageHeight: number = (await exporter.page.evaluate(`\n Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)\n `)) as number;\n log(\n 'Page height: ' + pageHeight + 'px (' + Math.ceil(pageHeight / scrollStep) + ' scroll steps)'\n );\n const passes = scrollStrategy === 'infinite' ? 3 : 1;\n for (let pass = 0; pass < passes; pass++) {\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 if (scrollStrategy === 'infinite' && pass < passes - 1) {\n await new Promise<void>((r) => setTimeout(r, 1000));\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 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 if (exporter.platform.captureRenderedDom) {\n try {\n const rendered: string = await exporter.page.evaluate(\n () => '<!DOCTYPE html>\\n' + document.documentElement.outerHTML\n );\n if (rendered && rendered.length > 200) {\n exporter.ssrHTML = rendered;\n log(\n 'Captured rendered DOM as HTML source (' + (rendered.length / 1024).toFixed(1) + ' KB)'\n );\n }\n } catch (e) {\n log('Rendered DOM capture failed (keeping SSR HTML): ' + (e as Error).message);\n }\n }\n const totalCaptured: number = exporter.assets.buffers.size;\n success('Captured ' + totalCaptured + ' network resources total');\n const cssCount: number = [...exporter.assets.entries.values()].filter((e) =>\n e.localPath.endsWith('.css')\n ).length;\n const jsCount: number = [...exporter.assets.entries.values()].filter(\n (e) => e.localPath.endsWith('.js') || e.localPath.endsWith('.mjs')\n ).length;\n const imgCount: number = [...exporter.assets.entries.values()].filter((e) =>\n e.localPath.startsWith('assets/images')\n ).length;\n const fontCount: number = [...exporter.assets.entries.values()].filter((e) =>\n e.localPath.startsWith('assets/fonts')\n ).length;\n log(\n ' CSS: ' + cssCount + ' | JS: ' + jsCount + ' | Images: ' + imgCount + ' | Fonts: ' + fontCount\n );\n}\nexport async function closeBrowser(exporter: {\n browser: import('puppeteer').Browser | null;\n}): Promise<void> {\n if (exporter.browser) {\n await exporter.browser.close();\n exporter.browser = null;\n log('Browser closed');\n }\n}\nexport async function captureSubpage(\n page: Page,\n url: string,\n platform: {\n needsHydrationCheck: boolean;\n hydrationTimeout: number;\n }\n): Promise<string> {\n log(' Navigating to sub-page: ' + url);\n await page.goto(url, { waitUntil: 'networkidle2', timeout: CFG.timeout });\n if (platform.needsHydrationCheck) {\n await page.evaluate(`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 } else {\n await new Promise<void>((r) => setTimeout(r, 1000));\n }\n const html: string = await page.evaluate(\n () => document.documentElement.outerHTML || document.body.innerHTML\n );\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 { setTotalAssets, noteDownload, noteFile } from './progress.js';\nimport { dlBuffer } from '../network/download.js';\nimport { pool } from '../network/pool.js';\nimport type { ExporterContext } from '../types.js';\nexport async function downloadAll(exporter: ExporterContext): Promise<void> {\n const seen: Set<string> = new Set();\n const toDownload: Array<{\n url: string;\n localPath: string;\n }> = [];\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 const total: number = toDownload.length;\n setTotalAssets(total);\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 let ok = 0;\n let cached = 0;\n let fail = 0;\n let completed = 0;\n let lastReported = 0;\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 try {\n const buf: Buffer | undefined =\n exporter.assets.buffers.get(url) || 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 noteDownload(true);\n noteFile(localPath);\n } catch (e) {\n fail++;\n noteDownload(false);\n if (!url.includes('framer.com/edit') && !url.includes('framerstatic.com/editorbar')) {\n warn('Download failed: ' + path.basename(localPath) + ' - ' + (e as Error).message);\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 await pool(tasks, CFG.concurrency);\n success(\n '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 exporter.assets.buffers.clear();\n log('Network buffer cache cleared');\n}\nconst SIBLING_IMPORT = /(?:import|from)\\s*\\(?\\s*[\"'`]\\.\\/([A-Za-z0-9_.-]+\\.m?js)[\"'`]/g;\nconst MAX_CHUNK_DEPTH = 5;\nexport async function downloadLazyChunks(exporter: ExporterContext): Promise<void> {\n const chunkDirs = exporter.platform.lazyChunkDirs;\n if (!chunkDirs?.length) return;\n const sourceOf: Map<string, string> = new Map();\n for (const [url, { localPath }] of exporter.assets.entries) {\n if (!sourceOf.has(localPath)) sourceOf.set(localPath, url);\n }\n let frontier: string[] = [...sourceOf.keys()].filter((p) =>\n chunkDirs.some((dir) => p.startsWith(dir + '/'))\n );\n let added = 0;\n for (let depth = 0; depth < MAX_CHUNK_DEPTH && frontier.length > 0; depth++) {\n const next: string[] = [];\n const tasks = frontier.map((localPath) => async (): Promise<void> => {\n let code: string;\n try {\n code = await fs.readFile(path.join(exporter.outDir, localPath), 'utf-8');\n } catch {\n return;\n }\n for (const match of code.matchAll(SIBLING_IMPORT)) {\n let chunkUrl: string;\n try {\n chunkUrl = new URL('./' + match[1], sourceOf.get(localPath)!).href;\n } catch {\n continue;\n }\n if (exporter.assets.entries.has(chunkUrl)) continue;\n const dest: string | null = exporter.assets.localPathFor(chunkUrl, exporter.platform);\n if (!dest) continue;\n sourceOf.set(dest, chunkUrl);\n try {\n await fs.writeFile(path.join(exporter.outDir, dest), await dlBuffer(chunkUrl));\n next.push(dest);\n added++;\n noteDownload(true);\n noteFile(dest);\n } catch (e) {\n warn('Lazy chunk failed: ' + match[1] + ' - ' + (e as Error).message);\n }\n }\n });\n await pool(tasks, CFG.concurrency);\n frontier = next;\n }\n if (frontier.length > 0) {\n warn(\n 'Lazy chunk traversal stopped at depth ' +\n MAX_CHUNK_DEPTH +\n ' with ' +\n frontier.length +\n ' chunks left to inspect'\n );\n }\n if (added > 0) success('Lazy-loaded chunks resolved: ' + added);\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\nimport http from 'node:http';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst PORT = process.env.PORT || 3000;\nconst ROOT = path.dirname(fileURLToPath(import.meta.url));\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, onMissing) => {\n fs.readFile(pathToFile, (err, data) => {\n if (err) {\n if (onMissing) return onMissing();\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 if (url !== '/index.html' && !path.extname(url)) {\n const slug = url.replace(/^\\\\/+|\\\\/+$/g, '').replace(/[^a-zA-Z0-9_-]/g, '_').replace(/_+/g, '_');\n const serveIndex = () => serveFile(path.join(ROOT, 'index.html'));\n if (slug) {\n return serveFile(path.join(ROOT, 'subpages', slug + '.html'), serveIndex);\n }\n return serveIndex();\n }\n\n serveFile(filePath);\n});\n\nconst ANSI = {\n reset: '\\\\x1b[0m',\n primary: '\\\\x1b[38;2;250;178;131m',\n soft: '\\\\x1b[38;2;255;192;159m',\n text: '\\\\x1b[38;2;238;238;238m',\n muted: '\\\\x1b[38;2;128;128;128m',\n border: '\\\\x1b[38;2;72;72;72m',\n success: '\\\\x1b[38;2;127;216;143m',\n info: '\\\\x1b[38;2;86;182;194m',\n accent: '\\\\x1b[38;2;157;124;216m',\n warning: '\\\\x1b[38;2;245;167;66m',\n command: '\\\\x1b[38;2;255;192;159m',\n error: '\\\\x1b[38;2;224;108;117m',\n};\n\nfunction color(name, value) {\n return ANSI[name] + value + ANSI.reset;\n}\n\nfunction fitValue(value, width) {\n const text = String(value);\n if (text.length <= width) return text;\n if ((text.includes('\\\\\\\\') || text.includes('/')) && width > 12) {\n const separator = text.includes('\\\\\\\\') ? '\\\\\\\\' : '/';\n const prefix = text.startsWith(separator) ? separator : '';\n const parts = text.split(/[\\\\\\\\/]+/).filter(Boolean);\n const compact = prefix + parts.map((part, index) => {\n if (index === parts.length - 1) return part;\n if (/^[A-Za-z]:$/.test(part)) return part;\n return part.length > 5 ? part.slice(0, 3) + '..' : part;\n }).join(separator);\n if (compact.length <= width) return compact;\n const tail = Math.max(8, Math.floor(width * 0.45));\n const head = Math.max(0, width - tail - 4);\n return compact.slice(0, head) + separator + '..' + separator + compact.slice(-tail);\n }\n return width <= 3 ? '.'.repeat(Math.max(0, width)) : text.slice(0, width - 2) + '..';\n}\n\nfunction frameLine(label, value, colorName = 'text') {\n const labelText = label.padEnd(10);\n const valueWidth = Math.max(0, 56 - labelText.length);\n const shown = fitValue(value, valueWidth);\n const pad = Math.max(0, 56 - labelText.length - shown.length);\n console.log(' ' + color('border', '│ ') + color('muted', labelText) + color(colorName, shown) + ' '.repeat(pad) + color('border', ' │'));\n}\n\nfunction drawServerUi() {\n console.log('');\n console.log(' ' + color('border', '╭─' + '─'.repeat(56) + '─╮'));\n console.log(' ' + color('border', '│ ') + color('text', ' Framer Export preview server') + ' '.repeat(26) + color('border', ' │'));\n console.log(' ' + color('border', '├─' + '─'.repeat(56) + '─┤'));\n frameLine('URL', 'http://localhost:' + PORT, 'primary');\n frameLine('Root', ROOT, 'soft');\n frameLine('Run', 'node serve.js', 'command');\n frameLine('Mode', 'static mirror + SPA fallback', 'accent');\n console.log(' ' + color('border', '╰─' + '─'.repeat(56) + '─╯'));\n console.log('');\n console.log(' ' + color('success', 'ready') + color('muted', ' press Ctrl+C to stop') + '\\\\n');\n}\n\nserver.listen(PORT, () => {\n const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n const steps = ['Preparing server', 'Checking exported files', 'Binding local port', 'Serving static mirror'];\n const stepColors = ['text', 'info', 'warning', 'success'];\n let i = 0;\n const timer = setInterval(() => {\n const stepIndex = Math.min(steps.length - 1, Math.floor(i / 6));\n const step = steps[stepIndex];\n const dots = color('error', '.'.repeat(i % 4).padEnd(3, ' '));\n process.stdout.write('\\\\r\\\\x1B[2K ' + color('primary', frames[i % frames.length]) + ' ' + color(stepColors[stepIndex], step) + dots);\n i++;\n }, 80);\n\n setTimeout(() => {\n clearInterval(timer);\n process.stdout.write('\\\\r\\\\x1B[2K');\n drawServerUi();\n }, 1280);\n});\n`;\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { log, warn, success } from '../logger/index.js';\nimport { noteFile } from './progress.js';\nimport { prettifyJS } from '../formatter/prettify.js';\nimport { SERVE_SCRIPT } from '../server/template.js';\nimport type { ExporterContext } from '../types.js';\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\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}\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 const tagNameEnd: number = html.indexOf(' ', tagStart + 1);\n const tagName: string = html.slice(tagStart + 1, tagNameEnd).toLowerCase();\n let depth = 0;\n let i: number = tagStart;\n while (i < html.length) {\n if (\n html.startsWith(`<${tagName}`, i) &&\n (html[i + tagName.length + 1] === ' ' || html[i + tagName.length + 1] === '>')\n ) {\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 idx = html.indexOf(marker);\n }\n return html;\n}\nfunction processSEO(html: string, url: string): string {\n const canonical = url.split('?')[0].replace(/\\/$/, '');\n if (!html.includes('rel=\"canonical\"')) {\n html = html.replace('</head>', ` <link rel=\"canonical\" href=\"${canonical}\">\\n </head>`);\n }\n if (!html.includes('name=\"description\"')) {\n html = html.replace(\n '</head>',\n ` <meta name=\"description\" content=\"Exported with Framer Export - Fast, SEO-optimized, and clean.\">\\n </head>`\n );\n }\n if (!html.includes('property=\"og:')) {\n html = html.replace(\n '</head>',\n ` <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 if (!html.includes('name=\"robots\"')) {\n html = html.replace('</head>', ` <meta name=\"robots\" content=\"index, follow\">\\n </head>`);\n }\n return html;\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}\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}\ntype RewritePattern = {\n from: RegExp;\n to: string;\n};\ninterface RewriteReport {\n patterns: RewritePattern[];\n matched: Set<number>;\n}\nfunction rewritePatterns(exporter: ExporterContext): RewritePattern[] {\n return exporter.platform.rewritePatterns ?? exporter.platform.rewriteUrlPatterns ?? [];\n}\nfunction applyRewritePatterns(text: string, report: RewriteReport): string {\n report.patterns.forEach(({ from, to }, index) => {\n const pattern = new RegExp(from.source, from.flags);\n if (new RegExp(from.source, from.flags).test(text)) report.matched.add(index);\n text = text.replace(pattern, to);\n });\n return text;\n}\nfunction subpageRoutes(exporter: ExporterContext): Map<string, string> {\n const routes = new Map<string, string>();\n for (const [url, filename] of exporter.subpages) {\n try {\n routes.set(new URL(url).pathname.replace(/\\/+$/, ''), filename);\n } catch {}\n }\n return routes;\n}\nexport function rewriteInternalLinks(\n html: string,\n siteUrl: string,\n routes: Map<string, string>,\n fromSubpages: boolean\n): string {\n const source = new URL(siteUrl);\n const sourceHost = source.hostname.replace(/^www\\./, '');\n const rootPath = source.pathname.replace(/\\/+$/, '') || '/';\n return html.replace(\n /<(?!link\\b)([^>]*?\\bhref\\s*=\\s*)([\"'])(.*?)\\2/gi,\n (match: string, prefix: string, quote: string, href: string) => {\n if (/^(javascript:|mailto:|tel:|#|data:)/i.test(href)) return match;\n let target: URL;\n try {\n target = new URL(href, siteUrl);\n } catch {\n return match;\n }\n if (target.hostname.replace(/^www\\./, '') !== sourceHost) return match;\n const targetPath = target.pathname.replace(/\\/+$/, '') || '/';\n if (fromSubpages && targetPath === rootPath) {\n return `<${prefix}${quote}../index.html${target.hash}${quote}`;\n }\n const filename = routes.get(targetPath);\n if (!filename) return match;\n const local: string = (fromSubpages ? filename : 'subpages/' + filename) + target.hash;\n return `<${prefix}${quote}${local}${quote}`;\n }\n );\n}\nfunction processHtml(\n html: string,\n exporter: ExporterContext,\n pageUrl: string,\n fromDir: string,\n routes: Map<string, string>,\n fromSubpages: boolean,\n report: RewriteReport\n): string {\n html = stripIntegrityAndCors(html);\n html = processSEO(html, pageUrl);\n for (const sel of exporter.platform.stripSelectors) html = stripBySelector(html, sel);\n for (const pattern of exporter.platform.stripPatterns) {\n html = html.replace(new RegExp(pattern.source, pattern.flags), '');\n }\n for (const pattern of exporter.platform.stripScripts || []) {\n html = html.replace(new RegExp(pattern.source, pattern.flags), '');\n }\n if (exporter.platform.postCapture) {\n try {\n html = exporter.platform.postCapture(html, exporter);\n } catch (e) {\n warn('postCapture hook failed for ' + pageUrl + ': ' + (e as Error).message);\n }\n }\n html = exporter.assets.rewrite(html, fromDir);\n html = applyRewritePatterns(html, report);\n html = stripSrcsetCdnUrls(html);\n return rewriteInternalLinks(html, exporter.siteUrl, routes, fromSubpages);\n}\nasync function buildSubpages(\n exporter: ExporterContext,\n routes: Map<string, string>,\n report: RewriteReport\n): Promise<void> {\n if (exporter.subpages.size === 0) return;\n let built = 0;\n for (const [pageUrl, filename] of exporter.subpages) {\n const filePath: string = path.join(exporter.outDir, 'subpages', filename);\n try {\n let html: string = await fs.readFile(filePath, 'utf-8');\n html = processHtml(html, exporter, pageUrl, 'subpages', routes, true, report);\n await fs.writeFile(filePath, html, 'utf-8');\n built++;\n } catch (e) {\n warn('Sub-page post-processing skipped: ' + filename + ' - ' + (e as Error).message);\n }\n }\n success('Sub-pages linked to local assets: ' + built + '/' + exporter.subpages.size);\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 let html: string = exporter.ssrHTML;\n if (!html) {\n warn('No SSR HTML available, cannot build output');\n return;\n }\n const routes = subpageRoutes(exporter);\n const report: RewriteReport = { patterns: rewritePatterns(exporter), matched: new Set() };\n exporter.cooking?.update('Processing exported HTML...');\n html = processHtml(html, exporter, exporter.siteUrl, '', routes, false, report);\n success('Index HTML pipeline complete');\n await rewriteDownloadedFiles(exporter, report);\n await buildSubpages(exporter, routes, report);\n report.patterns.forEach(({ from }, index) => {\n if (!report.matched.has(index)) warn('Rewrite pattern matched nothing: ' + from.toString());\n });\n success('All URLs rewritten to local paths');\n if (exporter.prettyPrint !== false) {\n exporter.cooking?.update('Pretty-printing JS files...');\n await prettifyDownloadedJS(exporter);\n } else {\n log('Pretty-print disabled, keeping JS files as downloaded');\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 noteFile('index.html');\n success('index.html written');\n await fs.writeFile(path.join(exporter.outDir, 'serve.js'), SERVE_SCRIPT);\n noteFile('serve.js');\n log('serve.js written');\n await fs.writeFile(\n path.join(exporter.outDir, 'package.json'),\n JSON.stringify({ type: 'module', scripts: { serve: 'node serve.js' } }, null, 2) + '\\n'\n );\n noteFile('package.json');\n log('package.json written for serve.js');\n success('Output build complete');\n}\nasync function rewriteDownloadedFiles(\n exporter: ExporterContext,\n report: RewriteReport\n): Promise<void> {\n const dirs: string[] = ['scripts/vendor', 'scripts/modules', 'styles'];\n let rewritten = 0;\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 for (const file of files) {\n const ext: string = path.extname(file).toLowerCase();\n if (!['.mjs', '.js', '.css'].includes(ext)) continue;\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 content = applyRewritePatterns(content, report);\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}\nasync function prettifyDownloadedJS(exporter: ExporterContext): Promise<void> {\n const dirs: string[] = ['scripts/vendor', 'scripts/modules'];\n let count = 0;\n let total = 0;\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 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 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 const nlRatio: number = (raw.match(/\\n/g) || []).length / raw.length;\n if (nlRatio > 0.05) {\n count++;\n continue;\n }\n const pretty: string = await prettifyJS(raw);\n await fs.writeFile(filePath, pretty, 'utf-8');\n count++;\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 success('Formatted ' + count + '/' + total + ' JS/MJS files');\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport type { ExporterContext } from '../types.js';\nimport { boxTop, boxLine, boxBot, boxSep, boxRow, maxWidth } from '../cli/box.js';\nimport { chip, ui } from '../cli/theme.js';\n\nexport interface SummaryEntry {\n dir: string;\n count: number;\n kind: string;\n}\n\nexport async function collectSummary(outDir: string): Promise<SummaryEntry[]> {\n const count = async (d: string): Promise<number> => {\n try {\n return (await fs.readdir(path.join(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 return [\n { dir: 'styles/', count: styles, kind: 'CSS' },\n { dir: 'scripts/vendor/', count: vendor, kind: 'JS vendor' },\n { dir: 'scripts/modules/', count: scripts, kind: 'JS modules' },\n { dir: 'assets/images/', count: imgs, kind: 'images' },\n { dir: 'assets/videos/', count: videos, kind: 'videos' },\n { dir: 'assets/fonts/', count: fonts, kind: 'fonts' },\n { dir: 'assets/misc/', count: misc, kind: 'misc' },\n { dir: 'data/', count: data, kind: 'data' },\n { dir: 'subpages/', count: subpages, kind: 'pages' },\n ];\n}\n\nexport async function printSummary(exporter: ExporterContext): Promise<void> {\n const w = maxWidth();\n const isSmall = w < 50;\n const collected = await collectSummary(exporter.outDir);\n const [styles, vendor, scripts, imgs, videos, fonts, misc, data, subpages] = collected.map(\n (e) => e.count\n );\n\n const G = ui.primary;\n const G2 = ui.primarySoft;\n const C2 = ui.secondary;\n const Y = ui.accent;\n const O = ui.warning;\n const Br = ui.info;\n const Gr = ui.muted;\n const Gn = ui.success;\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, `${ui.text.bold(' Export Summary')} ${chip('done')}`));\n console.log(boxSep(w));\n } else {\n console.log(ui.text.bold(' 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)}${ui.text(c)} ${ui.muted(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)} ${ui.text(String(cnt))} ${ui.muted(type)}`);\n } else {\n console.log(' ' + ui.border('│ ') + rowText + ' '.repeat(pad) + ui.border(' │'));\n }\n }\n\n if (!isSmall) {\n console.log(boxBot(w));\n }\n\n console.log('');\n const cdCmd = 'cd ' + path.basename(exporter.outDir);\n const runCmd = 'node serve.js';\n if (!isSmall) {\n console.log(boxTop(w));\n console.log(boxLine(w, ui.text.bold(' To serve locally')));\n console.log(boxSep(w));\n console.log(boxRow(w, 'Open', cdCmd));\n console.log(boxRow(w, 'Run', runCmd));\n console.log(boxBot(w));\n } else {\n console.log(ui.text.bold(' To serve locally:'));\n console.log(` ${G(cdCmd)}`);\n console.log(` ${G(runCmd)}`);\n }\n\n console.log('');\n console.log(ui.muted(' note: must be served via HTTP for JS modules to work.'));\n console.log('');\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { stdin, stdout } from 'node:process';\nimport { spawn } from 'node:child_process';\nimport type { ExporterContext } from '../types.js';\nimport { select, type SelectOption } from '../cli/select.js';\nimport { boxTop, boxLine, boxSep, boxBot, maxWidth } from '../cli/box.js';\nimport { centerText, ui } from '../cli/theme.js';\nimport { getLogHistory } from '../logger/index.js';\ninterface ConversionTarget {\n id: string;\n label: string;\n stack: string;\n projectDir: string;\n staticDir: string;\n scaffold: string;\n entryFiles: string;\n routing: string;\n}\ninterface AiTool {\n id: string;\n label: string;\n displayName: string;\n agentName: string;\n}\ninterface ConversionGoal {\n id: string;\n label: string;\n instruction: string;\n priority: string;\n}\ninterface ExportFacts {\n sourceUrl: string;\n outputDir: string;\n platformName: string;\n rootEntries: string[];\n counts: Record<string, number>;\n}\nconst IMPORTANT_DIRS = [\n 'index.html',\n 'styles',\n 'scripts/vendor',\n 'scripts/modules',\n 'assets/images',\n 'assets/videos',\n 'assets/fonts',\n 'assets/misc',\n 'data',\n 'subpages',\n];\nconst AI_TOOLS: AiTool[] = [\n {\n id: 'claude-code',\n label: 'Claude Code',\n displayName: 'Claude Code',\n agentName: 'Claude Code',\n },\n {\n id: 'codex',\n label: 'Codex',\n displayName: 'Codex',\n agentName: 'Codex coding agent',\n },\n {\n id: 'opencode',\n label: 'OpenCode',\n displayName: 'OpenCode',\n agentName: 'OpenCode',\n },\n {\n id: 'other-ai',\n label: 'Other AI coding agent',\n displayName: 'Other AI',\n agentName: 'AI coding agent',\n },\n];\nconst TARGETS: ConversionTarget[] = [\n {\n id: 'react-vite',\n label: 'React + Vite + TypeScript',\n stack: 'React 18/19, TypeScript, Vite, CSS modules or plain CSS',\n projectDir: 'converted-react-vite',\n staticDir: 'public',\n scaffold: 'npm create vite@latest converted-react-vite -- --template react-ts',\n entryFiles: 'src/main.tsx, src/App.tsx, src/components/*, src/styles/*',\n routing: 'Use React Router only if multiple exported pages exist in subpages/.',\n },\n {\n id: 'nextjs-app-router',\n label: 'Next.js App Router',\n stack: 'Next.js App Router, TypeScript, React Server Components where useful',\n projectDir: 'converted-nextjs',\n staticDir: 'public',\n scaffold: 'npx create-next-app@latest converted-nextjs --ts --app --eslint',\n entryFiles: 'app/page.tsx, app/layout.tsx, components/*, public/*',\n routing: 'Map exported subpages to app routes and keep shared layout code reusable.',\n },\n {\n id: 'vue-vite',\n label: 'Vue + Vite + TypeScript',\n stack: 'Vue 3, TypeScript, Vite, single-file components',\n projectDir: 'converted-vue-vite',\n staticDir: 'public',\n scaffold: 'npm create vite@latest converted-vue-vite -- --template vue-ts',\n entryFiles: 'src/main.ts, src/App.vue, src/components/*.vue, src/styles/*',\n routing: 'Use Vue Router only if multiple exported pages exist in subpages/.',\n },\n {\n id: 'sveltekit',\n label: 'SvelteKit',\n stack: 'SvelteKit, TypeScript, componentized routes and assets',\n projectDir: 'converted-sveltekit',\n staticDir: 'static',\n scaffold: 'npm create svelte@latest converted-sveltekit',\n entryFiles: 'src/routes/+page.svelte, src/lib/components/*, static/*',\n routing: 'Create SvelteKit routes for meaningful exported pages when subpages/ exists.',\n },\n {\n id: 'astro',\n label: 'Astro',\n stack: 'Astro, TypeScript, island components only where interactivity is needed',\n projectDir: 'converted-astro',\n staticDir: 'public',\n scaffold: 'npm create astro@latest converted-astro',\n entryFiles: 'src/pages/index.astro, src/components/*, public/*',\n routing: 'Use Astro pages for exported subpages and avoid unnecessary client JavaScript.',\n },\n];\nconst GOALS: ConversionGoal[] = [\n {\n id: 'clean-rebuild',\n label: 'Clean professional rebuild',\n instruction:\n 'Rebuild the export as clean production code, not as a one-file HTML clone, while preserving the full page experience.',\n priority: 'Readable structure, maintainability, complete pages, and faithful visual result.',\n },\n {\n id: 'pixel-perfect',\n label: 'Pixel-perfect visual migration',\n instruction:\n 'Prioritize pixel-perfect fidelity before refactoring anything aggressively, even when the layout is difficult.',\n priority:\n 'Spacing, typography, responsive behavior, colors, media, animations, and page-by-page fidelity.',\n },\n {\n id: 'component-system',\n label: 'Reusable component system',\n instruction:\n 'Extract repeated UI blocks into reusable components with clean props without simplifying the original pages.',\n priority:\n 'Components, layout primitives, naming, future editability, and complete section coverage.',\n },\n {\n id: 'performance-seo',\n label: 'Performance and SEO rebuild',\n instruction:\n 'Rebuild the site while reducing unused vendor code and improving SEO basics without losing visual fidelity.',\n priority:\n 'Fast loading, semantic markup, metadata, accessibility, asset hygiene, and faithful pages.',\n },\n];\nexport async function runAiPromptAssistant(exporter: ExporterContext): Promise<void> {\n if (!stdin.isTTY || !stdout.isTTY) return;\n const serveCommand = buildServeCommand(exporter);\n const shouldConvert = await runExportCompletePrompt(exporter, serveCommand);\n if (!shouldConvert) return;\n printAssistantModal(`${ui.text.bold('AI conversion prompt')} ${ui.error('BETA')}`, [\n 'Choose a target stack, AI tool, and conversion situation.',\n 'Mouse clicks are supported in the terminal when available.',\n 'A detailed prompt file will be generated inside the export folder.',\n ]);\n const targetOptions: SelectOption[] = [\n ...TARGETS.map((target) => ({ label: target.label, value: target.id })),\n { label: 'Customize with AI - BETA in development', value: 'custom-ai', disabled: true },\n ];\n const targetId = await select('Choose target stack', targetOptions, 0);\n const aiToolId = await select(\n 'Choose the AI coding tool',\n AI_TOOLS.map((tool) => ({ label: tool.label, value: tool.id })),\n 0\n );\n const goalId = await select(\n 'Choose the conversion situation',\n GOALS.map((goal) => ({ label: goal.label, value: goal.id })),\n 0\n );\n const target = TARGETS.find((item) => item.id === targetId) || TARGETS[0];\n const aiTool = AI_TOOLS.find((item) => item.id === aiToolId) || AI_TOOLS[0];\n const goal = GOALS.find((item) => item.id === goalId) || GOALS[0];\n const facts = await collectExportFacts(exporter);\n const prompt = buildConversionPrompt(target, aiTool, goal, facts);\n const aiDir = path.join(exporter.outDir, 'ai');\n const promptPath = path.join(aiDir, `${aiTool.id}-${target.id}-${goal.id}-prompt.md`);\n await fs.mkdir(aiDir, { recursive: true });\n await fs.writeFile(promptPath, prompt, 'utf-8');\n const copyPrompt = await runPromptReadyPrompt(promptPath, target, aiTool, goal);\n if (copyPrompt) {\n try {\n await copyToClipboard(prompt);\n console.log(` ${ui.success('✓')} ${ui.text.bold('Prompt copied to clipboard')}\\n`);\n } catch (error) {\n console.log(\n ` ${ui.warning('!')} ${ui.warning('Clipboard copy unavailable:')} ${ui.muted((error as Error).message)}\\n`\n );\n }\n }\n}\nasync function collectExportFacts(exporter: ExporterContext): Promise<ExportFacts> {\n const counts: Record<string, number> = {};\n const rootEntries = await safeReadDir(exporter.outDir);\n for (const item of IMPORTANT_DIRS) {\n counts[item] =\n item === 'index.html'\n ? (await exists(path.join(exporter.outDir, item)))\n ? 1\n : 0\n : await countEntries(path.join(exporter.outDir, item));\n }\n return {\n sourceUrl: exporter.siteUrl,\n outputDir: exporter.outDir,\n platformName: exporter.platform.displayName,\n rootEntries,\n counts,\n };\n}\nasync function exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\nasync function safeReadDir(dir: string): Promise<string[]> {\n try {\n return (await fs.readdir(dir)).sort();\n } catch {\n return [];\n }\n}\nasync function countEntries(dir: string): Promise<number> {\n try {\n return (await fs.readdir(dir)).length;\n } catch {\n return 0;\n }\n}\nfunction buttonLabel(label: string): string {\n return `${ui.border('[')} ${ui.text.bold(label)} ${ui.border(']')}`;\n}\nfunction buildServeCommand(exporter: ExporterContext): string {\n return `cd ${path.basename(exporter.outDir)} && node serve.js`;\n}\nasync function runExportCompletePrompt(\n exporter: ExporterContext,\n serveCommand: string\n): Promise<boolean> {\n let copyServeCommand = true;\n let copyExportLog = false;\n while (true) {\n const action = await select(\n 'Export complete',\n [\n {\n label: `${checkboxLabel(copyServeCommand)} Copy serve command when finishing`,\n value: 'toggle-copy',\n },\n {\n label: `${checkboxLabel(copyExportLog)} Copy full export log when finishing`,\n value: 'toggle-log',\n },\n {\n label: `${buttonLabel('Convert to AI code')} ${ui.error('BETA')}`,\n value: 'convert',\n },\n { label: buttonLabel('Finish'), value: 'finish' },\n ],\n 3,\n {\n headerLines: [\n `Output: ${path.basename(exporter.outDir)}`,\n `Run: ${serveCommand}`,\n `Log: ${path.basename(exporter.outDir)}/export.log`,\n 'Use Convert to open the AI conversion assistant.',\n ],\n footer: 'enter select checkbox toggles mouse click',\n }\n );\n if (action === 'toggle-copy') {\n copyServeCommand = !copyServeCommand;\n continue;\n }\n if (action === 'toggle-log') {\n copyExportLog = !copyExportLog;\n continue;\n }\n if (action === 'finish') {\n if (copyServeCommand) {\n try {\n await copyToClipboard(serveCommand);\n console.log(` ${ui.success('✓')} ${ui.text.bold('Serve command copied')}\\n`);\n } catch (error) {\n console.log(\n ` ${ui.warning('!')} ${ui.warning('Clipboard copy unavailable:')} ${ui.muted((error as Error).message)}\\n`\n );\n }\n }\n if (copyExportLog) {\n try {\n const logText = getLogHistory()\n .map((r) => `[${r.time}] [${r.level}] ${r.message}`)\n .join('\\n');\n await copyToClipboard(logText);\n console.log(` ${ui.success('✓')} ${ui.text.bold('Export log copied')}\\n`);\n } catch (error) {\n console.log(\n ` ${ui.warning('!')} ${ui.warning('Clipboard copy unavailable:')} ${ui.muted((error as Error).message)}\\n`\n );\n }\n }\n return false;\n }\n return true;\n }\n}\nasync function runPromptReadyPrompt(\n promptPath: string,\n target: ConversionTarget,\n aiTool: AiTool,\n goal: ConversionGoal\n): Promise<boolean> {\n const relPath = path.relative(process.cwd(), promptPath) || promptPath;\n let copyPrompt = false;\n while (true) {\n const action = await select(\n `AI Prompt Ready ${ui.error('BETA')}`,\n [\n {\n label: `${checkboxLabel(copyPrompt)} Copy prompt when finishing`,\n value: 'toggle-copy',\n },\n { label: buttonLabel('Finish'), value: 'finish' },\n ],\n 1,\n {\n headerLines: [\n `Tool: ${aiTool.displayName}`,\n `Stack: ${target.label}`,\n `Mode: ${goal.label}`,\n `File: ${relPath}`,\n ],\n footer: 'enter finish · checkbox toggles copy · mouse hover/click',\n }\n );\n if (action === 'toggle-copy') {\n copyPrompt = !copyPrompt;\n continue;\n }\n return copyPrompt;\n }\n}\nfunction checkboxLabel(checked: boolean): string {\n return checked ? ui.success('☑') : ui.muted('☐');\n}\nfunction printAssistantModal(title: string, lines: string[]): void {\n const w = maxWidth();\n const inner = w - 4;\n console.log('');\n console.log(boxTop(w));\n console.log(boxLine(w, centerText(`${ui.primary('◆')} ${title}`, inner)));\n console.log(boxSep(w));\n for (const line of lines) {\n console.log(boxLine(w, centerText(ui.muted(line), inner)));\n }\n console.log(boxBot(w));\n console.log('');\n}\nfunction buildConversionPrompt(\n target: ConversionTarget,\n aiTool: AiTool,\n goal: ConversionGoal,\n facts: ExportFacts\n): string {\n const rootEntries = facts.rootEntries.length\n ? facts.rootEntries.join(', ')\n : 'No root entries detected';\n const exportDir = quoteForPrompt(facts.outputDir);\n const projectDir = quoteForPrompt(path.join(facts.outputDir, target.projectDir));\n const scaffoldCommand = `cd ${exportDir}; ${target.scaffold}`;\n const sourceAssets = quoteForPrompt(path.join(facts.outputDir, 'assets', '*'));\n const destinationAssets = quoteForPrompt(\n path.join(facts.outputDir, target.projectDir, target.staticDir, 'assets')\n );\n const windowsAssetCopyCommand = `New-Item -ItemType Directory -Force -Path ${destinationAssets}; Copy-Item -Path ${sourceAssets} -Destination ${destinationAssets} -Recurse -Force`;\n const unixSourceAssets = quoteForPrompt(toPosixPath(path.join(facts.outputDir, 'assets')));\n const unixDestinationParent = quoteForPrompt(\n toPosixPath(path.join(facts.outputDir, target.projectDir, target.staticDir))\n );\n const unixAssetCopyCommand = `mkdir -p ${unixDestinationParent} && cp -R ${unixSourceAssets} ${unixDestinationParent}/assets`;\n const directoryLines = IMPORTANT_DIRS.map(\n (dir) => `Inspect ${dir}: ${facts.counts[dir]} item(s) detected in the export.`\n );\n const promptLines = [\n `You are ${aiTool.agentName} working inside a local export created by Framer Export.`,\n 'This brief was generated by the Framer Export AI Prompt Assistant BETA.',\n 'Treat this beta prompt as a strict conversion checklist, not as permission to skip inspection.',\n 'Your mission is to convert this exported static mirror into a clean production project.',\n `Target stack: ${target.stack}.`,\n `Selected AI coding tool: ${aiTool.displayName}.`,\n `Selected conversion situation: ${goal.label}.`,\n `Primary instruction for this situation: ${goal.instruction}`,\n `Main priority: ${goal.priority}`,\n `Source URL from the real export: ${facts.sourceUrl}`,\n `Detected platform from the real export: ${facts.platformName}`,\n `Export folder to inspect first: ${facts.outputDir}`,\n `Root entries actually present: ${rootEntries}`,\n `Create the converted project in: ${projectDir}`,\n `Recommended scaffold command: ${scaffoldCommand}`,\n `Expected important target files: ${target.entryFiles}`,\n `Routing guidance: ${target.routing}`,\n `Static assets destination for this stack: ${target.staticDir}/assets inside the converted project.`,\n `PowerShell command to copy exported assets after scaffolding: ${windowsAssetCopyCommand}`,\n `macOS/Linux command to copy exported assets after scaffolding: ${unixAssetCopyCommand}`,\n 'Run the asset copy command; do not recreate, redownload, rename randomly, or replace real exported assets with placeholders.',\n 'After copying assets, update every image, video, font, CSS url(), and script reference to the new local asset path.',\n 'Do not rush. Take time to inspect the export before writing the final implementation.',\n 'Do not invent brand names, copy, images, links, animations, colors, or sections.',\n 'Use only real information found in index.html, CSS files, JavaScript files, data files, and assets.',\n 'If a detail is missing, inspect more files instead of guessing.',\n 'If a vendor script is minified or hard to understand, identify what behavior it provides before replacing it.',\n 'Keep the final result professional, clean, responsive, and maintainable.',\n 'Do not simplify the site because a section, animation, page, or layout is difficult.',\n 'If something is hard, break it into smaller components and keep working until the result matches closely.',\n 'For every exported page, aim for the closest possible pixel-perfect result: spacing, typography, images, viewport behavior, and motion.',\n 'Do not merge multiple pages into one generic page unless the export proves they are duplicate routes.',\n 'Do not replace complex exported sections with summaries, cards, screenshots, or placeholder blocks.',\n 'If a page has visual depth, overlapping layers, sticky sections, galleries, or scroll effects, recreate those behaviors instead of flattening them.',\n 'Start by listing the files and directories that matter for the conversion.',\n ...directoryLines,\n 'Read index.html fully enough to understand page structure, metadata, linked assets, and scripts.',\n 'Read the CSS files that define layout, typography, responsive rules, and visual details.',\n 'Inspect scripts/vendor only to understand required interactions; do not blindly copy huge vendor bundles.',\n 'Inspect scripts/modules for page-specific logic, animations, sliders, menus, and dynamic behavior.',\n 'Inspect data files for CMS-like content, page data, configuration, or serialized props.',\n 'Inspect assets/images and preserve the real image files that are actually used.',\n 'Inspect assets/fonts and preserve font loading if the design depends on custom fonts.',\n 'Inspect subpages if it contains exported pages; map them to routes only when they represent real pages.',\n 'If subpages contains pages, convert each meaningful page with its own route and page component.',\n 'For each converted page, compare against the original exported HTML route and adjust until it is visually close.',\n 'Create a clean project structure instead of dumping everything into one component.',\n 'Separate global layout, page sections, shared components, data helpers, and styles.',\n 'Use semantic HTML for headings, navigation, buttons, forms, sections, and footer content.',\n 'Preserve the original hierarchy of visible content unless there is a clear bug to fix.',\n 'Preserve real URLs and links, but convert local asset paths to the new project structure.',\n 'Move static assets into the target framework public/static asset location when appropriate.',\n 'Do not keep broken CDN references if a local exported asset already exists.',\n 'Do not hardcode absolute machine paths into source files; use framework-relative public asset paths after copying.',\n 'Keep original filenames when possible so CSS and content references remain traceable.',\n 'Do not leave unused analytics, editor badges, platform badges, or export-only scripts in the new app.',\n 'Replace platform-specific runtime code with native framework components when possible.',\n 'Keep interactions that users can see: menus, hover states, forms, sliders, animations, and scroll effects.',\n 'If an interaction is too complex, implement a clean equivalent and document the difference briefly.',\n 'Keep responsive behavior for desktop, tablet, and mobile.',\n 'Check layout at small widths and avoid fixed desktop-only dimensions unless the original requires them.',\n 'Use CSS variables or a clear theme file for colors, spacing, radius, shadows, and typography.',\n 'Name components after their role: Hero, Header, FeatureGrid, Gallery, Pricing, Footer, and similar real sections.',\n 'Avoid generic placeholder components if the exported site has specific section meaning.',\n 'Use TypeScript types where they make the content or component props clearer.',\n 'Do not add unnecessary libraries unless they replace a real exported behavior cleanly.',\n 'If you add a library, explain why it is needed and where it is used.',\n 'Keep package.json scripts standard: dev, build, preview, lint when available.',\n 'Keep the build reproducible from a fresh install.',\n 'After implementing, run the install/build/typecheck commands available for the target project.',\n 'Fix any build errors instead of leaving TODOs.',\n 'Open the generated app locally if possible and compare against the exported index.html visually.',\n 'When there are subpages, compare every generated route against its matching exported file.',\n 'Verify that every visible image loads from the new project.',\n 'Verify that font rendering is close to the export.',\n 'Verify that navigation and internal links work.',\n 'Verify that responsive breakpoints do not overlap or hide important content.',\n 'Verify that there are no console errors caused by missing assets or copied platform scripts.',\n 'Keep accessibility basics: alt text when inferable, keyboard-reachable controls, visible focus states.',\n 'Keep SEO basics: title, meta description if present, canonical only if it is correct, Open Graph when present.',\n 'Do not fabricate SEO copy; reuse existing metadata or ask for missing copy if necessary.',\n 'Commit to a small number of high-quality files rather than many noisy fragments.',\n 'If a section repeats, extract a reusable component and data array.',\n 'If a section is unique, keep it simple and local to the page.',\n 'Document important migration decisions in a short README inside the converted project.',\n 'The README must mention the source export folder, target stack, setup command, and known limitations.',\n 'Do not delete the original export folder.',\n 'Do not modify unrelated files outside the new converted project unless required for setup.',\n 'If the worktree has existing changes, avoid reverting or overwriting them.',\n 'Before large edits, inspect first and explain the conversion plan briefly.',\n 'Then implement the conversion step by step until the app builds.',\n 'Final answer must summarize what was converted, where the new project lives, and which checks passed.',\n 'If something could not be converted, state the exact file or behavior and the reason.',\n 'Quality bar: the result should feel like a real hand-built production app, not an automated scrape or simplified demo.',\n ];\n return [\n `# ${aiTool.displayName} Conversion Prompt - ${target.label}`,\n '',\n 'Status: BETA assistant output. Review the export carefully and follow the real files.',\n `Generated from real export: ${facts.outputDir}`,\n `AI tool: ${aiTool.displayName}`,\n `Target: ${target.label}`,\n `Situation: ${goal.label}`,\n '',\n promptLines.map((line, index) => `${String(index + 1).padStart(2, '0')}. ${line}`).join('\\n'),\n '',\n ].join('\\n');\n}\nfunction quoteForPrompt(value: string): string {\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n}\nfunction toPosixPath(value: string): string {\n return value.replace(/\\\\/g, '/');\n}\nasync function copyToClipboard(text: string): Promise<void> {\n const commands =\n process.platform === 'win32'\n ? [{ command: 'clip', args: [] }]\n : process.platform === 'darwin'\n ? [{ command: 'pbcopy', args: [] }]\n : [\n { command: 'wl-copy', args: [] },\n { command: 'xclip', args: ['-selection', 'clipboard'] },\n { command: 'xsel', args: ['--clipboard', '--input'] },\n ];\n let lastError: Error | null = null;\n for (const item of commands) {\n try {\n await pipeToCommand(item.command, item.args, text);\n return;\n } catch (error) {\n lastError = error as Error;\n }\n }\n throw lastError || new Error('No clipboard command found');\n}\nfunction pipeToCommand(command: string, args: string[], input: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, { stdio: ['pipe', 'ignore', 'pipe'] });\n let stderr = '';\n let settled = false;\n const finish = (error?: Error): void => {\n if (settled) return;\n settled = true;\n if (error) reject(error);\n else resolve();\n };\n child.stderr?.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n child.on('error', finish);\n child.on('close', (code) => {\n if (code === 0) {\n finish();\n } else {\n finish(new Error(`${command} exited with ${code}${stderr ? `: ${stderr.trim()}` : ''}`));\n }\n });\n child.stdin?.end(input);\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, getLogHistory } from '../logger/index.js';\nimport { resetProgress, setPhase, noteFile, noteSubpage } from './progress.js';\nimport { ExportSidebar } from '../cli/sidebar.js';\nimport { launchAndCapture, captureSubpage, closeBrowser } from './capture.js';\nimport { AntiBotError } from './anti-bot.js';\nimport { downloadAll, downloadLazyChunks } from './download.js';\nimport { buildOutput } from './output.js';\nimport { printSummary } from './summary.js';\nimport { runAiPromptAssistant } from '../ai/prompt-assistant.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';\nimport { chip, ui } from '../cli/theme.js';\nexport function deriveOutputName(url: string, platformName: PlatformType): string {\n try {\n const parsed = new URL(url);\n const hostname: string = parsed.hostname;\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 const cleanName =\n siteName\n .toLowerCase()\n .replace(/[^a-z0-9_-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '') || 'site';\n return `${platformName}-${cleanName}-${randomOutputSuffix()}`;\n } catch {\n return `framer-export-output-${randomOutputSuffix()}`;\n }\n}\nfunction randomOutputSuffix(): string {\n const adjectives = ['clean', 'bright', 'swift', 'sharp', 'fresh', 'solid', 'tidy', 'prime'];\n const nouns = ['mirror', 'export', 'site', 'build', 'copy', 'page', 'stack', 'bundle'];\n const adjective = adjectives[Math.floor(Math.random() * adjectives.length)];\n const noun = nouns[Math.floor(Math.random() * nouns.length)];\n const id = Math.random().toString(36).slice(2, 6);\n return `${adjective}-${noun}-${id}`;\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 interactive: boolean;\n platform: PlatformHandler;\n cooking?: CookingSpinner;\n deviceScaleFactor?: number;\n subpages: Map<string, string> = new Map();\n constructor(\n siteUrl: string,\n outDir: string,\n platformOverride?: PlatformType,\n deviceScaleFactor?: number\n ) {\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 this.interactive = true;\n this.deviceScaleFactor = deviceScaleFactor;\n if (platformOverride && platformOverride !== 'unknown') {\n this.platform = getPlatformByName(platformOverride);\n } else {\n this.platform = detectPlatform(siteUrl);\n }\n }\n async run(includeSubpages: boolean = false): Promise<void> {\n console.log(\n `\\n ${ui.text.bold('Framer Export')} ${chip('mirror')} ${ui.muted('v4 pipeline')}\\n`\n );\n info('Source : ' + chalk.underline(this.siteUrl));\n info('Output : ' + ui.primary(this.outDir));\n info('Platform : ' + ui.primary(this.platform.displayName));\n info('DPR : ' + ui.primary(String(this.deviceScaleFactor || 1)));\n if (includeSubpages) {\n info('Subpages : ' + ui.success('enabled'));\n }\n console.log('');\n this.cooking = new CookingSpinner();\n setCooking(this.cooking);\n resetProgress();\n const sidebar = new ExportSidebar();\n sidebar.start();\n this.phase('Preparing directories...');\n this.cooking.start('Preparing directories...');\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 this.phase('Fetching SSR HTML...');\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 const htmlDetected = detectPlatform(this.siteUrl, this.ssrHTML);\n if (htmlDetected.name !== this.platform.name) {\n this.platform = htmlDetected;\n log('Platform refined: ' + ui.primary(this.platform.displayName) + ' (from HTML analysis)');\n }\n try {\n this.phase('Capturing rendered page...');\n await launchAndCapture(this);\n if (includeSubpages && this.page) {\n await this.crawlSubpages();\n }\n await closeBrowser(this);\n this.phase('Downloading assets...');\n this.cooking.update('Downloading assets...');\n await downloadAll(this);\n this.phase('Resolving lazy-loaded chunks...');\n this.cooking.update('Resolving lazy-loaded chunks...');\n await downloadLazyChunks(this);\n this.phase('Building output...');\n this.cooking.update('Building output...');\n await buildOutput(this);\n if (this.platform.postProcess) {\n this.phase('Post-processing...');\n this.cooking.update('Running ' + this.platform.displayName + ' post-processing...');\n try {\n await this.platform.postProcess(this);\n log('postProcess hook completed');\n } catch (e) {\n log('postProcess hook error (continuing): ' + (e as Error).message);\n }\n }\n } catch (e) {\n sidebar.stop();\n this.cooking?.stop();\n setCooking(null);\n await closeBrowser(this);\n if (e instanceof AntiBotError) {\n await fs.rm(this.outDir, { recursive: true, force: true }).catch(() => {});\n }\n throw e;\n }\n this.phase('Done');\n sidebar.stop();\n this.cooking.stop();\n setCooking(null);\n console.log('');\n success('Export complete!');\n await this.writeExportLog();\n await printSummary(this);\n if (this.interactive) {\n await runAiPromptAssistant(this);\n }\n }\n\n private phase(label: string): void {\n setPhase(label);\n }\n\n private async writeExportLog(): Promise<void> {\n const lines = getLogHistory().map((r) => `[${r.time}] [${r.level}] ${r.message}`);\n const dest = path.join(this.outDir, 'export.log');\n try {\n await fs.writeFile(dest, lines.join('\\n') + '\\n', 'utf-8');\n log('Full export log written: export.log (' + lines.length + ' lines)');\n } catch {}\n }\n private async crawlSubpages(): Promise<void> {\n this.phase('Crawling sub-pages...');\n this.cooking?.update('Discovering sub-pages...');\n log('Scanning page for internal links...');\n const page = this.page!;\n const baseUrl = new URL(this.siteUrl);\n const baseHost = baseUrl.hostname.replace(/^www\\./, '');\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 (\n !href ||\n href.startsWith('javascript:') ||\n href.startsWith('mailto:') ||\n href.startsWith('tel:') ||\n href.startsWith('#')\n )\n continue;\n try {\n const u = new URL(href);\n const h = u.hostname.replace(/^www\\./, '');\n if (\n h === host &&\n u.pathname !== '/' &&\n u.pathname !== '' &&\n !u.pathname.startsWith('/#')\n ) {\n hrefs.add(href.split('#')[0]);\n }\n } catch {}\n }\n return Array.from(hrefs);\n }, baseHost);\n const ssrLinks: string[] = [];\n for (const m of this.ssrHTML.matchAll(/<a\\b[^>]*\\shref=[\"']([^\"']+)[\"']/gi)) {\n const href = m[1];\n if (/^(javascript:|mailto:|tel:|#)/i.test(href)) continue;\n try {\n const u = new URL(href, this.siteUrl);\n if (\n u.protocol.startsWith('http') &&\n u.hostname.replace(/^www\\./, '') === baseHost &&\n u.pathname !== '/' &&\n u.pathname !== ''\n ) {\n ssrLinks.push(u.href.split('#')[0]);\n }\n } catch {}\n }\n const uniqueLinks = [...new Set([...links, ...ssrLinks])].slice(0, 50);\n log('Found ' + uniqueLinks.length + ' sub-page links');\n if (uniqueLinks.length === 0) {\n log('No sub-pages to crawl');\n return;\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 const slug = this.deriveSlug(link, baseUrl);\n const filename = slug + '.html';\n const filepath = path.join(this.outDir, 'subpages', filename);\n await fs.writeFile(filepath, html, 'utf-8');\n this.subpages.set(link, filename);\n noteSubpage();\n noteFile('subpages/' + filename);\n log(' Saved: subpages/' + filename);\n } catch (e) {\n log(' Skipped ' + link + ': ' + (e as Error).message);\n }\n }\n success('Sub-pages crawled: ' + uniqueLinks.length);\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 http from 'node:http';\nimport path from 'node:path';\nimport { URL } from 'node:url';\nimport { UI_HTML } from './page.js';\nimport { APP_JS } from './app-js.js';\nimport { PIXEL_BLAST_JS } from './pixel-blast.js';\nimport { FramerExporter, deriveOutputName } from '../exporter/index.js';\nimport { collectSummary } from '../exporter/summary.js';\nimport {\n platformsByCategory,\n CATEGORY_LABELS,\n CATEGORY_ORDER,\n isBetaPlatform,\n} from '../platforms/index.js';\nimport type { PlatformType } from '../platforms/types.js';\nimport { onLog, getLogHistory, clearLogHistory } from '../logger/index.js';\nimport { onProgress, getProgress } from '../exporter/progress.js';\nimport { ui } from '../cli/theme.js';\n\ninterface ExportRequest {\n url: string;\n platform?: string | null;\n outDir?: string;\n subpages?: boolean;\n prettyPrint?: boolean;\n concurrency?: number;\n}\n\ninterface RunState {\n state: 'idle' | 'running' | 'done' | 'error';\n outDir?: string;\n serveCommand?: string;\n error?: string;\n summary?: Awaited<ReturnType<typeof collectSummary>>;\n}\n\nconst clients = new Set<http.ServerResponse>();\nlet run: RunState = { state: 'idle' };\n\nfunction isAllowedHost(req: http.IncomingMessage): boolean {\n const host = (req.headers.host || '').toLowerCase();\n return /^(localhost|127\\.0\\.0\\.1)(:\\d+)?$/.test(host);\n}\n\nfunction isSameOrigin(req: http.IncomingMessage): boolean {\n const origin = req.headers.origin;\n if (!origin) return true;\n try {\n const parsed = new URL(origin);\n return (\n (parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1') &&\n parsed.port === (req.headers.host || '').split(':')[1]\n );\n } catch {\n return false;\n }\n}\n\nfunction resolveOutDir(requested: string | undefined, fallbackName: string): string | null {\n const cwd = process.cwd();\n const target = path.resolve(cwd, requested || './' + fallbackName);\n if (target !== cwd && !target.startsWith(cwd + path.sep)) return null;\n return target;\n}\n\nfunction quoteForShell(name: string): string {\n return '\"' + name.replace(/[\"`$\\\\\\r\\n]/g, '') + '\"';\n}\n\nfunction sse(event: string, data: unknown): void {\n const payload = `event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`;\n for (const client of clients) client.write(payload);\n}\n\nfunction json(res: http.ServerResponse, code: number, data: unknown): void {\n const body = JSON.stringify(data);\n res.writeHead(code, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(body);\n}\n\nfunction readBody(req: http.IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = '';\n req.on('data', (chunk) => {\n data += chunk;\n if (data.length > 1_000_000) reject(new Error('body too large'));\n });\n req.on('end', () => resolve(data));\n req.on('error', reject);\n });\n}\n\nfunction platformsPayload(): unknown {\n const grouped = platformsByCategory();\n return {\n categories: CATEGORY_ORDER.map((cat) => ({\n id: cat,\n label: CATEGORY_LABELS[cat],\n platforms: grouped[cat].map((h) => ({\n name: h.name,\n displayName: h.displayName,\n beta: isBetaPlatform(h.name),\n })),\n })),\n };\n}\n\nasync function startExport(body: ExportRequest, outDir: string): Promise<void> {\n run = { state: 'running' };\n clearLogHistory();\n sse('status', run);\n\n const { CFG } = await import('../config/index.js');\n CFG.concurrency = body.concurrency || 12;\n\n const exporter = new FramerExporter(\n body.url,\n outDir,\n (body.platform as PlatformType) || undefined\n );\n exporter.prettyPrint = body.prettyPrint !== false;\n exporter.interactive = false;\n\n try {\n await exporter.run(body.subpages === true);\n run = {\n state: 'done',\n outDir,\n serveCommand: `cd ${quoteForShell(path.basename(outDir))} && node serve.js`,\n summary: await collectSummary(outDir),\n };\n } catch (e) {\n run = { state: 'error', error: (e as Error).message };\n }\n sse('status', run);\n}\n\nexport interface UiServerHandle {\n port: number;\n close: () => Promise<void>;\n}\n\nexport function startUiServer(port: number): Promise<UiServerHandle> {\n const unsubscribeLog = onLog((record) => sse('log', record));\n const unsubscribeProgress = onProgress((progress) => sse('progress', progress));\n\n const server = http.createServer(async (req, res) => {\n const parsed = new URL(req.url || '/', 'http://localhost');\n const route = parsed.pathname;\n\n if (!isAllowedHost(req) || !isSameOrigin(req)) {\n json(res, 403, { error: 'forbidden' });\n return;\n }\n\n if (route === '/' && req.method === 'GET') {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(UI_HTML);\n return;\n }\n if (route === '/app.js' && req.method === 'GET') {\n res.writeHead(200, { 'Content-Type': 'text/javascript; charset=utf-8' });\n res.end(APP_JS);\n return;\n }\n if (route === '/pixel-blast.js' && req.method === 'GET') {\n res.writeHead(200, { 'Content-Type': 'text/javascript; charset=utf-8' });\n res.end(PIXEL_BLAST_JS);\n return;\n }\n if (route === '/api/platforms' && req.method === 'GET') {\n json(res, 200, platformsPayload());\n return;\n }\n if (route === '/api/derive' && req.method === 'GET') {\n const url = parsed.searchParams.get('url') || '';\n const platform = (parsed.searchParams.get('platform') as PlatformType) || null;\n try {\n const { detectPlatform } = await import('../platforms/index.js');\n const name = deriveOutputName(url, platform || detectPlatform(url).name);\n json(res, 200, { name });\n } catch {\n json(res, 400, { error: 'invalid url' });\n }\n return;\n }\n if (route === '/api/status' && req.method === 'GET') {\n json(res, 200, { run, progress: getProgress() });\n return;\n }\n if (route === '/api/log' && req.method === 'GET') {\n const text = getLogHistory()\n .map((r) => `[${r.time}] [${r.level}] ${r.message}`)\n .join('\\n');\n res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });\n res.end(text + '\\n');\n return;\n }\n if (route === '/api/events' && req.method === 'GET') {\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n });\n res.write(`event: status\\ndata: ${JSON.stringify(run)}\\n\\n`);\n res.write(`event: progress\\ndata: ${JSON.stringify(getProgress())}\\n\\n`);\n clients.add(res);\n req.on('close', () => clients.delete(res));\n return;\n }\n if (route === '/api/export' && req.method === 'POST') {\n if (run.state === 'running') {\n json(res, 409, { error: 'an export is already running' });\n return;\n }\n let body: ExportRequest;\n try {\n body = JSON.parse(await readBody(req)) as ExportRequest;\n new URL(body.url);\n } catch {\n json(res, 400, { error: 'invalid request body' });\n return;\n }\n const outDir = resolveOutDir(body.outDir, deriveOutputName(body.url, 'framer'));\n if (!outDir) {\n json(res, 400, { error: 'output directory must stay inside the working directory' });\n return;\n }\n json(res, 202, { started: true });\n void startExport(body, outDir);\n return;\n }\n res.writeHead(404, { 'Content-Type': 'application/json' });\n res.end('{\"error\":\"not found\"}');\n });\n\n server.on('close', () => {\n unsubscribeLog();\n unsubscribeProgress();\n });\n\n return new Promise((resolve, reject) => {\n server.on('error', reject);\n server.listen(port, '127.0.0.1', () => {\n const address = server.address();\n const actualPort = typeof address === 'object' && address ? address.port : port;\n console.log('');\n console.log(` ${ui.text.bold('Framer Export UI')}`);\n console.log(` ${ui.muted('Local')} ${ui.primary(`http://localhost:${actualPort}`)}`);\n console.log(` ${ui.muted('Stop')} ${ui.primary('ctrl+c')}`);\n console.log('');\n resolve({\n port: actualPort,\n close: () =>\n new Promise<void>((done) => {\n for (const client of clients) client.end();\n clients.clear();\n server.close(() => done());\n }),\n });\n });\n });\n}\n","import { select, type SelectOption } from './select.js';\nimport {\n platformsByCategory,\n CATEGORY_LABELS,\n CATEGORY_ORDER,\n detectByUrl,\n isBetaPlatform,\n} from '../platforms/index.js';\nimport type { PlatformType } from '../platforms/types.js';\n\nexport const AUTO_DETECT = '__auto__';\n\nexport type ToolSelection = { platform: PlatformType } | { auto: true };\n\nexport async function selectTool(): Promise<ToolSelection> {\n const grouped = platformsByCategory();\n const options: SelectOption[] = [{ label: 'Auto-detect from URL', value: AUTO_DETECT }];\n\n for (const cat of CATEGORY_ORDER) {\n options.push({ label: CATEGORY_LABELS[cat], value: `__heading_${cat}`, heading: true });\n for (const handler of grouped[cat]) {\n options.push({\n label: isBetaPlatform(handler.name)\n ? `${handler.displayName} [beta]`\n : handler.displayName,\n value: handler.name,\n });\n }\n }\n\n const choice = await select('Select a tool to export', options, 0, {\n headerLines: ['25+ platforms supported, type to search the list.'],\n searchable: true,\n footer: 'type to search ↑↓ scroll enter select esc close',\n });\n\n if (choice === AUTO_DETECT) return { auto: true };\n return { platform: choice as PlatformType };\n}\n\nexport function resolveDetected(siteUrl: string): PlatformType | null {\n const detected = detectByUrl(siteUrl);\n return detected ? detected.name : null;\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, getPlatformByName, PLATFORM_REGISTRY } from '../platforms/index.js';\nimport { promptInput, select } from './select.js';\nimport { selectTool, resolveDetected } from './select-grouped.js';\nimport type { PlatformType } from '../platforms/types.js';\nimport { chip, ui } from './theme.js';\n\nfunction checkbox(checked: boolean): string {\n return checked ? '[✓]' : '[ ]';\n}\n\nconst CONCURRENCY_STEPS = [6, 12, 20];\n\nexport async function runSetup(legacyMode: boolean = false): Promise<void> {\n showBanner();\n\n console.log(` ${ui.text.bold('Framer Export setup')} ${chip('interactive')}`);\n console.log(\n ` ${ui.muted('Export 25+ website platforms into a clean, self-hosted local mirror.')}\\n`\n );\n\n if (legacyMode) {\n return runLegacySetup();\n }\n\n let platformName: PlatformType | null = null;\n let autoDetect = false;\n\n const tool = await selectTool();\n if ('auto' in tool) autoDetect = true;\n else platformName = tool.platform;\n\n let siteUrl = '';\n let urlError = '';\n while (!siteUrl) {\n const headerLines = [\n autoDetect\n ? 'Tool: auto-detect from URL'\n : `Tool: ${getPlatformByName(platformName!).displayName}`,\n urlError,\n ].filter(Boolean);\n const input = await promptInput('Enter the site URL', '', { headerLines });\n try {\n new URL(input);\n siteUrl = input;\n urlError = '';\n } catch {\n urlError = 'Invalid URL. Enter a valid URL (https://...)';\n }\n }\n\n if (autoDetect) {\n platformName = detectPlatform(siteUrl).name;\n } else {\n const detected = resolveDetected(siteUrl);\n if (detected && detected !== platformName) {\n const detectedName = getPlatformByName(detected).displayName;\n const chosenName = getPlatformByName(platformName!).displayName;\n const answer = await select(\n 'URL looks like a different platform',\n [\n { label: `Switch to ${detectedName} (detected)`, value: 'switch' },\n { label: `Keep ${chosenName}`, value: 'keep' },\n ],\n 0,\n { headerLines: [`URL: ${siteUrl}`] }\n );\n if (answer === 'switch') platformName = detected;\n }\n }\n\n const derivedName = deriveOutputName(siteUrl, platformName!);\n let outDir = './' + derivedName;\n outDir = await promptInput('Output directory', outDir, {\n headerLines: [`URL: ${siteUrl}`, `Tool: ${getPlatformByName(platformName!).displayName}`],\n });\n\n let prettyPrint = true;\n let concurrency = 12;\n let includeSubpages = false;\n let startExport = false;\n let focusIndex = 0;\n\n options: while (true) {\n const summary = [\n `URL ${siteUrl}`,\n `Tool ${getPlatformByName(platformName!).displayName}`,\n `Output ${path.resolve(outDir)}`,\n ];\n const choice = await select(\n 'Export options',\n [\n { label: `${checkbox(prettyPrint)} Pretty-print JS files`, value: 'pretty' },\n { label: `${checkbox(includeSubpages)} Export sub-pages`, value: 'subpages' },\n {\n label: `[${String(concurrency).padStart(2)}] Download concurrency`,\n value: 'concurrency',\n },\n ],\n focusIndex,\n {\n headerLines: summary,\n actions: [\n { label: 'Start export', value: 'start' },\n { label: 'Back', value: 'back' },\n { label: 'Cancel', value: 'cancel' },\n ],\n footer: 'enter toggle tab actions mouse click esc close',\n }\n );\n\n switch (choice) {\n case 'pretty':\n prettyPrint = !prettyPrint;\n focusIndex = 0;\n continue;\n case 'subpages':\n includeSubpages = !includeSubpages;\n focusIndex = 1;\n continue;\n case 'concurrency': {\n const idx = CONCURRENCY_STEPS.indexOf(concurrency);\n concurrency = CONCURRENCY_STEPS[(idx + 1) % CONCURRENCY_STEPS.length];\n focusIndex = 2;\n continue;\n }\n case 'back':\n outDir = await promptInput('Output directory', outDir, {\n headerLines: [`URL: ${siteUrl}`],\n });\n focusIndex = 0;\n continue;\n case 'start':\n startExport = true;\n break options;\n default:\n startExport = false;\n break options;\n }\n }\n\n if (!startExport) {\n console.log(`\\n ${ui.warning('Export cancelled.')}\\n`);\n return;\n }\n\n console.log('');\n await launchExport(siteUrl, outDir, platformName!, {\n prettyPrint,\n concurrency,\n includeSubpages,\n });\n}\n\nasync function runLegacySetup(): Promise<void> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n\n const ask = async (question: string, defaultVal?: string): Promise<string> => {\n const suffix = defaultVal ? chalk.gray(` (${defaultVal})`) : '';\n const prompt = ` ${ui.primary('●')} ${ui.text.bold(question)}${suffix} ${ui.muted('>')} `;\n const answer = await rl.question(prompt);\n return answer.trim() || defaultVal || '';\n };\n\n const platformInput = await ask('Tool (platform id, or \"auto\")', 'auto');\n const known = PLATFORM_REGISTRY.some((platform) => platform.name === platformInput);\n\n let siteUrl = '';\n while (!siteUrl) {\n const input = await ask('Enter the site URL');\n try {\n new URL(input);\n siteUrl = input;\n } catch {\n console.log(\n ` ${ui.error('✗')} ${ui.error('Invalid URL. Enter a valid URL (https://...)')}\\n`\n );\n }\n }\n\n const platformName = (known ? platformInput : detectPlatform(siteUrl).name) as PlatformType;\n console.log(` ${ui.success('✓')} ${ui.success('Tool:')} ${ui.primary(platformName)}\\n`);\n\n const outDir = await ask('Output directory', './' + deriveOutputName(siteUrl, platformName));\n\n const prettyAnswer = await ask('Pretty-print JS files? (y/n)', 'y');\n const prettyPrint = prettyAnswer.toLowerCase().startsWith('y');\n\n const subpagesAnswer = await ask('Export sub-pages? (y/n)', 'n');\n const includeSubpages = subpagesAnswer.toLowerCase().startsWith('y');\n\n const concurrencyAnswer = await ask('Download concurrency', '12');\n const concurrency = parseInt(concurrencyAnswer, 10) || 12;\n\n const confirm = await ask('Start export? (y/n)', 'y');\n rl.close();\n\n if (!confirm.toLowerCase().startsWith('y')) {\n console.log(`\\n ${ui.warning('Export cancelled.')}\\n`);\n return;\n }\n\n console.log('');\n await launchExport(siteUrl, outDir, platformName, {\n prettyPrint,\n concurrency,\n includeSubpages,\n });\n}\n\nasync function launchExport(\n siteUrl: string,\n outDir: string,\n platformName: PlatformType,\n opts: { prettyPrint: boolean; concurrency: number; includeSubpages: boolean }\n): Promise<void> {\n const { CFG } = await import('../config/index.js');\n CFG.concurrency = opts.concurrency;\n\n const exporter = new FramerExporter(siteUrl, path.resolve(outDir), platformName);\n exporter.prettyPrint = opts.prettyPrint;\n try {\n await exporter.run(opts.includeSubpages);\n } catch (e) {\n const { AntiBotError, formatAntiBotError } = await import('../exporter/anti-bot.js');\n if (e instanceof AntiBotError) {\n console.log(formatAntiBotError(e));\n process.exit(1);\n }\n throw e;\n }\n}\n","import path from 'path';\nimport { URL } from 'url';\nimport { spawnSync } from 'child_process';\nimport pkg from '../../package.json';\nimport { showHelp } from './help.js';\nimport { showBanner } from './banner.js';\nimport { showLoadingIntro } from './cooking.js';\nimport { checkForUpdates } from './update-check.js';\nimport { select } from './select.js';\nimport { ui } from './theme.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 showUpdateNotice(): Promise<void> {\n const latest = await checkForUpdates(VERSION);\n if (!latest) return;\n\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n console.log('');\n console.log(\n ` ${ui.warning('↳')} Update available: ${ui.muted(VERSION)} -> ${ui.success(latest)}`\n );\n console.log(` ${ui.primary(' Run:')} ${ui.primarySoft('npm i -g framer-export@latest')}`);\n console.log('');\n return;\n }\n\n const action = await select(\n 'Update available',\n [\n { label: 'Continue without updating', value: 'continue' },\n { label: 'Update now', value: 'update' },\n ],\n 0,\n {\n headerLines: [\n `Current version: ${VERSION}`,\n `Latest version: ${latest}`,\n 'You can continue now and update later.',\n ],\n footer: 'enter continue · mouse hover/click',\n }\n );\n\n if (action === 'update') {\n console.log(\n ` ${ui.primary('Updating:')} ${ui.primarySoft('npm i -g framer-export@latest')}\\n`\n );\n const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const result = spawnSync(npmCommand, ['i', '-g', 'framer-export@latest'], {\n stdio: 'inherit',\n });\n\n if (result.status === 0) {\n console.log(`\\n ${ui.success('✓')} Updated. Re-run your command to use the new version.\\n`);\n process.exit(0);\n }\n\n console.log(\n `\\n ${ui.error('✗')} Update failed. Run manually: ${ui.primarySoft('npm i -g framer-export@latest')}\\n`\n );\n }\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(` ${ui.text.bold('Framer Export')} ${ui.muted(`v${pkg.version}`)}`);\n console.log(` ${ui.text(pkg.description)}\\n`);\n console.log(` ${ui.text.bold('Author')} ${ui.primary('Dany (danbenba)')}`);\n console.log(\n ` ${ui.text.bold('Portfolio')} ${chalk.underline.hex('#FAB283')('https://github.com/danbenba')}`\n );\n console.log(\n ` ${ui.text.bold('GitHub')} ${chalk.underline.hex('#FAB283')(pkg.repository.url.replace('git+', '').replace('.git', ''))}`\n );\n console.log(\n ` ${ui.text.bold('npm')} ${chalk.underline.hex('#FAB283')(`https://www.npmjs.com/package/${pkg.name}`)}`\n );\n console.log(` ${ui.text.bold('License')} ${ui.success(pkg.license)}`);\n console.log(` ${ui.text.bold('Node')} ${ui.muted(`>=${pkg.engines.node}`)}`);\n console.log('');\n process.exit(0);\n }\n\n if (args.includes('--help') || args.includes('-h')) {\n showHelp();\n process.exit(0);\n }\n\n if (args[0] === 'ui') {\n args.shift();\n const portValue = extractFlag(args, '--port');\n const port = portValue === null ? 4400 : Number(portValue);\n if (!Number.isFinite(port) || port < 0 || port > 65535) {\n console.log(\n ` ${ui.error('✗')} ${ui.error.bold('Invalid port:')} ${ui.text(portValue || '')}\\n`\n );\n process.exit(1);\n }\n showBanner();\n const { startUiServer } = await import('../ui/server.js');\n const handle = await startUiServer(port);\n if (!hasFlag(args, '--no-open')) {\n const target = `http://localhost:${handle.port}`;\n const opener =\n process.platform === 'win32'\n ? { cmd: 'cmd', args: ['/c', 'start', '', target] }\n : process.platform === 'darwin'\n ? { cmd: 'open', args: [target] }\n : { cmd: 'xdg-open', args: [target] };\n spawnSync(opener.cmd, opener.args, { stdio: 'ignore' });\n }\n return;\n }\n\n await showLoadingIntro(VERSION);\n await showUpdateNotice();\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 hasDprFlag = args.includes('--dpr');\n const dprValue = extractFlag(args, '--dpr');\n const includeSubpages: boolean = hasFlag(args, '--subpages');\n\n const deviceScaleFactor = dprValue === null ? 1 : Number(dprValue);\n if (\n (hasDprFlag && dprValue === null) ||\n !Number.isFinite(deviceScaleFactor) ||\n deviceScaleFactor <= 0\n ) {\n console.log(` ${ui.error('✗')} ${ui.error.bold('Invalid DPR:')} ${ui.text(dprValue || '')}`);\n console.log(` ${ui.muted('Expected a positive number, for example: --dpr 2')}\\n`);\n process.exit(1);\n }\n\n showBanner();\n\n const url: string = args[0];\n\n try {\n new URL(url);\n } catch {\n console.log(` ${ui.error('✗')} ${ui.error.bold('Invalid URL:')} ${ui.text(url)}`);\n console.log(` ${ui.muted('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(\n url,\n path.resolve(out),\n platformOverride || undefined,\n deviceScaleFactor\n ).run(includeSubpages);\n } catch (e) {\n const { AntiBotError, formatAntiBotError } = await import('../exporter/anti-bot.js');\n if (e instanceof AntiBotError) {\n console.log(formatAntiBotError(e));\n process.exit(1);\n }\n const chalk = (await import('chalk')).default;\n console.log(\n `\\n ${ui.error('✗')} ${ui.error.bold('FAILED:')} ${ui.text((e as Error).message)}`\n );\n console.log(chalk.gray((e as Error).stack || ''));\n process.exit(1);\n }\n}\n\nmain();\n","import { showBanner } from './banner.js';\nimport { chip, ui } from './theme.js';\nimport {\n platformsByCategory,\n CATEGORY_LABELS,\n CATEGORY_ORDER,\n isBetaPlatform,\n} from '../platforms/index.js';\n\nexport function showHelp(): void {\n showBanner();\n\n console.log(`${ui.text.bold(' USAGE')} ${chip('cli')}\\n`);\n console.log(\n ` ${ui.primary('framer-export')} ${ui.warning('<url>')} ${ui.muted('[output-dir]')}`\n );\n console.log(\n ` ${ui.primary('fexport')} ${ui.warning('<url>')} ${ui.muted('[output-dir]')}`\n );\n console.log(\n ` ${ui.primary('framer-export')} ${ui.success('ui')} ${ui.muted('[--port <n>] [--no-open]')}`\n );\n\n console.log('');\n console.log(ui.text.bold(' OPTIONS\\n'));\n\n const opts: Array<[string, string]> = [\n ['ui', 'Launch the web interface (gallery, options, live logs)'],\n ['--setup', 'Launch the interactive setup assistant'],\n ['--platform <p>', 'Force platform by id (e.g. framer, shopify, notion)'],\n ['--subpages', 'Crawl and export sub-pages'],\n ['--dpr <number>', 'Capture device pixel ratio (default: 1)'],\n ['--legacy-mode', 'With --setup: use text input instead of arrow selection'],\n ['--about', 'Show version and package information'],\n ['--version, -v', 'Show the version number'],\n ['--help, -h', 'Show this help message'],\n ];\n\n for (const [flag, desc] of opts) {\n console.log(` ${ui.success(flag.padEnd(18))} ${ui.text(desc)}`);\n }\n\n console.log('');\n console.log(ui.text.bold(' SUPPORTED PLATFORMS\\n'));\n\n const grouped = platformsByCategory();\n for (const cat of CATEGORY_ORDER) {\n const names = grouped[cat]\n .map((handler) => handler.displayName + (isBetaPlatform(handler.name) ? '*' : ''))\n .join(', ');\n console.log(` ${ui.primary(CATEGORY_LABELS[cat].padEnd(22))} ${ui.muted(names)}`);\n }\n console.log(` ${ui.muted('* beta support, Framer, Webflow and Wix are stable')}`);\n\n console.log('');\n console.log(ui.text.bold(' EXAMPLES\\n'));\n console.log(\n ` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.warning('https://mysite.framer.app')}`\n );\n console.log(\n ` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.warning('https://mysite.webflow.io')}`\n );\n console.log(\n ` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.warning('https://user.wixsite.com/my-site')}`\n );\n console.log(\n ` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.success('--platform webflow')} ${ui.warning('https://custom.com')}`\n );\n console.log(\n ` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.success('--subpages')} ${ui.warning('https://mysite.com')}`\n );\n console.log(` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.success('--setup')}`);\n console.log(\n ` ${ui.muted('$')} ${ui.primary('framer-export')} ${ui.success('--setup --legacy-mode')}`\n );\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 (isNewerVersion(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\nfunction isNewerVersion(latest: string, current: string): boolean {\n const latestParts = parseVersion(latest);\n const currentParts = parseVersion(current);\n\n for (let i = 0; i < Math.max(latestParts.length, currentParts.length); i++) {\n const latestPart = latestParts[i] ?? 0;\n const currentPart = currentParts[i] ?? 0;\n if (latestPart > currentPart) return true;\n if (latestPart < currentPart) return false;\n }\n\n return false;\n}\n\nfunction parseVersion(version: string): number[] {\n return version\n .replace(/^v/, '')\n .split(/[.-]/)\n .map((part) => Number.parseInt(part, 10))\n .filter((part) => Number.isFinite(part));\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAvB,IAAa;AAAb;AAAA;AAAA;AAAO,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAtB,IAAM,gBAyIA,cAQA,cAkGO;AAnPb;AAAA;AAAA;AAAA,IAAM,iBAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,IAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,IAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,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","names":["FONT_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","IMG_EXTS","FONT_EXTS","VIDEO_EXTS","chalk","chalk","chalk","row","chalk","stdin","stdout","view","output","row","URL","https","URL","chalk","chalk","stdout","run","path","init_download","fs","path","fs","path","fs","path","stdin","stdout","target","goal","fs","path","chalk","init_download","http","path","URL","CFG","record","detectPlatform","readline","stdin","stdout","path","URL","chalk","startExport","CFG","AntiBotError","formatAntiBotError","path","URL","json","chalk","startUiServer","runSetup","URL","FramerExporter","deriveOutputName","detectPlatform","path","AntiBotError","formatAntiBotError"]}
|