UNPKG

@react-lib-tech/react-jsx-to-tsx

Version:

A tiny React component library (JS) for converting TSX → JSX and extracting text

1 lines 15.8 kB
{"version":3,"sources":["../src/index.js","../src/utils/restore-project.jsx","../src/utils/rename-jsx-to-tsx.jsx"],"sourcesContent":["export { LovableDownload } from \"./utils/restore-project\";\r\nexport { default as convertFolder } from \"./utils/rename-jsx-to-tsx\";","import axios from \"axios\";\r\nimport fs from \"fs\";\r\nimport path from \"path\";\r\nimport https from \"https\";\r\n\r\nconst httpsAgent = new https.Agent({ rejectUnauthorized: false });\r\n\r\nexport async function LovableDownload({\r\n API_URL = \"https://lovable-api.com/projects/5b9f446c-d608-4948-aed1-7e5ba9ad04c0/source-code\",\r\n Authorization = \"\"\r\n}) {\r\n try {\r\n // 1. Fetch JSON from API\r\n const res = await axios.get(API_URL, {\r\n httpsAgent,\r\n headers: {\r\n Authorization: Authorization,\r\n },\r\n });\r\n\r\n const data = res?.data; // already JSON\r\n for (const file of data.files) {\r\n const filePath = path.join(process.cwd(), file.name);\r\n if (file.binary) {\r\n console.log(`⚠️ Skipping binary file: ${file.name}`);\r\n continue;\r\n }\r\n\r\n // 3. Ensure folder path exists\r\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\r\n\r\n // 4. Write file contents\r\n fs.writeFileSync(filePath, file.contents, \"utf8\");\r\n console.log(`✅ Created: ${filePath}`);\r\n }\r\n\r\n console.log(\"🎉 Project restored with correct folder structure!\");\r\n } catch (err) {\r\n console.error(\"❌ Error:\", err.message);\r\n }\r\n}","import fs from \"fs\";\r\nimport path from \"path\";\r\nimport babel from \"@babel/core\";\r\n\r\nconst presets = [\r\n [\r\n \"@babel/preset-typescript\",\r\n {\r\n isTSX: true,\r\n allExtensions: true,\r\n },\r\n ],\r\n];\r\n\r\n/**\r\n * 📌 Load path aliases from tsconfig.json\r\n */\r\nfunction loadTsConfigAliases() {\r\n const tsconfigPath = path.resolve(\"tsconfig.json\");\r\n if (!fs.existsSync(tsconfigPath)) return {};\r\n\r\n try {\r\n const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, \"utf-8\"));\r\n const paths = tsconfig.compilerOptions?.paths || {};\r\n const baseUrl = tsconfig.compilerOptions?.baseUrl || \".\";\r\n\r\n const aliases = {};\r\n for (const alias in paths) {\r\n const target = paths[alias][0].replace(/\\/\\*$/, \"\");\r\n const aliasKey = alias.replace(/\\/\\*$/, \"\");\r\n aliases[aliasKey] = path.resolve(baseUrl, target);\r\n }\r\n return aliases;\r\n } catch {\r\n console.warn(\"⚠️ Could not parse tsconfig.json paths\");\r\n return {};\r\n }\r\n}\r\n\r\n/**\r\n * 🔄 Fix JSX attributes for React/TSX\r\n */\r\nfunction fixJsxAttributes(code) {\r\n return code\r\n .replace(/\\bclass=/g, \"className=\")\r\n .replace(/\\bfor=/g, \"htmlFor=\")\r\n .replace(/\\bonclick=/gi, \"onClick=\")\r\n .replace(/\\bonchange=/gi, \"onChange=\")\r\n .replace(/\\bonfocus=/gi, \"onFocus=\")\r\n .replace(/\\bonblur=/gi, \"onBlur=\");\r\n}\r\n\r\n/**\r\n * 🏷️ Convert PropTypes -> TS interface\r\n */\r\nfunction extractPropTypes(code, componentName) {\r\n const propTypesRegex = new RegExp(\r\n `${componentName}\\\\.propTypes\\\\s*=\\\\s*{([\\\\s\\\\S]*?)};?`,\r\n \"m\"\r\n );\r\n const match = code.match(propTypesRegex);\r\n if (!match) return null;\r\n\r\n const propsBlock = match[1];\r\n const lines = propsBlock.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\r\n\r\n const fields = lines.map((line) => {\r\n const [rawKey, rawType] = line.replace(/[,}]/g, \"\").split(\":\").map((s) => s.trim());\r\n let tsType = \"any\";\r\n let optional = true;\r\n\r\n if (/isRequired/.test(rawType)) optional = false;\r\n if (/string/.test(rawType)) tsType = \"string\";\r\n else if (/number/.test(rawType)) tsType = \"number\";\r\n else if (/bool/.test(rawType)) tsType = \"boolean\";\r\n else if (/array/.test(rawType)) tsType = \"any[]\";\r\n else if (/object/.test(rawType)) tsType = \"Record<string, any>\";\r\n else if (/func/.test(rawType)) tsType = \"() => void\";\r\n\r\n return ` ${rawKey}${optional ? \"?\" : \"\"}: ${tsType};`;\r\n });\r\n\r\n return `\\ninterface ${componentName}Props {\\n${fields.join(\"\\n\")}\\n}\\n\\n`;\r\n}\r\n\r\n/**\r\n * 🏷️ Extract defaultProps values\r\n */\r\nfunction extractDefaultProps(code, componentName) {\r\n const defaultPropsRegex = new RegExp(\r\n `${componentName}\\\\.defaultProps\\\\s*=\\\\s*{([\\\\s\\\\S]*?)};?`,\r\n \"m\"\r\n );\r\n const match = code.match(defaultPropsRegex);\r\n if (!match) return {};\r\n\r\n const propsBlock = match[1];\r\n const lines = propsBlock.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\r\n\r\n const defaults = {};\r\n for (const line of lines) {\r\n const [key, value] = line.replace(/[,}]/g, \"\").split(\":\").map((s) => s.trim());\r\n if (key && value) defaults[key] = value;\r\n }\r\n return defaults;\r\n}\r\n\r\n/**\r\n * 🏷️ Add interface for function & arrow components\r\n */\r\nfunction addInterfaceForProps(code, defaults) {\r\n const funcRegex = /function\\s+([A-Z][A-Za-z0-9_]*)\\s*\\(\\s*{([^}]*)}\\s*\\)/;\r\n const arrowRegex = /const\\s+([A-Z][A-Za-z0-9_]*)\\s*=\\s*\\(\\s*{([^}]*)}\\s*\\)\\s*=>/;\r\n\r\n let match = code.match(funcRegex) || code.match(arrowRegex);\r\n if (!match) return code;\r\n\r\n const componentName = match[1];\r\n const propsRaw = match[2].split(\",\").map((p) => p.trim()).filter(Boolean);\r\n\r\n if (propsRaw.length === 0) return code;\r\n\r\n const interfaceName = `${componentName}Props`;\r\n const interfaceFields = propsRaw.map((p) => ` ${p}?: any;`).join(\"\\n\");\r\n const interfaceCode = `\\ninterface ${interfaceName} {\\n${interfaceFields}\\n}\\n\\n`;\r\n\r\n // Apply defaults\r\n const withDefaults = propsRaw\r\n .map((p) => (defaults[p] ? `${p} = ${defaults[p]}` : p))\r\n .join(\", \");\r\n\r\n if (funcRegex.test(code)) {\r\n code = code.replace(\r\n funcRegex,\r\n `function ${componentName}({ ${withDefaults} }: ${interfaceName}): JSX.Element`\r\n );\r\n } else {\r\n code = code.replace(\r\n arrowRegex,\r\n `const ${componentName}: React.FC<${interfaceName}> = ({ ${withDefaults} }) =>`\r\n );\r\n }\r\n\r\n if (!code.includes(`interface ${interfaceName}`)) {\r\n code = interfaceCode + code;\r\n }\r\n if (/React\\.FC/.test(code) && !/import\\s+.*React/.test(code)) {\r\n code = `import React from \"react\";\\n` + code;\r\n }\r\n\r\n return code;\r\n}\r\n\r\n/**\r\n * 🏷️ Add typing for forwardRef components\r\n */\r\nfunction addTypesForForwardRef(code) {\r\n const forwardRefRegex =\r\n /const\\s+([A-Z][A-Za-z0-9_]*)\\s*=\\s*React\\.forwardRef\\(\\s*\\(([^)]*)\\)\\s*=>/;\r\n\r\n const match = code.match(forwardRefRegex);\r\n if (!match) return code;\r\n\r\n const componentName = match[1];\r\n return code.replace(\r\n forwardRefRegex,\r\n `const ${componentName} = React.forwardRef<React.ElementRef<typeof Button>, React.ComponentProps<typeof Button>>(($2) =>`\r\n );\r\n}\r\n\r\n/**\r\n * 📄 Convert single file\r\n */\r\nasync function jsxToTsx(srcPath, outPath) {\r\n try {\r\n const code = fs.readFileSync(srcPath, \"utf-8\");\r\n const result = await babel.transformAsync(code, { filename: srcPath, presets });\r\n if (!result?.code) throw new Error(\"Babel failed\");\r\n\r\n let output = result.code;\r\n\r\n // Detect component\r\n const componentMatch = output.match(/(function|const)\\s+([A-Z][A-Za-z0-9_]*)/);\r\n const componentName = componentMatch ? componentMatch[2] : null;\r\n\r\n let defaults = {};\r\n if (componentName) {\r\n defaults = extractDefaultProps(code, componentName);\r\n output = addInterfaceForProps(output, defaults);\r\n\r\n const interfaceFromPT = extractPropTypes(code, componentName);\r\n if (interfaceFromPT && !output.includes(`interface ${componentName}Props`)) {\r\n output = interfaceFromPT + output;\r\n }\r\n }\r\n\r\n // ✨ ForwardRef support\r\n output = addTypesForForwardRef(output);\r\n\r\n // ✨ Fix JSX attributes\r\n output = fixJsxAttributes(output);\r\n\r\n // 🔄 Replace aliases dynamically\r\n const aliases = loadTsConfigAliases();\r\n for (const alias in aliases) {\r\n const target = aliases[alias];\r\n const aliasRegex = new RegExp(`${alias}/`, \"g\");\r\n output = output.replace(aliasRegex, target + \"/\");\r\n }\r\n\r\n // 🧹 Remove propTypes & defaultProps\r\n if (componentName) {\r\n const propTypesRegex = new RegExp(`${componentName}\\\\.propTypes\\\\s*=\\\\s*{[\\\\s\\\\S]*?};?`, \"m\");\r\n const defaultPropsRegex = new RegExp(`${componentName}\\\\.defaultProps\\\\s*=\\\\s*{[\\\\s\\\\S]*?};?`, \"m\");\r\n output = output.replace(propTypesRegex, \"\");\r\n output = output.replace(defaultPropsRegex, \"\");\r\n }\r\n\r\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\r\n fs.writeFileSync(outPath, output, \"utf-8\");\r\n console.log(`✅ Converted: ${srcPath} → ${outPath}`);\r\n } catch (err) {\r\n console.error(`❌ Error converting ${srcPath}: ${err.message}`);\r\n }\r\n}\r\n\r\n/**\r\n * 📂 Walk folders\r\n */\r\nasync function convertFolder(srcFolder, outFolder) {\r\n const entries = fs.readdirSync(srcFolder, { withFileTypes: true });\r\n for (const entry of entries) {\r\n const srcPath = path.join(srcFolder, entry.name);\r\n const outPath = path.join(outFolder, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n await convertFolder(srcPath, outPath);\r\n } else if (entry.isFile()) {\r\n if (entry.name.endsWith(\".jsx\")) {\r\n await jsxToTsx(srcPath, outPath.replace(/\\.jsx$/, \".tsx\"));\r\n } else if (entry.name.endsWith(\".js\")) {\r\n await jsxToTsx(srcPath, outPath.replace(/\\.js$/, \".ts\"));\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default convertFolder;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAkB;AAClB,gBAAe;AACf,kBAAiB;AACjB,mBAAkB;AAElB,IAAM,aAAa,IAAI,aAAAA,QAAM,MAAM,EAAE,oBAAoB,MAAM,CAAC;AAEhE,eAAsB,gBAAgB;AAAA,EACpC,UAAU;AAAA,EACV,gBAAgB;AAClB,GAAG;AACD,MAAI;AAEF,UAAM,MAAM,MAAM,aAAAC,QAAM,IAAI,SAAS;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,OAAO,2BAAK;AAClB,eAAW,QAAQ,KAAK,OAAO;AAC7B,YAAM,WAAW,YAAAC,QAAK,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;AACnD,UAAI,KAAK,QAAQ;AACf,gBAAQ,IAAI,sCAA4B,KAAK,IAAI,EAAE;AACnD;AAAA,MACF;AAGA,gBAAAC,QAAG,UAAU,YAAAD,QAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAGxD,gBAAAC,QAAG,cAAc,UAAU,KAAK,UAAU,MAAM;AAChD,cAAQ,IAAI,mBAAc,QAAQ,EAAE;AAAA,IACtC;AAEA,YAAQ,IAAI,2DAAoD;AAAA,EAClE,SAAS,KAAK;AACZ,YAAQ,MAAM,iBAAY,IAAI,OAAO;AAAA,EACvC;AACF;;;ACxCA,IAAAC,aAAe;AACf,IAAAC,eAAiB;AACjB,kBAAkB;AAElB,IAAM,UAAU;AAAA,EACd;AAAA,IACE;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAKA,SAAS,sBAAsB;AAjB/B;AAkBE,QAAM,eAAe,aAAAC,QAAK,QAAQ,eAAe;AACjD,MAAI,CAAC,WAAAC,QAAG,WAAW,YAAY,EAAG,QAAO,CAAC;AAE1C,MAAI;AACF,UAAM,WAAW,KAAK,MAAM,WAAAA,QAAG,aAAa,cAAc,OAAO,CAAC;AAClE,UAAM,UAAQ,cAAS,oBAAT,mBAA0B,UAAS,CAAC;AAClD,UAAM,YAAU,cAAS,oBAAT,mBAA0B,YAAW;AAErD,UAAM,UAAU,CAAC;AACjB,eAAW,SAAS,OAAO;AACzB,YAAM,SAAS,MAAM,KAAK,EAAE,CAAC,EAAE,QAAQ,SAAS,EAAE;AAClD,YAAM,WAAW,MAAM,QAAQ,SAAS,EAAE;AAC1C,cAAQ,QAAQ,IAAI,aAAAD,QAAK,QAAQ,SAAS,MAAM;AAAA,IAClD;AACA,WAAO;AAAA,EACT,QAAQ;AACN,YAAQ,KAAK,kDAAwC;AACrD,WAAO,CAAC;AAAA,EACV;AACF;AAKA,SAAS,iBAAiB,MAAM;AAC9B,SAAO,KACJ,QAAQ,aAAa,YAAY,EACjC,QAAQ,WAAW,UAAU,EAC7B,QAAQ,gBAAgB,UAAU,EAClC,QAAQ,iBAAiB,WAAW,EACpC,QAAQ,gBAAgB,UAAU,EAClC,QAAQ,eAAe,SAAS;AACrC;AAKA,SAAS,iBAAiB,MAAM,eAAe;AAC7C,QAAM,iBAAiB,IAAI;AAAA,IACzB,GAAG,aAAa;AAAA,IAChB;AAAA,EACF;AACA,QAAM,QAAQ,KAAK,MAAM,cAAc;AACvC,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,aAAa,MAAM,CAAC;AAC1B,QAAM,QAAQ,WAAW,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAExE,QAAM,SAAS,MAAM,IAAI,CAAC,SAAS;AACjC,UAAM,CAAC,QAAQ,OAAO,IAAI,KAAK,QAAQ,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAClF,QAAI,SAAS;AACb,QAAI,WAAW;AAEf,QAAI,aAAa,KAAK,OAAO,EAAG,YAAW;AAC3C,QAAI,SAAS,KAAK,OAAO,EAAG,UAAS;AAAA,aAC5B,SAAS,KAAK,OAAO,EAAG,UAAS;AAAA,aACjC,OAAO,KAAK,OAAO,EAAG,UAAS;AAAA,aAC/B,QAAQ,KAAK,OAAO,EAAG,UAAS;AAAA,aAChC,SAAS,KAAK,OAAO,EAAG,UAAS;AAAA,aACjC,OAAO,KAAK,OAAO,EAAG,UAAS;AAExC,WAAO,KAAK,MAAM,GAAG,WAAW,MAAM,EAAE,KAAK,MAAM;AAAA,EACrD,CAAC;AAED,SAAO;AAAA,YAAe,aAAa;AAAA,EAAY,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAClE;AAKA,SAAS,oBAAoB,MAAM,eAAe;AAChD,QAAM,oBAAoB,IAAI;AAAA,IAC5B,GAAG,aAAa;AAAA,IAChB;AAAA,EACF;AACA,QAAM,QAAQ,KAAK,MAAM,iBAAiB;AAC1C,MAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,QAAM,aAAa,MAAM,CAAC;AAC1B,QAAM,QAAQ,WAAW,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAExE,QAAM,WAAW,CAAC;AAClB,aAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,KAAK,KAAK,IAAI,KAAK,QAAQ,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAC7E,QAAI,OAAO,MAAO,UAAS,GAAG,IAAI;AAAA,EACpC;AACA,SAAO;AACT;AAKA,SAAS,qBAAqB,MAAM,UAAU;AAC5C,QAAM,YAAY;AAClB,QAAM,aAAa;AAEnB,MAAI,QAAQ,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,UAAU;AAC1D,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,gBAAgB,MAAM,CAAC;AAC7B,QAAM,WAAW,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAExE,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,QAAM,gBAAgB,GAAG,aAAa;AACtC,QAAM,kBAAkB,SAAS,IAAI,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI;AACtE,QAAM,gBAAgB;AAAA,YAAe,aAAa;AAAA,EAAO,eAAe;AAAA;AAAA;AAAA;AAGxE,QAAM,eAAe,SAClB,IAAI,CAAC,MAAO,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,KAAK,CAAE,EACtD,KAAK,IAAI;AAEZ,MAAI,UAAU,KAAK,IAAI,GAAG;AACxB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,YAAY,aAAa,MAAM,YAAY,OAAO,aAAa;AAAA,IACjE;AAAA,EACF,OAAO;AACL,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS,aAAa,cAAc,aAAa,UAAU,YAAY;AAAA,IACzE;AAAA,EACF;AAEA,MAAI,CAAC,KAAK,SAAS,aAAa,aAAa,EAAE,GAAG;AAChD,WAAO,gBAAgB;AAAA,EACzB;AACA,MAAI,YAAY,KAAK,IAAI,KAAK,CAAC,mBAAmB,KAAK,IAAI,GAAG;AAC5D,WAAO;AAAA,IAAiC;AAAA,EAC1C;AAEA,SAAO;AACT;AAKA,SAAS,sBAAsB,MAAM;AACnC,QAAM,kBACJ;AAEF,QAAM,QAAQ,KAAK,MAAM,eAAe;AACxC,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,gBAAgB,MAAM,CAAC;AAC7B,SAAO,KAAK;AAAA,IACV;AAAA,IACA,SAAS,aAAa;AAAA,EACxB;AACF;AAKA,eAAe,SAAS,SAAS,SAAS;AACxC,MAAI;AACF,UAAM,OAAO,WAAAC,QAAG,aAAa,SAAS,OAAO;AAC7C,UAAM,SAAS,MAAM,YAAAC,QAAM,eAAe,MAAM,EAAE,UAAU,SAAS,QAAQ,CAAC;AAC9E,QAAI,EAAC,iCAAQ,MAAM,OAAM,IAAI,MAAM,cAAc;AAEjD,QAAI,SAAS,OAAO;AAGpB,UAAM,iBAAiB,OAAO,MAAM,yCAAyC;AAC7E,UAAM,gBAAgB,iBAAiB,eAAe,CAAC,IAAI;AAE3D,QAAI,WAAW,CAAC;AAChB,QAAI,eAAe;AACjB,iBAAW,oBAAoB,MAAM,aAAa;AAClD,eAAS,qBAAqB,QAAQ,QAAQ;AAE9C,YAAM,kBAAkB,iBAAiB,MAAM,aAAa;AAC5D,UAAI,mBAAmB,CAAC,OAAO,SAAS,aAAa,aAAa,OAAO,GAAG;AAC1E,iBAAS,kBAAkB;AAAA,MAC7B;AAAA,IACF;AAGA,aAAS,sBAAsB,MAAM;AAGrC,aAAS,iBAAiB,MAAM;AAGhC,UAAM,UAAU,oBAAoB;AACpC,eAAW,SAAS,SAAS;AAC3B,YAAM,SAAS,QAAQ,KAAK;AAC5B,YAAM,aAAa,IAAI,OAAO,GAAG,KAAK,KAAK,GAAG;AAC9C,eAAS,OAAO,QAAQ,YAAY,SAAS,GAAG;AAAA,IAClD;AAGA,QAAI,eAAe;AACjB,YAAM,iBAAiB,IAAI,OAAO,GAAG,aAAa,uCAAuC,GAAG;AAC5F,YAAM,oBAAoB,IAAI,OAAO,GAAG,aAAa,0CAA0C,GAAG;AAClG,eAAS,OAAO,QAAQ,gBAAgB,EAAE;AAC1C,eAAS,OAAO,QAAQ,mBAAmB,EAAE;AAAA,IAC/C;AAEA,eAAAD,QAAG,UAAU,aAAAD,QAAK,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;AACvD,eAAAC,QAAG,cAAc,SAAS,QAAQ,OAAO;AACzC,YAAQ,IAAI,qBAAgB,OAAO,WAAM,OAAO,EAAE;AAAA,EACpD,SAAS,KAAK;AACZ,YAAQ,MAAM,2BAAsB,OAAO,KAAK,IAAI,OAAO,EAAE;AAAA,EAC/D;AACF;AAKA,eAAe,cAAc,WAAW,WAAW;AACjD,QAAM,UAAU,WAAAA,QAAG,YAAY,WAAW,EAAE,eAAe,KAAK,CAAC;AACjE,aAAW,SAAS,SAAS;AAC3B,UAAM,UAAU,aAAAD,QAAK,KAAK,WAAW,MAAM,IAAI;AAC/C,UAAM,UAAU,aAAAA,QAAK,KAAK,WAAW,MAAM,IAAI;AAE/C,QAAI,MAAM,YAAY,GAAG;AACvB,YAAM,cAAc,SAAS,OAAO;AAAA,IACtC,WAAW,MAAM,OAAO,GAAG;AACzB,UAAI,MAAM,KAAK,SAAS,MAAM,GAAG;AAC/B,cAAM,SAAS,SAAS,QAAQ,QAAQ,UAAU,MAAM,CAAC;AAAA,MAC3D,WAAW,MAAM,KAAK,SAAS,KAAK,GAAG;AACrC,cAAM,SAAS,SAAS,QAAQ,QAAQ,SAAS,KAAK,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,4BAAQ;","names":["https","axios","path","fs","import_fs","import_path","path","fs","babel"]}