Skip to content

chore(data-objectstack): files 不再列 src —— 43 个源码文件(38 个测试)退出发布物 (#4847) - #4852

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-4847-data-objectstack-files
Aug 16, 2026
Merged

chore(data-objectstack): files 不再列 src —— 43 个源码文件(38 个测试)退出发布物 (#4847)#4852
yinlianghui merged 1 commit into
mainfrom
claude/issue-4847-data-objectstack-files

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #4847

缺陷形态(一句话)

packages/data-objectstack/package.jsonfiles 列了 src,于是每个发布 tarball 都带上 43 个源码文件(其中 38 个 *.test.ts)。这一条从包的第一个 commit(780a1b993)就在,不是为哪个消费者加的。与 #4836 / PR #4845 是同一个问题的两个入口(emit 进 dist / 直接列进 files),那条路在本包上已实测为 0(tsup 只从 entry 出料)。

前置核查:四项全部否定(实施前先做,任一命中即停手)

派发要求实施前核实 src 在发布物里有没有真实消费者。四条路全部关着,证据是干净重建后的实测,不是推断:

核查项 结果 证据
exports map 是否有条目解析进 src 只有一个条目 ".",其下 types/import/require 三个条件全指 ./dist/*
main / module / types 是否指 src ./dist/index.js / ./dist/index.js / ./dist/index.d.ts
③ 全仓与文档是否教过 src deep-import 引号精确路径 grep 全仓 + content/docs/** + 包内 README:@object-ui/data-objectstack/ 带子路径的 specifier 零命中,只教根 specifier
④ sourcemap 是否落在 src tsup.config.tssourcemap: false,bundled dts 不产 .d.ts.map;干净重建后 dist 共 4 个文件,.map 0 个,sourceMappingURL../src 各 0 处

③ 有一个看起来像命中、实际不是的形态,写清楚以免下一个读者按 grep 结果误判:packages/plugin-form/vite.config.tspackages/runner/vite.config.ts、根 vitest.config.mts 等 7 处确实出现 data-objectstack/src,但它们是 path.resolve(__dirname, '../data-objectstack/src') 形式的工作区别名,解析的是仓内源码树,走不到 tarball —— files 只塑造 npm 包内容,对 workspace 的 symlink 解析没有任何作用。

干净重建后的 dist 全貌(precheck ④ 的原始材料):

dist/index.cjs   dist/index.d.cts   dist/index.d.ts   dist/index.js

打包验证:pack 清单前后对照

同一份 dist,只改 files,npm pack --dry-run --json 两侧:

修复前 修复后
条目数 51 8
unpacked 1356830 B 719876 B
tarball 393379 B 222157 B

消失 43,新增 0,幸存条目逐个大小不变(唯一变的是被编辑的 package.json 自身)。消失的 43 = 38 个 *.test.ts + 5 个实现源码(index.tserrors.tsmetadata-client.tsuserState.tscache/MetadataCache.ts),后者的发布形态仍是打包好的 dist/index.js

修复后 tarball 的完整清单(入口/README/许可证全在):

CHANGELOG.md  LICENSE  README.md  package.json
dist/index.cjs  dist/index.d.cts  dist/index.d.ts  dist/index.js

反向验证(方向先判后跑;方向与「钉子变红」模板不同,如实记录)

预判(跑之前写下的):本改动删的是一个 files 条目,而仓内没有任何门在看这个数组的内容 —— scripts/__tests__/package-files-exist.test.ts 只断言「声明了的条目在磁盘上存在」,且用的是 toBeGreaterThanOrEqual 下限,删一条不会触底,加回来 src 也确实存在。所以正确预判不是「新钉子变红」,而是 PR #4845 记过的同一形态:(a) 把 src 加回 files、同一份 dist 重跑 pack,43 个文件原样重现;(b) 所有门在缺陷态保持全绿,因为今天没有任何门看得见这一类缺陷 —— 这正是 #4847 判 observation-class 的依据本身。

实跑,两半都与预判一致(先 commit 修复再变异,变异不提交,已用 git checkout 对着分支名还原):

(a) 条目数 8 -> 51,重现 43 个(38 个 *.test.ts + 5 个实现源码),与修复前清单逐字节相同(JSON.stringify 全等),src/ 以外零条目移动。

(b) 在同一个缺陷态下跑全部相关门,全部退 0:

node scripts/check-phantom-dependencies.mjs                       rc=0
node scripts/check-control-bytes.mjs                              rc=0
node scripts/check-package-self-import.mjs                        rc=0
pnpm exec vitest run scripts/__tests__/package-files-exist.test.ts  1 file / 18 tests passed

「什么都没变红」就是结论本身:缺陷在 CI 里完全不可见,与 PR #4845 对同族问题的测量一致。

验证(全部实跑)

干净重建(rm -rf dist tsconfig.tsbuildinfo 后 build)      tsup 出 4 个文件,tooling 产物 0

pnpm exec vitest run packages/data-objectstack/ \
  scripts/__tests__/package-files-exist.test.ts          39 files / 557 tests passed
pnpm exec vitest run packages/react/ \
  packages/plugin-designer/ packages/app-shell/          460 files / 4518 passed | 1 skipped
    (三个运行期 dependents;其余 6 个 dependent 只在 devDependencies 里用它)

pnpm exec turbo run type-check --concurrency=2           81 successful, 81 total

node scripts/check-control-bytes.mjs             OK 4339 文件
node scripts/check-phantom-dependencies.mjs      OK
node scripts/check-changeset-presence.mjs        OK
node scripts/check-changeset-no-major.mjs        OK
node scripts/check-changeset-fixed.mjs           OK
node scripts/check-package-self-import.mjs       OK
eslint(改动路径)                                  rc=0
grep -naP 控制字符自查(三个改动文件)                 零命中

顺带更新的一处仓内记载

scripts/check-phantom-dependencies.mjs 的表头写着「三个包(fieldstypesdata-objectstack)list src in files,所以它们的 tarball 也带测试源码」。这是本改动直接证伪的一句事实陈述,所以同 PR 更新,而不是留一句将来会误导人的话。更新后它记的是:data-objectstack 已退出(本卡),fieldstypes 仍在,types 那处是承重的(见下)。门的判决一个字节没变(改的是块注释)。

为什么本 PR 只修一个包(#4847 修法 3 的裁决,依据是测量)

#4847 的修法 3 提议「先量全仓还有哪些包的 filessrc,同缺陷同 PR 处理」。量了:发布包里共 3 个 —— data-objectstack(本卡)、fieldstypes(app-shell 只列 src/styles.css,是精确文件不是整棵树,不同形态)。但它们不是同一个判定,所以没有并进本 PR:

  • @object-ui/typesbuild 是裸 tsc,自己的 tsconfig 显式 declarationMap: true,根 tsconfig.base.json 还给了 sourceMap: true没有 inlineSources。实测它已构建的 dist/ai.d.ts.map:sources["../src/ai.ts"],sourcesContentfalse。也就是说它的 src 是承重的 —— 去掉后随包发布的 declaration map 指向一个不存在的文件,消费者编辑器的 go-to-source 会断。这恰好是派发要求的 precheck ④ 在另一个包上命中的样子,按「任一命中即停手」的纪律,它不该被顺手删掉。
  • @object-ui/fields 的 emitter 是 vite-plugin-dts,与上面两者都不同,要单独测。

三个包共享一个症状、不共享一个判定,合成一个 PR 会把一次机械删除和一次真实取舍混在一起。已另开 finding #4851 记录余下两个,不在本 PR 处理。

范围外

Changeset

按 PR #4845 / #4006 的先例写了真 patch changeset(.changeset/data-objectstack-files-drops-src-4847.md):check-changeset-presence.mjs 不索要(没动发版包的 src/),但发布物内容变了,得让它出现在 CHANGELOG 里。未声明 major


Generated by Claude Code

发布面无任何入口解析进 src:exports 只有 "." 且条件全指 dist;main/module/types 均指
dist;仓内与文档只教根 specifier,不存在 @object-ui/data-objectstack/src/... 深导入(兄弟
包 vite/vitest 配置里的 src 路径是 path.resolve 的工作区别名,不经 tarball);tsup 的
sourcemap 为 false 且 dts 不产 .d.ts.map,干净重建后的 dist 四个文件里 0 个 .map、0 处
sourceMappingURL 与 ../src。

npm pack --dry-run 前后:51 -> 8 个条目,消失 43(38 个 *.test.ts + 5 个实现源码),新增 0,
其余条目逐个字节不变。

check-phantom-dependencies.mjs 表头那句「三个包 list src in files」随之更新:它是本改动
直接证伪的仓内记载,fields/types 仍在,且 types 那处承重(裸 tsc + 根 declarationMap,
dist/*.d.ts.map 指名 ../src/*.ts 且不带 sourcesContent)。

Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Main entry (gzip) 24.7 KB 350 KB
Entry file index-BHA5VTEU.js
Status PASS

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 9.56KB 3.59KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 8.92KB 3.41KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 25.13KB 5.40KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.13KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.64KB 2.21KB
auth (SocialSignInButtons.js) 9.60KB 3.89KB
auth (UserMenu.js) 3.40KB 1.22KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 38.46KB 10.17KB
auth (createAuthenticatedFetch.js) 6.34KB 2.43KB
auth (index.js) 2.35KB 1.07KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.02KB 0.88KB
auth (useIsWorkspaceAdmin.js) 1.61KB 0.85KB
collaboration (CommentThread.js) 26.07KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.65KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 495.05KB 110.07KB
core (index.js) 3.79KB 1.52KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 157.05KB 43.28KB
fields (index.js) 231.65KB 57.57KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 3.35KB 1.38KB
i18n (pickLocalized.js) 3.69KB 1.73KB
i18n (provider.js) 23.12KB 7.62KB
i18n (useDisplayLocale.js) 2.84KB 1.45KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 7.77KB 3.13KB
layout (index.js) 38.96KB 10.85KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.74KB
mobile (index.js) 1.50KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.71KB 0.42KB
mobile (useResponsiveConfig.js) 1.36KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 9.35KB 3.31KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 4.42KB 1.42KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.91KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.52KB
permissions (usePermissions.js) 1.81KB 0.83KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 46.86KB 12.91KB
plugin-charts (index.js) 64.44KB 18.28KB
plugin-chatbot (index.js) 181.21KB 43.14KB
plugin-dashboard (index.js) 128.14KB 32.58KB
plugin-designer (index.js) 212.39KB 42.83KB
plugin-detail (index.js) 239.81KB 59.97KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 115.34KB 27.74KB
plugin-gantt (index.js) 164.30KB 40.02KB
plugin-grid (index.js) 192.23KB 51.30KB
plugin-kanban (index.js) 52.72KB 14.54KB
plugin-list (index.js) 111.23KB 26.97KB
plugin-map (index.js) 18.16KB 5.81KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 41.38KB 11.09KB
plugin-timeline (index.js) 26.68KB 7.66KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 83.81KB 20.49KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.71KB 3.53KB
providers (index.js) 0.44KB 0.22KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.67KB 2.37KB
react (LazyPluginLoader.js) 3.77KB 1.33KB
react (SchemaRenderer.js) 27.64KB 9.44KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.28KB 0.68KB
react (schema-input.js) 1.45KB 0.83KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 4.09KB 1.74KB
sdui-parser (index.js) 4.47KB 2.03KB
sdui-parser (parse.js) 10.04KB 2.82KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 4.69KB 1.48KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 0.20KB 0.18KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 0.20KB 0.18KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.87KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-retry.js) 4.32KB 2.02KB
types (index.js) 3.05KB 1.52KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 0.20KB 0.18KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Copy link
Copy Markdown
Collaborator Author

【PM 验收 · ACCEPT】objectui 分片 PM(session_01GTRjn8xBqp75dk7kFupVRt),#4847 data-objectstack 发布面 files 收敛。

实物核验:3 文件,恰删一行 "src" + phantom-deps 表头注释更正(判决逻辑零改动)+ patch changeset;分支零模型标识;releases 零触碰。

CI 终态(PM 亲读):head 7185fff 全部 19 项 completed、零 failure。

验收要点(记账):

处置:undraft + auto-merge(SQUASH)。


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

finding: @object-ui/data-objectstack 的 files 含 src,38 个测试源码文件随包发布

2 participants