@cnpx/cnpx 0.0.5-dev.20260405084610 → 0.0.5-dev.20260405125711

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
@@ -189,7 +189,7 @@ Versions are compared with a custom semver parser that handles pre-release ident
189
189
  ```
190
190
  ┌ Update available ───────────────╮
191
191
  │ │
192
- │ Current: 0.0.4 → Latest: 0.0.5
192
+ │ Current: 0.0.5 → Latest: 0.0.6
193
193
  │ Run: pnpm i -g @cnpx/cnpx │
194
194
  │ │
195
195
  └──────────────────────────────────╯
@@ -1,2 +1,2 @@
1
- 'use strict';var getPackageManager=require('./getPackageManager'),package_json=require('../package.json'),prompts=require('@clack/prompts'),colorette=require('colorette'),fetch=require('./fetch');function f(n){const r=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(n);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),pre:r[4]?r[4].split("."):[]}:null}function b(n,r){const e=/^\d+$/.test(n),t=/^\d+$/.test(r);if(e&&t){const o=Number(n),i=Number(r);return o<i?-1:o>i?1:0}return e&&!t?-1:!e&&t?1:n<r?-1:n>r?1:0}function v(n,r){const e=f(n),t=f(r);if(!e||!t)return n.localeCompare(r,void 0,{numeric:true,sensitivity:"base"});if(e.major!==t.major)return e.major<t.major?-1:1;if(e.minor!==t.minor)return e.minor<t.minor?-1:1;if(e.patch!==t.patch)return e.patch<t.patch?-1:1;if(e.pre.length===0&&t.pre.length===0)return 0;if(e.pre.length===0)return 1;if(t.pre.length===0)return -1;const o=Math.max(e.pre.length,t.pre.length);for(let i=0;i<o;i++){const a=e.pre[i],u=t.pre[i];if(a===void 0)return -1;if(u===void 0)return 1;const m=b(a,u);if(m!==0)return m}return 0}async function k(){const n=prompts.spinner();n.start("Checking for updates");try{const{data:r}=await fetch.get(`https://registry.npmjs.org/${package_json.name}/latest`);if(v(r.version,package_json.version)<=0)return;prompts.note(`Current: ${colorette.bold(package_json.version)} \u2192 Latest: ${colorette.bold(r.version)}
2
- Run: ${getPackageManager.getPackageManager()} i -g ${package_json.name}`,"Update available");}catch{}finally{n.clear();}}exports.checkForUpdate=k;exports.compareIdentifier=b;exports.compareSemver=v;exports.parseSemver=f;
1
+ 'use strict';var getPackageManager=require('./getPackageManager'),package_json=require('../package.json'),prompts=require('@clack/prompts'),colorette=require('colorette'),fetch=require('./fetch');function f(n){const r=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(n);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),pre:r[4]?r[4].split("."):[]}:null}function b(n,r){const e=/^\d+$/.test(n),t=/^\d+$/.test(r);if(e&&t){const o=Number(n),i=Number(r);return o<i?-1:o>i?1:0}return e&&!t?-1:!e&&t?1:n<r?-1:n>r?1:0}function v(n,r){const e=f(n),t=f(r);if(!e||!t)return n.localeCompare(r,void 0,{numeric:true,sensitivity:"base"});if(e.major!==t.major)return e.major<t.major?-1:1;if(e.minor!==t.minor)return e.minor<t.minor?-1:1;if(e.patch!==t.patch)return e.patch<t.patch?-1:1;if(e.pre.length===0&&t.pre.length===0)return 0;if(e.pre.length===0)return 1;if(t.pre.length===0)return -1;const o=Math.max(e.pre.length,t.pre.length);for(let i=0;i<o;i++){const a=e.pre[i],u=t.pre[i];if(a===void 0)return -1;if(u===void 0)return 1;const m=b(a,u);if(m!==0)return m}return 0}async function C(){const n=prompts.spinner();n.start("Checking for updates");try{const{data:r}=await fetch.get(`https://registry.npmjs.org/${package_json.name}/latest`);if(n.clear(),v(r.version,package_json.version)<=0)return;prompts.note(`Current: ${colorette.bold(package_json.version)} \u2192 Latest: ${colorette.bold(r.version)}
2
+ Run: ${getPackageManager.getPackageManager()} i -g ${package_json.name}`,"Update available");}catch{n.isCancelled||n.clear();}}exports.checkForUpdate=C;exports.compareIdentifier=b;exports.compareSemver=v;exports.parseSemver=f;
@@ -1,2 +1,2 @@
1
- import'./chunk-A7RKGLUR.mjs';import {getPackageManager}from'./getPackageManager';import {name,version}from'../package.json';import {spinner,note}from'@clack/prompts';import {bold}from'colorette';import {get}from'./fetch';function f(n){const r=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(n);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),pre:r[4]?r[4].split("."):[]}:null}function b(n,r){const e=/^\d+$/.test(n),t=/^\d+$/.test(r);if(e&&t){const o=Number(n),i=Number(r);return o<i?-1:o>i?1:0}return e&&!t?-1:!e&&t?1:n<r?-1:n>r?1:0}function v(n,r){const e=f(n),t=f(r);if(!e||!t)return n.localeCompare(r,void 0,{numeric:true,sensitivity:"base"});if(e.major!==t.major)return e.major<t.major?-1:1;if(e.minor!==t.minor)return e.minor<t.minor?-1:1;if(e.patch!==t.patch)return e.patch<t.patch?-1:1;if(e.pre.length===0&&t.pre.length===0)return 0;if(e.pre.length===0)return 1;if(t.pre.length===0)return -1;const o=Math.max(e.pre.length,t.pre.length);for(let i=0;i<o;i++){const a=e.pre[i],u=t.pre[i];if(a===void 0)return -1;if(u===void 0)return 1;const m=b(a,u);if(m!==0)return m}return 0}async function k(){const n=spinner();n.start("Checking for updates");try{const{data:r}=await get(`https://registry.npmjs.org/${name}/latest`);if(v(r.version,version)<=0)return;note(`Current: ${bold(version)} \u2192 Latest: ${bold(r.version)}
2
- Run: ${getPackageManager()} i -g ${name}`,"Update available");}catch{}finally{n.clear();}}export{k as checkForUpdate,b as compareIdentifier,v as compareSemver,f as parseSemver};
1
+ import'./chunk-A7RKGLUR.mjs';import {getPackageManager}from'./getPackageManager';import {name,version}from'../package.json';import {spinner,note}from'@clack/prompts';import {bold}from'colorette';import {get}from'./fetch';function f(n){const r=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(n);return r?{major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),pre:r[4]?r[4].split("."):[]}:null}function b(n,r){const e=/^\d+$/.test(n),t=/^\d+$/.test(r);if(e&&t){const o=Number(n),i=Number(r);return o<i?-1:o>i?1:0}return e&&!t?-1:!e&&t?1:n<r?-1:n>r?1:0}function v(n,r){const e=f(n),t=f(r);if(!e||!t)return n.localeCompare(r,void 0,{numeric:true,sensitivity:"base"});if(e.major!==t.major)return e.major<t.major?-1:1;if(e.minor!==t.minor)return e.minor<t.minor?-1:1;if(e.patch!==t.patch)return e.patch<t.patch?-1:1;if(e.pre.length===0&&t.pre.length===0)return 0;if(e.pre.length===0)return 1;if(t.pre.length===0)return -1;const o=Math.max(e.pre.length,t.pre.length);for(let i=0;i<o;i++){const a=e.pre[i],u=t.pre[i];if(a===void 0)return -1;if(u===void 0)return 1;const m=b(a,u);if(m!==0)return m}return 0}async function C(){const n=spinner();n.start("Checking for updates");try{const{data:r}=await get(`https://registry.npmjs.org/${name}/latest`);if(n.clear(),v(r.version,version)<=0)return;note(`Current: ${bold(version)} \u2192 Latest: ${bold(r.version)}
2
+ Run: ${getPackageManager()} i -g ${name}`,"Update available");}catch{n.isCancelled||n.clear();}}export{C as checkForUpdate,b as compareIdentifier,v as compareSemver,f as parseSemver};
@@ -0,0 +1,3 @@
1
+ declare function confirmProject(name: string, category: string, template: string, force: boolean): Promise<boolean>;
2
+
3
+ export { confirmProject };
@@ -0,0 +1,3 @@
1
+ declare function confirmProject(name: string, category: string, template: string, force: boolean): Promise<boolean>;
2
+
3
+ export { confirmProject };
@@ -0,0 +1 @@
1
+ 'use strict';var prompts=require('@clack/prompts'),colorette=require('colorette');async function f(t,n,o,i){if(i)return true;const r=await prompts.confirm({message:`Create project with name: ${colorette.bold(t)}, category: ${colorette.bold(n)}, template: ${colorette.bold(o)}?`});return prompts.isCancel(r)||!r?(prompts.cancel("Operation cancelled"),false):true}exports.confirmProject=f;
@@ -0,0 +1 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {confirm,isCancel,cancel}from'@clack/prompts';import {bold}from'colorette';async function f(t,n,o,i){if(i)return true;const r=await confirm({message:`Create project with name: ${bold(t)}, category: ${bold(n)}, template: ${bold(o)}?`});return isCancel(r)||!r?(cancel("Operation cancelled"),false):true}export{f as confirmProject};
@@ -0,0 +1,3 @@
1
+ declare function getProjectName(initialName?: string | boolean): Promise<string | null>;
2
+
3
+ export { getProjectName };
@@ -0,0 +1,3 @@
1
+ declare function getProjectName(initialName?: string | boolean): Promise<string | null>;
2
+
3
+ export { getProjectName };
@@ -0,0 +1 @@
1
+ 'use strict';var isValidDirectoryName=require('./isValidDirectoryName'),prompts=require('@clack/prompts');async function f(r){if(typeof r=="string"){const e=isValidDirectoryName.isValidDirectoryName(r);return typeof e=="string"?(prompts.cancel(e),null):r}const t=await prompts.text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project",validate:e=>{if(!e)return;const n=isValidDirectoryName.isValidDirectoryName(e);if(typeof n=="string")return new Error(n)}});return prompts.isCancel(t)?(prompts.cancel("Operation cancelled"),null):t}exports.getProjectName=f;
@@ -0,0 +1 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {isValidDirectoryName}from'./isValidDirectoryName';import {cancel,text,isCancel}from'@clack/prompts';async function f(r){if(typeof r=="string"){const e=isValidDirectoryName(r);return typeof e=="string"?(cancel(e),null):r}const t=await text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project",validate:e=>{if(!e)return;const n=isValidDirectoryName(e);if(typeof n=="string")return new Error(n)}});return isCancel(t)?(cancel("Operation cancelled"),null):t}export{f as getProjectName};
package/out/index.d.mts CHANGED
@@ -7,6 +7,7 @@ export { getTemplates } from './getTemplates.mjs';
7
7
  export { isInvalidPath } from './isInvalidPath.mjs';
8
8
  export { isValidDirectoryName } from './isValidDirectoryName.mjs';
9
9
  export { main } from './main.mjs';
10
+ export { offlineRunner } from './offlineRunner.mjs';
10
11
  export { showHelp } from './showHelp.mjs';
11
12
  export { FilteredGithubResponse, GithubAPIResponse, ParsedSemver } from './type.mjs';
12
13
 
package/out/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export { getTemplates } from './getTemplates.js';
7
7
  export { isInvalidPath } from './isInvalidPath.js';
8
8
  export { isValidDirectoryName } from './isValidDirectoryName.js';
9
9
  export { main } from './main.js';
10
+ export { offlineRunner } from './offlineRunner.js';
10
11
  export { showHelp } from './showHelp.js';
11
12
  export { FilteredGithubResponse, GithubAPIResponse, ParsedSemver } from './type.js';
12
13
 
package/out/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var package_json=require('../package.json'),checkForUpdate=require('./checkForUpdate'),clone=require('./clone'),fetch=require('./fetch'),getCategories=require('./getCategories'),getPackageManager=require('./getPackageManager'),getTemplates=require('./getTemplates'),isInvalidPath=require('./isInvalidPath'),isValidDirectoryName=require('./isValidDirectoryName'),main=require('./main'),showHelp=require('./showHelp'),type=require('./type');Object.defineProperty(exports,"version",{enumerable:true,get:function(){return package_json.version}});Object.keys(checkForUpdate).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return checkForUpdate[k]}})});Object.keys(clone).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return clone[k]}})});Object.keys(fetch).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return fetch[k]}})});Object.keys(getCategories).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return getCategories[k]}})});Object.keys(getPackageManager).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return getPackageManager[k]}})});Object.keys(getTemplates).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return getTemplates[k]}})});Object.keys(isInvalidPath).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return isInvalidPath[k]}})});Object.keys(isValidDirectoryName).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return isValidDirectoryName[k]}})});Object.keys(main).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return main[k]}})});Object.keys(showHelp).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return showHelp[k]}})});Object.keys(type).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return type[k]}})});
1
+ 'use strict';var package_json=require('../package.json'),checkForUpdate=require('./checkForUpdate'),clone=require('./clone'),fetch=require('./fetch'),getCategories=require('./getCategories'),getPackageManager=require('./getPackageManager'),getTemplates=require('./getTemplates'),isInvalidPath=require('./isInvalidPath'),isValidDirectoryName=require('./isValidDirectoryName'),main=require('./main'),offlineRunner=require('./offlineRunner'),showHelp=require('./showHelp'),type=require('./type');Object.defineProperty(exports,"version",{enumerable:true,get:function(){return package_json.version}});Object.keys(checkForUpdate).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return checkForUpdate[k]}})});Object.keys(clone).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return clone[k]}})});Object.keys(fetch).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return fetch[k]}})});Object.keys(getCategories).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return getCategories[k]}})});Object.keys(getPackageManager).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return getPackageManager[k]}})});Object.keys(getTemplates).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return getTemplates[k]}})});Object.keys(isInvalidPath).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return isInvalidPath[k]}})});Object.keys(isValidDirectoryName).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return isValidDirectoryName[k]}})});Object.keys(main).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return main[k]}})});Object.keys(offlineRunner).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return offlineRunner[k]}})});Object.keys(showHelp).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return showHelp[k]}})});Object.keys(type).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return type[k]}})});
package/out/index.mjs CHANGED
@@ -1 +1 @@
1
- import'./chunk-A7RKGLUR.mjs';export{version}from'../package.json';export*from'./checkForUpdate';export*from'./clone';export*from'./fetch';export*from'./getCategories';export*from'./getPackageManager';export*from'./getTemplates';export*from'./isInvalidPath';export*from'./isValidDirectoryName';export*from'./main';export*from'./showHelp';export*from'./type';
1
+ import'./chunk-A7RKGLUR.mjs';export{version}from'../package.json';export*from'./checkForUpdate';export*from'./clone';export*from'./fetch';export*from'./getCategories';export*from'./getPackageManager';export*from'./getTemplates';export*from'./isInvalidPath';export*from'./isValidDirectoryName';export*from'./main';export*from'./offlineRunner';export*from'./showHelp';export*from'./type';
package/out/main.js CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var prompts=require('@clack/prompts'),isValidDirectoryName=require('./isValidDirectoryName'),getPackageManager=require('./getPackageManager'),colorette=require('colorette'),checkForUpdate=require('./checkForUpdate'),isInvalidPath=require('./isInvalidPath'),getCategories=require('./getCategories'),offlineRunner=require('./offlineRunner'),getTemplates=require('./getTemplates'),node_util=require('node:util'),clone=require('./clone'),node_path=require('node:path');async function J(){prompts.intro(colorette.blue("cnpx - Create a new project from a template"));const r=["",""],{values:t}=node_util.parseArgs({args:process.argv.slice(2),strict:false,options:{category:{type:"string",short:"c"},template:{type:"string",short:"t"},name:{type:"string",short:"n"},force:{type:"boolean",short:"f"},offline:{type:"boolean",short:"o"}}});if(t.offline===true)return await offlineRunner.offlineRunner({...t});if(typeof t.name=="string"){const e=isValidDirectoryName.isValidDirectoryName(t.name);if(typeof e=="string")return prompts.cancel(e),process.exit(1)}if(typeof t.category=="string"&&(r[0]=t.category),typeof t.template=="string")if(t.template.includes("/")){const[e,n]=t.template.split("/");r[0]=e,r[1]=n;}else r[1]=t.template;await checkForUpdate.checkForUpdate();const o=typeof t.name=="string"?t.name:await prompts.text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project",validate:e=>{if(!e)return;const n=isValidDirectoryName.isValidDirectoryName(e);if(typeof n=="string")return new Error(n)}});if(prompts.isCancel(o))return prompts.cancel("Operation cancelled"),process.exit(0);const p=isInvalidPath.isInvalidPath(node_path.join(process.cwd(),o));let m=typeof t.force=="boolean"?t.force:false;if(p!==null)if(p){if(t.force!==true){const e=await prompts.confirm({message:`Directory ${colorette.green(o)} already exists. Do you want to overwrite it?`});if(prompts.isCancel(e)||!e)return prompts.cancel("Operation cancelled"),process.exit(0)}m=true;}else return prompts.cancel(`${colorette.green(o)} is a file. Please choose a different project name.`),process.exit(1);const d=await getCategories.getCategories(),s=r[0]||await prompts.select({message:"Select a category",options:d.map(e=>({name:e.name,value:e.name}))});if(prompts.isCancel(s))return prompts.cancel("Operation cancelled"),process.exit(0);r[0]=s;const w=await getTemplates.getTemplates(s),l=r[1]||await prompts.select({message:"Select a template",options:w.map(e=>({name:e.name,value:e.name}))});if(prompts.isCancel(l))return prompts.cancel("Operation cancelled"),process.exit(0);if(r[1]=l,t.force!==true){const e=await prompts.confirm({message:`Create project with name: ${colorette.bold(o)}, category: ${colorette.bold(r[0])}, template: ${colorette.bold(r[1])}?`});if(prompts.isCancel(e)||!e)return prompts.cancel("Operation cancelled"),process.exit(0)}await clone.clone(o,`${r.join("/")}`,m),prompts.note(`cd ${o}
1
+ 'use strict';var prompts=require('@clack/prompts'),getPackageManager=require('./getPackageManager'),confirmProject=require('./confirmProject'),getProjectName=require('./getProjectName'),checkForUpdate=require('./checkForUpdate'),getCategories=require('./getCategories'),isInvalidPath=require('./isInvalidPath'),parseTemplate=require('./parseTemplate'),offlineRunner=require('./offlineRunner'),getTemplates=require('./getTemplates'),colorette=require('colorette'),node_util=require('node:util'),clone=require('./clone'),node_path=require('node:path');async function L(){prompts.intro(colorette.blue("cnpx - Create a new project from a template"));const{values:e}=node_util.parseArgs({args:process.argv.slice(2),strict:false,options:{category:{type:"string",short:"c"},template:{type:"string",short:"t"},name:{type:"string",short:"n"},force:{type:"boolean",short:"f"},offline:{type:"boolean",short:"o"}}});if(e.offline===true)return await offlineRunner.offlineRunner({...e});const o=await getProjectName.getProjectName(e.name);if(!o)return process.exit(0);let r=parseTemplate.parseTemplate(e.category,e.template);await checkForUpdate.checkForUpdate();const n=isInvalidPath.isInvalidPath(node_path.join(process.cwd(),o));let c=typeof e.force=="boolean"?e.force:false;if(n!==null)if(n){if(e.force!==true){const t=await prompts.confirm({message:`Directory ${colorette.green(o)} already exists. Do you want to overwrite it?`});if(prompts.isCancel(t)||!t)return prompts.cancel("Operation cancelled"),process.exit(0)}}else return prompts.cancel(`${o} is a file. Please choose a different project name.`),process.exit(1);const l=await getCategories.getCategories(),i=r[0]||await prompts.select({message:"Select a category",options:l.map(t=>({name:t.name,value:t.name}))});if(prompts.isCancel(i))return prompts.cancel("Operation cancelled"),process.exit(0);r[0]=i;const f=await getTemplates.getTemplates(i),p=r[1]||await prompts.select({message:"Select a template",options:f.map(t=>({name:t.name,value:t.name}))});if(prompts.isCancel(p))return prompts.cancel("Operation cancelled"),process.exit(0);if(r[1]=p,!await confirmProject.confirmProject(o,r[0],r[1],c))return process.exit(0);await clone.clone(o,`${r.join("/")}`,c),prompts.note(`cd ${o}
2
2
  ${getPackageManager.getPackageManager()} install
3
3
  node --run dev`,"To get started, run:"),prompts.outro(`Thanks for using cnpx! If you have any issues or feedback, please open an issue at ${colorette.gray("https://github.com/xcfio/template/issues")}`);}
4
- exports.main=J;
4
+ exports.main=L;
package/out/main.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import'./chunk-A7RKGLUR.mjs';import {intro,cancel,text,isCancel,confirm,select,note,outro}from'@clack/prompts';import {isValidDirectoryName}from'./isValidDirectoryName';import {getPackageManager}from'./getPackageManager';import {blue,green,bold,gray}from'colorette';import {checkForUpdate}from'./checkForUpdate';import {isInvalidPath}from'./isInvalidPath';import {getCategories}from'./getCategories';import {offlineRunner}from'./offlineRunner';import {getTemplates}from'./getTemplates';import {parseArgs}from'node:util';import {clone}from'./clone';import {join}from'node:path';async function J(){intro(blue("cnpx - Create a new project from a template"));const r=["",""],{values:t}=parseArgs({args:process.argv.slice(2),strict:false,options:{category:{type:"string",short:"c"},template:{type:"string",short:"t"},name:{type:"string",short:"n"},force:{type:"boolean",short:"f"},offline:{type:"boolean",short:"o"}}});if(t.offline===true)return await offlineRunner({...t});if(typeof t.name=="string"){const e=isValidDirectoryName(t.name);if(typeof e=="string")return cancel(e),process.exit(1)}if(typeof t.category=="string"&&(r[0]=t.category),typeof t.template=="string")if(t.template.includes("/")){const[e,n]=t.template.split("/");r[0]=e,r[1]=n;}else r[1]=t.template;await checkForUpdate();const o=typeof t.name=="string"?t.name:await text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project",validate:e=>{if(!e)return;const n=isValidDirectoryName(e);if(typeof n=="string")return new Error(n)}});if(isCancel(o))return cancel("Operation cancelled"),process.exit(0);const p=isInvalidPath(join(process.cwd(),o));let m=typeof t.force=="boolean"?t.force:false;if(p!==null)if(p){if(t.force!==true){const e=await confirm({message:`Directory ${green(o)} already exists. Do you want to overwrite it?`});if(isCancel(e)||!e)return cancel("Operation cancelled"),process.exit(0)}m=true;}else return cancel(`${green(o)} is a file. Please choose a different project name.`),process.exit(1);const d=await getCategories(),s=r[0]||await select({message:"Select a category",options:d.map(e=>({name:e.name,value:e.name}))});if(isCancel(s))return cancel("Operation cancelled"),process.exit(0);r[0]=s;const w=await getTemplates(s),l=r[1]||await select({message:"Select a template",options:w.map(e=>({name:e.name,value:e.name}))});if(isCancel(l))return cancel("Operation cancelled"),process.exit(0);if(r[1]=l,t.force!==true){const e=await confirm({message:`Create project with name: ${bold(o)}, category: ${bold(r[0])}, template: ${bold(r[1])}?`});if(isCancel(e)||!e)return cancel("Operation cancelled"),process.exit(0)}await clone(o,`${r.join("/")}`,m),note(`cd ${o}
1
+ import'./chunk-A7RKGLUR.mjs';import {intro,confirm,isCancel,cancel,select,note,outro}from'@clack/prompts';import {getPackageManager}from'./getPackageManager';import {confirmProject}from'./confirmProject';import {getProjectName}from'./getProjectName';import {checkForUpdate}from'./checkForUpdate';import {getCategories}from'./getCategories';import {isInvalidPath}from'./isInvalidPath';import {parseTemplate}from'./parseTemplate';import {offlineRunner}from'./offlineRunner';import {getTemplates}from'./getTemplates';import {blue,green,gray}from'colorette';import {parseArgs}from'node:util';import {clone}from'./clone';import {join}from'node:path';async function L(){intro(blue("cnpx - Create a new project from a template"));const{values:e}=parseArgs({args:process.argv.slice(2),strict:false,options:{category:{type:"string",short:"c"},template:{type:"string",short:"t"},name:{type:"string",short:"n"},force:{type:"boolean",short:"f"},offline:{type:"boolean",short:"o"}}});if(e.offline===true)return await offlineRunner({...e});const o=await getProjectName(e.name);if(!o)return process.exit(0);let r=parseTemplate(e.category,e.template);await checkForUpdate();const n=isInvalidPath(join(process.cwd(),o));let c=typeof e.force=="boolean"?e.force:false;if(n!==null)if(n){if(e.force!==true){const t=await confirm({message:`Directory ${green(o)} already exists. Do you want to overwrite it?`});if(isCancel(t)||!t)return cancel("Operation cancelled"),process.exit(0)}}else return cancel(`${o} is a file. Please choose a different project name.`),process.exit(1);const l=await getCategories(),i=r[0]||await select({message:"Select a category",options:l.map(t=>({name:t.name,value:t.name}))});if(isCancel(i))return cancel("Operation cancelled"),process.exit(0);r[0]=i;const f=await getTemplates(i),p=r[1]||await select({message:"Select a template",options:f.map(t=>({name:t.name,value:t.name}))});if(isCancel(p))return cancel("Operation cancelled"),process.exit(0);if(r[1]=p,!await confirmProject(o,r[0],r[1],c))return process.exit(0);await clone(o,`${r.join("/")}`,c),note(`cd ${o}
2
2
  ${getPackageManager()} install
3
3
  node --run dev`,"To get started, run:"),outro(`Thanks for using cnpx! If you have any issues or feedback, please open an issue at ${gray("https://github.com/xcfio/template/issues")}`);}
4
- export{J as main};
4
+ export{L as main};
@@ -1,4 +1,4 @@
1
- 'use strict';var prompts=require('@clack/prompts'),isValidDirectoryName=require('./isValidDirectoryName'),getPackageManager=require('./getPackageManager'),colorette=require('colorette'),clone=require('./clone');async function k({category:c,template:o,name:r,force:i}){prompts.note("Running in offline mode. Make sure you have cached templates available.","Warning");const t=["",""];if(i=!!i,typeof r=="string"){const e=isValidDirectoryName.isValidDirectoryName(r);if(typeof e=="string")return prompts.cancel(e),process.exit(1)}else {const e=await prompts.text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project",validate:n=>{if(!n)return;const l=isValidDirectoryName.isValidDirectoryName(n);if(typeof l=="string")return new Error(l)}});if(prompts.isCancel(e))return prompts.cancel("Operation cancelled"),process.exit(0);r=e;}if(typeof c=="string"&&(t[0]=c),typeof o=="string")if(o.includes("/")){const[e,n]=o.split("/");t[0]=e,t[1]=n;}else t[1]=o;if(!t[0]||!t[1])return prompts.cancel("Offline mode requires a specific template."),process.exit(1);if(i!==true){const e=await prompts.confirm({message:`Create project with name: ${colorette.bold(r)}, category: ${colorette.bold(t[0])}, template: ${colorette.bold(t[1])}?`});if(prompts.isCancel(e)||!e)return prompts.cancel("Operation cancelled"),process.exit(0)}await clone.clone(r,`${t.join("/")}`,i),prompts.note(`cd ${r}
1
+ 'use strict';var prompts=require('@clack/prompts'),getPackageManager=require('./getPackageManager'),getProjectName=require('./getProjectName'),confirmProject=require('./confirmProject'),parseTemplate=require('./parseTemplate'),colorette=require('colorette'),clone=require('./clone');async function $({category:n,template:a,name:i,force:s}){prompts.note("Running in offline mode. Make sure you have cached templates available.","Warning");const t=!!s,o=await getProjectName.getProjectName(i);if(!o)return process.exit(0);const e=parseTemplate.parseTemplate(n,a);if(!e[0]||!e[1])return prompts.cancel("Offline mode requires a specific template."),process.exit(1);if(!await confirmProject.confirmProject(o,e[0],e[1],t))return process.exit(0);await clone.clone(o,`${e.join("/")}`,t),prompts.note(`cd ${o}
2
2
  ${getPackageManager.getPackageManager()} install
3
3
  node --run dev`,"To get started, run:"),prompts.outro(`Thanks for using cnpx! If you have any issues or feedback, please open an issue at ${colorette.gray("https://github.com/xcfio/template/issues")}`);}
4
- exports.offlineRunner=k;
4
+ exports.offlineRunner=$;
@@ -1,4 +1,4 @@
1
- import'./chunk-A7RKGLUR.mjs';import {note,cancel,text,isCancel,confirm,outro}from'@clack/prompts';import {isValidDirectoryName}from'./isValidDirectoryName';import {getPackageManager}from'./getPackageManager';import {bold,gray}from'colorette';import {clone}from'./clone';async function k({category:c,template:o,name:r,force:i}){note("Running in offline mode. Make sure you have cached templates available.","Warning");const t=["",""];if(i=!!i,typeof r=="string"){const e=isValidDirectoryName(r);if(typeof e=="string")return cancel(e),process.exit(1)}else {const e=await text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project",validate:n=>{if(!n)return;const l=isValidDirectoryName(n);if(typeof l=="string")return new Error(l)}});if(isCancel(e))return cancel("Operation cancelled"),process.exit(0);r=e;}if(typeof c=="string"&&(t[0]=c),typeof o=="string")if(o.includes("/")){const[e,n]=o.split("/");t[0]=e,t[1]=n;}else t[1]=o;if(!t[0]||!t[1])return cancel("Offline mode requires a specific template."),process.exit(1);if(i!==true){const e=await confirm({message:`Create project with name: ${bold(r)}, category: ${bold(t[0])}, template: ${bold(t[1])}?`});if(isCancel(e)||!e)return cancel("Operation cancelled"),process.exit(0)}await clone(r,`${t.join("/")}`,i),note(`cd ${r}
1
+ import'./chunk-A7RKGLUR.mjs';import {note,cancel,outro}from'@clack/prompts';import {getPackageManager}from'./getPackageManager';import {getProjectName}from'./getProjectName';import {confirmProject}from'./confirmProject';import {parseTemplate}from'./parseTemplate';import {gray}from'colorette';import {clone}from'./clone';async function $({category:n,template:a,name:i,force:s}){note("Running in offline mode. Make sure you have cached templates available.","Warning");const t=!!s,o=await getProjectName(i);if(!o)return process.exit(0);const e=parseTemplate(n,a);if(!e[0]||!e[1])return cancel("Offline mode requires a specific template."),process.exit(1);if(!await confirmProject(o,e[0],e[1],t))return process.exit(0);await clone(o,`${e.join("/")}`,t),note(`cd ${o}
2
2
  ${getPackageManager()} install
3
3
  node --run dev`,"To get started, run:"),outro(`Thanks for using cnpx! If you have any issues or feedback, please open an issue at ${gray("https://github.com/xcfio/template/issues")}`);}
4
- export{k as offlineRunner};
4
+ export{$ as offlineRunner};
@@ -0,0 +1,3 @@
1
+ declare function parseTemplate(category?: string | boolean, template?: string | boolean): [string, string];
2
+
3
+ export { parseTemplate };
@@ -0,0 +1,3 @@
1
+ declare function parseTemplate(category?: string | boolean, template?: string | boolean): [string, string];
2
+
3
+ export { parseTemplate };
@@ -0,0 +1 @@
1
+ 'use strict';function o(i,s){const n=["",""];if(typeof i=="string"&&(n[0]=i),typeof s=="string")if(s.includes("/")){const[t,r]=s.split("/");n[0]=t,n[1]=r;}else n[1]=s;return n}exports.parseTemplate=o;
@@ -0,0 +1 @@
1
+ import'./chunk-A7RKGLUR.mjs';function o(i,s){const n=["",""];if(typeof i=="string"&&(n[0]=i),typeof s=="string")if(s.includes("/")){const[t,r]=s.split("/");n[0]=t,n[1]=r;}else n[1]=s;return n}export{o as parseTemplate};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cnpx/cnpx",
3
- "version": "0.0.5-dev.20260405084610",
3
+ "version": "0.0.5-dev.20260405125711",
4
4
  "description": "An interactive CLI tool for creating new projects from curated templates hosted on GitHub. Pick a category, pick a template, and get coding.",
5
5
  "author": "xcfio",
6
6
  "homepage": "https://github.com/xcfio/template/tree/main/cnpx/cnpx#readme",