@fabricorg/platform 0.11.0 → 0.12.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 (67) hide show
  1. package/CHANGELOG.md +26 -6
  2. package/README.md +1 -1
  3. package/dist/actions/index.cjs +11 -11
  4. package/dist/actions/index.d.cts +22 -2
  5. package/dist/actions/index.d.ts +22 -2
  6. package/dist/actions/index.js +1 -1
  7. package/dist/{chunk-4YQOGV7H.js → chunk-3O4GMCCE.js} +2 -2
  8. package/dist/chunk-3O4GMCCE.js.map +1 -0
  9. package/dist/{chunk-O7IHZ53Y.cjs → chunk-45TSN3GO.cjs} +18 -9
  10. package/dist/chunk-45TSN3GO.cjs.map +1 -0
  11. package/dist/{chunk-3S6UTP4X.js → chunk-4MMMXV4Q.js} +28 -3
  12. package/dist/chunk-4MMMXV4Q.js.map +1 -0
  13. package/dist/{chunk-JM55UQWK.js → chunk-4RMKUYRX.js} +2 -2
  14. package/dist/chunk-4RMKUYRX.js.map +1 -0
  15. package/dist/{chunk-3JQI3OFC.js → chunk-5PDVZXEI.js} +42 -6
  16. package/dist/chunk-5PDVZXEI.js.map +1 -0
  17. package/dist/{chunk-JAXDEK5Z.cjs → chunk-7RV5REPT.cjs} +2 -2
  18. package/dist/chunk-7RV5REPT.cjs.map +1 -0
  19. package/dist/{chunk-HLRIXNVG.cjs → chunk-JOATYJXQ.cjs} +2 -2
  20. package/dist/chunk-JOATYJXQ.cjs.map +1 -0
  21. package/dist/{chunk-7WASIL46.js → chunk-LXS6SURU.js} +18 -9
  22. package/dist/chunk-LXS6SURU.js.map +1 -0
  23. package/dist/{chunk-RYCHDNHZ.cjs → chunk-MCD5VT4E.cjs} +19 -10
  24. package/dist/chunk-MCD5VT4E.cjs.map +1 -0
  25. package/dist/{chunk-XCL2HBMB.cjs → chunk-OC4ZFJKD.cjs} +28 -3
  26. package/dist/chunk-OC4ZFJKD.cjs.map +1 -0
  27. package/dist/{chunk-ODP3DO6P.cjs → chunk-ROC326VL.cjs} +52 -16
  28. package/dist/chunk-ROC326VL.cjs.map +1 -0
  29. package/dist/{chunk-NFP5DJBT.js → chunk-ZO6HPMCK.js} +16 -7
  30. package/dist/chunk-ZO6HPMCK.js.map +1 -0
  31. package/dist/events/index.cjs +8 -8
  32. package/dist/events/index.d.cts +6 -1
  33. package/dist/events/index.d.ts +6 -1
  34. package/dist/events/index.js +1 -1
  35. package/dist/index.cjs +48 -48
  36. package/dist/index.d.cts +4 -4
  37. package/dist/index.d.ts +4 -4
  38. package/dist/index.js +6 -6
  39. package/dist/manifest/index.cjs +12 -12
  40. package/dist/manifest/index.d.cts +5 -2
  41. package/dist/manifest/index.d.ts +5 -2
  42. package/dist/manifest/index.js +6 -6
  43. package/dist/modules/index.cjs +12 -12
  44. package/dist/modules/index.d.cts +23 -1
  45. package/dist/modules/index.d.ts +23 -1
  46. package/dist/modules/index.js +5 -5
  47. package/dist/objects/index.cjs +6 -6
  48. package/dist/objects/index.d.cts +13 -0
  49. package/dist/objects/index.d.ts +13 -0
  50. package/dist/objects/index.js +1 -1
  51. package/dist/projections/index.cjs +8 -8
  52. package/dist/projections/index.d.cts +15 -1
  53. package/dist/projections/index.d.ts +15 -1
  54. package/dist/projections/index.js +1 -1
  55. package/package.json +1 -1
  56. package/dist/chunk-3JQI3OFC.js.map +0 -1
  57. package/dist/chunk-3S6UTP4X.js.map +0 -1
  58. package/dist/chunk-4YQOGV7H.js.map +0 -1
  59. package/dist/chunk-7WASIL46.js.map +0 -1
  60. package/dist/chunk-HLRIXNVG.cjs.map +0 -1
  61. package/dist/chunk-JAXDEK5Z.cjs.map +0 -1
  62. package/dist/chunk-JM55UQWK.js.map +0 -1
  63. package/dist/chunk-NFP5DJBT.js.map +0 -1
  64. package/dist/chunk-O7IHZ53Y.cjs.map +0 -1
  65. package/dist/chunk-ODP3DO6P.cjs.map +0 -1
  66. package/dist/chunk-RYCHDNHZ.cjs.map +0 -1
  67. package/dist/chunk-XCL2HBMB.cjs.map +0 -1
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkXCL2HBMB_cjs = require('./chunk-XCL2HBMB.cjs');
3
+ var chunkOC4ZFJKD_cjs = require('./chunk-OC4ZFJKD.cjs');
4
4
  var chunkNJL3US7H_cjs = require('./chunk-NJL3US7H.cjs');
5
- var chunkO7IHZ53Y_cjs = require('./chunk-O7IHZ53Y.cjs');
5
+ var chunk45TSN3GO_cjs = require('./chunk-45TSN3GO.cjs');
6
6
  var chunkUV252FLT_cjs = require('./chunk-UV252FLT.cjs');
7
- var chunkHLRIXNVG_cjs = require('./chunk-HLRIXNVG.cjs');
7
+ var chunkJOATYJXQ_cjs = require('./chunk-JOATYJXQ.cjs');
8
8
  var chunkEO4VSB2O_cjs = require('./chunk-EO4VSB2O.cjs');
9
- var chunkJAXDEK5Z_cjs = require('./chunk-JAXDEK5Z.cjs');
9
+ var chunk7RV5REPT_cjs = require('./chunk-7RV5REPT.cjs');
10
10
 
11
11
  // modules/index.ts
12
12
  var registeredModuleNamespaces = /* @__PURE__ */ new Set();
@@ -70,7 +70,7 @@ function qualifiedObjectType(namespace, type) {
70
70
  function validateObjectDefinition(objectType, namespace, context) {
71
71
  if (typeof objectType === "string") return;
72
72
  if (objectType.schema !== void 0) {
73
- chunkXCL2HBMB_cjs.assertPortableJsonSchema(objectType.schema, `Module "${namespace}" object "${objectType.type}" schema`);
73
+ chunkOC4ZFJKD_cjs.assertPortableJsonSchema(objectType.schema, `Module "${namespace}" object "${objectType.type}" schema`);
74
74
  }
75
75
  if (objectType.semantics !== void 0) {
76
76
  assertJsonValue(objectType.semantics, `Module "${namespace}" object "${objectType.type}" semantics`);
@@ -126,9 +126,23 @@ function validateManifest(module, context = {}) {
126
126
  throw new Error(`Module "${module.namespace}" capability has invalid or duplicate slot "${slot.name}".`);
127
127
  }
128
128
  slots.add(slot.name);
129
- if (slot.shape) chunkXCL2HBMB_cjs.assertPortableJsonSchema(slot.shape, `Capability slot "${slot.name}" shape`);
129
+ if (slot.shape) chunkOC4ZFJKD_cjs.assertPortableJsonSchema(slot.shape, `Capability slot "${slot.name}" shape`);
130
130
  }
131
+ const intents = /* @__PURE__ */ new Set();
132
+ for (const intent of module.capability.actionIntents ?? []) {
133
+ if (!/^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+$/.test(intent.name) || intents.has(intent.name)) throw new Error(`Module "${module.namespace}" capability has invalid or duplicate action intent "${intent.name}".`);
134
+ intents.add(intent.name);
135
+ }
136
+ for (const port of module.capability.requirements?.ports ?? []) {
137
+ if (!/^[a-z][a-z0-9-]*$/.test(port.name)) throw new Error(`Module "${module.namespace}" capability has invalid port requirement "${port.name}".`);
138
+ }
139
+ }
140
+ for (const eventType of module.eventTypes ?? []) if (typeof eventType !== "string" && eventType.schema) chunkOC4ZFJKD_cjs.assertPortableJsonSchema(eventType.schema, `Event "${eventType.eventType}" schema`);
141
+ for (const action of module.actions ?? []) {
142
+ if (action.execution?.idempotency === "required" && !action.idempotent) throw new Error(`Action "${action.actionId}" requires idempotency but is not declared idempotent.`);
143
+ if (action.execution?.connectivity === "offline-capturable" && action.execution.idempotency === "prohibited") throw new Error(`Offline action "${action.actionId}" cannot prohibit idempotency.`);
131
144
  }
145
+ for (const view of module.views ?? []) if (view.usage?.collection?.filterSchema) chunkOC4ZFJKD_cjs.assertPortableJsonSchema(view.usage.collection.filterSchema, `View "${view.name}" filter schema`);
132
146
  for (const dependency of dependencies) {
133
147
  validateModuleNamespace(dependency);
134
148
  if (dependency === module.namespace) {
@@ -149,9 +163,31 @@ function validateManifest(module, context = {}) {
149
163
  }
150
164
  }
151
165
  for (const objectType of module.objectTypes ?? []) {
166
+ if (typeof objectType !== "string") {
167
+ for (const relation of objectType.relations ?? []) {
168
+ const targetNamespace = relation.target.slice(0, relation.target.indexOf("."));
169
+ if (targetNamespace !== module.namespace && !dependencies.includes(targetNamespace)) {
170
+ throw new Error(`Module "${module.namespace}" relation "${relation.name}" targets module "${targetNamespace}" without declaring it as a dependency.`);
171
+ }
172
+ }
173
+ }
152
174
  validateObjectDefinition(objectType, module.namespace, context);
153
175
  }
154
176
  for (const action of module.actions ?? []) {
177
+ let parameterSchema;
178
+ try {
179
+ parameterSchema = action.schema.toJSONSchema?.();
180
+ } catch {
181
+ parameterSchema = void 0;
182
+ }
183
+ if (parameterSchema !== void 0) chunkOC4ZFJKD_cjs.assertPortableJsonSchema(parameterSchema, `Action "${action.actionId}" parameters`);
184
+ let resultSchema;
185
+ try {
186
+ resultSchema = action.resultSchema?.toJSONSchema?.();
187
+ } catch {
188
+ resultSchema = void 0;
189
+ }
190
+ if (resultSchema !== void 0) chunkOC4ZFJKD_cjs.assertPortableJsonSchema(resultSchema, `Action "${action.actionId}" result`);
155
191
  if (!/^[a-z][a-z0-9-]*\.[a-z][a-z0-9_]*$/.test(action.actionId)) {
156
192
  throw new Error(`Invalid action ID: ${action.actionId}`);
157
193
  }
@@ -174,7 +210,7 @@ function validateManifest(module, context = {}) {
174
210
  for (const descriptor of module.displayRenderers ?? []) {
175
211
  const isPlannedEventType = context.plannedEventTypes?.has(descriptor.eventType) ?? false;
176
212
  const isModuleEventType = eventTypes.includes(descriptor.eventType);
177
- if (!chunkJAXDEK5Z_cjs.isValidEventType(descriptor.eventType) && !isModuleEventType && !isPlannedEventType) {
213
+ if (!chunk7RV5REPT_cjs.isValidEventType(descriptor.eventType) && !isModuleEventType && !isPlannedEventType) {
178
214
  throw new Error(
179
215
  `Display renderer registered for unknown event type "${descriptor.eventType}". Register the event type before adding a display renderer.`
180
216
  );
@@ -189,7 +225,7 @@ function validateManifest(module, context = {}) {
189
225
  const key = `${view.name}@${view.version}`;
190
226
  if (viewKeys.has(key)) throw new Error(`Module "${module.namespace}" has duplicate view contract "${key}".`);
191
227
  viewKeys.add(key);
192
- chunkXCL2HBMB_cjs.assertPortableJsonSchema(view.shape, `View "${key}" shape`);
228
+ chunkOC4ZFJKD_cjs.assertPortableJsonSchema(view.shape, `View "${key}" shape`);
193
229
  if (!Number.isInteger(view.snapshotVersion) || view.snapshotVersion < 1) {
194
230
  throw new Error(`View "${key}" snapshotVersion must be a positive integer.`);
195
231
  }
@@ -199,7 +235,7 @@ function validateManifest(module, context = {}) {
199
235
  for (const consumption of view.consumes) {
200
236
  const isPlanned = context.plannedEventTypes?.has(consumption.eventType) ?? false;
201
237
  const isModuleEvent = eventTypes.includes(consumption.eventType);
202
- if (!chunkJAXDEK5Z_cjs.isValidEventType(consumption.eventType) && !isPlanned && !isModuleEvent) {
238
+ if (!chunk7RV5REPT_cjs.isValidEventType(consumption.eventType) && !isPlanned && !isModuleEvent) {
203
239
  throw new Error(`View "${key}" consumes unknown event type "${consumption.eventType}".`);
204
240
  }
205
241
  if (consumption.schemaVersions.length === 0 || consumption.schemaVersions.some((version) => !Number.isInteger(version) || version < 1)) {
@@ -284,16 +320,16 @@ function assertAcyclicRelations(modules) {
284
320
  }
285
321
  function registerValidatedFabricModule(module) {
286
322
  for (const objectType of module.objectTypes ?? []) {
287
- chunkXCL2HBMB_cjs.registerObjectType(getObjectTypeName(objectType));
323
+ chunkOC4ZFJKD_cjs.registerObjectType(getObjectTypeName(objectType));
288
324
  const qualified = qualifiedObjectType(module.namespace, getObjectTypeName(objectType));
289
325
  registeredQualifiedObjectTypes.add(qualified);
290
326
  if (typeof objectType !== "string") registeredObjectDefinitions.set(qualified, objectType);
291
327
  }
292
328
  for (const subjectType of module.subjectTypes ?? []) {
293
- chunkJAXDEK5Z_cjs.registerSubjectType(subjectType);
329
+ chunk7RV5REPT_cjs.registerSubjectType(subjectType);
294
330
  }
295
331
  for (const eventType of module.eventTypes ?? []) {
296
- chunkJAXDEK5Z_cjs.registerEventType(getEventTypeName(eventType));
332
+ chunk7RV5REPT_cjs.registerEventType(getEventTypeName(eventType));
297
333
  }
298
334
  for (const policy of module.policies ?? []) {
299
335
  chunkNJL3US7H_cjs.registerPolicyIfMissing(policy);
@@ -302,12 +338,12 @@ function registerValidatedFabricModule(module) {
302
338
  chunkUV252FLT_cjs.registerStateMachineIfMissing(machine);
303
339
  }
304
340
  for (const action of module.actions ?? []) {
305
- chunkHLRIXNVG_cjs.registerActionIfMissing(action);
341
+ chunkJOATYJXQ_cjs.registerActionIfMissing(action);
306
342
  }
307
343
  for (const descriptor of module.displayRenderers ?? []) {
308
344
  chunkEO4VSB2O_cjs.registerDisplayRenderer(descriptor.eventType, descriptor.renderer);
309
345
  }
310
- for (const view of module.views ?? []) chunkO7IHZ53Y_cjs.registerViewContractIfMissing(view);
346
+ for (const view of module.views ?? []) chunk45TSN3GO_cjs.registerViewContractIfMissing(view);
311
347
  registeredModuleNamespaces.add(module.namespace);
312
348
  }
313
349
  function registerFabricModule(module) {
@@ -351,5 +387,5 @@ exports.getObjectTypeName = getObjectTypeName;
351
387
  exports.registerFabricModule = registerFabricModule;
352
388
  exports.registerFabricModules = registerFabricModules;
353
389
  exports.validateModuleNamespace = validateModuleNamespace;
354
- //# sourceMappingURL=chunk-ODP3DO6P.cjs.map
355
- //# sourceMappingURL=chunk-ODP3DO6P.cjs.map
390
+ //# sourceMappingURL=chunk-ROC326VL.cjs.map
391
+ //# sourceMappingURL=chunk-ROC326VL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../modules/index.ts"],"names":["assertPortableJsonSchema","isValidEventType","registerObjectType","registerSubjectType","registerEventType","registerPolicyIfMissing","registerStateMachineIfMissing","registerActionIfMissing","registerDisplayRenderer"],"mappings":"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","file":"chunk-ROC326VL.cjs","sourcesContent":["import { registerActionIfMissing, type ActionDefinition } from \"../actions\";\nimport { registerDisplayRenderer, type DisplayRenderer } from \"../displays\";\nimport { isValidEventType, registerEventType, registerSubjectType } from \"../events\";\nimport {\n\tassertPortableJsonSchema,\n\tregisterObjectType,\n\ttype JsonValue,\n\ttype PortableJsonSchema,\n} from \"../objects\";\nimport { registerPolicyIfMissing, type PolicyEvaluator } from \"../policies\";\nimport { registerStateMachineIfMissing, type StateMachineDefinition } from \"../state-machines\";\nimport { registerViewContractIfMissing, type ViewContract } from \"../projections\";\n\nexport interface ModuleDependency {\n\tnamespace: string;\n\tversion?: string;\n\toptional?: boolean;\n}\n\nexport type ModuleDependencyInput = string | ModuleDependency;\n\nexport interface IdPrefixRegistration {\n\tprefix: string;\n\tname: string;\n\tmodule: string;\n}\n\nexport interface EventTypeRegistration {\n\teventType: string;\n\tschemaVersion: number;\n\tdescription?: string;\n\tschema?: PortableJsonSchema;\n}\n\nexport type EventTypeRegistrationInput = string | EventTypeRegistration;\n\nexport interface ObjectTypeRegistration {\n\ttype: string;\n\tdisplayName?: string;\n\tidPrefix?: string;\n\tisCoreModuleType?: boolean;\n\tschema?: PortableJsonSchema;\n\tsemantics?: Record<string, JsonValue>;\n\trelations?: ObjectRelationDefinition[];\n\tinvariants?: DeclarativeInvariant[];\n}\n\nexport type ObjectRelationCardinality = \"one\" | \"many\";\nexport type ObjectRelationSemantics = \"reference\" | \"owned\";\nexport type ObjectRelationDeleteBehavior = \"restrict\" | \"cascade\" | \"set-null\";\n\nexport interface ObjectRelationDefinition {\n\tname: string;\n\ttarget: `${string}.${string}`;\n\tcardinality: ObjectRelationCardinality;\n\trequired?: boolean;\n\tsemantics: ObjectRelationSemantics;\n\tonTargetDelete: ObjectRelationDeleteBehavior;\n}\n\nexport type InvariantEnforcement =\n\t| \"json-schema\"\n\t| \"state-machine\"\n\t| \"policy\"\n\t| \"host-adapter\"\n\t| \"application\";\n\nexport interface DeclarativeInvariant {\n\tid: string;\n\tdescription: string;\n\trequired?: boolean;\n\tenforcement: InvariantEnforcement;\n\tenforcementRef?: string;\n}\n\nexport type ObjectTypeRegistrationInput = string | ObjectTypeRegistration;\n\nexport interface ModuleDisplayRendererRegistration {\n\teventType: string;\n\trenderer: DisplayRenderer;\n}\n\nexport interface PolicyRegistration {\n\tid: string;\n\tversion?: string;\n\tdescription?: string;\n}\n\nexport interface StateMachineRegistration {\n\tentityType: string;\n\tstates: string[];\n}\n\nexport interface CapabilitySlotDefinition {\n\tname: string;\n\tdescription: string;\n\tshape?: PortableJsonSchema;\n}\n\nexport interface CapabilityActionIntent {\n\tname: string;\n\tactionId: `${string}.${string}`;\n\tdescription?: string;\n}\n\nexport interface CapabilityPortRequirement {\n\tname: string;\n\tversion?: string;\n\tstandard?: { name: string; version?: string };\n}\n\nexport interface CapabilityRequirements {\n\tports?: CapabilityPortRequirement[];\n\tpermissions?: string[];\n\tentitlements?: string[];\n\tfeatureFlags?: string[];\n}\n\nexport interface CapabilityMetadata {\n\tdisplayName: string;\n\tdescription: string;\n\troles?: string[];\n\tstability: \"experimental\" | \"beta\" | \"stable\" | \"deprecated\";\n\tdeprecated?: { since: string; replacement?: string; message: string };\n\tslots?: CapabilitySlotDefinition[];\n\tactionIntents?: CapabilityActionIntent[];\n\trequirements?: CapabilityRequirements;\n\tcertification?: { profile: string; required: boolean };\n}\n\nexport interface FabricModule<TDb = unknown> {\n\tnamespace: string;\n\tversion?: string;\n\tdisplayName?: string;\n\tdescription?: string;\n\tcapability?: CapabilityMetadata;\n\tdependencies?: ModuleDependencyInput[];\n\tobjectTypes?: ObjectTypeRegistrationInput[];\n\tsubjectTypes?: string[];\n\tidPrefixes?: IdPrefixRegistration[];\n\teventTypes?: EventTypeRegistrationInput[];\n\tactions?: ActionDefinition<TDb>[];\n\tpolicies?: unknown[];\n\tstateMachines?: unknown[];\n\tdisplayRenderers?: ModuleDisplayRendererRegistration[];\n\tadapterDefinitions?: unknown[];\n\tpermissions?: unknown[];\n\troles?: unknown[];\n\tredactionRules?: unknown[];\n\tdataClassifications?: unknown[];\n\tretentionRules?: unknown[];\n\tevidenceRenderers?: unknown[];\n\tviews?: ViewContract[];\n}\n\nexport interface ModuleRegistry<TDb = unknown> {\n\tmodules: ReadonlyMap<string, FabricModule<TDb>>;\n}\n\ninterface ModuleValidationContext {\n\tavailableNamespaces?: Set<string>;\n\tplannedEventTypes?: Set<string>;\n\tavailableObjectTypes?: Set<string>;\n}\n\nconst registeredModuleNamespaces = new Set<string>();\nconst registeredQualifiedObjectTypes = new Set<string>();\nconst registeredObjectDefinitions = new Map<string, ObjectTypeRegistration>();\n\nexport function getModuleDependencyNamespace(dependency: ModuleDependencyInput): string {\n\treturn typeof dependency === \"string\" ? dependency : dependency.namespace;\n}\n\nexport function getObjectTypeName(objectType: ObjectTypeRegistrationInput): string {\n\treturn typeof objectType === \"string\" ? objectType : objectType.type;\n}\n\nexport function getEventTypeName(eventType: EventTypeRegistrationInput): string {\n\treturn typeof eventType === \"string\" ? eventType : eventType.eventType;\n}\n\nexport function validateModuleNamespace(namespace: string): void {\n\tif (!namespace) {\n\t\tthrow new Error(\"Module namespace cannot be empty\");\n\t}\n\tif (!/^[a-z][a-z0-9-]*$/.test(namespace)) {\n\t\tthrow new Error(\n\t\t\t`Invalid module namespace: \"${namespace}\". Must be lowercase letters, numbers, and hyphens only.`,\n\t\t);\n\t}\n}\n\nexport function createModuleRegistry<TDb = unknown>(\n\tmodules: FabricModule<TDb>[] = [],\n): ModuleRegistry<TDb> {\n\tconst registered = new Map<string, FabricModule<TDb>>();\n\tfor (const module of modules) {\n\t\tvalidateModuleNamespace(module.namespace);\n\t\tif (registered.has(module.namespace)) {\n\t\t\tthrow new Error(`Duplicate FabricModule namespace \"${module.namespace}\".`);\n\t\t}\n\t\tregistered.set(module.namespace, module);\n\t}\n\treturn { modules: registered };\n}\n\nfunction validateIdentifierList(\n\tvalues: string[] | undefined,\n\tlabel: string,\n\tnamespace: string,\n): void {\n\tfor (const value of values ?? []) {\n\t\tif (!value) {\n\t\t\tthrow new Error(`Module \"${namespace}\" has an empty ${label} entry.`);\n\t\t}\n\t}\n}\n\nfunction assertJsonValue(value: unknown, path: string): asserts value is JsonValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n\tif (typeof value === \"number\" && Number.isFinite(value)) return;\n\tif (Array.isArray(value)) {\n\t\tvalue.forEach((item, index) => assertJsonValue(item, `${path}[${index}]`));\n\t\treturn;\n\t}\n\tif (typeof value === \"object\") {\n\t\tfor (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tassertJsonValue(child, `${path}.${key}`);\n\t\t}\n\t\treturn;\n\t}\n\tthrow new Error(`${path} must contain JSON-serializable values.`);\n}\n\nfunction qualifiedObjectType(namespace: string, type: string): string {\n\treturn `${namespace}.${type}`;\n}\n\nfunction validateObjectDefinition(\n\tobjectType: ObjectTypeRegistrationInput,\n\tnamespace: string,\n\tcontext: ModuleValidationContext,\n): void {\n\tif (typeof objectType === \"string\") return;\n\tif (objectType.schema !== undefined) {\n\t\tassertPortableJsonSchema(objectType.schema, `Module \"${namespace}\" object \"${objectType.type}\" schema`);\n\t}\n\tif (objectType.semantics !== undefined) {\n\t\tassertJsonValue(objectType.semantics, `Module \"${namespace}\" object \"${objectType.type}\" semantics`);\n\t}\n\tconst relationNames = new Set<string>();\n\tfor (const relation of objectType.relations ?? []) {\n\t\tif (!/^[a-z][a-zA-Z0-9]*$/.test(relation.name)) {\n\t\t\tthrow new Error(`Module \"${namespace}\" object \"${objectType.type}\" has invalid relation name \"${relation.name}\".`);\n\t\t}\n\t\tif (relationNames.has(relation.name)) {\n\t\t\tthrow new Error(`Module \"${namespace}\" object \"${objectType.type}\" has duplicate relation \"${relation.name}\".`);\n\t\t}\n\t\trelationNames.add(relation.name);\n\t\tif (!/^[a-z][a-z0-9-]*\\.[A-Z][a-zA-Z0-9]*$/.test(relation.target)) {\n\t\t\tthrow new Error(`Relation \"${relation.name}\" target \"${relation.target}\" must be module-qualified.`);\n\t\t}\n\t\tif (context.availableObjectTypes && !context.availableObjectTypes.has(relation.target)) {\n\t\t\tthrow new Error(`Relation \"${relation.name}\" targets missing object type \"${relation.target}\".`);\n\t\t}\n\t\tif (relation.required && relation.onTargetDelete === \"set-null\") {\n\t\t\tthrow new Error(`Required relation \"${relation.name}\" cannot use onTargetDelete \"set-null\".`);\n\t\t}\n\t}\n\tconst invariantIds = new Set<string>();\n\tfor (const invariant of objectType.invariants ?? []) {\n\t\tif (!invariant.id.trim() || !invariant.description.trim()) {\n\t\t\tthrow new Error(`Module \"${namespace}\" object \"${objectType.type}\" has an invariant without an id or description.`);\n\t\t}\n\t\tif (invariantIds.has(invariant.id)) {\n\t\t\tthrow new Error(`Module \"${namespace}\" object \"${objectType.type}\" has duplicate invariant \"${invariant.id}\".`);\n\t\t}\n\t\tinvariantIds.add(invariant.id);\n\t\tif (invariant.required && !invariant.enforcementRef?.trim()) {\n\t\t\tthrow new Error(`Required invariant \"${invariant.id}\" must declare enforcementRef.`);\n\t\t}\n\t}\n}\n\nfunction validateManifest(module: FabricModule<unknown>, context: ModuleValidationContext = {}): void {\n\tvalidateModuleNamespace(module.namespace);\n\n\tconst dependencies = (module.dependencies ?? []).map(getModuleDependencyNamespace);\n\tconst objectTypes = (module.objectTypes ?? []).map(getObjectTypeName);\n\tconst eventTypes = (module.eventTypes ?? []).map(getEventTypeName);\n\tif (module.capability) {\n\t\tif (!module.capability.displayName.trim() || !module.capability.description.trim()) {\n\t\t\tthrow new Error(`Module \"${module.namespace}\" capability requires displayName and description.`);\n\t\t}\n\t\tif (new Set(module.capability.roles ?? []).size !== (module.capability.roles ?? []).length || (module.capability.roles ?? []).some((role) => !/^[a-z][a-z0-9-]*$/.test(role))) {\n\t\t\tthrow new Error(`Module \"${module.namespace}\" capability has invalid or duplicate roles.`);\n\t\t}\n\t\tconst slots = new Set<string>();\n\t\tfor (const slot of module.capability.slots ?? []) {\n\t\t\tif (!/^[a-z][a-z0-9-]*$/.test(slot.name) || slots.has(slot.name)) {\n\t\t\t\tthrow new Error(`Module \"${module.namespace}\" capability has invalid or duplicate slot \"${slot.name}\".`);\n\t\t\t}\n\t\t\tslots.add(slot.name);\n\t\t\tif (slot.shape) assertPortableJsonSchema(slot.shape, `Capability slot \"${slot.name}\" shape`);\n\t\t}\n\t\tconst intents = new Set<string>();\n\t\tfor (const intent of module.capability.actionIntents ?? []) {\n\t\t\tif (!/^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+$/.test(intent.name) || intents.has(intent.name)) throw new Error(`Module \"${module.namespace}\" capability has invalid or duplicate action intent \"${intent.name}\".`);\n\t\t\tintents.add(intent.name);\n\t\t}\n\t\tfor (const port of module.capability.requirements?.ports ?? []) {\n\t\t\tif (!/^[a-z][a-z0-9-]*$/.test(port.name)) throw new Error(`Module \"${module.namespace}\" capability has invalid port requirement \"${port.name}\".`);\n\t\t}\n\t}\n\tfor (const eventType of module.eventTypes ?? []) if (typeof eventType !== \"string\" && eventType.schema) assertPortableJsonSchema(eventType.schema, `Event \"${eventType.eventType}\" schema`);\n\tfor (const action of module.actions ?? []) {\n\t\tif (action.execution?.idempotency === \"required\" && !action.idempotent) throw new Error(`Action \"${action.actionId}\" requires idempotency but is not declared idempotent.`);\n\t\tif (action.execution?.connectivity === \"offline-capturable\" && action.execution.idempotency === \"prohibited\") throw new Error(`Offline action \"${action.actionId}\" cannot prohibit idempotency.`);\n\t}\n\tfor (const view of module.views ?? []) if (view.usage?.collection?.filterSchema) assertPortableJsonSchema(view.usage.collection.filterSchema, `View \"${view.name}\" filter schema`);\n\n\tfor (const dependency of dependencies) {\n\t\tvalidateModuleNamespace(dependency);\n\t\tif (dependency === module.namespace) {\n\t\t\tthrow new Error(`Module \"${module.namespace}\" cannot depend on itself.`);\n\t\t}\n\t\tif (context.availableNamespaces && !context.availableNamespaces.has(dependency)) {\n\t\t\tthrow new Error(`Module \"${module.namespace}\" depends on missing module \"${dependency}\".`);\n\t\t}\n\t}\n\n\tvalidateIdentifierList(objectTypes, \"objectTypes\", module.namespace);\n\tvalidateIdentifierList(module.subjectTypes, \"subjectTypes\", module.namespace);\n\tvalidateIdentifierList(eventTypes, \"eventTypes\", module.namespace);\n\n\tfor (const objectType of objectTypes) {\n\t\tif (!/^[A-Z][a-zA-Z0-9]*$/.test(objectType)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid object type: \"${objectType}\". Object types must be PascalCase alphanumeric.`,\n\t\t\t);\n\t\t}\n\t}\n\tfor (const objectType of module.objectTypes ?? []) {\n\t\tif (typeof objectType !== \"string\") {\n\t\t\tfor (const relation of objectType.relations ?? []) {\n\t\t\t\tconst targetNamespace = relation.target.slice(0, relation.target.indexOf(\".\"));\n\t\t\t\tif (targetNamespace !== module.namespace && !dependencies.includes(targetNamespace)) {\n\t\t\t\t\tthrow new Error(`Module \"${module.namespace}\" relation \"${relation.name}\" targets module \"${targetNamespace}\" without declaring it as a dependency.`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvalidateObjectDefinition(objectType, module.namespace, context);\n\t}\n\n\tfor (const action of module.actions ?? []) {\n\t\tlet parameterSchema: unknown;\n\t\ttry { parameterSchema = (action.schema as { toJSONSchema?: () => unknown }).toJSONSchema?.(); } catch { parameterSchema = undefined; }\n\t\tif (parameterSchema !== undefined) assertPortableJsonSchema(parameterSchema, `Action \"${action.actionId}\" parameters`);\n\t\tlet resultSchema: unknown;\n\t\ttry { resultSchema = (action.resultSchema as { toJSONSchema?: () => unknown } | undefined)?.toJSONSchema?.(); } catch { resultSchema = undefined; }\n\t\tif (resultSchema !== undefined) assertPortableJsonSchema(resultSchema, `Action \"${action.actionId}\" result`);\n\t\tif (!/^[a-z][a-z0-9-]*\\.[a-z][a-z0-9_]*$/.test(action.actionId)) {\n\t\t\tthrow new Error(`Invalid action ID: ${action.actionId}`);\n\t\t}\n\n\t\tif (action.namespace !== module.namespace) {\n\t\t\tthrow new Error(\n\t\t\t\t`Action \"${action.actionId}\" declares namespace \"${action.namespace}\" ` +\n\t\t\t\t\t`but is registered by module \"${module.namespace}\".`,\n\t\t\t);\n\t\t}\n\n\t\tif (!action.actionId.startsWith(`${module.namespace}.`)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Action \"${action.actionId}\" must start with module namespace \"${module.namespace}.\"`,\n\t\t\t);\n\t\t}\n\n\t\tif (action.mutatesDomain && action.emitsEvents.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Action \"${action.actionId}\" mutates domain but emits no events. ` +\n\t\t\t\t\t`Every mutating action must emit at least one AssetEvent.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const descriptor of module.displayRenderers ?? []) {\n\t\tconst isPlannedEventType = context.plannedEventTypes?.has(descriptor.eventType) ?? false;\n\t\tconst isModuleEventType = eventTypes.includes(descriptor.eventType);\n\t\tif (!isValidEventType(descriptor.eventType) && !isModuleEventType && !isPlannedEventType) {\n\t\t\tthrow new Error(\n\t\t\t\t`Display renderer registered for unknown event type \"${descriptor.eventType}\". ` +\n\t\t\t\t\t`Register the event type before adding a display renderer.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst viewKeys = new Set<string>();\n\tfor (const view of module.views ?? []) {\n\t\tif (!view.name.startsWith(`${module.namespace}/`) || !/^[a-z][a-z0-9-]*\\/[a-z][a-z0-9/_-]*$/.test(view.name)) {\n\t\t\tthrow new Error(`View \"${view.name}\" must start with module namespace \"${module.namespace}/\" and use lowercase path segments.`);\n\t\t}\n\t\tif (!view.version.trim()) throw new Error(`View \"${view.name}\" must declare a version.`);\n\t\tconst key = `${view.name}@${view.version}`;\n\t\tif (viewKeys.has(key)) throw new Error(`Module \"${module.namespace}\" has duplicate view contract \"${key}\".`);\n\t\tviewKeys.add(key);\n\t\tassertPortableJsonSchema(view.shape, `View \"${key}\" shape`);\n\t\tif (!Number.isInteger(view.snapshotVersion) || view.snapshotVersion < 1) {\n\t\t\tthrow new Error(`View \"${key}\" snapshotVersion must be a positive integer.`);\n\t\t}\n\t\tif ((view.compatibleSnapshotVersions?.some((version) => version !== view.snapshotVersion) ?? false) && !view.upgradeSnapshot) {\n\t\t\tthrow new Error(`View \"${key}\" declares older compatible snapshots but no upgradeSnapshot function.`);\n\t\t}\n\t\tfor (const consumption of view.consumes) {\n\t\t\tconst isPlanned = context.plannedEventTypes?.has(consumption.eventType) ?? false;\n\t\t\tconst isModuleEvent = eventTypes.includes(consumption.eventType);\n\t\t\tif (!isValidEventType(consumption.eventType) && !isPlanned && !isModuleEvent) {\n\t\t\t\tthrow new Error(`View \"${key}\" consumes unknown event type \"${consumption.eventType}\".`);\n\t\t\t}\n\t\t\tif (consumption.schemaVersions.length === 0 || consumption.schemaVersions.some((version) => !Number.isInteger(version) || version < 1)) {\n\t\t\t\tthrow new Error(`View \"${key}\" must declare positive consumed schema versions for \"${consumption.eventType}\".`);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction sortModulesByDependency(\n\tmodules: FabricModule<unknown>[],\n\tregisteredNamespaces = registeredModuleNamespaces,\n): FabricModule<unknown>[] {\n\tconst modulesByNamespace = new Map<string, FabricModule<unknown>>();\n\n\tfor (const module of modules) {\n\t\tvalidateModuleNamespace(module.namespace);\n\t\tif (modulesByNamespace.has(module.namespace)) {\n\t\t\tthrow new Error(`Duplicate Fabric module namespace \"${module.namespace}\".`);\n\t\t}\n\t\tmodulesByNamespace.set(module.namespace, module);\n\t}\n\n\tconst sorted: FabricModule<unknown>[] = [];\n\tconst visiting = new Set<string>();\n\tconst visited = new Set<string>();\n\n\tfunction visit(module: FabricModule<unknown>, path: string[]): void {\n\t\tif (visited.has(module.namespace)) {\n\t\t\treturn;\n\t\t}\n\t\tif (visiting.has(module.namespace)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Cyclic Fabric module dependency detected: ${[...path, module.namespace].join(\" -> \")}`,\n\t\t\t);\n\t\t}\n\n\t\tvisiting.add(module.namespace);\n\t\tfor (const dependency of (module.dependencies ?? []).map(getModuleDependencyNamespace)) {\n\t\t\tconst dependencyModule = modulesByNamespace.get(dependency);\n\t\t\tif (!dependencyModule) {\n\t\t\t\tif (registeredNamespaces.has(dependency)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Module \"${module.namespace}\" depends on missing module \"${dependency}\".`);\n\t\t\t}\n\t\t\tvisit(dependencyModule, [...path, module.namespace]);\n\t\t}\n\t\tvisiting.delete(module.namespace);\n\t\tvisited.add(module.namespace);\n\t\tsorted.push(module);\n\t}\n\n\tfor (const module of modules) {\n\t\tvisit(module, []);\n\t}\n\n\treturn sorted;\n}\n\nfunction assertAcyclicRelations(modules: FabricModule<unknown>[]): void {\n\tconst relationKinds = [\n\t\t{ label: \"owned containment\", include: (relation: ObjectRelationDefinition) => relation.semantics === \"owned\" },\n\t\t{ label: \"cascade-delete\", include: (relation: ObjectRelationDefinition) => relation.onTargetDelete === \"cascade\" },\n\t\t{ label: \"required-construction\", include: (relation: ObjectRelationDefinition) => relation.required === true },\n\t];\n\tfor (const kind of relationKinds) {\n\t\tconst edges = new Map<string, string[]>();\n\t\tfor (const [source, objectType] of registeredObjectDefinitions) {\n\t\t\tedges.set(source, (objectType.relations ?? []).filter(kind.include).map((relation) => relation.target));\n\t\t}\n\t\tfor (const module of modules) {\n\t\t\tfor (const objectType of module.objectTypes ?? []) {\n\t\t\t\tif (typeof objectType === \"string\") continue;\n\t\t\t\tconst source = qualifiedObjectType(module.namespace, objectType.type);\n\t\t\t\tedges.set(source, (objectType.relations ?? []).filter(kind.include).map((relation) => relation.target));\n\t\t\t}\n\t\t}\n\t\tconst visiting = new Set<string>();\n\t\tconst visited = new Set<string>();\n\t\tconst visit = (node: string, path: string[]): void => {\n\t\t\tif (visiting.has(node)) {\n\t\t\t\tthrow new Error(`${kind.label} relation cycle detected: ${[...path, node].join(\" -> \")}`);\n\t\t\t}\n\t\t\tif (visited.has(node)) return;\n\t\t\tvisiting.add(node);\n\t\t\tfor (const target of edges.get(node) ?? []) visit(target, [...path, node]);\n\t\t\tvisiting.delete(node);\n\t\t\tvisited.add(node);\n\t\t};\n\t\tfor (const node of edges.keys()) visit(node, []);\n\t}\n}\n\nfunction registerValidatedFabricModule(module: FabricModule<unknown>): void {\n\tfor (const objectType of module.objectTypes ?? []) {\n\t\tregisterObjectType(getObjectTypeName(objectType));\n\t\tconst qualified = qualifiedObjectType(module.namespace, getObjectTypeName(objectType));\n\t\tregisteredQualifiedObjectTypes.add(qualified);\n\t\tif (typeof objectType !== \"string\") registeredObjectDefinitions.set(qualified, objectType);\n\t}\n\n\tfor (const subjectType of module.subjectTypes ?? []) {\n\t\tregisterSubjectType(subjectType);\n\t}\n\n\tfor (const eventType of module.eventTypes ?? []) {\n\t\tregisterEventType(getEventTypeName(eventType));\n\t}\n\n\tfor (const policy of module.policies ?? []) {\n\t\tregisterPolicyIfMissing(policy as PolicyEvaluator);\n\t}\n\n\tfor (const machine of module.stateMachines ?? []) {\n\t\tregisterStateMachineIfMissing(machine as StateMachineDefinition);\n\t}\n\n\tfor (const action of module.actions ?? []) {\n\t\tregisterActionIfMissing(action);\n\t}\n\n\tfor (const descriptor of module.displayRenderers ?? []) {\n\t\tregisterDisplayRenderer(descriptor.eventType, descriptor.renderer as DisplayRenderer);\n\t}\n\tfor (const view of module.views ?? []) registerViewContractIfMissing(view);\n\n\tregisteredModuleNamespaces.add(module.namespace);\n}\n\nexport function registerFabricModule(module: FabricModule<unknown>): void {\n\tconst availableObjectTypes = new Set([\n\t\t...registeredQualifiedObjectTypes,\n\t\t...(module.objectTypes ?? []).map((objectType) => qualifiedObjectType(module.namespace, getObjectTypeName(objectType))),\n\t]);\n\tvalidateManifest(module, { availableNamespaces: registeredModuleNamespaces, availableObjectTypes });\n\tassertAcyclicRelations([module]);\n\tregisterValidatedFabricModule(module);\n}\n\nexport function registerFabricModules(modules: FabricModule<unknown>[]): FabricModule<unknown>[] {\n\tconst availableNamespaces = new Set([\n\t\t...registeredModuleNamespaces,\n\t\t...modules.map((module) => module.namespace),\n\t]);\n\tconst plannedEventTypes = new Set(\n\t\tmodules.flatMap((module) => (module.eventTypes ?? []).map(getEventTypeName)),\n\t);\n\tconst availableObjectTypes = new Set([\n\t\t...registeredQualifiedObjectTypes,\n\t\t...modules.flatMap((module) =>\n\t\t\t(module.objectTypes ?? []).map((objectType) => qualifiedObjectType(module.namespace, getObjectTypeName(objectType))),\n\t\t),\n\t]);\n\n\tfor (const module of modules) {\n\t\tvalidateManifest(module, { availableNamespaces, plannedEventTypes, availableObjectTypes });\n\t}\n\tassertAcyclicRelations(modules);\n\n\tconst sortedModules = sortModulesByDependency(modules);\n\tfor (const module of sortedModules) {\n\t\tregisterValidatedFabricModule(module);\n\t}\n\n\treturn sortedModules;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { getEventTypeName, getObjectTypeName, getModuleDependencyNamespace } from './chunk-3JQI3OFC.js';
1
+ import { getEventTypeName, getObjectTypeName, getModuleDependencyNamespace } from './chunk-5PDVZXEI.js';
2
2
 
3
3
  // manifest/index.ts
4
4
  var MODULE_MANIFEST_VERSION = 2;
@@ -74,6 +74,7 @@ function exportEventType(eventType) {
74
74
  schemaVersion: eventType.schemaVersion
75
75
  };
76
76
  if (eventType.description !== void 0) normalized.description = eventType.description;
77
+ if (eventType.schema !== void 0) normalized.schema = cloneJson(eventType.schema);
77
78
  return normalized;
78
79
  }
79
80
  function exportAction(action) {
@@ -91,13 +92,20 @@ function exportAction(action) {
91
92
  manifest.requiredPermissions = [...action.requiredPermissions];
92
93
  }
93
94
  if (action.eventPhase !== void 0) manifest.eventPhase = action.eventPhase;
95
+ if (action.execution !== void 0) manifest.execution = cloneJson(action.execution);
94
96
  if (isJsonSchemaExportableValidator(action.schema)) {
95
- manifest.parameterSchema = action.schema.toJSONSchema();
96
- manifest.parameterSchemaFormat = "json-schema";
97
+ try {
98
+ manifest.parameterSchema = action.schema.toJSONSchema();
99
+ manifest.parameterSchemaFormat = "json-schema";
100
+ } catch {
101
+ }
97
102
  }
98
103
  if (action.resultSchema && isJsonSchemaExportableValidator(action.resultSchema)) {
99
- manifest.resultSchema = action.resultSchema.toJSONSchema();
100
- manifest.resultSchemaFormat = "json-schema";
104
+ try {
105
+ manifest.resultSchema = action.resultSchema.toJSONSchema();
106
+ manifest.resultSchemaFormat = "json-schema";
107
+ } catch {
108
+ }
101
109
  }
102
110
  if (action.stateMachine !== void 0) {
103
111
  const binding = {
@@ -182,6 +190,7 @@ function exportView(view) {
182
190
  snapshotVersion: view.snapshotVersion
183
191
  };
184
192
  if (view.compatibleSnapshotVersions) output.compatibleSnapshotVersions = [...view.compatibleSnapshotVersions];
193
+ if (view.usage) output.usage = cloneJson(view.usage);
185
194
  return output;
186
195
  }
187
196
  function exportModuleManifest(module) {
@@ -215,5 +224,5 @@ function exportModuleManifestBundle(modules) {
215
224
  }
216
225
 
217
226
  export { MODULE_MANIFEST_VERSION, exportModuleManifest, exportModuleManifestBundle, isJsonSchemaExportableValidator, normalizeModuleManifest, normalizeModuleManifestBundle };
218
- //# sourceMappingURL=chunk-NFP5DJBT.js.map
219
- //# sourceMappingURL=chunk-NFP5DJBT.js.map
227
+ //# sourceMappingURL=chunk-ZO6HPMCK.js.map
228
+ //# sourceMappingURL=chunk-ZO6HPMCK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../manifest/index.ts"],"names":[],"mappings":"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","file":"chunk-ZO6HPMCK.js","sourcesContent":["import type {\n\tActionExecutionContract,\n\tActionDefinition,\n\tAdapterStepRetryPolicy,\n\tSchemaValidator,\n} from \"../actions\";\nimport {\n\tgetEventTypeName,\n\tgetModuleDependencyNamespace,\n\tgetObjectTypeName,\n\ttype FabricModule,\n\ttype CapabilityMetadata,\n\ttype DeclarativeInvariant,\n\ttype ModuleDependency,\n\ttype ModuleDependencyInput,\n\ttype ObjectRelationDefinition,\n} from \"../modules\";\nimport type { JsonValue, PortableJsonSchema } from \"../objects\";\nimport type {\n\tDataPolicyDefinition,\n\tPolicyFallbackDefinition,\n\tPolicyKind,\n} from \"../policies\";\nimport type { StateDefinition, StateMachineDefinition } from \"../state-machines\";\nimport type { ViewContract } from \"../projections\";\n\n/**\n * Version of the module manifest contract. Bump when the serialized shape\n * changes in a way consumers must detect.\n */\nexport const MODULE_MANIFEST_VERSION = 2 as const;\n\nexport interface ModuleManifestObjectType {\n\ttype: string;\n\tdisplayName?: string;\n\tidPrefix?: string;\n\tschema?: PortableJsonSchema;\n\tsemantics?: Record<string, JsonValue>;\n\trelations?: ObjectRelationDefinition[];\n\tinvariants?: DeclarativeInvariant[];\n}\n\nexport interface ModuleManifestIdPrefix {\n\tprefix: string;\n\tname: string;\n}\n\nexport interface ModuleManifestEventType {\n\teventType: string;\n\tschemaVersion: number;\n\tdescription?: string;\n\tschema?: PortableJsonSchema;\n}\n\nexport interface ModuleManifestActionStateMachine {\n\tentityType: string;\n\t/** Present only when the binding declares a static target state. */\n\ttargetState?: string;\n}\n\nexport interface ModuleManifestAdapterStep {\n\tadapterType: string;\n\toperation: string;\n\tretryPolicy?: AdapterStepRetryPolicy;\n}\n\nexport interface ModuleManifestAction {\n\tactionId: string;\n\tversion: number;\n\tkind: \"atomic\" | \"saga\";\n\tidempotent: boolean;\n\tmutatesDomain: boolean;\n\temitsEvents: string[];\n\tpolicies?: string[];\n\trequiredRoles?: string[];\n\trequiredPermissions?: string[];\n\teventPhase?: \"before_adapters\" | \"after_adapters\";\n\texecution?: ActionExecutionContract;\n\t/**\n\t * JSON Schema for the action parameters, present only when the action's\n\t * `schema` validator implements {@link JsonSchemaExportableValidator}.\n\t */\n\tparameterSchema?: unknown;\n\tparameterSchemaFormat?: \"json-schema\";\n\tresultSchema?: unknown;\n\tresultSchemaFormat?: \"json-schema\";\n\tstateMachine?: ModuleManifestActionStateMachine;\n\tadapterSteps?: ModuleManifestAdapterStep[];\n}\n\nexport interface ModuleManifestCodePolicy {\n\ttype: \"code\";\n\tpolicyId: string;\n\tversion: number;\n\tpreviewSafe?: boolean;\n}\n\nexport interface ModuleManifestDataPolicy {\n\ttype: \"data\";\n\tpolicyId: string;\n\tpolicyVersion: number;\n\tkind: PolicyKind;\n\tdataDefinition?: DataPolicyDefinition;\n\tcodeEvaluatorPolicyId?: string;\n\tfallback?: PolicyFallbackDefinition;\n}\n\nexport type ModuleManifestPolicy = ModuleManifestCodePolicy | ModuleManifestDataPolicy;\n\nexport interface ModuleManifestStateMachineTransition {\n\tfrom: string;\n\tto: string;\n\tcausedByAction: string;\n\t/** `true` when the transition declares a guard function. The guard itself is never serialized. */\n\thasGuard: boolean;\n}\n\nexport interface ModuleManifestStateMachine {\n\tentityType: string;\n\t/** States in declaration order (`Object.values` order of the definition record). */\n\tstates: StateDefinition[];\n\ttransitions: ModuleManifestStateMachineTransition[];\n}\n\nexport interface ModuleManifestView {\n\tname: string;\n\tversion: string;\n\tshape: PortableJsonSchema;\n\tconsumes: Array<{ eventType: string; schemaVersions: number[] }>;\n\tscope: \"tenant-space\";\n\tsnapshotVersion: number;\n\tcompatibleSnapshotVersions?: number[];\n\tusage?: ViewContract[\"usage\"];\n}\n\n/**\n * Stable, JSON-serializable description of a {@link FabricModule}'s ontology:\n * object types, subject types, id prefixes, event types, actions, policies,\n * and state machines. Intended for downstream tooling (semantics exporters,\n * docs generators, tool generators) that cannot consume live module code.\n *\n * The manifest contains definitions only — never raw parameter values,\n * secrets, or runtime data. Function fields (`handler`, `evaluate`, `guard`,\n * dynamic `targetState`, adapter `getInput`) are never serialized.\n */\nexport interface ModuleManifest {\n\tmanifestVersion: typeof MODULE_MANIFEST_VERSION;\n\tnamespace: string;\n\tversion?: string;\n\tdisplayName?: string;\n\tdescription?: string;\n\tcapability?: CapabilityMetadata;\n\tdependencies: ModuleDependency[];\n\tobjectTypes: ModuleManifestObjectType[];\n\tsubjectTypes: string[];\n\tidPrefixes: ModuleManifestIdPrefix[];\n\teventTypes: ModuleManifestEventType[];\n\tactions: ModuleManifestAction[];\n\tpolicies: ModuleManifestPolicy[];\n\tstateMachines: ModuleManifestStateMachine[];\n\tviews: ModuleManifestView[];\n}\n\nexport interface ModuleManifestBundle {\n\tmanifestVersion: typeof MODULE_MANIFEST_VERSION;\n\t/** Manifests in the input module order. */\n\tmodules: ModuleManifest[];\n}\n\n/** Manifest v1 remains accepted by v2 readers; missing v2 fields normalize to absence. */\nexport type ModuleManifestObjectTypeV1 = Omit<\n\tModuleManifestObjectType,\n\t\"schema\" | \"semantics\" | \"relations\" | \"invariants\"\n>;\nexport type ModuleManifestActionV1 = Omit<\n\tModuleManifestAction,\n\t\"resultSchema\" | \"resultSchemaFormat\"\n>;\nexport type ModuleManifestV1 = Omit<\n\tModuleManifest,\n\t\"manifestVersion\" | \"objectTypes\" | \"actions\" | \"views\"\n> & {\n\tmanifestVersion: 1;\n\tobjectTypes: ModuleManifestObjectTypeV1[];\n\tactions: ModuleManifestActionV1[];\n};\nexport type ModuleManifestBundleV1 = Omit<ModuleManifestBundle, \"manifestVersion\" | \"modules\"> & {\n\tmanifestVersion: 1;\n\tmodules: ModuleManifestV1[];\n};\n\nexport function normalizeModuleManifest(\n\tmanifest: ModuleManifest | ModuleManifestV1,\n): ModuleManifest {\n\tconst version: number = manifest.manifestVersion;\n\tif (version !== 1 && version !== MODULE_MANIFEST_VERSION) {\n\t\tthrow new Error(`Unsupported module manifest version: ${String(version)}`);\n\t}\n\treturn {\n\t\t...manifest,\n\t\tmanifestVersion: MODULE_MANIFEST_VERSION,\n\t\tviews: \"views\" in manifest && Array.isArray(manifest.views) ? manifest.views : [],\n\t};\n}\n\nexport function normalizeModuleManifestBundle(\n\tbundle: ModuleManifestBundle | ModuleManifestBundleV1,\n): ModuleManifestBundle {\n\tconst version: number = bundle.manifestVersion;\n\tif (version !== 1 && version !== MODULE_MANIFEST_VERSION) {\n\t\tthrow new Error(`Unsupported module manifest bundle version: ${String(version)}`);\n\t}\n\treturn {\n\t\tmanifestVersion: MODULE_MANIFEST_VERSION,\n\t\tmodules: bundle.modules.map((manifest) => normalizeModuleManifest(manifest)),\n\t};\n}\n\n/**\n * A {@link SchemaValidator} that can also export its parameter schema as JSON\n * Schema (for example a Zod 4 schema via `z.toJSONSchema`). Keeps the platform\n * zero-dependency while letting schema-bearing actions flow into manifests.\n */\nexport interface JsonSchemaExportableValidator extends SchemaValidator {\n\ttoJSONSchema(): Record<string, unknown>;\n}\n\nexport function isJsonSchemaExportableValidator(\n\tschema: SchemaValidator,\n): schema is JsonSchemaExportableValidator {\n\treturn (\n\t\ttypeof (schema as Partial<JsonSchemaExportableValidator>).toJSONSchema === \"function\"\n\t);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction exportDependency(dependency: ModuleDependencyInput): ModuleDependency {\n\tconst namespace = getModuleDependencyNamespace(dependency);\n\tif (typeof dependency === \"string\") {\n\t\treturn { namespace };\n\t}\n\tconst normalized: ModuleDependency = { namespace };\n\tif (dependency.version !== undefined) normalized.version = dependency.version;\n\tif (dependency.optional !== undefined) normalized.optional = dependency.optional;\n\treturn normalized;\n}\n\nfunction exportObjectType(\n\tobjectType: NonNullable<FabricModule[\"objectTypes\"]>[number],\n): ModuleManifestObjectType {\n\tif (typeof objectType === \"string\") {\n\t\treturn { type: objectType };\n\t}\n\tconst normalized: ModuleManifestObjectType = { type: getObjectTypeName(objectType) };\n\tif (objectType.displayName !== undefined) normalized.displayName = objectType.displayName;\n\tif (objectType.idPrefix !== undefined) normalized.idPrefix = objectType.idPrefix;\n\tif (objectType.schema !== undefined) normalized.schema = cloneJson(objectType.schema);\n\tif (objectType.semantics !== undefined) normalized.semantics = cloneJson(objectType.semantics);\n\tif (objectType.relations !== undefined) {\n\t\tnormalized.relations = objectType.relations.map((relation) => ({ ...relation }));\n\t}\n\tif (objectType.invariants !== undefined) {\n\t\tnormalized.invariants = objectType.invariants.map((invariant) => ({ ...invariant }));\n\t}\n\treturn normalized;\n}\n\nfunction cloneJson<T>(value: T): T {\n\tif (Array.isArray(value)) return value.map((item) => cloneJson(item)) as T;\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(value as Record<string, unknown>).map(([key, child]) => [key, cloneJson(child)]),\n\t\t) as T;\n\t}\n\treturn value;\n}\n\nfunction exportEventType(\n\teventType: NonNullable<FabricModule[\"eventTypes\"]>[number],\n): ModuleManifestEventType {\n\tif (typeof eventType === \"string\") {\n\t\t// String registrations carry no explicit schema version; the events\n\t\t// registry treats the bare name as the initial version of the type.\n\t\treturn { eventType, schemaVersion: 1 };\n\t}\n\tconst normalized: ModuleManifestEventType = {\n\t\teventType: getEventTypeName(eventType),\n\t\tschemaVersion: eventType.schemaVersion,\n\t};\n\tif (eventType.description !== undefined) normalized.description = eventType.description;\n\tif (eventType.schema !== undefined) normalized.schema = cloneJson(eventType.schema);\n\treturn normalized;\n}\n\nfunction exportAction(action: ActionDefinition): ModuleManifestAction {\n\tconst manifest: ModuleManifestAction = {\n\t\tactionId: action.actionId,\n\t\tversion: action.version,\n\t\tkind: action.kind ?? \"atomic\",\n\t\tidempotent: action.idempotent,\n\t\tmutatesDomain: action.mutatesDomain,\n\t\temitsEvents: [...action.emitsEvents],\n\t};\n\n\tif (action.policies !== undefined) manifest.policies = [...action.policies];\n\tif (action.requiredRoles !== undefined) manifest.requiredRoles = [...action.requiredRoles];\n\tif (action.requiredPermissions !== undefined) {\n\t\tmanifest.requiredPermissions = [...action.requiredPermissions];\n\t}\n\tif (action.eventPhase !== undefined) manifest.eventPhase = action.eventPhase;\n\tif (action.execution !== undefined) manifest.execution = cloneJson(action.execution);\n\n\tif (isJsonSchemaExportableValidator(action.schema)) {\n\t\ttry {\n\t\t\tmanifest.parameterSchema = action.schema.toJSONSchema();\n\t\t\tmanifest.parameterSchemaFormat = \"json-schema\";\n\t\t} catch {\n\t\t\t// Runtime-valid schemas that cannot be represented portably remain executable;\n\t\t\t// build-time consumers see the schema as unavailable rather than crashing export.\n\t\t}\n\t}\n\tif (action.resultSchema && isJsonSchemaExportableValidator(action.resultSchema)) {\n\t\ttry {\n\t\t\tmanifest.resultSchema = action.resultSchema.toJSONSchema();\n\t\t\tmanifest.resultSchemaFormat = \"json-schema\";\n\t\t} catch {\n\t\t\t// See parameter-schema behavior above.\n\t\t}\n\t}\n\n\tif (action.stateMachine !== undefined) {\n\t\tconst binding: ModuleManifestActionStateMachine = {\n\t\t\tentityType: action.stateMachine.entityType,\n\t\t};\n\t\tif (typeof action.stateMachine.targetState === \"string\") {\n\t\t\tbinding.targetState = action.stateMachine.targetState;\n\t\t}\n\t\tmanifest.stateMachine = binding;\n\t}\n\n\tif (action.adapterSteps !== undefined) {\n\t\tmanifest.adapterSteps = action.adapterSteps.map((step) => {\n\t\t\tconst exported: ModuleManifestAdapterStep = {\n\t\t\t\tadapterType: step.adapterType,\n\t\t\t\toperation: step.operation,\n\t\t\t};\n\t\t\tif (step.retryPolicy !== undefined) exported.retryPolicy = { ...step.retryPolicy };\n\t\t\treturn exported;\n\t\t});\n\t}\n\n\treturn manifest;\n}\n\nfunction exportPolicy(policy: unknown): ModuleManifestPolicy | undefined {\n\tif (!isRecord(policy) || typeof policy.policyId !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\t// Code evaluator: identified by its `evaluate` function (never serialized).\n\tif (typeof policy.evaluate === \"function\") {\n\t\tconst exported: ModuleManifestCodePolicy = {\n\t\t\ttype: \"code\",\n\t\t\tpolicyId: policy.policyId,\n\t\t\tversion: typeof policy.version === \"number\" ? policy.version : 1,\n\t\t};\n\t\tif (typeof policy.previewSafe === \"boolean\") exported.previewSafe = policy.previewSafe;\n\t\treturn exported;\n\t}\n\n\t// Declarative runtime policy definition: pure data, serialized as-is.\n\tif (typeof policy.kind === \"string\" && typeof policy.policyVersion === \"number\") {\n\t\tconst exported: ModuleManifestDataPolicy = {\n\t\t\ttype: \"data\",\n\t\t\tpolicyId: policy.policyId,\n\t\t\tpolicyVersion: policy.policyVersion,\n\t\t\tkind: policy.kind as PolicyKind,\n\t\t};\n\t\tif (isRecord(policy.dataDefinition)) {\n\t\t\texported.dataDefinition = policy.dataDefinition as unknown as DataPolicyDefinition;\n\t\t}\n\t\tif (typeof policy.codeEvaluatorPolicyId === \"string\") {\n\t\t\texported.codeEvaluatorPolicyId = policy.codeEvaluatorPolicyId;\n\t\t}\n\t\tif (isRecord(policy.fallback)) {\n\t\t\texported.fallback = policy.fallback as unknown as PolicyFallbackDefinition;\n\t\t}\n\t\treturn exported;\n\t}\n\n\t// Unknown policy shape: omit rather than guess.\n\treturn undefined;\n}\n\nfunction exportStateMachine(machine: unknown): ModuleManifestStateMachine | undefined {\n\tif (\n\t\t!isRecord(machine) ||\n\t\ttypeof machine.entityType !== \"string\" ||\n\t\t!isRecord(machine.states) ||\n\t\t!Array.isArray(machine.transitions)\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst definition = machine as unknown as StateMachineDefinition;\n\treturn {\n\t\tentityType: definition.entityType,\n\t\tstates: Object.values(definition.states),\n\t\ttransitions: definition.transitions.map((transition) => ({\n\t\t\tfrom: transition.from,\n\t\t\tto: transition.to,\n\t\t\tcausedByAction: transition.causedByAction,\n\t\t\thasGuard: typeof transition.guard === \"function\",\n\t\t})),\n\t};\n}\n\nfunction exportView(view: ViewContract): ModuleManifestView {\n\tconst output: ModuleManifestView = {\n\t\tname: view.name,\n\t\tversion: view.version,\n\t\tshape: cloneJson(view.shape),\n\t\tconsumes: view.consumes.map((consumption) => ({\n\t\t\teventType: consumption.eventType,\n\t\t\tschemaVersions: [...consumption.schemaVersions],\n\t\t})),\n\t\tscope: view.scope,\n\t\tsnapshotVersion: view.snapshotVersion,\n\t};\n\tif (view.compatibleSnapshotVersions) output.compatibleSnapshotVersions = [...view.compatibleSnapshotVersions];\n\tif (view.usage) output.usage = cloneJson(view.usage);\n\treturn output;\n}\n\n/**\n * Export a stable, JSON-serializable manifest of a module's ontology.\n *\n * This is a pure function of the module object: it does not read or mutate the\n * global module/action/policy/state-machine registries, and the module does\n * not need to be registered first. Declaration order is preserved everywhere\n * (nothing is sorted), so the same module object always produces a\n * byte-identical `JSON.stringify` result.\n *\n * The manifest contains definitions only — never raw parameter values,\n * secrets, or runtime data. Function fields are elided (`handler`,\n * policy `evaluate`, transition `guard` → `hasGuard`, dynamic `targetState`,\n * adapter `getInput`).\n */\nexport function exportModuleManifest(module: FabricModule<unknown>): ModuleManifest {\n\tconst manifest: ModuleManifest = {\n\t\tmanifestVersion: MODULE_MANIFEST_VERSION,\n\t\tnamespace: module.namespace,\n\t\tdependencies: (module.dependencies ?? []).map(exportDependency),\n\t\tobjectTypes: (module.objectTypes ?? []).map(exportObjectType),\n\t\tsubjectTypes: [...(module.subjectTypes ?? [])],\n\t\tidPrefixes: (module.idPrefixes ?? []).map((registration) => ({\n\t\t\tprefix: registration.prefix,\n\t\t\tname: registration.name,\n\t\t})),\n\t\teventTypes: (module.eventTypes ?? []).map(exportEventType),\n\t\tactions: (module.actions ?? []).map(exportAction),\n\t\tpolicies: (module.policies ?? [])\n\t\t\t.map(exportPolicy)\n\t\t\t.filter((policy): policy is ModuleManifestPolicy => policy !== undefined),\n\t\tstateMachines: (module.stateMachines ?? [])\n\t\t\t.map(exportStateMachine)\n\t\t\t.filter((machine): machine is ModuleManifestStateMachine => machine !== undefined),\n\t\tviews: (module.views ?? []).map(exportView),\n\t};\n\n\tif (module.version !== undefined) manifest.version = module.version;\n\tif (module.displayName !== undefined) manifest.displayName = module.displayName;\n\tif (module.description !== undefined) manifest.description = module.description;\n\tif (module.capability !== undefined) manifest.capability = cloneJson(module.capability);\n\n\treturn manifest;\n}\n\n/**\n * Export manifests for a set of modules, preserving the input order.\n * Like {@link exportModuleManifest}, this is pure and registry-free.\n */\nexport function exportModuleManifestBundle(\n\tmodules: FabricModule<unknown>[],\n): ModuleManifestBundle {\n\treturn {\n\t\tmanifestVersion: MODULE_MANIFEST_VERSION,\n\t\tmodules: modules.map(exportModuleManifest),\n\t};\n}\n"]}
@@ -1,36 +1,36 @@
1
1
  'use strict';
2
2
 
3
- var chunkJAXDEK5Z_cjs = require('../chunk-JAXDEK5Z.cjs');
3
+ var chunk7RV5REPT_cjs = require('../chunk-7RV5REPT.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "createEventTypeRegistry", {
8
8
  enumerable: true,
9
- get: function () { return chunkJAXDEK5Z_cjs.createEventTypeRegistry; }
9
+ get: function () { return chunk7RV5REPT_cjs.createEventTypeRegistry; }
10
10
  });
11
11
  Object.defineProperty(exports, "getRegisteredEventTypes", {
12
12
  enumerable: true,
13
- get: function () { return chunkJAXDEK5Z_cjs.getRegisteredEventTypes; }
13
+ get: function () { return chunk7RV5REPT_cjs.getRegisteredEventTypes; }
14
14
  });
15
15
  Object.defineProperty(exports, "getRegisteredSubjectTypes", {
16
16
  enumerable: true,
17
- get: function () { return chunkJAXDEK5Z_cjs.getRegisteredSubjectTypes; }
17
+ get: function () { return chunk7RV5REPT_cjs.getRegisteredSubjectTypes; }
18
18
  });
19
19
  Object.defineProperty(exports, "isValidEventType", {
20
20
  enumerable: true,
21
- get: function () { return chunkJAXDEK5Z_cjs.isValidEventType; }
21
+ get: function () { return chunk7RV5REPT_cjs.isValidEventType; }
22
22
  });
23
23
  Object.defineProperty(exports, "isValidSubjectType", {
24
24
  enumerable: true,
25
- get: function () { return chunkJAXDEK5Z_cjs.isValidSubjectType; }
25
+ get: function () { return chunk7RV5REPT_cjs.isValidSubjectType; }
26
26
  });
27
27
  Object.defineProperty(exports, "registerEventType", {
28
28
  enumerable: true,
29
- get: function () { return chunkJAXDEK5Z_cjs.registerEventType; }
29
+ get: function () { return chunk7RV5REPT_cjs.registerEventType; }
30
30
  });
31
31
  Object.defineProperty(exports, "registerSubjectType", {
32
32
  enumerable: true,
33
- get: function () { return chunkJAXDEK5Z_cjs.registerSubjectType; }
33
+ get: function () { return chunk7RV5REPT_cjs.registerSubjectType; }
34
34
  });
35
35
  //# sourceMappingURL=index.cjs.map
36
36
  //# sourceMappingURL=index.cjs.map
@@ -15,6 +15,11 @@ interface AssetEventEnvelope<TPayload = unknown> {
15
15
  recordedAt: Date;
16
16
  correlationId: string;
17
17
  causationId?: string;
18
+ provenance?: EventProvenance;
19
+ }
20
+ interface EventProvenance {
21
+ source: "sdui" | "api" | "agent" | "worker" | "system";
22
+ auditAttributes?: Record<string, string>;
18
23
  }
19
24
  type AssetEventSubjectType = string;
20
25
  type AssetEventType = string;
@@ -32,4 +37,4 @@ interface EventTypeRegistry {
32
37
  }
33
38
  declare function createEventTypeRegistry(initialEventTypes?: string[]): EventTypeRegistry;
34
39
 
35
- export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventTypeRegistry, createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType };
40
+ export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventProvenance, type EventTypeRegistry, createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType };
@@ -15,6 +15,11 @@ interface AssetEventEnvelope<TPayload = unknown> {
15
15
  recordedAt: Date;
16
16
  correlationId: string;
17
17
  causationId?: string;
18
+ provenance?: EventProvenance;
19
+ }
20
+ interface EventProvenance {
21
+ source: "sdui" | "api" | "agent" | "worker" | "system";
22
+ auditAttributes?: Record<string, string>;
18
23
  }
19
24
  type AssetEventSubjectType = string;
20
25
  type AssetEventType = string;
@@ -32,4 +37,4 @@ interface EventTypeRegistry {
32
37
  }
33
38
  declare function createEventTypeRegistry(initialEventTypes?: string[]): EventTypeRegistry;
34
39
 
35
- export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventTypeRegistry, createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType };
40
+ export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventProvenance, type EventTypeRegistry, createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType };
@@ -1,3 +1,3 @@
1
- export { createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType } from '../chunk-4YQOGV7H.js';
1
+ export { createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType } from '../chunk-3O4GMCCE.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map