@almadar/core 10.29.0 → 10.30.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.
@@ -1,5 +1,5 @@
1
- import './pattern-types-JZordBZv.js';
2
- export { i as ComposeBehaviorsInput, j as ComposeBehaviorsResult, c7 as ComposeConnection, c8 as ComposePage, a6 as EventWiringEntry, aq as LayoutStrategy, c9 as MakeAtomOrbitalOpts, ca as MakeAtomOrbitalTraitOverrides, cb as MakeEntityOpts, cc as MakeLayoutTraitOpts, cd as MakeOrbitalWithUsesOpts, ce as MakePageOpts, cf as MakePageRefOpts, cg as MakePageRefOptsTyped, M as MakeTraitRefOpts, ch as MakeTraitRefOptsTyped, bS as applyEventWiring, ci as applyTraitConfigOverrides, cj as compose, bT as composeBehaviors, ck as connect, bU as detectLayoutStrategy, cl as ensureIdField, cm as extractTrait, cn as makeAtomOrbital, co as makeEntity, cp as makeLayoutTrait, cq as makeOrbital, cr as makeOrbitalWithUses, cs as makePage, ct as makePageRef, cu as makeRenderUI, cv as makeSchema, cw as makeSlot, cx as makeTraitRef, cy as mergeOrbitals, cz as pipe, cA as plural, cB as wire } from './builders-DcBjE_Uw.js';
3
- import './trait-B_CzfDSi.js';
1
+ import './pattern-types-CLcOXOmW.js';
2
+ export { i as ComposeBehaviorsInput, j as ComposeBehaviorsResult, c7 as ComposeConnection, c8 as ComposePage, a6 as EventWiringEntry, aq as LayoutStrategy, c9 as MakeAtomOrbitalOpts, ca as MakeAtomOrbitalTraitOverrides, cb as MakeEntityOpts, cc as MakeLayoutTraitOpts, cd as MakeOrbitalWithUsesOpts, ce as MakePageOpts, cf as MakePageRefOpts, cg as MakePageRefOptsTyped, M as MakeTraitRefOpts, ch as MakeTraitRefOptsTyped, bS as applyEventWiring, ci as applyTraitConfigOverrides, cj as compose, bT as composeBehaviors, ck as connect, bU as detectLayoutStrategy, cl as ensureIdField, cm as extractTrait, cn as makeAtomOrbital, co as makeEntity, cp as makeLayoutTrait, cq as makeOrbital, cr as makeOrbitalWithUses, cs as makePage, ct as makePageRef, cu as makeRenderUI, cv as makeSchema, cw as makeSlot, cx as makeTraitRef, cy as mergeLedgers, cz as mergeOrbitals, cA as pipe, cB as plural, cC as wire } from './builders-C458pIMW.js';
3
+ import './trait-CwWjkU-1.js';
4
4
  import './expression-CB9R3KWk.js';
5
5
  import 'zod';
package/dist/builders.js CHANGED
@@ -1,6 +1,80 @@
1
1
  import { z } from 'zod';
2
2
 
3
3
  // src/types/orbital.ts
4
+ var ID_PREFIXES = {
5
+ orbital: "orb_",
6
+ entity: "ent_",
7
+ trait: "trt_",
8
+ event: "evt_",
9
+ page: "pag_",
10
+ service: "svc_",
11
+ theme: "thm_",
12
+ palette: "pal_"
13
+ };
14
+ function brand(value) {
15
+ return value;
16
+ }
17
+ function makeIdKind(kind) {
18
+ const prefix = ID_PREFIXES[kind];
19
+ const is = (value) => value.startsWith(prefix) && value.length > prefix.length;
20
+ const as = (value) => {
21
+ if (!is(value)) {
22
+ throw new Error(
23
+ `Expected ${kind} id (prefix "${prefix}"), got: ${JSON.stringify(value)}`
24
+ );
25
+ }
26
+ return brand(value);
27
+ };
28
+ return { prefix, is, as };
29
+ }
30
+ var orbitalKind = makeIdKind("orbital");
31
+ var entityKind = makeIdKind("entity");
32
+ var traitKind = makeIdKind("trait");
33
+ var eventKind = makeIdKind("event");
34
+ var pageKind = makeIdKind("page");
35
+ var serviceKind = makeIdKind("service");
36
+ var themeKind = makeIdKind("theme");
37
+ var paletteKind = makeIdKind("palette");
38
+ var isOrbitalId = orbitalKind.is;
39
+ var isEntityId = entityKind.is;
40
+ var isTraitId = traitKind.is;
41
+ var isEventId = eventKind.is;
42
+ var isPageId = pageKind.is;
43
+ var isServiceId = serviceKind.is;
44
+ var isThemeId = themeKind.is;
45
+ var isPaletteEntryId = paletteKind.is;
46
+ var OrbitalIdSchema = z.string().refine(isOrbitalId, { message: `Expected an orbital id (prefix "${ID_PREFIXES.orbital}")` });
47
+ var EntityIdSchema = z.string().refine(isEntityId, { message: `Expected an entity id (prefix "${ID_PREFIXES.entity}")` });
48
+ var TraitIdSchema = z.string().refine(isTraitId, { message: `Expected a trait id (prefix "${ID_PREFIXES.trait}")` });
49
+ var EventIdSchema = z.string().refine(isEventId, { message: `Expected an event id (prefix "${ID_PREFIXES.event}")` });
50
+ var PageIdSchema = z.string().refine(isPageId, { message: `Expected a page id (prefix "${ID_PREFIXES.page}")` });
51
+ z.string().refine(isServiceId, { message: `Expected a service id (prefix "${ID_PREFIXES.service}")` });
52
+ z.string().refine(isThemeId, { message: `Expected a theme id (prefix "${ID_PREFIXES.theme}")` });
53
+ z.string().refine(isPaletteEntryId, { message: `Expected a palette-entry id (prefix "${ID_PREFIXES.palette}")` });
54
+ var LedgerKindSchema = z.enum([
55
+ "orbital",
56
+ "entity",
57
+ "trait",
58
+ "event",
59
+ "page",
60
+ "service",
61
+ "theme"
62
+ ]);
63
+ var LedgerEntrySchema = z.object({
64
+ id: z.string(),
65
+ kind: LedgerKindSchema,
66
+ bakedName: z.string(),
67
+ curName: z.string(),
68
+ renames: z.array(
69
+ z.object({ from: z.string(), to: z.string(), at: z.string() })
70
+ ),
71
+ owner: z.enum(["std", "io", "workspace"]),
72
+ parent: TraitIdSchema.optional()
73
+ });
74
+ z.object({
75
+ schemaVersion: z.literal(1),
76
+ entries: z.record(LedgerEntrySchema)
77
+ });
4
78
  z.enum([
5
79
  "string",
6
80
  "number",
@@ -25,6 +99,7 @@ var RelationCardinalitySchema = z.enum([
25
99
  ]);
26
100
  var RelationConfigSchema = z.object({
27
101
  entity: z.string().min(1, "Target entity is required"),
102
+ entityId: EntityIdSchema.optional(),
28
103
  field: z.string().optional(),
29
104
  cardinality: RelationCardinalitySchema.optional(),
30
105
  onDelete: z.enum(["cascade", "nullify", "restrict"]).optional(),
@@ -35,6 +110,7 @@ var RelationConfigSchema = z.object({
35
110
  }).transform((data) => {
36
111
  const normalized = {
37
112
  entity: data.entity || data.target || "",
113
+ entityId: data.entityId,
38
114
  cardinality: data.cardinality || data.type,
39
115
  field: data.field,
40
116
  onDelete: data.onDelete
@@ -326,6 +402,7 @@ var PayloadFieldSchema = z.object({
326
402
  });
327
403
  var EventSchema = z.object({
328
404
  key: z.string().min(1, "Event key is required"),
405
+ id: EventIdSchema.optional(),
329
406
  name: z.string().min(1, "Event name is required"),
330
407
  description: z.string().optional(),
331
408
  synonyms: z.string().optional(),
@@ -343,6 +420,7 @@ var TransitionSchema = z.object({
343
420
  from: z.string().min(1, "Transition source state is required"),
344
421
  to: z.string().min(1, "Transition target state is required"),
345
422
  event: z.string().min(1, "Transition event is required"),
423
+ eventId: EventIdSchema.optional(),
346
424
  guard: ExpressionSchema.nullish(),
347
425
  effects: z.array(EffectSchema).optional(),
348
426
  description: z.string().nullish()
@@ -379,6 +457,7 @@ var ConfigFieldItemsDeclarationSchema = z.lazy(
379
457
  var ConfigFieldDeclarationSchema = z.object({
380
458
  type: z.string(),
381
459
  default: TraitConfigValueSchema.optional(),
460
+ refId: z.string().optional(),
382
461
  required: z.boolean().optional(),
383
462
  label: z.string().optional(),
384
463
  description: z.string().optional(),
@@ -444,9 +523,11 @@ var TraitTickSchema = z.object({
444
523
  interval: z.union([z.literal("frame"), z.number().positive()]),
445
524
  appliesTo: z.array(z.string()).optional(),
446
525
  pages: z.array(z.string()).optional(),
526
+ pageIds: z.array(PageIdSchema).optional(),
447
527
  guard: ExpressionSchema.optional(),
448
528
  effects: z.array(EffectSchema).min(1),
449
- emits: z.array(z.string()).optional()
529
+ emits: z.array(z.string()).optional(),
530
+ emitIds: z.array(EventIdSchema).optional()
450
531
  });
451
532
  var EventScopeSchema = z.enum(["internal", "external"]);
452
533
  var EventPayloadFieldSchema = z.object({
@@ -481,6 +562,7 @@ var TraitEventContractSchema = z.object({
481
562
  /^([A-Za-z][A-Za-z0-9_]*|@config\.[A-Za-z_][A-Za-z0-9_]*)$/,
482
563
  "Event name must start with a letter and contain only letters, digits, and underscores, or be a `@config.<knob>` reference"
483
564
  ),
565
+ eventId: EventIdSchema.optional(),
484
566
  description: z.string().optional(),
485
567
  synonyms: z.string().optional(),
486
568
  tier: z.string().optional(),
@@ -489,16 +571,24 @@ var TraitEventContractSchema = z.object({
489
571
  });
490
572
  var ListenSourceSchema = z.union([
491
573
  z.object({ kind: z.literal("any") }),
492
- z.object({ kind: z.literal("trait"), trait: z.string().min(1) }),
574
+ z.object({
575
+ kind: z.literal("trait"),
576
+ trait: z.string().min(1),
577
+ traitId: TraitIdSchema.optional()
578
+ }),
493
579
  z.object({
494
580
  kind: z.literal("orbital"),
495
581
  orbital: z.string().min(1),
496
- trait: z.string().min(1)
582
+ trait: z.string().min(1),
583
+ orbitalId: OrbitalIdSchema.optional(),
584
+ traitId: TraitIdSchema.optional()
497
585
  })
498
586
  ]);
499
587
  var TraitEventListenerSchema = z.object({
500
588
  event: z.string().min(1),
589
+ eventId: EventIdSchema.optional(),
501
590
  triggers: z.string().min(1),
591
+ triggersId: EventIdSchema.optional(),
502
592
  description: z.string().optional(),
503
593
  synonyms: z.string().optional(),
504
594
  tier: z.string().optional(),
@@ -514,14 +604,20 @@ var RequiredFieldSchema = z.object({
514
604
  });
515
605
  z.object({
516
606
  ref: z.string().min(1),
607
+ refId: TraitIdSchema.optional(),
608
+ // V4 local declaration id (see the interface doc) — declared so the
609
+ // strip-mode zod gate carries it through instead of dropping it.
610
+ id: TraitIdSchema.optional(),
517
611
  // Phase 1.2: optional registry path disambiguator, pairs with `ref`.
518
612
  from: z.string().optional(),
519
613
  linkedEntity: z.string().optional(),
614
+ linkedEntityId: EntityIdSchema.optional(),
520
615
  name: z.string().optional(),
521
616
  events: z.record(
522
617
  z.string().min(1, "events key (atom event name) must be non-empty"),
523
618
  z.string().min(1, "events value (caller event name) must be non-empty")
524
619
  ).optional(),
620
+ eventIds: z.record(z.string().min(1), EventIdSchema).optional(),
525
621
  fields: z.record(
526
622
  z.string().min(1, "fields key (canonical field name) must be non-empty"),
527
623
  z.string().min(1, "fields value (consumer field name) must be non-empty")
@@ -571,6 +667,7 @@ var SourceBehaviorMetadataSchema = z.object({
571
667
  originalName: z.string().min(1)
572
668
  });
573
669
  var TraitSchema = z.object({
670
+ id: TraitIdSchema.optional(),
574
671
  name: z.string().min(1),
575
672
  description: z.string().optional(),
576
673
  description_visual_prompt: z.string().optional(),
@@ -582,6 +679,9 @@ var TraitSchema = z.object({
582
679
  capabilities: z.array(z.string()).optional(),
583
680
  scope: TraitScopeSchema,
584
681
  linkedEntity: z.string().optional(),
682
+ linkedEntityId: EntityIdSchema.optional(),
683
+ entityRefIds: z.record(z.string().min(1), EntityIdSchema).optional(),
684
+ traitEmbedIds: z.record(z.string().min(1), TraitIdSchema).optional(),
585
685
  requiredFields: z.array(RequiredFieldSchema).optional(),
586
686
  dataEntities: z.array(TraitDataEntitySchema).optional(),
587
687
  stateMachine: StateMachineSchema.optional(),
@@ -627,10 +727,13 @@ var ViewTypeSchema = z.enum([
627
727
  ]);
628
728
  var PageTraitRefSchema = z.object({
629
729
  ref: z.string().min(1, "Trait ref is required"),
730
+ refId: TraitIdSchema.optional(),
630
731
  linkedEntity: z.string().optional(),
732
+ linkedEntityId: EntityIdSchema.optional(),
631
733
  config: TraitConfigSchema.optional()
632
734
  });
633
735
  z.object({
736
+ id: PageIdSchema.optional(),
634
737
  name: z.string().min(1, "Page name is required"),
635
738
  path: z.string().min(1, "Page path is required").startsWith("/", "Path must start with /"),
636
739
  primaryEntity: z.string().min(1, "Primary entity is required"),
@@ -638,6 +741,7 @@ z.object({
638
741
  title: z.string().optional()
639
742
  }).strict();
640
743
  var OrbitalPageSchema = z.object({
744
+ id: PageIdSchema.optional(),
641
745
  name: z.string().min(1, "Page name is required"),
642
746
  path: z.string().min(1, "Page path is required").startsWith("/", "Path must start with /"),
643
747
  viewType: ViewTypeSchema.optional(),
@@ -1159,11 +1263,14 @@ var PageRefStringSchema = z.string().regex(
1159
1263
  );
1160
1264
  var PageRefObjectSchema = z.object({
1161
1265
  ref: PageRefStringSchema,
1266
+ refId: PageIdSchema.optional(),
1162
1267
  // Phase 1.2: optional registry path disambiguator, pairs with `ref`.
1163
1268
  from: z.string().optional(),
1164
1269
  path: z.string().startsWith("/").optional(),
1165
1270
  linkedEntity: z.string().optional(),
1166
- traits: z.array(TraitRefSchema).optional()
1271
+ linkedEntityId: EntityIdSchema.optional(),
1272
+ traits: z.array(TraitRefSchema).optional(),
1273
+ traitRefIds: z.array(TraitIdSchema).optional()
1167
1274
  });
1168
1275
  var PageRefSchema = z.union([
1169
1276
  PageSchema,
@@ -1204,6 +1311,7 @@ var ComputedEventListenerSchema = z.object({
1204
1311
  payloadMapping: z.record(z.string()).optional()
1205
1312
  });
1206
1313
  z.object({
1314
+ id: OrbitalIdSchema.optional(),
1207
1315
  name: z.string().min(1, "Orbital name is required"),
1208
1316
  description: z.string().optional(),
1209
1317
  visual_prompt: z.string().optional(),
@@ -1386,13 +1494,40 @@ function applyEventWiring(orbitals, wiring) {
1386
1494
  }
1387
1495
 
1388
1496
  // src/builders/compose-behaviors.ts
1497
+ function isSchema(input) {
1498
+ return "orbitals" in input && Array.isArray(input.orbitals);
1499
+ }
1389
1500
  function asDefinitions(inputs) {
1390
- return inputs.flatMap((input) => {
1391
- if ("orbitals" in input && Array.isArray(input.orbitals)) {
1392
- return input.orbitals;
1501
+ return inputs.flatMap(
1502
+ (input) => isSchema(input) ? input.orbitals : [input]
1503
+ );
1504
+ }
1505
+ function mergeLedgers(inputs) {
1506
+ const merged = /* @__PURE__ */ new Map();
1507
+ let sawLedger = false;
1508
+ for (const input of inputs) {
1509
+ if (!isSchema(input) || input.ledger === void 0) continue;
1510
+ sawLedger = true;
1511
+ for (const [id, entry] of Object.entries(input.ledger.entries)) {
1512
+ if (!merged.has(id)) merged.set(id, entry);
1393
1513
  }
1394
- return [input];
1395
- });
1514
+ }
1515
+ if (!sawLedger) return void 0;
1516
+ const entries = {};
1517
+ for (const [id, entry] of [...merged.entries()].sort(
1518
+ ([a], [b]) => a < b ? -1 : a > b ? 1 : 0
1519
+ )) {
1520
+ entries[id] = entry;
1521
+ }
1522
+ return { schemaVersion: 1, entries };
1523
+ }
1524
+ function mergeSchemaVersions(inputs) {
1525
+ let max;
1526
+ for (const input of inputs) {
1527
+ if (!isSchema(input) || input.schemaVersion === void 0) continue;
1528
+ max = max === void 0 ? input.schemaVersion : Math.max(max, input.schemaVersion);
1529
+ }
1530
+ return max;
1396
1531
  }
1397
1532
  function toKebabCase(name) {
1398
1533
  return name.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
@@ -1462,10 +1597,14 @@ function composeBehaviors(input) {
1462
1597
  pages: page ? [page] : []
1463
1598
  };
1464
1599
  });
1600
+ const ledger = mergeLedgers(rawInputs);
1601
+ const schemaVersion = mergeSchemaVersions(rawInputs);
1465
1602
  const schema = {
1466
1603
  name: appName,
1467
1604
  version: "1.0.0",
1468
- orbitals: orbitalsWithPages
1605
+ orbitals: orbitalsWithPages,
1606
+ ...schemaVersion !== void 0 ? { schemaVersion } : {},
1607
+ ...ledger !== void 0 ? { ledger } : {}
1469
1608
  };
1470
1609
  return {
1471
1610
  schema,
@@ -1604,6 +1743,7 @@ function makeTraitRef(opts) {
1604
1743
  if (opts.from !== void 0) ref.from = opts.from;
1605
1744
  if (opts.name !== void 0) ref.name = opts.name;
1606
1745
  if (opts.linkedEntity !== void 0) ref.linkedEntity = opts.linkedEntity;
1746
+ if (opts.linkedEntityId !== void 0) ref.linkedEntityId = opts.linkedEntityId;
1607
1747
  if (opts.events !== void 0) ref.events = opts.events;
1608
1748
  if (opts.fields !== void 0) ref.fields = opts.fields;
1609
1749
  if (opts.effects !== void 0) ref.effects = opts.effects;
@@ -1805,6 +1945,6 @@ function pipe(orbitals, events, appName) {
1805
1945
  };
1806
1946
  }
1807
1947
 
1808
- export { applyEventWiring, applyTraitConfigOverrides, compose, composeBehaviors, connect, detectLayoutStrategy, ensureIdField, extractTrait, makeAtomOrbital, makeEntity, makeLayoutTrait, makeOrbital, makeOrbitalWithUses, makePage, makePageRef, makeRenderUI, makeSchema, makeSlot, makeTraitRef, mergeOrbitals, pipe, plural, wire };
1948
+ export { applyEventWiring, applyTraitConfigOverrides, compose, composeBehaviors, connect, detectLayoutStrategy, ensureIdField, extractTrait, makeAtomOrbital, makeEntity, makeLayoutTrait, makeOrbital, makeOrbitalWithUses, makePage, makePageRef, makeRenderUI, makeSchema, makeSlot, makeTraitRef, mergeLedgers, mergeOrbitals, pipe, plural, wire };
1809
1949
  //# sourceMappingURL=builders.js.map
1810
1950
  //# sourceMappingURL=builders.js.map