@fxri/toolkit 1.1.0 → 1.1.1
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/CHANGELOG.md +7 -0
- package/README.md +10 -0
- package/dist/cli.cjs +10 -10
- package/dist/cli.js +10 -10
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -40,6 +40,14 @@ npx toolkit changelog format # 仅格式化已有 CHANGELOG
|
|
|
40
40
|
npx toolkit changelog status / publish # 其余 changeset 子命令透传
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
### 通用选项
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
-h, --help 显示帮助(全局或子命令)
|
|
47
|
+
-v, --version 显示版本号
|
|
48
|
+
--no-redact 关闭隐私脱敏(tasks / changelog 均可用)
|
|
49
|
+
```
|
|
50
|
+
|
|
43
51
|
### 接入 package.json
|
|
44
52
|
|
|
45
53
|
```json
|
|
@@ -138,7 +146,9 @@ export const languages = {
|
|
|
138
146
|
| 能力 | Node 20 | Node 18 |
|
|
139
147
|
| --- | --- | --- |
|
|
140
148
|
| 安装 | ✅ | ✅(npm 报 EBADENGINE 警告) |
|
|
149
|
+
| 帮助 / 版本(--help / --version) | ✅ | ✅ |
|
|
141
150
|
| tasks(总览 / 归档) | ✅ | ✅ |
|
|
151
|
+
| 隐私脱敏(含 --no-redact 开关) | ✅ | ✅ |
|
|
142
152
|
| changelog format(纯格式化) | ✅ | ✅ |
|
|
143
153
|
| changelog init/add/version/publish | ✅ | ❌ |
|
|
144
154
|
|
package/dist/cli.cjs
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`);let
|
|
2
|
+
var Y=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,f=Y();var H=require("commander"),q=require("module"),X=require("child_process");var Z=require("fs"),S=require("path");function v(e){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!n)return{};let t={};for(let r of n[1].split(/\r?\n/)){let o=r.indexOf(":");if(o===-1)continue;let c=r.slice(0,o).trim(),s=r.slice(o+1).trim();(s.startsWith("'")&&s.endsWith("'")||s.startsWith('"')&&s.endsWith('"'))&&(s=s.slice(1,-1)),c&&(t[c]=s)}return t}function x(e){let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return n?e.slice(n[0].length):e}var k=require("fs"),$=require("path");function T(e){if(!(0,k.existsSync)(e))return[];let n=[];for(let t of(0,k.readdirSync)(e)){let r=(0,$.join)(e,t);if((0,k.statSync)(r).isDirectory())for(let o of(0,k.readdirSync)(r))o.endsWith(".md")&&n.push((0,$.join)(r,o));else t.endsWith(".md")&&n.push(r)}return n}function U(e){let t=(0,$.basename)(e,(0,$.extname)(e)).match(/^(\d{8})/);return t?t[1]:""}var N=require("fs"),O=require("path"),Q=[{name:"\u5185\u7F51URL",pattern:/(https?:\/\/)[a-zA-Z0-9.-]+(:\d{2,5})(?=\/|[\s]|$)/g,replacement:"$1***$2"},{name:"\u90AE\u7BB1",pattern:/([a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]*@(?:[a-zA-Z0-9-]+\.)+([a-zA-Z]{2,})/g,replacement:"$1***@***.$2"},{name:"JWT",pattern:/\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,replacement:"eyJ***.eyJ***.***"},{name:"AWS\u5BC6\u94A5",pattern:/\b(AKIA|ASIA)[A-Z0-9]{16}\b/g,replacement:"$1****"},{name:"GitHub\u5BC6\u94A5",pattern:/\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g,replacement:"$1_****"},{name:"OpenAI\u5BC6\u94A5",pattern:/\bsk-[A-Za-z0-9]{20,}\b/g,replacement:"sk-****"},{name:"Slack\u5BC6\u94A5",pattern:/\b(xox[baprs])-[A-Za-z0-9-]{10,}\b/g,replacement:"$1-****"},{name:"\u624B\u673A\u53F7",pattern:/(?<!\d)(1[3-9]\d)\d{4}(\d{4})(?!\d)/g,replacement:"$1****$2"},{name:"\u8EAB\u4EFD\u8BC1",pattern:/(?<!\d)(\d{6})\d{8}(\d{3}[\dXx])(?!\d)/g,replacement:"$1********$2"},{name:"IPv4",pattern:/(?<![\d.])(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3}(?![\d.])/g,replacement:"$1.***.***"}],y,C=null;function W(){if(y!==void 0)return y;y=null;try{let e=(0,N.readFileSync)((0,O.join)(process.cwd(),".toolkitrc.json"),"utf8");y=JSON.parse(e).redact??null}catch{}return y}function V(){if(C)return C;let e=W(),n=new Set(e?.disable??[]),t=[];for(let r of e?.rules??[])try{t.push({name:r.name,pattern:new RegExp(r.pattern,r.flags??""),replacement:r.replacement})}catch{}return C=[...t,...Q.filter(r=>!n.has(r.name))],C}function b(e,n){if(!n||!e)return e;let t=e;for(let r of V())t=t.replace(r.pattern,r.replacement);return t}function F(e){return!(!e||process.env.FX_REDACT==="0"||W()?.enabled===!1)}function ee(e=".tasks"){let n=(0,S.join)(e,"active");return T(n).map(t=>{let r=(0,Z.readFileSync)(t,"utf8"),o=v(r),c=r.split(/\r?\n/).find(s=>s.startsWith("# ")&&!s.startsWith("#!"))?.replace(/^#\s*/,"")||(0,S.basename)(t,".md");return{file:t,name:(0,S.basename)(t,".md"),date:U(t),title:c,frontmatter:o,body:x(r).trim()}})}function G(e=".tasks",n=!0){let t=ee(e);if(t.length===0){console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1");return}let r=["\u8FDB\u884C\u4E2D","\u963B\u585E","\u5F85\u529E","\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03","\u672A\u6807\u6CE8"],o={};for(let s of t){let l=r.includes(s.frontmatter.status)?s.frontmatter.status:"\u672A\u6807\u6CE8";(o[l]||=[]).push(s)}console.log(`\u4EFB\u52A1\u603B\u89C8\uFF1A
|
|
3
|
+
`);let c=0;for(let s of r){let l=o[s]||[];if(l.length!==0){c+=l.length,console.log(`\u3010${s}\u3011${l.length} \u9879`);for(let a of l)console.log(` ${a.date} ${(a.frontmatter.owner||"\u672A\u6807\u6CE8").padEnd(8)} ${b(a.title,n)}`);console.log("")}}console.log(`\u5171 ${c} \u4E2A\u4EFB\u52A1\u6587\u4EF6`)}var d=require("fs"),m=require("path");var M=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"];function te(e,n){let t=(0,m.resolve)(e),r=(0,m.resolve)(n);for(;t!==r&&t.startsWith(r+m.sep);){try{if((0,d.readdirSync)(t).length>0)break;(0,d.rmdirSync)(t)}catch{break}t=(0,m.dirname)(t)}}function I(e){let n=e.trim().match(/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/);return n?`${n[1]}-${n[2].padStart(2,"0")}-${n[3].padStart(2,"0")} ${n[4].padStart(2,"0")}:${n[5]}`:e}function ne(e){let n=(0,d.readFileSync)(e,"utf8"),t=[],r=/## (.+?)\n\n> [^\n]*完成时间:([^\n]+)\n\n([\s\S]*?)(?=\n\n---\n\n## |$)/g,o;for(;o=r.exec(n);)t.push({block:o[0].trim(),completed:o[2].trim()});return t}function P(e=".tasks",n=!0){let t=(0,m.join)(e,"active"),r=(0,m.join)(e,"archive"),o=T(t);if(o.length===0)return console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1\uFF0C\u65E0\u9700\u5F52\u6863"),{archived:0,skipped:[]};let c=[],s=[];for(let a of o){let g=(0,d.readFileSync)(a,"utf8"),u=v(g);if(!M.includes(u.status))continue;let h=I(u.completed||"");if(!h){s.push((0,m.basename)(a,".md")),console.log(`\u8DF3\u8FC7 ${(0,m.basename)(a,".md")}\uFF1A\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`);continue}c.push({file:a,name:(0,m.basename)(a,".md"),owner:u.owner||"\u672A\u6807\u6CE8",status:u.status||"\u672A\u6807\u6CE8",scope:u.scope||"-",completed:h,body:x(g).trim()})}if(c.length===0)return console.log("\u672C\u6B21\u65E0\u53EF\u5F52\u6863\u4EFB\u52A1"),{archived:0,skipped:s};let l={};for(let a of c){let g=a.completed.replace(/-/g,"").slice(0,8);(l[g]||=[]).push(a)}for(let[a,g]of Object.entries(l)){let u=(0,m.join)(r,a.slice(0,6));(0,d.mkdirSync)(u,{recursive:!0});let h=(0,m.join)(u,`${a}.md`),p=(0,d.existsSync)(h)?ne(h):[];p.push(...g.map(i=>({block:`## ${i.name}
|
|
4
4
|
|
|
5
|
-
> \u8D1F\u8D23\u4EBA\uFF1A${
|
|
5
|
+
> \u8D1F\u8D23\u4EBA\uFF1A${i.owner}\u3000\u72B6\u6001\uFF1A${i.status}\u3000\u8303\u56F4\uFF1A${i.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${i.completed}
|
|
6
6
|
|
|
7
|
-
${b(
|
|
7
|
+
${b(i.body,n)}`,completed:i.completed})));for(let i of p)i.completed=I(i.completed);p.sort((i,z)=>z.completed.localeCompare(i.completed)),(0,d.writeFileSync)(h,`# ${a} \u5F52\u6863
|
|
8
8
|
|
|
9
9
|
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002
|
|
10
10
|
|
|
11
|
-
${p.map(
|
|
11
|
+
${p.map(i=>i.block).join(`
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
`)}
|
|
16
|
-
`,"utf8");for(let
|
|
16
|
+
`,"utf8");for(let i of g)(0,d.unlinkSync)(i.file);te((0,m.dirname)(g[0].file),e),console.log(`\u5DF2\u5F52\u6863 ${g.length} \u4E2A\u4EFB\u52A1 \u2192 ${a}.md`)}return console.log(`\u5171\u5F52\u6863 ${c.length} \u4E2A\u4EFB\u52A1`),{archived:c.length,skipped:s}}var w={zh:{replacements:{"### Major Changes":"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4","### \u91CD\u5927\u53D8\u66F4":"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4","### Minor Changes":"### \u2728 \u65B0\u589E\u529F\u80FD","### \u65B0\u589E\u529F\u80FD":"### \u2728 \u65B0\u589E\u529F\u80FD","### Patch Changes":"### \u{1F41B} \u8865\u4E01\u4FEE\u590D","### \u8865\u4E01\u4FEE\u590D":"### \u{1F41B} \u8865\u4E01\u4FEE\u590D","### Dependent Changes":"### \u{1F517} \u4F9D\u8D56\u53D8\u66F4","### \u4F9D\u8D56\u53D8\u66F4":"### \u{1F517} \u4F9D\u8D56\u53D8\u66F4","- Updated dependencies":"- \u66F4\u65B0\u4F9D\u8D56"},deps:"- \u66F4\u65B0\u4F9D\u8D56",released:"\u53D1\u5E03"},en:{replacements:{"### Major Changes":"### \u{1F6A8} Major Changes","### Minor Changes":"### \u2728 Minor Changes","### Patch Changes":"### \u{1F41B} Patch Changes","### Dependent Changes":"### \u{1F517} Dependent Changes"},deps:"- Updated dependencies",released:"released"}},D="zh";var A=require("fs");var B=require("fs"),L=require("path");function J(e){let n=[],t=new Set(["node_modules",".git","dist"]),r=o=>{let c;try{c=(0,B.readdirSync)(o,{withFileTypes:!0})}catch{return}for(let s of c)if(s.isDirectory()){if(t.has(s.name))continue;r((0,L.join)(o,s.name))}else s.name==="CHANGELOG.md"&&n.push((0,L.join)(o,s.name))};return r(e),n}function j(){let e=new Date,n=t=>String(t).padStart(2,"0");return`${e.getFullYear()}-${n(e.getMonth()+1)}-${n(e.getDate())}`}function re(e,n,t,r=!0){let o=(0,A.readFileSync)(e,"utf8"),c=o.includes(`\r
|
|
17
17
|
`)?`\r
|
|
18
18
|
`:`
|
|
19
19
|
`,s=o.replace(/\r\n/g,`
|
|
20
|
-
`),l=s;for(let[p,
|
|
20
|
+
`),l=s;for(let[p,i]of Object.entries(t.replacements))l=l.replaceAll(p,i);for(;l.includes(`${t.deps}
|
|
21
21
|
${t.deps}`);)l=l.replace(`${t.deps}
|
|
22
|
-
${t.deps}`,t.deps);for(;;){let p=l.replace(/^- (.+)\n- \1$/gm,"- $1");if(p===l)break;l=p}let
|
|
23
|
-
`),g=[];for(let p=0;p<
|
|
24
|
-
`),h=b(u,r);return h!==s?((0,
|
|
22
|
+
${t.deps}`,t.deps);for(;;){let p=l.replace(/^- (.+)\n- \1$/gm,"- $1");if(p===l)break;l=p}let a=l.split(`
|
|
23
|
+
`),g=[];for(let p=0;p<a.length;p++)if(g.push(a[p]),/^## \d+\.\d+\.\d+/.test(a[p])){let i=p+1;for(;i<a.length&&a[i].trim()==="";)i++;a[i]?.startsWith("> ")&&/^> \d{4}-\d{2}-\d{2} (?:发布|released)$/.test(a[i].trim())||g.push(`> ${n} ${t.released}`)}let u=g.join(`
|
|
24
|
+
`),h=b(u,r);return h!==s?((0,A.writeFileSync)(e,h.replace(/\n/g,c),"utf8"),!0):!1}function E(e,n,t,r=!0){let o=[];for(let c of J(e))re(c,n,t,r)&&o.push(c);if(o.length===0)console.log("\u65E0 CHANGELOG \u9700\u8981\u66F4\u65B0");else for(let c of o)console.log(`changelog \u5DF2\u66F4\u65B0\uFF1A${c}`);return o}var K=(0,q.createRequire)(f),oe=K.resolve("@changesets/cli/bin.js"),{version:se}=K("../package.json"),_=e=>{let n=(0,X.spawnSync)(process.execPath,[oe,...e],{stdio:"inherit"});n.status!==0&&process.exit(n.status??1)},R=new H.Command;R.name("toolkit").description("\u5F00\u53D1\u5DE5\u7A0B\u5316\u5DE5\u5177\u96C6\uFF1A\u4EFB\u52A1\u7BA1\u7406 + \u591A\u8BED\u8A00 CHANGELOG \u53D1\u5E03").version(se,"-v, --version","\u663E\u793A\u7248\u672C\u53F7").enablePositionalOptions(!0);R.command("tasks").description("\u4EFB\u52A1\u7BA1\u7406").option("--dir <path>","\u4EFB\u52A1\u76EE\u5F55",".tasks").option("--no-redact","\u5173\u95ED\u9690\u79C1\u8131\u654F").argument("[command]","\u5B50\u547D\u4EE4\uFF1Aarchive \u5F52\u6863\uFF0C\u7559\u7A7A\u4E3A\u603B\u89C8").action((e,n)=>{let t=F(n.redact);e==="archive"?P(n.dir,t):G(n.dir,t)});R.command("changelog").description("\u591A\u8BED\u8A00 CHANGELOG\uFF08\u5C01\u88C5 changesets\uFF09").option("--lang <lang>","\u8BED\u8A00 zh/en",D).option("--no-redact","\u5173\u95ED\u9690\u79C1\u8131\u654F").argument("[command...]","\u5B50\u547D\u4EE4\u53CA\u53C2\u6570\uFF08\u900F\u4F20\u7ED9 changesets\uFF09").passThroughOptions(!0).action((e,n)=>{let t=F(n.redact),r=w[n.lang]??w[D],o=e[0];o==="version"?(_(["version"]),E(".",j(),r,t)):o==="format"?E(".",j(),r,t):_(o?e:[])});R.parse();
|
package/dist/cli.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as
|
|
3
|
-
`);let
|
|
2
|
+
import{Command as ke}from"commander";import{createRequire as $e}from"module";import{spawnSync as be}from"child_process";import{readFileSync as te}from"fs";import{join as ne,basename as O}from"path";function $(e){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!n)return{};let t={};for(let r of n[1].split(/\r?\n/)){let o=r.indexOf(":");if(o===-1)continue;let c=r.slice(0,o).trim(),s=r.slice(o+1).trim();(s.startsWith("'")&&s.endsWith("'")||s.startsWith('"')&&s.endsWith('"'))&&(s=s.slice(1,-1)),c&&(t[c]=s)}return t}function b(e){let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return n?e.slice(n[0].length):e}import{existsSync as H,readdirSync as E,statSync as q}from"fs";import{join as L,basename as X,extname as K}from"path";function y(e){if(!H(e))return[];let n=[];for(let t of E(e)){let r=L(e,t);if(q(r).isDirectory())for(let o of E(r))o.endsWith(".md")&&n.push(L(r,o));else t.endsWith(".md")&&n.push(r)}return n}function z(e){let t=X(e,K(e)).match(/^(\d{8})/);return t?t[1]:""}import{readFileSync as Y}from"fs";import{join as Q}from"path";var V=[{name:"\u5185\u7F51URL",pattern:/(https?:\/\/)[a-zA-Z0-9.-]+(:\d{2,5})(?=\/|[\s]|$)/g,replacement:"$1***$2"},{name:"\u90AE\u7BB1",pattern:/([a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]*@(?:[a-zA-Z0-9-]+\.)+([a-zA-Z]{2,})/g,replacement:"$1***@***.$2"},{name:"JWT",pattern:/\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,replacement:"eyJ***.eyJ***.***"},{name:"AWS\u5BC6\u94A5",pattern:/\b(AKIA|ASIA)[A-Z0-9]{16}\b/g,replacement:"$1****"},{name:"GitHub\u5BC6\u94A5",pattern:/\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g,replacement:"$1_****"},{name:"OpenAI\u5BC6\u94A5",pattern:/\bsk-[A-Za-z0-9]{20,}\b/g,replacement:"sk-****"},{name:"Slack\u5BC6\u94A5",pattern:/\b(xox[baprs])-[A-Za-z0-9-]{10,}\b/g,replacement:"$1-****"},{name:"\u624B\u673A\u53F7",pattern:/(?<!\d)(1[3-9]\d)\d{4}(\d{4})(?!\d)/g,replacement:"$1****$2"},{name:"\u8EAB\u4EFD\u8BC1",pattern:/(?<!\d)(\d{6})\d{8}(\d{3}[\dXx])(?!\d)/g,replacement:"$1********$2"},{name:"IPv4",pattern:/(?<![\d.])(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3}(?![\d.])/g,replacement:"$1.***.***"}],k,v=null;function _(){if(k!==void 0)return k;k=null;try{let e=Y(Q(process.cwd(),".toolkitrc.json"),"utf8");k=JSON.parse(e).redact??null}catch{}return k}function ee(){if(v)return v;let e=_(),n=new Set(e?.disable??[]),t=[];for(let r of e?.rules??[])try{t.push({name:r.name,pattern:new RegExp(r.pattern,r.flags??""),replacement:r.replacement})}catch{}return v=[...t,...V.filter(r=>!n.has(r.name))],v}function h(e,n){if(!n||!e)return e;let t=e;for(let r of ee())t=t.replace(r.pattern,r.replacement);return t}function A(e){return!(!e||process.env.FX_REDACT==="0"||_()?.enabled===!1)}function re(e=".tasks"){let n=ne(e,"active");return y(n).map(t=>{let r=te(t,"utf8"),o=$(r),c=r.split(/\r?\n/).find(s=>s.startsWith("# ")&&!s.startsWith("#!"))?.replace(/^#\s*/,"")||O(t,".md");return{file:t,name:O(t,".md"),date:z(t),title:c,frontmatter:o,body:b(r).trim()}})}function N(e=".tasks",n=!0){let t=re(e);if(t.length===0){console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1");return}let r=["\u8FDB\u884C\u4E2D","\u963B\u585E","\u5F85\u529E","\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03","\u672A\u6807\u6CE8"],o={};for(let s of t){let l=r.includes(s.frontmatter.status)?s.frontmatter.status:"\u672A\u6807\u6CE8";(o[l]||=[]).push(s)}console.log(`\u4EFB\u52A1\u603B\u89C8\uFF1A
|
|
3
|
+
`);let c=0;for(let s of r){let l=o[s]||[];if(l.length!==0){c+=l.length,console.log(`\u3010${s}\u3011${l.length} \u9879`);for(let a of l)console.log(` ${a.date} ${(a.frontmatter.owner||"\u672A\u6807\u6CE8").padEnd(8)} ${h(a.title,n)}`);console.log("")}}console.log(`\u5171 ${c} \u4E2A\u4EFB\u52A1\u6587\u4EF6`)}import{readFileSync as M,writeFileSync as oe,mkdirSync as se,unlinkSync as ae,existsSync as ie,readdirSync as ce,rmdirSync as le}from"fs";import{join as x,basename as S,dirname as U,resolve as Z,sep as me}from"path";var W=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"];function pe(e,n){let t=Z(e),r=Z(n);for(;t!==r&&t.startsWith(r+me);){try{if(ce(t).length>0)break;le(t)}catch{break}t=U(t)}}function G(e){let n=e.trim().match(/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/);return n?`${n[1]}-${n[2].padStart(2,"0")}-${n[3].padStart(2,"0")} ${n[4].padStart(2,"0")}:${n[5]}`:e}function de(e){let n=M(e,"utf8"),t=[],r=/## (.+?)\n\n> [^\n]*完成时间:([^\n]+)\n\n([\s\S]*?)(?=\n\n---\n\n## |$)/g,o;for(;o=r.exec(n);)t.push({block:o[0].trim(),completed:o[2].trim()});return t}function P(e=".tasks",n=!0){let t=x(e,"active"),r=x(e,"archive"),o=y(t);if(o.length===0)return console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1\uFF0C\u65E0\u9700\u5F52\u6863"),{archived:0,skipped:[]};let c=[],s=[];for(let a of o){let p=M(a,"utf8"),d=$(p);if(!W.includes(d.status))continue;let g=G(d.completed||"");if(!g){s.push(S(a,".md")),console.log(`\u8DF3\u8FC7 ${S(a,".md")}\uFF1A\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`);continue}c.push({file:a,name:S(a,".md"),owner:d.owner||"\u672A\u6807\u6CE8",status:d.status||"\u672A\u6807\u6CE8",scope:d.scope||"-",completed:g,body:b(p).trim()})}if(c.length===0)return console.log("\u672C\u6B21\u65E0\u53EF\u5F52\u6863\u4EFB\u52A1"),{archived:0,skipped:s};let l={};for(let a of c){let p=a.completed.replace(/-/g,"").slice(0,8);(l[p]||=[]).push(a)}for(let[a,p]of Object.entries(l)){let d=x(r,a.slice(0,6));se(d,{recursive:!0});let g=x(d,`${a}.md`),m=ie(g)?de(g):[];m.push(...p.map(i=>({block:`## ${i.name}
|
|
4
4
|
|
|
5
|
-
> \u8D1F\u8D23\u4EBA\uFF1A${
|
|
5
|
+
> \u8D1F\u8D23\u4EBA\uFF1A${i.owner}\u3000\u72B6\u6001\uFF1A${i.status}\u3000\u8303\u56F4\uFF1A${i.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${i.completed}
|
|
6
6
|
|
|
7
|
-
${
|
|
7
|
+
${h(i.body,n)}`,completed:i.completed})));for(let i of m)i.completed=G(i.completed);m.sort((i,j)=>j.completed.localeCompare(i.completed)),oe(g,`# ${a} \u5F52\u6863
|
|
8
8
|
|
|
9
9
|
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002
|
|
10
10
|
|
|
11
|
-
${m.map(
|
|
11
|
+
${m.map(i=>i.block).join(`
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
`)}
|
|
16
|
-
`,"utf8");for(let
|
|
16
|
+
`,"utf8");for(let i of p)ae(i.file);pe(U(p[0].file),e),console.log(`\u5DF2\u5F52\u6863 ${p.length} \u4E2A\u4EFB\u52A1 \u2192 ${a}.md`)}return console.log(`\u5171\u5F52\u6863 ${c.length} \u4E2A\u4EFB\u52A1`),{archived:c.length,skipped:s}}var C={zh:{replacements:{"### Major Changes":"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4","### \u91CD\u5927\u53D8\u66F4":"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4","### Minor Changes":"### \u2728 \u65B0\u589E\u529F\u80FD","### \u65B0\u589E\u529F\u80FD":"### \u2728 \u65B0\u589E\u529F\u80FD","### Patch Changes":"### \u{1F41B} \u8865\u4E01\u4FEE\u590D","### \u8865\u4E01\u4FEE\u590D":"### \u{1F41B} \u8865\u4E01\u4FEE\u590D","### Dependent Changes":"### \u{1F517} \u4F9D\u8D56\u53D8\u66F4","### \u4F9D\u8D56\u53D8\u66F4":"### \u{1F517} \u4F9D\u8D56\u53D8\u66F4","- Updated dependencies":"- \u66F4\u65B0\u4F9D\u8D56"},deps:"- \u66F4\u65B0\u4F9D\u8D56",released:"\u53D1\u5E03"},en:{replacements:{"### Major Changes":"### \u{1F6A8} Major Changes","### Minor Changes":"### \u2728 Minor Changes","### Patch Changes":"### \u{1F41B} Patch Changes","### Dependent Changes":"### \u{1F517} Dependent Changes"},deps:"- Updated dependencies",released:"released"}},R="zh";import{readFileSync as fe,writeFileSync as ue}from"fs";import{readdirSync as ge}from"fs";import{join as B}from"path";function I(e){let n=[],t=new Set(["node_modules",".git","dist"]),r=o=>{let c;try{c=ge(o,{withFileTypes:!0})}catch{return}for(let s of c)if(s.isDirectory()){if(t.has(s.name))continue;r(B(o,s.name))}else s.name==="CHANGELOG.md"&&n.push(B(o,s.name))};return r(e),n}function F(){let e=new Date,n=t=>String(t).padStart(2,"0");return`${e.getFullYear()}-${n(e.getMonth()+1)}-${n(e.getDate())}`}function he(e,n,t,r=!0){let o=fe(e,"utf8"),c=o.includes(`\r
|
|
17
17
|
`)?`\r
|
|
18
18
|
`:`
|
|
19
19
|
`,s=o.replace(/\r\n/g,`
|
|
20
|
-
`),l=s;for(let[m,
|
|
20
|
+
`),l=s;for(let[m,i]of Object.entries(t.replacements))l=l.replaceAll(m,i);for(;l.includes(`${t.deps}
|
|
21
21
|
${t.deps}`);)l=l.replace(`${t.deps}
|
|
22
|
-
${t.deps}`,t.deps);for(;;){let m=l.replace(/^- (.+)\n- \1$/gm,"- $1");if(m===l)break;l=m}let
|
|
23
|
-
`),p=[];for(let m=0;m<
|
|
24
|
-
`),
|
|
22
|
+
${t.deps}`,t.deps);for(;;){let m=l.replace(/^- (.+)\n- \1$/gm,"- $1");if(m===l)break;l=m}let a=l.split(`
|
|
23
|
+
`),p=[];for(let m=0;m<a.length;m++)if(p.push(a[m]),/^## \d+\.\d+\.\d+/.test(a[m])){let i=m+1;for(;i<a.length&&a[i].trim()==="";)i++;a[i]?.startsWith("> ")&&/^> \d{4}-\d{2}-\d{2} (?:发布|released)$/.test(a[i].trim())||p.push(`> ${n} ${t.released}`)}let d=p.join(`
|
|
24
|
+
`),g=h(d,r);return g!==s?(ue(e,g.replace(/\n/g,c),"utf8"),!0):!1}function w(e,n,t,r=!0){let o=[];for(let c of I(e))he(c,n,t,r)&&o.push(c);if(o.length===0)console.log("\u65E0 CHANGELOG \u9700\u8981\u66F4\u65B0");else for(let c of o)console.log(`changelog \u5DF2\u66F4\u65B0\uFF1A${c}`);return o}var J=$e(import.meta.url),ye=J.resolve("@changesets/cli/bin.js"),{version:ve}=J("../package.json"),D=e=>{let n=be(process.execPath,[ye,...e],{stdio:"inherit"});n.status!==0&&process.exit(n.status??1)},T=new ke;T.name("toolkit").description("\u5F00\u53D1\u5DE5\u7A0B\u5316\u5DE5\u5177\u96C6\uFF1A\u4EFB\u52A1\u7BA1\u7406 + \u591A\u8BED\u8A00 CHANGELOG \u53D1\u5E03").version(ve,"-v, --version","\u663E\u793A\u7248\u672C\u53F7").enablePositionalOptions(!0);T.command("tasks").description("\u4EFB\u52A1\u7BA1\u7406").option("--dir <path>","\u4EFB\u52A1\u76EE\u5F55",".tasks").option("--no-redact","\u5173\u95ED\u9690\u79C1\u8131\u654F").argument("[command]","\u5B50\u547D\u4EE4\uFF1Aarchive \u5F52\u6863\uFF0C\u7559\u7A7A\u4E3A\u603B\u89C8").action((e,n)=>{let t=A(n.redact);e==="archive"?P(n.dir,t):N(n.dir,t)});T.command("changelog").description("\u591A\u8BED\u8A00 CHANGELOG\uFF08\u5C01\u88C5 changesets\uFF09").option("--lang <lang>","\u8BED\u8A00 zh/en",R).option("--no-redact","\u5173\u95ED\u9690\u79C1\u8131\u654F").argument("[command...]","\u5B50\u547D\u4EE4\u53CA\u53C2\u6570\uFF08\u900F\u4F20\u7ED9 changesets\uFF09").passThroughOptions(!0).action((e,n)=>{let t=A(n.redact),r=C[n.lang]??C[R],o=e[0];o==="version"?(D(["version"]),w(".",F(),r,t)):o==="format"?w(".",F(),r,t):D(o?e:[])});T.parse();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fxri/toolkit",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "开发工程化工具集:任务管理 + 多语言 CHANGELOG 发布。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"i18n"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@changesets/cli": "^2.31.1"
|
|
47
|
+
"@changesets/cli": "^2.31.1",
|
|
48
|
+
"commander": "^14.0.0"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@types/node": "^20.19.21",
|