Skip to content

fix(types): drop declarationMap and src from published files - #4897

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-4851-types-dist-only
Aug 17, 2026
Merged

fix(types): drop declarationMap and src from published files#4897
os-steve merged 1 commit into
mainfrom
claude/issue-4851-types-dist-only

Conversation

@os-steve

Copy link
Copy Markdown
Collaborator

Fixes#4851

What

The @object-ui/types half of the src-in-files finding, ruled option (b) in the
maintainer ruling:
turn declarationMap off at the source, then trim files to dist-only, matching the
shape #4847 (@object-ui/data-objectstack) and #4856 (@object-ui/fields) already used.

Unlike those two, this one was not a mechanical delete: packages/types builds with a
bare tsc and had declarationMap: true, and its shipped dist/*.d.ts.map named
sources: ["../src/*.ts"] with sourcesContent: false — a real (if small) consumer:
editor go-to-source. Deleting src from files while that map still pointed at it
would have shipped a tarball with broken-link maps, the one state the ruling excludes.

Order followed (per the ruling)

  1. Flipped declarationMap: false in packages/types/tsconfig.json. Checked the
    inheritance chain: packages/types/tsconfig.json extends the repo-root
    tsconfig.json (not tsconfig.base.json — nothing under packages/types is on
    that chain), and neither the root nor the package config ever set sourceMap: true
    for this package (confirmed via tsc --showConfig), so the bare-tsc build only
    ever emitted .d.ts + .d.ts.map, never .js.map.

  2. Clean rebuild (rm -rf dist tsconfig.tsbuildinfo && tsc) — no workspace dependency
    build was needed (@object-ui/types has none in this package's own build graph
    beyond @objectstack/spec, already installed).

  3. Verified dist with a positive control:

    pre-flip (baseline)post-flip
    .map files540
    sourceMappingURL occurrences540
    ../src references540

    The pre-flip run is the positive control proving the greps actually hit something
    (not a vacuously-passing pattern) before trusting the post-flip zeros.

  4. Trimmed files to ["dist", "README.md", "CHANGELOG.md", "LICENSE"], after
    confirming all four points of finding: @object-ui/data-objectstack 的 files 含 src,38 个测试源码文件随包发布 #4847's pre-deletion checklist for this package:

    npm pack --dry-run before/after, on the freshly rebuilt dist:

    beforeafter
    entries203112
    unpacked3974143 B2828454 B
    tarball656307 B414644 B

    91 src/*.ts files leave, none arrives; the dist/ entry count (108) is unchanged
    byte-for-byte apart from the edited package.json.

  5. Updated the scripts/check-phantom-dependencies.mjs header paragraph: it previously
    read "fields/types still list src, and types's entry is load-bearing" (already
    updated once by [fields] filessrc(#4851 的 fields 半)—— 先实测 dist map 形态,同形则照 #4847 机械删,异形停手 #4856/PR chore(fields): files 不再列 src —— 173 个源码文件(97 个测试)退出发布物 (#4856) #4861 to retire the data-objectstack example). This PR
    retires the last of the three — the paragraph now states all three originally-recorded
    packages have dropped src from files, and explains why types needed the
    declarationMap flip first rather than a bare delete.

Consumer impact

Go-to-source for @object-ui/types consumers now resolves to the shipped .d.ts
instead of the original .ts — a deliberate, near-zero-pull trade per the ruling
(types is a pure-types package built by bare tsc, so its declarations are
near-isomorphic to their source). No public type surface changed; exports targets are
unchanged.

Tests (HEAD 903f47f)

  • pnpm exec vitest run --root . scripts/__tests__/package-files-exist.test.ts — 18/18 passed
  • pnpm exec vitest run packages/types/ --maxWorkers=2 — 36 files / 428 tests passed
  • node scripts/check-phantom-dependencies.mjs — passing (re-run at HEAD)
  • cd packages/types && npm run type-check (tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json) — clean
  • node scripts/check-control-bytes.mjs — passing
  • node scripts/check-package-self-import.mjs — passing
  • node scripts/check-changeset-presence.mjs / check-changeset-no-major.mjs — passing (re-run at HEAD)
  • node scripts/check-published-dist-tooling.mjsnot run locally: this gate costs
    a full monorepo build (objectui#4846) and is not implicated by this diff (no change to
    what any package's build program emits); left to CI per "本地验证范围".

Out-of-scope finding (not fixed here)

While auditing packages/types/package.json's exports map against the built dist,
found exports["."].require points at ./dist/index.cjs, which the package's bare
tsc build ("build": "tsc") never emits — confirmed pre-existing on origin/main,
unrelated to this change. Filed as #4896, out of this PR's file surface.


Generated by Claude Code

Ruled option (b) for the @object-ui/types half of the src-in-files
finding: turn declarationMap off at the source instead of keeping a
permanent per-package exception, or paying for inlineSources (which
saves nothing and adds a third emitter shape).
Order followed per the ruling: flipped declarationMap:false in
packages/types/tsconfig.json first, clean-rebuilt, and confirmed dist
has zero .map files / zero sourceMappingURL / zero ../src references
(positive control against the pre-flip build showed 54 of each) —
only then trimmed files to dist-only, matching #4847's shape. Updated
the check-phantom-dependencies.mjs header paragraph: all three
originally-recorded packages (data-objectstack, fields, types) have
now dropped src from files.
npm pack --dry-run: 203 -> 112 entries, 91 src/*.ts files leave, none
arrives, dist/ (108 entries) is unchanged and now map-free.
Fixes#4851
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbRmJD3iPhXjKr6vhd4Qkv
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)24.7 KB350 KB
Entry fileindex-BIdGXCEN.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)9.56KB3.59KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)8.92KB3.41KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)25.13KB5.40KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)38.46KB10.17KB
auth (createAuthenticatedFetch.js)6.34KB2.43KB
auth (index.js)2.35KB1.07KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.02KB0.88KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)498.36KB111.03KB
core (index.js)3.79KB1.52KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)157.05KB43.28KB
fields (index.js)231.73KB57.60KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.35KB1.38KB
i18n (pickLocalized.js)3.69KB1.73KB
i18n (provider.js)23.12KB7.62KB
i18n (useDisplayLocale.js)2.84KB1.45KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)38.86KB10.83KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)9.35KB3.31KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)4.42KB1.42KB
permissions (evaluator.js)5.12KB1.74KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.81KB0.83KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.62KB12.83KB
plugin-charts (index.js)64.75KB18.37KB
plugin-chatbot (index.js)181.21KB43.14KB
plugin-dashboard (index.js)128.14KB32.58KB
plugin-designer (index.js)212.39KB42.83KB
plugin-detail (index.js)239.81KB59.97KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)115.34KB27.74KB
plugin-gantt (index.js)164.10KB39.87KB
plugin-grid (index.js)192.23KB51.30KB
plugin-kanban (index.js)52.72KB14.54KB
plugin-list (index.js)111.23KB26.97KB
plugin-map (index.js)17.91KB5.72KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)41.70KB11.19KB
plugin-timeline (index.js)26.68KB7.66KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)83.81KB20.49KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.66KB3.50KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.62KB2.34KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)27.53KB9.41KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.28KB0.68KB
react (schema-input.js)1.45KB0.83KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)4.09KB1.74KB
sdui-parser (index.js)4.47KB2.03KB
sdui-parser (parse.js)10.04KB2.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)4.69KB1.48KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (dashboard-filter-alias.js)6.23KB2.74KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-retry.js)4.32KB2.02KB
types (index.js)3.05KB1.52KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

@os-steve
os-steve marked this pull request as ready for review August 17, 2026 02:25
@os-steve
os-steve added this pull request to the merge queueAug 17, 2026
Merged via the queue into main with commit c9dc811Aug 17, 2026
20 checks passed
@os-steve
os-steve deleted the claude/issue-4851-types-dist-only branch August 17, 2026 02:25
Sign up for freeto 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/fields 与 @object-ui/types 的 files 仍含 src(#4847 同族余下两例;types 那处承重,不是机械删除)

2 participants

@os-steve@claude