UNPKG

pridepack

Version:

CLI for building TypeScript packages

6 lines (5 loc) 16.9 kB
#!/usr/bin/env node var at=(t=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(t,{get:(e,o)=>(typeof require!="undefined"?require:e)[o]}):t)(function(t){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});import Ue from"prompts";import Ve from"yargs";import Ae from"prompts";process.on("SIGINT",()=>{process.exit(1)});function m(t){t.aborted&&process.nextTick(()=>{process.exit(1)})}import le from"node:path";import T from"node:fs/promises";import Bt from"node:path";async function $t(t){await T.rm(t,{recursive:!0,force:!0})}async function h(t){try{return(await T.stat(t)).isFile()}catch(e){return!1}}function Qt(t){if(process.platform==="win32"&&/[<>:"|?*]/.test(t.replace(Bt.parse(t).root,""))){let o=new Error(`Path contains invalid characters: ${t}`);throw o.code="EINVAL",o}}async function Xt(t,e=511){return Qt(t),await T.mkdir(t,{mode:e,recursive:!0})}async function te(t){try{return await T.access(t),!0}catch(e){return!1}}async function $(t,e,o){let i=Bt.dirname(t);await te(i)||await Xt(i),await T.writeFile(t,e,o)}function ee(t){return`${JSON.stringify(t,void 0,2).replace(/\n/g,` `)} `}async function H(t,e){await $(t,ee(e))}async function Z(t){return JSON.parse(await T.readFile(t,"utf-8"))}function P(t,e,o){return e?".jsx":t?o?".mjs":".cjs":".js"}import Nt from"node:path";function b(t="."){return Nt.resolve(Nt.join(process.cwd(),t,"package.json"))}async function d(t="."){return await Z(b(t))}import v from"node:path";import K from"node:path";var oe={startEntrypoint:".",entrypoints:{".":"src/index.ts"},target:"es2018",tsconfig:"tsconfig.json",outputDir:"dist"},y=oe;async function nt(t,e){return t?await import(e):(delete at.cache[e],at(e))}var It=[".pridepackrc",".pridepack.json","pridepack.json","pridepack.config.json",".pridepack.config.json"],Rt=["pridepack.config.js","pridepack.js",".pridepack.config.js",".pridepack.js"],k;async function f(){if(k)return k;let t=await d(),e=process.cwd();for(let o=0;o<It.length;o+=1){let i=K.resolve(K.join(e,It[o]));if(await h(i)){let r=await Z(i);return k={...r,entrypoints:r.entrypoints||y.entrypoints,tsconfig:r.tsconfig||y.tsconfig,target:r.target||y.target,outputDir:r.outputDir||y.outputDir},k}}for(let o=0;o<Rt.length;o+=1){let i=K.resolve(K.join(e,Rt[o]));if(await h(i)){let r=await nt(t.type==="module",i);return k={...r,entrypoints:r.entrypoints||y.entrypoints,tsconfig:r.tsconfig||y.tsconfig,target:r.target||y.target,outputDir:r.outputDir||y.outputDir},k}}return k=y,k}import{readFileSync as re}from"node:fs";import Mt from"node:path";import ie from"typescript";var Q;async function st(){let t=await f();return Mt.resolve(Mt.join(process.cwd(),t.tsconfig))}async function N(){if(Q)return Q;let t=await st();return Q=ie.readConfigFile(t,e=>re(e,"utf-8")).config,Q}var ae="cjs",ne="production",se="development";function E(t,e,o){return v.join(t.outputDir,ae,o?se:ne,e==="."?"./index":e)}var ce="esm",pe="production",me="development";function S(t,e,o){return v.join(t.outputDir,ce,o?me:pe,e==="."?"./index":e)}var I="types";async function Jt(t){var c;let e=await N(),o=await f(),i=(c=e.compilerOptions)==null?void 0:c.rootDir;if(!i)throw new Error("Missing `rootDir` in tsconfig.json");let r=process.cwd(),a=v.join(r,t),n=v.join(r,i),s=v.relative(n,a),p=v.parse(s);return v.join(o.outputDir,I,p.dir,p.name)}import _t from"node:path";function R(t){return t.split(_t.sep).join(_t.posix.sep)}function At(t,e,o,i,r){return{require:`./${R(E(t,e,r))}${P(o,i,!1)}`,import:`./${R(S(t,e,r))}${P(o,i,!0)}`}}function ue(t,e,o,i,r){return{types:o,development:At(t,e,i,r,!0),...At(t,e,i,r,!1)}}async function ct(t,e="."){let o=await d(e),i=o.type==="module",r=t.jsx==="preserve",a={},n={},s,p,c;for(let u of Object.keys(t.entrypoints)){let q=await Jt(t.entrypoints[u]),x=`./${R(q)}.d.ts`;if(a[u]=ue(t,u,x,i,r),u===".")s=x,p=a[u].require,c=a[u].import;else{let z=le.posix.relative(".",u);n[z]=[x]}}await H(b(e),{...o,types:s,main:p,module:c,exports:a,typesVersions:{"*":n}})}import{build as we,context as xe}from"esbuild";import Ut from"node:path";import D from"node:path";function pt(t,e,o){let i=process.cwd(),r={};for(let a of Object.keys(t.entrypoints)){let n=e?S(t,a,o):E(t,a,o),s=D.parse(D.resolve(D.join(i,n))),p=D.join(s.dir,s.name);r[p]=D.resolve(D.join(i,t.entrypoints[a]))}return r}import mt from"dotenv";import{readFile as lt}from"node:fs/promises";import j from"node:path";var fe=".env",de=".env.production",ge=".env.development";async function ut(t){let e=process.cwd(),o={};if(t){let r=j.resolve(j.join(e,ge));await h(r)&&Object.assign(o,mt.parse(await lt(r,"utf-8")))}else{let r=j.resolve(j.join(e,de));await h(r)&&Object.assign(o,mt.parse(await lt(r,"utf-8")))}let i=j.resolve(j.join(e,fe));return await h(i)&&Object.assign(o,mt.parse(await lt(i,"utf-8"))),o}var Lt="process.env",X="import.meta.env";async function ft(t){let e=await ut(t),o={};for(let i of Object.keys(e)){let r=JSON.stringify(e[i]);o[`${Lt}.${i}`]=r,o[`${X}.${i}`]=r}return o[`${Lt}.NODE_ENV`]=t?'"development"':'"production"',o[`${X}.MODE`]=t?'"development"':'"production"',o[`${X}.DEV`]=t?"true":"false",o[`${X}.PROD`]=t?"false":"true",o}import{builtinModules as ye}from"node:module";var tt;function et(t,e){if(e)for(let o of Object.keys(e))t.add(o)}async function dt(){var o;if(tt)return tt;let t=await d(),e=new Set([(o=t.name)!=null?o:""]);return et(e,t.dependencies),et(e,t.devDependencies),et(e,t.peerDependencies),et(e,t.optionalDependencies),tt=["node:*",...ye,...Array.from(e)],tt}async function gt(t,e,o,i){let r=process.cwd(),a=await dt(),n=await d(),s={entryPoints:pt(t,i,o),outExtension:{".js":P(n.type==="module",t.jsx==="preserve",i)},outdir:r,bundle:!0,minify:!o,platform:"neutral",format:i?"esm":"cjs",sourcemap:o,define:await ft(o),external:a,target:t.target,tsconfig:Ut.resolve(Ut.join(r,t.tsconfig)),jsx:t.jsx,jsxFactory:t.jsxFactory,jsxFragment:t.jsxFragment,jsxImportSource:t.jsxImportSource,jsxDev:o,logLevel:"silent",charset:"utf8",plugins:typeof t.plugins=="function"?t.plugins({isDev:o,isCJS:!i,isESM:i}):t.plugins,legalComments:"eof",metafile:!0};return e?xe(s):we(s)}import Yt from"typescript";var M=(t,e)=>o=>`\x1B[${t}m${o}\x1B[${e}m`;var Vt=M(31,39),O=M(32,39),w=M(33,39),F=M(34,39);var Wt=M(36,39);import ot from"typescript";var Pe={[ot.DiagnosticCategory.Error]:{symbol:"\u2716",color:Vt},[ot.DiagnosticCategory.Message]:{symbol:"\u2714",color:O},[ot.DiagnosticCategory.Suggestion]:{symbol:"\u2139",color:Wt},[ot.DiagnosticCategory.Warning]:{symbol:"\u26A0",color:w}};function J(t,e){let o=Pe[t];console.log(`${o.color(o.symbol)} ${e}`)}function ke(t){let e=t.text;if(t.location){let{location:o}=t,i=F(o.file),r=w(`${o.line}`),a=w(`${o.column+1}`);return`${i} (${r}, ${a}): ${e}`}return e}function B(t,e){for(let o=0,i=e.length;o<i;o+=1)J(t?Yt.DiagnosticCategory.Warning:Yt.DiagnosticCategory.Error,ke(e[o]))}async function yt(t){let e=(await import("pretty-bytes")).default;for(let[o,i]of Object.entries(t.outputs))console.log(`- "${F(o)}": ${O(e(i.bytes))}`)}async function l(t,e,o){if(o!=null&&o.silent)return{async start(){return await t(()=>{})},stop(){var a;(a=o==null?void 0:o.onStop)==null||a.call(o)}};let i=(await import("ora")).default,r=i({spinner:"aesthetic"});return{async start(){r.start(e.pending);try{let a=!1,n=await t(()=>{a||(a=!0,r.succeed(e.success))});return a||r.succeed(e.success),n}catch(a){throw r.fail(e.failure),a}},stop(){var a;(a=o==null?void 0:o.onStop)==null||a.call(o),r.stop()}}}function Ce(t){return!!(t.errors&&t.warnings)}async function wt(t,e,o){let i;async function r(){return e?(i||(i=await t(!0)),i.rebuild()):t(!1)}return await l(async a=>{try{let n=await r();a(),B(!1,n.errors),B(!0,n.warnings),n.metafile&&!e&&await yt(n.metafile)}catch(n){throw Ce(n)&&(B(!1,n.errors),B(!0,n.warnings)),n}},o,{silent:e})}async function g(t,e,o,i){let r=i?"ESM":"CommonJS",a=o?"Development":"Production";return await wt(async n=>gt(t,n,o,i),e,{pending:`Building ${r} ${a} output...`,success:`Built ${r} ${a} output!`,failure:`Failed to build ${r} ${a} output.`})}import qt from"node:path";import Pt from"typescript";import Gt from"node:path";function xt(t){let e=process.cwd(),o=[];for(let i of Object.values(t.entrypoints))o.push(Gt.resolve(Gt.join(e,i)));return o}import he from"typescript";async function _(){let t=await N();return he.convertCompilerOptionsFromJson(t.compilerOptions,process.cwd()).options}async function kt(t,e=!0){let o=await _(),i=process.cwd(),r={...o,outDir:qt.resolve(qt.join(i,t.outputDir,I)),emitDeclarationOnly:!e,moduleResolution:100,noEmit:e},a=Pt.createCompilerHost(r),n=[];a.writeFile=(c,u)=>{n.push({name:c,data:u})};let s=Pt.createProgram(xt(t),r,a),p=s.emit();return await Promise.all(n.map(async c=>$(c.name,c.data))),Pt.getPreEmitDiagnostics(s).concat(p.diagnostics)}import be from"node:path";import ve from"typescript";function Te(t){let e=ve.flattenDiagnosticMessageText(t.messageText,` `);if(t.file&&t.start){let{line:o,character:i}=t.file.getLineAndCharacterOfPosition(t.start),r=be.relative(process.cwd(),t.file.fileName),a=F(r),n=w(`${o+1}`),s=w(`${i+1}`);return`${a} (${n}, ${s}): ${e}`}return e}function A(t){for(let e=0,o=t.length;e<o;e+=1)J(t[e].category,Te(t[e]))}async function L(t){let e=await f();await(await l(async i=>{let r=await kt(e,t);i(),A(r)},{success:"Compiled types!",failure:"Failed to compile types.",pending:"Compiling types..."})).start()}async function Ct(){let t=await f();await(await g(t,!1,!0,!0)).start(),await(await g(t,!1,!1,!0)).start(),await(await g(t,!1,!0,!1)).start(),await(await g(t,!1,!1,!1)).start(),await ct(t),await L(!1)}import zt from"node:path";async function ht(){let t=await f(),e=process.cwd();await $t(zt.resolve(zt.join(e,t.outputDir)))}async function bt(){await(await l(ht,{pending:"Cleaning build directory...",success:"Cleaned build directory!",failure:"Failed to clean build directory."})).start()}import Je from"prompts";import Ee from"degit";import Se from"node:path";var De="github:lxsmnsyc/pridepack";async function U(t,e){let o=Se.resolve(process.cwd(),e);await Ee(`${De}/templates/${t}`).clone(o)}function vt(t){return t.toLowerCase().replace(/(^@.*\/)|((^[^a-zA-Z]+)|[^\w.-])|([^a-zA-Z0-9]+$)/g,"")}import je from"prompts";var Oe=["basic","react","preact","vue","fastify","bot-discord","solid-js"];async function V(){return je({type:"select",name:"template",message:"Choose your template",choices:Oe.map(t=>({title:t,value:t})),initial:0,onState:m})}import Ne from"@ovyerus/licenses";import C from"prompts";import{getLicense as Fe}from"license";import Be from"node:path";var $e={prepublishOnly:"pridepack clean && pridepack build",build:"pridepack build","type-check":"pridepack check",clean:"pridepack clean",watch:"pridepack watch",start:"pridepack start",dev:"pridepack dev"};async function Tt(t,e="."){var r;let o=await d(e);t.license&&await $(Be.join(e,"LICENSE"),Fe(t.license,{author:t.author,year:new Date().getFullYear().toString()}),{encoding:"utf-8"});let i={...o,name:(r=t.name)!=null?r:o.name,version:"0.0.0",description:t.description,repository:{url:t.repository,type:"git"},homepage:t.homepage,bugs:{url:t.issues},author:t.author,license:t.license,private:t.isPrivate,publishConfig:{access:t.isPrivate?"restricted":"public"},scripts:{...$e,...o.scripts}};await H(b(e),i)}async function W(t,e){let{description:o}=await C({type:"text",name:"description",message:"Your package's description?",onState:m}),{author:i}=await C({type:"text",name:"author",message:"Author name?",onState:m}),{repository:r}=await C({type:"text",name:"repository",message:"Repository URL?",onState:m}),{homepage:a}=await C({type:"text",name:"homepage",message:"Home URL?",onState:m}),{issues:n}=await C({type:"text",name:"issues",message:"Issues URL?",onState:m}),s,{licensed:p}=await C({type:"confirm",name:"licensed",message:"Licensed?",onState:m});p&&(s=(await C({type:"autocomplete",name:"license",message:"Which license?",choices:Object.keys(Ne).map(u=>({title:u,value:u})),onState:m})).license);let{private:c}=await C({type:"confirm",name:"private",message:"Is your package private?",onState:m});await Tt({name:t,license:s,author:i,description:o,isPrivate:c,repository:r,homepage:a,issues:n},e)}import Me from"prompts";import{execa as Ie}from"execa";import Ht from"node:path";function Re(t){switch(t){case"npm":return["install"];case"yarn":return[];case"pnpm":return["install"];default:return[]}}async function Et(t,e="."){await Ie(t,Re(t),{cwd:Ht.resolve(Ht.join(process.cwd(),e))})}async function Y(t){let e=await Me({type:"select",name:"command",message:"Choose your preferred package manager tool",choices:[{title:"NPM",value:"npm"},{title:"Yarn v1 (Legacy)",value:"yarn"},{title:"PNPM",value:"pnpm"}],initial:0,onState:m});await(await l(async()=>Et(e.command,t),{pending:"Installing dependencies...",success:"Installed dependencies!",failure:"Failed to install dependencies."})).start()}async function St(){let t=await Je({type:"text",name:"name",message:"What's your package name?",onState:m}),e=vt(t.name),o=await V();await(await l(async()=>U(o.template,e),{pending:`Copying from template '${o.template}'...`,success:`Copied from template '${o.template}'!`,failure:`Failed to copy from template '${o.template}'.`})).start(),await W(t.name,e),await Y(e)}import Zt from"node:path";async function Dt(){let t=await V();await(await l(async()=>U(t.template,"."),{pending:`Copying from template '${t.template}'...`,success:`Copied from template '${t.template}'!`,failure:`Failed to copy from template '${t.template}'.`})).start(),await W(Zt.basename(Zt.resolve(process.cwd()))),await Y(".")}import{execaNode as _e}from"execa";import Kt from"node:path";import rt from"typescript";function jt(t,e,o){let i=!0,r;async function a(){if(!i)return;let s={...await _(),outDir:Kt.resolve(Kt.join(process.cwd(),I)),emitDeclarationOnly:!o,moduleResolution:100,noEmit:o};if(!i)return;let p=rt.createWatchCompilerHost(await st(),s,rt.sys,rt.createSemanticDiagnosticsBuilderProgram,t,e);r=rt.createWatchProgram(p)}return a().catch(n=>{r.close(),console.error(n),process.exit(1)}),()=>{i=!1,r&&r.close()}}async function G(t){let e=await f(),o;await(await l(async()=>{let r=await g(e,!0,!0,!0),a=await g(e,!0,!1,!0),n=await g(e,!0,!0,!1),s=await g(e,!0,!1,!1);async function p(){await r.start(),await a.start(),await n.start(),await s.start()}o=jt(c=>{A([c])},()=>{p().then(()=>{t==null||t()}).catch(c=>{console.error(c),process.exit(1)})},!1)},{pending:"Watch mode starting...",success:"Watching files...",failure:"Watch mode failed."},{onStop(){o()}})).start()}async function it(t){let e=await f();await(await l(async()=>{var u,q;let r=(await d()).type==="module",a=r?S(e,(u=e.startEntrypoint)!=null?u:".",t):E(e,(q=e.startEntrypoint)!=null?q:".",t),n=P(r,!1,r),s=t?["NODE_ENV=development","--enable-source-maps",...process.argv.slice(3)]:["NODE_ENV=production",...process.argv.slice(3)];function p(){var z,Ft;let x=_e(`${a}${n}`,s);return(z=x.stderr)==null||z.pipe(process.stderr),(Ft=x.stdout)==null||Ft.pipe(process.stdout),x}let c;t?await G(()=>{let x=!!c;c&&(c.cancel(),console.log(w("Restarting..."))),c=p(),x&&console.log(O("Restarted!"))}):await p()},{pending:`Starting package in '${t?"development":"production"}' mode...`,success:`Started in '${t?"development":"production"}' mode!`,failure:`Failed to start package in '${t?"development":"production"}' mode.`})).start()}async function Le(){switch((await Ae({type:"select",name:"_",message:"Which command?",choices:[{title:"build",value:"build"},{title:"clean",value:"clean"},{title:"check",value:"check"},{title:"create",value:"create"},{title:"init",value:"init"},{title:"watch",value:"watch"},{title:"start",value:"start"},{title:"dev",value:"dev"}],initial:0,onState:m}))._[0]){case"create":{await St();break}case"init":{await Dt();break}case"clean":{await bt();break}case"build":{await Ct();break}case"check":{await L(!0);break}case"watch":{await G();break}case"start":{await it(!1);break}case"dev":{await it(!0);break}}}function Ot(){Le().catch(t=>{console.error(t),process.exit(1)})}var{argv:We}=Ve(process.argv.slice(2)).scriptName("pridepack").usage("Usage: $0 <command> [options]").command("build","Build the project directory.").command("create <name> [template]","Creates a Typescript package project.",t=>t.positional("name",{describe:"Name of the package",type:"string"}).positional("template",{describe:"Project template to be used",type:"string"})).command("init [template]","Initializes current directory as a Typescript package project.",t=>t.positional("template",{describe:"Project template to be used",default:"basic",type:"string"})).command("check","Performs typechecking").command("watch","Opts-in to watch mode for building.").command("clean","Cleans output directory.").command("start","Runs the package in production mode.").command("dev","Runs the package in development mode.").demandCommand(1).help();Ue.override(We);Ot();