Skip to content

fix(create-plugin,root): pin jsdom to the 29.1 line so the Node install floor is 22.13 (objectui#11366) - #11509

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-11366-jsdom-29-node-floor
Oct 2, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-11366-jsdom-29-node-floor

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #11366

Clause-②: no

What changed

The root jsdom devDependency is the version anchor that @object-ui/create-plugin copies into every generated plugin. It was ^30.0.1. jsdom 30 declares engines.node as ^22.22.2 || ^24.15.0 || >=26.0.0, and .npmrc sets engine-strict=true, so pnpm install refused every Node 22 release before 22.22.2, even though root engines.node still said >=22.11. The maintainer's position on the card (option 1) is to roll jsdom back and not raise the floor to 22.22.2. That is what this PR does.

  • Root package.json: jsdom goes from ^30.0.1 to ^29.1.1, the newest 29.1.x (npm view jsdom@29; engines ^20.19.0 || ^22.13.0 || >=24.0.0). engines.node goes from >=22.11 to >=22.13.
  • packages/create-plugin/src/templates.ts: the jsdom entry of DEV_DEPENDENCIES and its anchor-table row follow the root. templates.test.ts reads the expected range from the root manifest, so no test literal had to change.
  • pnpm-lock.yaml: regenerated by pnpm install with engine-strict on, with no hand edits (method below). jsdom@30.0.1, undici@8.9.0 and whatwg-url@17.1.0 are gone. jsdom 29.1.1 uses undici@7.29.0 and whatwg-url@16.0.1, which were already in the lockfile.
  • Docs: CONTRIBUTING.md and QUICK_REFERENCE.md state the new floor. The .npmrc comment no longer repeats the number. It points at root engines instead, and it says what it means when a Node version the floor admits is refused.
  • .changeset/11366-create-plugin-jsdom-29.md: a patch for @object-ui/create-plugin, because the generated plugin's jsdom range changes. The root package is private, so the floor change needs no changeset of its own.

Why the floor is 22.13

I read every packages entry in the regenerated lockfile and kept the ones pnpm installs on linux-x64-glibc. An entry was dropped if its os / cpu / libc fields excluded this platform, or if node_modules/.modules.yaml listed it as skipped after a fresh install. The pnpm list adds two entries the platform fields miss: @img/sharp-wasm32 and its @emnapi/runtime. For each remaining engines.node range, I found the lowest 22.x.y version that satisfies it, using semver.Range (which parses spaced ranges like >= 20.12.0 correctly).

  • 767 installed packages declare engines.node, and none of them rules out the 22 line entirely.
  • The highest lower bound on the 22 line is 22.13.0. It comes from eslint 10 (eslint@10.8.1, @eslint/*, espree, eslint-scope, eslint-visitor-keys), @inquirer/*, @pnpm/deps.graph-sequencer and jsdom@29.1.1 itself.
  • The old declared floor of 22.11 was therefore already wrong about eslint 10 as well as jsdom 30.

Proof: same container, engine-strict on, no override

None of the runs below pass --config.engine-strict=false. Each one starts with every node_modules removed and runs pnpm install --frozen-lockfile.

Tree Node Result
BASE fcdc8ec91 v22.22.0 (container) exit 1 · ERR_PNPM_UNSUPPORTED_ENGINE · Your Node version is incompatible with "jsdom@30.0.1(@noble/hashes@2.3.0)" · Expected version: ^22.22.2 || ^24.15.0 || >=26.0.0
HEAD e5eee15d8 v22.22.0 (container) exit 0 · Lockfile is up to date, resolution step is skipped
HEAD e5eee15d8 v22.13.0 (official tarball, sha256 checked against SHASUMS256.txt) exit 0
HEAD e5eee15d8 v22.12.0 (same source) exit 1 · ERR_PNPM_UNSUPPORTED_ENGINE · root manifest Expected version: >=22.13

How the lockfile was regenerated

After the manifest edit, a plain pnpm install left jsdom@30.0.1 in the lockfile, now flagged optional: true, under the vitest snapshots of 17 workspace packages. Each of those packages resolves vitest's optional jsdom peer by auto-install, and pnpm picks that version as the highest one already in the lockfile (getHoistableOptionalPeers in pnpm 10.31.0). That keeps a stale version alive indefinitely. pnpm dedupe, pnpm install --fix-lockfile and pnpm update -r --depth Infinity jsdom did not remove it.

What did remove it, still without hand edits:

  1. One pnpm install with a temporary root pnpm.overrides entry "jsdom": "^29.1.1".
  2. The override removed again and pnpm install run once more.

The committed lockfile is a fixed point: a third pnpm install leaves it byte-identical. The diff against BASE is limited to the jsdom subtree and the vitest peer suffixes, with one exception. Pnpm also wrote 12 deprecated: yuku-analyzer runs on yuku-core since 0.14 lines from current registry metadata onto the @yuku-analyzer/binding-* entries. These have nothing to do with jsdom, but any later regeneration would write them too.

Tests and gates (all on e5eee15d8, worktree root)

  • pnpm exec vitest run on packages/create-plugin/src/__tests__/ plus every scripts/__tests__ file that reads root engines, CONTRIBUTING.md or QUICK_REFERENCE.md: check-changeset-presence, check-phantom-dependencies, doc-version-claims, quick-reference-current-release-4143, sync-quick-reference-release, check-doc-links, ci-cd-pipeline-doc, quick-reference-commands-4149. No test reads .npmrc. Result: Test Files 11 passed (11) · Tests 408 passed (408).
  • pnpm --filter @object-ui/create-plugin build + type-check: ESM ⚡️ Build success, DTS ⚡️ Build success, VERDICT command-exit 0.
  • pnpm check:unused-deps ✅ · pnpm check:phantom-deps ✅ · pnpm docs:check-links Links are valid across 17 scan roots. · pnpm check:control-bytes ✅ · pnpm check:new-line-citations VERDICT … 0 new citation(s) · node scripts/check-changeset-presence.mjs ✅ · pnpm changeset:check ✅ · pnpm check:changeset-claims (report-only) · pnpm quick-reference:check ✅ · pnpm check:lockfile-integrity VERDICT clean — no @objectstack/* identity moved backward and no package gained a copy. · pnpm check:lockfile-dedupe VERDICT deduped.
  • check:changeset-claims named three pending changesets that mention pnpm-lock.yaml (5793, 6361, 7122). I re-read them. All three are about @objectstack/* resolutions, and this diff moves zero @objectstack lockfile lines, so they stay true.
  • Scaffold on jsdom 29. I wrote the files buildPluginFiles generates into a throwaway directory two levels below the worktree root, matching the real packages/plugin-NAME depth, so extends: '../../tsconfig.json' resolves. Then I ran the generated example test under the generated test block (globals, environment: 'jsdom', setupFiles), copied verbatim. Result: Test Files 1 passed (1). A probe test asserting navigator.userAgent contains jsdom/29.1.1 also passed, so the run really used jsdom 29.1.1. The directory was then deleted. This was a one-off check; no repo path runs the generated test against the root jsdom.
  • Patch round 1 (head e0639b06f, seat ruling A in claim amendment 5961960157): scripts/check-lint-rule-coverage.mjs's matchesGlob error text stops restating the floor as ">=22.11" and points at the root engines.node floor instead (2 lines out, 2 in; no logic change). check-lint-rule-coverage.test.ts: 35 passed. A fresh strict frozen install on Node v22.22.0 still exits 0. main moved only by PR objectui#11502, which touches no manifest, lockfile or this script, so no merge. Every remaining non-governed 22.11 hit was read: a pending changeset's history, @changesets/*'s own engines in the lockfile, and worked examples in docblocks. None states this repo's floor.

Acceptance notes

  • Outside the claim's file surface, left as is (carrier: seat): scripts/check-lint-rule-coverage.mjs has an error message that says package.json declares engines.node: ">=22.11". It is stale after this PR. The message only fires when node:path has no matchesGlob, which means Node below 22.5. The dispatch asked for every non-governed 22.11 floor statement to be corrected, but this file is not in the claim's surface, and a surface breach means stop. So I did not edit it. A one-line follow-up should drop the literal, for example by saying the root engines.node floor is above 22.5. No governed file (skills/**, .claude/**, AGENTS.md) states the floor.
  • The .npmrc comment no longer has a number. It used to repeat the floor, and nothing checks it. That repeated number is the shape of this card: a restated floor that drifted from what the install enforces (AGENTS.md 完善设计器的每一个细节 #9). It now points at root engines.
  • Observation, nothing filed: .github/dependabot.yml groups only minor and patch updates, and dependabot-auto-merge.yml only enqueues those. So a jsdom 30 major would arrive as its own Dependabot PR, waiting for a human. Merging it would put the floor back at 22.22.2, and CI would stay green because it runs 22.x. Whoever reviews that PR has to make the floor call.
  • Reverse verification is the BASE/HEAD install table above: same Node, engine-strict on.

Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37


Generated by Claude Code

…oor stays at Node 22.13 (objectui#11366)

The root `jsdom` devDependency (the version anchor the create-plugin
scaffold copies) was `^30.0.1`. jsdom 30 declares engines.node
`^22.22.2 || ^24.15.0 || >=26.0.0`, so with `engine-strict=true` every
`pnpm install` on Node 22 below 22.22.2 was refused, while root
`engines.node` still admitted `>=22.11`.

- root `jsdom` and the scaffold's `DEV_DEPENDENCIES` entry move to `^29.1.1`
  (engines `^20.19.0 || ^22.13.0 || >=24.0.0`);
- `pnpm-lock.yaml` is regenerated by `pnpm install`; jsdom@30.0.1,
  undici@8.9.0 and whatwg-url@17.1.0 leave it;
- root `engines.node` becomes `>=22.13`, the highest lower bound the locked
  dependencies installed on linux-x64 set on the 22 line (eslint 10,
  @inquirer/*, @pnpm/deps.graph-sequencer, jsdom 29);
- CONTRIBUTING.md and QUICK_REFERENCE.md follow the floor; the `.npmrc`
  comment stops restating it;
- `@object-ui/create-plugin` patch changeset.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 3 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/5793-spec-range-floors.md

  • names pnpm-lock.yaml → pnpm-lock.yaml — edited by this change

    Nothing a consumer installs today changes: normal resolution already picks the newest 17.x, and pnpm-lock.yaml still resolves 17.2.0 on this edge after the bump. The change is to the declared floor only, which is why it is scored patch rather than minor — the same reasoning objectui#5753 used for the other direction on this dependency.

.changeset/6361-spec-floor-17-2-0.md

  • names pnpm-lock.yaml → pnpm-lock.yaml — edited by this change

    Nothing a consumer installs today changes: normal resolution already picks the newest 17.x, and pnpm-lock.yaml still resolves 17.2.0 on both edges after the bump — only the recorded specifier: moves. No source and no behaviour changes, which is why this is scored patch, on the reasoning 111741454 used for the same remediation on @object-ui/plugin-detail.

.changeset/7122-objectstack-family-17-3-0.md

  • names pnpm-lock.yaml → pnpm-lock.yaml — edited by this change

    @objectstack/client, core, formula and lint each pin @objectstack/spec EXACTLY, so resolving the spec alone to 17.3.0 left the console bundling TWO copies of it. Moving the family with it in pnpm-lock.yaml collapses the duplicate; every declared range already admitted 17.3.0, so no manifest moved.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with 9d9ed5495 (merge-base with origin/main): 7 file(s) changed outside .changeset/, read against 2053 pending declaration(s) that publish a body (2682 pending in total). · run

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 330 chunks) 3551.2 KB 3574.6 KB
Main entry chunk (gzip) 150.3 KB 350 KB
Entry file index-3XsSTfMY.js —
Status PASS —

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.88KB 6.25KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.17KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.70KB 10.94KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
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.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 571.80KB 136.98KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 230.46KB 63.94KB
fields (index.js) 261.51KB 66.22KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.49KB 9.23KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 39.47KB 11.25KB
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.75KB
mobile (index.js) 1.99KB 0.87KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.04KB 3.92KB
plugin-calendar (index.js) 53.17KB 15.46KB
plugin-charts (index.js) 83.53KB 22.84KB
plugin-chatbot (index.js) 198.22KB 46.97KB
plugin-dashboard (index.js) 142.17KB 38.28KB
plugin-designer (index.js) 231.28KB 48.76KB
plugin-detail (index.js) 245.43KB 64.53KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 172.73KB 44.50KB
plugin-gantt (index.js) 179.16KB 45.06KB
plugin-grid (index.js) 233.13KB 63.89KB
plugin-kanban (index.js) 49.51KB 15.54KB
plugin-list (index.js) 116.63KB 28.97KB
plugin-map (index.js) 25.60KB 8.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 38.80KB 11.71KB
plugin-tree (index.js) 14.51KB 5.15KB
plugin-view (index.js) 90.23KB 22.73KB
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.81KB 3.58KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 6.06KB 2.68KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 21.42KB 7.05KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 4.14KB 1.96KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 5.07KB 2.39KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
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 (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.25KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
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

…ge's matchesGlob error (objectui#11366)

The error thrown when `node:path` lacks `matchesGlob` said package.json
declares `engines.node: ">=22.11"`, which went stale when the root floor
moved to `>=22.13`. It now points at the root `engines.node` floor without
restating a number, the same way the `.npmrc` comment does. The check, the
throw and the rest of the message are unchanged.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 330 chunks) 3551.2 KB 3574.6 KB
Main entry chunk (gzip) 150.3 KB 350 KB
Entry file index-3XsSTfMY.js —
Status PASS —

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 16.88KB 6.25KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.17KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.70KB 10.94KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
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.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 571.80KB 136.98KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 230.46KB 63.94KB
fields (index.js) 261.51KB 66.22KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.49KB 9.23KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 39.47KB 11.25KB
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.75KB
mobile (index.js) 1.99KB 0.87KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.04KB 3.92KB
plugin-calendar (index.js) 53.17KB 15.46KB
plugin-charts (index.js) 83.53KB 22.84KB
plugin-chatbot (index.js) 198.22KB 46.97KB
plugin-dashboard (index.js) 142.17KB 38.28KB
plugin-designer (index.js) 231.28KB 48.76KB
plugin-detail (index.js) 245.43KB 64.53KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 172.73KB 44.50KB
plugin-gantt (index.js) 179.16KB 45.06KB
plugin-grid (index.js) 233.13KB 63.89KB
plugin-kanban (index.js) 49.51KB 15.54KB
plugin-list (index.js) 116.63KB 28.97KB
plugin-map (index.js) 25.60KB 8.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 38.80KB 11.71KB
plugin-tree (index.js) 14.51KB 5.15KB
plugin-view (index.js) 90.23KB 22.73KB
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.81KB 3.58KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 6.06KB 2.68KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 21.42KB 7.05KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 4.14KB 1.96KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 5.07KB 2.39KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
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 (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.25KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
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

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 2, 2026 22:03
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 2, 2026 22:03
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 2, 2026
Merged via the queue into main with commit 059bf1b Oct 2, 2026
47 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-11366-jsdom-29-node-floor branch October 2, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] root engines.node ">=22.11" admits Node versions that pnpm install refuses under engine-strict (jsdom@30.0.1 needs ^22.22.2)

2 participants