Skip to content

fix(metadata-admin): DatasourcePreview reads only keys DatasourceSchema accepts (#4131) - #4226

Merged
yinlianghui merged 2 commits into
mainfrom
claude/issue-4131-datasource-preview-strict
Aug 11, 2026
Merged

fix(metadata-admin): DatasourcePreview reads only keys DatasourceSchema accepts (#4131)#4226
yinlianghui merged 2 commits into
mainfrom
claude/issue-4131-datasource-preview-strict

Conversation

@yinlianghui

@yinlianghui yinlianghui commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Fixes #4131

What was wrong

retryPolicy, healthCheck and capabilities were removed from the datasource document by objectstack#4583 under ADR-0049 enforce-or-remove — connection retry and health probing belong to the runtime driver, and pushdown is decided by that driver's own supports.*, never by datasource metadata. DatasourceSchema is .strict(), so it refuses all three by name, while DatasourcePreview kept painting a Retry Policy SideBlock, a Health Check SideBlock and a Capabilities chip strip for them.

An author who typed any of the three saw the designer confirm a draft that cannot be saved. And, as objectui#3275's own header comment put it about the read-replica pill it deleted, the preview was "the only surface that acknowledged the key at all, [so] it was the strongest signal an author had that it worked".

Premise re-verified on the branch point, against the installed @objectstack/spec 17.0.0-rc.6 — parse probes, not grep:

shape keys: name, label, driver, config, pool, ssl, description, active,
            autoConnect, schemaMode, external, origin, _lock, …

pool            ACCEPT
ssl             ACCEPT
retryPolicy     REJECT unrecognized_keys:["retryPolicy"]
healthCheck     REJECT unrecognized_keys:["healthCheck"]
capabilities    REJECT unrecognized_keys:["capabilities"]
all three       REJECT unrecognized_keys:["retryPolicy","healthCheck","capabilities"]

What changed

Deleted, on the objectui#3275 route: both SideBlocks, the chip strip, enabledCapabilities(), the reads at d.retryPolicy / d.healthCheck / d.capabilities, and the now-unused RotateCcw import. pool and ssl are still declared and still render. The file's #3275 header comment is extended to record this second wave in the same convention — what was deleted and why.

The console's datasource sample was already clean (apps/console/src/preview-samples.ts carries a comment saying so), so the sample and the renderer had drifted apart; this closes that gap from the renderer side.

The pin is the point

Third occurrence of this shape on one file (#3275 deleted d.type / isDefault / the Array.isArray(capabilities) branch; #3143 deleted the read-replica pill), and objectstack#4583 landed 2026-08-02 while the preview still carried the keys eight days later. Nothing compared the two halves of the contract. DatasourcePreview.spec-keys.test.ts now compares them mechanically, deriving both sides so neither can go stale:

  • read set — from DatasourcePreview.tsx's own AST: every key reached off the draft prop, through dot access, optional chain, bracket access or destructure, following a renamed prop ({ draft: raw }) and alias chains (const d = draft as …) to a fixpoint;
  • accepted set — from the schema object itself (DatasourceSchema.keyof()), so a key added or removed in @objectstack/spec moves the pin on the next dependency bump.

The AST is load-bearing rather than a grep: the header comment now names d.retryPolicy, d.healthCheck, d.capabilities and d.type in prose to record why they are gone, so a text scan reports four violations that do not exist.

Two assertions the pin makes about itself, because a derivation that quietly returned nothing would satisfy a subset check forever: that it still finds this file's real reads, and that every use of the draft binding is a read form it understands — so it fails loudly instead of going blind if the preview is refactored into a shape it cannot follow.

Scope note: this is a top-level key pin, matching what .strict() rejects by name. It says nothing about nested value shapes.

Reverse verification — red both ways

Predicted RED, confirmed RED, in two independent directions.

  1. Restore the pre-fix file (git checkout origin/main -- DatasourcePreview.tsx) — the guard names all three keys at their exact lines, which are the lines the issue's measured table recorded:
× every derived read is an accepted key
AssertionError: DatasourcePreview reads 3 key(s) DatasourceSchema rejects…
+   "retryPolicy (DatasourcePreview.tsx:107)",
+   "healthCheck (DatasourcePreview.tsx:108)",
+   "capabilities (DatasourcePreview.tsx:116)",

× paints no Retry Policy / Health Check / Capabilities block (objectui#4131)
Test Files  2 failed (2) | Tests  4 failed | 18 passed (22)
  1. Plant a new rejected read on the fixed file (const plantedReplicas = d.readReplicas) — red, naming that one:
+   "readReplicas (DatasourcePreview.tsx:100)",
AssertionError: readReplicas is read again — see objectui#3275 / #3143

Restored after both; the working tree was byte-compared against a saved patch to confirm.

Tests

pnpm exec vitest run packages/app-shell/
  Test Files  332 passed (332)
  Tests  3109 passed | 1 skipped (3110)

pnpm exec vitest run packages/app-shell/src/views/metadata-admin/
  Test Files  141 passed (141)
  Tests  1460 passed | 1 skipped (1461)

pnpm --filter @object-ui/app-shell lint                     0 errors
npx eslint, on the three changed files only                 clean, no output
node scripts/check-control-bytes.mjs                        OK (3922 files)
pnpm changeset:check                                        OK
node scripts/check-changeset-presence.mjs                   1 changeset declared

Render pins alongside the read pin: a draft of declared keys only renders Pool and SSL and their contents; a draft carrying all three removed groups renders none of their titles and none of their values. Both fixtures are asserted against DatasourceSchema itself rather than described as valid in a comment, so they cannot drift into the state they exist to rule out.

Changeset: @object-ui/app-shell patch.

The three red CI jobs are main's rc.6 remainder, not this PR

This PR's four files are all under packages/app-shell/src/views/metadata-admin/previews/ plus one changeset. None of the three failing jobs touches them, and all three reproduce locally on this branch and on a clean origin/main @ a9a67ec5b worktree:

Job Fails in Already tracked as
Type Check check:spec-symbols — the objectstack#4115 collision guard, before pnpm type-check is ever reached #4167 item 1, verbatim: "currently the main red" — open PR #4189
Test (shard 2/4) apps/console/src/__tests__/registry-inputs-spec-parity.test.ts — 12 stale exemptions, and record_picker publishing sort / limit / emptyText #4167 item 2, verbatim (same 12 keys, same 3 keys) — open PR #4189
Test (shard 3/4) packages/plugin-detail/src/__tests__/recordDetailsInputs.spec-parity.test.ts"the spec really takes OBJECT sections" same rc.6 spec-parity class

Root cause for all three: 38ab5054f (#4169) bumped @objectstack/spec rc.5 to rc.6 at 03:30 today. The last pull request to run a full gate set before that (#4218, checks at 03:24) was green on every one of these jobs.

A fourth consequence of the same bump is visible only locally, because Type Check dies at check:spec-symbols before reaching it: pnpm --filter @object-ui/app-shell type-check reports three TS2322 errors in src/utils/resolveActionParams.test.ts (a file listed in tsconfig.typetests.json), because rc.6 widened ActionParamSchema.label to I18nLabel and app-shell's local RawActionParam.label?: string did not follow. Not filed as a twin — #4163 is being worked right now and its branch already carries exactly that fix (label?: I18nLabel, plus a new resolveActionParams.i18nLabel.test.ts).

Nothing here is fixed in this PR: each belongs to a card that is already dispatched (#4167 / #4189, #4163), and two parallel agents are in those files.


Generated by Claude Code

…ma accepts (#4131)

`retryPolicy`, `healthCheck` and `capabilities` were removed from the
datasource document by objectstack#4583 under ADR-0049 enforce-or-remove:
connection retry and health probing belong to the runtime driver, and
pushdown is decided by that driver's own `supports.*`, never by datasource
metadata. `DatasourceSchema` is `.strict()`, so it refuses all three by
name — while this preview kept painting a `Retry Policy` SideBlock, a
`Health Check` SideBlock and a `Capabilities` chip strip for them. An
author who typed any of the three saw the designer confirm a draft that
cannot be saved, and the preview was the only surface acknowledging the
keys at all, so it was also the strongest signal they worked.

Deleted: both SideBlocks, the chip strip, `enabledCapabilities()`, the
reads at `d.retryPolicy` / `d.healthCheck` / `d.capabilities`, and the now
unused `RotateCcw` import. `pool` and `ssl` are still declared and still
render.

This is the third wave of the same defect on this one file (#3275 deleted
`d.type`, `isDefault` and the `Array.isArray(capabilities)` branch; #3143
deleted the read-replica pill), and the removals sat in `main` for eight
days because nothing compared the two halves of the contract. They are
compared mechanically now: `DatasourcePreview.spec-keys.test.ts` derives
the preview's read set from the component's own AST — every key reached
off the `draft` prop, through dot access, optional chain, bracket or
destructure, following a renamed prop and alias chains — and derives the
accepted set from the schema object's `.keyof()`. Neither side is written
down as a list, so a key added or removed in `@objectstack/spec` moves the
pin on the next dependency bump instead of leaving it stale.

The pin also asserts things about itself, because a derivation that
silently returned nothing would satisfy a subset check forever: that it
still finds this file's real reads, and that every use of the draft
binding is a read form it understands, so it fails loudly rather than
going blind if the preview is refactored. Reverse-verified both ways —
restoring the pre-fix file turns it red naming all three keys at their
exact lines, and a freshly planted `d.readReplicas` read turns it red
naming that one.

The AST is load-bearing rather than a grep: the header comment now names
all three removed keys in prose, so a text scan would report violations
that do not exist.

Fixes #4131

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Qqyix2QcnpUC9XeYVDzx3
@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 11, 2026 5:43am

Request Review

@github-actions github-actions Bot added the tests label Aug 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

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

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.88KB 3.25KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
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) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
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) 4.91KB 0.87KB
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) 486.47KB 107.53KB
core (index.js) 3.04KB 1.15KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 143.81KB 37.39KB
fields (index.js) 228.33KB 56.58KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 4.52KB 1.96KB
layout (index.js) 38.87KB 10.80KB
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) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
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.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 45.23KB 12.45KB
plugin-charts (index.js) 61.52KB 17.49KB
plugin-chatbot (index.js) 180.33KB 42.79KB
plugin-dashboard (index.js) 118.52KB 30.68KB
plugin-designer (index.js) 210.51KB 42.51KB
plugin-detail (index.js) 238.21KB 59.54KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 114.58KB 27.68KB
plugin-gantt (index.js) 164.14KB 39.98KB
plugin-grid (index.js) 187.97KB 49.90KB
plugin-kanban (index.js) 48.60KB 13.41KB
plugin-list (index.js) 110.18KB 26.70KB
plugin-map (index.js) 17.00KB 5.32KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.58KB 10.58KB
plugin-timeline (index.js) 26.21KB 7.52KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 84.03KB 20.55KB
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) 23.71KB 7.95KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.23KB 0.66KB
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 (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) 2.71KB 1.34KB
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

@yinlianghui
yinlianghui marked this pull request as ready for review August 11, 2026 05:43
@yinlianghui
yinlianghui added this pull request to the merge queue Aug 11, 2026
Merged via the queue into main with commit ab37c5f Aug 11, 2026
21 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-4131-datasource-preview-strict branch August 11, 2026 05:44
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

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

📦 Bundle Size Report

Package Size Gzipped
app-shell (index.js) 8.88KB 3.25KB
app-shell (runtime-config.js) 7.42KB 2.32KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 7.57KB 2.97KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 1.17KB 0.53KB
auth (AuthProvider.js) 22.10KB 4.37KB
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) 35.76KB 9.11KB
auth (createAuthenticatedFetch.js) 4.37KB 1.69KB
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) 4.91KB 0.87KB
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) 488.60KB 108.25KB
core (index.js) 3.04KB 1.15KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 145.46KB 37.89KB
fields (index.js) 228.33KB 56.58KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (i18n.js) 4.32KB 1.77KB
i18n (index.js) 2.65KB 1.06KB
i18n (pickLocalized.js) 1.70KB 0.83KB
i18n (provider.js) 9.48KB 3.27KB
i18n (useObjectLabel.js) 27.59KB 6.63KB
i18n (useSafeTranslation.js) 4.52KB 1.96KB
layout (index.js) 38.98KB 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) 8.75KB 3.06KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 3.67KB 1.12KB
permissions (evaluator.js) 4.41KB 1.44KB
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.55KB 0.71KB
plugin-ai (index.js) 15.71KB 3.79KB
plugin-calendar (index.js) 45.23KB 12.45KB
plugin-charts (index.js) 61.52KB 17.49KB
plugin-chatbot (index.js) 180.33KB 42.79KB
plugin-dashboard (index.js) 118.58KB 30.71KB
plugin-designer (index.js) 210.85KB 42.64KB
plugin-detail (index.js) 238.21KB 59.54KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 114.58KB 27.68KB
plugin-gantt (index.js) 164.14KB 39.98KB
plugin-grid (index.js) 187.97KB 49.90KB
plugin-kanban (index.js) 48.60KB 13.41KB
plugin-list (index.js) 110.31KB 26.76KB
plugin-map (index.js) 17.00KB 5.32KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 40.58KB 10.58KB
plugin-timeline (index.js) 26.21KB 7.52KB
plugin-tree (index.js) 8.50KB 2.88KB
plugin-view (index.js) 84.03KB 20.55KB
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) 23.71KB 7.96KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 1.23KB 0.66KB
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 (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) 2.71KB 1.34KB
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

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.

DatasourcePreview renders three key groups DatasourceSchema (strict) now rejects — retryPolicy, healthCheck, capabilities

2 participants