@fayz-ai/core 0.9.0 → 0.10.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 (170) hide show
  1. package/README.md +2 -2
  2. package/dist/access/index.js.map +1 -1
  3. package/dist/{chunk-L4TLMYGC.js → chunk-6RBW2Y5K.js} +3 -3
  4. package/dist/chunk-6RBW2Y5K.js.map +1 -0
  5. package/dist/chunk-732GZEUI.js +1592 -0
  6. package/dist/chunk-732GZEUI.js.map +1 -0
  7. package/dist/{chunk-X5THHG6T.js → chunk-CPMHCTX3.js} +3 -3
  8. package/dist/chunk-CPMHCTX3.js.map +1 -0
  9. package/dist/{chunk-V2MSAUHO.js → chunk-JO7Z2AOE.js} +2 -2
  10. package/dist/chunk-JO7Z2AOE.js.map +1 -0
  11. package/dist/{chunk-5RJVUC6J.js → chunk-M27JPX3K.js} +12 -3
  12. package/dist/chunk-M27JPX3K.js.map +1 -0
  13. package/dist/chunk-OXQGRJZT.js +125 -0
  14. package/dist/chunk-OXQGRJZT.js.map +1 -0
  15. package/dist/data/backend-env.d.ts +38 -0
  16. package/dist/data/backend-env.d.ts.map +1 -0
  17. package/dist/data/index.js +1 -1
  18. package/dist/entity/events.d.ts +14 -0
  19. package/dist/entity/events.d.ts.map +1 -0
  20. package/dist/events/envelope.d.ts +31 -0
  21. package/dist/events/envelope.d.ts.map +1 -0
  22. package/dist/events/index.d.ts +4 -0
  23. package/dist/events/index.d.ts.map +1 -1
  24. package/dist/events/log.d.ts +44 -0
  25. package/dist/events/log.d.ts.map +1 -0
  26. package/dist/events/types.d.ts +40 -0
  27. package/dist/events/types.d.ts.map +1 -0
  28. package/dist/i18n/index.d.ts +10 -0
  29. package/dist/i18n/index.d.ts.map +1 -1
  30. package/dist/i18n/index.js +1 -1
  31. package/dist/index.d.ts +27 -17
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +388 -52
  34. package/dist/index.js.map +1 -1
  35. package/dist/integrations/index.js +1 -1
  36. package/dist/{integrations/index.d.ts → integrations.d.ts} +2 -2
  37. package/dist/integrations.d.ts.map +1 -0
  38. package/dist/{address/index.d.ts → lib/address.d.ts} +1 -1
  39. package/dist/{address/index.d.ts.map → lib/address.d.ts.map} +1 -1
  40. package/dist/{phone/index.d.ts → lib/phone.d.ts} +1 -1
  41. package/dist/lib/phone.d.ts.map +1 -0
  42. package/dist/{seo/index.d.ts → lib/seo.d.ts} +18 -1
  43. package/dist/lib/seo.d.ts.map +1 -0
  44. package/dist/{tenant/index.d.ts → lib/tenant.d.ts} +1 -1
  45. package/dist/lib/tenant.d.ts.map +1 -0
  46. package/dist/manifest/index.d.ts +1 -1
  47. package/dist/manifest/index.d.ts.map +1 -1
  48. package/dist/messaging/index.d.ts +3 -0
  49. package/dist/messaging/index.d.ts.map +1 -0
  50. package/dist/messaging/registry.d.ts +35 -0
  51. package/dist/messaging/registry.d.ts.map +1 -0
  52. package/dist/messaging/types.d.ts +67 -0
  53. package/dist/messaging/types.d.ts.map +1 -0
  54. package/dist/plugin/index.js +2 -1
  55. package/dist/plugin/runtime.d.ts +17 -0
  56. package/dist/plugin/runtime.d.ts.map +1 -1
  57. package/dist/registry/block-catalog.d.ts +78 -0
  58. package/dist/registry/block-catalog.d.ts.map +1 -0
  59. package/dist/registry/block-constraints.d.ts +64 -0
  60. package/dist/registry/block-constraints.d.ts.map +1 -0
  61. package/dist/registry/block-schema.d.ts +69 -0
  62. package/dist/registry/block-schema.d.ts.map +1 -0
  63. package/dist/registry/blocks.d.ts +84 -0
  64. package/dist/registry/blocks.d.ts.map +1 -0
  65. package/dist/registry/entities.d.ts +153 -0
  66. package/dist/registry/entities.d.ts.map +1 -0
  67. package/dist/registry/extension-points.d.ts +117 -0
  68. package/dist/registry/extension-points.d.ts.map +1 -0
  69. package/dist/registry/handles.d.ts +41 -0
  70. package/dist/registry/handles.d.ts.map +1 -0
  71. package/dist/registry/index.d.ts +41 -41
  72. package/dist/registry/index.d.ts.map +1 -1
  73. package/dist/registry/loaders.d.ts +55 -0
  74. package/dist/registry/loaders.d.ts.map +1 -0
  75. package/dist/registry/registry-class.d.ts +157 -0
  76. package/dist/registry/registry-class.d.ts.map +1 -0
  77. package/dist/registry/schema-check.d.ts +14 -0
  78. package/dist/registry/schema-check.d.ts.map +1 -0
  79. package/dist/router/index.d.ts +78 -1
  80. package/dist/router/index.d.ts.map +1 -1
  81. package/dist/router/index.js +1 -1
  82. package/dist/testing/index.js +1 -1
  83. package/dist/{testing/index.d.ts → testing.d.ts} +3 -3
  84. package/dist/testing.d.ts.map +1 -0
  85. package/dist/types/analytics.d.ts +196 -0
  86. package/dist/types/analytics.d.ts.map +1 -0
  87. package/dist/types/crud.d.ts +22 -2
  88. package/dist/types/crud.d.ts.map +1 -1
  89. package/dist/types/plugins.d.ts +55 -1
  90. package/dist/types/plugins.d.ts.map +1 -1
  91. package/package.json +6 -18
  92. package/dist/blocks/index.d.ts +0 -25
  93. package/dist/blocks/index.d.ts.map +0 -1
  94. package/dist/chunk-5RJVUC6J.js.map +0 -1
  95. package/dist/chunk-L4TLMYGC.js.map +0 -1
  96. package/dist/chunk-V2MSAUHO.js.map +0 -1
  97. package/dist/chunk-X5THHG6T.js.map +0 -1
  98. package/dist/chunk-Y2C2FBQP.js +0 -35
  99. package/dist/chunk-Y2C2FBQP.js.map +0 -1
  100. package/dist/chunk-YH25Y4FW.js +0 -311
  101. package/dist/chunk-YH25Y4FW.js.map +0 -1
  102. package/dist/integrations/index.d.ts.map +0 -1
  103. package/dist/phone/index.d.ts.map +0 -1
  104. package/dist/seo/index.d.ts.map +0 -1
  105. package/dist/tenant/index.d.ts.map +0 -1
  106. package/dist/testing/index.d.ts.map +0 -1
  107. package/src/access/denial.ts +0 -33
  108. package/src/access/engine.test.ts +0 -48
  109. package/src/access/engine.ts +0 -136
  110. package/src/access/index.ts +0 -14
  111. package/src/access/limits.ts +0 -18
  112. package/src/address/index.ts +0 -188
  113. package/src/app/render.tsx +0 -69
  114. package/src/blocks/index.tsx +0 -68
  115. package/src/data/archetype.ts +0 -255
  116. package/src/data/bulk.ts +0 -35
  117. package/src/data/cached.ts +0 -55
  118. package/src/data/count.test.ts +0 -152
  119. package/src/data/count.ts +0 -131
  120. package/src/data/filters.test.ts +0 -70
  121. package/src/data/filters.ts +0 -90
  122. package/src/data/index.ts +0 -11
  123. package/src/data/mock.ts +0 -90
  124. package/src/data/platform-api.ts +0 -209
  125. package/src/data/refresh.ts +0 -115
  126. package/src/data/resolve.ts +0 -126
  127. package/src/data/supabase.ts +0 -230
  128. package/src/data/types.ts +0 -50
  129. package/src/entity/index.ts +0 -2
  130. package/src/entity/registry.ts +0 -49
  131. package/src/events/index.tsx +0 -82
  132. package/src/i18n/index.ts +0 -476
  133. package/src/i18n/shell-translations.en.ts +0 -875
  134. package/src/i18n/shell-translations.pt-br.ts +0 -873
  135. package/src/index.ts +0 -217
  136. package/src/integrations/index.ts +0 -237
  137. package/src/lib/cache.ts +0 -118
  138. package/src/lib/csv.ts +0 -54
  139. package/src/lib/format.ts +0 -58
  140. package/src/manifest/app-manifest.schema.json +0 -676
  141. package/src/manifest/index.ts +0 -518
  142. package/src/manifest/serialize.ts +0 -52
  143. package/src/phone/index.ts +0 -85
  144. package/src/plugin/createSafeDataProvider.ts +0 -30
  145. package/src/plugin/index.ts +0 -1
  146. package/src/plugin/runtime.ts +0 -331
  147. package/src/registry/index.ts +0 -163
  148. package/src/router/history.ts +0 -86
  149. package/src/router/index.ts +0 -29
  150. package/src/runtime/index.ts +0 -15
  151. package/src/runtime/oauth.ts +0 -219
  152. package/src/search/engine.ts +0 -559
  153. package/src/search/index.ts +0 -25
  154. package/src/search/text.ts +0 -206
  155. package/src/search/types.ts +0 -75
  156. package/src/seo/index.ts +0 -128
  157. package/src/tenant/index.ts +0 -38
  158. package/src/testing/index.ts +0 -116
  159. package/src/types/auth.ts +0 -41
  160. package/src/types/billing.ts +0 -39
  161. package/src/types/crud.ts +0 -184
  162. package/src/types/entities.ts +0 -142
  163. package/src/types/entitlements.ts +0 -45
  164. package/src/types/i18n.ts +0 -7
  165. package/src/types/index.ts +0 -11
  166. package/src/types/org.ts +0 -137
  167. package/src/types/payment.ts +0 -44
  168. package/src/types/permissions.ts +0 -32
  169. package/src/types/plugins.ts +0 -480
  170. package/src/types/theme.ts +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/registry/blocks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAW7C,MAAM,WAAW,SAAS;IACxB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED;wDACwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CAAA;AAID,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAA;AAoBvD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAErF;AAoBD,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEzD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,oBAAoB,CAAA;AACrD,eAAO,MAAM,oBAAoB,yBAAyB,CAAA;AAS1D,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAE9D;AAiCD,UAAU,uBAAuB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IACvG,KAAK,EAAE,uBAAuB,CAAkB;IAEhD,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,uBAAuB;IAItE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAI5D,MAAM,IAAI,KAAK,CAAC,SAAS;CAQ1B;AAiBD,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkD3G;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAmBnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAI7E"}
@@ -0,0 +1,153 @@
1
+ import { Registry } from './registry-class';
2
+ import type { JsonSchema, RegistryEntryDescriptor, RegistrySource } from './registry-class';
3
+ import type { FieldDef } from '../types/crud';
4
+ /** The field-type vocabulary an entity may declare. */
5
+ export type EntityFieldType = 'text' | 'richtext' | 'number' | 'boolean' | 'json' | 'image' | 'url' | 'ref' | 'point' | 'datetime';
6
+ /** The vocabulary as a runtime value, for catalogs and I2 error messages.
7
+ * `satisfies` + exhaustiveness keep the union and the list from drifting. */
8
+ export declare const ENTITY_FIELD_TYPES: readonly ["text", "richtext", "number", "boolean", "json", "image", "url", "ref", "point", "datetime"];
9
+ export interface EntityField {
10
+ type: EntityFieldType;
11
+ /** Human label — drives the admin form and the agent's understanding. */
12
+ label?: string;
13
+ help?: string;
14
+ required?: boolean;
15
+ default?: unknown;
16
+ /** `ref` only: the entity key this field points to (stores that entity's record id). */
17
+ entity?: string;
18
+ }
19
+ export type EntityReadAccess = 'public' | 'staff';
20
+ /**
21
+ * Who reads and who writes. `write` is 'staff' only on purpose: shopper-writable
22
+ * entities (reviews) need the action/rate-limit layer (M7), not an RLS grant.
23
+ */
24
+ export interface EntityAccess {
25
+ read: EntityReadAccess;
26
+ write: 'staff';
27
+ }
28
+ /** Where records live. Generic jsonb storage first (I5); promoting a hot entity
29
+ * to typed columns changes THIS value, and nothing else callers see. */
30
+ export interface EntityStorageDescriptor {
31
+ mode: 'generic' | 'dedicated';
32
+ /** Physical table. 'generic' mode shares it across entities. */
33
+ table: string;
34
+ }
35
+ export interface EntityDeclarationInput {
36
+ /** Human title (singular). Defaults to the key. */
37
+ title?: string;
38
+ description?: string;
39
+ fields: Record<string, EntityField>;
40
+ /** Only 'tenant' exists today: every record belongs to one store. */
41
+ scope?: 'tenant';
42
+ /** Default: staff-only both ways — public exposure is opt-in, never implied. */
43
+ access?: Partial<EntityAccess>;
44
+ /** Field-name tuples to index for querying/filtering. */
45
+ indexes?: readonly (readonly string[])[];
46
+ /** Field whose value titles a record in lists. Default: first text field. */
47
+ titleField?: string;
48
+ /** Fields blocks display by default (entityList). Default: every non-json field. */
49
+ displayFields?: readonly string[];
50
+ }
51
+ export interface EntityDeclaration {
52
+ key: string;
53
+ title: string;
54
+ description?: string;
55
+ fields: Record<string, EntityField>;
56
+ scope: 'tenant';
57
+ access: EntityAccess;
58
+ indexes: readonly (readonly string[])[];
59
+ titleField?: string;
60
+ displayFields: readonly string[];
61
+ storage: EntityStorageDescriptor;
62
+ }
63
+ /** The shared jsonb records table (see @fayz-ai/shop migrations 0030). */
64
+ export declare const GENERIC_ENTITY_TABLE = "plg_entity_records";
65
+ /** Structural record columns a declared field must not shadow. */
66
+ export declare const RESERVED_ENTITY_FIELDS: readonly ["id", "slug", "entity", "tenant_id", "created_at", "updated_at"];
67
+ export declare const entityDeclarationRegistry: Registry<EntityDeclaration>;
68
+ /**
69
+ * Declare an entity. One call → registry entry on the uniform meta envelope,
70
+ * with the record JSON Schema as `propsSchema` — the same emission discipline
71
+ * as `defineBlock` (I1), so every catalog consumer reads entities and blocks
72
+ * with one parser.
73
+ */
74
+ export declare function defineEntity(key: string, input: EntityDeclarationInput, meta?: {
75
+ source?: RegistrySource;
76
+ pluginId?: string;
77
+ since?: string;
78
+ }): EntityDeclaration;
79
+ /** Resolve a declaration or throw naming the valid set — the I2 contract. */
80
+ export declare function resolveEntityDeclaration(key: string): EntityDeclaration;
81
+ export declare function hasEntityDeclaration(key: string): boolean;
82
+ /** All declared entity keys, sorted. */
83
+ export declare function listEntityDeclarations(): string[];
84
+ /** Test seam — a suite that declares entities must not leak into the next. */
85
+ export declare function clearEntityDeclarations(): void;
86
+ /**
87
+ * The JSON Schema one record's `data` is validated against — on write, in the
88
+ * admin form, and as the agent's generation contract. `additionalProperties:
89
+ * false` is the schema-level I2: a field the declaration does not know is an
90
+ * error, not silently-unfilterable baggage (the Medusa `metadata` disease).
91
+ */
92
+ export declare function entityRecordSchema(declaration: Pick<EntityDeclaration, 'fields' | 'title' | 'description'>): JsonSchema;
93
+ export interface EntityRecordIssue {
94
+ /** Dotted path into the record data ('hours', 'geo.lat'). */
95
+ path: string;
96
+ code: 'unknown-field' | 'missing-field' | 'invalid-value';
97
+ message: string;
98
+ /** The valid set, on unknown-id errors — what the agent corrects on. */
99
+ valid?: string[];
100
+ }
101
+ /**
102
+ * Validate one record's `data` against a declaration — the write gate every
103
+ * EntityStore implementation runs. Pure and total: returns issues, never throws.
104
+ */
105
+ export declare function validateEntityRecordData(declaration: Pick<EntityDeclaration, 'fields'>, data: unknown): EntityRecordIssue[];
106
+ /** The uniform envelope plus the entity-specific fields the agent reads. */
107
+ export interface EntityDescriptor extends RegistryEntryDescriptor {
108
+ /** JSON Schema for a record's data (alias of `schema`, named for intent). */
109
+ recordSchema?: JsonSchema;
110
+ access: EntityAccess;
111
+ scope: 'tenant';
112
+ storage: EntityStorageDescriptor;
113
+ indexes: readonly (readonly string[])[];
114
+ titleField?: string;
115
+ displayFields: readonly string[];
116
+ }
117
+ /** Every declared entity reduced to its descriptor, sorted by key — what
118
+ * describeStore publishes and the agent generates against. */
119
+ export declare function describeEntities(): EntityDescriptor[];
120
+ export interface EntityAdminForm {
121
+ entity: string;
122
+ title: string;
123
+ fields: FieldDef[];
124
+ }
125
+ /**
126
+ * The admin CRUD form for an entity, emitted from the declaration as data.
127
+ * Field order is declaration order; labels default to the field name; `ref`
128
+ * fields become relation pickers over the generic records table filtered to
129
+ * the target entity.
130
+ */
131
+ export declare function entityAdminForm(declaration: EntityDeclaration): EntityAdminForm;
132
+ /** Core record kinds that accept sidecar fields. */
133
+ export declare const SIDECAR_REFERENCES: readonly ["product", "category"];
134
+ export type SidecarReference = (typeof SIDECAR_REFERENCES)[number];
135
+ export interface SidecarDeclaration {
136
+ reference: SidecarReference;
137
+ fields: Record<string, EntityField>;
138
+ }
139
+ export declare const sidecarDeclarationRegistry: Registry<SidecarDeclaration>;
140
+ /**
141
+ * Declare custom fields on a core record kind. One declaration per reference
142
+ * (re-declaring replaces — registry semantics, so an app's registry.tsx wins).
143
+ */
144
+ export declare function defineSidecarFields(reference: SidecarReference, fields: Record<string, EntityField>, meta?: {
145
+ source?: RegistrySource;
146
+ pluginId?: string;
147
+ }): SidecarDeclaration;
148
+ /** Resolve a sidecar declaration or throw naming the valid set (I2). */
149
+ export declare function resolveSidecarDeclaration(reference: string): SidecarDeclaration;
150
+ export declare function hasSidecarDeclaration(reference: string): boolean;
151
+ /** Test seam. */
152
+ export declare function clearSidecarDeclarations(): void;
153
+ //# sourceMappingURL=entities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/registry/entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { Registry } from './registry-class';
2
+ import type { JsonSchema, RegistryEntryDescriptor, RegistrySource } from './registry-class';
3
+ export type ExtensionPointMode = 'many' | 'escape';
4
+ export interface ExtensionPointDeclaration {
5
+ /** Namespaced id: `namespace.point` (e.g. 'cart.lineAnnotation'). */
6
+ id: string;
7
+ description: string;
8
+ /** JSON Schema every invocation's input is checked against. */
9
+ input: JsonSchema;
10
+ /** JSON Schema every handler's (non-null) return is checked against. */
11
+ output: JsonSchema;
12
+ /**
13
+ * 'many' (default): any number of handlers, dependency-ordered, outputs
14
+ * collected. 'escape': at most ONE handler, `Output | null` return, non-null
15
+ * short-circuits the caller's default path (I4).
16
+ */
17
+ mode?: ExtensionPointMode;
18
+ source?: RegistrySource;
19
+ since?: string;
20
+ }
21
+ export interface ExtensionHandlerOptions {
22
+ /** Handler ids that must run before this one (dependency ordering, I3). */
23
+ after?: readonly string[];
24
+ description?: string;
25
+ source?: RegistrySource;
26
+ pluginId?: string;
27
+ }
28
+ export type ExtensionHandler<I = unknown, O = unknown> = (input: I) => O | Promise<O>;
29
+ export declare const extensionPointRegistry: Registry<ExtensionPointDeclaration>;
30
+ /**
31
+ * Declare an extension point. Idempotent per id (a re-declaration replaces the
32
+ * spec but keeps registered handlers), so HMR and repeated register-all calls
33
+ * are safe. The id must be namespaced `namespace.point` — two generated
34
+ * extensions can then never collide on a bare name (I3).
35
+ */
36
+ export declare function defineExtensionPoint(declaration: ExtensionPointDeclaration): void;
37
+ /**
38
+ * Register a handler at a point. Unknown point → hard error naming the valid
39
+ * set (I2). On an escape-valve point, a SECOND registration is a hard error
40
+ * naming who already holds it — the valve stays a valve, never a graph.
41
+ * Re-registering the SAME handler id replaces it (HMR safety), on any mode.
42
+ */
43
+ export declare function registerExtensionHandler<I = unknown, O = unknown>(pointId: string, handlerId: string, handler: ExtensionHandler<I, O>, options?: ExtensionHandlerOptions): void;
44
+ /** Remove one handler (test seams, HMR teardown). Unknown ids are a no-op. */
45
+ export declare function unregisterExtensionHandler(pointId: string, handlerId: string): void;
46
+ /**
47
+ * One collected result of a many-handler run: which handler said it, and what
48
+ * it said (already output-schema-checked).
49
+ */
50
+ export interface ExtensionContribution<O = unknown> {
51
+ handlerId: string;
52
+ value: O;
53
+ }
54
+ /**
55
+ * Run a many-handler extension point: input checked once against the input
56
+ * schema, each handler's return checked against the output schema, results
57
+ * collected in dependency order. A handler returning `undefined`/`null`
58
+ * contributes nothing (that is how a handler declines) — anything else must
59
+ * satisfy the output schema.
60
+ *
61
+ * Failure semantics (M2): in dev every violation throws; in production a bad
62
+ * input logs and yields [] (the point is isolated), a bad output or a throwing
63
+ * handler logs and drops THAT handler's contribution only.
64
+ */
65
+ export declare function runExtensionPoint<I = unknown, O = unknown>(pointId: string, input: I): Promise<ExtensionContribution<O>[]>;
66
+ /**
67
+ * Run an escape valve (I4): `Output | null`. Null (or no registrant) means
68
+ * "take the default path"; a non-null return is schema-checked and returned
69
+ * for the caller to short-circuit with. In production a schema-invalid return
70
+ * or a throw logs and behaves as null — a broken escape must degrade to the
71
+ * default order path, never to a broken checkout.
72
+ */
73
+ export declare function runEscapeValve<I = unknown, O = unknown>(pointId: string, input: I): Promise<O | null>;
74
+ export interface ExtensionHandlerDescriptor {
75
+ id: string;
76
+ after: readonly string[];
77
+ description?: string;
78
+ source?: RegistrySource;
79
+ pluginId?: string;
80
+ }
81
+ export interface ExtensionPointDescriptor extends RegistryEntryDescriptor {
82
+ mode: ExtensionPointMode;
83
+ /** JSON Schema for the invocation input. */
84
+ inputSchema: JsonSchema;
85
+ /** JSON Schema for a handler's (non-null) return. */
86
+ outputSchema: JsonSchema;
87
+ /** Registered handlers, in registration order with their dependencies. */
88
+ handlers: ExtensionHandlerDescriptor[];
89
+ }
90
+ /** Every declared point with its schemas AND its registered handlers, sorted
91
+ * by id — the enumerable surface an agent (and `fayz catalog`) reads. */
92
+ export declare function describeExtensionPoints(): ExtensionPointDescriptor[];
93
+ export declare function hasExtensionPoint(pointId: string): boolean;
94
+ export declare function listExtensionPoints(): string[];
95
+ /** Registered handler ids at a point, in registration order. Unknown point →
96
+ * the same I2 hard error as every other lookup. */
97
+ export declare function listExtensionHandlers(pointId: string): string[];
98
+ /** Test seam — clears declarations AND handlers. */
99
+ export declare function clearExtensionPoints(): void;
100
+ /**
101
+ * Build a `withAfterHooks` handler map whose hooks run an extension point.
102
+ *
103
+ * `withAfterHooks(provider, handlers)` (core/integrations, the CONNECTORS.md
104
+ * outbound-sync seam) stays THE mechanism for post-write hooks — fire-and-
105
+ * forget, failures never break the app call. What it lacked was schema
106
+ * enforcement and enumerability; this bridge adds both by making the hook body
107
+ * a `runExtensionPoint` invocation: the point declares the input shape
108
+ * (`{ method, args, result }`), registered handlers are dependency-ordered and
109
+ * output-checked, and describeExtensionPoints lists them. One mechanism, now
110
+ * introspectable — not a competing one.
111
+ *
112
+ * Usage:
113
+ * defineExtensionPoint({ id: 'shop.afterWrite', input: AFTER_WRITE_INPUT, … })
114
+ * const provider = withAfterHooks(base, extensionAfterHooks('shop.afterWrite', ['placeOrder']))
115
+ */
116
+ export declare function extensionAfterHooks<T extends object>(pointId: string, methods: readonly (keyof T & string)[]): Partial<Record<keyof T, (args: unknown[], result: unknown) => Promise<void>>>;
117
+ //# sourceMappingURL=extension-points.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-points.d.ts","sourceRoot":"","sources":["../../src/registry/extension-points.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Registry } from './registry-class';
2
+ import type { RegistryMeta } from './registry-class';
3
+ export declare const handleRegistry: Registry<unknown>;
4
+ export interface RegisterHandleOptions {
5
+ /**
6
+ * Allow re-registering the name with a different value. Off by default:
7
+ * two modules silently fighting over one name is exactly the collision the
8
+ * namespace exists to prevent, so it throws unless the caller states the
9
+ * replacement is deliberate (config re-evaluation, HMR, tests).
10
+ */
11
+ replace?: boolean;
12
+ }
13
+ /**
14
+ * Register named code under a namespaced handle.
15
+ *
16
+ * Re-registering the SAME value under the same name is a no-op (idempotent, so
17
+ * a module evaluated twice does not fail). Re-registering a DIFFERENT value
18
+ * throws unless `replace: true` — see {@link RegisterHandleOptions}.
19
+ */
20
+ export declare function registerHandle<T>(name: string, value: T, meta?: RegistryMeta, options?: RegisterHandleOptions): void;
21
+ /** The value behind a handle, or undefined. Prefer {@link resolveHandle} in
22
+ * hydration paths — an unknown handle there must be a hard error (I2). */
23
+ export declare function getHandle<T = unknown>(name: string): T | undefined;
24
+ export declare function hasHandle(name: string): boolean;
25
+ /**
26
+ * Resolve a handle or throw naming the valid set — the I2 contract. This is
27
+ * the only lookup a document hydrator may use: an unknown handle silently
28
+ * dropped would render a store that LOOKS restored and is missing code.
29
+ */
30
+ export declare function resolveHandle<T = unknown>(name: string): T;
31
+ /** All registered handle names, sorted. */
32
+ export declare function listHandles(): string[];
33
+ /**
34
+ * Reverse lookup: the name a value was registered under, if any. Used by
35
+ * `exportStore` to serialize a code-valued config field as its handle name —
36
+ * which only works because handles hold the value by reference, not a copy.
37
+ */
38
+ export declare function handleNameFor(value: unknown): string | undefined;
39
+ /** Test helper — a suite that registers handles must not leak into the next. */
40
+ export declare function clearHandles(): void;
41
+ //# sourceMappingURL=handles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/registry/handles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAqBpD,eAAO,MAAM,cAAc,mBAAkC,CAAA;AAE7D,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AASD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,EACR,IAAI,GAAE,YAAiB,EACvB,OAAO,GAAE,qBAA0B,GAClC,IAAI,CAqBN;AAED;2EAC2E;AAC3E,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAElE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAK1D;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKhE;AAED,gFAAgF;AAChF,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -1,40 +1,27 @@
1
1
  import type { ComponentType } from 'react';
2
- /** A JSON Schema object (loosely typed; validated by tooling, not at runtime). */
3
- export type JsonSchema = Record<string, unknown>;
4
- export type RegistrySource = 'sdk' | 'plugin' | 'app';
5
- export interface RegistryMeta {
6
- /** Human label for the platform editor. */
7
- label?: string;
8
- description?: string;
9
- /** Where this artifact came from (for introspection / conflict reporting). */
10
- source?: RegistrySource;
11
- /** Owning plugin id, when source is 'plugin'. */
12
- pluginId?: string;
13
- /** JSON Schema for this artifact's props/config drives the visual editor
14
- * and constrains AI generation. Optional but strongly encouraged. */
15
- propsSchema?: JsonSchema;
16
- }
17
- export interface RegistryEntry<T> {
18
- id: string;
19
- value: T;
20
- meta: RegistryMeta;
21
- }
22
- /** A typed, introspectable id→value map. Last registration wins (so an app's
23
- * registry.tsx can override an SDK artifact by re-registering its id). */
24
- export declare class Registry<T> {
25
- readonly kind: string;
26
- private readonly entries;
27
- constructor(kind: string);
28
- register(id: string, value: T, meta?: RegistryMeta): void;
29
- get(id: string): T | undefined;
30
- getEntry(id: string): RegistryEntry<T> | undefined;
31
- has(id: string): boolean;
32
- list(): RegistryEntry<T>[];
33
- ids(): string[];
34
- clear(): void;
35
- }
36
- /** True for app-local custom artifacts (`custom:*`). */
37
- export declare function isCustomId(id: string): boolean;
2
+ import { settingsToJsonSchema } from './block-schema';
3
+ import { Registry } from './registry-class';
4
+ import type { RegistryMeta } from './registry-class';
5
+ export { Registry, isCustomId } from './registry-class';
6
+ export type { JsonSchema, RegistrySource, RegistryMeta, RegistryEntry, RegistryEntryDescriptor, LoaderParamRef, LoaderPropRef, BlockDataNeed, BlockDataNeeds, } from './registry-class';
7
+ export { settingsToJsonSchema };
8
+ export { defaultPropsFromSettings, BLOCK_SETTING_TYPES } from './block-schema';
9
+ export { handleRegistry, registerHandle, getHandle, hasHandle, resolveHandle, listHandles, handleNameFor, clearHandles, } from './handles';
10
+ export type { RegisterHandleOptions } from './handles';
11
+ export { loaderRegistry, defineLoader, resolveLoader, hasLoader, listLoaders, clearLoaders, describeLoaders, isLoaderParamRef, isLoaderPropRef, dataNeedKey, } from './loaders';
12
+ export type { LoaderContext, LoaderImpl, LoaderDescriptor } from './loaders';
13
+ export { ENTITY_FIELD_TYPES, GENERIC_ENTITY_TABLE, RESERVED_ENTITY_FIELDS, SIDECAR_REFERENCES, entityDeclarationRegistry, defineEntity, resolveEntityDeclaration, hasEntityDeclaration, listEntityDeclarations, clearEntityDeclarations, entityRecordSchema, validateEntityRecordData, describeEntities, entityAdminForm, sidecarDeclarationRegistry, defineSidecarFields, resolveSidecarDeclaration, hasSidecarDeclaration, clearSidecarDeclarations, } from './entities';
14
+ export type { EntityFieldType, EntityField, EntityReadAccess, EntityAccess, EntityStorageDescriptor, EntityDeclarationInput, EntityDeclaration, EntityRecordIssue, EntityDescriptor, EntityAdminForm as EntityAdminFormDescriptor, SidecarReference, SidecarDeclaration, } from './entities';
15
+ export type { BlockSetting, BlockSettingType, BlockSettingOption, BlockPreset, BlockStability, } from './block-schema';
16
+ export { describeBlock, describeBlocks, isBlockEnabledOn, auditBlocks, summarizeBlockAudit, } from './block-catalog';
17
+ export type { BlockDescriptor, BlockCatalogOptions, BlockAudit, BlockAuditLevel, } from './block-catalog';
18
+ export type { RequiredBlockChild } from './registry-class';
19
+ export { checkBlockConstraints, checkNodePlacement, checkBlockContext, repairBlockTree, } from './block-constraints';
20
+ export type { BlockTreeNode, BlockConstraintRule, BlockConstraintViolation, BlockContextFinding, BlockTreeRepair, RepairBlockTreeResult, } from './block-constraints';
21
+ export { checkAgainstSchema, formatSchemaIssues } from './schema-check';
22
+ export type { SchemaIssue } from './schema-check';
23
+ export { extensionPointRegistry, defineExtensionPoint, registerExtensionHandler, unregisterExtensionHandler, runExtensionPoint, runEscapeValve, describeExtensionPoints, hasExtensionPoint, listExtensionPoints, listExtensionHandlers, clearExtensionPoints, extensionAfterHooks, } from './extension-points';
24
+ export type { ExtensionPointMode, ExtensionPointDeclaration, ExtensionHandlerOptions, ExtensionHandler, ExtensionContribution, ExtensionHandlerDescriptor, ExtensionPointDescriptor, } from './extension-points';
38
25
  export type MetricFormat = 'number' | 'currency' | 'percent' | 'duration' | 'rating';
39
26
  export interface MetricContext {
40
27
  tenantId?: string;
@@ -68,21 +55,34 @@ export declare const registerComponent: (id: string, c: AnyComponent, meta?: Reg
68
55
  export declare const getComponent: (id: string) => AnyComponent | undefined;
69
56
  export declare const registerBlock: (id: string, c: AnyComponent, meta?: RegistryMeta) => void;
70
57
  export declare const getBlock: (id: string) => AnyComponent | undefined;
71
- export declare const listBlocks: () => RegistryEntry<AnyComponent>[];
58
+ export declare const listBlocks: () => import("./registry-class").RegistryEntry<AnyComponent>[];
59
+ export declare const getBlockMeta: (id: string) => RegistryMeta | undefined;
60
+ /**
61
+ * Register a block together with the schema that describes its props.
62
+ *
63
+ * The only thing this adds over {@link registerBlock} is compiling `settings`
64
+ * into `propsSchema` at registration, so the authored declaration and the
65
+ * machine contract cannot drift apart — which is exactly what happens whenever
66
+ * both are maintained by hand.
67
+ *
68
+ * Use this for any block a merchant, an editor or an agent is expected to
69
+ * configure. `registerBlock` stays for blocks that take no props, and for
70
+ * app-local code that has not been schematized yet.
71
+ */
72
+ export declare const defineBlock: (id: string, component: AnyComponent, meta?: Omit<RegistryMeta, "propsSchema">) => void;
72
73
  export declare const registerPage: (id: string, c: AnyComponent, meta?: RegistryMeta) => void;
73
74
  export declare const getPage: (id: string) => AnyComponent | undefined;
74
75
  export declare const registerScaffold: (id: string, c: AnyComponent, meta?: RegistryMeta) => void;
75
76
  export declare const getScaffold: (id: string) => AnyComponent | undefined;
76
77
  export declare const registerMetric: (def: MetricDefinition, meta?: RegistryMeta) => void;
77
78
  export declare const getMetric: (id: string) => MetricDefinition | undefined;
78
- export declare const listMetrics: () => RegistryEntry<MetricDefinition>[];
79
+ export declare const listMetrics: () => import("./registry-class").RegistryEntry<MetricDefinition>[];
79
80
  export declare const registerPlugin: (id: string, manifest: any, meta?: RegistryMeta) => void;
80
81
  export declare const getPlugin: (id: string) => any;
81
- export declare const listPlugins: () => RegistryEntry<any>[];
82
+ export declare const listPlugins: () => import("./registry-class").RegistryEntry<any>[];
82
83
  export type PluginFactory = (config?: Record<string, unknown>) => any;
83
84
  export declare const pluginFactoryRegistry: Registry<PluginFactory>;
84
85
  export declare const registerPluginFactory: (id: string, factory: PluginFactory, meta?: RegistryMeta) => void;
85
86
  export declare const getPluginFactory: (id: string) => PluginFactory | undefined;
86
- export declare const listPluginFactories: () => RegistryEntry<PluginFactory>[];
87
- export {};
87
+ export declare const listPluginFactories: () => import("./registry-class").RegistryEntry<PluginFactory>[];
88
88
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAa1C,kFAAkF;AAClF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEhD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAA;AAErD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;0EACsE;IACtE,WAAW,CAAC,EAAE,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,YAAY,CAAA;CACnB;AAED;2EAC2E;AAC3E,qBAAa,QAAQ,CAAC,CAAC;IAGT,QAAQ,CAAC,IAAI,EAAE,MAAM;IAFjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAEzC,IAAI,EAAE,MAAM;IAEjC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,GAAE,YAAiB,GAAG,IAAI;IAI7D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS;IAIlD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;IAI1B,GAAG,IAAI,MAAM,EAAE;IAIf,KAAK,IAAI,IAAI;CAGd;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9C;AAMD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEpF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAA;CACpE;AASD,KAAK,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;AAEtC,eAAO,MAAM,iBAAiB,wBAA0C,CAAA;AACxE,eAAO,MAAM,aAAa,wBAAsC,CAAA;AAChE,eAAO,MAAM,YAAY,wBAAqC,CAAA;AAC9D,eAAO,MAAM,gBAAgB,wBAAyC,CAAA;AACtE,eAAO,MAAM,cAAc,4BAA2C,CAAA;AAEtE,eAAO,MAAM,cAAc,eAA8B,CAAA;AAIzD,eAAO,MAAM,iBAAiB,GAAI,IAAI,MAAM,EAAE,GAAG,YAAY,EAAE,OAAO,YAAY,SACzC,CAAA;AACzC,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,6BAA8B,CAAA;AAErE,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,EAAE,GAAG,YAAY,EAAE,OAAO,YAAY,SACzC,CAAA;AACrC,eAAO,MAAM,QAAQ,GAAI,IAAI,MAAM,6BAA0B,CAAA;AAC7D,eAAO,MAAM,UAAU,qCAA6B,CAAA;AAEpD,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,EAAE,GAAG,YAAY,EAAE,OAAO,YAAY,SACzC,CAAA;AACpC,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,6BAAyB,CAAA;AAE3D,eAAO,MAAM,gBAAgB,GAAI,IAAI,MAAM,EAAE,GAAG,YAAY,EAAE,OAAO,YAAY,SACzC,CAAA;AACxC,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,6BAA6B,CAAA;AAEnE,eAAO,MAAM,cAAc,GAAI,KAAK,gBAAgB,EAAE,OAAO,YAAY,SAC7B,CAAA;AAC5C,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,iCAA2B,CAAA;AAC/D,eAAO,MAAM,WAAW,yCAA8B,CAAA;AAGtD,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,EAAE,UAAU,GAAG,EAAE,OAAO,YAAY,SAChC,CAAA;AAC7C,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,QAA2B,CAAA;AAC/D,eAAO,MAAM,WAAW,4BAA8B,CAAA;AAOtD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAA;AACrE,eAAO,MAAM,qBAAqB,yBAAgD,CAAA;AAClF,eAAO,MAAM,qBAAqB,GAAI,IAAI,MAAM,EAAE,SAAS,aAAa,EAAE,OAAO,YAAY,SAC1C,CAAA;AACnD,eAAO,MAAM,gBAAgB,GAAI,IAAI,MAAM,8BAAkC,CAAA;AAC7E,eAAO,MAAM,mBAAmB,sCAAqC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { Registry } from './registry-class';
2
+ import type { JsonSchema, RegistryMeta, RegistryEntryDescriptor, LoaderParamRef, LoaderPropRef } from './registry-class';
3
+ import type { BlockSetting } from './block-schema';
4
+ /**
5
+ * What a loader gets to read from. `shop` is the ShopProvider port — typed as
6
+ * `unknown` here because core is backend-agnostic; the storefront layer pins
7
+ * it to its ShopProvider interface. Nothing else is provided on purpose:
8
+ * a loader that needs more than the port and its params is a loader that has
9
+ * smuggled in a dependency the resolver cannot see.
10
+ */
11
+ export interface LoaderContext<TShop = unknown> {
12
+ shop: TShop;
13
+ }
14
+ /** A loader implementation: pure function of (params, ctx). */
15
+ export type LoaderImpl<P extends Record<string, unknown> = Record<string, unknown>, R = unknown, TShop = unknown> = (params: P, ctx: LoaderContext<TShop>) => Promise<R> | R;
16
+ export declare const loaderRegistry: Registry<LoaderImpl<Record<string, unknown>, unknown, unknown>>;
17
+ /**
18
+ * Register a loader with its meta envelope. `settings` declare the params and
19
+ * compile to the params JSON Schema exactly as block settings compile to
20
+ * propsSchema — one declaration, no drift (I1).
21
+ */
22
+ export declare function defineLoader<P extends Record<string, unknown>, R, TShop = unknown>(id: string, impl: LoaderImpl<P, R, TShop>, meta?: Omit<RegistryMeta, 'propsSchema'>): void;
23
+ /**
24
+ * Resolve a loader or throw naming the valid set — the I2 contract. This is
25
+ * the only lookup a resolver may use: a data need whose loader silently
26
+ * resolved to nothing would render a page that LOOKS complete and is missing
27
+ * data.
28
+ */
29
+ export declare function resolveLoader<P extends Record<string, unknown> = Record<string, unknown>, R = unknown, TShop = unknown>(id: string): LoaderImpl<P, R, TShop>;
30
+ export declare function hasLoader(id: string): boolean;
31
+ /** All registered loader ids, sorted. */
32
+ export declare function listLoaders(): string[];
33
+ /** Test seam — a suite that registers loaders must not leak into the next. */
34
+ export declare function clearLoaders(): void;
35
+ /** The uniform envelope plus the loader-specific fields the agent reads. */
36
+ export interface LoaderDescriptor extends RegistryEntryDescriptor {
37
+ /** JSON Schema for the loader's params (alias of `schema`, named for intent). */
38
+ paramsSchema?: JsonSchema;
39
+ /** The authored param declarations, for editors that render pickers. */
40
+ params: readonly BlockSetting[];
41
+ /** One-line description of what the loader resolves to. */
42
+ output?: string;
43
+ }
44
+ /** Every loader reduced to its descriptor, sorted by id — what describeStore
45
+ * publishes and the agent generates against. */
46
+ export declare function describeLoaders(): LoaderDescriptor[];
47
+ export declare function isLoaderParamRef(value: unknown): value is LoaderParamRef;
48
+ export declare function isLoaderPropRef(value: unknown): value is LoaderPropRef;
49
+ /**
50
+ * Canonical identity of one (loader, params) pair — the dedupe unit. Key-order
51
+ * insensitive and `undefined`-dropping, so two blocks declaring the same need
52
+ * in different spellings still resolve it once per page.
53
+ */
54
+ export declare function dataNeedKey(loader: string, params?: Record<string, unknown>): string;
55
+ //# sourceMappingURL=loaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../../src/registry/loaders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,uBAAuB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAExH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAuBlD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,OAAO;IAC5C,IAAI,EAAE,KAAK,CAAA;CACZ;AAED,+DAA+D;AAC/D,MAAM,MAAM,UAAU,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,GAAG,OAAO,EACX,KAAK,GAAG,OAAO,IACb,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE5D,eAAO,MAAM,cAAc,iEAAqC,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,OAAO,EAChF,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAC7B,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAM,GAC3C,IAAI,CAON;AASD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,GAAG,OAAO,EACX,KAAK,GAAG,OAAO,EACf,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAIrC;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,yCAAyC;AACzC,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAiB,SAAQ,uBAAuB;IAC/D,iFAAiF;IACjF,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,wEAAwE;IACxE,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;IAC/B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;iDACiD;AACjD,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAUpD;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAMxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAMtE;AAeD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAExF"}