@fxri/toolkit 1.5.2 → 1.5.4
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 +27 -0
- package/README.md +18 -5
- package/SPEC.md +1 -1
- package/dist/cli.cjs +34 -34
- package/dist/cli.js +34 -34
- package/dist/index.cjs +32 -32
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +32 -32
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
# @fxri/toolkit
|
|
2
2
|
|
|
3
|
+
## 1.5.4
|
|
4
|
+
> 2026-09-03 发布
|
|
5
|
+
|
|
6
|
+
### 🐛 补丁修复
|
|
7
|
+
|
|
8
|
+
- `tasks normalize` 增加 `--check` 显式只读别名,并与 `--fix` 互斥报错
|
|
9
|
+
- `--status` 非法值改为告警并忽略,不再静默
|
|
10
|
+
- 任务总览对 `STATUS_ORDER` 之外的未知状态以兜底分组展示,并在汇总计入「其他」(不再“数得到看不到”)
|
|
11
|
+
- `depends_on` 解析抽公共 `parseDepends`(validate/query 复用),消除双实现漂移
|
|
12
|
+
- 导出目标目录不存在时自动创建(CSV / XLSX / JSON)
|
|
13
|
+
- `normalize --fix` 会把放错月份目录的归档文件移动到正确月份目录
|
|
14
|
+
- archive 多日期归档逐日失败汇总(失败日不删除 active,可安全重试)
|
|
15
|
+
|
|
16
|
+
## 1.5.3
|
|
17
|
+
|
|
18
|
+
> 2026-09-03 发布
|
|
19
|
+
|
|
20
|
+
### 🐛 补丁修复
|
|
21
|
+
|
|
22
|
+
- 修复补元数据整行重写改错状态:`normalize --fix` 现在保留原行已有的 负责人/状态/范围 段,仅补缺失项(防 `已放弃` 被误改成 `已完成`)
|
|
23
|
+
- `normalize --fix` 计数与行为对齐:降序重排、冗余分隔符清理计入修复数,并输出按文件的动作明细
|
|
24
|
+
- `printTasks` 日期列改为 created 优先(与 board/导出口径一致)
|
|
25
|
+
- `check` 对 active 根目录直放任务文件给出 {YYYYMM} 月份子目录软告警
|
|
26
|
+
- `--owner/--scope` 支持逗号分隔多值过滤
|
|
27
|
+
- changelog 域补单测(标题转换/去 hash/去重/补日期/脱敏/collect 排除),collect 排除 coverage;README 补充 changelog 中文润色示例
|
|
28
|
+
|
|
3
29
|
## 1.5.2
|
|
30
|
+
|
|
4
31
|
> 2026-09-03 发布
|
|
5
32
|
|
|
6
33
|
### 🐛 补丁修复
|
package/README.md
CHANGED
|
@@ -33,8 +33,9 @@ npx toolkit tasks --view all # 待完成 + 已归档(状态分组,
|
|
|
33
33
|
npx toolkit tasks archive # 归档已完成任务
|
|
34
34
|
npx toolkit tasks archive --dry-run # 归档预演(只预览,不落盘)
|
|
35
35
|
npx toolkit tasks check # 校验 active(frontmatter/命名规范/重名/依赖闭环/未闭合待办与 - [ ])
|
|
36
|
-
npx toolkit tasks normalize #
|
|
37
|
-
npx toolkit tasks normalize --
|
|
36
|
+
npx toolkit tasks normalize # 检查归档块(元数据/疑似任务块/日期漂移/排序/月份目录)
|
|
37
|
+
npx toolkit tasks normalize --check # 只读检查(normalize 默认行为,可显式声明;与 --fix 互斥)
|
|
38
|
+
npx toolkit tasks normalize --fix # 修复:补元数据 + 漂移块/错月文件迁移 + 降序重排 + 分隔清理
|
|
38
39
|
npx toolkit tasks --dir <path> # 指定任务目录(默认 .tasks)
|
|
39
40
|
npx toolkit tasks check --strict # 任务目录不存在时报错退出(默认容错为空结果)
|
|
40
41
|
```
|
|
@@ -48,7 +49,7 @@ npx toolkit tasks --scope 工程化 --since 2026-09-01 --until 2026-09-03
|
|
|
48
49
|
npx toolkit tasks --date 2026-09-03 # 单日(与 --since/--until 互斥)
|
|
49
50
|
```
|
|
50
51
|
|
|
51
|
-
⚠️ **过滤与视图**:`--owner/--scope/--status/--date/--since/--until` 只作用于所选视图,不指定 `--view` 时默认只查待完成(active)。想看归档需显式 `--view archived` 或 `--view all`;过滤落在空视图时会提示「无匹配任务」,并附 `--view`
|
|
52
|
+
⚠️ **过滤与视图**:`--owner/--scope/--status/--date/--since/--until` 只作用于所选视图,不指定 `--view` 时默认只查待完成(active)。想看归档需显式 `--view archived` 或 `--view all`;过滤落在空视图时会提示「无匹配任务」,并附 `--view` 引导提示。`--owner/--scope/--status` 均支持逗号多值;`--status` 的非法值会告警并忽略。
|
|
52
53
|
|
|
53
54
|
导入导出(扩展名驱动,均受过滤与脱敏开关影响):
|
|
54
55
|
|
|
@@ -64,6 +65,7 @@ npx toolkit tasks --import tasks.json --target archive # 直接写归档
|
|
|
64
65
|
|
|
65
66
|
- 导入兼容本工具三种导出产物;表头自动识别(中文/英文别名),`.toolkitrc.json` 的 `tasks.importColumns` 可自定义列映射,优先级高于内置
|
|
66
67
|
- 文件名冲突自动追加序号(`-1`、`-2`…),不覆盖已有任务;标题过长导致文件名截断时会告警
|
|
68
|
+
- 导出目标目录不存在时自动创建(`.csv` / `.xlsx` / `.json` 均适用)
|
|
67
69
|
|
|
68
70
|
### 任务视图与导出结构
|
|
69
71
|
|
|
@@ -82,7 +84,7 @@ npx toolkit tasks --import tasks.json --target archive # 直接写归档
|
|
|
82
84
|
| `depends` 依赖 | 数组 | ✅ | ❌ |
|
|
83
85
|
| `file` 来源文件 | 相对 `.tasks` 路径 | ✅ | ✅ |
|
|
84
86
|
|
|
85
|
-
- **终端分组视图**(`toolkit tasks`):按状态分组(待办→进行中→阻塞→已完成→已放弃→未标注),行显示 `日期 | 视图来源(all 时) | 负责人 | 任务名(范围)`,末尾输出按状态/负责人汇总;日期 = 待完成创建日 /
|
|
87
|
+
- **终端分组视图**(`toolkit tasks`):按状态分组(待办→进行中→阻塞→已完成→已放弃→未标注),行显示 `日期 | 视图来源(all 时) | 负责人 | 任务名(范围)`,末尾输出按状态/负责人汇总;日期 = 待完成创建日 / 已归档完成时间;`STATUS_ORDER` 之外的未知状态(如笔误)会以兜底分组展示并在汇总计入「其他」
|
|
86
88
|
- **CSV**(`.csv`,UTF-8 BOM,超集列,一次一视图):`视图, 任务名, 状态, 负责人, 范围, 创建日期, 更新日期, 完成时间, 依赖, 来源文件`
|
|
87
89
|
- **XLSX**(`.xlsx`,固定三 sheet):
|
|
88
90
|
- `待完成` sheet:任务名/状态/负责人/范围/创建日期/更新日期/完成时间/依赖/来源文件
|
|
@@ -129,6 +131,17 @@ npx toolkit changelog format # 仅格式化已有 CHANGELOG
|
|
|
129
131
|
npx toolkit changelog status / publish # 其余 changeset 子命令透传
|
|
130
132
|
```
|
|
131
133
|
|
|
134
|
+
消费变更集后 `changelog version` 会自动把分组标题转为中文(如 `### Patch Changes` → `### 🐛 补丁修复`)并补发布日期;变更条目本身建议**再润色为中文**,与仓库既有 CHANGELOG 风格一致:
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
## 1.5.3
|
|
138
|
+
> 2026-09-03 发布
|
|
139
|
+
|
|
140
|
+
### 🐛 补丁修复
|
|
141
|
+
|
|
142
|
+
- 修复 xxx:……(中文描述,可含多个条目)
|
|
143
|
+
```
|
|
144
|
+
|
|
132
145
|
### 通用选项
|
|
133
146
|
|
|
134
147
|
```bash
|
|
@@ -167,7 +180,7 @@ npx toolkit changelog status / publish # 其余 changeset 子命令透传
|
|
|
167
180
|
- **调用优先级**:`npx toolkit`(项目本地依赖)→ `toolkit`(全局安装);两者均不可用时直接以 Markdown 输出方案,不阻塞执行
|
|
168
181
|
- **规范来源**:优先读取项目根 `SPEC.md`,缺失时读取包内 `SPEC.md`(目录结构、文件命名与 frontmatter 字段均以该规范为准)
|
|
169
182
|
- **多人协作(先查后写)**:`.tasks/` 是多写者共享区,新建/更新任务前先 `toolkit tasks` 查 active 总览并核对 archive,避免重复建档;同一需求共用一个任务文件
|
|
170
|
-
- **校验**:`toolkit tasks check` 校验 active(frontmatter 合法性、owner/created/文件命名规范、重名、depends_on 闭环与引用归一、未闭合待办与 `- [ ]`,复选框/词标记均可配置关闭);`toolkit tasks normalize` 检查归档块(元数据完整性/疑似任务块/漂移/排序/月份目录),`--fix`
|
|
183
|
+
- **校验**:`toolkit tasks check` 校验 active(frontmatter 合法性、owner/created/文件命名规范、重名、depends_on 闭环与引用归一、未闭合待办与 `- [ ]`,复选框/词标记均可配置关闭);`toolkit tasks normalize` 检查归档块(元数据完整性/疑似任务块/漂移/排序/月份目录),`--fix` 补齐元数据、把漂移块迁移到对应日期文件、并把放错月份目录的归档文件移动到正确月份目录
|
|
171
184
|
- **归档**:任务完成后执行 `toolkit tasks archive`(可 `--dry-run` 预演);归档采用排他锁防并发覆盖。归档完成后若 `.changeset`(相对当前目录)无待发布变更集会有提示,仅为提醒,不影响归档
|
|
172
185
|
- **版本管理**:涉及发版时先 `toolkit changelog` 创建变更集,再 `toolkit changelog version` 发版并格式化 CHANGELOG
|
|
173
186
|
|
package/SPEC.md
CHANGED
|
@@ -99,7 +99,7 @@ scope: app
|
|
|
99
99
|
3. `待办` / `进行中` / `阻塞` 均不归档。
|
|
100
100
|
4. 归档文件按 `completed` 的日期(`YYYYMMDD`)划分。
|
|
101
101
|
5. 归档文件内任务按 `completed` **降序**排序(最新在前,`YYYY-MM-DD HH:mm` 定宽字符串比较即时间序)。
|
|
102
|
-
6. **完成时间口径**:`completed` 只填真实收工时间,日期应与归档文件日期一致;不一致属「日期漂移」,`toolkit tasks normalize` 会检出,`--fix` 自动把漂移块迁移到对应日期文件(迁移前可用 `normalize`
|
|
102
|
+
6. **完成时间口径**:`completed` 只填真实收工时间,日期应与归档文件日期一致;不一致属「日期漂移」,`toolkit tasks normalize` 会检出,`--fix` 自动把漂移块迁移到对应日期文件(迁移前可用 `normalize` 只读检查);归档文件放错月份目录(如 `archive/202608/20260903.md`)时 `--fix` 会将其移动到正确月份目录。
|
|
103
103
|
7. **疑似任务块**:任务块判定要求标题后首个非空行为含「完成时间」的元数据行;形如 `{年月日}-{负责人}-{简述}` 的 `## ` 标题后跟 `> ` 元数据但缺「完成时间」时,会被视为疑似任务块并在 `normalize` 检出提示人工确认(不自动修复)。
|
|
104
104
|
8. **并发归档防护**:归档采用排他锁(`.archive.lock`),检测到并发归档时跳过并告警;`--dry-run` 可预演归档动作而不落盘。
|
|
105
105
|
|
package/dist/cli.cjs
CHANGED
|
@@ -1,82 +1,82 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`).trimEnd(),
|
|
2
|
+
var it=()=>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,b=it();var Qe=require("commander"),et=require("module"),tt=require("child_process"),Q=require("fs"),nt=require("path");var bt=require("fs"),De=require("path");function B(t){let e=t.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!e)return{};let n={};for(let o of e[1].split(/\r?\n/)){let r=o.indexOf(":");if(r===-1)continue;let s=o.slice(0,r).trim(),i=o.slice(r+1).trim();(i.startsWith("'")&&i.endsWith("'")||i.startsWith('"')&&i.endsWith('"'))&&(i=i.slice(1,-1)),s&&(n[s]=i)}return n}function V(t){let e=t.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return e?t.slice(e[0].length):t}var z=require("fs"),Y=require("path");function R(t){if(!(0,z.existsSync)(t))return[];let e=[];for(let n of(0,z.readdirSync)(t)){let o=(0,Y.join)(t,n);if((0,z.statSync)(o).isDirectory())for(let r of(0,z.readdirSync)(o))r.endsWith(".md")&&e.push((0,Y.join)(o,r));else n.endsWith(".md")&&e.push(o)}return e}function Z(t){let n=(0,Y.basename)(t,(0,Y.extname)(t)).match(/^(\d{8})/);return n?n[1]:""}var ee=require("fs"),te=require("path"),q;function at(){if(q!==void 0)return q;q=null;let t=process.cwd();for(;;){let e=(0,te.join)(t,".toolkitrc.json");if((0,ee.existsSync)(e))try{q=JSON.parse((0,ee.readFileSync)(e,"utf8"));break}catch{}let n=(0,te.dirname)(t);if(n===t)break;t=n}return q}function D(t){let e=at();if(!e)return;let n=e[t];return typeof n=="object"&&n!==null?n:void 0}function ct(t,e){let n=t.trim().toLowerCase();return["1","true","on","yes"].includes(n)?!0:["0","false","off","no"].includes(n)?!1:e}function G(t,e,n,o){if(t!==void 0)return t;let r=process.env[e];return r!==void 0&&r!==""?ct(r,o):n!==void 0?n:o}var lt=[{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,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,replacement:"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:"GitHub\u7EC6\u7C92\u5EA6\u5BC6\u94A5",pattern:/\bgithub_pat_[A-Za-z0-9_]{80,}\b/g,replacement:"github_pat_****"},{name:"OpenAI\u5BC6\u94A5",pattern:/\bsk-[A-Za-z0-9]{20,}\b/g,replacement:"sk-****"},{name:"OpenAI\u9879\u76EE\u5BC6\u94A5",pattern:/\bsk-proj-[A-Za-z0-9_-]{40,}\b/g,replacement:"sk-proj-****"},{name:"Slack\u5BC6\u94A5",pattern:/\b(xox[baprs])-[A-Za-z0-9-]{10,}\b/g,replacement:"$1-****"},{name:"Slack\u5E94\u7528\u4EE4\u724C",pattern:/\bxapp-\d+-[A-Za-z0-9-]{15,}\b/g,replacement:"xapp-****"},{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.***.***"}];function Ae(){let t=D("redact");return t?{enabled:typeof t.enabled=="boolean"?t.enabled:void 0,disable:Array.isArray(t.disable)?t.disable.filter(e=>typeof e=="string"):void 0,rules:Array.isArray(t.rules)?t.rules:void 0}:null}function dt(){let t=Ae(),e=new Set(t?.disable??[]),n=[];for(let o of t?.rules??[])try{n.push({name:o.name,pattern:new RegExp(o.pattern,o.flags??""),replacement:o.replacement})}catch{}return[...n,...lt.filter(o=>!e.has(o.name))]}function C(t,e){if(!e||!t)return t;let n=t;for(let o of dt())n=n.replace(o.pattern,o.replacement);return n}function pe(t){return G(t,"FX_REDACT",Ae()?.enabled,!0)}var ge=require("fs"),I=require("path");function y(t){let e=t.trim(),n=e.match(/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/);if(n||(n=e.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/)),!n)return e;let o=`${n[1]}-${n[2].padStart(2,"0")}-${n[3].padStart(2,"0")}`;return n.length===4?`${o} 00:00`:`${o} ${n[4].padStart(2,"0")}:${n[5]}`}function Ce(t){let e=t.match(/^\d{8}-(.+?)-/);return e?e[1]:""}function ut(t,e){return`> \u8D1F\u8D23\u4EBA\uFF1A${Ce(t)||"\u672A\u6807\u6CE8"}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A-\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${y(e)}`}function Fe(t,e,n){let o={};if(n)for(let a of n.replace(/^>\s*/,"").split(/\s* \s*/)){let d=a.match(/^(负责人|状态|范围|完成时间)[::]\s*(.+)$/);d&&(o[d[1]]=d[2].trim())}let r=o.\u8D1F\u8D23\u4EBA||Ce(t)||"\u672A\u6807\u6CE8",s=o.\u72B6\u6001||"\u5DF2\u5B8C\u6210",i=o.\u8303\u56F4||"-";return`> \u8D1F\u8D23\u4EBA\uFF1A${r}\u3000\u72B6\u6001\uFF1A${s}\u3000\u8303\u56F4\uFF1A${i}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${y(e)}`}function L(t){let e=t.split(/\r?\n/),n=[];for(let s=0;s<e.length;s++){if(!/^## .+/.test(e[s]))continue;let i=s+1;for(;i<e.length&&e[i].trim()==="";)i++;let a=e[i]?.trim()??"";a.startsWith("> ")&&a.includes("\u5B8C\u6210\u65F6\u95F4")&&n.push(s)}if(n.length===0)return{header:t,blocks:[]};let o=e.slice(0,n[0]).join(`
|
|
3
|
+
`).trimEnd(),r=[];for(let s=0;s<n.length;s++){let i=n[s],a=s+1<n.length?n[s+1]:e.length,d=e.slice(i,a).join(`
|
|
4
4
|
`).trim().split(`
|
|
5
|
-
`),
|
|
6
|
-
`).trim()}function
|
|
5
|
+
`),c=d[0].replace(/^## /,""),l=null,f="",p=1;for(let u=1;u<d.length;u++){let g=d[u].trim();if(g.startsWith("> ")&&g.includes("\u5B8C\u6210\u65F6\u95F4")){l=d[u];let m=g.match(/完成时间:(.+)$/);m&&(f=m[1].trim()),p=u+1;break}}r.push({title:c,metaLine:l,completed:f,body:ft(d.slice(p))})}return{header:o,blocks:r}}function ft(t){let e=[...t];for(;;){for(;e.length>0&&e[e.length-1].trim()==="";)e.pop();if(e.length>0&&/^---+\s*$/.test(e[e.length-1].trim()))e.pop();else break}return e.join(`
|
|
6
|
+
`).trim()}function je(t){let e=t.split(/\r?\n/),n=[];for(let o=0;o<e.length;o++){let r=e[o].match(/^## (\d{8}-[^-]+-.+)$/)?.[1];if(!r)continue;let s=o+1;for(;s<e.length&&e[s].trim()==="";)s++;let i=e[s]?.trim()??"";i.startsWith("> ")&&!i.includes("\u5B8C\u6210\u65F6\u95F4")&&n.push(r)}return n}function X(t){let e=t.metaLine??(t.completed?ut(t.title,t.completed):null);return e?`## ${t.title}
|
|
7
7
|
|
|
8
8
|
${e}
|
|
9
9
|
|
|
10
10
|
${t.body}`:`## ${t.title}
|
|
11
11
|
|
|
12
|
-
${t.body}`}
|
|
13
|
-
`),
|
|
14
|
-
`);return`\uFEFF${n}${
|
|
15
|
-
${
|
|
12
|
+
${t.body}`}function ne(t){if(Array.isArray(t))return t.filter(r=>typeof r=="string");if(typeof t!="string")return[];let e=t.trim();if(!e||e==="[]")return[];try{let r=JSON.parse(e);if(Array.isArray(r))return r.map(String).filter(Boolean)}catch{}let n=[...e.matchAll(/'([^']*)'|"([^"]*)"/g)].map(r=>r[1]??r[2]).filter(Boolean);if(n.length>0)return n;let o=e.match(/^\[(.*)\]$/)?.[1];return o!=null?o.split(/[,,]/).map(r=>r.trim().replace(/^['"]|['"]$/g,"")).filter(Boolean):[]}var N=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u963B\u585E","\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03","\u672A\u6807\u6CE8"];function $(t){let e=t.trim().match(/^(\d{4})[-/]?(\d{1,2})[-/]?(\d{1,2})/);return e?`${e[1]}-${e[2].padStart(2,"0")}-${e[3].padStart(2,"0")}`:""}function Ee(t,e){return(0,I.relative)(t,e).split(I.sep).join("/")}function pt(t=".tasks"){let e=(0,I.join)(t,"active");return R(e).map(n=>{let o=(0,ge.readFileSync)(n,"utf8"),r=B(o);return{view:"\u5F85\u5B8C\u6210",title:o.split(/\r?\n/).find(i=>i.startsWith("# ")&&!i.startsWith("#!"))?.replace(/^#\s*/,"")||(0,I.basename)(n,".md"),status:r.status||"\u672A\u6807\u6CE8",owner:r.owner||"\u672A\u6807\u6CE8",scope:r.scope||"-",created:r.created||Z(n),updated:r.updated||"",completed:r.completed||"",depends:ne(r.depends_on),file:Ee(t,n)}})}function mt(t){let e={owner:"\u672A\u6807\u6CE8",status:"\u5DF2\u5B8C\u6210",scope:"-"};if(!t)return e;for(let n of t.replace(/^>\s*/,"").split(/\s* \s*/)){let[o,...r]=n.split(/[::]/),s=r.join("").trim();s&&(o.includes("\u8D1F\u8D23\u4EBA")?e.owner=s:o.includes("\u72B6\u6001")?e.status=s:o.includes("\u8303\u56F4")&&(e.scope=s))}return e}function gt(t=".tasks"){let e=(0,I.join)(t,"archive"),n=[];for(let o of R(e)){let r=(0,ge.readFileSync)(o,"utf8");for(let s of L(r).blocks){let i=mt(s.metaLine);n.push({view:"\u5DF2\u5F52\u6863",title:s.title,status:i.status,owner:i.owner,scope:i.scope,created:"",updated:"",completed:s.completed,depends:[],file:Ee(t,o)})}}return n}function me(t,e){return t===void 0?!0:Array.isArray(t)?t.includes(e):t===e}function ht(t,e){if(!me(e.owner,t.owner)||!me(e.scope,t.scope)||!me(e.status,t.status))return!1;if(e.date||e.since||e.until){let n=e.date?$(e.date):$(e.since||""),o=e.date?$(e.date):$(e.until||"");if(!n&&!o||!(t.view==="\u5DF2\u5F52\u6863"?[$(t.completed)]:[$(t.created),$(t.updated)].filter(Boolean)).some(i=>i&&(!n||i>=n)&&(!o||i<=o)))return!1}return!0}function Oe(t){return t.view==="\u5DF2\u5F52\u6863"?$(t.completed):$(t.created||t.updated||t.completed)}function Le(t){let e=t.view==="\u5DF2\u5F52\u6863"?t.completed:t.completed||t.updated||t.created,n=$(e);if(!n)return"";let o=e.match(/(\d{1,2}):(\d{2})/);return n.replace(/-/g,"")+(o?`${o[1].padStart(2,"0")}${o[2]}`:"0000")}function kt(t){let e=new Map(N.map((n,o)=>[n,o]));return[...t].sort((n,o)=>{let r=e.get(n.status)??N.length,s=e.get(o.status)??N.length;return r!==s?r-s:Le(o).localeCompare(Le(n))})}function wt(t){let e={},n={};for(let o of t)e[o.status]=(e[o.status]||0)+1,n[o.owner]=(n[o.owner]||0)+1;return{total:t.length,byStatus:e,byOwner:n}}function re(t=".tasks",e="active",n={}){let o=[];(e==="active"||e==="all")&&o.push(...pt(t)),(e==="archived"||e==="all")&&o.push(...gt(t)),o=o.filter(s=>ht(s,n));let r=kt(o);return{rows:r,summary:wt(r)}}function Ie(t=".tasks",e="active",n={},o=!0){let{rows:r,summary:s}=re(t,e,n);if(console.log(`\u4EFB\u52A1\u603B\u89C8\uFF08${e==="active"?"\u5F85\u5B8C\u6210":e==="archived"?"\u5DF2\u5F52\u6863":"\u5F85\u5B8C\u6210 + \u5DF2\u5F52\u6863"}\uFF09\uFF1A
|
|
13
|
+
`),r.length===0){let c=Object.values(n).some(l=>Array.isArray(l)?l.length>0:!!l);console.log(c?"\u65E0\u5339\u914D\u4EFB\u52A1":e==="archived"?"\u5F53\u524D\u65E0\u5DF2\u5F52\u6863\u4EFB\u52A1":e==="all"?"\u5F53\u524D\u65E0\u4EFB\u52A1":"\u5F53\u524D\u65E0\u5F85\u5B8C\u6210\u4EFB\u52A1");return}let a={};for(let c of r)(a[c.status]||=[]).push(c);let d=Object.keys(a).filter(c=>!N.includes(c)).sort();for(let c of[...N,...d]){let l=a[c]||[];if(l.length!==0){console.log(`\u3010${c}\u3011${l.length} \u9879`);for(let f of l){let p=e==="all"?`${f.view} `:"";console.log(` ${Oe(f)} ${p}${(f.owner||"\u672A\u6807\u6CE8").padEnd(8)} ${C(f.title,o)}\uFF08${f.scope||"-"}\uFF09`)}console.log("")}}vt(s)}function vt(t){let e=N.filter(r=>t.byStatus[r]),n=Object.keys(t.byStatus).filter(r=>!N.includes(r)),o=Object.keys(t.byOwner).sort((r,s)=>t.byOwner[s]-t.byOwner[r]);if(console.log(`\u5171 ${t.total} \u4E2A\u4EFB\u52A1`),e.length>0||n.length>0){let r=e.map(s=>`${s} ${t.byStatus[s]}`);n.length>0&&r.push(`\u5176\u4ED6 ${n.reduce((s,i)=>s+t.byStatus[i],0)}`),console.log(`\u6309\u72B6\u6001\uFF1A${r.join("\u3000")}`)}o.length>0&&console.log(`\u6309\u8D1F\u8D23\u4EBA\uFF1A${o.map(r=>`${r} ${t.byOwner[r]}`).join("\u3000")}`)}var W=require("fs"),_e=require("path"),Me=require("module");var yt=(0,Me.createRequire)(b);function he(t){(0,W.mkdirSync)((0,_e.dirname)(t),{recursive:!0})}var oe=[{label:"\u89C6\u56FE",value:t=>t.view==="\u5DF2\u5F52\u6863"?"\u5DF2\u5F52\u6863":"\u5F85\u5B8C\u6210"},{label:"\u4EFB\u52A1\u540D",value:t=>t.title},{label:"\u72B6\u6001",value:t=>t.status},{label:"\u8D1F\u8D23\u4EBA",value:t=>t.owner},{label:"\u8303\u56F4",value:t=>t.scope},{label:"\u521B\u5EFA\u65E5\u671F",value:t=>t.created?$(t.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:t=>t.updated?$(t.updated):""},{label:"\u5B8C\u6210\u65F6\u95F4",value:t=>t.completed},{label:"\u4F9D\u8D56",value:t=>t.depends.join(", ")},{label:"\u6765\u6E90\u6587\u4EF6",value:t=>t.file}],$t=[{label:"\u4EFB\u52A1\u540D",value:t=>t.title},{label:"\u72B6\u6001",value:t=>t.status},{label:"\u8D1F\u8D23\u4EBA",value:t=>t.owner},{label:"\u8303\u56F4",value:t=>t.scope},{label:"\u521B\u5EFA\u65E5\u671F",value:t=>t.created?$(t.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:t=>t.updated?$(t.updated):""},{label:"\u5B8C\u6210\u65F6\u95F4",value:t=>t.completed},{label:"\u4F9D\u8D56",value:t=>t.depends.join(", ")},{label:"\u6765\u6E90\u6587\u4EF6",value:t=>t.file}],xt=[{label:"\u4EFB\u52A1\u540D",value:t=>t.title},{label:"\u72B6\u6001",value:t=>t.status},{label:"\u8D1F\u8D23\u4EBA",value:t=>t.owner},{label:"\u8303\u56F4",value:t=>t.scope},{label:"\u5B8C\u6210\u65F6\u95F4",value:t=>t.completed},{label:"\u6765\u6E90\u6587\u4EF6",value:t=>t.file}];function St(t){return/[",\n\r]/.test(t)?`"${t.replace(/"/g,'""')}"`:t}function Tt(t,e=!0){let n=oe.map(r=>r.label).join(","),o=t.map(r=>oe.map(s=>{let i=s.label==="\u4EFB\u52A1\u540D"?C(s.value(r),e):s.value(r);return St(i)}).join(",")).join(`\r
|
|
14
|
+
`);return`\uFEFF${n}${o?`\r
|
|
15
|
+
${o}`:""}`}function ke(t,e,n=!0){let o=t.map(r=>({view:r.view==="\u5DF2\u5F52\u6863"?"archived":"active",title:C(r.title,n),status:r.status,owner:r.owner,scope:r.scope,created:r.created,updated:r.updated,completed:r.completed,depends:r.depends,file:r.file}));return JSON.stringify({summary:e,items:o},null,2)}async function Rt(t,e,n=!0){let o=yt("exceljs"),r=new o.Workbook,s=t.filter(u=>u.view==="\u5F85\u5B8C\u6210"),i=t.filter(u=>u.view==="\u5DF2\u5F52\u6863"),a=(u,g,m)=>{u.columns=g.map(w=>({header:w.label,key:w.label,width:Math.max(w.label.length+4,14)})),u.getRow(1).font={bold:!0};for(let w of m)u.addRow(g.map(T=>T.label==="\u4EFB\u52A1\u540D"?C(T.value(w),n):T.value(w)))},d=r.addWorksheet("\u5F85\u5B8C\u6210");a(d,$t,s);let c=r.addWorksheet("\u5DF2\u5F52\u6863");a(c,xt,i);let l=r.addWorksheet("\u6C47\u603B");l.columns=[{header:"\u7C7B\u522B",key:"k",width:10},{header:"\u6570\u503C",key:"v",width:12}];let f=(u,g)=>{l.addRow([u,""]).font={bold:!0};for(let[m,w]of Object.entries(g).sort((T,F)=>F[1]-T[1]))l.addRow([m,w])};l.addRow(["\u4EFB\u52A1\u603B\u6570",e.total]).font={bold:!0},f("\u6309\u72B6\u6001",e.byStatus),f("\u6309\u8D1F\u8D23\u4EBA",e.byOwner),l.addRow([]);let p=l.addRow(oe.map(u=>u.label));p.font={bold:!0};for(let u of t)l.addRow(oe.map(g=>g.label==="\u4EFB\u52A1\u540D"?C(g.value(u),n):g.value(u)));return Buffer.from(await r.xlsx.writeBuffer())}async function Be(t,e,n,o=!0){let r=t.split(".").pop()?.toLowerCase();if(r==="csv")he(t),(0,W.writeFileSync)(t,Tt(e,o),"utf8");else if(r==="json")he(t),(0,W.writeFileSync)(t,ke(e,n,o),"utf8");else if(r==="xlsx")he(t),(0,W.writeFileSync)(t,await Rt(e,n,o));else throw new Error(`\u4E0D\u652F\u6301\u7684\u5BFC\u51FA\u683C\u5F0F\u300C${r||""}\u300D\uFF0C\u4EC5\u652F\u6301 .csv / .xlsx / .json`)}var E=require("fs"),P=require("path"),Ue=require("module");var K=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u5DF2\u5B8C\u6210","\u963B\u585E","\u5DF2\u653E\u5F03"],se=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"];var ie=require("fs"),ae=require("path");function U(t,e){let n=(0,ae.join)((0,ae.dirname)(t),`.tmp-${process.pid}-${Date.now().toString(36)}`);(0,ie.writeFileSync)(n,e),(0,ie.renameSync)(n,t)}var At=(0,Ue.createRequire)(b),ze={\u4EFB\u52A1\u540D:"title",\u6807\u9898:"title",\u4E8B\u9879:"title",\u4EFB\u52A1:"title",\u4EFB\u52A1\u6807\u9898:"title",\u4E8B\u9879\u540D\u79F0:"title",title:"title",name:"title",task:"title",subject:"title",summary:"title",\u72B6\u6001:"status",status:"status",state:"status",\u8D1F\u8D23\u4EBA:"owner",\u7ECF\u529E\u4EBA:"owner",\u5904\u7406\u4EBA:"owner",\u6267\u884C\u4EBA:"owner",\u6307\u6D3E\u7ED9:"owner",owner:"owner",assignee:"owner",handler:"owner",\u8303\u56F4:"scope",\u9879\u76EE:"scope",\u6A21\u5757:"scope",scope:"scope",project:"scope",\u521B\u5EFA\u65E5\u671F:"created",\u521B\u5EFA\u65F6\u95F4:"created",created:"created",created_at:"created",createdat:"created",\u66F4\u65B0\u65E5\u671F:"updated",\u66F4\u65B0\u65F6\u95F4:"updated",updated:"updated",updated_at:"updated",updatedat:"updated",\u5B8C\u6210\u65F6\u95F4:"completed",\u5B8C\u6210\u65E5\u671F:"completed",\u622A\u6B62\u65F6\u95F4:"completed",\u622A\u6B62\u65E5\u671F:"completed",\u7ED3\u675F\u65F6\u95F4:"completed",completed:"completed",done:"completed",finished:"completed",completedat:"completed",due:"completed",\u4F9D\u8D56:"depends",\u4F9D\u8D56\u4EFB\u52A1:"depends",depends:"depends",depends_on:"depends",dependency:"depends",dependencies:"depends",\u5907\u6CE8:"body",\u63CF\u8FF0:"body",\u6B63\u6587:"body",\u8BF4\u660E:"body",description:"body",body:"body",note:"body",notes:"body",\u89C6\u56FE:"",\u6765\u6E90\u6587\u4EF6:"",\u6587\u4EF6:"",view:"",file:"",path:""},Ct=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u963B\u585E","\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"];function Ye(t,e={}){let n=new Map;return t.forEach((o,r)=>{let s=String(o??"").trim().toLowerCase();if(!s)return;let i;e[s]!==void 0&&(i=e[s]),i===void 0&&(i=ze[s]),i!==""&&i&&!n.has(i)&&n.set(i,r)}),n}function Ft(t){let e=[],n=t.replace(/^\uFEFF/,"").replace(/\r\n/g,`
|
|
16
16
|
`).replace(/\r/g,`
|
|
17
|
-
`),
|
|
18
|
-
`?(
|
|
17
|
+
`),o=[],r="",s=!1;for(let i=0;i<n.length;i++){let a=n[i];s?a==='"'?n[i+1]==='"'?(r+='"',i++):s=!1:r+=a:a==='"'?s=!0:a===","?(o.push(r),r=""):a===`
|
|
18
|
+
`?(o.push(r),e.push(o),o=[],r=""):r+=a}return(r!==""||o.length>0)&&(o.push(r),e.push(o)),e.filter(i=>i.length>1||(i[0]||"").trim()!=="")}function jt(t,e){let n=Ft(t);if(n.length===0)return[];let o=Ye(n[0],e),r=[];for(let s=1;s<n.length;s++){let i={};for(let[a,d]of o)i[a]=(n[s][d]??"").trim();(i.title||Object.keys(i).length>0)&&r.push(i)}return r}function Lt(t,e){let n=[];for(let o=1;o<=(t.rowCount||0);o++){let r=t.getRow(o),s=[];for(let a=1;a<=(r.cellCount||0);a++)s.push(r.getCell(a).text??"");if(s.every(a=>a.trim()===""))continue;let i=Ye(s,e);if(i.has("title")){for(let a=o+1;a<=t.rowCount;a++){let d=t.getRow(a),c={},l=!0;for(let[f,p]of i){let u=(d.getCell(p+1).text??"").trim();u&&(l=!1),c[f]=u}!l&&(c.title||Object.keys(c).length>0)&&n.push(c)}break}}return n}async function Et(t,e){let n=At("exceljs"),o=new n.Workbook;await o.xlsx.readFile(t);let r=[];for(let s of o.worksheets)s.name.includes("\u6C47\u603B")||r.push(...Lt(s,e));return r}function Ot(t,e){let n=JSON.parse(t),o=Array.isArray(n)?n:Array.isArray(n.items)?n.items:[],r=[];for(let s of o){if(!s||typeof s!="object")continue;let i={};for(let[a,d]of Object.entries(s)){let c=a.trim().toLowerCase(),l;e[c]!==void 0&&(l=e[c]),l===void 0&&(l=ze[c]),l&&(Array.isArray(d)?i[l]=d.join(","):d!=null&&(i[l]=String(d)))}r.push(i)}return r}function Dt(t){let e=t.trim().match(/^(\d{4})-(\d{1,2})-(\d{1,2})/);return e?`${e[1]}${e[2].padStart(2,"0")}${e[3].padStart(2,"0")}`:t.trim().replace(/[-/]/g,"")}function It(t){let e=t.trim().replace(/[\\/:*?"<>|]/g," ").replace(/\s+/g," "),n=e.length>24;return{slug:e.slice(0,24).trim().replace(/\s+/g,"-")||"\u4EFB\u52A1",truncated:n}}function _t(t,e,n){let o=(t.title||"").trim();if(!o)return n.push(`\u8DF3\u8FC7\u4E00\u884C\uFF1A\u7F3A\u5C11\u4EFB\u52A1\u540D\uFF08${Object.entries(t).slice(0,3).map(([c,l])=>`${c}=${l}`).join(" ")}\uFF09`),{ok:!1};let r=(t.status||"").trim()||"\u5F85\u529E";Ct.includes(r)||(n.push(`\u4EFB\u52A1\u300C${o}\u300D\u72B6\u6001\u300C${r}\u300D\u975E\u6CD5\uFF0C\u5DF2\u5F52\u4E3A\u5F85\u529E`),r="\u5F85\u529E");let s=t.completed?.trim()?y(t.completed.trim()):"";s&&!se.includes(r)&&(n.push(`\u4EFB\u52A1\u300C${o}\u300D\u5E26\u5B8C\u6210\u65F6\u95F4\u4F46\u72B6\u6001\u4E3A\u300C${r}\u300D\uFF0C\u5DF2\u7F6E\u4E3A\u5DF2\u5B8C\u6210`),r="\u5DF2\u5B8C\u6210");let i=(t.owner||"").trim()||e.owner||"";i=i.replace(/\s+/g,"");let a=(t.scope||"").trim()||e.scope||"-",d=(t.depends||"").split(/[,,;;]/).map(c=>c.trim()).filter(Boolean);return{ok:!0,t:{title:o,status:r,owner:i||"\u672A\u6807\u6CE8",scope:a,created:Dt(t.created||""),completed:s,depends:d,body:t.body?.trim()||""}}}function Ne(){let t=new Date,e=n=>String(n).padStart(2,"0");return`${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}`}function Mt(t,e,n,o){let r=e.created||Ne(),s=(0,P.join)(t,"active",r.slice(0,6)),{slug:i,truncated:a}=It(e.title);a&&o.push(`\u4EFB\u52A1\u300C${e.title}\u300D\u6807\u9898\u8FC7\u957F\uFF0C\u6587\u4EF6\u540D\u5DF2\u622A\u65AD`);let d=`${r}-${e.owner}-${i}`,c=1,l=(0,P.join)(s,`${d}.md`);for(;(0,E.existsSync)(l);)l=(0,P.join)(s,`${d}-${c++}.md`);let p=["---",`owner: ${e.owner}`,`status: ${e.status}`,`created: ${r}`,`updated: ${Ne()}`,`completed: ${e.completed?`'${e.completed}'`:"''"}`,`depends_on: ${JSON.stringify(e.depends)}`,`scope: ${e.scope}`,"---","",`# ${e.title}`].join(`
|
|
19
19
|
`)+(e.body?`
|
|
20
20
|
|
|
21
21
|
${e.body}
|
|
22
22
|
`:`
|
|
23
|
-
`);return n||((0,
|
|
23
|
+
`);return n||((0,E.mkdirSync)(s,{recursive:!0}),U(l,p)),l}function Bt(t,e,n,o){let r=e.completed||(e.status==="\u5DF2\u5B8C\u6210",""),s=r?$(r):"";if(!s)return o.push(`\u4EFB\u52A1\u300C${e.title}\u300D\u7F3A\u5C11\u5B8C\u6210\u65F6\u95F4\uFF0C\u65E0\u6CD5\u76F4\u63A5\u5F52\u6863\uFF08\u53EF\u6539\u7528 active \u76EE\u6807\uFF09`),null;let i=s.replace(/-/g,""),a=(0,P.join)(t,"archive",i.slice(0,6)),d=(0,P.join)(a,`${i}.md`),c=`> \u8D1F\u8D23\u4EBA\uFF1A${e.owner}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A${e.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${r}`,l=`# ${e.title}${e.body?`
|
|
24
24
|
|
|
25
|
-
${e.body}`:""}`,
|
|
25
|
+
${e.body}`:""}`,f={title:e.title,metaLine:c,completed:r,body:l};if(n)return d;(0,E.mkdirSync)(a,{recursive:!0});let p=`# ${i} \u5F52\u6863
|
|
26
26
|
|
|
27
27
|
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks import --target archive\` \u81EA\u52A8\u751F\u6210\u3002
|
|
28
|
-
`,
|
|
28
|
+
`,u=[];if((0,E.existsSync)(d)){let m=L((0,E.readFileSync)(d,"utf8"));m.header&&(p=m.header),u=m.blocks}u.push(f),u.sort((m,w)=>y(w.completed).localeCompare(y(m.completed)));let g=u.map(m=>`## ${m.title}
|
|
29
29
|
|
|
30
|
-
${
|
|
30
|
+
${m.metaLine}
|
|
31
31
|
|
|
32
|
-
${
|
|
32
|
+
${m.body}`);return U(d,`${p}
|
|
33
33
|
|
|
34
|
-
${
|
|
34
|
+
${g.join(`
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
38
|
`)}
|
|
39
|
-
`),
|
|
39
|
+
`),d}async function We(t,e=".tasks",n={}){let o=!!n.dryRun,r=[],s=Object.fromEntries(Object.entries(n.importColumns??{}).map(([p,u])=>[String(p).trim().toLowerCase(),String(u)])),i=t.split(".").pop()?.toLowerCase(),a;if(i==="csv")a=jt((0,E.readFileSync)(t,"utf8"),s);else if(i==="xlsx")a=await Et(t,s);else if(i==="json")a=Ot((0,E.readFileSync)(t,"utf8"),s);else throw new Error(`\u4E0D\u652F\u6301\u7684\u5BFC\u5165\u683C\u5F0F\u300C${i||""}\u300D\uFF0C\u4EC5\u652F\u6301 .csv / .xlsx / .json`);if(a.length===0)return console.log("\u672A\u8BC6\u522B\u5230\u53EF\u5BFC\u5165\u7684\u4EFB\u52A1\u884C\uFF08\u68C0\u67E5\u8868\u5934\u662F\u5426\u5305\u542B\u300C\u4EFB\u52A1\u540D/\u6807\u9898\u300D\u7B49\u5217\u540D\uFF09"),{created:0,skipped:0,warnings:r,dryRun:o};let d=0,c=0,l=n.target??"active";for(let p of a){let u=_t(p,n,r);if(!u.ok){c++;continue}let g=u.t;if(l==="archive"){let m=Bt(e,g,o,r);if(!m){c++;continue}console.log(`${o?"[\u9884\u6F14] \u5C06\u5199\u5165\u5F52\u6863":"\u5DF2\u5199\u5165\u5F52\u6863"} \u2192 ${m}`)}else{let m=Mt(e,g,o,r);console.log(`${o?"[\u9884\u6F14] \u5C06\u521B\u5EFA":"\u5DF2\u521B\u5EFA"} \u2192 ${m}`)}d++}for(let p of r)console.warn(`\u26A0\uFE0F ${p}`);return console.log(`${o?"\u9884\u6F14\u53EF\u5BFC\u5165":"\u5DF2\u5BFC\u5165"} ${d} \u4E2A\u4EFB\u52A1\uFF0C\u8DF3\u8FC7 ${c} \u884C`),{created:d,skipped:c,warnings:r,dryRun:o}}var A=require("fs"),S=require("path");var _=require("fs"),we=require("path"),Nt=600*1e3;function ce(t,e=Nt){let n=(0,we.join)(t,".archive.lock");for(let o=0;o<2;o++)try{return(0,_.openSync)(n,"wx")}catch{try{let r=(0,_.statSync)(n);if(Date.now()-r.mtimeMs<=e)return null;(0,_.unlinkSync)(n)}catch{return null}}return null}function le(t,e){(0,_.closeSync)(e);try{(0,_.unlinkSync)((0,we.join)(t,".archive.lock"))}catch{}}function Ut(t,e){let n=(0,S.resolve)(t),o=(0,S.resolve)(e);for(;n!==o&&n.startsWith(o+S.sep);){try{if((0,A.readdirSync)(n).length>0)break;(0,A.rmdirSync)(n)}catch{break}n=(0,S.dirname)(n)}}function Pe(t=".tasks",e=!0,n={}){let{dryRun:o=!1,warn:r=!0}=n,s=(0,S.join)(t,"active"),i=(0,S.join)(t,"archive"),a=[],d=R(s);if(d.length===0)return console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1\uFF0C\u65E0\u9700\u5F52\u6863"),{archived:0,skipped:[],warnings:a};let c=[],l=[];for(let u of d){let g=(0,A.readFileSync)(u,"utf8"),m=B(g);if(!se.includes(m.status))continue;let w=y(m.completed||"");if(!w){l.push((0,S.basename)(u,".md")),console.log(`\u8DF3\u8FC7 ${(0,S.basename)(u,".md")}\uFF1A\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`);continue}c.push({file:u,name:(0,S.basename)(u,".md"),owner:m.owner||"\u672A\u6807\u6CE8",status:m.status||"\u672A\u6807\u6CE8",scope:m.scope||"-",completed:w,body:V(g).trim()})}if(c.length===0)return console.log("\u672C\u6B21\u65E0\u53EF\u5F52\u6863\u4EFB\u52A1"),{archived:0,skipped:l,warnings:a};if(r)for(let u of c){let g=u.completed.replace(/-/g,"").slice(0,8),m=Z(u.file);m&&g!==m&&a.push(`\u4EFB\u52A1\u300C${u.name}\u300D\u5B8C\u6210\u65F6\u95F4 ${u.completed} \u4E0E\u521B\u5EFA\u65E5 ${m} \u4E0D\u4E00\u81F4\uFF0C\u8BF7\u786E\u8BA4 completed \u662F\u5426\u586B\u9519`)}let f={};for(let u of c){let g=u.completed.replace(/-/g,"").slice(0,8);(f[g]||=[]).push(u)}let p=null;if(!o&&(p=ce(t),p===null)){let u="\u68C0\u6D4B\u5230\u5F52\u6863\u9501 .archive.lock\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5F52\u6863\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7";return console.warn(`\u26A0\uFE0F ${u}`),{archived:0,skipped:l,warnings:[...a,u]}}try{let u=0,g=[];for(let[m,w]of Object.entries(f)){let T=(0,S.join)(i,m.slice(0,6)),F=(0,S.join)(T,`${m}.md`),H=`# ${m} \u5F52\u6863
|
|
40
40
|
|
|
41
|
-
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,
|
|
41
|
+
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,M=[];if((0,A.existsSync)(F)){let h=L((0,A.readFileSync)(F,"utf8"));h.header&&(H=h.header);for(let j of h.blocks)M.push({block:X(j),completed:j.completed})}if(r){let h=new Set(M.map(j=>j.block.match(/^## (.+)/)?.[1]??""));for(let j of w)h.has(j.name)&&a.push(`\u5F52\u6863\u6587\u4EF6\u5DF2\u5B58\u5728\u540C\u540D\u4EFB\u52A1\u300C${j.name}\u300D\uFF0C\u7591\u4F3C\u91CD\u590D\u5F52\u6863`)}M.push(...w.map(h=>({block:`## ${h.name}
|
|
42
42
|
|
|
43
|
-
> \u8D1F\u8D23\u4EBA\uFF1A${
|
|
43
|
+
> \u8D1F\u8D23\u4EBA\uFF1A${h.owner}\u3000\u72B6\u6001\uFF1A${h.status}\u3000\u8303\u56F4\uFF1A${h.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${h.completed}
|
|
44
44
|
|
|
45
|
-
${C(
|
|
45
|
+
${C(h.body,e)}`,completed:h.completed})));for(let h of M)h.completed=y(h.completed);if(M.sort((h,j)=>j.completed.localeCompare(h.completed)),o){console.log(`[\u9884\u6F14] \u5C06\u5F52\u6863 ${w.length} \u4E2A\u4EFB\u52A1 \u2192 ${m}.md`);for(let h of w)console.log(`[\u9884\u6F14] - ${h.name}`);continue}try{(0,A.mkdirSync)(T,{recursive:!0}),U(F,`${H}
|
|
46
46
|
|
|
47
|
-
${
|
|
47
|
+
${M.map(h=>h.block).join(`
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
51
|
`)}
|
|
52
|
-
`);for(let
|
|
52
|
+
`);for(let h of w)(0,A.unlinkSync)(h.file);Ut((0,S.dirname)(w[0].file),t),console.log(`\u5DF2\u5F52\u6863 ${w.length} \u4E2A\u4EFB\u52A1 \u2192 ${m}.md`),u++}catch(h){g.push(`${m}.md\uFF1A${h.message}`)}}for(let m of a)console.warn(`\u26A0\uFE0F ${m}`);if(g.length>0){console.error(`\u5F52\u6863\u5931\u8D25 ${g.length} \u4E2A\u65E5\u671F\u6587\u4EF6\uFF08active \u672A\u5220\u9664\uFF0C\u53EF\u91CD\u8BD5\uFF09\uFF1A`);for(let m of g)console.error(` - ${m}`)}return console.log(o?`[\u9884\u6F14] \u5171 ${c.length} \u4E2A\u4EFB\u52A1\u53EF\u5F52\u6863\uFF08\u672A\u843D\u76D8\uFF09`:`\u5171\u5F52\u6863 ${u} \u4E2A\u4EFB\u52A1${g.length>0?`\uFF0C\u5931\u8D25 ${g.length} \u4E2A`:""}`),{archived:o?c.length:u,skipped:l,warnings:a}}finally{if(p!==null)try{le(t,p)}catch{}}}var be=require("fs"),O=require("path");var He=K,zt=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"],Yt=/待办|待实施|待核对|待确认|待开始|待评估|待排期|待做|TODO/,Wt=/^\d{4}-\d{1,2}-\d{1,2}(?:[T\s]\d{1,2}:\d{2}(?::\d{2})?)?$/,Pt=/^\d{4}-\d{1,2}-\d{1,2}[T\s]\d{1,2}:\d{2}(?::\d{2})?$/,Ht=/^\d{8}-[^-]+-.+\.md$/;function Je(t){let e=t.match(/^(\d{4})-?(\d{1,2})-?(\d{1,2})/);if(!e)return!1;let n=+e[1],o=+e[2],r=+e[3];if(o<1||o>12||r<1||r>31)return!1;let s=new Date(Date.UTC(n,o-1,r));return s.getUTCFullYear()===n&&s.getUTCMonth()===o-1&&s.getUTCDate()===r}function Jt(t){let e=[],n=(0,O.basename)(t),o=(0,be.readFileSync)(t,"utf8");if(!/^---\r?\n[\s\S]*?\r?\n---/.test(o))return e.push({level:"error",file:n,message:"\u7F3A\u5C11 frontmatter"}),e;let s=B(o);if(s.status?He.includes(s.status)||e.push({level:"error",file:n,message:`status \u975E\u6CD5\u503C\u300C${s.status}\u300D\uFF0C\u5E94\u4E3A ${He.join(" / ")}`}):e.push({level:"error",file:n,message:"frontmatter \u7F3A\u5C11 status \u5B57\u6BB5"}),zt.includes(s.status)&&!s.completed&&e.push({level:"error",file:n,message:`status \u4E3A\u300C${s.status}\u300D\u4F46\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`}),s.completed){let f=s.completed.trim();if(!Wt.test(f))e.push({level:"warn",file:n,message:`completed\u300C${s.completed}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYY-MM-DD HH:mm`});else{let p=f.match(/^\d{4}-\d{1,2}-\d{1,2}/)?.[0]??f;Je(p)?Pt.test(f)||e.push({level:"warn",file:n,message:`completed\u300C${s.completed}\u300D\u5EFA\u8BAE\u8865\u5168\u4E3A\u5B8C\u6574\u65F6\u95F4 YYYY-MM-DD HH:mm`}):e.push({level:"warn",file:n,message:`completed\u300C${s.completed}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`})}}s.owner||e.push({level:"warn",file:n,message:"\u7F3A\u5C11 owner \u8D1F\u8D23\u4EBA\u5B57\u6BB5"}),s.created?/^\d{8}$/.test(s.created.trim())?Je(s.created.trim())||e.push({level:"warn",file:n,message:`created\u300C${s.created}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`}):e.push({level:"warn",file:n,message:`created\u300C${s.created}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYYMMDD`}):e.push({level:"warn",file:n,message:"\u7F3A\u5C11 created \u521B\u5EFA\u65E5\u671F\u5B57\u6BB5"});let i=n.match(/^(\d{8})-/);Ht.test(n)?s.created&&/^\d{8}$/.test(s.created.trim())&&i&&s.created.trim()!==i[1]&&e.push({level:"warn",file:n,message:`\u6587\u4EF6\u540D\u65E5\u671F ${i[1]} \u4E0E created ${s.created.trim()} \u4E0D\u4E00\u81F4`}):e.push({level:"warn",file:n,message:"\u6587\u4EF6\u540D\u4E0D\u7B26\u5408\u89C4\u8303 {YYYYMMDD}-{\u8D1F\u8D23\u4EBA}-{\u7B80\u8FF0}.md"});let a=V(o),c=D("check")?.pendingMarkers!==!1?a.match(Yt):null;return c&&e.push({level:"warn",file:n,message:`\u6B63\u6587\u542B\u672A\u95ED\u5408\u5F85\u529E\u6807\u8BB0\u300C${c[0]}\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u660E\u786E\u95ED\u73AF`}),D("check")?.includeCheckbox!==!1&&/^[-*]\s*\[ \]\s/m.test(a)&&e.push({level:"warn",file:n,message:"\u6B63\u6587\u542B\u672A\u52FE\u9009\u5F85\u529E\u9879\u300C- [ ]\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u52FE\u9009\u5B8C\u6210"}),e}function Ve(t=".tasks"){let e=(0,O.join)(t,"active"),n=R(e),o=[];for(let a of n)o.push(...Jt(a)),(0,O.dirname)(a)===e&&o.push({level:"warn",file:(0,O.basename)(a),message:"active \u4EFB\u52A1\u5E94\u653E\u5165 {YYYYMM} \u6708\u4EFD\u5B50\u76EE\u5F55\uFF08\u5F53\u524D\u76F4\u653E active \u6839\u76EE\u5F55\uFF09"});let r=new Map;for(let a of n){let d=(0,O.basename)(a,".md"),c=r.get(d);c?c.push(a):r.set(d,[a])}for(let[a,d]of r)d.length>1&&o.push({level:"warn",file:a,message:`\u5B58\u5728 ${d.length} \u4E2A\u540C\u540D\u4EFB\u52A1\u6587\u4EF6\uFF0C\u7591\u4F3C\u91CD\u590D\u5EFA\u6863`});o.push(...Vt(n));let s=o.filter(a=>a.level==="error").length,i=o.length-s;return{issues:o,errorCount:s,warnCount:i}}function Vt(t){let e=[],n=new Set(t.map(l=>(0,O.basename)(l,".md"))),o=new Map,r=l=>l.trim().replace(/\.md$/,"").trim();for(let l of t){let f=(0,O.basename)(l,".md"),p=(0,be.readFileSync)(l,"utf8"),u=B(p),g=ne(u.depends_on).map(r);o.set(f,g);for(let m of g)n.has(m)||e.push({level:"warn",file:f,message:`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${m}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u53EF\u80FD\u5DF2\u5F52\u6863\u6216\u6587\u4EF6\u540D\u62FC\u5199\u9519\u8BEF\uFF09`})}let s=0,i=1,a=2,d=new Map,c=(l,f)=>{d.set(l,i);for(let p of o.get(l)??[]){if(!n.has(p))continue;let u=d.get(p)??s;if(u===i)return[...f,p];if(u===s){let g=c(p,[...f,p]);if(g)return g}}return d.set(l,a),null};for(let l of o.keys())if((d.get(l)??s)===s){let f=c(l,[l]);if(f){e.push({level:"warn",file:l,message:`depends_on \u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56\uFF1A${f.join(" \u2192 ")}`});break}}return e}var v=require("fs"),x=require("path");var Zt=["\u8D1F\u8D23\u4EBA","\u72B6\u6001","\u8303\u56F4","\u5B8C\u6210\u65F6\u95F4"];function Ze(t){return Zt.every(e=>t.includes(e))}function qe(t=".tasks"){let e=(0,x.join)(t,"archive"),n=R(e),o=[];for(let r of n){let s=(0,x.basename)(r),i=s.replace(/\.md$/,""),a=(0,v.readFileSync)(r,"utf8"),{blocks:d}=L(a),c=(0,x.basename)((0,x.dirname)(r)),l=s.replace(/\.md$/,"");c&&l&&c!==l.slice(0,6)&&o.push({file:s,message:`\u5F52\u6863\u6587\u4EF6\u4F4D\u4E8E ${c} \u6708\u4EFD\u76EE\u5F55\uFF0C\u4E0E\u6587\u4EF6\u540D\u65E5\u671F ${l.slice(0,6)} \u4E0D\u4E00\u81F4`,fixable:!1});for(let f of je(a))o.push({file:s,message:`\u7591\u4F3C\u4EFB\u52A1\u5757\u300C${f}\u300D\u5143\u6570\u636E\u7F3A\u300C\u5B8C\u6210\u65F6\u95F4\u300D\uFF0C\u5DF2\u88AB\u5F52\u5165\u524D\u4E00\u5757\u6B63\u6587\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1});for(let f=1;f<d.length;f++){let p=y(d[f-1].completed),u=y(d[f].completed);if(p&&u&&p<u){o.push({file:s,message:"\u4EFB\u52A1\u5757\u672A\u6309\u5B8C\u6210\u65F6\u95F4\u964D\u5E8F\u6392\u5217",fixable:!0});break}}for(let f of d){f.metaLine?Ze(f.metaLine)||o.push({file:s,message:`\u5757\u300C${f.title}\u300D\u5143\u6570\u636E\u884C\u4E0D\u5B8C\u6574\uFF08\u7F3A\u8D1F\u8D23\u4EBA/\u72B6\u6001/\u8303\u56F4\u4E4B\u4E00\uFF09`,fixable:!!f.completed}):o.push({file:s,message:`\u5757\u300C${f.title}\u300D\u7F3A\u5C11\u5143\u6570\u636E\u884C\uFF08\u8D1F\u8D23\u4EBA/\u72B6\u6001/\u8303\u56F4/\u5B8C\u6210\u65F6\u95F4\uFF09`,fixable:!!f.completed});let p=y(f.completed),u=p.replace(/-/g,"").slice(0,8);u&&i&&u!==i&&o.push({file:s,message:`\u5757\u300C${f.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${p} \u4E0E\u5F52\u6863\u6587\u4EF6\u65E5\u671F ${i} \u4E0D\u4E00\u81F4`,fixable:!1})}}return o}function qt(t,e,n){let o=(0,x.join)(t,"archive",n.slice(0,6)),r=(0,x.join)(o,`${n}.md`);(0,v.mkdirSync)(o,{recursive:!0});let s=`# ${n} \u5F52\u6863
|
|
53
53
|
|
|
54
|
-
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,i=[];if((0,
|
|
54
|
+
> \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,i=[];if((0,v.existsSync)(r)){let c=L((0,v.readFileSync)(r,"utf8"));c.header&&(s=c.header),i.push(...c.blocks)}i.some(c=>c.title===e.title)&&console.warn(`\u26A0\uFE0F \u76EE\u6807 ${n}.md \u5DF2\u5B58\u5728\u540C\u540D\u5757\u300C${e.title}\u300D\uFF0C\u8FC1\u79FB\u5C06\u4EA7\u751F\u91CD\u590D`),i.push(e),i.sort((c,l)=>y(l.completed).localeCompare(y(c.completed)));let a=(0,v.existsSync)(r)&&(0,v.readFileSync)(r,"utf8").includes(`\r
|
|
55
55
|
`)?`\r
|
|
56
56
|
`:`
|
|
57
|
-
`,
|
|
57
|
+
`,d=`${s}
|
|
58
58
|
|
|
59
|
-
${i.map(
|
|
59
|
+
${i.map(X).join(`
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
63
63
|
`)}
|
|
64
|
-
`.replace(/\n/g,a);
|
|
64
|
+
`.replace(/\n/g,a);U(r,d),console.log(` \u5757\u300C${e.title}\u300D\u8FC1\u79FB \u2192 ${n}.md`)}function Ge(t=".tasks"){let e=(0,x.join)(t,"archive"),n=R(e),o=[],r=0,s=null;if(s=ce(t),s===null)return console.warn("\u26A0\uFE0F \u68C0\u6D4B\u5230\u5F52\u6863\u9501\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5199\u64CD\u4F5C\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7\u4FEE\u590D"),{issues:o,fixed:r};try{for(let i of n){let a=i,d=(0,x.basename)(a),c=d.replace(/\.md$/,""),l=(0,x.basename)((0,x.dirname)(a)),f=/^\d{8}$/.test(c)?c.slice(0,6):"";if(f&&l!==f){let k=(0,x.join)(e,f,d);(0,v.existsSync)(k)?console.warn(`\u26A0\uFE0F ${d}\uFF1A\u76EE\u6807\u6708\u4EFD\u76EE\u5F55 ${f} \u5DF2\u5B58\u5728\u540C\u540D\u6587\u4EF6\uFF0C\u672A\u81EA\u52A8\u79FB\u52A8\uFF08\u9700\u4EBA\u5DE5\u5904\u7406\uFF09`):((0,v.mkdirSync)((0,x.join)(e,f),{recursive:!0}),(0,v.renameSync)(a,k),a=k)}let p=(0,v.readFileSync)(a,"utf8"),{header:u,blocks:g}=L(p),m=[],w=a!==i;a!==i&&(m.push(`\u79FB\u52A8\u81F3 ${(0,x.basename)((0,x.dirname)(a))} \u6708\u4EFD\u76EE\u5F55`),r++);for(let k of g)k.completed&&(!k.metaLine||!Ze(k.metaLine))&&(k.metaLine=Fe(k.title,k.completed,k.metaLine),m.push(`\u8865\u5143\u6570\u636E\u300C${k.title}\u300D`),w=!0,r++);let T=[],F=0;for(let k of g){let J=k.completed?y(k.completed).replace(/-/g,"").slice(0,8):"";J&&J!==c?(qt(t,k,J),F++,w=!0):T.push(k)}F>0&&(m.push(`\u8FC1\u79FB ${F} \u4E2A\u6F02\u79FB\u5757`),r+=F);let H=T.filter(k=>k.completed),M=T.filter(k=>!k.completed),h=[...H].sort((k,J)=>y(J.completed).localeCompare(y(k.completed)));JSON.stringify(h.map(k=>k.title))!==JSON.stringify(H.map(k=>k.title))&&(T.splice(0,T.length,...h,...M),m.push("\u964D\u5E8F\u91CD\u6392"),r++,w=!0);let Re=/^---\s*\r?\n\r?\n---/m.test(p);Re&&(m.push("\u6E05\u7406\u5197\u4F59\u5206\u9694\u7B26"),r++);let st=p.includes(`\r
|
|
65
65
|
`)?`\r
|
|
66
66
|
`:`
|
|
67
|
-
`;if(
|
|
67
|
+
`;if(g.length>0&&T.length===0){(0,v.existsSync)(a)&&(0,v.unlinkSync)(a);try{(0,v.rmdirSync)((0,x.dirname)(a))}catch{}m.push("\u5220\u9664\u7A7A\u5F52\u6863\u6587\u4EF6"),w=!0}else if(w||Re){let k=((u?u+`
|
|
68
68
|
|
|
69
|
-
`:"")+
|
|
69
|
+
`:"")+T.map(X).join(`
|
|
70
70
|
|
|
71
71
|
---
|
|
72
72
|
|
|
73
73
|
`)+`
|
|
74
|
-
`).replace(/\n/g,
|
|
74
|
+
`).replace(/\n/g,st);U(a,k)}m.length>0&&console.log(` ${d}: ${m.join("\u3001")}`)}return{issues:o,fixed:r}}finally{if(s!==null)try{le(t,s)}catch{}}}var ve={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"}},ye="zh";var de=require("fs");var Xe=require("fs"),$e=require("path");function Ke(t){let e=[],n=new Set(["node_modules",".git","dist","coverage"]),o=r=>{let s;try{s=(0,Xe.readdirSync)(r,{withFileTypes:!0})}catch{return}for(let i of s)if(i.isDirectory()){if(n.has(i.name))continue;o((0,$e.join)(r,i.name))}else i.name==="CHANGELOG.md"&&e.push((0,$e.join)(r,i.name))};return o(t),e}function xe(){let t=new Date,e=n=>String(n).padStart(2,"0");return`${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}`}function Gt(t,e,n,o=!0){let r=(0,de.readFileSync)(t,"utf8"),s=r.includes(`\r
|
|
75
75
|
`)?`\r
|
|
76
76
|
`:`
|
|
77
|
-
`,i=
|
|
78
|
-
`),a=i;for(let[
|
|
77
|
+
`,i=r.replace(/\r\n/g,`
|
|
78
|
+
`),a=i;for(let[p,u]of Object.entries(n.replacements))a=a.replaceAll(p,u);for(a=a.replace(/^- [0-9a-f]{7}: /gm,"- ");a.includes(`${n.deps}
|
|
79
79
|
${n.deps}`);)a=a.replace(`${n.deps}
|
|
80
|
-
${n.deps}`,n.deps);for(;;){let
|
|
81
|
-
`),
|
|
82
|
-
`),
|
|
80
|
+
${n.deps}`,n.deps);for(;;){let p=a.replace(/^- (.+)\n- \1$/gm,"- $1");if(p===a)break;a=p}let d=a.split(`
|
|
81
|
+
`),c=[];for(let p=0;p<d.length;p++)if(c.push(d[p]),/^## \d+\.\d+\.\d+/.test(d[p])){let u=p+1;for(;u<d.length&&d[u].trim()==="";)u++;d[u]?.startsWith("> ")&&/^> \d{4}-\d{2}-\d{2} (?:发布|released)$/.test(d[u].trim())||c.push(`> ${e} ${n.released}`)}let l=c.join(`
|
|
82
|
+
`),f=C(l,o);return f!==i?((0,de.writeFileSync)(t,f.replace(/\n/g,s),"utf8"),!0):!1}function Se(t,e,n,o=!0){let r=[];for(let s of Ke(t))Gt(s,e,n,o)&&r.push(s);if(r.length===0)console.log("\u65E0 CHANGELOG \u9700\u8981\u66F4\u65B0");else for(let s of r)console.log(`changelog \u5DF2\u66F4\u65B0\uFF1A${s}`);return r}var rt=(0,et.createRequire)(b),Xt=rt.resolve("@changesets/cli/bin.js"),{version:Kt}=rt("../package.json"),Te=t=>{let e=(0,tt.spawnSync)(process.execPath,[Xt,...t],{stdio:"inherit"});e.status!==0&&process.exit(e.status??1)};function Qt(){if(process.platform==="win32")try{process.stdout.setDefaultEncoding("utf8"),process.stderr.setDefaultEncoding("utf8")}catch{}}function ot(){let t=D("check");return typeof t?.warnings=="boolean"?t.warnings:void 0}function en(){let e=D("changelog")?.languages;if(!e||typeof e!="object")return ve;let n={...ve};for(let[o,r]of Object.entries(e))r&&typeof r=="object"&&(n[o]=r);return n}function tn(t=".changeset"){if(!(0,Q.existsSync)(t))return!1;try{return(0,Q.readdirSync)(t).some(e=>e.endsWith(".md")&&e!=="README.md")}catch{return!1}}function nn(t=".tasks"){return R((0,nt.join)(t,"active")).length>0}function ue(t){if(t.length===0){console.log("\u672A\u53D1\u73B0\u95EE\u9898");return}for(let e of t)console.log(` ${e.file}: ${e.message}`)}var fe=new Qe.Command;fe.name("toolkit").description("\u5F00\u53D1\u5DE5\u7A0B\u5316\u5DE5\u5177\u96C6\uFF1A\u4EFB\u52A1\u7BA1\u7406 + \u591A\u8BED\u8A00 CHANGELOG \u53D1\u5E03").version(Kt,"-v, --version","\u663E\u793A\u7248\u672C\u53F7").enablePositionalOptions(!0);fe.command("tasks").description("\u4EFB\u52A1\u7BA1\u7406").option("--dir <path>","\u4EFB\u52A1\u76EE\u5F55",".tasks").option("--redact","\u5F00\u542F\u9690\u79C1\u8131\u654F").option("--no-redact","\u5173\u95ED\u9690\u79C1\u8131\u654F").option("--warn","\u5F00\u542F\u8F6F\u544A\u8B66").option("--no-warn","\u5173\u95ED\u8F6F\u544A\u8B66").option("--dry-run","\u9884\u6F14\uFF08archive \u5F52\u6863 / import \u5BFC\u5165\u53EA\u9884\u89C8\uFF0C\u4E0D\u843D\u76D8\uFF09").option("--fix","\u5F52\u4E00\u5316\u4FEE\u590D\uFF08\u4EC5 normalize \u6709\u6548\uFF09").option("--check","\u5F52\u4E00\u5316\u53EA\u8BFB\u68C0\u67E5\uFF08normalize \u9ED8\u8BA4\u884C\u4E3A\uFF0C\u53EF\u663E\u5F0F\u58F0\u660E\uFF1B\u4E0D\u80FD\u4E0E --fix \u540C\u7528\uFF09").option("--view <view>","\u4EFB\u52A1\u89C6\u56FE\uFF1Aactive / archived / all\uFF08\u9ED8\u8BA4 active\uFF09").option("--owner <name>","\u6309\u8D1F\u8D23\u4EBA\u8FC7\u6EE4\uFF08\u9017\u53F7\u5206\u9694\u591A\u503C\uFF09").option("--scope <scope>","\u6309\u8303\u56F4\u8FC7\u6EE4\uFF08\u9017\u53F7\u5206\u9694\u591A\u503C\uFF09").option("--status <status>","\u6309\u72B6\u6001\u8FC7\u6EE4\uFF08\u9017\u53F7\u5206\u9694\u591A\u503C\uFF09").option("--date <date>","\u6309\u5355\u65E5\u8FC7\u6EE4\uFF08YYYY-MM-DD\uFF0C\u4E0E --since/--until \u4E92\u65A5\uFF09").option("--since <date>","\u8D77\u59CB\u65E5\u671F\uFF08\u542B\u5F53\u5929\uFF09").option("--until <date>","\u7ED3\u675F\u65E5\u671F\uFF08\u542B\u5F53\u5929\uFF09").option("--export <path>","\u5BFC\u51FA\u5230\u6587\u4EF6\uFF08.csv / .xlsx / .json\uFF09").option("--format <format>","\u8F93\u51FA\u683C\u5F0F\uFF08json\uFF0C\u8F93\u51FA\u5230 stdout\uFF09").option("--import <file>","\u4ECE\u6587\u4EF6\u5BFC\u5165\u4EFB\u52A1\uFF08.csv / .xlsx / .json\uFF09").option("--target <target>","\u5BFC\u5165\u76EE\u6807\uFF1Aactive / archive\uFF08\u9ED8\u8BA4 active\uFF09").option("--strict","\u4EFB\u52A1\u76EE\u5F55\u4E0D\u5B58\u5728\u65F6\u62A5\u9519\u9000\u51FA\uFF08\u9ED8\u8BA4\u5BB9\u9519\u4E3A\u7A7A\u7ED3\u679C\uFF09").argument("[command]","\u5B50\u547D\u4EE4\uFF1Aarchive / check / normalize\uFF0C\u7559\u7A7A\u4E3A\u603B\u89C8\uFF08\u542B\u5BFC\u5165\u7528 --import\uFF09").action(async(t,e)=>{let n=pe(e.redact),o=G(e.warn,"FX_CHECK_WARN",ot(),!0),r=e.dir;if(e.strict&&!(0,Q.existsSync)(r)){console.error(`\u26A0\uFE0F \u4EFB\u52A1\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${r}`),process.exitCode=1;return}if(e.import){if(t||e.export||e.format){console.error("\u26A0\uFE0F --import \u4E3A\u72EC\u7ACB\u6A21\u5F0F\uFF0C\u4E0D\u80FD\u4E0E\u5B50\u547D\u4EE4\u3001--export\u3001--format \u540C\u65F6\u4F7F\u7528"),process.exitCode=1;return}let s=D("tasks"),i=s?.importColumns&&typeof s.importColumns=="object"?s.importColumns:void 0,a=e.target??"active";if(!["active","archive"].includes(a)){console.error(`\u26A0\uFE0F \u975E\u6CD5\u5BFC\u5165\u76EE\u6807\u300C${a}\u300D\uFF0C\u4EC5\u652F\u6301 active / archive`),process.exitCode=1;return}try{await We(e.import,r,{owner:e.owner,scope:e.scope,target:a,dryRun:e.dryRun,importColumns:i})}catch(d){console.error(`\u26A0\uFE0F \u5BFC\u5165\u5931\u8D25\uFF1A${d.message}`),process.exitCode=1}return}if(t==="archive"){let s=Pe(r,n,{dryRun:e.dryRun,warn:o});o&&!e.dryRun&&s.archived>0&&!tn()&&console.warn("\u26A0\uFE0F \u672C\u6B21\u5F52\u6863\u4E86\u4EFB\u52A1\uFF0C\u4F46 .changeset \u65E0\u5F85\u53D1\u5E03\u53D8\u66F4\u96C6\uFF0C\u5982\u9700\u53D1\u7248\u8BF7\u5148\u521B\u5EFA\u53D8\u66F4\u96C6")}else if(t==="check"){let s=Ve(r);console.log("\u4EFB\u52A1\u6821\u9A8C\uFF1A"),console.log(`\u3010error\u3011${s.errorCount} \u9879`),ue(s.issues.filter(i=>i.level==="error")),o?(console.log(`\u3010warn\u3011${s.warnCount} \u9879`),ue(s.issues.filter(i=>i.level==="warn"))):console.log("\uFF08\u8F6F\u544A\u8B66\u5DF2\u5173\u95ED\uFF0Cwarn \u4E0D\u5C55\u793A\uFF09"),s.errorCount>0&&(process.exitCode=1)}else if(t==="normalize")if(e.fix&&e.check)console.error("\u26A0\uFE0F --fix \u4E0E --check \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528"),process.exitCode=1;else if(e.fix){let s=Ge(r);console.log(`\u5DF2\u4FEE\u590D ${s.fixed} \u5904`),s.issues.length>0&&(console.log("\u4EE5\u4E0B\u95EE\u9898\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF1A"),ue(s.issues))}else{let s=qe(r);console.log(`\u5F52\u6863\u5F52\u4E00\u5316\u68C0\u67E5\uFF1A\u53D1\u73B0 ${s.length} \u5904\u95EE\u9898`),ue(s)}else{let s=e.view??"active";if(!["active","archived","all"].includes(s)){console.error(`\u26A0\uFE0F \u975E\u6CD5\u89C6\u56FE\u300C${s}\u300D\uFF0C\u4EC5\u652F\u6301 active / archived / all`),process.exitCode=1;return}if(e.date&&(e.since||e.until)){console.error("\u26A0\uFE0F --date \u4E0D\u80FD\u4E0E --since / --until \u540C\u65F6\u4F7F\u7528"),process.exitCode=1;return}if(e.export&&e.format){console.error("\u26A0\uFE0F --export \u4E0E --format \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\uFF08--format json \u8F93\u51FA\u5230 stdout\uFF09"),process.exitCode=1;return}if(e.format&&e.format!=="json"){console.error(`\u26A0\uFE0F \u4E0D\u652F\u6301\u7684\u8F93\u51FA\u683C\u5F0F\u300C${e.format}\u300D\uFF0C\u4EC5\u652F\u6301 json`),process.exitCode=1;return}let i={},a=c=>c?c.split(/[,,]/).map(l=>l.trim()).filter(Boolean):void 0;i.owner=a(e.owner),i.scope=a(e.scope);let d=a(e.status);if(d){let c=d.filter(l=>!K.includes(l));c.length>0&&console.warn(`\u26A0\uFE0F \u5FFD\u7565\u975E\u6CD5\u72B6\u6001\u503C\uFF1A${c.join("\u3001")}\uFF08\u5408\u6CD5\uFF1A\u5F85\u529E/\u8FDB\u884C\u4E2D/\u5DF2\u5B8C\u6210/\u963B\u585E/\u5DF2\u653E\u5F03\uFF09`),i.status=d.filter(l=>K.includes(l))}e.date&&(i.date=e.date),e.since&&(i.since=e.since),e.until&&(i.until=e.until);try{let{rows:c,summary:l}=re(r,s,i);if(e.export)await Be(e.export,c,l,n),console.log(`\u5DF2\u5BFC\u51FA ${c.length} \u4E2A\u4EFB\u52A1 \u2192 ${e.export}`);else if(e.format==="json")console.log(ke(c,l,n));else{Ie(r,s,i,n);let f=!!(e.owner||e.scope||e.status||e.date||e.since||e.until);!e.view&&f&&c.length===0&&console.log("\uFF08\u63D0\u793A\uFF1A\u8FC7\u6EE4\u9ED8\u8BA4\u4F5C\u7528\u4E8E\u5F85\u5B8C\u6210\u89C6\u56FE\uFF0C\u67E5\u770B\u5F52\u6863\u8BF7\u52A0 --view archived \u6216 --view all\uFF09")}}catch(c){console.error(`\u26A0\uFE0F \u64CD\u4F5C\u5931\u8D25\uFF1A${c.message}`),process.exitCode=1}}});fe.command("changelog").description("\u591A\u8BED\u8A00 CHANGELOG\uFF08\u5C01\u88C5 changesets\uFF09").option("--lang <lang>","\u8BED\u8A00 zh/en",ye).option("--redact","\u5F00\u542F\u9690\u79C1\u8131\u654F").option("--no-redact","\u5173\u95ED\u9690\u79C1\u8131\u654F").option("--warn","\u5F00\u542F\u8F6F\u544A\u8B66").option("--no-warn","\u5173\u95ED\u8F6F\u544A\u8B66").argument("[command...]","\u5B50\u547D\u4EE4\u53CA\u53C2\u6570\uFF08\u900F\u4F20\u7ED9 changesets\uFF09").passThroughOptions(!0).action((t,e)=>{let n=pe(e.redact),o=G(e.warn,"FX_CHECK_WARN",ot(),!0),r=en(),s=r[e.lang]??r[ye],i=t[0];i==="version"?(o&&nn()&&console.warn("\u26A0\uFE0F \u5B58\u5728\u672A\u5F52\u6863\u7684 active \u4EFB\u52A1\uFF0C\u5EFA\u8BAE\u5148\u5F52\u6863\u518D\u53D1\u7248"),Te(["version"]),Se(".",xe(),s,n)):i==="format"?Se(".",xe(),s,n):Te(i?t:[])});Qt();fe.parse();
|