@cnpx/cnpx 0.0.5-dev.20260405075059 → 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
@@ -65,7 +65,7 @@ cnpx
65
65
  Or skip straight to a known template with flags:
66
66
 
67
67
  ```bash
68
- cnpx --name my-app --template nextjs/starter
68
+ cnpx --name my-app --template backend/fastify
69
69
  ```
70
70
 
71
71
  ---
@@ -92,13 +92,13 @@ cnpx
92
92
  cnpx --name my-project
93
93
 
94
94
  # Slash syntax — sets both category and template
95
- cnpx -t nextjs/starter
95
+ cnpx -t backend/fastify
96
96
 
97
97
  # Category and template as separate flags
98
- cnpx --category nextjs --template starter
98
+ cnpx --category backend --template fastify
99
99
 
100
100
  # All flags — no prompts at all
101
- cnpx -n my-app -t nextjs/starter -f
101
+ cnpx -n my-app -t backend/fastify -f
102
102
 
103
103
  # Print help
104
104
  cnpx --help
@@ -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'),getTemplates=require('./getTemplates'),node_util=require('node:util'),clone=require('./clone'),node_path=require('node:path');async function B(){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"},help:{type:"boolean",short:"h"}}});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 l=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)}l=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),m=r[1]||await prompts.select({message:"Select a template",options:w.map(e=>({name:e.name,value:e.name}))});if(prompts.isCancel(m))return prompts.cancel("Operation cancelled"),process.exit(0);if(r[1]=m,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("/")}`,l),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
- node --run dev`,"To get started, run:"),prompts.outro(`Thanks for using cnpx! \u2B50 Give a ${colorette.yellow("star")} on GitHub: https://github.com/xcfio/template`);}
4
- exports.main=B;
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=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,yellow}from'colorette';import {checkForUpdate}from'./checkForUpdate';import {isInvalidPath}from'./isInvalidPath';import {getCategories}from'./getCategories';import {getTemplates}from'./getTemplates';import {parseArgs}from'node:util';import {clone}from'./clone';import {join}from'node:path';async function B(){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"},help:{type:"boolean",short:"h"}}});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 l=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)}l=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),m=r[1]||await select({message:"Select a template",options:w.map(e=>({name:e.name,value:e.name}))});if(isCancel(m))return cancel("Operation cancelled"),process.exit(0);if(r[1]=m,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("/")}`,l),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
- node --run dev`,"To get started, run:"),outro(`Thanks for using cnpx! \u2B50 Give a ${yellow("star")} on GitHub: https://github.com/xcfio/template`);}
4
- export{B as main};
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{L as main};
@@ -0,0 +1,8 @@
1
+ declare function offlineRunner({ category, template, name, force }: {
2
+ category?: string | boolean;
3
+ template?: string | boolean;
4
+ name?: string | boolean;
5
+ force?: string | boolean;
6
+ }): Promise<undefined>;
7
+
8
+ export { offlineRunner };
@@ -0,0 +1,8 @@
1
+ declare function offlineRunner({ category, template, name, force }: {
2
+ category?: string | boolean;
3
+ template?: string | boolean;
4
+ name?: string | boolean;
5
+ force?: string | boolean;
6
+ }): Promise<undefined>;
7
+
8
+ export { offlineRunner };
@@ -0,0 +1,4 @@
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
+ ${getPackageManager.getPackageManager()} install
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=$;
@@ -0,0 +1,4 @@
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
+ ${getPackageManager()} install
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{$ 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/out/showHelp.js CHANGED
@@ -1,10 +1,11 @@
1
- 'use strict';var colorette=require('colorette');function p(){console.log(`
2
- ${colorette.blue(colorette.bold("cnpx"))} - Create a new project from a template
1
+ 'use strict';var colorette=require('colorette');function a(){console.log(`
2
+ ${colorette.blue(colorette.bold("cnpx"))} - Create a new project from a template
3
3
 
4
- ${colorette.bold("Options:")}
5
- ${colorette.green("-n, --name")} ${colorette.dim("Project name")}
6
- ${colorette.green("-c, --category")} ${colorette.dim("Template category")}
7
- ${colorette.green("-t, --template")} ${colorette.dim("Template name")}
8
- ${colorette.green("-f, --force")} ${colorette.dim("Overwrite existing directory")}
9
- ${colorette.green("-h, --help")} ${colorette.dim("Show help")}
10
- `),process.exit(0);}exports.showHelp=p;
4
+ ${colorette.bold("Options:")}
5
+ ${colorette.green("-n, --name")} ${colorette.dim("Project name")}
6
+ ${colorette.green("-c, --category")} ${colorette.dim("Template category")}
7
+ ${colorette.green("-t, --template")} ${colorette.dim("Template name")}
8
+ ${colorette.green("-f, --force")} ${colorette.dim("Overwrite existing directory")}
9
+ ${colorette.green("-o, --offline")} ${colorette.dim("Run in offline mode (using cached templates)")}
10
+ ${colorette.green("-h, --help")} ${colorette.dim("Show help")}
11
+ `),process.exit(0);}exports.showHelp=a;
package/out/showHelp.mjs CHANGED
@@ -1,10 +1,11 @@
1
- import'./chunk-A7RKGLUR.mjs';import {blue,bold,green,dim}from'colorette';function p(){console.log(`
2
- ${blue(bold("cnpx"))} - Create a new project from a template
1
+ import'./chunk-A7RKGLUR.mjs';import {blue,bold,green,dim}from'colorette';function a(){console.log(`
2
+ ${blue(bold("cnpx"))} - Create a new project from a template
3
3
 
4
- ${bold("Options:")}
5
- ${green("-n, --name")} ${dim("Project name")}
6
- ${green("-c, --category")} ${dim("Template category")}
7
- ${green("-t, --template")} ${dim("Template name")}
8
- ${green("-f, --force")} ${dim("Overwrite existing directory")}
9
- ${green("-h, --help")} ${dim("Show help")}
10
- `),process.exit(0);}export{p as showHelp};
4
+ ${bold("Options:")}
5
+ ${green("-n, --name")} ${dim("Project name")}
6
+ ${green("-c, --category")} ${dim("Template category")}
7
+ ${green("-t, --template")} ${dim("Template name")}
8
+ ${green("-f, --force")} ${dim("Overwrite existing directory")}
9
+ ${green("-o, --offline")} ${dim("Run in offline mode (using cached templates)")}
10
+ ${green("-h, --help")} ${dim("Show help")}
11
+ `),process.exit(0);}export{a as showHelp};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cnpx/cnpx",
3
- "version": "0.0.5-dev.20260405075059",
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",