diff --git a/CLAUDE.md b/CLAUDE.md index dc9de24..c6e0c44 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,7 +37,7 @@ pnpm dev # http://localhost:3000 ;Console 在 /_console/ ;管理员 adm | A3 开发侧账号 | 当前 Claude Code 会话身份(共享 GitHub 身份,认领评论须带会话 ID) | | A4 验收侧处理人 | 工作项创建人 | | B 状态标签 | 待建:`status:待细化 / 待开发 / 方案确认中 / AI开发中 / 自测报告中 / PR审查中 / PM验收中 / 人工测试中 / 已完成 / 已打回 / 已挂起`;标记 `平台能力受限 / 人工介入 / 待复测`;类型 `回归缺陷 / 验收记录 / 试运行缺陷`;优先级 `P1 / P2 / P3`(首次使用 issue 流程前用 `gh label create` 一次建齐) | -| C1 分支命名 | `issue--`(本次初建使用平台指定分支 `claude/standard-assessment-system-qvswav`) | +| C1 分支命名 | `issue--`(本次初建使用平台指定分支 `claude/standard-assessment-system-qvswav`);PR 合并后 head 分支由 GitHub 自动删除(仓库设置 Automatically delete head branches,维护者 2026-09-03 启用),会话内不再用 git 删远端分支(代理拒绝) | | C2 worktree 目录 | 仓库外 `../kpi-` | | C3 worktree 初始化 | `pnpm install` | | C4 发布级别 | ① main-only(开发期) | diff --git a/README.md b/README.md index 274f047..2bc7138 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ | 文档 | 内容 | |---|---| | [docs/需求/KPI考核管理系统-功能性需求文档-V1.3.md](docs/需求/KPI考核管理系统-功能性需求文档-V1.3.md) | 客户提供的原始功能性需求(V1.3,2026-09-02) | -| [docs/00-设计方案.md](docs/00-设计方案.md) | 设计方案 V1.0(客户 2026-09-02 确认,唯一需求基准) | +| [docs/00-设计方案.md](docs/00-设计方案.md) | 设计方案 V1.0(客户 2026-09-02 确认,唯一需求基准);Word 成品在 [docs/交付/](docs/交付/)(V0.9 送审稿、V1.0 客户确认版),由 `pnpm docs:docx` 从本源稿生成 | | [docs/01-需求解读报告.md](docs/01-需求解读报告.md) | 场景地图、平台能力覆盖度、风险、疑点(疑点已由设计方案 V1.0 关闭) | | [docs/02-总体方案蓝图.md](docs/02-总体方案蓝图.md) | os 能力映射、对象模型总图、模块依赖与开发顺序 | | [docs/03-方案分级.md](docs/03-方案分级.md) | 三问分级;三处多路径选型已确认路径 A | diff --git "a/docs/\344\272\244\344\273\230/KPI\350\200\203\346\240\270\347\256\241\347\220\206\347\263\273\347\273\237-\350\256\276\350\256\241\346\226\271\346\241\210-V0.9.docx" "b/docs/\344\272\244\344\273\230/KPI\350\200\203\346\240\270\347\256\241\347\220\206\347\263\273\347\273\237-\350\256\276\350\256\241\346\226\271\346\241\210-V0.9.docx" new file mode 100644 index 0000000..f236fe4 Binary files /dev/null and "b/docs/\344\272\244\344\273\230/KPI\350\200\203\346\240\270\347\256\241\347\220\206\347\263\273\347\273\237-\350\256\276\350\256\241\346\226\271\346\241\210-V0.9.docx" differ diff --git "a/docs/\344\272\244\344\273\230/KPI\350\200\203\346\240\270\347\256\241\347\220\206\347\263\273\347\273\237-\350\256\276\350\256\241\346\226\271\346\241\210-V1.0.docx" "b/docs/\344\272\244\344\273\230/KPI\350\200\203\346\240\270\347\256\241\347\220\206\347\263\273\347\273\237-\350\256\276\350\256\241\346\226\271\346\241\210-V1.0.docx" new file mode 100644 index 0000000..6d37346 Binary files /dev/null and "b/docs/\344\272\244\344\273\230/KPI\350\200\203\346\240\270\347\256\241\347\220\206\347\263\273\347\273\237-\350\256\276\350\256\241\346\226\271\346\241\210-V1.0.docx" differ diff --git a/package.json b/package.json index f6fa57d..e3d5411 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "typecheck": "tsc --noEmit", "test": "vitest run", "verify": "pnpm validate && pnpm typecheck && pnpm test", - "e2e": "node scripts/e2e-flow.mjs" + "e2e": "node scripts/e2e-flow.mjs", + "docs:docx": "node scripts/md2docx.cjs docs/00-设计方案.md docs/交付/KPI考核管理系统-设计方案-V1.0.docx" }, "dependencies": { "@objectstack/connector-mcp": "^17.2.0", @@ -32,6 +33,7 @@ }, "devDependencies": { "@objectstack/cli": "^17.2.0", + "docx": "^9.7.1", "typescript": "^6.0.0", "vitest": "^4.1.10" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef7ce25..d5278b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,20 +25,23 @@ importers: version: 17.2.0 '@objectstack/runtime': specifier: ^17.2.0 - version: 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + version: 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': specifier: ^17.2.0 version: 17.2.0 devDependencies: '@objectstack/cli': specifier: ^17.2.0 - version: 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + version: 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + docx: + specifier: ^9.7.1 + version: 9.7.1 typescript: specifier: ^6.0.0 version: 6.0.3 vitest: specifier: ^4.1.10 - version: 4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) + version: 4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) packages: @@ -754,6 +757,9 @@ packages: '@types/node@14.18.63': resolution: {integrity: sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==} + '@types/node@25.9.5': + resolution: {integrity: sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==} + '@types/webidl-conversions@7.0.3': resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} @@ -1149,6 +1155,10 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + docx@9.7.1: + resolution: {integrity: sha512-ilXFf9Moz47ABjFpDiA5s1w9lpb4EFSp7+5iiJSbfyYDM+bpZdAgLlSr7fW4aXhVe/E+F6QCv0EvRVFEd5CsWg==} + engines: {node: '>=10'} + dotenv-flow@4.1.0: resolution: {integrity: sha512-0cwP9jpQBQfyHwvE0cRhraZMkdV45TQedA8AAUZMsFzvmLcQyc1HPv+oX0OOYwLFjIlvgVepQ+WuQHbqDaHJZg==} engines: {node: '>= 12.0.0'} @@ -1345,6 +1355,9 @@ packages: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -1649,6 +1662,9 @@ packages: mingo@7.2.4: resolution: {integrity: sha512-KrxHKzMMguL+G1lBC6YbU5UTXdw2viwVHNTPzNYVfEQfSAoetC3M1a7rlveOksn/96oNy+QwBlIXvx/q6rWyxQ==} + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.2.6: resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} @@ -1716,6 +1732,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@5.1.16: + resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} + engines: {node: ^18 || >=20} + hasBin: true + nanoid@6.0.1: resolution: {integrity: sha512-3wVS3i51pE2pi1k5FFL/95BGfVS0kSsvDVuGXHOtxox/TywUmtgq+3qiTOTbs9J7KfHaXPiN171k/A6dBnaXFw==} engines: {node: ^22 || ^24 || >=26} @@ -1920,6 +1941,10 @@ packages: samlify@2.13.1: resolution: {integrity: sha512-vdYr/zohDGBbfWNU4miEzc1jmWOtkLySPViapC6nfGkv9KxzLq4UlGkKyryzwLw4jVlZk88Rw93HaCRVpe+t+g==} + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} + saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -2103,6 +2128,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -2249,6 +2277,10 @@ packages: xml-escape@1.1.0: resolution: {integrity: sha512-B/T4sDK8Z6aUh/qNr7mjKAwwncIljFuUP+DO/D5hloYFj+90O88z8Wf7oSucZTHxBAsC1/CTP4rtx/x1Uf72Mg==} + xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + xml-naming@0.3.0: resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} engines: {node: '>=16.0.0'} @@ -2332,12 +2364,12 @@ snapshots: optionalDependencies: mongodb: 7.6.0 - '@better-auth/oauth-provider@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4))': + '@better-auth/oauth-provider@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4))': dependencies: '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) better-call: 1.4.0(zod@4.5.4) jose: 6.2.10 zod: 4.5.4 @@ -2347,21 +2379,21 @@ snapshots: '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2) '@better-auth/utils': 0.4.2 - '@better-auth/scim@1.7.0-rc.1(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4))': + '@better-auth/scim@1.7.0-rc.1(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4))': dependencies: '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2) '@better-auth/utils': 0.4.2 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) better-call: 1.4.0(zod@4.5.4) zod: 4.5.4 - '@better-auth/sso@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4))': + '@better-auth/sso@1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4))': dependencies: '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2) '@better-auth/utils': 0.4.2 '@better-fetch/fetch': 1.3.1 '@xmldom/xmldom': 0.9.12 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) better-call: 1.4.0(zod@4.5.4) fast-xml-parser: 5.11.1 jose: 6.2.10 @@ -2552,19 +2584,19 @@ snapshots: '@nodable/entities@3.0.0': {} - '@objectstack/account@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/account@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/cli@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/cli@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: - '@objectstack/account': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/account': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/client': 17.2.0 - '@objectstack/cloud-connection': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/cloud-connection': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/console': 17.2.0 '@objectstack/core': 17.2.0 '@objectstack/driver-memory': 17.2.0 @@ -2574,42 +2606,42 @@ snapshots: '@objectstack/formula': 17.2.0 '@objectstack/lint': 17.2.0 '@objectstack/mcp': 17.2.0 - '@objectstack/metadata': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-protocol': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/objectql': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-protocol': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/objectql': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/observability': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-approvals': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-audit': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-email': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-approvals': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-audit': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-email': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/plugin-hono-server': 17.2.0 - '@objectstack/plugin-pinyin-search': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-reports': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-security': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-sharing': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-webhooks': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/rest': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/runtime': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-pinyin-search': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-reports': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-security': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-sharing': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-webhooks': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/rest': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/runtime': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/service-analytics': 17.2.0 '@objectstack/service-automation': 17.2.0 '@objectstack/service-cache': 17.2.0 '@objectstack/service-datasource': 17.2.0 - '@objectstack/service-job': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-messaging': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-package': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-queue': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-realtime': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-settings': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-sms': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-storage': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/setup': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-job': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-messaging': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-package': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-queue': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-realtime': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-settings': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-sms': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-storage': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/setup': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/trigger-api': 17.2.0 '@objectstack/trigger-record-change': 17.2.0 '@objectstack/trigger-schedule': 17.2.0 '@objectstack/types': 17.2.0 - '@objectstack/verify': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/verify': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@oclif/core': 4.14.0 bundle-require: 5.1.0(esbuild@0.28.2) chalk: 6.0.0 @@ -2675,10 +2707,10 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/cloud-connection@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/cloud-connection@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/runtime': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/runtime': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: @@ -2856,30 +2888,30 @@ snapshots: - ai - supports-color - '@objectstack/metadata-core@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/metadata-core@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/spec': 17.2.0 zod: 4.5.4 optionalDependencies: - vitest: 4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) transitivePeerDependencies: - ai - '@objectstack/metadata-fs@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/metadata-fs@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) chokidar: 5.0.0 transitivePeerDependencies: - ai - vitest - '@objectstack/metadata-protocol@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/metadata-protocol@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/formula': 17.2.0 '@objectstack/lint': 17.2.0 - '@objectstack/metadata': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 zod: 4.5.4 @@ -2887,12 +2919,12 @@ snapshots: - ai - vitest - '@objectstack/metadata@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/metadata@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-fs': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-fs': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 chokidar: 5.0.0 @@ -2903,13 +2935,13 @@ snapshots: - ai - vitest - '@objectstack/objectql@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/objectql@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/formula': 17.2.0 - '@objectstack/metadata': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-protocol': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-protocol': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 ajv: 8.20.0 @@ -2925,49 +2957,49 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/platform-objects@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/platform-objects@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-approvals@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-approvals@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/formula': 17.2.0 - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-audit@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-audit@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/objectql': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/objectql': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-auth@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-auth@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2) - '@better-auth/oauth-provider': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4)) - '@better-auth/scim': 1.7.0-rc.1(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4)) - '@better-auth/sso': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4)) + '@better-auth/oauth-provider': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4)) + '@better-auth/scim': 1.7.0-rc.1(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4)) + '@better-auth/sso': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))))(better-call@1.4.0(zod@4.5.4)) '@noble/hashes': 2.4.0 '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/rest': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/rest': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 - better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + better-auth: 1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) jose: 6.2.10 transitivePeerDependencies: - '@better-auth/utils' @@ -2998,11 +3030,11 @@ snapshots: - vitest - vue - '@objectstack/plugin-email@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-email@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/formula': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 nodemailer: 9.1.1 transitivePeerDependencies: @@ -3020,66 +3052,66 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/plugin-pinyin-search@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-pinyin-search@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/objectql': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/objectql': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/types': 17.2.0 pinyin-pro: 3.29.3 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-reports@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-reports@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 croner: 10.0.1 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-security@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-security@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/formula': 17.2.0 - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-sharing@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-sharing@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/formula': 17.2.0 - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/objectql': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/objectql': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-webhooks@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/plugin-webhooks@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/service-messaging': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-messaging': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/rest@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/rest@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/observability': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/service-package': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-package': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 exceljs: 4.4.0 @@ -3088,21 +3120,21 @@ snapshots: - ai - vitest - '@objectstack/runtime@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/runtime@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/driver-memory': 17.2.0 '@objectstack/driver-sql': 17.2.0 '@objectstack/driver-sqlite-wasm': 17.2.0(better-sqlite3@13.0.3) '@objectstack/formula': 17.2.0 - '@objectstack/metadata': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/metadata-protocol': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/objectql': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-protocol': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/objectql': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/observability': 17.2.0 - '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-security': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/rest': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-security': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/rest': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/service-cluster': 17.2.0 '@objectstack/service-datasource': 17.2.0 '@objectstack/service-i18n': 17.2.0 @@ -3205,68 +3237,68 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/service-job@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-job@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 croner: 10.0.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-messaging@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-messaging@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-package@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-package@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/metadata-core': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-queue@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-queue@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-realtime@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-realtime@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-settings@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-settings@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@noble/ciphers': 2.4.0 '@objectstack/core': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/service-sms@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-sms@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - '@better-auth/utils' @@ -3297,20 +3329,20 @@ snapshots: - vitest - vue - '@objectstack/service-storage@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/service-storage@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 '@objectstack/observability': 17.2.0 - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: - ai - vitest - '@objectstack/setup@17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/setup@17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 transitivePeerDependencies: - ai @@ -3348,21 +3380,21 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/verify@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': + '@objectstack/verify@17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)))': dependencies: '@objectstack/core': 17.2.0 - '@objectstack/objectql': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/objectql': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/platform-objects': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-auth': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/plugin-hono-server': 17.2.0 - '@objectstack/plugin-security': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/plugin-sharing': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/rest': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) - '@objectstack/runtime': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-security': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/plugin-sharing': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/rest': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/runtime': 17.2.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(better-sqlite3@13.0.3)(kysely@0.29.5)(mongodb@7.6.0)(nanostores@1.5.2)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/service-analytics': 17.2.0 '@objectstack/service-automation': 17.2.0 '@objectstack/service-datasource': 17.2.0 - '@objectstack/service-settings': 17.2.0(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) + '@objectstack/service-settings': 17.2.0(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))) '@objectstack/spec': 17.2.0 '@objectstack/types': 17.2.0 transitivePeerDependencies: @@ -3499,6 +3531,10 @@ snapshots: '@types/node@14.18.63': {} + '@types/node@25.9.5': + dependencies: + undici-types: 7.24.6 + '@types/webidl-conversions@7.0.3': {} '@types/whatwg-url@13.0.0': @@ -3514,13 +3550,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0) + vite: 8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0) '@vitest/pretty-format@4.1.11': dependencies: @@ -3636,7 +3672,7 @@ snapshots: base64-js@1.5.1: {} - better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))): + better-auth@1.7.2(better-sqlite3@13.0.3)(mongodb@7.6.0)(vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0))): dependencies: '@better-auth/core': 1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2) '@better-auth/drizzle-adapter': 1.7.2(@better-auth/core@1.7.2(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.5.4))(jose@6.2.10)(kysely@0.29.5)(nanostores@1.5.2))(@better-auth/utils@0.4.2) @@ -3658,7 +3694,7 @@ snapshots: optionalDependencies: better-sqlite3: 13.0.3 mongodb: 7.6.0 - vitest: 4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) + vitest: 4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -3849,6 +3885,15 @@ snapshots: detect-libc@2.1.2: {} + docx@9.7.1: + dependencies: + '@types/node': 25.9.5 + hash.js: 1.1.7 + jszip: 3.10.1 + nanoid: 5.1.16 + xml: 1.0.1 + xml-js: 1.6.11 + dotenv-flow@4.1.0: dependencies: dotenv: 16.6.1 @@ -4094,6 +4139,11 @@ snapshots: has-symbols@1.1.0: {} + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -4310,6 +4360,8 @@ snapshots: mingo@7.2.4: {} + minimalistic-assert@1.0.1: {} + minimatch@10.2.6: dependencies: brace-expansion: 5.0.9 @@ -4353,6 +4405,8 @@ snapshots: nanoid@3.3.18: {} + nanoid@5.1.16: {} + nanoid@6.0.1: {} nanostores@1.5.2: {} @@ -4556,6 +4610,8 @@ snapshots: xml-escape: 1.1.0 xpath: 0.0.34 + sax@1.6.1: {} + saxes@5.0.1: dependencies: xmlchars: 2.2.0 @@ -4751,6 +4807,8 @@ snapshots: typescript@6.0.3: {} + undici-types@7.24.6: {} + unpipe@1.0.0: {} unzipper@0.10.14: @@ -4772,7 +4830,7 @@ snapshots: vary@1.1.2: {} - vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0): + vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -4780,15 +4838,16 @@ snapshots: rolldown: 1.2.6 tinyglobby: 0.2.17 optionalDependencies: + '@types/node': 25.9.5 esbuild: 0.28.2 fsevents: 2.3.3 tsx: 4.23.13 yaml: 2.9.0 - vitest@4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)): + vitest@4.1.11(@types/node@25.9.5)(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(vite@8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 @@ -4805,8 +4864,10 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.2.2(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0) + vite: 8.2.2(@types/node@25.9.5)(esbuild@0.28.2)(tsx@4.23.13)(yaml@2.9.0) why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.9.5 transitivePeerDependencies: - msw @@ -4853,6 +4914,10 @@ snapshots: xml-escape@1.1.0: {} + xml-js@1.6.11: + dependencies: + sax: 1.6.1 + xml-naming@0.3.0: {} xml@1.0.1: {} diff --git a/scripts/md2docx.cjs b/scripts/md2docx.cjs new file mode 100644 index 0000000..29da8d5 --- /dev/null +++ b/scripts/md2docx.cjs @@ -0,0 +1,90 @@ +// Minimal Markdown → docx converter for the design proposal (headings, cover div, +// version table, tables with captions, bullets, paragraphs, code block, page breaks). +const fs = require('fs'); +const path = require('path'); +const D = require('docx'); +const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, WidthType, HeadingLevel, AlignmentType, PageBreak, ShadingType, BorderStyle, LevelFormat, TableOfContents, Footer, Header, PageNumber } = D; + +const src = fs.readFileSync(process.argv[2], 'utf8').split('\n'); +const out = process.argv[3]; +let coverChildren = []; let versionText = ""; +const FONT_CN = 'SimSun', FONT_HEAD = 'SimHei', FONT_EN = 'Times New Roman', FONT_MONO = 'Consolas'; +const runs = (text, extra = {}) => { + // inline **bold** and `code` + const parts = []; + const re = /(\*\*[^*]+\*\*|`[^`]+`)/g; let last = 0; let m; + while ((m = re.exec(text))) { + if (m.index > last) parts.push(new TextRun({ text: text.slice(last, m.index), font: { eastAsia: FONT_CN, ascii: FONT_EN, hAnsi: FONT_EN }, size: 24, ...extra })); + const t = m[0]; + if (t.startsWith('**')) parts.push(new TextRun({ text: t.slice(2, -2), bold: true, font: { eastAsia: FONT_CN, ascii: FONT_EN, hAnsi: FONT_EN }, size: 24, ...extra })); + else parts.push(new TextRun({ text: t.slice(1, -1), font: { eastAsia: FONT_MONO, ascii: FONT_MONO, hAnsi: FONT_MONO }, size: 22, ...extra })); + last = m.index + t.length; + } + if (last < text.length) parts.push(new TextRun({ text: text.slice(last), font: { eastAsia: FONT_CN, ascii: FONT_EN, hAnsi: FONT_EN }, size: 24, ...extra })); + return parts; +}; +const para = (text, opts = {}) => new Paragraph({ children: runs(text, opts.run || {}), spacing: { after: 120, line: 360 }, alignment: opts.align, indent: opts.indent }); +const children = []; +let i = 0, inCover = false, inCode = false, codeLines = [], tableRows = [], pendingCaption = null, sawFirstH1 = false; +const flushTable = () => { + if (!tableRows.length) return; + const rows = tableRows.map(r => r.split('|').slice(1, -1).map(c => c.trim())); + const body = rows.filter((r, idx) => !(idx === 1 && r.every(c => /^:?-+:?$/.test(c)))); + const cols = body[0].length; const total = 9000; const w = Math.floor(total / cols); + const table = new Table({ + width: { size: total, type: WidthType.DXA }, columnWidths: Array(cols).fill(w), + rows: body.map((r, ri) => new TableRow({ tableHeader: ri === 0, cantSplit: true, children: r.map(c => new TableCell({ + width: { size: w, type: WidthType.DXA }, + shading: ri === 0 ? { fill: 'E7EBF0', type: ShadingType.CLEAR, color: 'auto' } : undefined, + margins: { top: 60, bottom: 60, left: 100, right: 100 }, + children: [new Paragraph({ children: runs(c === '' ? '—' : c, { size: 21, bold: ri === 0 }), spacing: { after: 0, line: 300 } })], + })) })), + }); + if (pendingCaption) { children.push(new Paragraph({ children: runs(pendingCaption, { bold: true, size: 22 }), spacing: { before: 160, after: 80 }, keepNext: true })); pendingCaption = null; } + children.push(table); children.push(new Paragraph({ text: '', spacing: { after: 60 } })); + tableRows = []; +}; +while (i < src.length) { + const line = src[i]; i++; + if (line.startsWith('```')) { if (inCode) { children.push(new Paragraph({ children: [new TextRun({ text: codeLines.join('\n').replace(/\n/g, ' / '), font: { eastAsia: FONT_MONO, ascii: FONT_MONO, hAnsi: FONT_MONO }, size: 19 })], shading: { fill: 'F2F4F7', type: ShadingType.CLEAR, color: 'auto' }, spacing: { after: 120 } })); codeLines = []; inCode = false; } else inCode = true; continue; } + if (inCode) { codeLines.push(line); continue; } + if (line.startsWith('|')) { tableRows.push(line); continue; } else flushTable(); + if (line.startsWith('
')) { inCover = true; continue; } + if (line.startsWith('
')) { inCover = false; continue; } + if (line.trim() === '
' || line.trim() === '') { if (inCover) coverChildren.push(new Paragraph({ text: '' })); continue; } + if (line.trim() === '---') { continue; } + if (inCover) { + const t = line.replace(/^#+\s*/, '').replace(/\*\*/g, ''); + const isTitle = line.startsWith('#'); + if (/^版本号/.test(t)) versionText = t.replace(/^版本号[::]\s*/, "").replace(/[((].*$/, "").trim(); + coverChildren.push(new Paragraph({ children: [new TextRun({ text: t, bold: true, size: isTitle ? 48 : 28, font: { eastAsia: isTitle ? FONT_HEAD : FONT_CN, ascii: FONT_EN, hAnsi: FONT_EN } })], alignment: AlignmentType.CENTER, spacing: { before: isTitle ? 360 : 120, after: 120 } })); + continue; + } + if (line.startsWith('## 目录')) { children.push(new Paragraph({ children: [new TextRun({ text: '目录', bold: true, size: 32, font: { eastAsia: FONT_HEAD } })], spacing: { before: 240, after: 120 } })); children.push(new TableOfContents('目录', { hyperlink: true, headingStyleRange: '1-2' })); while (i < src.length && !src[i].startsWith('---')) i++; children.push(new Paragraph({ children: [new PageBreak()] })); continue; } + let m; + if ((m = line.match(/^# (.+)/))) { children.push(new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun({ text: m[1], bold: true, size: 32, font: { eastAsia: FONT_HEAD, ascii: FONT_EN, hAnsi: FONT_EN }, color: '1B2540' })], spacing: { before: 360, after: 160 }, pageBreakBefore: sawFirstH1 && !/^1\./.test(m[1]) ? false : false })); sawFirstH1 = true; continue; } + if ((m = line.match(/^## (.+)/))) { children.push(new Paragraph({ heading: HeadingLevel.HEADING_2, children: [new TextRun({ text: m[1], bold: true, size: 28, font: { eastAsia: FONT_HEAD, ascii: FONT_EN, hAnsi: FONT_EN }, color: '1B2540' })], spacing: { before: 240, after: 120 } })); continue; } + if ((m = line.match(/^### (.+)/))) { children.push(new Paragraph({ heading: HeadingLevel.HEADING_3, children: [new TextRun({ text: m[1], bold: true, size: 24, font: { eastAsia: FONT_HEAD, ascii: FONT_EN, hAnsi: FONT_EN }, color: '1B2540' })], spacing: { before: 200, after: 100 } })); continue; } + if ((m = line.match(/^\*\*(表 \d+ [^*]+)\*\*$/))) { pendingCaption = m[1]; continue; } + if (line.startsWith(">")) { const qt = line.replace(/^>\s?/, ""); if (qt.trim() === "") continue; children.push(new Paragraph({ children: runs(qt, { size: 21 }), indent: { left: 480, right: 480 }, shading: { fill: "F2F4F7", type: ShadingType.CLEAR, color: "auto" }, spacing: { after: 40, line: 300 } })); continue; } + if ((m = line.match(/^(图 \d+ .+)$/))) { children.push(new Paragraph({ children: runs(m[1], { bold: true, size: 22 }), alignment: AlignmentType.CENTER, spacing: { after: 160 } })); continue; } + if ((m = line.match(/^- (.+)/))) { children.push(new Paragraph({ children: runs(m[1]), numbering: { reference: 'bul', level: 0 }, spacing: { after: 80, line: 340 } })); continue; } + children.push(para(line)); +} +flushTable(); +const doc = new Document({ + creator: 'KPI 项目组', title: 'KPI 考核管理系统 设计方案 ' + versionText, + styles: { default: { document: { run: { font: { eastAsia: FONT_CN, ascii: FONT_EN, hAnsi: FONT_EN }, size: 24 } } } }, + numbering: { config: [{ reference: 'bul', levels: [{ level: 0, format: LevelFormat.BULLET, text: '•', alignment: AlignmentType.LEFT, style: { paragraph: { indent: { left: 480, hanging: 240 } } } }] }] }, + features: { updateFields: true }, + sections: [{ + properties: { page: { margin: { top: 1440, bottom: 1440, left: 1500, right: 1500 } } }, + children: coverChildren, + }, { + properties: { page: { margin: { top: 1440, bottom: 1440, left: 1500, right: 1500 }, pageNumbers: { start: 1 } } }, + headers: { default: new Header({ children: [new Paragraph({ children: [new TextRun({ text: 'KPI 考核管理系统 · 设计方案 ' + versionText, size: 18, color: '6C7686', font: { eastAsia: FONT_CN } })], alignment: AlignmentType.RIGHT })] }) }, + footers: { default: new Footer({ children: [new Paragraph({ children: [new TextRun({ text: '第 ', size: 18, font: { eastAsia: FONT_CN } }), new TextRun({ children: [PageNumber.CURRENT], size: 18 }), new TextRun({ text: ' 页 共 ', size: 18, font: { eastAsia: FONT_CN } }), new TextRun({ children: [PageNumber.TOTAL_PAGES], size: 18 }), new TextRun({ text: ' 页', size: 18, font: { eastAsia: FONT_CN } })], alignment: AlignmentType.CENTER })] }) }, + children, + }], +}); +Packer.toBuffer(doc).then(b => { fs.writeFileSync(out, b); console.log('wrote', out, b.length); });