@66rpg/cgmaker-create 0.1.15

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 ADDED
@@ -0,0 +1,14 @@
1
+ # @66rpg/cgmaker-create
2
+
3
+ 从 cgmaker 托管模板创建带完整源码的游戏工程。
4
+
5
+ ```bash
6
+ npx @66rpg/cgmaker-create@latest <template_id> [目录] [data_id]
7
+ npx @66rpg/cgmaker-create@latest <template_id> [目录] --data-id <data_id>
8
+ npx @66rpg/cgmaker-create@latest <template_id> [目录] --skill-platform cursor
9
+ npx @66rpg/cgmaker-create@latest <template_id> [目录] --skill-all
10
+ ```
11
+
12
+ 只要字符串 `template_id`(可 `@version_name`),不要 `owner/slug`。
13
+
14
+ 未传 `data_id` 且在交互终端里时,会调用 `GET /v1/posts/templates/data/list` 列出该模板版本的兼容资源包,选序号或 `data_id`(`0` 表示不下载资源)。已传第三参数 / `--data-id` 则跳过列表。无 TTY(脚本)时沿用该版本默认绑定包。未指定 `--skill-platform` / `--skill-all` 时:交互会询问扇出到哪个 Agent(回车无效,跳过须输入 `s`),脚本默认不扇出。已有工程补扇:`npx cgmaker skill --platform cursor` 或 `--all`;交互只打 `npx cgmaker skill` 会问平台。模板作者用 `cgmaker publish-template-data --data-ver <VER>`(可用 `--assets` 指定绝对目录)或 `npm run publish-data -- --data-ver <VER>` 发布资源包。暂无云端种子时用 `--from-dir`。
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "../dist/index.js";
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ import c from"node:fs";import o from"node:path";import b from"node:readline";import{fileURLToPath as M}from"node:url";import{spawnSync as G}from"node:child_process";import{spawnSync as T}from"node:child_process";var v={_comment:"cgmaker-create \u7528\u6237\u53EF\u89C1\u6587\u6848\u3002\u5360\u4F4D\u7B26 {name}\u3002",help:{body:{code:"",text:`cgmaker-create \u2014 \u4ECE\u6258\u7BA1\u6A21\u677F\u521B\u5EFA\u5E26\u5B8C\u6574\u6E90\u7801\u7684\u6E38\u620F\u5DE5\u7A0B
2
+
3
+ \u7528\u6CD5:
4
+ npx @66rpg/cgmaker-create@latest <template_id> [\u76EE\u5F55] [data_id]
5
+ npx @66rpg/cgmaker-create@latest <template_id> [\u76EE\u5F55] --data-id <data_id>
6
+ npx @66rpg/cgmaker-create@latest <template_id> [\u76EE\u5F55] --from-dir <\u672C\u5730\u6A21\u677F\u76EE\u5F55>
7
+ npx @66rpg/cgmaker-create@latest <template_id> [\u76EE\u5F55] --skill-platform cursor
8
+ npx @66rpg/cgmaker-create@latest <template_id> [\u76EE\u5F55] --skill-all
9
+
10
+ template_id \u662F\u5E73\u53F0\u5B57\u7B26\u4E32 id\uFF08\u5B57\u6BCD\u6570\u5B57\uFF09\uFF0C\u53EF\u5E26 @version_name\u3002\u4E0D\u8981\u7528 owner/slug\u3002
11
+ data_id \u4E3A\u8BE5\u6A21\u677F\u4E0B\u7684\u8D44\u6E90\u5305 id\uFF1BTTY \u4E0B\u672A\u4F20\u65F6\u4F1A\u5217\u51FA\u53EF\u4E0B\u8F7D\u7248\u672C\u4F9B\u9009\u62E9\u3002\u4E5F\u53EF\u7528 --data-id\u3002
12
+ \u672A\u6307\u5B9A skill \u65F6\uFF1A\u4EA4\u4E92\u7EC8\u7AEF\u4F1A\u8BE2\u95EE\u6247\u51FA\u5230\u54EA\u4E2A Agent\uFF08\u56DE\u8F66\u65E0\u6548\uFF0C\u8DF3\u8FC7\u987B\u8F93\u5165 s\uFF1B\u4E4B\u540E\u53EF\u5728\u5DE5\u7A0B\u76EE\u5F55\u6267\u884C cgmaker skill\uFF09\uFF1B\u811A\u672C\u73AF\u5883\u9ED8\u8BA4\u4E0D\u6247\u51FA\u3002
13
+ --skill-platform \u53EA\u6247\u51FA\u5230\u8BE5\u5E73\u53F0\uFF08\u5982 cursor\uFF09\uFF1B--skill-all \u6247\u51FA\u5230\u5168\u90E8\u5E73\u53F0\u3002\u5DF2\u6709\u5DE5\u7A0B\u8865\u6247\u7528 npx cgmaker skill --platform cursor \u6216 --all\u3002
14
+ \u6682\u65E0\u4E91\u7AEF\u6A21\u677F\u79CD\u5B50\u65F6\uFF0C\u7528 --from-dir \u4ECE\u672C\u5730\u6A21\u677F\u76EE\u5F55\u843D\u5730\u3002
15
+ `,comment:"\u6574\u6BB5 --help"}},err:{from_dir_need_path:{code:"",text:"--from-dir \u9700\u8981\u6A21\u677F\u76EE\u5F55\u8DEF\u5F84",comment:"\u53C2\u6570\u9519\u8BEF"},data_id_need:{code:"",text:"--data-id \u9700\u8981\u8D44\u6E90\u5305 id",comment:"\u53C2\u6570\u9519\u8BEF"},skill_platform_need:{code:"",text:"--skill-platform \u9700\u8981\u5E73\u53F0\u540D\uFF08\u5982 cursor\uFF09",comment:"\u53C2\u6570\u9519\u8BEF"},skill_conflict:{code:"",text:"--skill-platform \u4E0E --skill-all \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528",comment:"\u53C2\u6570\u9519\u8BEF"},cleared:{code:"",text:"\u5DF2\u6E05\u7A7A {dir}",comment:"\u5931\u8D25\u56DE\u6EDA"},clear_failed:{code:"",text:"\u65E0\u6CD5\u6E05\u7A7A {dir}: {e}",comment:"\u5931\u8D25\u56DE\u6EDA"},owner_slug:{code:"",text:"\u4E0D\u8981\u7528 owner/slug\u3002\u8BF7\u4F7F\u7528\u5E73\u53F0 template_id\uFF08\u5B57\u6BCD\u6570\u5B57\uFF09\uFF0C\u4F8B\u5982 k8n2x4m7q1w5",comment:"\u53C2\u6570\u9519\u8BEF"},data_id_from_dir:{code:"",text:"--data-id \u4E0D\u80FD\u4E0E --from-dir \u540C\u65F6\u4F7F\u7528",comment:"\u53C2\u6570\u9519\u8BEF"},invalid_data_id:{code:"",text:"\u65E0\u6548\u7684 data_id: {id}",comment:"\u53C2\u6570\u9519\u8BEF"},from_dir_not_template:{code:"",text:"--from-dir \u4E0D\u662F\u6A21\u677F\u76EE\u5F55: {dir}",comment:"\u53C2\u6570\u9519\u8BEF"},need_dest_no_tty:{code:"",text:"\u65E0 TTY \u65F6\u5FC5\u987B\u6307\u5B9A\u5DE5\u7A0B\u76EE\u5F55\u3002",comment:"\u53C2\u6570\u9519\u8BEF"},dest_exists:{code:"",text:"\u76EE\u5F55\u5DF2\u5B58\u5728\u4E14\u975E\u7A7A\uFF0C\u4E0D\u53EF\u521B\u5EFA: {dir}",comment:"\u53C2\u6570\u9519\u8BEF"},npm_install:{code:"",text:"npm install \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},bin_missing:{code:"",text:"\u627E\u4E0D\u5230 {js}",comment:"\u843D\u5730\u5931\u8D25"},run_js:{code:"",text:"\u65E0\u6CD5\u8FD0\u884C {js}: {e}",comment:"\u843D\u5730\u5931\u8D25"},init_failed:{code:"",text:"cgmaker init \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},npm_install_again:{code:"",text:"init \u540E npm install \u5931\u8D25",comment:"\u843D\u5730\u5931\u8D25"},run_npm:{code:"",text:"\u65E0\u6CD5\u8FD0\u884C {cmd}: {e}",comment:"npm \u542F\u52A8\u5931\u8D25"}},prompt:{dest_dir:{code:"",text:"\u5DE5\u7A0B\u76EE\u5F55",comment:"\u8BE2\u95EE\u843D\u5730\u76EE\u5F55"},ask:{code:"",text:"{question} ({fallback}): ",comment:"readline \u63D0\u95EE\u683C\u5F0F"}},ok:{written:{code:"",text:"\u5DF2\u5199\u5165\u5DE5\u7A0B {dir}",comment:"\u843D\u5730\u6210\u529F"},installed:{code:"",text:"\u5DF2\u5B89\u88C5 @66rpg/cgmaker \u5E76\u6267\u884C cgmaker init\u3002",comment:"\u843D\u5730\u6210\u529F"},local_origin:{code:"",text:"\u672C\u5730 --from-dir \u7684 origin.template_id \u4E3A local\uFF0C\u4E0D\u80FD\u76F4\u63A5 publish-template \u5230\u5E73\u53F0\u3002",comment:"\u672C\u5730\u6A21\u677F\u63D0\u9192"},next:{code:"",text:"\u63A5\u7740: cd \u8BE5\u76EE\u5F55 && npm run dev",comment:"\u843D\u5730\u6210\u529F\u4E0B\u4E00\u6B65"}}};function N(){let e={...v};return delete e._comment,e}var C=N();function i(e,t,n){let r=C[e]?.[t];if(!r?.text)throw new Error(`missing create message ${e}.${t}`);let a=r.text;if(n)for(let[m,p]of Object.entries(n))a=a.split(`{${m}}`).join(String(p));return a}function j(){return process.platform==="win32"?"npm.cmd":"npm"}function w(e,t={}){let n=process.platform==="win32",r=T(j(),e,{windowsHide:n,...t,shell:n});if(r.error)throw new Error(i("err","run_npm",{cmd:j(),e:r.error.message}));return r}function x(){return i("help","body")}function O(){return o.resolve(o.dirname(M(import.meta.url)),"..")}function E(e=process.cwd()){let t=e;for(;;){let n=o.join(t,"templates"),r=o.join(t,"package.json");if(c.existsSync(n)&&c.existsSync(r))try{if(JSON.parse(c.readFileSync(r,"utf8")).workspaces?.some(p=>p.includes("templates")))return t}catch{}let a=o.dirname(t);if(a===t)return null;t=a}}function P(){return JSON.parse(c.readFileSync(o.join(O(),"package.json"),"utf8"))}function I(){let e=E();if(e){let t=o.join(e,"packages/cgmaker");if(c.existsSync(t))return`file:${t.replace(/\\/g,"/")}`}return`^${P().version}`}function B(e){let t=e.split("@")[0]??e;return((t.includes("/")?t.split("/").pop():t)||"game").replace(/^tmpl_/,"tmpl-")}function W(e){return/^[a-zA-Z0-9]+$/.test(e)&&e!=="0"}function D(e){let t=e.filter(l=>l!=="--"),n,r,a,m=!1,p=[];for(let l=0;l<t.length;l++){let s=t[l];if(s==="--from-dir"){let d=t[++l];if(!d||d.startsWith("-"))throw new Error(i("err","from_dir_need_path"));n=d;continue}if(s.startsWith("--from-dir=")){if(n=s.slice(11),!n)throw new Error(i("err","from_dir_need_path"));continue}if(s==="--data-id"||s==="--data-ver-id"){let d=t[++l];if(!d||d.startsWith("-"))throw new Error(i("err","data_id_need"));r=d;continue}if(s.startsWith("--data-id=")){if(r=s.slice(10),!r)throw new Error(i("err","data_id_need"));continue}if(s.startsWith("--data-ver-id=")){if(r=s.slice(14),!r)throw new Error(i("err","data_id_need"));continue}if(s==="--skill-all"){m=!0;continue}if(s==="--skill-platform"){let d=t[++l];if(!d||d.startsWith("-"))throw new Error(i("err","skill_platform_need"));a=d;continue}if(s.startsWith("--skill-platform=")){if(a=s.slice(17),!a)throw new Error(i("err","skill_platform_need"));continue}p.push(s)}if(m&&a)throw new Error(i("err","skill_conflict"));return{rest:p,fromDir:n,dataId:r,skillPlatform:a,skillAll:m}}function R(e,t){try{if(!c.existsSync(e))return;if(!t)c.rmSync(e,{recursive:!0,force:!0});else for(let n of c.readdirSync(e))c.rmSync(o.join(e,n),{recursive:!0,force:!0});console.error(i("err","cleared",{dir:e}))}catch(n){console.error(i("err","clear_failed",{dir:e,e:n instanceof Error?n.message:String(n)}))}}function $(e,t){let n=b.createInterface({input:process.stdin,output:process.stdout});return new Promise(r=>{n.question(i("prompt","ask",{question:e,fallback:t}),a=>{n.close(),r(a.trim()||t)})})}function F(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function K(e,t){c.mkdirSync(e,{recursive:!0});let n={name:t,private:!0,type:"module",engines:{node:">=20"},devDependencies:{"@66rpg/cgmaker":I()}};c.writeFileSync(o.join(e,"package.json"),`${JSON.stringify(n,null,2)}
16
+ `),c.writeFileSync(o.join(e,".gitignore"),`node_modules/
17
+ dist/
18
+ .DS_Store
19
+ `);let r=n.devDependencies["@66rpg/cgmaker"],a=process.env.CGMAKER_NPM_SCOPE_REGISTRY?.trim();a&&typeof r=="string"&&!r.startsWith("file:")&&c.writeFileSync(o.join(e,".npmrc"),`@66rpg:registry=${a}
20
+ `)}function J(e,t){let n=o.join(e,"package.json"),r=JSON.parse(c.readFileSync(n,"utf8"));r.name=t,r.devDependencies=r.devDependencies??{},r.devDependencies["@66rpg/cgmaker"]||(r.devDependencies["@66rpg/cgmaker"]=I()),c.writeFileSync(n,`${JSON.stringify(r,null,2)}
21
+ `)}function Y(){return process.platform==="win32"?"cgmaker.exe":"cgmaker"}function L(){let e=process.platform,t=process.arch;return e==="darwin"&&t==="arm64"?["aarch64-apple-darwin"]:e==="darwin"&&t==="x64"?["x86_64-apple-darwin"]:e==="win32"&&t==="x64"?["x86_64-pc-windows-gnu","x86_64-pc-windows-msvc"]:e==="linux"&&t==="x64"?["x86_64-unknown-linux-gnu","x86_64-unknown-linux-musl"]:e==="linux"&&t==="arm64"?["aarch64-unknown-linux-gnu","aarch64-unknown-linux-musl"]:[]}function q(e){let t=Y(),n=[];for(let r of["release","debug"]){for(let a of L())n.push(o.join(e,a,r,t));n.push(o.join(e,r,t))}return n}function H(){if(process.env.CG_MAKER_CLI_BIN&&c.existsSync(process.env.CG_MAKER_CLI_BIN))return process.env.CG_MAKER_CLI_BIN;if(process.env.CGMAKER_BIN&&c.existsSync(process.env.CGMAKER_BIN))return process.env.CGMAKER_BIN;let e=[];process.env.CARGO_TARGET_DIR&&e.push(process.env.CARGO_TARGET_DIR);let t=E();t&&e.push(o.join(t,"target"));for(let n of e)for(let r of q(n))if(c.existsSync(r))return r}async function z(){let{rest:e,fromDir:t,dataId:n,skillPlatform:r,skillAll:a}=D(process.argv.slice(2));if(e.includes("-h")||e.includes("--help")||e.length===0){process.stdout.write(x()),e.length===0&&process.exit(1);return}let m=e[0],p=e[1],l=n??e[2];if(e.length>3&&(process.stderr.write(x()),process.exit(1)),(!m||m.startsWith("-"))&&(process.stderr.write(x()),process.exit(1)),m.includes("/")&&(console.error(i("err","owner_slug")),process.exit(1)),p?.startsWith("-")&&(process.stderr.write(x()),process.exit(1)),t&&l&&(console.error(i("err","data_id_from_dir")),process.exit(1)),l&&!W(l)&&(console.error(i("err","invalid_data_id",{id:l})),process.exit(1)),t){let f=o.resolve(t);c.existsSync(o.join(f,"package.json"))||(console.error(i("err","from_dir_not_template",{dir:f})),process.exit(1))}if(!p){let f=B(m);F()||(console.error(i("err","need_dest_no_tty")),process.stderr.write(x()),process.exit(1)),p=await $(i("prompt","dest_dir"),f)}let s=o.resolve(p),d=c.existsSync(s);d&&c.readdirSync(s).length&&(console.error(i("err","dest_exists",{dir:s})),process.exit(1));let g=(f,u=1)=>{R(s,d),console.error(f),process.exit(u)};try{K(s,o.basename(s));let f=w(["install"],{cwd:s,stdio:"inherit"});f.status!==0&&g(i("err","npm_install"),f.status??1);let u=o.join(s,"node_modules/@66rpg/cgmaker/bin/cgmaker.js");c.existsSync(u)||g(i("err","bin_missing",{js:u}));let _=[u,"init",m];t&&_.push("--from-dir",o.resolve(t)),l&&_.push("--data-id",l),a&&_.push("--all"),r&&_.push("--platform",r);let h=H(),S={...process.env};h&&(S.CGMAKER_BIN=h);let k=G(process.execPath,_,{cwd:s,stdio:"inherit",windowsHide:!0,env:S});k.error&&g(i("err","run_js",{js:u,e:k.error.message})),k.status!==0&&g(i("err","init_failed"),k.status??1),J(s,o.basename(s));let y=w(["install"],{cwd:s,stdio:"inherit"});y.status!==0&&g(i("err","npm_install_again"),y.status??1)}catch(f){throw R(s,d),f}console.log(i("ok","written",{dir:s})),console.log(i("ok","installed")),t&&console.log(i("ok","local_origin")),console.log(i("ok","next"))}z().catch(e=>{console.error(e instanceof Error?e.message:e),process.exit(1)});
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@66rpg/cgmaker-create",
3
+ "version": "0.1.15",
4
+ "description": "从 cgmaker 托管模板创建带完整源码的游戏工程",
5
+ "type": "module",
6
+ "bin": {
7
+ "cgmaker-create": "./bin/cgmaker-create.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "bin"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc --noEmit -p tsconfig.json && node ../../scripts/bundle.mjs",
15
+ "test": "node --import tsx --test \"src/**/*.test.ts\"",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "engines": {
22
+ "node": ">=20"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^22.15.0",
26
+ "typescript": "^5.8.3"
27
+ }
28
+ }