@almadar/core 10.129.0 → 11.0.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 (132) hide show
  1. package/dist/behavior-package.d.ts +49 -11
  2. package/dist/behavior-package.js +1 -1
  3. package/dist/{orbital-CkFdDS9f.d.ts → builders-BhnofAik.d.ts} +5966 -7116
  4. package/dist/builders.d.ts +6 -6
  5. package/dist/builders.js +7 -6
  6. package/dist/{bus-CcbB__oo.d.ts → bus-BrRFWDQK.d.ts} +270 -354
  7. package/dist/chunk-347APWFM.js +286 -0
  8. package/dist/chunk-347APWFM.js.map +1 -0
  9. package/dist/chunk-3URQAGD7.js +98 -0
  10. package/dist/chunk-3URQAGD7.js.map +1 -0
  11. package/dist/chunk-7GHJU5WI.js +39 -0
  12. package/dist/chunk-7GHJU5WI.js.map +1 -0
  13. package/dist/chunk-B4MNHGBP.js +8 -0
  14. package/dist/chunk-B4MNHGBP.js.map +1 -0
  15. package/dist/{chunk-KDMV222Q.js → chunk-F6KHUW7T.js} +304 -373
  16. package/dist/chunk-F6KHUW7T.js.map +1 -0
  17. package/dist/chunk-FGT5OS2Y.js +918 -0
  18. package/dist/chunk-FGT5OS2Y.js.map +1 -0
  19. package/dist/chunk-FQLEAMAB.js +24 -0
  20. package/dist/chunk-FQLEAMAB.js.map +1 -0
  21. package/dist/chunk-HEXOGHQ4.js +3264 -0
  22. package/dist/chunk-HEXOGHQ4.js.map +1 -0
  23. package/dist/chunk-JCD6GLBX.js +412 -0
  24. package/dist/chunk-JCD6GLBX.js.map +1 -0
  25. package/dist/{chunk-QUOTJULD.js → chunk-MGLG2XLD.js} +20 -219
  26. package/dist/chunk-MGLG2XLD.js.map +1 -0
  27. package/dist/chunk-MTBEBSNO.js +1293 -0
  28. package/dist/chunk-MTBEBSNO.js.map +1 -0
  29. package/dist/{chunk-X4SC7FGF.js → chunk-RGACZEYC.js} +99 -96
  30. package/dist/chunk-RGACZEYC.js.map +1 -0
  31. package/dist/{chunk-RYPVOI6H.js → chunk-UZPYYI37.js} +524 -26
  32. package/dist/{chunk-RYPVOI6H.js.map → chunk-UZPYYI37.js.map} +1 -1
  33. package/dist/chunk-VG7BRFUD.js +152 -0
  34. package/dist/chunk-VG7BRFUD.js.map +1 -0
  35. package/dist/chunk-Y2DYZPP5.js +2329 -0
  36. package/dist/chunk-Y2DYZPP5.js.map +1 -0
  37. package/dist/chunk-ZEI7C32D.js +1566 -0
  38. package/dist/chunk-ZEI7C32D.js.map +1 -0
  39. package/dist/{domain-Dz3jP-UM.d.ts → domain-CfKPpXCP.d.ts} +51 -51
  40. package/dist/{effect-result-Bebwu9yT.d.ts → effect-result-DPERsn_v.d.ts} +641 -851
  41. package/dist/{effect-CiEVLsZz.d.ts → effect-wP-IdRt2.d.ts} +236 -443
  42. package/dist/{expression-D0Fs0riG.d.ts → expression-DirYKz-f.d.ts} +5 -13
  43. package/dist/factory/index.d.ts +7 -144
  44. package/dist/factory/index.js +8 -8
  45. package/dist/factory-runtime/index.d.ts +7 -6
  46. package/dist/factory-runtime/index.js +527 -8
  47. package/dist/factory-runtime/index.js.map +1 -1
  48. package/dist/fixtures.d.ts +9 -11
  49. package/dist/fixtures.js +12 -8
  50. package/dist/fixtures.js.map +1 -1
  51. package/dist/i18n/index.d.ts +15 -19
  52. package/dist/i18n/index.js +2 -1
  53. package/dist/{index-BC-Jycqj.d.ts → index-DomgmRBG.d.ts} +29 -729
  54. package/dist/index.d.ts +69 -247
  55. package/dist/index.js +322 -986
  56. package/dist/index.js.map +1 -1
  57. package/dist/kernel-wire.d.ts +3 -3
  58. package/dist/kernel-wire.js +3 -79
  59. package/dist/kernel-wire.js.map +1 -1
  60. package/dist/language/constructs.json +22 -2
  61. package/dist/language/program-types.json +203 -22
  62. package/dist/language/protocols.json +46 -0
  63. package/dist/language/ui-vocabulary.json +1697 -0
  64. package/dist/language/validation-codes.json +1205 -1215
  65. package/dist/language/vocabulary.json +44 -8
  66. package/dist/language-data.d.ts +7 -4
  67. package/dist/language-data.js +20 -14
  68. package/dist/language-data.js.map +1 -1
  69. package/dist/patterns/component-mapping.json +11 -1
  70. package/dist/patterns/definitions.d.ts +2 -2
  71. package/dist/patterns/definitions.js +1 -1
  72. package/dist/patterns/event-contracts.json +1 -15
  73. package/dist/patterns/index.d.ts +24 -120
  74. package/dist/patterns/index.js +3 -3
  75. package/dist/patterns/patterns-registry.json +522 -24
  76. package/dist/patterns/registry.json +522 -24
  77. package/dist/trait-CzG9M89M.d.ts +3519 -0
  78. package/dist/types/index.d.ts +9 -10
  79. package/dist/types/index.js +11 -5
  80. package/dist/{types-DGwrltUF.d.ts → types-BHlTjwWd.d.ts} +3 -3
  81. package/fixtures/events-wire/client-effects-by-trait/response.json +0 -18
  82. package/fixtures/events-wire/client-effects-provenance/response.json +0 -18
  83. package/fixtures/events-wire/effect-results-every-kind/response.json +2 -27
  84. package/fixtures/events-wire/navigate-1/response.json +8 -5
  85. package/fixtures/events-wire/navigate-2/response.json +11 -8
  86. package/fixtures/events-wire/navigate-3/response.json +14 -11
  87. package/fixtures/events-wire/navigate-back/response.json +7 -4
  88. package/fixtures/events-wire/render-ui-3/response.json +12 -9
  89. package/fixtures/events-wire/render-ui-clear/response.json +0 -7
  90. package/fixtures/events-wire/sse-stream/response.json +0 -20
  91. package/fixtures/events-wire/sse-stream/stream.json +0 -20
  92. package/fixtures/events-wire/stateless-traits/response.json +14 -5
  93. package/fixtures/kernel-wire/golden/basic-entity.json +1687 -0
  94. package/fixtures/kernel-wire/golden/entity-rerender.json +743 -0
  95. package/fixtures/kernel-wire/golden/rollback.json +793 -0
  96. package/fixtures/kernel-wire/golden/tick-counter.json +1538 -0
  97. package/fixtures/kernel-wire/golden/two-orbital-chore.json +847 -0
  98. package/fixtures/kernel-wire/golden/two-orbital-task.json +457 -0
  99. package/fixtures/kernel-wire/played-step.json +136 -0
  100. package/fixtures/kernel-wire/scripts/basic-entity.json +28 -0
  101. package/fixtures/kernel-wire/scripts/entity-rerender.json +13 -0
  102. package/fixtures/kernel-wire/scripts/rollback.json +53 -0
  103. package/fixtures/kernel-wire/scripts/tick-counter.json +26 -0
  104. package/fixtures/kernel-wire/scripts/two-orbital-chore.json +9 -0
  105. package/fixtures/kernel-wire/scripts/two-orbital-task.json +9 -0
  106. package/package.json +28 -19
  107. package/dist/builders-DmZE5By0.d.ts +0 -2663
  108. package/dist/chunk-45I2O4SJ.js +0 -4646
  109. package/dist/chunk-45I2O4SJ.js.map +0 -1
  110. package/dist/chunk-6LR43Z5E.js +0 -3061
  111. package/dist/chunk-6LR43Z5E.js.map +0 -1
  112. package/dist/chunk-GIUA3NUJ.js +0 -809
  113. package/dist/chunk-GIUA3NUJ.js.map +0 -1
  114. package/dist/chunk-GTY53NS5.js +0 -1908
  115. package/dist/chunk-GTY53NS5.js.map +0 -1
  116. package/dist/chunk-JOHDVS6J.js +0 -1614
  117. package/dist/chunk-JOHDVS6J.js.map +0 -1
  118. package/dist/chunk-KDMV222Q.js.map +0 -1
  119. package/dist/chunk-QRHJUS3D.js +0 -23
  120. package/dist/chunk-QRHJUS3D.js.map +0 -1
  121. package/dist/chunk-QUOTJULD.js.map +0 -1
  122. package/dist/chunk-V5VNGRVU.js +0 -66
  123. package/dist/chunk-V5VNGRVU.js.map +0 -1
  124. package/dist/chunk-X4SC7FGF.js.map +0 -1
  125. package/dist/entityAccess-BPSz1i2n.d.ts +0 -80
  126. package/dist/mock/index.d.ts +0 -153
  127. package/dist/mock/index.js +0 -190
  128. package/dist/mock/index.js.map +0 -1
  129. package/dist/schema-T5RT5s6H.d.ts +0 -282
  130. package/dist/state-machine/index.d.ts +0 -359
  131. package/dist/state-machine/index.js +0 -3
  132. package/dist/state-machine/index.js.map +0 -1
@@ -1,11 +1,18 @@
1
- import { orbitalTouchesOwnRecord, applyParamsToOrb } from '../chunk-6LR43Z5E.js';
2
- export { applyDeclarationEntityRename, applyDeclarationTraitRenames, applyParamsToOrb, declaredEntityName, healEntityLedgerRows, healTraitLedgerRows, rebindInlineTraitEntity, rewriteEntityInInlineTrait, rewriteTraitRefsInTree, validateOrbitalFactoryParams } from '../chunk-6LR43Z5E.js';
3
- export { mergeCallSiteConfigOverrides } from '../chunk-45I2O4SJ.js';
1
+ import { orbitalTouchesOwnRecord } from '../chunk-FQLEAMAB.js';
2
+ import '../chunk-HEXOGHQ4.js';
3
+ import '../chunk-3URQAGD7.js';
4
+ import '../chunk-MTBEBSNO.js';
5
+ import { makeOrbitalWithUses, makePageRef, makeTraitRef } from '../chunk-JCD6GLBX.js';
6
+ import { overrideDeclaredKnobs, mergeCallSiteConfigOverrides } from '../chunk-ZEI7C32D.js';
7
+ export { mergeCallSiteConfigOverrides } from '../chunk-ZEI7C32D.js';
4
8
  import '../chunk-M4S2B5VJ.js';
5
- import { persistenceModeAllowsOverrides } from '../chunk-GTY53NS5.js';
6
- import '../chunk-QUOTJULD.js';
7
- import '../chunk-RYPVOI6H.js';
8
- import '../chunk-QRHJUS3D.js';
9
+ import { persistenceModeAllowsOverrides } from '../chunk-FGT5OS2Y.js';
10
+ import '../chunk-347APWFM.js';
11
+ import { ledgerRename } from '../chunk-VG7BRFUD.js';
12
+ import '../chunk-B4MNHGBP.js';
13
+ import '../chunk-MGLG2XLD.js';
14
+ import '../chunk-7GHJU5WI.js';
15
+ import '../chunk-UZPYYI37.js';
9
16
 
10
17
  // src/factory-runtime/extract-manifest.ts
11
18
  var STATIC_PARAM_FIELDS = [
@@ -98,6 +105,518 @@ function extractManifest(orb) {
98
105
  });
99
106
  }
100
107
 
108
+ // src/factory-runtime/apply-params-to-orb.ts
109
+ function validateOrbitalFactoryParams(manifest, raw) {
110
+ if (raw === null || Array.isArray(raw)) {
111
+ return {
112
+ ok: false,
113
+ error: { kind: "not-object", received: Array.isArray(raw) ? "array" : "null" }
114
+ };
115
+ }
116
+ const ALLOWED_KEYS = new Set(manifest.paramFields.map((f) => f.name));
117
+ for (const key of Object.keys(raw)) {
118
+ if (!ALLOWED_KEYS.has(key)) {
119
+ return { ok: false, error: { kind: "unknown-key", key } };
120
+ }
121
+ }
122
+ const candidate = raw;
123
+ if (candidate.traitOverrides !== void 0) {
124
+ const to = candidate.traitOverrides;
125
+ if (to === null || typeof to !== "object" || Array.isArray(to)) {
126
+ return {
127
+ ok: false,
128
+ error: {
129
+ kind: "trait-overrides-not-object",
130
+ received: Array.isArray(to) ? "array" : typeof to
131
+ }
132
+ };
133
+ }
134
+ const allowed = new Set(manifest.traitNames);
135
+ for (const traitName of Object.keys(to)) {
136
+ if (!allowed.has(traitName)) {
137
+ return {
138
+ ok: false,
139
+ error: {
140
+ kind: "unknown-trait-override",
141
+ trait: traitName,
142
+ allowed: manifest.traitNames
143
+ }
144
+ };
145
+ }
146
+ }
147
+ }
148
+ if (candidate.config !== void 0) {
149
+ const cfg = candidate.config;
150
+ if (cfg === null || typeof cfg !== "object" || Array.isArray(cfg)) {
151
+ return {
152
+ ok: false,
153
+ error: { kind: "config-not-object", received: Array.isArray(cfg) ? "array" : typeof cfg }
154
+ };
155
+ }
156
+ const allowedKeys = manifest.configKeys ?? [];
157
+ for (const key of Object.keys(cfg)) {
158
+ if (!allowedKeys.includes(key)) {
159
+ return { ok: false, error: { kind: "unknown-config-key", key, allowed: allowedKeys } };
160
+ }
161
+ }
162
+ }
163
+ return { ok: true, params: candidate };
164
+ }
165
+ function assertResolvedEntity(entity, orbitalName, orbName) {
166
+ if (typeof entity === "string") {
167
+ throw new Error(
168
+ `applyParamsToOrb: orbital "${orbitalName}" in orb "${orbName}" has an unresolved entity reference (string form). Pass a resolved .orb.`
169
+ );
170
+ }
171
+ if ("extends" in entity) {
172
+ throw new Error(
173
+ `applyParamsToOrb: orbital "${orbitalName}" in orb "${orbName}" has an unresolved EntityCall ("extends" form). Pass a resolved .orb.`
174
+ );
175
+ }
176
+ return entity;
177
+ }
178
+ function findOrbitalOrThrow(orb, orbitalName) {
179
+ const orbital = orb.orbitals.find((o) => o.name === orbitalName);
180
+ if (!orbital) {
181
+ throw new Error(
182
+ `applyParamsToOrb: orbital "${orbitalName}" not found in orb "${orb.name}". Available: ${orb.orbitals.map((o) => o.name).join(", ")}`
183
+ );
184
+ }
185
+ return orbital;
186
+ }
187
+ function buildEntity(ctx, effectiveName, effectiveCollection, params) {
188
+ const canonicalFields = Array.isArray(ctx.canonicalEntity.fields) ? ctx.canonicalEntity.fields : [];
189
+ const extras = params.fields ?? [];
190
+ for (const f of extras) {
191
+ if (f.type === "enum") {
192
+ if (!Array.isArray(f.values) || f.values.length === 0) {
193
+ throw new Error(
194
+ `Field "${f.name ?? "<unnamed>"}" (type: "enum") requires a non-empty \`values: string[]\` array. Got: ${f.values === void 0 ? "undefined" : JSON.stringify(f.values)}.`
195
+ );
196
+ }
197
+ }
198
+ if (f.type === "relation") {
199
+ const rel = f.relation;
200
+ if (!rel || typeof rel.entity !== "string" || rel.entity.length === 0) {
201
+ throw new Error(
202
+ `Field "${f.name ?? "<unnamed>"}" (type: "relation") requires \`relation: { entity: <EntityName>, cardinality: "one" | "many" }\`. Got: ${rel === void 0 ? "undefined" : JSON.stringify(rel)}.`
203
+ );
204
+ }
205
+ if (rel.cardinality !== "one" && rel.cardinality !== "many") {
206
+ throw new Error(
207
+ `Field "${f.name ?? "<unnamed>"}" (type: "relation") requires \`relation.cardinality: "one" | "many"\`. Got: ${rel.cardinality === void 0 ? "undefined" : JSON.stringify(rel.cardinality)}.`
208
+ );
209
+ }
210
+ }
211
+ }
212
+ let mergedFields;
213
+ if (extras.length === 0) {
214
+ mergedFields = canonicalFields;
215
+ } else {
216
+ const extraNames = new Set(extras.map((f) => f.name));
217
+ mergedFields = [
218
+ ...canonicalFields.filter((f) => !extraNames.has(f.name)),
219
+ ...extras
220
+ ];
221
+ }
222
+ const allowPersistenceOverride = persistenceModeAllowsOverrides(
223
+ ctx.canonicalEntity.persistence,
224
+ ctx.dataBearing
225
+ );
226
+ const entity = {
227
+ name: effectiveName,
228
+ persistence: allowPersistenceOverride ? params.persistence ?? ctx.canonicalEntity.persistence : ctx.canonicalEntity.persistence,
229
+ fields: [...mergedFields]
230
+ };
231
+ if (allowPersistenceOverride && effectiveCollection !== void 0) {
232
+ entity.collection = effectiveCollection;
233
+ } else if (allowPersistenceOverride && entity.persistence === "persistent" && ctx.canonicalEntity.persistence === "runtime") {
234
+ entity.collection = `${(params.entityName ?? effectiveName).toLowerCase()}s`;
235
+ }
236
+ return entity;
237
+ }
238
+ function isTraitReferenceObject(t) {
239
+ if (t === null || typeof t !== "object") return false;
240
+ if (!("ref" in t)) return false;
241
+ return typeof t.ref === "string";
242
+ }
243
+ function isPageRefObject(p) {
244
+ if (p === null || typeof p !== "object") return false;
245
+ if (!("ref" in p)) return false;
246
+ return typeof p.ref === "string";
247
+ }
248
+ function rewriteInlineLinkedEntity(shape, oldName, newName) {
249
+ if (shape.linkedEntity !== oldName) return shape;
250
+ return { ...shape, linkedEntity: newName };
251
+ }
252
+ var ENTITY_POSITIONAL_OPS = [
253
+ { op: "fetch", entityIndex: 1 },
254
+ { op: "spawn", entityIndex: 1 },
255
+ { op: "persist", actionGuard: /* @__PURE__ */ new Set(["create", "update", "delete"]), entityIndex: 2 }
256
+ ];
257
+ var ENTITY_VALUED_PROPS = /* @__PURE__ */ new Set([
258
+ "entity",
259
+ "source",
260
+ "entityType",
261
+ "linkedEntity"
262
+ ]);
263
+ function rewriteEntityInSExpr(value, oldName, newName) {
264
+ if (value === null) return null;
265
+ if (typeof value === "boolean" || typeof value === "number") return value;
266
+ if (typeof value === "string") {
267
+ const prefix = `@${oldName}`;
268
+ if (value === prefix || value.startsWith(`${prefix}.`)) {
269
+ return `@${newName}${value.slice(prefix.length)}`;
270
+ }
271
+ return value;
272
+ }
273
+ if (Array.isArray(value)) {
274
+ const first = value[0];
275
+ if (typeof first === "string") {
276
+ for (const entry of ENTITY_POSITIONAL_OPS) {
277
+ if (first !== entry.op) continue;
278
+ if (entry.actionGuard !== void 0) {
279
+ const action = value[1];
280
+ if (typeof action !== "string" || !entry.actionGuard.has(action)) continue;
281
+ }
282
+ const at = entry.entityIndex;
283
+ const slot = value[at];
284
+ if (typeof slot !== "string" || slot !== oldName) continue;
285
+ const rewritten = [];
286
+ for (let i = 0; i < value.length; i++) {
287
+ rewritten.push(i === at ? newName : rewriteEntityInSExpr(value[i], oldName, newName));
288
+ }
289
+ return rewritten;
290
+ }
291
+ }
292
+ return value.map((v) => rewriteEntityInSExpr(v, oldName, newName));
293
+ }
294
+ return rewriteEntityInSExprMap(value, oldName, newName);
295
+ }
296
+ function rewriteEntityInSExprMap(obj, oldName, newName) {
297
+ const next = {};
298
+ for (const [k, v] of Object.entries(obj)) {
299
+ if (ENTITY_VALUED_PROPS.has(k) && typeof v === "string" && v === oldName) {
300
+ next[k] = newName;
301
+ } else {
302
+ next[k] = rewriteEntityInSExpr(v, oldName, newName);
303
+ }
304
+ }
305
+ return next;
306
+ }
307
+ function rewritePayloadFieldType(typeStr, oldName, newName) {
308
+ if (typeStr === oldName) return newName;
309
+ if (typeStr === `[${oldName}]`) return `[${newName}]`;
310
+ return typeStr;
311
+ }
312
+ function rewriteEventContract(contract, oldName, newName) {
313
+ if (!contract.payloadSchema || contract.payloadSchema.length === 0) return contract;
314
+ return {
315
+ ...contract,
316
+ payloadSchema: contract.payloadSchema.map((f) => {
317
+ const next = { ...f, type: rewritePayloadFieldType(f.type, oldName, newName) };
318
+ if (typeof f.entity === "string" && f.entity === oldName) {
319
+ next.entity = newName;
320
+ }
321
+ return next;
322
+ })
323
+ };
324
+ }
325
+ function rewriteListener(listener, oldName, newName) {
326
+ if (!listener.payloadMapping) return listener;
327
+ const nextMapping = {};
328
+ for (const [k, v] of Object.entries(listener.payloadMapping)) {
329
+ nextMapping[k] = rewriteEntityInSExpr(v, oldName, newName);
330
+ }
331
+ return { ...listener, payloadMapping: nextMapping };
332
+ }
333
+ function rewriteTick(tick, oldName, newName) {
334
+ const next = { ...tick };
335
+ if (next.guard !== void 0 && next.guard !== null) {
336
+ next.guard = rewriteEntityInSExpr(next.guard, oldName, newName);
337
+ }
338
+ next.effects = next.effects.map(
339
+ (e) => rewriteEntityInSExpr(e, oldName, newName)
340
+ );
341
+ return next;
342
+ }
343
+ function rebindInlineTraitEntity(trait, oldName, newName) {
344
+ if (oldName === newName) return trait;
345
+ return rewriteEntityInInlineTrait(rewriteInlineLinkedEntity(trait, oldName, newName), oldName, newName);
346
+ }
347
+ function rewriteEntityInInlineTrait(trait, oldName, newName) {
348
+ if (oldName === newName) return trait;
349
+ const next = { ...trait };
350
+ if (next.stateMachine) {
351
+ next.stateMachine = {
352
+ ...next.stateMachine,
353
+ transitions: next.stateMachine.transitions.map((t) => {
354
+ const updated = { ...t };
355
+ if (updated.guard !== void 0 && updated.guard !== null) {
356
+ updated.guard = rewriteEntityInSExpr(updated.guard, oldName, newName);
357
+ }
358
+ if (updated.effects) {
359
+ updated.effects = updated.effects.map(
360
+ (e) => rewriteEntityInSExpr(e, oldName, newName)
361
+ );
362
+ }
363
+ return updated;
364
+ })
365
+ };
366
+ }
367
+ if (next.initialEffects) {
368
+ next.initialEffects = next.initialEffects.map(
369
+ (e) => rewriteEntityInSExpr(e, oldName, newName)
370
+ );
371
+ }
372
+ if (next.ticks) {
373
+ next.ticks = next.ticks.map((t) => rewriteTick(t, oldName, newName));
374
+ }
375
+ if (next.emits) {
376
+ next.emits = next.emits.map((c) => rewriteEventContract(c, oldName, newName));
377
+ }
378
+ if (next.listens) {
379
+ next.listens = next.listens.map((l) => rewriteListener(l, oldName, newName));
380
+ }
381
+ return next;
382
+ }
383
+ function rebuildTraits(traits) {
384
+ return traits.map((t) => {
385
+ if (!isTraitReferenceObject(t)) return t;
386
+ return makeTraitRef({ ...t });
387
+ });
388
+ }
389
+ function rebuildPages(pages) {
390
+ if (!pages) return [];
391
+ return pages.map((p) => {
392
+ if (!isPageRefObject(p)) return p;
393
+ return makePageRef({ ...p });
394
+ });
395
+ }
396
+ function rewriteTraitRefToken(value, renames) {
397
+ const prefix = "@trait.";
398
+ if (!value.startsWith(prefix)) return value;
399
+ const rest = value.slice(prefix.length);
400
+ const splitAt = rest.search(/[.[]/);
401
+ const name = splitAt === -1 ? rest : rest.slice(0, splitAt);
402
+ const to = renames.get(name);
403
+ if (to === void 0) return value;
404
+ return `${prefix}${to}${splitAt === -1 ? "" : rest.slice(splitAt)}`;
405
+ }
406
+ function rewriteTraitRefsInTree(node, renames) {
407
+ if (typeof node === "string") return rewriteTraitRefToken(node, renames);
408
+ if (Array.isArray(node)) return node.map((item) => rewriteTraitRefsInTree(item, renames));
409
+ if (node !== null && typeof node === "object") {
410
+ const out = {};
411
+ for (const [key, value] of Object.entries(node)) out[key] = rewriteTraitRefsInTree(value, renames);
412
+ return out;
413
+ }
414
+ return node;
415
+ }
416
+ function rekeyTraitEmbedIds(embedIds, renames) {
417
+ let out;
418
+ for (const [token, id] of Object.entries(embedIds)) {
419
+ const to = renames.get(token);
420
+ if (to === void 0) continue;
421
+ out = out ?? { ...embedIds };
422
+ delete out[token];
423
+ out[to] = id;
424
+ }
425
+ return out ?? embedIds;
426
+ }
427
+ function applyDeclarationTraitRenames(schema, renames, at) {
428
+ if (renames.size === 0) return schema;
429
+ const renamedTraitIds = [];
430
+ const renameDeclaration = (t) => {
431
+ if (typeof t !== "object" || t === null) return t;
432
+ let next = t;
433
+ const named = t;
434
+ if (typeof named.name === "string") {
435
+ const renamed = renames.get(named.name);
436
+ if (renamed !== void 0) {
437
+ const id = t.id;
438
+ if (typeof id === "string") renamedTraitIds.push({ id, to: renamed });
439
+ next = { ...next, name: renamed };
440
+ }
441
+ }
442
+ const walked = rewriteTraitRefsInTree(next, renames);
443
+ const embedIds = walked.traitEmbedIds;
444
+ if (embedIds !== void 0) {
445
+ const rekeyed = rekeyTraitEmbedIds(embedIds, renames);
446
+ if (rekeyed !== embedIds) {
447
+ walked.traitEmbedIds = rekeyed;
448
+ }
449
+ }
450
+ return walked;
451
+ };
452
+ const renamePageTraitRefs = (p) => {
453
+ if (typeof p !== "object" || p === null) return p;
454
+ const walked = rewriteTraitRefsInTree(p, renames);
455
+ const traits = walked.traits;
456
+ if (!Array.isArray(traits)) return walked;
457
+ return {
458
+ ...walked,
459
+ traits: traits.map((t) => {
460
+ if (typeof t === "string") return renames.get(t) ?? t;
461
+ const to = renames.get(t.ref);
462
+ return to === void 0 ? t : { ...t, ref: to };
463
+ })
464
+ };
465
+ };
466
+ const orbitals = schema.orbitals.map((orbital) => {
467
+ if (!("traits" in orbital) || !Array.isArray(orbital.traits)) return orbital;
468
+ return {
469
+ ...orbital,
470
+ traits: orbital.traits.map(renameDeclaration),
471
+ ...orbital.pages !== void 0 ? { pages: orbital.pages.map(renamePageTraitRefs) } : {}
472
+ };
473
+ });
474
+ let ledger = schema.ledger;
475
+ if (ledger !== void 0) {
476
+ for (const { id, to } of renamedTraitIds) {
477
+ ledger = ledgerRename(ledger, id, to, at);
478
+ }
479
+ }
480
+ return { ...schema, orbitals, ...ledger !== schema.ledger ? { ledger } : {} };
481
+ }
482
+ function declaredEntityName(orbital) {
483
+ const entity = orbital.entity;
484
+ if (typeof entity === "object" && entity !== null && typeof entity.name === "string") return entity.name;
485
+ return orbital.reference?.entity ?? null;
486
+ }
487
+ function applyDeclarationEntityRename(schema, rename, at) {
488
+ if (rename.from === rename.to) return schema;
489
+ const linkedEntityIsFrom = (shape) => shape.linkedEntity === rename.from;
490
+ const renamedEntityIds = [];
491
+ const orbitals = schema.orbitals.map((orbital) => {
492
+ const entity = orbital.entity;
493
+ if (orbital.reference !== void 0 && orbital.reference.entity === rename.from) {
494
+ return {
495
+ ...orbital,
496
+ reference: { ...orbital.reference, entity: rename.to },
497
+ traits: orbital.traits.map(
498
+ (t) => typeof t === "object" && t !== null && linkedEntityIsFrom(t) ? { ...t, linkedEntity: rename.to } : t
499
+ )
500
+ };
501
+ }
502
+ if (typeof entity !== "object" || entity === null || entity.name !== rename.from) {
503
+ return orbital;
504
+ }
505
+ const entityId = entity.id;
506
+ if (typeof entityId === "string") renamedEntityIds.push(entityId);
507
+ const traits = orbital.traits.map(
508
+ (t) => typeof t === "object" && t !== null && linkedEntityIsFrom(t) ? { ...t, linkedEntity: rename.to } : t
509
+ );
510
+ const pages = orbital.pages?.map(
511
+ (p) => typeof p === "object" && p !== null && linkedEntityIsFrom(p) ? { ...p, linkedEntity: rename.to } : p
512
+ );
513
+ return {
514
+ ...orbital,
515
+ entity: { ...entity, name: rename.to },
516
+ traits,
517
+ ...pages !== void 0 ? { pages } : {}
518
+ };
519
+ });
520
+ let ledger = schema.ledger;
521
+ if (ledger !== void 0) {
522
+ for (const id of renamedEntityIds) {
523
+ ledger = ledgerRename(ledger, id, rename.to, at);
524
+ }
525
+ }
526
+ return { ...schema, orbitals, ...ledger !== schema.ledger ? { ledger } : {} };
527
+ }
528
+ function healEntityLedgerRows(schema, at) {
529
+ let ledger = schema.ledger;
530
+ if (ledger === void 0) return schema;
531
+ for (const orbital of schema.orbitals) {
532
+ const entity = orbital.entity;
533
+ if (typeof entity !== "object" || entity === null) continue;
534
+ const id = entity.id;
535
+ const name = entity.name;
536
+ if (typeof id !== "string" || typeof name !== "string") continue;
537
+ const entry = ledger.entries[id];
538
+ if (entry === void 0 || entry.kind !== "entity" || entry.curName === name) continue;
539
+ ledger = ledgerRename(ledger, id, name, at);
540
+ }
541
+ return ledger !== schema.ledger ? { ...schema, ledger } : schema;
542
+ }
543
+ function healTraitLedgerRows(schema, at) {
544
+ let ledger = schema.ledger;
545
+ if (ledger === void 0) return schema;
546
+ for (const orbital of schema.orbitals) {
547
+ for (const trait of orbital.traits ?? []) {
548
+ if (typeof trait !== "object" || trait === null) continue;
549
+ const id = trait.id;
550
+ if (typeof id !== "string") continue;
551
+ const declared = trait;
552
+ const name = typeof declared.name === "string" ? declared.name : typeof declared.ref === "string" ? declared.ref.slice(declared.ref.lastIndexOf(".") + 1) : void 0;
553
+ if (name === void 0) continue;
554
+ const entry = ledger.entries[id];
555
+ if (entry === void 0 || entry.kind !== "trait" || entry.curName === name) continue;
556
+ ledger = ledgerRename(ledger, id, name, at);
557
+ }
558
+ }
559
+ return ledger !== schema.ledger ? { ...schema, ledger } : schema;
560
+ }
561
+ function applyParamsToOrb(orb, orbitalName, _manifest, params) {
562
+ const orbital = findOrbitalOrThrow(orb, orbitalName);
563
+ const canonicalEntity = assertResolvedEntity(orbital.entity, orbitalName, orb.name);
564
+ const canonicalEntityName = canonicalEntity.name;
565
+ const effectiveCollection = typeof canonicalEntity.collection === "string" ? params.collection ?? (params.entityName ? `${params.entityName.toLowerCase()}s` : canonicalEntity.collection) : params.collection;
566
+ const ctx = { canonicalEntity, dataBearing: orbitalTouchesOwnRecord(orbital) };
567
+ const built = makeOrbitalWithUses({
568
+ name: orbital.name,
569
+ uses: orbital.uses ?? [],
570
+ // Derived `expects` declarations ride the overlay untouched — they name
571
+ // SIBLING entities (never the orbital's own), so the entityName rename
572
+ // below cannot affect them.
573
+ ...orbital.expects !== void 0 ? { expects: orbital.expects } : {},
574
+ entity: buildEntity(ctx, canonicalEntityName, effectiveCollection, params),
575
+ traits: rebuildTraits(orbital.traits),
576
+ pages: rebuildPages(orbital.pages)
577
+ });
578
+ if (orbital.config !== void 0) {
579
+ built.config = params.config !== void 0 ? overrideDeclaredKnobs(orbital.config, params.config) : orbital.config;
580
+ }
581
+ if (built.traits && params.traitOverrides !== void 0) {
582
+ built.traits = built.traits.map((t) => {
583
+ if (!isTraitReferenceObject(t) || typeof t.name !== "string") return t;
584
+ const override = params.traitOverrides?.[t.name];
585
+ if (!override) return t;
586
+ const merged = { ...t };
587
+ if (override.config !== void 0) {
588
+ merged.config = mergeCallSiteConfigOverrides(t.config ?? {}, override.config);
589
+ }
590
+ if (override.linkedEntity !== void 0) merged.linkedEntity = override.linkedEntity;
591
+ if (override.events !== void 0) {
592
+ if (override.events === null || typeof override.events !== "object" || Array.isArray(override.events)) {
593
+ throw new Error(
594
+ `traitOverrides["${t.name}"].events must be a Record<string,string> (rename map like { "OPEN": "ADD_ITEM" }), got ${Array.isArray(override.events) ? "an array" : typeof override.events}`
595
+ );
596
+ }
597
+ for (const [k, v] of Object.entries(override.events)) {
598
+ if (typeof v !== "string") {
599
+ throw new Error(
600
+ `traitOverrides["${t.name}"].events["${k}"] must be a string (target event name), got ${typeof v}`
601
+ );
602
+ }
603
+ }
604
+ merged.events = { ...t.events ?? {}, ...override.events };
605
+ }
606
+ if (override.emitsScope !== void 0) merged.emitsScope = override.emitsScope;
607
+ if (override.listens !== void 0) merged.listens = override.listens;
608
+ return merged;
609
+ });
610
+ }
611
+ if (built.pages && params.pagePath !== void 0) {
612
+ built.pages = built.pages.map((p, idx) => {
613
+ if (!isPageRefObject(p) || idx !== 0) return p;
614
+ return { ...p, path: params.pagePath };
615
+ });
616
+ }
617
+ return built;
618
+ }
619
+
101
620
  // src/factory-runtime/apply-params-to-whole-orb.ts
102
621
  function applyParamsToWholeOrb(orb, manifests, params) {
103
622
  const manifestByOrbital = /* @__PURE__ */ new Map();
@@ -116,6 +635,6 @@ function applyParamsToWholeOrb(orb, manifests, params) {
116
635
  return { ...orb, orbitals: rebuilt };
117
636
  }
118
637
 
119
- export { applyParamsToWholeOrb, extractManifest, paramFieldsFor };
638
+ export { applyDeclarationEntityRename, applyDeclarationTraitRenames, applyParamsToOrb, applyParamsToWholeOrb, declaredEntityName, extractManifest, healEntityLedgerRows, healTraitLedgerRows, paramFieldsFor, rebindInlineTraitEntity, rewriteEntityInInlineTrait, rewriteTraitRefsInTree, validateOrbitalFactoryParams };
120
639
  //# sourceMappingURL=index.js.map
121
640
  //# sourceMappingURL=index.js.map