From fb2fbcc9820e0a60d7f1c091fd949371466bac33 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 3 Sep 2026 01:51:16 +0000 Subject: [PATCH 1/2] docs(claude): head branches are deleted by GitHub on merge Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VR2khJ3Me96btawVsfG6jb --- CLAUDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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(开发期) | From 7c9602db773bbe26b435456fd1cfe71b23a3986b Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 3 Sep 2026 01:52:43 +0000 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20archive=20the=20design-proposal=20W?= =?UTF-8?q?ord=20deliverables=20under=20docs/=E4=BA=A4=E4=BB=98=20and=20ad?= =?UTF-8?q?d=20the=20generator=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit V0.9 (review draft, as sent) and V1.0 (client-confirmed) are kept as separate files per the delivery-document version discipline. The docx is generated from the markdown source with pnpm docs:docx (scripts/md2docx.cjs, devDependency docx). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VR2khJ3Me96btawVsfG6jb --- README.md | 2 +- ...256\241\346\226\271\346\241\210-V0.9.docx" | Bin 0 -> 21889 bytes ...256\241\346\226\271\346\241\210-V1.0.docx" | Bin 0 -> 21794 bytes package.json | 4 +- pnpm-lock.yaml | 331 +++++++++++------- scripts/md2docx.cjs | 90 +++++ 6 files changed, 292 insertions(+), 135 deletions(-) create mode 100644 "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" create mode 100644 "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" create mode 100644 scripts/md2docx.cjs 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 0000000000000000000000000000000000000000..f236fe474d68487c49126f0ae8fcdf33ccecefe5 GIT binary patch literal 21889 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 J006*Xe*q##|GfYJ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6d3734691d83ae6f3ee918153780182332ab907a GIT binary patch literal 21794 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 b66;1KvF-|V?IIF|h(d1AUj?67ee?eT=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); });