/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/create-extension-js@0.0.1/dist/index.mjs
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
import h from"node:process";import{log as s,error as _}from"node:console";import c,{join as N}from"node:path";import{fileURLToPath as M}from"node:url";import I from"minimist";import{yellow as p,blue as m,green as u,lightGreen as y,cyan as b,gray as O,reset as f,red as x}from"kolorist";import r from"node:fs";import D from"prompts";function F(){const e=`Usage: create-extension.js [OPTION]... [DIRECTORY]\n\nCreate a new Browser Extension project based on extension.js in JavaScript or TypeScript.\nWith no arguments, start the CLI in interactive mode.\n\nOptions:\n  -t, --template NAME        use a specific template\n\nAvailable templates:\n${p("https://github.com/extension-js/extension.js/discussions/93")}`;s(e)}const w=h.cwd(),T="my-extension-project",L={_gitignore:".gitignore"},$=[{name:"init",display:"None (JS)",color:m,enable:!0,uiContexts:[{name:"init",display:"None (Init)",color:m,enable:!0},{name:"popup",display:"Popup",color:p,enable:!1},{name:"newtab",display:"Newtab",color:u,enable:!0},{name:"devtools",display:"Devtools",color:y,enable:!1},{name:"sidebar",display:"Sidebar",color:b,enable:!1},{name:"content",display:"Content Scripts",color:O,enable:!0}]},{name:"react",display:"React",color:p,enable:!0,uiContexts:[{name:"react-popup",display:"Popup",color:m,enable:!1},{name:"react-popup-tailwind",display:"Popup + Tailwind",color:m,enable:!1},{name:"react-newtab",display:"Newtab",color:p,enable:!0},{name:"react-newtab-tailwind",display:"Newtab + Tailwind",color:p,enable:!0},{name:"react-devtools",display:"Devtools",color:u,enable:!1},{name:"react-devtools-tailwind",display:"Devtools + Tailwind",color:u,enable:!1},{name:"react-sidebar",display:"Sidebar",color:y,enable:!1},{name:"react-sidebar-tailwind",display:"Sidebar + Tailwind",color:y,enable:!1},{name:"react-content",display:"Content Scripts",color:b,enable:!1},{name:"react-content-tailwind",display:"Content Scripts + Tailwind",color:b,enable:!0}]},{name:"vue",display:"Vue",color:u,enable:!0,uiContexts:[{name:"vue-popup",display:"Popup",color:m,enable:!1},{name:"vue-popup-tailwind",display:"Popup + Tailwind",color:m,enable:!1},{name:"vue-newtab",display:"Newtab",color:p,enable:!0},{name:"vue-newtab-tailwind",display:"Newtab + Tailwind",color:p,enable:!1},{name:"vue-devtools",display:"Devtools",color:u,enable:!1},{name:"vue-devtools-tailwind",display:"Devtools + Tailwind",color:u,enable:!1},{name:"vue-sidebar",display:"Sidebar",color:y,enable:!1},{name:"vue-sidebar-tailwind",display:"Sidebar + Tailwind",color:y,enable:!1},{name:"vue-content",display:"Content Scripts",color:b,enable:!1},{name:"vue-content-tailwind",display:"Content Scripts + Tailwind",color:b,enable:!0}]},{name:"preact",display:"Preact",color:y,enable:!0,uiContexts:[{name:"preact-popup",display:"Popup",color:m,enable:!1},{name:"preact-popup-tailwind",display:"Popup + Tailwind",color:m,enable:!1},{name:"preact-newtab",display:"Newtab",color:p,enable:!0},{name:"preact-newtab-tailwind",display:"Newtab + Tailwind",color:p,enable:!1},{name:"preact-devtools",display:"Devtools",color:u,enable:!1},{name:"preact-devtools-tailwind",display:"Devtools + Tailwind",color:u,enable:!1},{name:"preact-sidebar",display:"Sidebar",color:y,enable:!1},{name:"preact-sidebar-tailwind",display:"Sidebar + Tailwind",color:y,enable:!1},{name:"preact-content",display:"Content Scripts",color:b,enable:!1},{name:"preact-content-tailwind",display:"Content Scripts + Tailwind",color:b,enable:!0}]}],C=$.filter((e=>e.enable)).flatMap((e=>e.uiContexts.filter((e=>e.enable)).flatMap((e=>e.name))));function E(e){return e?.trim().replace(/\/+$/g,"")}function z(e){const n=r.readdirSync(e);return 0===n.length||1===n.length&&".git"===n[0]}function P(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function j(e){return"."===e?c.basename(c.resolve()):e}function W(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/^[._]/,"").replace(/[^a-z\d\-~]+/g,"-")}async function J(e,n,a){let t=e||T;D.override({overwrite:a});const o=await D([{type:e?null:"text",name:"projectName",message:f("Project name:"),initial:T,onState:e=>{t=E(e.value)||T}},{type:null,name:"targetDir"},{type:()=>!r.existsSync(N(w,t))||z(N(w,t))?null:"select",name:"overwrite",message:()=>("."===t?"Current directory":`Target directory "${t}"`)+" is not empty. Please choose how to proceed:",initial:0,choices:[{title:"Remove existing files and continue",value:"yes"},{title:"Cancel operation",value:"no"},{title:"Ignore files and continue",value:"ignore"}]},{type:(e,{overwrite:n})=>{if("no"===n)throw new Error(`${x("✖")} Operation cancelled`);return null},name:"overwriteChecker"},{type:()=>P(j(t))?null:"text",name:"packageName",message:f("Package name:"),initial:()=>W(j(t)),validate:e=>P(e)||"Invalid package.json name"},{type:n&&C.includes(n)?null:"select",name:"framework",message:"string"!=typeof n||C.includes(n)?f("Select a framework:"):f(`"${n}" isn't a valid template. Please choose from below: `),initial:0,choices:$.filter((e=>e.enable)).map((e=>({title:(0,e.color)(e.display||e.name),value:e})))},{type:e=>e&&e.uiContexts?"select":null,name:"uiContext",message:f("Select a uiContext:"),choices:e=>e.uiContexts.filter((e=>e.enable)).map((e=>({title:(0,e.color)(e.display||e.name),value:e})))}],{onCancel:()=>{throw new Error(`${x("✖")} Operation cancelled`)}});return o.targetDir=t,o}function U(e){if(r.existsSync(e))for(const n of r.readdirSync(e))".git"!==n&&r.rmSync(c.resolve(e,n),{recursive:!0,force:!0})}function V(e,n){"yes"===n?U(e):r.existsSync(e)||r.mkdirSync(e,{recursive:!0}),s(`\nScaffolding project in ${e}...`)}function k(){const e=h.env.npm_config_user_agent;return e?e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":"npm":"npm"}function G(e){const n=c.relative(w,e);s("\nDone. Now run:\n"),e!==w&&s(`  cd ${n.includes(" ")?`"${n}"`:n}`);const a=k();if("yarn"===a)s("  yarn"),s("  yarn dev");else s(`  ${a} install`),s(`  ${a} run dev`);s()}function B(e){const n=[];return function e(a,t){if(0!==t.length)for(let n=0;n<t.length;n++){e([...a,t[n]],t.filter(((e,a)=>a!==n)))}else n.push(a.join("-"))}([],e),n}function K(e){return e.includes(",")?e.split(","):e.split("-")}function Y(e){const n=B(K(e||"")),[a]=n.filter((e=>C.includes(e)));return a}function q(e,n){r.mkdirSync(n,{recursive:!0});for(const a of r.readdirSync(e)){R(c.resolve(e,a),c.resolve(n,a))}}function R(e,n){r.statSync(e).isDirectory()?q(e,n):r.copyFileSync(e,n)}async function H(e,n,a){const t=JSON.parse(r.readFileSync(c.join(n,"package.json"),"utf-8"));t.name=a,e("package.json",`${JSON.stringify(t,null,2)}\n`)}async function Q(e,n,a){e("README.md",r.readFileSync(c.join(n,"README.md"),"utf-8").replaceAll("[projectName]",a||"[projectName]").replaceAll("[projectPackageManager]",k()))}async function X(e,n){const a=r.readdirSync(n);for(const n of a.filter((e=>!["package.json","README.md"].includes(e))))e(n)}async function Z(e,n,a){const t=A(n),o=(n,a)=>{const o=c.join(e,L[n]??n);a?r.writeFileSync(o,a):R(c.join(t,n),o)};X(o,t),H(o,t,a),Q(o,t,a)}function A(e){return c.resolve(M(import.meta.url),"../..",`templates/${e}`)}const g=I(h.argv.slice(2),{default:{help:!1},alias:{h:"help",t:"template"},string:["_"]});async function ee(){const e=E(g._[0]),n=Y(g.template||g.t);if(g.help)F();else try{const a=await J(e,n,g.overwrite),{targetDir:t,overwrite:o,packageName:i,uiContext:l}=a,r=l?.name||n,s=c.join(w,t);V(s,o);Z(s,r,i||j(t)),G(s)}catch(e){s(e.message)}}ee().catch((e=>{_(e)}));export{A as getTemplateDir};
//# sourceMappingURL=/sm/cba29bb145a1b437a098f3ad6f4d5a6fc257a7efbc8f0cb9d0b50056d30b14cb.map