@almadar/core 10.109.0 → 10.111.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 (36) hide show
  1. package/dist/builders.d.ts +5 -5
  2. package/dist/builders.js +1 -1
  3. package/dist/builders.js.map +1 -1
  4. package/dist/{bus-De_T27aq.d.ts → bus-DS-GzSrs.d.ts} +2 -2
  5. package/dist/{effect-Cv7k1MTO.d.ts → effect-BD47AL48.d.ts} +1 -1
  6. package/dist/{entityAccess-CH8vC2OG.d.ts → entityAccess-Dc6o3AYo.d.ts} +3 -3
  7. package/dist/{expression-C6Gs_c5b.d.ts → expression-Dz84kipC.d.ts} +20 -3
  8. package/dist/factory/index.d.ts +81 -7
  9. package/dist/factory/index.js +179 -7
  10. package/dist/factory/index.js.map +1 -1
  11. package/dist/factory-runtime/index.d.ts +5 -5
  12. package/dist/factory-runtime/index.js +1 -1
  13. package/dist/factory-runtime/index.js.map +1 -1
  14. package/dist/fixtures.d.ts +3 -3
  15. package/dist/fixtures.js +1 -1
  16. package/dist/fixtures.js.map +1 -1
  17. package/dist/{index-BzFToa4c.d.ts → index-DgD_3g5F.d.ts} +101 -10
  18. package/dist/index.d.ts +16 -16
  19. package/dist/index.js +235 -11
  20. package/dist/index.js.map +1 -1
  21. package/dist/mock/index.d.ts +20 -7
  22. package/dist/mock/index.js +26 -5
  23. package/dist/mock/index.js.map +1 -1
  24. package/dist/patterns/index.d.ts +3 -3
  25. package/dist/{schema-Chi9QIcZ.d.ts → schema-B3GE83sz.d.ts} +340 -340
  26. package/dist/state-machine/index.d.ts +1 -1
  27. package/dist/state-machine/index.js +32 -7
  28. package/dist/state-machine/index.js.map +1 -1
  29. package/dist/themes/index.d.ts +1 -1
  30. package/dist/{trait-A_OGE8xT.d.ts → trait-BNxIGRUF.d.ts} +2 -2
  31. package/dist/types/index.d.ts +8 -8
  32. package/dist/types/index.js +32 -2
  33. package/dist/types/index.js.map +1 -1
  34. package/dist/{types-DQoBssKq.d.ts → types-5IX1FGgd.d.ts} +2 -2
  35. package/package.json +1 -1
  36. package/dist/{domain-DYverojF.d.ts → domain-Bf6sf9NR.d.ts} +210 -210
@@ -1,11 +1,11 @@
1
- import { O as OrbitalEntity, a as EntityPersistence, E as EntityField, F as FieldValue, g as EntityRow } from '../effect-Cv7k1MTO.js';
2
- import { a as OrbitalDefinition, O as OrbitalSchema } from '../schema-Chi9QIcZ.js';
3
- import { S as SExpr } from '../expression-C6Gs_c5b.js';
4
- export { E as EntityAccessPolicies, e as entityAccessPolicies, a as entityAccessPoliciesByStoreKey, b as entityAccessTable } from '../entityAccess-CH8vC2OG.js';
1
+ import { O as OrbitalEntity, a as EntityPersistence, E as EntityField, F as FieldValue, g as EntityRow } from '../effect-BD47AL48.js';
2
+ import { a as OrbitalDefinition, O as OrbitalSchema } from '../schema-B3GE83sz.js';
3
+ import { S as SExpr } from '../expression-Dz84kipC.js';
4
+ export { E as EntityAccessPolicies, e as entityAccessPolicies, a as entityAccessPoliciesByStoreKey, b as entityAccessTable } from '../entityAccess-Dc6o3AYo.js';
5
5
  import 'zod';
6
6
  import '../json-D8gmyK3l.js';
7
- import '../trait-A_OGE8xT.js';
8
- import '../domain-DYverojF.js';
7
+ import '../trait-BNxIGRUF.js';
8
+ import '../domain-Bf6sf9NR.js';
9
9
 
10
10
  /**
11
11
  * Lightweight seeded pseudo-random generator for mock data.
@@ -237,6 +237,8 @@ declare const RESERVED_FIELD_NAMES: ReadonlySet<string>;
237
237
  interface SampleEntity {
238
238
  readonly name: string;
239
239
  readonly persistence?: EntityPersistence;
240
+ /** `[identity]`: the rows are the persona roster, so every field is filled. */
241
+ readonly identity?: boolean;
240
242
  readonly fields: readonly EntityField[];
241
243
  }
242
244
  interface SampleContext {
@@ -246,6 +248,8 @@ interface SampleContext {
246
248
  readonly strategy: SampleStrategy;
247
249
  /** Declared persistence of the OWNING entity; undefined means persistent. */
248
250
  readonly persistence?: EntityPersistence;
251
+ /** The owning entity is `[identity]`: its rows are personas, never left partly unset. */
252
+ readonly identity?: boolean;
249
253
  readonly depth?: number;
250
254
  }
251
255
  /**
@@ -348,5 +352,14 @@ declare function linkSelfRelationField(rows: ReadonlyArray<EntityRow>, field: {
348
352
  readonly name: string;
349
353
  readonly cardinality?: string;
350
354
  }, isExcluded?: (row: EntityRow, index: number) => boolean): void;
355
+ /**
356
+ * A cross-entity relation value for row `index` (0-based), deterministic and PRNG-free so every
357
+ * seeder links identically whatever else it draws: a scalar relation takes `targetIds[index % n]`;
358
+ * a list takes 2 (even rows) or 3 (odd rows) consecutive distinct ids from offset `index`. Twin of
359
+ * `orbital-core/src/runtime/seed.rs` `link_relation_fields`. `undefined` when there is no target.
360
+ */
361
+ declare function crossRelationValue(targetIds: readonly string[], index: number, cardinality?: string): string | string[] | undefined;
362
+ /** A relation cell a seeder may fill: missing, or the `''` / `[]` placeholder `sampleRow` writes. */
363
+ declare function isRelationPlaceholder(value: EntityRow[string]): boolean;
351
364
 
352
- export { IMAGE_FIELD_NAMES, RESERVED_FIELD_NAMES, type SampleContext, type SampleEntity, type SampleStrategy, type SelfRelationForest, collectUserFieldLiterals, identityEntitiesOf, identityEntityName, identityEntityNames, isDeclaredDefaultHonored, linkSelfRelationField, ownerColumnsFromPolicy, ownerFieldsFromSchema, randomAnytimeDate, randomArrayElement, randomBoolean, randomColor, randomEmail, randomFloat, randomInt, randomPassword, randomPastDate, randomPhone, randomRecentDate, randomSentence, randomStraddlingDate, randomUrl, randomUuid, randomWords, roleSatisfyingPolicy, roleVocabularyOf, sampleFieldValue, sampleImageUrl, sampleRow, sampleRowCount, sampleRows, seedRandom, selfRelationForest, shuffleArray };
365
+ export { IMAGE_FIELD_NAMES, RESERVED_FIELD_NAMES, type SampleContext, type SampleEntity, type SampleStrategy, type SelfRelationForest, collectUserFieldLiterals, crossRelationValue, identityEntitiesOf, identityEntityName, identityEntityNames, isDeclaredDefaultHonored, isRelationPlaceholder, linkSelfRelationField, ownerColumnsFromPolicy, ownerFieldsFromSchema, randomAnytimeDate, randomArrayElement, randomBoolean, randomColor, randomEmail, randomFloat, randomInt, randomPassword, randomPastDate, randomPhone, randomRecentDate, randomSentence, randomStraddlingDate, randomUrl, randomUuid, randomWords, roleSatisfyingPolicy, roleVocabularyOf, sampleFieldValue, sampleImageUrl, sampleRow, sampleRowCount, sampleRows, seedRandom, selfRelationForest, shuffleArray };
@@ -816,7 +816,7 @@ var SExprAtomSchema = z.union([
816
816
  var SExprSchema = z.lazy(
817
817
  () => z.union([
818
818
  SExprAtomSchema,
819
- z.array(z.lazy(() => SExprSchema)).min(1).refine(
819
+ z.array(SExprDataSchema).min(1).refine(
820
820
  (arr) => typeof arr[0] === "string",
821
821
  { message: "S-expression array must have a string operator as first element" }
822
822
  )
@@ -1011,7 +1011,8 @@ function sampleObject(field, ctx) {
1011
1011
  const depth = ctx.depth ?? 0;
1012
1012
  if (!field.properties || depth >= MAX_NESTED_DEPTH) return null;
1013
1013
  const out = {};
1014
- for (const [propName, propField] of Object.entries(field.properties)) {
1014
+ const entries = Object.entries(field.properties).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
1015
+ for (const [propName, propField] of entries) {
1015
1016
  const child = { ...propField, name: propName };
1016
1017
  out[propName] = sampleFieldValue(child, { ...ctx, depth: depth + 1 }) ?? null;
1017
1018
  }
@@ -1028,7 +1029,7 @@ function sampleUnion(field, ctx) {
1028
1029
  return sampleFieldValue(child, { ...ctx, depth: depth + 1 });
1029
1030
  }
1030
1031
  function omitsUndefaultedOptionalFields(ctx) {
1031
- return ctx.strategy === "seeded" && ctx.index % 2 === 0;
1032
+ return ctx.strategy === "seeded" && !ctx.identity && (ctx.depth ?? 0) === 0 && ctx.index % 2 === 0;
1032
1033
  }
1033
1034
  function sampleFieldValue(field, ctx) {
1034
1035
  const honoredDefault = field.default !== void 0 && isFieldValue(field.default) ? field.default : void 0;
@@ -1112,6 +1113,8 @@ function sampleFieldValue(field, ctx) {
1112
1113
  case "trait":
1113
1114
  case "slot":
1114
1115
  case "pattern":
1116
+ // An event name is authored on the owning struct, never random text (seed.rs twin).
1117
+ case "event":
1115
1118
  // Renderable content is computed by the owning trait's effects, never
1116
1119
  // seeded — same no-sample treatment as the config-only reference types.
1117
1120
  case "node":
@@ -1128,7 +1131,8 @@ function sampleRow(entity, ctx) {
1128
1131
  const value = sampleFieldValue(field, {
1129
1132
  ...ctx,
1130
1133
  entityName: entity.name,
1131
- persistence: ctx.persistence ?? entity.persistence
1134
+ persistence: ctx.persistence ?? entity.persistence,
1135
+ ...entity.identity ? { identity: true } : {}
1132
1136
  });
1133
1137
  if (value !== void 0) row[name] = value;
1134
1138
  }
@@ -1167,7 +1171,24 @@ function linkSelfRelationField(rows, field, isExcluded) {
1167
1171
  row[field.name] = scalar ? forest.parentOf(index) : forest.childrenOf(index);
1168
1172
  });
1169
1173
  }
1174
+ var SCALAR_TARGET_CARDINALITIES = /* @__PURE__ */ new Set(["one", "many-to-one"]);
1175
+ function crossRelationValue(targetIds, index, cardinality) {
1176
+ if (targetIds.length === 0) return void 0;
1177
+ if (SCALAR_TARGET_CARDINALITIES.has(cardinality ?? "many")) return targetIds[index % targetIds.length];
1178
+ const picks = [];
1179
+ const count = Math.min(targetIds.length, 2 + index % 2);
1180
+ for (let offset = 0; offset < count; offset++) {
1181
+ const candidate = targetIds[(index + offset) % targetIds.length];
1182
+ if (!picks.includes(candidate)) picks.push(candidate);
1183
+ }
1184
+ return picks;
1185
+ }
1186
+ function isRelationPlaceholder(value) {
1187
+ if (value === void 0) return true;
1188
+ if (typeof value === "string") return value === "";
1189
+ return Array.isArray(value) && value.length === 0;
1190
+ }
1170
1191
 
1171
- export { IMAGE_FIELD_NAMES, RESERVED_FIELD_NAMES, collectUserFieldLiterals, entityAccessPolicies, entityAccessPoliciesByStoreKey, entityAccessTable, identityEntitiesOf, identityEntityName, identityEntityNames, isDeclaredDefaultHonored, linkSelfRelationField, ownerColumnsFromPolicy, ownerFieldsFromSchema, randomAnytimeDate, randomArrayElement, randomBoolean, randomColor, randomEmail, randomFloat, randomInt, randomPassword, randomPastDate, randomPhone, randomRecentDate, randomSentence, randomStraddlingDate, randomUrl, randomUuid, randomWords, roleSatisfyingPolicy, roleVocabularyOf, sampleFieldValue, sampleImageUrl, sampleRow, sampleRowCount, sampleRows, seedRandom, selfRelationForest, shuffleArray };
1192
+ export { IMAGE_FIELD_NAMES, RESERVED_FIELD_NAMES, collectUserFieldLiterals, crossRelationValue, entityAccessPolicies, entityAccessPoliciesByStoreKey, entityAccessTable, identityEntitiesOf, identityEntityName, identityEntityNames, isDeclaredDefaultHonored, isRelationPlaceholder, linkSelfRelationField, ownerColumnsFromPolicy, ownerFieldsFromSchema, randomAnytimeDate, randomArrayElement, randomBoolean, randomColor, randomEmail, randomFloat, randomInt, randomPassword, randomPastDate, randomPhone, randomRecentDate, randomSentence, randomStraddlingDate, randomUrl, randomUuid, randomWords, roleSatisfyingPolicy, roleVocabularyOf, sampleFieldValue, sampleImageUrl, sampleRow, sampleRowCount, sampleRows, seedRandom, selfRelationForest, shuffleArray };
1172
1193
  //# sourceMappingURL=index.js.map
1173
1194
  //# sourceMappingURL=index.js.map