@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.
- package/dist/behavior-package.d.ts +49 -11
- package/dist/behavior-package.js +1 -1
- package/dist/{orbital-CkFdDS9f.d.ts → builders-BhnofAik.d.ts} +5966 -7116
- package/dist/builders.d.ts +6 -6
- package/dist/builders.js +7 -6
- package/dist/{bus-CcbB__oo.d.ts → bus-BrRFWDQK.d.ts} +270 -354
- package/dist/chunk-347APWFM.js +286 -0
- package/dist/chunk-347APWFM.js.map +1 -0
- package/dist/chunk-3URQAGD7.js +98 -0
- package/dist/chunk-3URQAGD7.js.map +1 -0
- package/dist/chunk-7GHJU5WI.js +39 -0
- package/dist/chunk-7GHJU5WI.js.map +1 -0
- package/dist/chunk-B4MNHGBP.js +8 -0
- package/dist/chunk-B4MNHGBP.js.map +1 -0
- package/dist/{chunk-KDMV222Q.js → chunk-F6KHUW7T.js} +304 -373
- package/dist/chunk-F6KHUW7T.js.map +1 -0
- package/dist/chunk-FGT5OS2Y.js +918 -0
- package/dist/chunk-FGT5OS2Y.js.map +1 -0
- package/dist/chunk-FQLEAMAB.js +24 -0
- package/dist/chunk-FQLEAMAB.js.map +1 -0
- package/dist/chunk-HEXOGHQ4.js +3264 -0
- package/dist/chunk-HEXOGHQ4.js.map +1 -0
- package/dist/chunk-JCD6GLBX.js +412 -0
- package/dist/chunk-JCD6GLBX.js.map +1 -0
- package/dist/{chunk-QUOTJULD.js → chunk-MGLG2XLD.js} +20 -219
- package/dist/chunk-MGLG2XLD.js.map +1 -0
- package/dist/chunk-MTBEBSNO.js +1293 -0
- package/dist/chunk-MTBEBSNO.js.map +1 -0
- package/dist/{chunk-X4SC7FGF.js → chunk-RGACZEYC.js} +99 -96
- package/dist/chunk-RGACZEYC.js.map +1 -0
- package/dist/{chunk-RYPVOI6H.js → chunk-UZPYYI37.js} +524 -26
- package/dist/{chunk-RYPVOI6H.js.map → chunk-UZPYYI37.js.map} +1 -1
- package/dist/chunk-VG7BRFUD.js +152 -0
- package/dist/chunk-VG7BRFUD.js.map +1 -0
- package/dist/chunk-Y2DYZPP5.js +2329 -0
- package/dist/chunk-Y2DYZPP5.js.map +1 -0
- package/dist/chunk-ZEI7C32D.js +1566 -0
- package/dist/chunk-ZEI7C32D.js.map +1 -0
- package/dist/{domain-Dz3jP-UM.d.ts → domain-CfKPpXCP.d.ts} +51 -51
- package/dist/{effect-result-Bebwu9yT.d.ts → effect-result-DPERsn_v.d.ts} +641 -851
- package/dist/{effect-CiEVLsZz.d.ts → effect-wP-IdRt2.d.ts} +236 -443
- package/dist/{expression-D0Fs0riG.d.ts → expression-DirYKz-f.d.ts} +5 -13
- package/dist/factory/index.d.ts +7 -144
- package/dist/factory/index.js +8 -8
- package/dist/factory-runtime/index.d.ts +7 -6
- package/dist/factory-runtime/index.js +527 -8
- package/dist/factory-runtime/index.js.map +1 -1
- package/dist/fixtures.d.ts +9 -11
- package/dist/fixtures.js +12 -8
- package/dist/fixtures.js.map +1 -1
- package/dist/i18n/index.d.ts +15 -19
- package/dist/i18n/index.js +2 -1
- package/dist/{index-BC-Jycqj.d.ts → index-DomgmRBG.d.ts} +29 -729
- package/dist/index.d.ts +69 -247
- package/dist/index.js +322 -986
- package/dist/index.js.map +1 -1
- package/dist/kernel-wire.d.ts +3 -3
- package/dist/kernel-wire.js +3 -79
- package/dist/kernel-wire.js.map +1 -1
- package/dist/language/constructs.json +22 -2
- package/dist/language/program-types.json +203 -22
- package/dist/language/protocols.json +46 -0
- package/dist/language/ui-vocabulary.json +1697 -0
- package/dist/language/validation-codes.json +1205 -1215
- package/dist/language/vocabulary.json +44 -8
- package/dist/language-data.d.ts +7 -4
- package/dist/language-data.js +20 -14
- package/dist/language-data.js.map +1 -1
- package/dist/patterns/component-mapping.json +11 -1
- package/dist/patterns/definitions.d.ts +2 -2
- package/dist/patterns/definitions.js +1 -1
- package/dist/patterns/event-contracts.json +1 -15
- package/dist/patterns/index.d.ts +24 -120
- package/dist/patterns/index.js +3 -3
- package/dist/patterns/patterns-registry.json +522 -24
- package/dist/patterns/registry.json +522 -24
- package/dist/trait-CzG9M89M.d.ts +3519 -0
- package/dist/types/index.d.ts +9 -10
- package/dist/types/index.js +11 -5
- package/dist/{types-DGwrltUF.d.ts → types-BHlTjwWd.d.ts} +3 -3
- package/fixtures/events-wire/client-effects-by-trait/response.json +0 -18
- package/fixtures/events-wire/client-effects-provenance/response.json +0 -18
- package/fixtures/events-wire/effect-results-every-kind/response.json +2 -27
- package/fixtures/events-wire/navigate-1/response.json +8 -5
- package/fixtures/events-wire/navigate-2/response.json +11 -8
- package/fixtures/events-wire/navigate-3/response.json +14 -11
- package/fixtures/events-wire/navigate-back/response.json +7 -4
- package/fixtures/events-wire/render-ui-3/response.json +12 -9
- package/fixtures/events-wire/render-ui-clear/response.json +0 -7
- package/fixtures/events-wire/sse-stream/response.json +0 -20
- package/fixtures/events-wire/sse-stream/stream.json +0 -20
- package/fixtures/events-wire/stateless-traits/response.json +14 -5
- package/fixtures/kernel-wire/golden/basic-entity.json +1687 -0
- package/fixtures/kernel-wire/golden/entity-rerender.json +743 -0
- package/fixtures/kernel-wire/golden/rollback.json +793 -0
- package/fixtures/kernel-wire/golden/tick-counter.json +1538 -0
- package/fixtures/kernel-wire/golden/two-orbital-chore.json +847 -0
- package/fixtures/kernel-wire/golden/two-orbital-task.json +457 -0
- package/fixtures/kernel-wire/played-step.json +136 -0
- package/fixtures/kernel-wire/scripts/basic-entity.json +28 -0
- package/fixtures/kernel-wire/scripts/entity-rerender.json +13 -0
- package/fixtures/kernel-wire/scripts/rollback.json +53 -0
- package/fixtures/kernel-wire/scripts/tick-counter.json +26 -0
- package/fixtures/kernel-wire/scripts/two-orbital-chore.json +9 -0
- package/fixtures/kernel-wire/scripts/two-orbital-task.json +9 -0
- package/package.json +28 -19
- package/dist/builders-DmZE5By0.d.ts +0 -2663
- package/dist/chunk-45I2O4SJ.js +0 -4646
- package/dist/chunk-45I2O4SJ.js.map +0 -1
- package/dist/chunk-6LR43Z5E.js +0 -3061
- package/dist/chunk-6LR43Z5E.js.map +0 -1
- package/dist/chunk-GIUA3NUJ.js +0 -809
- package/dist/chunk-GIUA3NUJ.js.map +0 -1
- package/dist/chunk-GTY53NS5.js +0 -1908
- package/dist/chunk-GTY53NS5.js.map +0 -1
- package/dist/chunk-JOHDVS6J.js +0 -1614
- package/dist/chunk-JOHDVS6J.js.map +0 -1
- package/dist/chunk-KDMV222Q.js.map +0 -1
- package/dist/chunk-QRHJUS3D.js +0 -23
- package/dist/chunk-QRHJUS3D.js.map +0 -1
- package/dist/chunk-QUOTJULD.js.map +0 -1
- package/dist/chunk-V5VNGRVU.js +0 -66
- package/dist/chunk-V5VNGRVU.js.map +0 -1
- package/dist/chunk-X4SC7FGF.js.map +0 -1
- package/dist/entityAccess-BPSz1i2n.d.ts +0 -80
- package/dist/mock/index.d.ts +0 -153
- package/dist/mock/index.js +0 -190
- package/dist/mock/index.js.map +0 -1
- package/dist/schema-T5RT5s6H.d.ts +0 -282
- package/dist/state-machine/index.d.ts +0 -359
- package/dist/state-machine/index.js +0 -3
- package/dist/state-machine/index.js.map +0 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/types/identity.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 asOrbitalId = orbitalKind.as;
|
|
40
|
+
var isEntityId = entityKind.is;
|
|
41
|
+
var asEntityId = entityKind.as;
|
|
42
|
+
var isTraitId = traitKind.is;
|
|
43
|
+
var asTraitId = traitKind.as;
|
|
44
|
+
var isEventId = eventKind.is;
|
|
45
|
+
var asEventId = eventKind.as;
|
|
46
|
+
var isPageId = pageKind.is;
|
|
47
|
+
var asPageId = pageKind.as;
|
|
48
|
+
var isServiceId = serviceKind.is;
|
|
49
|
+
var asServiceId = serviceKind.as;
|
|
50
|
+
var isThemeId = themeKind.is;
|
|
51
|
+
var asThemeId = themeKind.as;
|
|
52
|
+
var isPaletteEntryId = paletteKind.is;
|
|
53
|
+
var asPaletteEntryId = paletteKind.as;
|
|
54
|
+
function idPrefix(kind) {
|
|
55
|
+
return ID_PREFIXES[kind];
|
|
56
|
+
}
|
|
57
|
+
function idKindOf(id) {
|
|
58
|
+
for (const kind of Object.keys(ID_PREFIXES)) {
|
|
59
|
+
const prefix = ID_PREFIXES[kind];
|
|
60
|
+
if (id.startsWith(prefix) && id.length > prefix.length) return kind;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
var CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
65
|
+
var TIME_LEN = 10;
|
|
66
|
+
var RANDOM_LEN = 16;
|
|
67
|
+
function randomBytes(len) {
|
|
68
|
+
const g = globalThis;
|
|
69
|
+
if (g.crypto?.getRandomValues) {
|
|
70
|
+
return g.crypto.getRandomValues(new Uint8Array(len));
|
|
71
|
+
}
|
|
72
|
+
throw new Error("mintId: no crypto.getRandomValues available in this runtime");
|
|
73
|
+
}
|
|
74
|
+
function encodeTime(now) {
|
|
75
|
+
let value = now;
|
|
76
|
+
let out = "";
|
|
77
|
+
for (let i = 0; i < TIME_LEN; i++) {
|
|
78
|
+
const mod = value % 32;
|
|
79
|
+
out = CROCKFORD[mod] + out;
|
|
80
|
+
value = (value - mod) / 32;
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
function encodeRandom() {
|
|
85
|
+
const bytes = randomBytes(RANDOM_LEN);
|
|
86
|
+
let out = "";
|
|
87
|
+
for (let i = 0; i < RANDOM_LEN; i++) {
|
|
88
|
+
out += CROCKFORD[bytes[i] & 31];
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
function mintUlid() {
|
|
93
|
+
return encodeTime(Date.now()) + encodeRandom();
|
|
94
|
+
}
|
|
95
|
+
function mintId(kind) {
|
|
96
|
+
return brand(ID_PREFIXES[kind] + mintUlid());
|
|
97
|
+
}
|
|
98
|
+
function ledgerResolveName(ledger, kind, name) {
|
|
99
|
+
for (const [id, entry] of Object.entries(ledger.entries)) {
|
|
100
|
+
if (entry.kind === kind && entry.curName === name) return id;
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
function ledgerRename(ledger, id, to, at) {
|
|
105
|
+
const entry = ledger.entries[id];
|
|
106
|
+
if (entry === void 0 || entry.curName === to) return ledger;
|
|
107
|
+
const updated = {
|
|
108
|
+
...entry,
|
|
109
|
+
curName: to,
|
|
110
|
+
renames: [...entry.renames, { from: entry.curName, to, at }]
|
|
111
|
+
};
|
|
112
|
+
return { ...ledger, entries: { ...ledger.entries, [id]: updated } };
|
|
113
|
+
}
|
|
114
|
+
function ledgerCurName(ledger, id) {
|
|
115
|
+
return ledger.entries[id]?.curName ?? null;
|
|
116
|
+
}
|
|
117
|
+
var OrbitalIdSchema = z.string().refine(isOrbitalId, { message: `Expected an orbital id (prefix "${ID_PREFIXES.orbital}")` });
|
|
118
|
+
var EntityIdSchema = z.string().refine(isEntityId, { message: `Expected an entity id (prefix "${ID_PREFIXES.entity}")` });
|
|
119
|
+
var TraitIdSchema = z.string().refine(isTraitId, { message: `Expected a trait id (prefix "${ID_PREFIXES.trait}")` });
|
|
120
|
+
var EventIdSchema = z.string().refine(isEventId, { message: `Expected an event id (prefix "${ID_PREFIXES.event}")` });
|
|
121
|
+
var PageIdSchema = z.string().refine(isPageId, { message: `Expected a page id (prefix "${ID_PREFIXES.page}")` });
|
|
122
|
+
var ServiceIdSchema = z.string().refine(isServiceId, { message: `Expected a service id (prefix "${ID_PREFIXES.service}")` });
|
|
123
|
+
var ThemeIdSchema = z.string().refine(isThemeId, { message: `Expected a theme id (prefix "${ID_PREFIXES.theme}")` });
|
|
124
|
+
var PaletteEntryIdSchema = z.string().refine(isPaletteEntryId, { message: `Expected a palette-entry id (prefix "${ID_PREFIXES.palette}")` });
|
|
125
|
+
var LedgerKindSchema = z.enum([
|
|
126
|
+
"orbital",
|
|
127
|
+
"entity",
|
|
128
|
+
"trait",
|
|
129
|
+
"event",
|
|
130
|
+
"page",
|
|
131
|
+
"service",
|
|
132
|
+
"theme"
|
|
133
|
+
]);
|
|
134
|
+
var LedgerEntrySchema = z.object({
|
|
135
|
+
id: z.string(),
|
|
136
|
+
kind: LedgerKindSchema,
|
|
137
|
+
bakedName: z.string(),
|
|
138
|
+
curName: z.string(),
|
|
139
|
+
renames: z.array(
|
|
140
|
+
z.object({ from: z.string(), to: z.string(), at: z.string() })
|
|
141
|
+
),
|
|
142
|
+
owner: z.enum(["std", "io", "workspace"]),
|
|
143
|
+
parent: TraitIdSchema.optional()
|
|
144
|
+
});
|
|
145
|
+
var IdentityLedgerSchema = z.object({
|
|
146
|
+
schemaVersion: z.literal(1),
|
|
147
|
+
entries: z.record(z.string(), LedgerEntrySchema)
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
export { EntityIdSchema, EventIdSchema, IdentityLedgerSchema, LedgerEntrySchema, LedgerKindSchema, OrbitalIdSchema, PageIdSchema, PaletteEntryIdSchema, ServiceIdSchema, ThemeIdSchema, TraitIdSchema, asEntityId, asEventId, asOrbitalId, asPageId, asPaletteEntryId, asServiceId, asThemeId, asTraitId, idKindOf, idPrefix, isEntityId, isEventId, isOrbitalId, isPageId, isPaletteEntryId, isServiceId, isThemeId, isTraitId, ledgerCurName, ledgerRename, ledgerResolveName, mintId, mintUlid };
|
|
151
|
+
//# sourceMappingURL=chunk-VG7BRFUD.js.map
|
|
152
|
+
//# sourceMappingURL=chunk-VG7BRFUD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/identity.ts"],"names":[],"mappings":"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","file":"chunk-VG7BRFUD.js","sourcesContent":["/**\n * Identity model (Almadar Rabit V4, Phase 1 — types only).\n *\n * Branded, prefix-tagged node ids + a workspace-scoped name ledger. Ids are\n * the durable edge keys of the identity-keyed schema graph; the ledger is the\n * sole name↔id map (names are display labels, one row per rename). This module\n * is pure: no I/O, no side effects. Minting is the only impurity (clock +\n * crypto randomness for the ULID suffix).\n *\n * @packageDocumentation\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Branded id types\n// ============================================================================\n\ntype Branded<K extends string> = string & { readonly __idBrand: K };\n\nexport type OrbitalId = Branded<'OrbitalId'>;\nexport type EntityId = Branded<'EntityId'>;\nexport type TraitId = Branded<'TraitId'>;\nexport type EventId = Branded<'EventId'>;\nexport type PageId = Branded<'PageId'>;\nexport type ServiceId = Branded<'ServiceId'>;\nexport type ThemeId = Branded<'ThemeId'>;\nexport type PaletteEntryId = Branded<'PaletteEntryId'>;\n\n/** Node kind ↔ id-prefix table. The single source of truth for every prefix. */\nconst ID_PREFIXES = {\n orbital: 'orb_',\n entity: 'ent_',\n trait: 'trt_',\n event: 'evt_',\n page: 'pag_',\n service: 'svc_',\n theme: 'thm_',\n palette: 'pal_',\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIXES;\n\n/** Compile-time map from kind to its branded id type. */\nexport interface IdForKind {\n orbital: OrbitalId;\n entity: EntityId;\n trait: TraitId;\n event: EventId;\n page: PageId;\n service: ServiceId;\n theme: ThemeId;\n palette: PaletteEntryId;\n}\n\n/**\n * The one controlled brand assertion in this module. A prefix-checked string\n * is asserted into its branded form here and nowhere else.\n */\nfunction brand<Id extends string>(value: string): Id {\n return value as Id;\n}\n\n// ============================================================================\n// Kind guards + constructors (one shared factory, eight kinds)\n// ============================================================================\n\ninterface IdKindApi<Id extends string> {\n readonly prefix: string;\n is(value: string): value is Id;\n as(value: string): Id;\n}\n\nfunction makeIdKind<Id extends string>(kind: IdKind): IdKindApi<Id> {\n const prefix = ID_PREFIXES[kind];\n const is = (value: string): value is Id =>\n value.startsWith(prefix) && value.length > prefix.length;\n const as = (value: string): Id => {\n if (!is(value)) {\n throw new Error(\n `Expected ${kind} id (prefix \"${prefix}\"), got: ${JSON.stringify(value)}`,\n );\n }\n return brand<Id>(value);\n };\n return { prefix, is, as };\n}\n\nconst orbitalKind = makeIdKind<OrbitalId>('orbital');\nconst entityKind = makeIdKind<EntityId>('entity');\nconst traitKind = makeIdKind<TraitId>('trait');\nconst eventKind = makeIdKind<EventId>('event');\nconst pageKind = makeIdKind<PageId>('page');\nconst serviceKind = makeIdKind<ServiceId>('service');\nconst themeKind = makeIdKind<ThemeId>('theme');\nconst paletteKind = makeIdKind<PaletteEntryId>('palette');\n\nexport const isOrbitalId = orbitalKind.is;\nexport const asOrbitalId = orbitalKind.as;\nexport const isEntityId = entityKind.is;\nexport const asEntityId = entityKind.as;\nexport const isTraitId = traitKind.is;\nexport const asTraitId = traitKind.as;\nexport const isEventId = eventKind.is;\nexport const asEventId = eventKind.as;\nexport const isPageId = pageKind.is;\nexport const asPageId = pageKind.as;\nexport const isServiceId = serviceKind.is;\nexport const asServiceId = serviceKind.as;\nexport const isThemeId = themeKind.is;\nexport const asThemeId = themeKind.as;\nexport const isPaletteEntryId = paletteKind.is;\nexport const asPaletteEntryId = paletteKind.as;\n\n/**\n * The id-prefix for a node kind (`'entity' → 'ent_'`). The JS mirror of the\n * Rust `IdKind::prefix`. Single source of truth is {@link ID_PREFIXES}.\n */\nexport function idPrefix(kind: IdKind): string {\n return ID_PREFIXES[kind];\n}\n\n/**\n * The node kind an id's prefix denotes, or `null` for an unrecognized /\n * bare-prefix string. The JS mirror of the Rust `id_kind_of`. Prefixes are\n * mutually non-overlapping, so match order is irrelevant.\n */\nexport function idKindOf(id: string): IdKind | null {\n for (const kind of Object.keys(ID_PREFIXES) as IdKind[]) {\n const prefix = ID_PREFIXES[kind];\n if (id.startsWith(prefix) && id.length > prefix.length) return kind;\n }\n return null;\n}\n\n// ============================================================================\n// Minting — prefix + ULID\n// ============================================================================\n\nconst CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\nfunction randomBytes(len: number): Uint8Array {\n const g = globalThis as { crypto?: { getRandomValues?: (a: Uint8Array) => Uint8Array } };\n if (g.crypto?.getRandomValues) {\n return g.crypto.getRandomValues(new Uint8Array(len));\n }\n throw new Error('mintId: no crypto.getRandomValues available in this runtime');\n}\n\nfunction encodeTime(now: number): string {\n let value = now;\n let out = '';\n for (let i = 0; i < TIME_LEN; i++) {\n const mod = value % 32;\n out = CROCKFORD[mod] + out;\n value = (value - mod) / 32;\n }\n return out;\n}\n\nfunction encodeRandom(): string {\n const bytes = randomBytes(RANDOM_LEN);\n let out = '';\n for (let i = 0; i < RANDOM_LEN; i++) {\n out += CROCKFORD[bytes[i] & 31];\n }\n return out;\n}\n\n/** A 26-char Crockford-base32 ULID: 48-bit ms timestamp + 80 bits of randomness. Needs only `getRandomValues`, so it also runs on a plain-http page where `randomUUID` is absent. */\nexport function mintUlid(): string {\n return encodeTime(Date.now()) + encodeRandom();\n}\n\n/** Mint a fresh, opaque, kind-tagged id: `<prefix><ULID>`. */\nexport function mintId<K extends IdKind>(kind: K): IdForKind[K] {\n return brand<IdForKind[K]>(ID_PREFIXES[kind] + mintUlid());\n}\n\n// ============================================================================\n// Identity ledger\n// ============================================================================\n\n/** Ledger row kind. `palette` entries are manifest ids, not name-ledger rows. */\nexport type LedgerKind =\n | 'orbital'\n | 'entity'\n | 'trait'\n | 'event'\n | 'page'\n | 'service'\n | 'theme';\n\n/**\n * One ledger row: the workspace's name history for a single node id.\n *\n * For kind `'event'` the row is minted per-(trait, declared event) per the\n * Phase-0 freeze — the owning trait is recorded in `parent`; a call-site event\n * rename is a one-row edit on this same id (the baked-vs-current key namespaces\n * collapse into `bakedName` vs `curName`).\n */\nexport interface LedgerEntry {\n id: string;\n kind: LedgerKind;\n bakedName: string;\n curName: string;\n renames: ReadonlyArray<{ from: string; to: string; at: string }>;\n owner: 'std' | 'io' | 'workspace';\n /** Owning trait for kind `'event'` (per-trait event-id namespace). */\n parent?: TraitId;\n}\n\nexport interface IdentityLedger {\n schemaVersion: 1;\n entries: Record<string, LedgerEntry>;\n}\n\n/** Resolve a name to its id via exact `curName` match within `kind`, else null. */\nexport function ledgerResolveName(\n ledger: IdentityLedger,\n kind: LedgerKind,\n name: string,\n): string | null {\n for (const [id, entry] of Object.entries(ledger.entries)) {\n if (entry.kind === kind && entry.curName === name) return id;\n }\n return null;\n}\n\n/** Immutable rename: returns a new ledger with the id's `curName` + `renames` updated; renaming to the current name is a no-op. */\nexport function ledgerRename(\n ledger: IdentityLedger,\n id: string,\n to: string,\n at: string,\n): IdentityLedger {\n const entry = ledger.entries[id];\n if (entry === undefined || entry.curName === to) return ledger;\n const updated: LedgerEntry = {\n ...entry,\n curName: to,\n renames: [...entry.renames, { from: entry.curName, to, at }],\n };\n return { ...ledger, entries: { ...ledger.entries, [id]: updated } };\n}\n\n/** Current display name for an id, or null when the id is not in the ledger. */\nexport function ledgerCurName(ledger: IdentityLedger, id: string): string | null {\n return ledger.entries[id]?.curName ?? null;\n}\n\n// ============================================================================\n// Zod schemas — the `.orb` load-time activation surface (Rabit V4, Phase 4)\n// ============================================================================\n\n/**\n * Prefix-checked, kind-tagged id schemas. Each narrows a validated string to\n * its branded id type via the module's own kind guard, so a schema that reads\n * `TraitIdSchema.optional()` yields `TraitId | undefined` with no cast. The\n * guard is the single source of prefix truth (`ID_PREFIXES`); the schema is a\n * thin zod wrapper over it.\n */\nexport const OrbitalIdSchema = z\n .string()\n .refine(isOrbitalId, { message: `Expected an orbital id (prefix \"${ID_PREFIXES.orbital}\")` });\nexport const EntityIdSchema = z\n .string()\n .refine(isEntityId, { message: `Expected an entity id (prefix \"${ID_PREFIXES.entity}\")` });\nexport const TraitIdSchema = z\n .string()\n .refine(isTraitId, { message: `Expected a trait id (prefix \"${ID_PREFIXES.trait}\")` });\nexport const EventIdSchema = z\n .string()\n .refine(isEventId, { message: `Expected an event id (prefix \"${ID_PREFIXES.event}\")` });\nexport const PageIdSchema = z\n .string()\n .refine(isPageId, { message: `Expected a page id (prefix \"${ID_PREFIXES.page}\")` });\nexport const ServiceIdSchema = z\n .string()\n .refine(isServiceId, { message: `Expected a service id (prefix \"${ID_PREFIXES.service}\")` });\nexport const ThemeIdSchema = z\n .string()\n .refine(isThemeId, { message: `Expected a theme id (prefix \"${ID_PREFIXES.theme}\")` });\nexport const PaletteEntryIdSchema = z\n .string()\n .refine(isPaletteEntryId, { message: `Expected a palette-entry id (prefix \"${ID_PREFIXES.palette}\")` });\n\nexport const LedgerKindSchema = z.enum([\n 'orbital',\n 'entity',\n 'trait',\n 'event',\n 'page',\n 'service',\n 'theme',\n]);\n\nexport const LedgerEntrySchema = z.object({\n id: z.string(),\n kind: LedgerKindSchema,\n bakedName: z.string(),\n curName: z.string(),\n renames: z.array(\n z.object({ from: z.string(), to: z.string(), at: z.string() }),\n ),\n owner: z.enum(['std', 'io', 'workspace']),\n parent: TraitIdSchema.optional(),\n});\n\nexport const IdentityLedgerSchema = z.object({\n schemaVersion: z.literal(1),\n entries: z.record(z.string(), LedgerEntrySchema),\n});\n"]}
|