@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 +14 -0
- package/bin/cgmaker-create.js +2 -0
- package/dist/index.js +21 -0
- package/package.json +28 -0
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`。
|
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
|
+
}
|