@tomjs/create-app 1.0.1 → 1.1.0

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/README.md CHANGED
@@ -46,6 +46,10 @@ Support templates:
46
46
  - electron-vue
47
47
  - electron-react
48
48
  - node
49
+ - node-cli
50
+ - node-cli-legacy
51
+ - node-vite-plugin
52
+ - node-workspaces
49
53
  - vscode
50
54
  - vscode-vue
51
55
  - vscode-react
package/README.zh_CN.md CHANGED
@@ -46,6 +46,10 @@ npm create @tomjs/app@latest my-app -- --template vue
46
46
  - electron-vue
47
47
  - electron-react
48
48
  - node
49
+ - node-cli
50
+ - node-cli-legacy
51
+ - node-vite-plugin
52
+ - node-workspaces
49
53
  - vscode
50
54
  - vscode-vue
51
55
  - vscode-react
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import Ge from"meow";import w from"node:fs";import Oe from"node:os";import g from"node:path";import{fileURLToPath as Pe}from"node:url";import{copySync as Ae,mkdirSync as $e,readFileSync as ie,readJsonSync as ae,rmSync as N,writeFileSync as T,writeJsonSync as Ee}from"@tomjs/node";import x from"chalk";import{camelCase as De,cloneDeep as ce,merge as Se}from"lodash-es";import B from"node:os";import X from"node:path";import{mkdirSync as xe,readJsonSync as ve,writeJsonSync as be}from"@tomjs/node";import j from"chalk";import ke from"inquirer";import we from"@tomjs/logger";import{$ as he}from"execa";import E from"inquirer";var y=new we({directory:"create-app/logs"});function D(e,t,r){let n={message:e};return Array.isArray(t)||typeof t!="object"?n.default=t:Object.assign(n,t),Object.assign(n,r)}async function h(e,t){let r=`confirm-${Date.now()}`,n=D(e,t);return(await E.prompt([{type:"confirm",name:r,...n}]))[r]}async function _(e,t){let r=`input-${Date.now()}`,{required:n,...o}=D(e,t),i=n??!0,c=o.validate;return(i||c)&&(o.validate=s=>{let l=(s||"").trim();return i&&!l?"It's required!":c?c(s):!0}),(await E.prompt([{type:"input",name:r,...o}]))[r]}async function K(e,t,r){let n=`checkbox-${Date.now()}`,{required:o,min:i,max:c,...p}=D(e,r),s=o??!0,l=p.validate;return(s||i||c)&&(p.validate=a=>s&&a.length===0?"Please select at least one option":i&&a.length<i?`Please select at least ${i} options`:c&&a.length>c?`Please select at most ${c} options`:l?l(a):!0),(await E.prompt([{type:"checkbox",name:n,choices:t,pageSize:Math.min(t.length,10),...p}]))[n]}async function b(e,t,r){let n=`list-${Date.now()}`,o=D(e,r);return(await E.prompt([{type:"list",name:n,choices:t,pageSize:Math.min(t.length,10),...o}]))[n]}var U={cwd:"."};async function S(e,t){let{trim:r,...n}=Object.assign({stdio:"pipe",shell:!0,cwd:U.cwd},t);n.cwd??=U.cwd,Array.isArray(e)&&(e=e.join(" "));let o=i=>{U.verbose?y.debug(i):y.write(i)};o(`$ ${e}`);try{let c=(await he(n)`${e}`).stdout;return o(c),r?c.trim().replace(/\n|\r/g,""):c.trim()}catch(i){let c=i.stderr||i.message;throw o(c),new Error(c)}}function Q(e){if(e&&e.packageManager)return e.packageManager.split("@")[0];let t=process.env.npm_config_user_agent;return t?t.split(" ")[0].split("/")[0]:void 0}var Y={repo:"https://github.com",owner:B.userInfo().username};function q(e){let{repo:t,owner:r}=e;return`${t}${t.endsWith("/")?"":"/"}${r}`}async function H(e){let t=await ke.prompt([{type:"text",name:"repo",message:`${e?.repo?"Edit":"Add"} git repository url:`,default:e?.repo||Y.repo},{type:"text",name:"owner",message:`${e?.owner?"Edit":"Add"} git repository owner:`,default:e?.owner||Y.owner}]);return{id:e?.id||Date.now().toString(),repo:t.repo,owner:t.owner}}var Z=X.join(B.homedir(),".tomjs","create-app"),ee=X.join(Z,"config.json");function C(){return xe(Z),Object.assign({gitRepos:[]},ve(ee))}function je(e){let t=C();t.createTime?t.updateTime=Date.now():t.createTime=Date.now(),be(ee,Object.assign(t,e))}function G(e){je({gitRepos:e})}async function k(e,t=!1){e||(e=C().gitRepos||[]);let r=e.map(p=>({name:q(p),value:p.id})).concat([{name:j.green("+ Add"),value:"add"},{name:j.yellow("\u2190 Exit"),value:"exit"}]),n=await b(e.length===0?"You choose to add or exit:":"You can choose the repository to be operated, or choose to add or exit:",r);if(n==="exit")return;if(n==="add"){let p=await H();return e.push(p),G(e),k(e,t)}let o=e.findIndex(p=>p.id===n),i=await b("Select an action?",[{name:j.green("^ Edit"),value:"edit"},{name:j.red("- Remove"),value:"remove"},{name:j.yellow("\u2190 Exit"),value:"exit"}]);if(i==="exit")return t?k(e,t):C();if(i==="remove")return await h("Where confirm to remove?",!0)&&(e.splice(o,1),G(e)),k(e,t);let c=await H(e[o]);return e[o]=c,G(e),k(e,t)}async function te(){let e=C(),{gitRepos:t}=e;return t.length===0&&(console.log(`You need to set the ${j.blue("git remote repository")} for the first time.`),await k(t)),e}var v={},Ce=g.join(Pe(import.meta.url),"../../"),pe=g.join(Ce,"templates"),Te=ae(g.join(pe,"config.json"))||{},O=Te.list||[],I=O.map(e=>e.variants?e.variants.map(t=>({parent:e,...t})):[]).flat(),Ie=O.map(e=>e.variants&&e.variants.map(t=>t.name)||[e.name]).reduce((e,t)=>e.concat(t),[]),Re=["name","version","displayName","description","private","type","engines","packageManager","keywords","categories","author","publisher","contributors","homepage","bugs","license","files","bin","main","module","types","exports","publishConfig","repository","activationEvents","contributes","badges","icon","vsce","scripts","dependencies","devDependencies","peerDependencies","optionalDependencies"],Ne=["dev","dev:*","debug","start","build","build:*","release","clean","preview","test","lint","lint:eslint","lint:stylelint","lint:prettier"];async function ne(e){return S(`git config --get ${e}`,{trim:!0})}var se=e=>/^(?:(@[a-z0-9.+-]+(-[a-z0-9.+-]+)*\/)?([a-z0-9][a-z0-9._-]*[a-z0-9]))$/.test(e),Fe=e=>/^[a-z0-9._-]+$/.test(e),Ue=e=>e.includes("/")?e.substring(e.indexOf("/")+1):e;function R(e){return ae(g.join(e,"package.json"))||{}}function M(e,t){Ee(g.join(e,"package.json"),t)}function re(e,t,r){let n={},o=Object.keys(e).sort(),i=p(t),c=p(r);return i.concat(o.filter(s=>!i.includes(s)&&!c.includes(s))).concat(c).forEach(s=>{n[s]=e[s]}),n;function p(s){let l=Array.isArray(s)?s:[];return l.length>0&&(l=l.reduce((m,a)=>{if(a.endsWith(":*")){let u=a.replace(":*",":");console.log("sk:",u);let d=o.filter(A=>!m.includes(A)&&A.startsWith(u));return m.concat(d)}return o.includes(a)?m.concat(a):m},[])),l}}async function le(e){if(Object.assign(v,e),v.git){await k(void 0,!0);return}v.type==="project"?await Ve():await ue(v.type)}async function Ve(){let e="project",t=await me(e,v.cwd),{projectDir:r}=t.userOptions;W(e,t),await J(t);let{workspaces:n}=t,o=g.join(r,"packages");n&&await h("Do you want to create an package?")&&await ue("package",o);let{examples:i}=t,c=Array.isArray(i)&&i.length>0;if(c){let s=I.filter(m=>i.includes(m.name)),l=g.join(r,"examples");for(let m of s){let a=ce(m);a.templates=fe(a.templates).concat(a.name);let u=g.join(l,a.name);a.userOptions={projectDir:u,pkgName:a.name,gitUserUrl:"",textVars:{}},await ge(a),W("example",a),await J(a)}}let p=w.existsSync(o)&&w.readdirSync(g.join(r,"packages")).length>0;if(p||c){let s=R(r),l=Q(s)||"npm",m=[];if(p&&m.push("packages"),c&&m.push("examples"),l==="pnpm"){let u=g.join(r,"pnpm-workspace.yaml");w.existsSync(u)||T(u,`packages:
1
+ import Ge from"meow";import w from"node:fs";import Oe from"node:os";import g from"node:path";import{fileURLToPath as Pe}from"node:url";import{copySync as Ae,mkdirSync as $e,readFileSync as ie,readJsonSync as ae,rmSync as N,writeFileSync as T,writeJsonSync as Ee}from"@tomjs/node";import x from"chalk";import{camelCase as De,cloneDeep as ce,merge as Se}from"lodash-es";import B from"node:os";import X from"node:path";import{mkdirSync as xe,readJsonSync as ve,writeJsonSync as be}from"@tomjs/node";import j from"chalk";import ke from"inquirer";import we from"@tomjs/logger";import{$ as he}from"execa";import E from"inquirer";var y=new we({directory:"create-app/logs"});function D(e,t,s){let n={message:e};return Array.isArray(t)||typeof t!="object"?n.default=t:Object.assign(n,t),Object.assign(n,s)}async function h(e,t){let s=`confirm-${Date.now()}`,n=D(e,t);return(await E.prompt([{type:"confirm",name:s,...n}]))[s]}async function _(e,t){let s=`input-${Date.now()}`,{required:n,...o}=D(e,t),i=n??!0,c=o.validate;return(i||c)&&(o.validate=r=>{let l=(r||"").trim();return i&&!l?"It's required!":c?c(r):!0}),(await E.prompt([{type:"input",name:s,...o}]))[s]}async function K(e,t,s){let n=`checkbox-${Date.now()}`,{required:o,min:i,max:c,...p}=D(e,s),r=o??!0,l=p.validate;return(r||i||c)&&(p.validate=a=>r&&a.length===0?"Please select at least one option":i&&a.length<i?`Please select at least ${i} options`:c&&a.length>c?`Please select at most ${c} options`:l?l(a):!0),(await E.prompt([{type:"checkbox",name:n,choices:t,pageSize:Math.min(t.length,10),...p}]))[n]}async function b(e,t,s){let n=`list-${Date.now()}`,o=D(e,s);return(await E.prompt([{type:"list",name:n,choices:t,pageSize:Math.min(t.length,10),...o}]))[n]}var U={cwd:"."};async function S(e,t){let{trim:s,...n}=Object.assign({stdio:"pipe",shell:!0,cwd:U.cwd},t);n.cwd??=U.cwd,Array.isArray(e)&&(e=e.join(" "));let o=i=>{U.verbose?y.debug(i):y.write(i)};o(`$ ${e}`);try{let c=(await he(n)`${e}`).stdout;return o(c),s?c.trim().replace(/\n|\r/g,""):c.trim()}catch(i){let c=i.stderr||i.message;throw o(c),new Error(c)}}function Q(e){if(e&&e.packageManager)return e.packageManager.split("@")[0];let t=process.env.npm_config_user_agent;return t?t.split(" ")[0].split("/")[0]:void 0}var Y={repo:"https://github.com",owner:B.userInfo().username};function q(e){let{repo:t,owner:s}=e;return`${t}${t.endsWith("/")?"":"/"}${s}`}async function H(e){let t=await ke.prompt([{type:"text",name:"repo",message:`${e?.repo?"Edit":"Add"} git repository url:`,default:e?.repo||Y.repo},{type:"text",name:"owner",message:`${e?.owner?"Edit":"Add"} git repository owner:`,default:e?.owner||Y.owner}]);return{id:e?.id||Date.now().toString(),repo:t.repo,owner:t.owner}}var Z=X.join(B.homedir(),".tomjs","create-app"),ee=X.join(Z,"config.json");function C(){return xe(Z),Object.assign({gitRepos:[]},ve(ee))}function je(e){let t=C();t.createTime?t.updateTime=Date.now():t.createTime=Date.now(),be(ee,Object.assign(t,e))}function G(e){je({gitRepos:e})}async function k(e,t=!1){e||(e=C().gitRepos||[]);let s=e.map(p=>({name:q(p),value:p.id})).concat([{name:j.green("+ Add"),value:"add"},{name:j.yellow("\u2190 Exit"),value:"exit"}]),n=await b(e.length===0?"You choose to add or exit:":"You can choose the repository to be operated, or choose to add or exit:",s);if(n==="exit")return;if(n==="add"){let p=await H();return e.push(p),G(e),k(e,t)}let o=e.findIndex(p=>p.id===n),i=await b("Select an action?",[{name:j.green("^ Edit"),value:"edit"},{name:j.red("- Remove"),value:"remove"},{name:j.yellow("\u2190 Exit"),value:"exit"}]);if(i==="exit")return t?k(e,t):C();if(i==="remove")return await h("Where confirm to remove?",!0)&&(e.splice(o,1),G(e)),k(e,t);let c=await H(e[o]);return e[o]=c,G(e),k(e,t)}async function te(){let e=C(),{gitRepos:t}=e;return t.length===0&&(console.log(`You need to set the ${j.blue("git remote repository")} for the first time.`),await k(t)),e}var v={},Ce=g.join(Pe(import.meta.url),"../../"),pe=g.join(Ce,"templates"),Te=ae(g.join(pe,"config.json"))||{},O=Te.list||[],I=O.map(e=>e.variants?e.variants.map(t=>({parent:e,...t})):[]).flat(),Ie=O.map(e=>e.variants&&e.variants.map(t=>t.name)||[e.name]).reduce((e,t)=>e.concat(t),[]),Re=["name","version","displayName","description","private","type","engines","packageManager","keywords","categories","author","publisher","contributors","homepage","bugs","license","files","bin","main","module","types","exports","publishConfig","repository","activationEvents","contributes","badges","icon","vsce","scripts","dependencies","devDependencies","peerDependencies","optionalDependencies"],Ne=["dev","dev:*","debug","start","build","build:*","release","clean","preview","test","lint","lint:eslint","lint:stylelint","lint:prettier"];async function ne(e){return S(`git config --get ${e}`,{trim:!0})}var re=e=>/^(?:(@[a-z0-9.+-]+(-[a-z0-9.+-]+)*\/)?([a-z0-9][a-z0-9._-]*[a-z0-9]))$/.test(e),Fe=e=>/^[a-z0-9._-]+$/.test(e),Ue=e=>e.includes("/")?e.substring(e.indexOf("/")+1):e;function R(e){return ae(g.join(e,"package.json"))||{}}function M(e,t){Ee(g.join(e,"package.json"),t)}function se(e,t,s){let n={},o=Object.keys(e).sort(),i=p(t),c=p(s);return i.concat(o.filter(r=>!i.includes(r)&&!c.includes(r))).concat(c).forEach(r=>{n[r]=e[r]}),n;function p(r){let l=Array.isArray(r)?r:[];return l.length>0&&(l=l.reduce((m,a)=>{if(a.endsWith(":*")){let u=a.replace(":*",":"),d=o.filter(A=>!m.includes(A)&&A.startsWith(u));return m.concat(d)}return o.includes(a)?m.concat(a):m},[])),l}}async function le(e){if(Object.assign(v,e),v.git){await k(void 0,!0);return}v.type==="project"?await Ve():await ue(v.type)}async function Ve(){let e="project",t=await me(e,v.cwd),{projectDir:s}=t.userOptions;W(e,t),await J(t);let{workspaces:n}=t,o=g.join(s,"packages");n&&await h("Do you want to create an package?")&&await ue("package",o);let{examples:i}=t,c=Array.isArray(i)&&i.length>0;if(c){let r=I.filter(m=>i.includes(m.name)),l=g.join(s,"examples");for(let m of r){let a=ce(m);a.templates=fe(a.templates).concat(a.name);let u=g.join(l,a.name);a.userOptions={projectDir:u,pkgName:a.name,gitUserUrl:"",textVars:{}},await ge(a),W("example",a),await J(a)}}let p=w.existsSync(o)&&w.readdirSync(g.join(s,"packages")).length>0;if(p||c){let r=R(s),l=Q(r)||"npm",m=[];if(p&&m.push("packages"),c&&m.push("examples"),l==="pnpm"){let u=g.join(s,"pnpm-workspace.yaml");w.existsSync(u)||T(u,`packages:
2
2
  ${m.map(d=>` - '${d}/*'
3
- `)}`)}else s.workspaces??=m.map(u=>`"${u}/*"`),M(r,s);let a=s.devDependencies??{};p&&"vitest"in a&&T(g.join(r,"vitest.config.ts"),'export default ["packages/*"];')}await Qe(t)}async function ue(e,t){let r=!0,n=0;for(;r;){n++;let o=await me(e,t||v.cwd,n===1?v.template:void 0),{pkgName:i}=o.userOptions;W(e,o),await J(o),y.success(`${x.green(i)} created successfully!`),r=await h(`Do you want to create another ${e}?`)}}function oe(e,...t){!Array.isArray(t)||t.length===0||t.forEach(r=>{let n=g.join(e,r);w.existsSync(n)&&N(n)})}function Le(e,t,r){if(!w.existsSync(e))return;let n=ie(e);n=n.replaceAll(t,r),T(e,n)}function _e(e,t,r){let n=r.userOptions,{textVars:o}=n;if(["scripts","dependencies","devDependencies","peerDependencies"].forEach(i=>{e[i]&&(i==="scripts"?e[i]=re(e[i],Ne,["prepare"]):e[i]=re(e[i]))}),t==="example"?(delete e.types,delete e.exports,delete e.publishConfig,delete e.repository,delete e.module,delete e.license,e.private=!0):t==="package"&&e.repository&&typeof e.repository=="object"&&(e.repository.directory=`packages/${o.pkgShortName}`),!r.test){let i=e.scripts;if(i){delete i.test;{let c=i["lint:eslint"]||"";c&&(i["lint:eslint"]=c.replace(",test",""))}}delete e.devDependencies?.vitest}e.type==="commonjs"&&delete e.type,e.private===!1&&delete e.private}function W(e,t,r){let n=r??t.userOptions.projectDir,o=g.join(n,".temp");$e(o);let i=t.templates||[];if((e!=="project"?i:["base/core",...i]).forEach((p,s)=>{let l=g.join(pe,p);if(!w.existsSync(l))return;Ae(l,n);let m=R(o)||{},a=Se(m,R(n));if(s===i.length){let u={};Re.forEach(d=>{d in a&&(u[d]=a[d],delete a[d])}),a=Object.assign(u,a),_e(a,e,t),M(n,a)}else M(o,a)}),N(o),oe(n,"tests"),Le(g.join(n,"tsconfig.json"),', "test"',""),e==="package"){let p=[".vscode"].concat(t.packages?.exclude??[]);oe(n,...p)}}async function J(e,t){let r=e.userOptions,{textVars:n}=r,o=t??r.projectDir;w.readdirSync(o).filter(p=>p.startsWith("_")).forEach(p=>{w.renameSync(g.join(o,p),g.join(o,p.replace("_",".")))});let i=R(o),c=["LICENSE","README.md","README.zh_CN.md"];i.publishConfig||c.forEach(p=>{N(g.join(o,p))}),["package.json",...c].forEach(p=>{let s=g.join(o,p);if(!w.existsSync(s))return;let l=ie(s);Object.keys(n).forEach(m=>{l=l.replace(new RegExp("{{"+m+"}}","g"),n[m])}),T(s,l)})}async function me(e,t,r){let{gitRepos:n}=await te(),o=(v.name||"").trim(),i=se(o);(!o||!i)&&(o=await _("Package name:",{validate:a=>se(a)?!0:"Please input a valid name!"}));let c=Ue(o);c!==o&&(c=await _("Project name:",{default:c,validate:a=>Fe(a)?!0:"Please input a valid name!"})),y.debug("projectName:",c);let p=g.join(t,c);w.existsSync(p)&&await h("Project already exists, overwrite?")&&N(p),y.debug("projectDir:",p);let s;r&&Ie.includes(r)&&(s=I.find(a=>a.name===r));let l=async a=>{let u=await b(!s&&a?`${x.red(a)} is invalid, please select a framework again:`:"Select a framework:",O.filter(f=>!f.variants||!f.variants.length?!1:e==="package"?f.variants.filter($=>!$.packages?.ignore).length>0:!0).map(f=>({name:f.display,value:f.name})));y.debug("framework:",u);let d=O.find(f=>f.name===u)?.variants||[],A=e==="package"?d.filter(f=>!f.packages?.ignore).map(f=>{let $=f.parent;return $?{name:`${$.display} > ${f.display}`,value:f.name}:{name:f.display,value:f.name}}):d.map(f=>({name:f.display,value:f.name})),ye=O.find(f=>f.name===u)?.display,F=await b(`Select a ${x.blue(ye)} variant:`,A.concat([{name:x.yellow("\u2190 Back"),value:"_"}]));y.debug("variant:",F),F==="_"?await l(a):s=d.find(f=>f.name===F)};if(s||await l(r),!s)throw new Error("variant not found");s=ce(s),s.templates||(s.templates=[]),s.templates=fe(s.templates).concat(s.name),y.debug("variant:",s),e==="project"&&Array.isArray(s.examples)&&(s.examples=await K("Select examples:",s.examples.map(a=>{let u=I.find(d=>d.name===a);if(!u)throw new Error(`Can't find example ${x.yellow(a)} from ${x.blue(s.name)}`);return{name:u.display,value:u.name,checked:!0}}),{required:!1}));let m="";if(e==="example"?(s.devDependencies=0,s.workspaces=!1,s.test=!1):e==="package"?s.workspaces=!1:s.git&&(m=await b("Which git repository do you want to choose?",n.map(a=>{let u=q(a);return{name:u,value:u}}).concat([{name:x.yellow("None"),value:""}]))),s.devDependencies===2){let a=await h("Whether it will be used for devDependencies?");s.devDependencies=a?1:0}return s.test&&(s.test=await h("Whether to use test?")),s.userOptions={pkgName:o,projectDir:p,gitUserUrl:m},await ge(s),s}function fe(e){let t=[],r=async n=>{if(!(!Array.isArray(n)||!n.length))for(let o of n){if(o.startsWith("base/")){t.push(o);continue}let i=I.find(c=>c.name===o);if(!i){y.warning(`Can't find template ${x.yellow(o)}`);continue}r(i.templates)}};return r(e),[...new Set(t)]}async function ge(e){let{pkgName:t,gitUserUrl:r}=e.userOptions,n=await ne("user.name"),o=await ne("user.email"),i={name:n||Oe.userInfo().username,email:o||""},c=["pnpm","yarn","npm"].map(a=>`# ${a}
3
+ `)}`)}else r.workspaces??=m.map(u=>`"${u}/*"`),M(s,r);let a=r.devDependencies??{};p&&"vitest"in a&&T(g.join(s,"vitest.config.ts"),'export default ["packages/*"];')}await Qe(t)}async function ue(e,t){let s=!0,n=0;for(;s;){n++;let o=await me(e,t||v.cwd,n===1?v.template:void 0),{pkgName:i}=o.userOptions;W(e,o),await J(o),y.success(`${x.green(i)} created successfully!`),s=await h(`Do you want to create another ${e}?`)}}function oe(e,...t){!Array.isArray(t)||t.length===0||t.forEach(s=>{let n=g.join(e,s);w.existsSync(n)&&N(n)})}function Le(e,t,s){if(!w.existsSync(e))return;let n=ie(e);n=n.replaceAll(t,s),T(e,n)}function _e(e,t,s){let n=s.userOptions,{textVars:o}=n;if(["scripts","dependencies","devDependencies","peerDependencies"].forEach(i=>{e[i]&&(i==="scripts"?e[i]=se(e[i],Ne,["prepare"]):e[i]=se(e[i]))}),t==="example"?(delete e.types,delete e.exports,delete e.publishConfig,delete e.repository,delete e.module,delete e.license,e.private=!0):t==="package"&&e.repository&&typeof e.repository=="object"&&(e.repository.directory=`packages/${o.pkgShortName}`),!s.test){let i=e.scripts;if(i){delete i.test;{let c=i["lint:eslint"]||"";c&&(i["lint:eslint"]=c.replace(",test",""))}}delete e.devDependencies?.vitest}e.type==="commonjs"&&delete e.type,e.private===!1&&delete e.private}function W(e,t,s){let n=s??t.userOptions.projectDir,o=g.join(n,".temp");$e(o);let i=t.templates||[];if((e!=="project"?i:["base/core",...i]).forEach((p,r)=>{let l=g.join(pe,p);if(!w.existsSync(l))return;Ae(l,n);let m=R(o)||{},a=Se(m,R(n));if(r===i.length){let u={};Re.forEach(d=>{d in a&&(u[d]=a[d],delete a[d])}),a=Object.assign(u,a),_e(a,e,t),M(n,a)}else M(o,a)}),N(o),oe(n,"tests"),Le(g.join(n,"tsconfig.json"),', "test"',""),e==="package"){let p=[".vscode"].concat(t.packages?.exclude??[]);oe(n,...p)}}async function J(e,t){let s=e.userOptions,{textVars:n}=s,o=t??s.projectDir;w.readdirSync(o).filter(p=>p.startsWith("_")).forEach(p=>{w.renameSync(g.join(o,p),g.join(o,p.replace("_",".")))});let i=R(o),c=["LICENSE","README.md","README.zh_CN.md"];i.publishConfig||c.forEach(p=>{N(g.join(o,p))}),["package.json",...c].forEach(p=>{let r=g.join(o,p);if(!w.existsSync(r))return;let l=ie(r);Object.keys(n).forEach(m=>{l=l.replace(new RegExp("{{"+m+"}}","g"),n[m])}),T(r,l)})}async function me(e,t,s){let{gitRepos:n}=await te(),o=(v.name||"").trim(),i=re(o);(!o||!i)&&(o=await _("Package name:",{validate:a=>re(a)?!0:"Please input a valid name!"}));let c=Ue(o);c!==o&&(c=await _("Project name:",{default:c,validate:a=>Fe(a)?!0:"Please input a valid name!"})),y.debug("projectName:",c);let p=g.join(t,c);w.existsSync(p)&&await h("Project already exists, overwrite?")&&N(p),y.debug("projectDir:",p);let r;s&&Ie.includes(s)&&(r=I.find(a=>a.name===s));let l=async a=>{let u=await b(!r&&a?`${x.red(a)} is invalid, please select a framework again:`:"Select a framework:",O.filter(f=>!f.variants||!f.variants.length?!1:e==="package"?f.variants.filter($=>!$.packages?.ignore).length>0:!0).map(f=>({name:f.display,value:f.name})));y.debug("framework:",u);let d=O.find(f=>f.name===u)?.variants||[],A=e==="package"?d.filter(f=>!f.packages?.ignore).map(f=>{let $=f.parent;return $?{name:`${$.display} > ${f.display}`,value:f.name}:{name:f.display,value:f.name}}):d.map(f=>({name:f.display,value:f.name})),ye=O.find(f=>f.name===u)?.display,F=await b(`Select a ${x.blue(ye)} variant:`,A.concat([{name:x.yellow("\u2190 Back"),value:"_"}]));y.debug("variant:",F),F==="_"?await l(a):r=d.find(f=>f.name===F)};if(r||await l(s),!r)throw new Error("variant not found");r=ce(r),r.templates||(r.templates=[]),r.templates=fe(r.templates).concat(r.name),y.debug("variant:",r),e==="project"&&Array.isArray(r.examples)&&(r.examples=await K("Select examples:",r.examples.map(a=>{let u=I.find(d=>d.name===a);if(!u)throw new Error(`Can't find example ${x.yellow(a)} from ${x.blue(r.name)}`);return{name:u.display,value:u.name,checked:!0}}),{required:!1}));let m="";if(e==="example"?(r.devDependencies=0,r.workspaces=!1,r.test=!1):e==="package"?r.workspaces=!1:r.git&&(m=await b("Which git repository do you want to choose?",n.map(a=>{let u=q(a);return{name:u,value:u}}).concat([{name:x.yellow("None"),value:""}]))),r.devDependencies===2){let a=await h("Whether it will be used for devDependencies?");r.devDependencies=a?1:0}return r.test&&(r.test=await h("Whether to use test?")),r.userOptions={pkgName:o,projectDir:p,gitUserUrl:m},await ge(r),r}function fe(e){let t=[],s=async n=>{if(!(!Array.isArray(n)||!n.length))for(let o of n){if(o.startsWith("base/")){t.push(o);continue}let i=I.find(c=>c.name===o);if(!i){y.warning(`Can't find template ${x.yellow(o)}`);continue}s(i.templates)}};return s(e),[...new Set(t)]}async function ge(e){let{pkgName:t,gitUserUrl:s}=e.userOptions,n=await ne("user.name"),o=await ne("user.email"),i={name:n||Oe.userInfo().username,email:o||""},c=["pnpm","yarn","npm"].map(a=>`# ${a}
4
4
  ${a} add ${t}${e.devDependencies?" -D":""}`).join(`
5
5
 
6
- `),p={pkgName:t,pkgShortName:t.startsWith("@")?t.split("/")[1]:t,pkgInstall:c,gitUserName:i.name,gitUserEmail:i.email,gitOrg:l(),gitUrl:s(),gitFullUrl:m(),gitFullSSHUrl:m(),dateYear:new Date().getFullYear()};function s(){return`${r||`https://github.com/${l()}`}/${t.substring(t.indexOf("/")+1)}`}function l(){return r?r.substring(r.lastIndexOf("/")+1):t.startsWith("@")?t.split("/")[0].substring(1):De(i.name)}function m(a=!1){let u=r||`https://github.com/${l()}`;return a&&(u=u.replace(/http(s):\/\//g,"git@").replace(/\//,":")),`${u}/${t.substring(t.indexOf("/")+1)}.git`}return e.userOptions.textVars=p,p}async function Qe(e){let{gitUserUrl:t,textVars:r,projectDir:n}=e.userOptions;t&&(await S("git init",{cwd:n}),await S(`git remote add origin ${r.gitFullSSHUrl}`,{cwd:n}));let o=process.cwd(),i=g.relative(o,n);console.log(`
6
+ `),p={pkgName:t,pkgShortName:t.startsWith("@")?t.split("/")[1]:t,pkgInstall:c,gitUserName:i.name,gitUserEmail:i.email,gitOrg:l(),gitUrl:r(),gitFullUrl:m(),gitFullSSHUrl:m(),dateYear:new Date().getFullYear()};function r(){return`${s||`https://github.com/${l()}`}/${t.substring(t.indexOf("/")+1)}`}function l(){return s?s.substring(s.lastIndexOf("/")+1):t.startsWith("@")?t.split("/")[0].substring(1):De(i.name)}function m(a=!1){let u=s||`https://github.com/${l()}`;return a&&(u=u.replace(/http(s):\/\//g,"git@").replace(/\//,":")),`${u}/${t.substring(t.indexOf("/")+1)}.git`}return e.userOptions.textVars=p,p}async function Qe(e){let{gitUserUrl:t,textVars:s,projectDir:n}=e.userOptions;t&&(await S("git init",{cwd:n}),await S(`git remote add origin ${s.gitFullSSHUrl}`,{cwd:n}));let o=process.cwd(),i=g.relative(o,n);console.log(`
7
7
  Done. Now run:
8
8
  `),n!==o&&console.log(` cd ${i.includes(" ")?`"${i}"`:i}`);let c=Q()||"npm";switch(c){case"yarn":console.log(" yarn"),console.log(" yarn dev");break;default:console.log(` ${c} install`),console.log(` ${c} run dev`);break}}var z=Ge(`
9
9
  Usage
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tomjs/create-app",
3
3
  "type": "module",
4
- "version": "1.0.1",
4
+ "version": "1.1.0",
5
5
  "description": "create tomjs web app",
6
6
  "keywords": [
7
7
  "tomjs",
@@ -69,7 +69,7 @@
69
69
  "husky": "^9.0.11",
70
70
  "lint-staged": "^15.2.5",
71
71
  "npm-run-all": "^4.1.5",
72
- "prettier": "^3.3.0",
72
+ "prettier": "^3.3.1",
73
73
  "stylelint": "^16.6.1",
74
74
  "tsup": "^8.1.0",
75
75
  "tsx": "^4.11.2",
@@ -23,7 +23,7 @@
23
23
  "husky": "^9.0.11",
24
24
  "lint-staged": "^15.2.5",
25
25
  "npm-run-all": "^4.1.5",
26
- "prettier": "^3.3.0",
26
+ "prettier": "^3.3.1",
27
27
  "rimraf": "^5.0.7",
28
28
  "typescript": "~5.4.5"
29
29
  }
@@ -49,20 +49,20 @@
49
49
  },
50
50
  "scripts": {
51
51
  "dev": "run-p dev:*",
52
- "dev:i18n": "vscode-dev i18n --watch",
52
+ "dev:vsd": "vscode-dev --watch",
53
53
  "dev:dist": "vite",
54
- "build": "vscode-dev i18n && vite build",
54
+ "build": "vscode-dev && vite build",
55
55
  "lint": "run-s lint:eslint lint:stylelint lint:prettier",
56
56
  "lint:eslint": "eslint \"{src,extension}/**/*.{js,cjs,ts,tsx}\" *.{js,cjs,ts} --fix --cache"
57
57
  },
58
58
  "dependencies": {
59
59
  "@tomjs/node": "^2.1.0",
60
- "@tomjs/vscode": "^2.0.1",
60
+ "@tomjs/vscode": "^2.1.0",
61
61
  "@vscode/webview-ui-toolkit": "^1.4.0"
62
62
  },
63
63
  "devDependencies": {
64
64
  "@tomjs/vite-plugin-vscode": "^2.3.1",
65
- "@tomjs/vscode-dev": "^1.2.3",
65
+ "@tomjs/vscode-dev": "^2.0.0",
66
66
  "@types/vscode": "^1.56.0",
67
67
  "@types/vscode-webview": "^1.57.5",
68
68
  "vite": "^5.2.12"
@@ -1,5 +1,4 @@
1
1
  {
2
- "name": "vscode-extension",
3
2
  "displayName": "%displayName%",
4
3
  "description": "%description%",
5
4
  "version": "0.0.0",