@plumix/core 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/context/app.d.ts +12 -0
  2. package/dist/context/app.d.ts.map +1 -1
  3. package/dist/context/app.js +10 -4
  4. package/dist/context/app.js.map +1 -1
  5. package/dist/context/memo.d.ts +22 -0
  6. package/dist/context/memo.d.ts.map +1 -0
  7. package/dist/context/memo.js +27 -0
  8. package/dist/context/memo.js.map +1 -0
  9. package/dist/context/traced-slots.d.ts +17 -0
  10. package/dist/context/traced-slots.d.ts.map +1 -0
  11. package/dist/context/traced-slots.js +57 -0
  12. package/dist/context/traced-slots.js.map +1 -0
  13. package/dist/entries/read-service.d.ts +6 -0
  14. package/dist/entries/read-service.d.ts.map +1 -1
  15. package/dist/entries/read-service.js +14 -0
  16. package/dist/entries/read-service.js.map +1 -1
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/plugin/fields/entry.d.ts +8 -0
  22. package/dist/plugin/fields/entry.d.ts.map +1 -1
  23. package/dist/plugin/fields/entry.js.map +1 -1
  24. package/dist/plugin/lookup.d.ts +4 -9
  25. package/dist/plugin/lookup.d.ts.map +1 -1
  26. package/dist/plugin/manifest.d.ts +11 -32
  27. package/dist/plugin/manifest.d.ts.map +1 -1
  28. package/dist/plugin/manifest.js.map +1 -1
  29. package/dist/plugin/setup-context.d.ts +5 -0
  30. package/dist/plugin/setup-context.d.ts.map +1 -1
  31. package/dist/plugin/setup-context.js.map +1 -1
  32. package/dist/route/render/asset-manifest.d.ts +1 -1
  33. package/dist/route/render/asset-manifest.d.ts.map +1 -1
  34. package/dist/route/render/asset-manifest.js +7 -1
  35. package/dist/route/render/asset-manifest.js.map +1 -1
  36. package/dist/route/render/build-resolved-entries.d.ts.map +1 -1
  37. package/dist/route/render/build-resolved-entries.js +18 -10
  38. package/dist/route/render/build-resolved-entries.js.map +1 -1
  39. package/dist/route/render/render-template.d.ts +1 -1
  40. package/dist/route/render/render-template.d.ts.map +1 -1
  41. package/dist/route/render/render-template.js +38 -21
  42. package/dist/route/render/render-template.js.map +1 -1
  43. package/dist/rpc/meta/core.d.ts +3 -4
  44. package/dist/rpc/meta/core.d.ts.map +1 -1
  45. package/dist/rpc/meta/core.js +87 -152
  46. package/dist/rpc/meta/core.js.map +1 -1
  47. package/dist/rpc/procedures/entry/lookup.js +14 -11
  48. package/dist/rpc/procedures/entry/lookup.js.map +1 -1
  49. package/dist/rpc/procedures/lookup.errors.d.ts +2 -1
  50. package/dist/rpc/procedures/lookup.errors.d.ts.map +1 -1
  51. package/dist/rpc/procedures/lookup.errors.js +3 -0
  52. package/dist/rpc/procedures/lookup.errors.js.map +1 -1
  53. package/dist/rpc/procedures/term/lookup.js +3 -8
  54. package/dist/rpc/procedures/term/lookup.js.map +1 -1
  55. package/dist/runtime/dispatcher.d.ts.map +1 -1
  56. package/dist/runtime/dispatcher.js +70 -29
  57. package/dist/runtime/dispatcher.js.map +1 -1
  58. package/dist/telemetry-otel.d.ts +29 -0
  59. package/dist/telemetry-otel.d.ts.map +1 -0
  60. package/dist/telemetry-otel.js +218 -0
  61. package/dist/telemetry-otel.js.map +1 -0
  62. package/dist/template-deps-core.d.ts.map +1 -1
  63. package/dist/template-deps-core.js +31 -14
  64. package/dist/template-deps-core.js.map +1 -1
  65. package/dist/template-deps.d.ts.map +1 -1
  66. package/dist/template-deps.js +12 -8
  67. package/dist/template-deps.js.map +1 -1
  68. package/dist/test/index.d.ts +3 -0
  69. package/dist/test/index.d.ts.map +1 -1
  70. package/dist/test/index.js +4 -0
  71. package/dist/test/index.js.map +1 -1
  72. package/dist/test/traced-context.d.ts +17 -0
  73. package/dist/test/traced-context.d.ts.map +1 -0
  74. package/dist/test/traced-context.js +28 -0
  75. package/dist/test/traced-context.js.map +1 -0
  76. package/package.json +6 -2
@@ -54,7 +54,10 @@ async function renderThroughThemeInner({ ctx, theme, document, templateDeps, ass
54
54
  const deps = await loadTemplateDeps(mergeTemplateDepDeclarations(theme, template), templateDeps, ctx);
55
55
  const merged = resolveRenderDocument({ template, document, data, ctx, deps });
56
56
  const filtered = await ctx.hooks.applyFilter("render:document", merged, data, ctx);
57
- const renderDocument = await applyHeadMeta(applyCanonical(filtered, ctx), data, ctx, title);
57
+ // Head assembly reads site settings from the DB — worth its own row in the
58
+ // waterfall. The `render:document` subscribers above are already traced per
59
+ // handler as `hook:` spans.
60
+ const renderDocument = await ctx.telemetry.span("render: head", () => applyHeadMeta(applyCanonical(filtered, ctx), data, ctx, title));
58
61
  const loaderData = await prefetchEntryLoaders(ctx, data, template);
59
62
  return renderTree({
60
63
  ctx,
@@ -93,7 +96,15 @@ const ERROR_VARIANTS = {
93
96
  fallback: DefaultServerError,
94
97
  },
95
98
  };
96
- export async function renderErrorThroughTheme({ ctx, theme, document, templateDeps, assetManifest, kind, data, }) {
99
+ export function renderErrorThroughTheme(args) {
100
+ // Same phase span as the happy path — without it the error render's queries
101
+ // dangle directly under `dispatch` in the trace (#1491).
102
+ return args.ctx.telemetry.span("render", (s) => {
103
+ s.set("render.node", `error: ${ERROR_VARIANTS[args.kind].tier}`);
104
+ return renderErrorThroughThemeInner(args);
105
+ });
106
+ }
107
+ async function renderErrorThroughThemeInner({ ctx, theme, document, templateDeps, assetManifest, kind, data, }) {
97
108
  const variant = ERROR_VARIANTS[kind];
98
109
  const raw = resolveErrorTemplate(templateRules(theme.templates), variant.tier)
99
110
  ?.template ?? variant.fallback;
@@ -126,24 +137,29 @@ async function prefetchEntryLoaders(ctx, data, template) {
126
137
  const blocks = collectLoaderBlocks(data, template);
127
138
  if (blocks.length === 0)
128
139
  return undefined;
129
- return resolveBlockLoaders(blocks, ctx.blocks, ctx, {
130
- // Fire-and-forget bridge into the framework filter so plugins can
131
- // subscribe via `addFilter("blocks:loader:error", ...)`. `applyFilter`
132
- // is async; we don't await (the loader resolver shouldn't back-pressure
133
- // on observability), but we DO catch — a throwing subscriber would
134
- // otherwise surface as an unhandledRejection and on workers that
135
- // kills the request. `LoaderErrorEvent` shape matches `BlockLoaderErrorContext`.
136
- onLoaderError: (event) => {
137
- ctx.hooks
138
- .applyFilter("blocks:loader:error", undefined, event)
139
- .catch((hookError) => {
140
- ctx.logger.error("[plumix] blocks:loader:error hook threw", {
141
- hookError,
142
- blockName: event.spec.name,
143
- nodeId: event.node.id,
140
+ // Loader fan-out gets its own span so the DB/fetch work it triggers nests
141
+ // here instead of parenting onto `render` directly.
142
+ return ctx.telemetry.span("render: loaders", (s) => {
143
+ s.set("loaders.blocks", blocks.length);
144
+ return resolveBlockLoaders(blocks, ctx.blocks, ctx, {
145
+ // Fire-and-forget bridge into the framework filter so plugins can
146
+ // subscribe via `addFilter("blocks:loader:error", ...)`. `applyFilter`
147
+ // is async; we don't await (the loader resolver shouldn't back-pressure
148
+ // on observability), but we DO catch — a throwing subscriber would
149
+ // otherwise surface as an unhandledRejection and on workers that
150
+ // kills the request. `LoaderErrorEvent` shape matches `BlockLoaderErrorContext`.
151
+ onLoaderError: (event) => {
152
+ ctx.hooks
153
+ .applyFilter("blocks:loader:error", undefined, event)
154
+ .catch((hookError) => {
155
+ ctx.logger.error("[plumix] blocks:loader:error hook threw", {
156
+ hookError,
157
+ blockName: event.spec.name,
158
+ nodeId: event.node.id,
159
+ });
144
160
  });
145
- });
146
- },
161
+ },
162
+ });
147
163
  });
148
164
  }
149
165
  function collectLoaderBlocks(data, template) {
@@ -239,7 +255,8 @@ function renderTree({ ctx, document, assetManifest, data, title, template, deps,
239
255
  process.env.PLUMIX_DEV && editMode.mode !== "edit"
240
256
  ? createElement(PlumixDebugBar, { ctx })
241
257
  : null, createElement(TemplateAdapter));
242
- const rendered = renderToString(templateTree);
258
+ // The bulk of `render` self-time (#1494).
259
+ const rendered = ctx.telemetry.span("render: react", () => renderToString(templateTree));
243
260
  const { hoisted, body } = splitHoistedMetadata(rendered);
244
261
  const scripts = groupScriptsByPosition(document.script);
245
262
  const { code, direction } = ctx.locale;
@@ -271,7 +288,7 @@ function renderTree({ ctx, document, assetManifest, data, title, template, deps,
271
288
  hoisted +
272
289
  titleFallback +
273
290
  voidTagsToHtml("link", document.link) +
274
- bundledCssTags(assetManifest, ctx.basePath) +
291
+ bundledCssTags(assetManifest, command, ctx.basePath) +
275
292
  devThemeStylesTag(command, ctx.basePath) +
276
293
  voidTagsToHtml("meta", document.meta) +
277
294
  scripts.headEnd.map(scriptToHtml).join("");
@@ -1 +1 @@
1
- {"version":3,"file":"render-template.js","sourceRoot":"","sources":["../../../src/route/render/render-template.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-template.js","sourceRoot":"","sources":["../../../src/route/render/render-template.tsx"],"names":[],"mappings":"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"}
@@ -9,10 +9,9 @@ type MetaMap = Record<string, unknown>;
9
9
  * doesn't have to double-parse. `applyMetaPatch` JSON-encodes at the
10
10
  * last moment, before the UPDATE.
11
11
  *
12
- * `upserts` is mutable: `validateMetaReferences` rewrites values for
13
- * cached-object reference fields (`referenceTarget.valueShape ===
14
- * "object"`) to merge adapter-supplied cached fields into the
15
- * stored shape. Other callers should treat it as read-only.
12
+ * `upserts` is mutable: `validateMetaReferences` normalizes reference
13
+ * values to the plain-id storage form (a legacy `{ id, ... }` object
14
+ * self-heals to its id). Other callers should treat it as read-only.
16
15
  */
17
16
  export interface MetaPatch {
18
17
  readonly upserts: Map<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/rpc/meta/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/rpc/meta/core.ts"],"names":[],"mappings":"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"}
@@ -133,25 +133,13 @@ export async function validateMetaReferences(ctx, findField, patch) {
133
133
  throw MetaSanitizationError.invalidValue({ key });
134
134
  }
135
135
  const ids = referenceIdsForValidation(key, value, target, fieldMax(field));
136
+ // Normalize eagerly — a validation failure below aborts the whole
137
+ // save, so a rewritten patch never persists on the failure path.
138
+ patch.upserts.set(key, target.multiple ? ids : ids[0]);
136
139
  const group = upsertGroup(groups, target, registered);
137
140
  for (const id of ids)
138
141
  group.ids.add(id);
139
- group.contributions.push({
140
- errorKey: key,
141
- ids,
142
- applyNormalize: (rowsById) => {
143
- if (target.valueShape !== "object")
144
- return;
145
- if (target.multiple) {
146
- patch.upserts.set(key, ids.map((id) => buildCachedReference(id, rowsById)));
147
- return;
148
- }
149
- const [singleId] = ids;
150
- if (singleId !== undefined) {
151
- patch.upserts.set(key, buildCachedReference(singleId, rowsById));
152
- }
153
- },
154
- });
142
+ group.contributions.push({ errorKey: key, ids });
155
143
  continue;
156
144
  }
157
145
  // Repeater fields don't carry a `referenceTarget` themselves but
@@ -169,11 +157,10 @@ export async function validateMetaReferences(ctx, findField, patch) {
169
157
  for (const group of groups.values()) {
170
158
  if (group.ids.size === 0)
171
159
  continue;
172
- const liveRows = await fetchLiveRows(ctx, group.registered, group.scope, group.ids, "validateMetaReferences");
173
- const rowsById = new Map(liveRows.map((r) => [r.id, r]));
160
+ const liveIds = await fetchLiveIds(ctx, group.registered, group.scope, group.ids, "validateMetaReferences");
174
161
  for (const contribution of group.contributions) {
175
162
  for (const id of contribution.ids) {
176
- if (!rowsById.has(id)) {
163
+ if (!liveIds.has(id)) {
177
164
  if (contribution.diagnostic !== undefined) {
178
165
  // Wire error keys on the top-level field; this log line
179
166
  // is the only place the row index + subKey surface, so
@@ -192,7 +179,6 @@ export async function validateMetaReferences(ctx, findField, patch) {
192
179
  });
193
180
  }
194
181
  }
195
- contribution.applyNormalize(rowsById);
196
182
  }
197
183
  }
198
184
  }
@@ -222,30 +208,17 @@ function collectRepeaterReferences(ctx, topKey, field, rows, groups) {
222
208
  throw MetaSanitizationError.invalidValue({ key: topKey });
223
209
  }
224
210
  const ids = referenceIdsForValidation(topKey, subValue, target, fieldMax(subField));
211
+ // Normalize the row's slot in place — the top-level upsert array
212
+ // is the live storage shape, so mutating an object inside it is
213
+ // what the caller will serialize.
214
+ rowObj[subField.key] = target.multiple ? ids : ids[0];
225
215
  const group = upsertGroup(groups, target, registered);
226
216
  for (const id of ids)
227
217
  group.ids.add(id);
228
- const subKey = subField.key;
229
218
  group.contributions.push({
230
219
  errorKey: topKey,
231
220
  ids,
232
- diagnostic: { rowIdx, subKey },
233
- applyNormalize: (rowsById) => {
234
- if (target.valueShape !== "object")
235
- return;
236
- // Rewrite the row's cached-object value in place — the
237
- // top-level upsert array is the live storage shape, so
238
- // mutating an object inside it is what the caller will
239
- // serialize.
240
- if (target.multiple) {
241
- rowObj[subKey] = ids.map((id) => buildCachedReference(id, rowsById));
242
- return;
243
- }
244
- const [singleId] = ids;
245
- if (singleId !== undefined) {
246
- rowObj[subKey] = buildCachedReference(singleId, rowsById);
247
- }
248
- },
221
+ diagnostic: { rowIdx, subKey: subField.key },
249
222
  });
250
223
  }
251
224
  }
@@ -264,13 +237,6 @@ function upsertGroup(groups, target, registered) {
264
237
  }
265
238
  return group;
266
239
  }
267
- // Adapter cached fields override anything; user-supplied non-id keys
268
- // don't survive. Per-usage user fields (e.g. alt overrides) are a
269
- // post-v0.1 feature — when added, this is where they'd merge in.
270
- function buildCachedReference(id, rowsById) {
271
- const row = rowsById.get(id);
272
- return { id, ...(row?.cached ?? {}) };
273
- }
274
240
  // Defense-in-depth ceiling on the internal-aggregated id-batch size.
275
241
  // Above this, the live-id fetch throws rather than silently truncating.
276
242
  // The wire cap (100) and per-field cap (`HARD_MULTI_REFERENCE_LIMIT`,
@@ -305,20 +271,17 @@ function referenceGroupKey(target) {
305
271
  // 100, so we only hit the ceiling when many fields share `(kind, scope)`
306
272
  // and aggregate — at which point throwing beats silent truncation
307
273
  // (truncation would either reject valid writes or hide live targets).
308
- //
309
- // Returns `LookupResult[]` rather than just live ids so the validator
310
- // can read `cached` for the cached-object normalize step. Callers that
311
- // only care about presence build a `Set` from the row ids.
312
- async function fetchLiveRows(ctx, registered, scope, ids, callsite) {
274
+ async function fetchLiveIds(ctx, registered, scope, ids, callsite) {
313
275
  if (ids.size > MAX_REFERENCE_GROUP_BATCH) {
314
276
  throw MetaReferenceError.batchSizeExceeded(callsite, ids.size, MAX_REFERENCE_GROUP_BATCH);
315
277
  }
316
278
  const idList = [...ids];
317
- return registered.adapter.list(ctx, {
279
+ const rows = await registered.adapter.list(ctx, {
318
280
  ids: idList,
319
281
  scope,
320
282
  limit: idList.length,
321
283
  });
284
+ return new Set(rows.map((row) => row.id));
322
285
  }
323
286
  // Defensive upper bound on multi-reference array length, applied
324
287
  // per-field before grouping. Even with the batched `list({ ids })`
@@ -328,18 +291,11 @@ async function fetchLiveRows(ctx, registered, scope, ids, callsite) {
328
291
  // can declare a lower `max` and the validator picks the smaller.
329
292
  const HARD_MULTI_REFERENCE_LIMIT = 100;
330
293
  // Validates the wire shape of a reference value and returns the ids
331
- // to feed into the group's batched `list({ ids })` call. Four shapes
332
- // are accepted, dispatching on `target.multiple` + `target.valueShape`:
333
- //
334
- // - multi=true, valueShape="id" (default): string[] of non-empty ids
335
- // - multi=true, valueShape="object": `{ id }[]` — each item a
336
- // cached-object reference
337
- // (or bare strings for
338
- // leniency on first write)
339
- // - multi=false, valueShape="id" (default): bare string id
340
- // - multi=false, valueShape="object": `{ id: string, ... }`
341
- // (or a bare string for
342
- // leniency on first write)
294
+ // to feed into the group's batched `list({ ids })` call. Storage is
295
+ // plain ids a bare string (single) or string[] (multi) — but each
296
+ // slot leniently accepts the retired cached-object shape
297
+ // (`{ id, ... }`) so legacy values self-heal to the plain form on
298
+ // the entity's next save.
343
299
  function referenceIdsForValidation(key, value, target, max) {
344
300
  if (target.multiple) {
345
301
  if (!Array.isArray(value)) {
@@ -351,47 +307,17 @@ function referenceIdsForValidation(key, value, target, max) {
351
307
  if (max !== undefined && value.length > max) {
352
308
  throw MetaSanitizationError.invalidValue({ key });
353
309
  }
354
- if (target.valueShape === "object") {
355
- // Lenient on input: each item can be `"42"` (first-write
356
- // convenience) or `{ id: "42", ... }`. Always rewritten to the
357
- // canonical `{ id, ...cached }` shape after the live-id check.
358
- const ids = [];
359
- for (const item of value) {
360
- if (typeof item === "string" && item !== "") {
361
- ids.push(item);
362
- continue;
363
- }
364
- const id = extractStringId(item);
365
- if (id !== null && id !== "") {
366
- ids.push(id);
367
- continue;
368
- }
369
- throw MetaSanitizationError.invalidValue({ key });
370
- }
371
- return ids;
372
- }
373
- for (const item of value) {
374
- if (typeof item !== "string" || item === "") {
375
- throw MetaSanitizationError.invalidValue({ key });
376
- }
377
- }
378
- return value;
379
- }
380
- if (target.valueShape === "object") {
381
- // Lenient on input: accept either `"42"` (first-write convenience)
382
- // or `{ id: "42", ... }`. Always rewritten to the canonical
383
- // `{ id, ...cached }` shape after the live-id check.
384
- if (typeof value === "string" && value !== "")
385
- return [value];
386
- const id = extractStringId(value);
387
- if (id !== null && id !== "")
388
- return [id];
389
- throw MetaSanitizationError.invalidValue({ key });
390
- }
391
- if (typeof value !== "string") {
392
- throw MetaSanitizationError.invalidValue({ key });
310
+ return value.map((item) => referenceItemId(key, item));
393
311
  }
394
- return [value];
312
+ return [referenceItemId(key, value)];
313
+ }
314
+ function referenceItemId(key, item) {
315
+ if (typeof item === "string" && item !== "")
316
+ return item;
317
+ const id = extractStringId(item);
318
+ if (id !== null && id !== "")
319
+ return id;
320
+ throw MetaSanitizationError.invalidValue({ key });
395
321
  }
396
322
  // Returns the `id` string of a `{ id: string, ... }` object, or null
397
323
  // for any other shape (string, array, null, primitive, missing key).
@@ -478,7 +404,6 @@ export async function filterMetaOrphans(ctx, findField, decoded) {
478
404
  candidates.push({
479
405
  key: occ.key,
480
406
  multiple: occ.target.multiple === true,
481
- valueShape: occ.target.valueShape ?? "id",
482
407
  groupKey,
483
408
  ids,
484
409
  nested: occ.nested,
@@ -496,38 +421,26 @@ export async function filterMetaOrphans(ctx, findField, decoded) {
496
421
  // Pass 2: one `list({ ids })` per group, keyed for O(1) apply lookup.
497
422
  const liveIdsByGroup = new Map();
498
423
  for (const [groupKey, group] of groups) {
499
- const rows = await fetchLiveRows(ctx, group.registered, group.scope, group.ids, "filterMetaOrphans");
500
- liveIdsByGroup.set(groupKey, new Set(rows.map((row) => row.id)));
501
- }
502
- // Pass 3: apply the filter. Orphan handling differs by shape:
503
- // - multi + id: filter the string[] in place, dropping missing
504
- // - multi + object: filter the object[] preserving order
505
- // - single + id: null on missing
506
- // - single + object: null on missing; otherwise keep the stored
507
- // cached value as-is (no read-time refresh — write rewrites)
508
- // Nested-in-repeater candidates rewrite the row's subField slot in
509
- // a per-key cloned array so the input bag stays untouched.
424
+ const liveIds = await fetchLiveIds(ctx, group.registered, group.scope, group.ids, "filterMetaOrphans");
425
+ liveIdsByGroup.set(groupKey, liveIds);
426
+ }
427
+ // Pass 3: apply the filter. Multi refs filter the string[] dense
428
+ // and in order; single refs null on missing. Nested-in-repeater
429
+ // candidates rewrite the row's subField slot in a per-key cloned
430
+ // array so the input bag stays untouched.
510
431
  const out = { ...decoded };
511
432
  const empty = new Set();
512
433
  for (const candidate of candidates) {
513
- const { key, multiple, valueShape, groupKey, ids, nested } = candidate;
434
+ const { key, multiple, groupKey, ids, nested } = candidate;
514
435
  const liveIds = liveIdsByGroup.get(groupKey) ?? empty;
515
436
  if (nested !== undefined) {
516
437
  const rowObj = takeWritableRow(out, decoded, key, nested.rowIdx);
517
438
  if (!rowObj)
518
439
  continue;
519
- applyOrphanToSlot(rowObj, nested.subKey, multiple, valueShape, ids, liveIds);
440
+ applyOrphanToSlot(rowObj, nested.subKey, multiple, ids, liveIds);
520
441
  continue;
521
442
  }
522
443
  if (multiple) {
523
- if (valueShape === "object") {
524
- const stored = decoded[key];
525
- out[key] = stored.filter((item) => {
526
- const id = extractStringId(item);
527
- return id !== null && liveIds.has(id);
528
- });
529
- continue;
530
- }
531
444
  out[key] = ids.filter((id) => liveIds.has(id));
532
445
  continue;
533
446
  }
@@ -560,16 +473,8 @@ function takeWritableRow(out, decoded, key, rowIdx) {
560
473
  return null;
561
474
  return row;
562
475
  }
563
- function applyOrphanToSlot(rowObj, subKey, multiple, valueShape, ids, liveIds) {
476
+ function applyOrphanToSlot(rowObj, subKey, multiple, ids, liveIds) {
564
477
  if (multiple) {
565
- if (valueShape === "object") {
566
- const stored = rowObj[subKey];
567
- rowObj[subKey] = stored.filter((item) => {
568
- const id = extractStringId(item);
569
- return id !== null && liveIds.has(id);
570
- });
571
- return;
572
- }
573
478
  rowObj[subKey] = ids.filter((id) => liveIds.has(id));
574
479
  return;
575
480
  }
@@ -582,29 +487,15 @@ function applyOrphanToSlot(rowObj, subKey, multiple, valueShape, ids, liveIds) {
582
487
  // Returns `null` to mean "no candidates from this key" (skip), or
583
488
  // the ids to feed into the group's batch query. Mirrors the storage-
584
489
  // shape guards in the apply step so we don't enqueue work that's
585
- // going to be skipped. Cached-object values (`valueShape === "object"`)
586
- // extract `id` from the object the rest of the cached fields are
587
- // trusted on read (refresh happens on next write via the validator's
588
- // normalize step, not on every render).
490
+ // going to be skipped. Callers pass values already decoded through
491
+ // `decodeMetaBag`, so legacy object shapes have been healed to plain
492
+ // ids by the time this runs.
589
493
  function orphanCandidateIds(target, value) {
590
494
  if (target.multiple) {
591
495
  if (!Array.isArray(value))
592
496
  return null;
593
- if (target.valueShape === "object") {
594
- const ids = [];
595
- for (const item of value) {
596
- const id = extractStringId(item);
597
- if (id !== null)
598
- ids.push(id);
599
- }
600
- return ids;
601
- }
602
497
  return value.filter((id) => typeof id === "string");
603
498
  }
604
- if (target.valueShape === "object") {
605
- const id = extractStringId(value);
606
- return id !== null ? [id] : null;
607
- }
608
499
  return typeof value === "string" ? [value] : null;
609
500
  }
610
501
  function referenceTargetOf(field) {
@@ -626,10 +517,54 @@ export function decodeMetaBag(findField, raw) {
626
517
  const out = {};
627
518
  for (const [key, value] of Object.entries(raw)) {
628
519
  const field = findField(key);
629
- out[key] = field ? coerceOnRead(field.type, value) : value;
520
+ out[key] = field ? decodeFieldValue(field, value) : value;
630
521
  }
631
522
  return out;
632
523
  }
524
+ // Reference storage is plain ids, but bags written before the
525
+ // write-time snapshot machinery was removed may hold `{ id, ... }`
526
+ // objects. Reads yield the id; the next save persists the plain form
527
+ // (`referenceItemId` accepts the legacy shape on write).
528
+ function decodeFieldValue(field, value) {
529
+ const target = referenceTargetOf(field);
530
+ if (target)
531
+ return healReferenceValue(target, value);
532
+ if (isRepeaterField(field) && Array.isArray(value)) {
533
+ return value.map((row) => healRepeaterRow(field, row));
534
+ }
535
+ return coerceOnRead(field.type, value);
536
+ }
537
+ function healReferenceValue(target, value) {
538
+ if (target.multiple) {
539
+ if (!Array.isArray(value))
540
+ return value;
541
+ // Identity-preserving on the already-plain path — `healRepeaterRow`
542
+ // clones a row only when the healed slot differs.
543
+ if (!value.some((item) => extractStringId(item) !== null)) {
544
+ return value;
545
+ }
546
+ return value.map((item) => extractStringId(item) ?? item);
547
+ }
548
+ return extractStringId(value) ?? value;
549
+ }
550
+ function healRepeaterRow(field, row) {
551
+ if (!row || typeof row !== "object" || Array.isArray(row))
552
+ return row;
553
+ const rowObj = row;
554
+ let healed = null;
555
+ for (const subField of field.subFields) {
556
+ const target = referenceTargetOf(subField);
557
+ if (!target)
558
+ continue;
559
+ const value = rowObj[subField.key];
560
+ const next = healReferenceValue(target, value);
561
+ if (next !== value) {
562
+ healed ??= { ...rowObj };
563
+ healed[subField.key] = next;
564
+ }
565
+ }
566
+ return healed ?? row;
567
+ }
633
568
  export function isEmptyMetaPatch(patch) {
634
569
  return (patch === null || (patch.upserts.size === 0 && patch.deletes.length === 0));
635
570
  }