{"version":3,"sources":["jsdelivr-header.js","/npm/create-vite-extra@4.1.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;OCHO,OAAQ,iBACR,SAAU,mBACR,kBAAqB,kBACvB,aAAc,kBACd,YAAa,iBACb,WAAY,aAEnB,MAAM,KACJ,KAAI,KACJ,KAAI,MACJ,MAAK,UACL,UAAS,WACT,WAAU,QACV,QAAO,IACP,IAAG,MACH,MAAK,OACL,OAAM,cACN,eACE,OAIE,KAAO,SAAS,QAAQ,KAAK,MAAM,GAAI,CAC3C,OAAQ,CAAC,KACT,QAAS,CAAC,eAEN,IAAM,QAAQ,MAEd,WAAa,CACjB,CACE,KAAM,cACN,MAAO,OACP,SAAU,CACR,CACE,KAAM,cACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,iBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,UACN,MAAO,MACP,SAAU,CACR,CACE,KAAM,oBACN,QAAS,YACT,MAAO,MACP,SAAU,CACR,CACE,KAAM,oBACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,uBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,UACN,QAAS,gBACT,MAAO,MACP,SAAU,CACR,CACE,KAAM,UACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,aACN,QAAS,aACT,MAAO,UAMjB,CACE,KAAM,YACN,MAAO,KACP,SAAU,CACR,CACE,KAAM,sBACN,QAAS,YACT,MAAO,KACP,SAAU,CACR,CACE,KAAM,sBACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,yBACN,QAAS,aACT,MAAO,MAET,CACE,KAAM,0BACN,QAAS,mBACT,MAAO,QAET,CACE,KAAM,6BACN,QAAS,mBACT,MAAO,QAIb,CACE,KAAM,YACN,QAAS,gBACT,MAAO,KACP,SAAU,CACR,CACE,KAAM,YACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,eACN,QAAS,aACT,MAAO,MAET,CACE,KAAM,gBACN,QAAS,mBACT,MAAO,QAET,CACE,KAAM,mBACN,QAAS,mBACT,MAAO,UAMjB,CACE,KAAM,aACN,MAAO,QACP,SAAU,CACR,CACE,KAAM,aACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,gBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,aACN,MAAO,IACP,SAAU,CACR,CACE,KAAM,aACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,gBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,YACN,MAAO,WACP,SAAU,CACR,CACE,KAAM,YACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,eACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,eACN,MAAO,OACP,SAAU,CACR,CACE,KAAM,eACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,kBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,WACN,MAAO,MACP,SAAU,CACR,CACE,KAAM,WACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,cACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,aACN,MAAO,KACP,SAAU,CACR,CACE,KAAM,aACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,gBACN,QAAS,aACT,MAAO,MAET,CACE,KAAM,iBACN,QAAS,mBACT,MAAO,QAET,CACE,KAAM,oBACN,QAAS,mBACT,MAAO,QAIb,CACE,KAAM,cACN,MAAO,QACP,SAAU,CACR,CACE,KAAM,cACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,iBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,WACN,MAAO,UACP,SAAU,CACR,CACE,KAAM,WACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,cACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,cACN,MAAO,IACP,SAAU,CACR,CACE,KAAM,cACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,iBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,aACN,MAAO,WACP,SAAU,CACR,CACE,KAAM,aACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,gBACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,UACN,MAAO,cACP,SAAU,CACR,CACE,KAAM,UACN,QAAS,aACT,MAAO,QAET,CACE,KAAM,aACN,QAAS,aACT,MAAO,QAIb,CACE,KAAM,gBACN,MAAO,YAIX,SAAS,gBAAgB,GACvB,OAAI,EAAU,SACL,EAAU,SAAS,SAAS,GAAY,gBAAgB,KAE1D,CAAC,EAAU,KACpB,CAEA,MAAM,UAAY,WAAW,QAAQ,iBAE/B,YAAc,CAClB,WAAY,cAGd,eAAe,OAGb,IAAI,EAAY,gBAAgB,KAAK,EAAE,IACvC,MAAM,EAAc,KAAK,UAAY,KAAK,EAEpC,EAAmB,eACnB,EAAiB,IAAM,KAAK,SAAS,KAAK,QAAQ,IAExD,IAAI,EAAS,CAAC,EAEd,IACE,QAAe,QACb,CACE,CACE,KAAM,EAAY,KAAO,OACzB,KAAM,cACN,QAAS,MAAM,iBACf,QAAS,EACT,QAAU,IACR,EAAY,gBAAgB,EAAM,QAAU,IAGhD,CACE,KAAM,IACJ,KAAK,YAEA,GAAG,WAAW,IAAc,QAAQ,GADrC,KAGE,UACR,KAAM,YACN,UAAS,KAAK,UACd,QAAS,KACQ,MAAd,EACG,oBACA,qBAAqB,MACzB,sDAEJ,CAEE,KAAM,CAAC,GAAK,aAAc,CAAC,KACzB,IAAkB,IAAd,EACF,MAAM,IAAI,MAAM,IAAI,KAAO,wBAE7B,OAAO,MAET,KAAM,oBAER,CACE,KAAM,IAAO,mBAAmB,KAAoB,KAAO,OAC3D,KAAM,cACN,QAAS,MAAM,iBACf,QAAS,IAAM,mBAAmB,KAClC,SAAW,GACT,mBAAmB,IAAQ,6BAE/B,CACE,KACE,GAAe,UAAU,SAAS,GAAe,KAAO,SAC1D,KAAM,YACN,QACyB,iBAAhB,GAA6B,UAAU,SAAS,GAInD,MAAM,sBAHN,MACE,IAAI,yDAGZ,QAAS,EACT,QAAS,WAAW,KAAK,IAEhB,CACL,OAAO,EAFc,EAAU,OAET,EAAU,SAAW,EAAU,MACrD,MAAO,OAKb,CACE,KAAO,GACL,GAAa,EAAU,SAAW,SAAW,KAC/C,KAAM,UACN,QAAS,MAAM,qBAEf,QAAU,GACR,EAAU,SAAS,KAAK,IAEf,CACL,OAAO,EAFY,EAAQ,OAEP,EAAQ,SAAW,EAAQ,MAC/C,MAAO,EAAQ,SAAW,EAAU,EAAQ,UAKpD,CACE,KAAO,GACL,GAAa,EAAU,SAAW,SAAW,KAC/C,KAAM,UACN,QAAS,MAAM,qBAEf,QAAU,GACR,EAAU,SAAS,KAAK,IAEf,CACL,OAAO,EAFY,EAAQ,OAEP,EAAQ,SAAW,EAAQ,MAC/C,MAAO,EAAQ,WAKzB,CACE,SAAU,KACR,MAAM,IAAI,MAAM,IAAI,KAAO,uBAAsB,GAIzD,CAAE,MAAO,GAEP,YADA,QAAQ,IAAI,EAAU,QAExB,CAGA,MAAM,UAAE,EAAS,UAAE,EAAS,YAAE,EAAW,QAAE,GAAY,EAEjD,EAAO,KAAK,KAAK,IAAK,GAExB,EACF,SAAS,GACC,GAAG,WAAW,IACxB,GAAG,UAAU,EAAM,CAAE,WAAW,IAIlC,IAAI,EAAW,GAAW,GAAW,MAAQ,EACzC,GAAa,EACb,EAAS,SAAS,UACpB,GAAa,EACb,EAAW,EAAS,QAAQ,OAAQ,KAGtC,QAAQ,IAAI,4BAA4B,QAExC,MAAM,EAAc,KAAK,QACvB,0BAA0B,KAC1B,KACA,YAAY,KAGR,EAAQ,CAAC,EAAM,KACnB,MAAM,EAAa,YAAY,GAC3B,KAAK,KAAK,EAAM,YAAY,IAC5B,KAAK,KAAK,EAAM,GAChB,EACF,GAAG,cAAc,EAAY,GAE7B,KAAK,KAAK,KAAK,EAAa,GAAO,EACrC,EAGI,EAAQ,GAAG,YAAY,GAC7B,IAAK,MAAM,KAAQ,EAAM,QAAQ,GAAY,iBAAN,IACrC,EAAM,GAIR,GADe,EAAS,WAAW,SAE7B,GACF,cAAc,EAAM,CAAE,KAAM,EAAS,SAAS,OAAQ,QAAQ,IAGhE,QAAQ,IAAI,sBACR,IAAS,KACX,QAAQ,IAAI,QAAQ,KAAK,SAAS,IAAK,MAEzC,QAAQ,IAAI,mBACZ,QAAQ,UACH,CACL,MAAM,EAAM,KAAK,MACf,GAAG,aAAa,KAAK,KAAK,EAAa,gBAAiB,UAG1D,EAAI,KAAO,GAAe,IAE1B,EAAM,eAAgB,KAAK,UAAU,EAAK,KAAM,IAE5C,GACF,cAAc,EAAM,CAAE,KAAM,EAAS,SAAS,OAAQ,QAAQ,IAGhE,MAAM,EAAU,iBAAiB,QAAQ,IAAI,uBACvC,EAAa,EAAU,EAAQ,KAAO,MAM5C,GAJA,QAAQ,IAAI,sBACR,IAAS,KACX,QAAQ,IAAI,QAAQ,KAAK,SAAS,IAAK,MAGlC,SADC,EAEJ,QAAQ,IAAI,UACZ,QAAQ,IAAI,mBAGZ,QAAQ,IAAI,KAAK,aACjB,QAAQ,IAAI,KAAK,aAGrB,QAAQ,KACV,CACF,CAKA,SAAS,gBAAgB,GACvB,OAAO,GAAW,OAAO,QAAQ,QAAS,GAC5C,CAEA,SAAS,KAAK,EAAK,GACJ,GAAG,SAAS,GAChB,cACP,QAAQ,EAAK,GAEb,GAAG,aAAa,EAAK,EAEzB,CAKA,SAAS,mBAAmB,GAC1B,MAAO,6DAA6D,KAClE,EAEJ,CAKA,SAAS,mBAAmB,GAC1B,OAAO,EACJ,OACA,cACA,QAAQ,OAAQ,KAChB,QAAQ,QAAS,IACjB,QAAQ,gBAAiB,IAC9B,CAMA,SAAS,QAAQ,EAAQ,GACvB,GAAG,UAAU,EAAS,CAAE,WAAW,IACnC,IAAK,MAAM,KAAQ,GAAG,YAAY,GAAS,CAGzC,KAFgB,KAAK,QAAQ,EAAQ,GACpB,KAAK,QAAQ,EAAS,GAEzC,CACF,CAKA,SAAS,QAAQ,GACf,MAAM,EAAQ,GAAG,YAAY,GAC7B,OAAwB,IAAjB,EAAM,QAAkC,IAAjB,EAAM,QAA6B,SAAb,EAAM,EAC5D,CAKA,SAAS,SAAS,GAChB,GAAK,GAAG,WAAW,GAGnB,IAAK,MAAM,KAAQ,GAAG,YAAY,GAChC,GAAG,OAAO,KAAK,QAAQ,EAAK,GAAO,CAAE,WAAW,EAAM,OAAO,GAEjE,CAMA,SAAS,iBAAiB,GACxB,IAAK,EAAW,OAChB,MACM,EADU,EAAU,MAAM,KAAK,GACV,MAAM,KACjC,MAAO,CACL,KAAM,EAAW,GACjB,QAAS,EAAW,GAExB,CAMA,SAAS,cAAc,GAAM,KAAE,EAAI,OAAE,IAC/B,EACF,SAAS,KAAK,QAAQ,EAAM,cAAe,GAClC,EAAQ,QACb,iCACA,uEAIJ,SAAS,KAAK,QAAQ,EAAM,iBAAkB,GACrC,EAAQ,QACb,iCACA,0CAIN,SACE,KAAK,QAAQ,EAAM,gBAAe,EAAO,KAAO,QAC/C,GACQ,EAAQ,QAAQ,uBAAwB,6BAGrD,CAOA,SAAS,SAAS,EAAM,GACtB,MAAM,EAAU,GAAG,aAAa,EAAM,SACtC,GAAG,cAAc,EAAM,EAAS,GAAU,QAC5C,CAEA,OAAO,OAAO,IACZ,QAAQ,MAAM,EAAC","file":"/npm/create-vite-extra@4.1.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/create-vite-extra@4.1.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","#!/usr/bin/env node\n\n// @ts-check\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport minimist from 'minimist'\nimport prompts from 'prompts'\nimport colors from 'picocolors'\n\nconst {\n  blue,\n  cyan,\n  green,\n  redBright,\n  blueBright,\n  magenta,\n  red,\n  reset,\n  yellow,\n  magentaBright,\n} = colors\n\n// Avoids autoconversion to number of the project name by defining that the args\n// non associated with an option ( _ ) needs to be parsed as a string. See #4606\nconst argv = minimist(process.argv.slice(2), {\n  string: ['_'],\n  boolean: ['overwrite'],\n})\nconst cwd = process.cwd()\n\nconst FRAMEWORKS = [\n  {\n    name: 'ssr-vanilla',\n    color: yellow,\n    variants: [\n      {\n        name: 'ssr-vanilla',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'ssr-vanilla-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'ssr-vue',\n    color: green,\n    variants: [\n      {\n        name: 'ssr-vue-streaming',\n        display: 'Streaming',\n        color: green,\n        variants: [\n          {\n            name: 'ssr-vue-streaming',\n            display: 'JavaScript',\n            color: yellow,\n          },\n          {\n            name: 'ssr-vue-streaming-ts',\n            display: 'TypeScript',\n            color: blue,\n          },\n        ],\n      },\n      {\n        name: 'ssr-vue',\n        display: 'Non-streaming',\n        color: green,\n        variants: [\n          {\n            name: 'ssr-vue',\n            display: 'JavaScript',\n            color: yellow,\n          },\n          {\n            name: 'ssr-vue-ts',\n            display: 'TypeScript',\n            color: blue,\n          },\n        ],\n      },\n    ],\n  },\n  {\n    name: 'ssr-react',\n    color: cyan,\n    variants: [\n      {\n        name: 'ssr-react-streaming',\n        display: 'Streaming',\n        color: cyan,\n        variants: [\n          {\n            name: 'ssr-react-streaming',\n            display: 'JavaScript',\n            color: yellow,\n          },\n          {\n            name: 'ssr-react-streaming-ts',\n            display: 'TypeScript',\n            color: blue,\n          },\n          {\n            name: 'ssr-react-swc-streaming',\n            display: 'JavaScript + SWC',\n            color: yellow,\n          },\n          {\n            name: 'ssr-react-swc-streaming-ts',\n            display: 'TypeScript + SWC',\n            color: blue,\n          },\n        ],\n      },\n      {\n        name: 'ssr-react',\n        display: 'Non-streaming',\n        color: cyan,\n        variants: [\n          {\n            name: 'ssr-react',\n            display: 'JavaScript',\n            color: yellow,\n          },\n          {\n            name: 'ssr-react-ts',\n            display: 'TypeScript',\n            color: blue,\n          },\n          {\n            name: 'ssr-react-swc',\n            display: 'JavaScript + SWC',\n            color: yellow,\n          },\n          {\n            name: 'ssr-react-swc-ts',\n            display: 'TypeScript + SWC',\n            color: blue,\n          },\n        ],\n      },\n    ],\n  },\n  {\n    name: 'ssr-preact',\n    color: magenta,\n    variants: [\n      {\n        name: 'ssr-preact',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'ssr-preact-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'ssr-svelte',\n    color: red,\n    variants: [\n      {\n        name: 'ssr-svelte',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'ssr-svelte-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'ssr-solid',\n    color: blueBright,\n    variants: [\n      {\n        name: 'ssr-solid',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'ssr-solid-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-vanilla',\n    color: yellow,\n    variants: [\n      {\n        name: 'deno-vanilla',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-vanilla-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-vue',\n    color: green,\n    variants: [\n      {\n        name: 'deno-vue',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-vue-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-react',\n    color: cyan,\n    variants: [\n      {\n        name: 'deno-react',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-react-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n      {\n        name: 'deno-react-swc',\n        display: 'JavaScript + SWC',\n        color: yellow,\n      },\n      {\n        name: 'deno-react-swc-ts',\n        display: 'TypeScript + SWC',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-preact',\n    color: magenta,\n    variants: [\n      {\n        name: 'deno-preact',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-preact-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-lit',\n    color: redBright,\n    variants: [\n      {\n        name: 'deno-lit',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-lit-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-svelte',\n    color: red,\n    variants: [\n      {\n        name: 'deno-svelte',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-svelte-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'deno-solid',\n    color: blueBright,\n    variants: [\n      {\n        name: 'deno-solid',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'deno-solid-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'library',\n    color: magentaBright,\n    variants: [\n      {\n        name: 'library',\n        display: 'JavaScript',\n        color: yellow,\n      },\n      {\n        name: 'library-ts',\n        display: 'TypeScript',\n        color: blue,\n      },\n    ],\n  },\n  {\n    name: 'ssr-transform',\n    color: redBright,\n  },\n]\n\nfunction flattenVariants(framework) {\n  if (framework.variants) {\n    return framework.variants.flatMap((variant) => flattenVariants(variant))\n  }\n  return [framework.name]\n}\n\nconst TEMPLATES = FRAMEWORKS.flatMap(flattenVariants)\n\nconst renameFiles = {\n  _gitignore: '.gitignore',\n}\n\nasync function init() {\n  /** @type {string} */\n  // @ts-ignore\n  let targetDir = formatTargetDir(argv._[0])\n  const argTemplate = argv.template || argv.t\n\n  const defaultTargetDir = 'vite-project'\n  const getProjectName = () => path.basename(path.resolve(targetDir))\n\n  let result = {}\n\n  try {\n    result = await prompts(\n      [\n        {\n          type: targetDir ? null : 'text',\n          name: 'projectName',\n          message: reset('Project name:'),\n          initial: defaultTargetDir,\n          onState: (state) => {\n            targetDir = formatTargetDir(state.value) || defaultTargetDir\n          },\n        },\n        {\n          type: () =>\n            argv.overwrite\n              ? null\n              : !fs.existsSync(targetDir) || isEmpty(targetDir)\n                ? null\n                : 'confirm',\n          name: 'overwrite',\n          initial: argv.overwrite ? true : false,\n          message: () =>\n            (targetDir === '.'\n              ? 'Current directory'\n              : `Target directory \"${targetDir}\"`) +\n            ` is not empty. Remove existing files and continue?`,\n        },\n        {\n          // @ts-ignore\n          type: (_, { overwrite } = {}) => {\n            if (overwrite === false) {\n              throw new Error(red('✖') + ' Operation cancelled')\n            }\n            return null\n          },\n          name: 'overwriteChecker',\n        },\n        {\n          type: () => (isValidPackageName(getProjectName()) ? null : 'text'),\n          name: 'packageName',\n          message: reset('Package name:'),\n          initial: () => toValidPackageName(getProjectName()),\n          validate: (dir) =>\n            isValidPackageName(dir) || 'Invalid package.json name',\n        },\n        {\n          type:\n            argTemplate && TEMPLATES.includes(argTemplate) ? null : 'select',\n          name: 'framework',\n          message:\n            typeof argTemplate === 'string' && !TEMPLATES.includes(argTemplate)\n              ? reset(\n                  `\"${argTemplate}\" isn't a valid template. Please choose from below: `,\n                )\n              : reset('Select a template:'),\n          initial: 0,\n          choices: FRAMEWORKS.map((framework) => {\n            const frameworkColor = framework.color\n            return {\n              title: frameworkColor(framework.display || framework.name),\n              value: framework,\n            }\n          }),\n        },\n        // Variant 1\n        {\n          type: (framework) =>\n            framework && framework.variants ? 'select' : null,\n          name: 'variant',\n          message: reset('Select a variant:'),\n          // @ts-ignore\n          choices: (framework) =>\n            framework.variants.map((variant) => {\n              const variantColor = variant.color\n              return {\n                title: variantColor(variant.display || variant.name),\n                value: variant.variants ? variant : variant.name,\n              }\n            }),\n        },\n        // Variant 2\n        {\n          type: (framework) =>\n            framework && framework.variants ? 'select' : null,\n          name: 'variant',\n          message: reset('Select a variant:'),\n          // @ts-ignore\n          choices: (framework) =>\n            framework.variants.map((variant) => {\n              const variantColor = variant.color\n              return {\n                title: variantColor(variant.display || variant.name),\n                value: variant.name,\n              }\n            }),\n        },\n      ],\n      {\n        onCancel: () => {\n          throw new Error(red('✖') + ' Operation cancelled')\n        },\n      },\n    )\n  } catch (cancelled) {\n    console.log(cancelled.message)\n    return\n  }\n\n  // user choice associated with prompts\n  const { framework, overwrite, packageName, variant } = result\n\n  const root = path.join(cwd, targetDir)\n\n  if (overwrite) {\n    emptyDir(root)\n  } else if (!fs.existsSync(root)) {\n    fs.mkdirSync(root, { recursive: true })\n  }\n\n  // determine template\n  let template = variant || framework?.name || argTemplate\n  let isReactSwc = false\n  if (template.includes('-swc')) {\n    isReactSwc = true\n    template = template.replace('-swc', '')\n  }\n\n  console.log(`\\nScaffolding project in ${root}...`)\n\n  const templateDir = path.resolve(\n    fileURLToPath(import.meta.url),\n    '..',\n    `template-${template}`,\n  )\n\n  const write = (file, content) => {\n    const targetPath = renameFiles[file]\n      ? path.join(root, renameFiles[file])\n      : path.join(root, file)\n    if (content) {\n      fs.writeFileSync(targetPath, content)\n    } else {\n      copy(path.join(templateDir, file), targetPath)\n    }\n  }\n\n  const files = fs.readdirSync(templateDir)\n  for (const file of files.filter((f) => f !== 'package.json')) {\n    write(file)\n  }\n\n  const isDeno = template.startsWith('deno-')\n  if (isDeno) {\n    if (isReactSwc) {\n      setupReactSwc(root, { isTs: template.endsWith('-ts'), isDeno: true })\n    }\n\n    console.log(`\\nDone. Now run:\\n`)\n    if (root !== cwd) {\n      console.log(`  cd ${path.relative(cwd, root)}`)\n    }\n    console.log('  deno task dev')\n    console.log()\n  } else {\n    const pkg = JSON.parse(\n      fs.readFileSync(path.join(templateDir, `package.json`), 'utf-8'),\n    )\n\n    pkg.name = packageName || getProjectName()\n\n    write('package.json', JSON.stringify(pkg, null, 2))\n\n    if (isReactSwc) {\n      setupReactSwc(root, { isTs: template.endsWith('-ts'), isDeno: false })\n    }\n\n    const pkgInfo = pkgFromUserAgent(process.env.npm_config_user_agent)\n    const pkgManager = pkgInfo ? pkgInfo.name : 'npm'\n\n    console.log(`\\nDone. Now run:\\n`)\n    if (root !== cwd) {\n      console.log(`  cd ${path.relative(cwd, root)}`)\n    }\n    switch (pkgManager) {\n      case 'yarn':\n        console.log('  yarn')\n        console.log('  yarn dev')\n        break\n      default:\n        console.log(`  ${pkgManager} install`)\n        console.log(`  ${pkgManager} run dev`)\n        break\n    }\n    console.log()\n  }\n}\n\n/**\n * @param {string | undefined} targetDir\n */\nfunction formatTargetDir(targetDir) {\n  return targetDir?.trim().replace(/\\/+$/g, '')\n}\n\nfunction copy(src, dest) {\n  const stat = fs.statSync(src)\n  if (stat.isDirectory()) {\n    copyDir(src, dest)\n  } else {\n    fs.copyFileSync(src, dest)\n  }\n}\n\n/**\n * @param {string} projectName\n */\nfunction isValidPackageName(projectName) {\n  return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(\n    projectName,\n  )\n}\n\n/**\n * @param {string} projectName\n */\nfunction toValidPackageName(projectName) {\n  return projectName\n    .trim()\n    .toLowerCase()\n    .replace(/\\s+/g, '-')\n    .replace(/^[._]/, '')\n    .replace(/[^a-z0-9-~]+/g, '-')\n}\n\n/**\n * @param {string} srcDir\n * @param {string} destDir\n */\nfunction copyDir(srcDir, destDir) {\n  fs.mkdirSync(destDir, { recursive: true })\n  for (const file of fs.readdirSync(srcDir)) {\n    const srcFile = path.resolve(srcDir, file)\n    const destFile = path.resolve(destDir, file)\n    copy(srcFile, destFile)\n  }\n}\n\n/**\n * @param {string} path\n */\nfunction isEmpty(path) {\n  const files = fs.readdirSync(path)\n  return files.length === 0 || (files.length === 1 && files[0] === '.git')\n}\n\n/**\n * @param {string} dir\n */\nfunction emptyDir(dir) {\n  if (!fs.existsSync(dir)) {\n    return\n  }\n  for (const file of fs.readdirSync(dir)) {\n    fs.rmSync(path.resolve(dir, file), { recursive: true, force: true })\n  }\n}\n\n/**\n * @param {string | undefined} userAgent process.env.npm_config_user_agent\n * @returns object | undefined\n */\nfunction pkgFromUserAgent(userAgent) {\n  if (!userAgent) return undefined\n  const pkgSpec = userAgent.split(' ')[0]\n  const pkgSpecArr = pkgSpec.split('/')\n  return {\n    name: pkgSpecArr[0],\n    version: pkgSpecArr[1],\n  }\n}\n\n/**\n * @param {string} root\n * @param {{ isTs: boolean, isDeno: boolean }} options\n */\nfunction setupReactSwc(root, { isTs, isDeno }) {\n  if (isDeno) {\n    editFile(path.resolve(root, 'deno.json'), (content) => {\n      return content.replace(\n        /\"@vitejs\\/plugin-react\": \".+?\"/,\n        `\"@vitejs/plugin-react-swc\": \"npm:@vitejs/plugin-react-swc@^4.0.1\"`,\n      )\n    })\n  } else {\n    editFile(path.resolve(root, 'package.json'), (content) => {\n      return content.replace(\n        /\"@vitejs\\/plugin-react\": \".+?\"/,\n        `\"@vitejs/plugin-react-swc\": \"^4.0.1\"`,\n      )\n    })\n  }\n  editFile(\n    path.resolve(root, `vite.config.${isTs ? 'ts' : 'js'}`),\n    (content) => {\n      return content.replace('@vitejs/plugin-react', '@vitejs/plugin-react-swc')\n    },\n  )\n}\n\n/**\n *\n * @param {string} file\n * @param {(content: string) => string} callback\n */\nfunction editFile(file, callback) {\n  const content = fs.readFileSync(file, 'utf-8')\n  fs.writeFileSync(file, callback(content), 'utf-8')\n}\n\ninit().catch((e) => {\n  console.error(e)\n})\n"]}