@cnpx/cnpx 0.0.2-dev.20260403062651 → 0.0.2

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.
@@ -1,20 +1,59 @@
1
1
 
2
- > @cnpx/cnpx@0.0.2 build /home/runner/work/template/template/cnpx/core
2
+ > @cnpx/cnpx@0.0.2 build /home/runner/work/template/template/cnpx/cnpx
3
3
  > tsup
4
4
 
5
- CLI Building entry: src/index.ts
5
+ CLI Building entry: src/bin.ts, src/checkForUpdate.ts, src/clone.ts, src/fetch.ts, src/getCategories.ts, src/getPackageManager.ts, src/getTemplates.ts, src/index.ts, src/main.ts, src/type.ts
6
6
  CLI Using tsconfig: tsconfig.json
7
7
  CLI tsup v8.5.1
8
- CLI Using tsup config: /home/runner/work/template/template/cnpx/core/tsup.config.ts
8
+ CLI Using tsup config: /home/runner/work/template/template/cnpx/cnpx/tsup.config.ts
9
9
  CLI Target: esnext
10
10
  CLI Cleaning output folder
11
11
  CJS Build start
12
12
  ESM Build start
13
- ESM out/index.mjs 989.00 B
14
- ESM ⚡️ Build success in 15ms
15
- CJS out/index.js 2.13 KB
16
- CJS ⚡️ Build success in 16ms
13
+ Generated an empty chunk: "type".
14
+ Generated an empty chunk: "type".
15
+ ESM out/type.mjs 0 B
16
+ ESM out/bin.mjs 227.00 B
17
+ ESM out/clone.mjs 300.00 B
18
+ ESM out/fetch.mjs 128.00 B
19
+ ESM out/checkForUpdate.mjs 1.36 KB
20
+ ESM out/main.mjs 1.42 KB
21
+ ESM out/getPackageManager.mjs 312.00 B
22
+ ESM out/getTemplates.mjs 589.00 B
23
+ ESM out/getCategories.mjs 659.00 B
24
+ ESM out/index.mjs 268.00 B
25
+ ESM out/chunk-A7RKGLUR.mjs 77.00 B
26
+ ESM ⚡️ Build success in 190ms
27
+ CJS out/bin.js 267.00 B
28
+ CJS out/clone.js 417.00 B
29
+ CJS out/fetch.js 109.00 B
30
+ CJS out/checkForUpdate.js 1.44 KB
31
+ CJS out/getCategories.js 659.00 B
32
+ CJS out/getPackageManager.js 342.00 B
33
+ CJS out/index.js 1.98 KB
34
+ CJS out/getTemplates.js 584.00 B
35
+ CJS out/main.js 1.57 KB
36
+ CJS out/type.js 13.00 B
37
+ CJS ⚡️ Build success in 192ms
17
38
  DTS Build start
18
- DTS ⚡️ Build success in 792ms
19
- DTS out/index.d.ts 64.00 B
20
- DTS out/index.d.mts 64.00 B
39
+ DTS ⚡️ Build success in 1253ms
40
+ DTS out/bin.d.ts 20.00 B
41
+ DTS out/index.d.ts 454.00 B
42
+ DTS out/checkForUpdate.d.ts 78.00 B
43
+ DTS out/clone.d.ts 104.00 B
44
+ DTS out/fetch.d.ts 101.00 B
45
+ DTS out/getCategories.d.ts 210.00 B
46
+ DTS out/getPackageManager.d.ts 94.00 B
47
+ DTS out/getTemplates.d.ts 154.00 B
48
+ DTS out/main.d.ts 63.00 B
49
+ DTS out/type.d.ts 477.00 B
50
+ DTS out/bin.d.mts 20.00 B
51
+ DTS out/index.d.mts 462.00 B
52
+ DTS out/checkForUpdate.d.mts 78.00 B
53
+ DTS out/clone.d.mts 104.00 B
54
+ DTS out/fetch.d.mts 101.00 B
55
+ DTS out/getCategories.d.mts 211.00 B
56
+ DTS out/getPackageManager.d.mts 94.00 B
57
+ DTS out/getTemplates.d.mts 155.00 B
58
+ DTS out/main.d.mts 63.00 B
59
+ DTS out/type.d.mts 477.00 B
package/README.md CHANGED
@@ -1,3 +1,111 @@
1
- # cnpx
1
+ # @cnpx/cnpx
2
2
 
3
- This package is still in development...
3
+ [![Discord](https://img.shields.io/discord/1211530334458617866?style=flat&logo=discord&logoColor=ffffff&color=5865f2)](https://discord.gg/FaCCaFM74Q)
4
+ [![GitHub Action](https://github.com/xcfio/template/actions/workflows/test.yaml/badge.svg)](https://github.com/xcfio/template/actions)
5
+ [![NPM Version](https://img.shields.io/npm/v/@cnpx/cnpx)](https://www.npmjs.com/package/@cnpx/cnpx)
6
+ [![NPM Downloads](https://img.shields.io/npm/dy/@cnpx/cnpx)](https://www.npmjs.com/package/@cnpx/cnpx)
7
+ [![NPM Unpacked Size](https://img.shields.io/npm/unpacked-size/@cnpx/cnpx)](https://www.npmjs.com/package/@cnpx/cnpx)
8
+ [![NPM License](https://img.shields.io/npm/l/@cnpx/cnpx)](https://github.com/xcfio/template/blob/main/LICENSE)
9
+
10
+ `@cnpx/cnpx` is an interactive CLI that scaffolds projects from the
11
+ [`xcfio/template`](https://github.com/xcfio/template) repository.
12
+
13
+ It fetches available categories and templates from GitHub, clones your selected
14
+ template into a local directory, and prints the next commands to run.
15
+
16
+ ## Features
17
+
18
+ - Interactive prompts for project name, category, and template
19
+ - Live template discovery from `xcfio/template`
20
+ - Automatic package manager detection (`pnpm`, `yarn`, then `npm`)
21
+ - Update notification when a newer package version exists on npm
22
+
23
+ ## Requirements
24
+
25
+ - Node.js 22+
26
+ - Internet access (GitHub API + npm registry)
27
+
28
+ ## Usage
29
+
30
+ Run directly without installing globally:
31
+
32
+ ```bash
33
+ npx @cnpx/cnpx
34
+ # or
35
+ pnpm dlx @cnpx/cnpx
36
+ # or
37
+ yarn dlx @cnpx/cnpx
38
+ ```
39
+
40
+ Then follow the prompts:
41
+
42
+ 1. Enter project name
43
+ 2. Select a category (for example: `backend`, `frontend`)
44
+ 3. Select a template
45
+ 4. Confirm creation
46
+
47
+ After scaffold, the CLI prints:
48
+
49
+ ```bash
50
+ cd <project-name>
51
+ <detected-package-manager> install
52
+ node --run dev
53
+ ```
54
+
55
+ ## Global Install (Optional)
56
+
57
+ ```bash
58
+ npm i -g @cnpx/cnpx
59
+ cnpx
60
+ ```
61
+
62
+ ## Programmatic API
63
+
64
+ This package also exports utility functions:
65
+
66
+ - `main()`
67
+ - `checkForUpdate()`
68
+ - `clone(name, category, template)`
69
+ - `getCategories()`
70
+ - `getTemplates(category)`
71
+ - `getPackageManager()`
72
+ - `get(url)`
73
+
74
+ Type exports:
75
+
76
+ - `FilteredGithubResponse`
77
+ - `GithubAPIResponse`
78
+
79
+ ## Development
80
+
81
+ From `cnpx/cnpx`:
82
+
83
+ ```bash
84
+ node --run install
85
+ node --run dev
86
+ node --run build
87
+ node --run test
88
+ ```
89
+
90
+ Available scripts:
91
+
92
+ - `node --run fmt` - format source with Prettier
93
+ - `node --run lint` - check formatting
94
+ - `node --run dev` - build in watch mode with tsup
95
+ - `node --run build` - production build
96
+ - `node --run test` - type-check with `tsc --noEmit`
97
+
98
+ ## Notes and Limitations
99
+
100
+ - The CLI is currently fully interactive and does not expose command-line flags.
101
+ - GitHub API rate limits can block category/template loading.
102
+ - Template cloning currently uses `force: true`; existing files in the target
103
+ directory may be overwritten.
104
+
105
+ ## License
106
+
107
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
108
+
109
+ ---
110
+
111
+ Made with ❤️ by [xcfio](https://github.com/xcfio)
package/out/bin.d.mts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/out/bin.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/out/bin.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';var main=require('./main');var o=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var s=o(()=>{process.removeAllListeners("warning"),main.main().catch(r=>{console.error(r),process.exit(1);});});var bin = s();module.exports=bin;
package/out/bin.mjs ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import {a}from'./chunk-A7RKGLUR.mjs';import {main}from'./main';var n=a(()=>{process.removeAllListeners("warning"),main().catch(e=>{console.error(e),process.exit(1);});});var bin = n();export{bin as default};
@@ -0,0 +1,3 @@
1
+ declare function checkForUpdate(): Promise<void>;
2
+
3
+ export { checkForUpdate };
@@ -0,0 +1,3 @@
1
+ declare function checkForUpdate(): Promise<void>;
2
+
3
+ export { checkForUpdate };
@@ -0,0 +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 t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(n);return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),pre:t[4]?t[4].split("."):[]}:null}function h(n,t){const r=/^\d+$/.test(n),e=/^\d+$/.test(t);if(r&&e){const o=Number(n),i=Number(t);return o<i?-1:o>i?1:0}return r&&!e?-1:!r&&e?1:n<t?-1:n>t?1:0}function b(n,t){const r=f(n),e=f(t);if(!r||!e)return n.localeCompare(t,void 0,{numeric:true,sensitivity:"base"});if(r.major!==e.major)return r.major<e.major?-1:1;if(r.minor!==e.minor)return r.minor<e.minor?-1:1;if(r.patch!==e.patch)return r.patch<e.patch?-1:1;if(r.pre.length===0&&e.pre.length===0)return 0;if(r.pre.length===0)return 1;if(e.pre.length===0)return -1;const o=Math.max(r.pre.length,e.pre.length);for(let i=0;i<o;i++){const u=r.pre[i],a=e.pre[i];if(u===void 0)return -1;if(a===void 0)return 1;const m=h(u,a);if(m!==0)return m}return 0}async function P(){try{const{data:n}=await fetch.get(`https://registry.npmjs.org/${package_json.name}/latest`);if(b(n.version,package_json.version)<=0)return;prompts.note(`Current: ${colorette.bold(package_json.version)} \u2192 Latest: ${colorette.bold(n.version)}
2
+ Run: ${getPackageManager.getPackageManager()} i -g ${package_json.name}`,"Update available");}catch{}}exports.checkForUpdate=P;
@@ -0,0 +1,2 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {getPackageManager}from'./getPackageManager';import {name,version}from'../package.json';import {note}from'@clack/prompts';import {bold}from'colorette';import {get}from'./fetch';function f(n){const t=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(n);return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),pre:t[4]?t[4].split("."):[]}:null}function h(n,t){const r=/^\d+$/.test(n),e=/^\d+$/.test(t);if(r&&e){const o=Number(n),i=Number(t);return o<i?-1:o>i?1:0}return r&&!e?-1:!r&&e?1:n<t?-1:n>t?1:0}function b(n,t){const r=f(n),e=f(t);if(!r||!e)return n.localeCompare(t,void 0,{numeric:true,sensitivity:"base"});if(r.major!==e.major)return r.major<e.major?-1:1;if(r.minor!==e.minor)return r.minor<e.minor?-1:1;if(r.patch!==e.patch)return r.patch<e.patch?-1:1;if(r.pre.length===0&&e.pre.length===0)return 0;if(r.pre.length===0)return 1;if(e.pre.length===0)return -1;const o=Math.max(r.pre.length,e.pre.length);for(let i=0;i<o;i++){const u=r.pre[i],a=e.pre[i];if(u===void 0)return -1;if(a===void 0)return 1;const m=h(u,a);if(m!==0)return m}return 0}async function P(){try{const{data:n}=await get(`https://registry.npmjs.org/${name}/latest`);if(b(n.version,version)<=0)return;note(`Current: ${bold(version)} \u2192 Latest: ${bold(n.version)}
2
+ Run: ${getPackageManager()} i -g ${name}`,"Update available");}catch{}}export{P as checkForUpdate};
@@ -0,0 +1 @@
1
+ var c=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports);export{c as a};
@@ -0,0 +1,3 @@
1
+ declare function clone(name: string, type: string, template: string): Promise<void>;
2
+
3
+ export { clone };
package/out/clone.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare function clone(name: string, type: string, template: string): Promise<void>;
2
+
3
+ export { clone };
package/out/clone.js ADDED
@@ -0,0 +1 @@
1
+ 'use strict';var prompts=require('@clack/prompts'),i=require('degit');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var i__default=/*#__PURE__*/_interopDefault(i);async function l(e,r,o){const t=prompts.spinner();t.start("Cloning repository"),await i__default.default(`xcfio/template/${r}/${o}`,{cache:true,force:true,verbose:true}).clone(e),t.stop("Template cloned successfully");}exports.clone=l;
package/out/clone.mjs ADDED
@@ -0,0 +1 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {spinner}from'@clack/prompts';import i from'degit';async function l(e,r,o){const t=spinner();t.start("Cloning repository"),await i(`xcfio/template/${r}/${o}`,{cache:true,force:true,verbose:true}).clone(e),t.stop("Template cloned successfully");}export{l as clone};
@@ -0,0 +1,6 @@
1
+ declare function get<T>(url: string): Promise<{
2
+ req: Response;
3
+ data: T;
4
+ }>;
5
+
6
+ export { get };
package/out/fetch.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ declare function get<T>(url: string): Promise<{
2
+ req: Response;
3
+ data: T;
4
+ }>;
5
+
6
+ export { get };
package/out/fetch.js ADDED
@@ -0,0 +1 @@
1
+ 'use strict';async function n(a){const t=await fetch(a),e=await t.json();return {req:t,data:e}}exports.get=n;
package/out/fetch.mjs ADDED
@@ -0,0 +1 @@
1
+ import'./chunk-A7RKGLUR.mjs';async function n(a){const t=await fetch(a),e=await t.json();return {req:t,data:e}}export{n as get};
@@ -0,0 +1,6 @@
1
+ import { FilteredGithubResponse } from './type.mjs';
2
+
3
+ declare const IgnoredDirectory: Set<string>;
4
+ declare function getCategories(): Promise<FilteredGithubResponse>;
5
+
6
+ export { IgnoredDirectory, getCategories };
@@ -0,0 +1,6 @@
1
+ import { FilteredGithubResponse } from './type.js';
2
+
3
+ declare const IgnoredDirectory: Set<string>;
4
+ declare function getCategories(): Promise<FilteredGithubResponse>;
5
+
6
+ export { IgnoredDirectory, getCategories };
@@ -0,0 +1,2 @@
1
+ 'use strict';var prompts=require('@clack/prompts'),fetch=require('./fetch');const n=new Set([".github","cnpx"]);async function d(){const t=prompts.spinner();t.start("Fetching Categories");const{data:r}=await fetch.get("https://api.github.com/repos/xcfio/template/contents?ref=main");"message"in r&&(r.message.startsWith("API rate limit exceeded")?t.error("API rate limit exceeded. Please try again later."):(t.error("An unknown error occurred"),console.log(r.message),console.trace()),process.exit(1));const o=r.filter(e=>e.type==="dir"&&!n.has(e.name)).map(e=>({name:e.name,url:e.url}));return t.clear(),o}
2
+ exports.IgnoredDirectory=n;exports.getCategories=d;
@@ -0,0 +1,2 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {spinner}from'@clack/prompts';import {get}from'./fetch';const n=new Set([".github","cnpx"]);async function d(){const t=spinner();t.start("Fetching Categories");const{data:r}=await get("https://api.github.com/repos/xcfio/template/contents?ref=main");"message"in r&&(r.message.startsWith("API rate limit exceeded")?t.error("API rate limit exceeded. Please try again later."):(t.error("An unknown error occurred"),console.log(r.message),console.trace()),process.exit(1));const o=r.filter(e=>e.type==="dir"&&!n.has(e.name)).map(e=>({name:e.name,url:e.url}));return t.clear(),o}
2
+ export{n as IgnoredDirectory,d as getCategories};
@@ -0,0 +1,3 @@
1
+ declare function getPackageManager(): "npm" | "yarn" | "pnpm";
2
+
3
+ export { getPackageManager };
@@ -0,0 +1,3 @@
1
+ declare function getPackageManager(): "npm" | "yarn" | "pnpm";
2
+
3
+ export { getPackageManager };
@@ -0,0 +1 @@
1
+ 'use strict';var node_child_process=require('node:child_process');let n;function p(){if(n)return n;try{return node_child_process.execSync("pnpm --version",{stdio:"ignore"}),n="pnpm","pnpm"}catch{}try{return node_child_process.execSync("yarn --version",{stdio:"ignore"}),n="yarn","yarn"}catch{}return n="npm","npm"}exports.getPackageManager=p;
@@ -0,0 +1 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {execSync}from'node:child_process';let n;function p(){if(n)return n;try{return execSync("pnpm --version",{stdio:"ignore"}),n="pnpm","pnpm"}catch{}try{return execSync("yarn --version",{stdio:"ignore"}),n="yarn","yarn"}catch{}return n="npm","npm"}export{p as getPackageManager};
@@ -0,0 +1,5 @@
1
+ import { FilteredGithubResponse } from './type.mjs';
2
+
3
+ declare function getTemplates(x: string): Promise<FilteredGithubResponse>;
4
+
5
+ export { getTemplates };
@@ -0,0 +1,5 @@
1
+ import { FilteredGithubResponse } from './type.js';
2
+
3
+ declare function getTemplates(x: string): Promise<FilteredGithubResponse>;
4
+
5
+ export { getTemplates };
@@ -0,0 +1,2 @@
1
+ 'use strict';var prompts=require('@clack/prompts'),fetch=require('./fetch');async function f(s){const e=prompts.spinner();e.start("Fetching Templates");const{data:t}=await fetch.get(`https://api.github.com/repos/xcfio/template/contents/${s}?ref=main`);"message"in t&&(t.message.startsWith("API rate limit exceeded")?e.error("API rate limit exceeded. Please try again later."):(e.error("An unknown error occurred"),console.log(t.message),console.trace()),process.exit(1));const i=t.filter(r=>r.type==="dir").map(r=>({name:r.name,url:r.url}));return e.clear(),i}
2
+ exports.getTemplates=f;
@@ -0,0 +1,2 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {spinner}from'@clack/prompts';import {get}from'./fetch';async function f(s){const e=spinner();e.start("Fetching Templates");const{data:t}=await get(`https://api.github.com/repos/xcfio/template/contents/${s}?ref=main`);"message"in t&&(t.message.startsWith("API rate limit exceeded")?e.error("API rate limit exceeded. Please try again later."):(e.error("An unknown error occurred"),console.log(t.message),console.trace()),process.exit(1));const i=t.filter(r=>r.type==="dir").map(r=>({name:r.name,url:r.url}));return e.clear(),i}
2
+ export{f as getTemplates};
package/out/index.d.mts CHANGED
@@ -1,4 +1,12 @@
1
- #!/usr/bin/env node
1
+ export { checkForUpdate } from './checkForUpdate.mjs';
2
+ export { clone } from './clone.mjs';
3
+ export { get } from './fetch.mjs';
4
+ export { IgnoredDirectory, getCategories } from './getCategories.mjs';
5
+ export { getPackageManager } from './getPackageManager.mjs';
6
+ export { getTemplates } from './getTemplates.mjs';
7
+ export { main } from './main.mjs';
8
+ export { FilteredGithubResponse, GithubAPIResponse } from './type.mjs';
9
+
2
10
  var version = "0.0.2";
3
11
 
4
12
  export { version };
package/out/index.d.ts CHANGED
@@ -1,4 +1,12 @@
1
- #!/usr/bin/env node
1
+ export { checkForUpdate } from './checkForUpdate.js';
2
+ export { clone } from './clone.js';
3
+ export { get } from './fetch.js';
4
+ export { IgnoredDirectory, getCategories } from './getCategories.js';
5
+ export { getPackageManager } from './getPackageManager.js';
6
+ export { getTemplates } from './getTemplates.js';
7
+ export { main } from './main.js';
8
+ export { FilteredGithubResponse, GithubAPIResponse } from './type.js';
9
+
2
10
  var version = "0.0.2";
3
11
 
4
12
  export { version };
package/out/index.js CHANGED
@@ -1,65 +1 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
-
21
- // src/index.ts
22
- var index_exports = {};
23
- __export(index_exports, {
24
- version: () => version
25
- });
26
- module.exports = __toCommonJS(index_exports);
27
-
28
- // package.json
29
- var version = "0.0.2";
30
-
31
- // src/index.ts
32
- var import_prompts = require("@clack/prompts");
33
- var import_colorette = require("colorette");
34
- async function main() {
35
- (0, import_prompts.intro)((0, import_colorette.blue)("Create a new project"));
36
- const name = await (0, import_prompts.text)({ message: "Project Name", placeholder: "Cool" });
37
- if ((0, import_prompts.isCancel)(name)) {
38
- (0, import_prompts.cancel)("Operation cancelled");
39
- return process.exit(0);
40
- }
41
- const projectType = await (0, import_prompts.select)({
42
- message: "Pick a project type.",
43
- options: [
44
- { value: "ts", label: "TypeScript" },
45
- { value: "js", label: "JavaScript" },
46
- { value: "coffee", label: "CoffeeScript", hint: "oh no" }
47
- ]
48
- });
49
- if ((0, import_prompts.isCancel)(projectType)) {
50
- (0, import_prompts.cancel)("Operation cancelled");
51
- return process.exit(0);
52
- }
53
- const s = (0, import_prompts.spinner)();
54
- s.start("Installing via npm");
55
- s.stop("Installed via npm");
56
- (0, import_prompts.outro)("You're all set!");
57
- }
58
- main().catch((err) => {
59
- console.error(err);
60
- process.exit(1);
61
- });
62
- // Annotate the CommonJS export names for ESM import in node:
63
- 0 && (module.exports = {
64
- version
65
- });
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'),main=require('./main'),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(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(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,39 +1 @@
1
- #!/usr/bin/env node
2
-
3
- // package.json
4
- var version = "0.0.2";
5
-
6
- // src/index.ts
7
- import { intro, outro, select, spinner, isCancel, cancel, text } from "@clack/prompts";
8
- import { blue } from "colorette";
9
- async function main() {
10
- intro(blue("Create a new project"));
11
- const name = await text({ message: "Project Name", placeholder: "Cool" });
12
- if (isCancel(name)) {
13
- cancel("Operation cancelled");
14
- return process.exit(0);
15
- }
16
- const projectType = await select({
17
- message: "Pick a project type.",
18
- options: [
19
- { value: "ts", label: "TypeScript" },
20
- { value: "js", label: "JavaScript" },
21
- { value: "coffee", label: "CoffeeScript", hint: "oh no" }
22
- ]
23
- });
24
- if (isCancel(projectType)) {
25
- cancel("Operation cancelled");
26
- return process.exit(0);
27
- }
28
- const s = spinner();
29
- s.start("Installing via npm");
30
- s.stop("Installed via npm");
31
- outro("You're all set!");
32
- }
33
- main().catch((err) => {
34
- console.error(err);
35
- process.exit(1);
36
- });
37
- export {
38
- version
39
- };
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'./main';export*from'./type';
package/out/main.d.mts ADDED
@@ -0,0 +1,3 @@
1
+ declare function main(): Promise<undefined>;
2
+
3
+ export { main };
package/out/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare function main(): Promise<undefined>;
2
+
3
+ export { main };
package/out/main.js ADDED
@@ -0,0 +1,4 @@
1
+ 'use strict';var prompts=require('@clack/prompts'),getPackageManager=require('./getPackageManager'),checkForUpdate=require('./checkForUpdate'),getCategories=require('./getCategories'),colorette=require('colorette'),getTemplates=require('./getTemplates'),clone=require('./clone');async function H(){prompts.intro(colorette.blue("Create a new project"));const i=prompts.spinner();i.start("Checking for updates"),await checkForUpdate.checkForUpdate(),i.clear();const t=await prompts.text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project"});if(prompts.isCancel(t))return prompts.cancel("Operation cancelled"),process.exit(0);const s=await getCategories.getCategories(),a=await prompts.select({message:"Select a category",options:s.map(e=>({name:e.name,value:e.name}))});if(prompts.isCancel(a))return prompts.cancel("Operation cancelled"),process.exit(0);const l=await getTemplates.getTemplates(a),n=await prompts.select({message:"Select a template",options:l.map(e=>({name:e.name,value:e.name}))});if(prompts.isCancel(n))return prompts.cancel("Operation cancelled"),process.exit(0);const m=await prompts.confirm({message:`Create project with name: ${colorette.bold(t)}, category: ${colorette.bold(a)}, template: ${colorette.bold(n)}?`});if(prompts.isCancel(m)||!m)return prompts.cancel("Operation cancelled"),process.exit(0);await clone.clone(t,a,n),prompts.note(`cd ${t}
2
+ ${getPackageManager.getPackageManager()} install
3
+ node --run dev`,"To get started, run:"),prompts.outro(`\u2B50 Give a ${colorette.yellow("star")} on GitHub: https://github.com/xcfio/template`);}
4
+ exports.main=H;
package/out/main.mjs ADDED
@@ -0,0 +1,4 @@
1
+ import'./chunk-A7RKGLUR.mjs';import {intro,spinner,text,isCancel,cancel,select,confirm,note,outro}from'@clack/prompts';import {getPackageManager}from'./getPackageManager';import {checkForUpdate}from'./checkForUpdate';import {getCategories}from'./getCategories';import {blue,bold,yellow}from'colorette';import {getTemplates}from'./getTemplates';import {clone}from'./clone';async function H(){intro(blue("Create a new project"));const i=spinner();i.start("Checking for updates"),await checkForUpdate(),i.clear();const t=await text({message:"Project Name",placeholder:"my-project",defaultValue:"my-project"});if(isCancel(t))return cancel("Operation cancelled"),process.exit(0);const s=await getCategories(),a=await select({message:"Select a category",options:s.map(e=>({name:e.name,value:e.name}))});if(isCancel(a))return cancel("Operation cancelled"),process.exit(0);const l=await getTemplates(a),n=await select({message:"Select a template",options:l.map(e=>({name:e.name,value:e.name}))});if(isCancel(n))return cancel("Operation cancelled"),process.exit(0);const m=await confirm({message:`Create project with name: ${bold(t)}, category: ${bold(a)}, template: ${bold(n)}?`});if(isCancel(m)||!m)return cancel("Operation cancelled"),process.exit(0);await clone(t,a,n),note(`cd ${t}
2
+ ${getPackageManager()} install
3
+ node --run dev`,"To get started, run:"),outro(`\u2B50 Give a ${yellow("star")} on GitHub: https://github.com/xcfio/template`);}
4
+ export{H as main};
package/out/type.d.mts ADDED
@@ -0,0 +1,24 @@
1
+ type FilteredGithubResponse = Array<{
2
+ name: string;
3
+ url: string;
4
+ }>;
5
+ type GithubAPIResponse = {
6
+ message: string;
7
+ } | Array<{
8
+ name: string;
9
+ path: string;
10
+ sha: string;
11
+ size: number;
12
+ url: string;
13
+ html_url: string;
14
+ git_url: string;
15
+ download_url: null | string;
16
+ type: "dir" | "file";
17
+ _links: {
18
+ self: string;
19
+ git: string;
20
+ html: string;
21
+ };
22
+ }>;
23
+
24
+ export type { FilteredGithubResponse, GithubAPIResponse };
package/out/type.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ type FilteredGithubResponse = Array<{
2
+ name: string;
3
+ url: string;
4
+ }>;
5
+ type GithubAPIResponse = {
6
+ message: string;
7
+ } | Array<{
8
+ name: string;
9
+ path: string;
10
+ sha: string;
11
+ size: number;
12
+ url: string;
13
+ html_url: string;
14
+ git_url: string;
15
+ download_url: null | string;
16
+ type: "dir" | "file";
17
+ _links: {
18
+ self: string;
19
+ git: string;
20
+ html: string;
21
+ };
22
+ }>;
23
+
24
+ export type { FilteredGithubResponse, GithubAPIResponse };
package/out/type.js ADDED
@@ -0,0 +1 @@
1
+ 'use strict';
package/out/type.mjs ADDED
File without changes
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@cnpx/cnpx",
3
- "version": "0.0.2-dev.20260403062651",
3
+ "version": "0.0.2",
4
4
  "description": "",
5
5
  "author": "xcfio",
6
- "homepage": "https://github.com/xcfio/template/tree/main/cnpx/core#readme",
6
+ "homepage": "https://github.com/xcfio/template/tree/main/cnpx/cnpx#readme",
7
7
  "type": "commonjs",
8
8
  "license": "MIT",
9
9
  "main": "./out/index.js",
10
10
  "module": "./out/index.mjs",
11
11
  "bin": {
12
- "cnpx": "./out/index.js"
12
+ "cnpx": "./out/bin.js"
13
13
  },
14
14
  "exports": {
15
15
  ".": {
@@ -45,18 +45,13 @@
45
45
  "devDependencies": {
46
46
  "@types/degit": "^2.8.6",
47
47
  "@types/node": "^25.0.0",
48
- "@vitest/ui": "4.1.2",
49
- "tsup": "^8.5.1",
50
- "vitest": "^4.0.5"
48
+ "tsup": "^8.5.1"
51
49
  },
52
50
  "scripts": {
53
- "fmt": "prettier --config=.prettierrc --write src/",
54
- "lint": "prettier --config=.prettierrc --check src/",
51
+ "fmt": "prettier --config=.prettierrc --write src",
52
+ "lint": "prettier --config=.prettierrc --check src",
55
53
  "build": "tsup",
56
54
  "dev": "tsup --watch",
57
- "test": "(tsc --noEmit) && (vitest run)",
58
- "test:run": "vitest run",
59
- "test:watch": "vitest --watch",
60
- "test:ui": "vitest --ui"
55
+ "test": "tsc --noEmit"
61
56
  }
62
57
  }