@texaryn/core 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
1
+ # @texaryn/core
2
+
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - afa1f81: Add display-policy-aware error presentation. Core runtime computes `showErrors` per node (`touched && invalid`) and maintains a reactive `visibleErrors` aggregate. React prop getters set `aria-invalid` and error-linked `aria-describedby` only when `showErrors` is true. New `FieldErrors` component replaces inline error rendering in all default widgets. New standalone `ErrorSummary` component subscribes to `visibleErrors`.
8
+ - 65d58b2: Add automatic validation triggered by blur, change, and submit hints with configurable debounce, epoch-based stale result protection, and submission race handling.
9
+ - 18f74ea: First public alpha: JSON Schema to React form pipeline.
10
+
11
+ Schema evaluation, IR compiler, headless runtime, React bindings, default widgets, and prop getters.
12
+
13
+ ### Patch Changes
14
+
15
+ - e8807f4: Add submission lifecycle with snapshot semantics.
16
+ Submit captures the current form data as an immutable attempt. Validation
17
+ and onSubmit both operate on the captured snapshot, not live state.
18
+ Duplicate Submit while validating or submitting is a no-op. Edits during
19
+ submitting update the form but do not alter the in-flight payload or
20
+ trigger blur/change validation. Reset or destroy during an in-flight
21
+ submission cleanly cancels via a generation counter.
22
+
23
+ ## 0.1.0-alpha.0
24
+
25
+ ### Minor Changes
26
+
27
+ - 18f74ea: First public alpha: JSON Schema to React form pipeline.
28
+
29
+ Schema evaluation, IR compiler, headless runtime, React bindings, default widgets, and prop getters.
package/README.md ADDED
@@ -0,0 +1,345 @@
1
+ # @texaryn/core
2
+
3
+ Framework-neutral UI IR, compiler, runtime, state, commands, identity, and renderer registry for Texaryn.
4
+
5
+ > Status: pre-1.0. Public APIs may change before 1.0.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @texaryn/core
11
+ ```
12
+
13
+ `@texaryn/core` has no React or DOM dependency.
14
+
15
+ ## What it does
16
+
17
+ Texaryn keeps schema evaluation, UI structure, runtime state, and rendering separate:
18
+
19
+ ```text
20
+ SchemaEvaluationPort
21
+ |
22
+ v
23
+ SchemaProjection
24
+ |
25
+ v
26
+ compile()
27
+ |
28
+ v
29
+ UIDocument
30
+ |
31
+ v
32
+ FormRuntime
33
+ |
34
+ v
35
+ Renderer
36
+ ```
37
+
38
+ The core package owns the framework-neutral contracts and deterministic runtime. A schema adapter supplies semantic information through `SchemaEvaluationPort`, and a renderer consumes the resulting UI document and runtime state.
39
+
40
+ ## Quick start
41
+
42
+ Most applications use `@texaryn/core` together with a schema adapter and a renderer.
43
+
44
+ ```ts
45
+ import { createFormRuntime } from '@texaryn/core'
46
+ import { createJsonSchemaAdapter } from '@texaryn/schema-json'
47
+
48
+ const schema = {
49
+ type: 'object',
50
+ properties: {
51
+ name: { type: 'string', title: 'Name' },
52
+ },
53
+ required: ['name'],
54
+ }
55
+
56
+ const adapter = await createJsonSchemaAdapter(schema)
57
+
58
+ const runtime = createFormRuntime(adapter, {
59
+ initialData: { name: '' },
60
+ onSubmit(data) {
61
+ console.log(data)
62
+ },
63
+ })
64
+
65
+ const document = runtime.document.getSnapshot()
66
+ const data = runtime.data.getSnapshot()
67
+
68
+ console.log(document.rootId, data)
69
+
70
+ runtime.dispatch({ type: 'Submit' })
71
+
72
+ runtime.destroy()
73
+ ```
74
+
75
+ ## Schema evaluation contract
76
+
77
+ Schema libraries integrate with Texaryn through `SchemaEvaluationPort`:
78
+
79
+ ```ts
80
+ interface SchemaEvaluationPort {
81
+ project(data: unknown): SchemaProjection
82
+ validate(data: unknown): ValidationResult | Promise<ValidationResult>
83
+ validateAt?(
84
+ data: unknown,
85
+ pointer: JsonPointer,
86
+ ): ValidationResult | Promise<ValidationResult>
87
+ }
88
+ ```
89
+
90
+ The core does not parse or validate JSON Schema itself. That responsibility belongs to schema adapter packages such as `@texaryn/schema-json`.
91
+
92
+ ## Runtime
93
+
94
+ Create a runtime with:
95
+
96
+ ```ts
97
+ import { createFormRuntime } from '@texaryn/core'
98
+
99
+ const runtime = createFormRuntime(port, {
100
+ initialData,
101
+ hints,
102
+ onSubmit,
103
+ })
104
+ ```
105
+
106
+ A `FormRuntime` exposes stores for:
107
+
108
+ - `document`, the current `UIDocument`
109
+ - `data`, the current form data
110
+ - `submission`, the current submission state
111
+
112
+ It also exposes:
113
+
114
+ - `dispatch(command)`
115
+ - `getNodeState(nodeId)`
116
+ - `destroy()`
117
+
118
+ Node state is kept outside the UI IR and includes value, validation, dirty/touched state, visibility, and disabled state.
119
+
120
+ ## Commands
121
+
122
+ The runtime currently understands:
123
+
124
+ ```ts
125
+ { type: 'SetValue', nodeId, value }
126
+ { type: 'InsertItem', containerId, index, value? }
127
+ { type: 'RemoveItem', containerId, index }
128
+ { type: 'MoveItem', containerId, from, to }
129
+ { type: 'SetTouched', nodeId }
130
+ { type: 'Submit' }
131
+ { type: 'Reset', data? }
132
+ ```
133
+
134
+ Commands are data. They do not contain renderer or DOM behavior.
135
+
136
+ ## UI IR
137
+
138
+ `compile()` converts a `SchemaProjection` into a flat, versioned `UIDocument`:
139
+
140
+ ```ts
141
+ interface UIDocument {
142
+ version: 1
143
+ rootId: NodeId
144
+ nodes: Record<NodeId, UINode>
145
+ }
146
+ ```
147
+
148
+ The IR contains semantic nodes such as fields, containers, text, and actions. It describes what the UI means, not how a framework should render it.
149
+
150
+ ## UI hints
151
+
152
+ Presentation can be layered on top of schema semantics:
153
+
154
+ ```ts
155
+ const hints = {
156
+ '/email': {
157
+ placeholder: 'you@example.com',
158
+ order: 1,
159
+ },
160
+ '/bio': {
161
+ widget: 'textarea',
162
+ helpText: 'Tell us about yourself.',
163
+ order: 2,
164
+ },
165
+ }
166
+ ```
167
+
168
+ Hints can also control when validation runs:
169
+
170
+ ```ts
171
+ const hints = {
172
+ '/email': { validationTrigger: 'blur' },
173
+ '/search': { validationTrigger: 'change' },
174
+ }
175
+ ```
176
+
177
+ Three triggers are supported: `blur` validates on field blur (`SetTouched`), `change` validates after a debounce on value changes (`SetValue`, array mutations), and `submit` validates only on form submission. Fields without a `validationTrigger` hint are not automatically validated on blur or change; submit always validates the entire form regardless of hints.
178
+
179
+ The change debounce defaults to 300ms and can be configured:
180
+
181
+ ```ts
182
+ const runtime = createFormRuntime(port, {
183
+ initialData,
184
+ hints,
185
+ validationDebounceMs: 500,
186
+ })
187
+ ```
188
+
189
+ Validation remains full-form: `port.validate(data)` is called with the entire form data, and errors are distributed to nodes by their data pointers. Synchronous validators skip the `pending` state entirely.
190
+
191
+ Errors are not displayed immediately. The runtime computes a `showErrors` flag per node: a field's errors become visible only when it is both `touched` (the user has interacted with it) and `invalid`. The form-level `visibleErrors` store aggregates all currently visible errors for use in error summaries. React's `useField` hook returns `showErrors`, and `getInputProps` sets `aria-invalid` and the error ID in `aria-describedby` only when `showErrors` is true.
192
+
193
+ Pass hints to `createFormRuntime()` or, in React, to `useForm()`.
194
+
195
+ ## Submission lifecycle
196
+
197
+ Dispatching `Submit` captures the current form data as an immutable snapshot and triggers full-form validation against it. If validation passes, the runtime transitions to `submitting` and calls `onSubmit` with the captured data:
198
+
199
+ ```ts
200
+ const runtime = createFormRuntime(port, {
201
+ initialData: { name: '' },
202
+ onSubmit: async (data) => {
203
+ await api.save(data)
204
+ },
205
+ })
206
+ runtime.dispatch({ type: 'Submit' })
207
+ ```
208
+
209
+ The `submission` store tracks the lifecycle: `idle`, `validating`, `submitting`, `submitted`. A failed `onSubmit` returns to `idle` with the error on `submission.error`. Dispatching `Submit` while already `validating` or `submitting` is a no-op.
210
+
211
+ Edits during `validating` cancel the submission attempt and return to `idle`. Edits during `submitting` update the live form data but do not alter the in-flight payload or trigger validation. A `Reset` during submission cleanly cancels via a generation counter, so late completions from abandoned attempts are ignored.
212
+
213
+ ## Renderer registry
214
+
215
+ The core exports a framework-neutral renderer registry:
216
+
217
+ ```ts
218
+ import { createRendererRegistry } from '@texaryn/core'
219
+
220
+ const registry = createRendererRegistry()
221
+ ```
222
+
223
+ Framework packages can register concrete widget components without adding framework dependencies to the runtime.
224
+
225
+ ## Stable array identity
226
+
227
+ The core includes identity helpers used to keep dynamic array items stable across inserts, removals, moves, and recompilation:
228
+
229
+ - `createIdentityMap`
230
+ - `registerArray`
231
+ - `insertItem`
232
+ - `removeItem`
233
+ - `moveItem`
234
+ - `resolvePointer`
235
+ - `reconcile`
236
+
237
+ ## Key exports
238
+
239
+ ### Core types
240
+
241
+ - `NodeId`
242
+ - `StableItemId`
243
+ - `JsonPointer`
244
+ - `MaybePromise`
245
+ - `JsonSchemaType`
246
+ - `ValidationResult`
247
+ - `ValidationError`
248
+ - `VisibleError`
249
+
250
+ ### Schema and IR
251
+
252
+ - `SchemaEvaluationPort`
253
+ - `SchemaProjection`
254
+ - `NodeProjection`
255
+ - `ChildProjection`
256
+ - `AnnotationSet`
257
+ - `UIDocument`
258
+ - `UINode`
259
+ - `NodeBase`
260
+ - `NodeAnnotations`
261
+ - `FieldNode`
262
+ - `FieldType`
263
+ - `FieldConstraints`
264
+ - `EnumOption`
265
+ - `ContainerNode`
266
+ - `ArrayMeta`
267
+ - `TextNode`
268
+ - `ActionNode`
269
+ - `CompileResult`
270
+ - `compile`
271
+
272
+ ### UI hints
273
+
274
+ - `UIHints`
275
+ - `FieldHints`
276
+ - `ArrayHints`
277
+
278
+ ### Runtime and state
279
+
280
+ - `createFormRuntime`
281
+ - `FormRuntime`
282
+ - `FormRuntimeOptions`
283
+ - `NodeState`
284
+ - `RuntimeState`
285
+ - `NodeRuntimeState`
286
+ - `ValidationState`
287
+ - `InteractionState`
288
+ - `SubmissionState`
289
+ - `IdentityMap`
290
+ - `createStore`
291
+ - `Store`
292
+ - `WritableStore`
293
+
294
+ ### Commands
295
+
296
+ - `Command`
297
+ - `Effect`
298
+ - `CommandResult`
299
+ - `processCommand`
300
+
301
+ ### JSON Pointer helpers
302
+
303
+ - `getAtPointer`
304
+ - `setAtPointer`
305
+ - `parsePointer`
306
+
307
+ ### Stable array identity
308
+
309
+ - `createIdentityMap`
310
+ - `registerArray`
311
+ - `insertItem`
312
+ - `removeItem`
313
+ - `moveItem`
314
+ - `resolvePointer`
315
+ - `reconcile`
316
+ - `ReconcileOptions`
317
+
318
+ ### Rendering
319
+
320
+ - `createRendererRegistry`
321
+ - `RendererRegistry`
322
+ - `WidgetTester`
323
+ - `WidgetEntry`
324
+
325
+ ## Design constraints
326
+
327
+ `@texaryn/core` intentionally does not depend on:
328
+
329
+ - React
330
+ - the DOM
331
+ - a JSON Schema implementation
332
+ - an AI SDK or transport protocol
333
+
334
+ That boundary is what allows the same runtime model to support different schema engines and renderers.
335
+
336
+ ## Related packages
337
+
338
+ - [`@texaryn/schema-json`](../schema-json/README.md), primary JSON Schema adapter
339
+ - [`@texaryn/react`](../react/README.md), React bindings and default renderer
340
+
341
+ See the [repository README](../../README.md) and [ROADMAP](../../ROADMAP.md) for the full architecture.
342
+
343
+ ## License
344
+
345
+ Apache-2.0
@@ -35,7 +35,10 @@ function handleSetValue(state, cmd, document) {
35
35
  });
36
36
  return {
37
37
  nextState: { ...state, data: newData, nodes },
38
- effects: [{ type: 'recompile', reason: 'data-changed' }],
38
+ effects: [
39
+ { type: 'recompile', reason: 'data-changed' },
40
+ { type: 'validate', nodeIds: [cmd.nodeId], trigger: 'change' },
41
+ ],
39
42
  };
40
43
  }
41
44
  function handleInsertItem(state, cmd, document) {
@@ -50,7 +53,10 @@ function handleInsertItem(state, cmd, document) {
50
53
  const { map: newIdentities } = insertItem(state.identities, cmd.containerId, cmd.index);
51
54
  return {
52
55
  nextState: { ...state, data: newData, identities: newIdentities },
53
- effects: [{ type: 'recompile', reason: 'data-changed' }],
56
+ effects: [
57
+ { type: 'recompile', reason: 'data-changed' },
58
+ { type: 'validate', nodeIds: [cmd.containerId], trigger: 'change' },
59
+ ],
54
60
  };
55
61
  }
56
62
  function handleRemoveItem(state, cmd, document) {
@@ -65,7 +71,10 @@ function handleRemoveItem(state, cmd, document) {
65
71
  const { map: newIdentities } = removeItem(state.identities, cmd.containerId, cmd.index);
66
72
  return {
67
73
  nextState: { ...state, data: newData, identities: newIdentities },
68
- effects: [{ type: 'recompile', reason: 'data-changed' }],
74
+ effects: [
75
+ { type: 'recompile', reason: 'data-changed' },
76
+ { type: 'validate', nodeIds: [cmd.containerId], trigger: 'change' },
77
+ ],
69
78
  };
70
79
  }
71
80
  function handleMoveItem(state, cmd, document) {
@@ -83,7 +92,10 @@ function handleMoveItem(state, cmd, document) {
83
92
  const newIdentities = moveItem(state.identities, cmd.containerId, cmd.from, cmd.to);
84
93
  return {
85
94
  nextState: { ...state, data: newData, identities: newIdentities },
86
- effects: [{ type: 'recompile', reason: 'data-changed' }],
95
+ effects: [
96
+ { type: 'recompile', reason: 'data-changed' },
97
+ { type: 'validate', nodeIds: [cmd.containerId], trigger: 'change' },
98
+ ],
87
99
  };
88
100
  }
89
101
  function handleSetTouched(state, cmd) {
@@ -95,16 +107,22 @@ function handleSetTouched(state, cmd) {
95
107
  interaction: { ...prev.interaction, touched: true },
96
108
  });
97
109
  }
98
- return { nextState: { ...state, nodes }, effects: [] };
110
+ return {
111
+ nextState: { ...state, nodes },
112
+ effects: [{ type: 'validate', nodeIds: [cmd.nodeId], trigger: 'blur' }],
113
+ };
99
114
  }
100
115
  function handleSubmit(state) {
116
+ if (state.submission.status === 'validating' || state.submission.status === 'submitting') {
117
+ return { nextState: state, effects: [] };
118
+ }
101
119
  const allNodeIds = [...state.nodes.keys()];
102
120
  return {
103
121
  nextState: {
104
122
  ...state,
105
123
  submission: { status: 'validating' },
106
124
  },
107
- effects: [{ type: 'validate', nodeIds: allNodeIds }],
125
+ effects: [{ type: 'validate', nodeIds: allNodeIds, trigger: 'submit' }],
108
126
  };
109
127
  }
110
128
  function handleReset(state, cmd, document) {
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/commands/handler.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ export type Command = {
30
30
  export type Effect = {
31
31
  type: 'validate';
32
32
  nodeIds: NodeId[];
33
+ trigger: 'blur' | 'change' | 'submit';
33
34
  } | {
34
35
  type: 'recompile';
35
36
  reason: 'data-changed' | 'schema-changed';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEvD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,YAAY,CAAA;IACvB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEvD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,YAAY,CAAA;IACvB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { NodeId, StableItemId, JsonPointer, MaybePromise, JsonSchemaType, ValidationResult, ValidationError, } from './types.js';
1
+ export type { NodeId, StableItemId, JsonPointer, MaybePromise, JsonSchemaType, ValidationResult, ValidationError, VisibleError, } from './types.js';
2
2
  export type { UIDocument, UINode, NodeBase, NodeAnnotations, FieldNode, FieldType, FieldConstraints, EnumOption, ContainerNode, ArrayMeta, TextNode, ActionNode, RuntimeState, NodeRuntimeState, ValidationState, InteractionState, SubmissionState, IdentityMap, } from './ir/index.js';
3
3
  export type { CompileResult } from './ir/index.js';
4
4
  export { compile } from './ir/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,UAAU,EACV,MAAM,EACN,QAAQ,EACR,eAAe,EACf,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEvE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,UAAU,EACV,MAAM,EACN,QAAQ,EACR,eAAe,EACf,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEvE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAavC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAavC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAW7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AAgC5E,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CA8Mb"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAW7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AAqD5E,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAgWb"}
@@ -1,8 +1,21 @@
1
1
  import { compile } from '../ir/compiler.js';
2
2
  import { processCommand } from '../commands/handler.js';
3
- import { createStore } from '../state/store.js';
3
+ import { createStore, createComputedStore } from '../state/store.js';
4
4
  import { batch } from '../state/signal.js';
5
5
  import { getAtPointer } from '../json-pointer.js';
6
+ import { createValidationScheduler } from './validation-scheduler.js';
7
+ function isDataMutatingCommand(command) {
8
+ switch (command.type) {
9
+ case 'SetValue':
10
+ case 'InsertItem':
11
+ case 'RemoveItem':
12
+ case 'MoveItem':
13
+ case 'Reset':
14
+ return true;
15
+ default:
16
+ return false;
17
+ }
18
+ }
6
19
  function defaultNodeState(value) {
7
20
  return {
8
21
  value,
@@ -11,14 +24,17 @@ function defaultNodeState(value) {
11
24
  };
12
25
  }
13
26
  function createNodeStoreBundle(nodeState, uiNode) {
27
+ const touched = createStore(nodeState.interaction.touched);
28
+ const validationStatus = createStore(nodeState.validation.status);
14
29
  return {
15
30
  value: createStore(nodeState.value),
16
31
  errors: createStore(nodeState.validation.errors),
17
32
  dirty: createStore(nodeState.interaction.dirty),
18
- touched: createStore(nodeState.interaction.touched),
33
+ touched,
19
34
  visible: createStore(uiNode.visible),
20
35
  disabled: createStore(uiNode.disabled),
21
- validationStatus: createStore(nodeState.validation.status),
36
+ validationStatus,
37
+ showErrors: createComputedStore(() => touched.getSnapshot() && validationStatus.getSnapshot() === 'invalid'),
22
38
  };
23
39
  }
24
40
  export function createFormRuntime(port, options = {}) {
@@ -29,6 +45,7 @@ export function createFormRuntime(port, options = {}) {
29
45
  const documentStore = createStore(initialCompile.document);
30
46
  const dataStore = createStore(initialData);
31
47
  const submissionStore = createStore({ status: 'idle' });
48
+ const visibleErrorsStore = createStore([]);
32
49
  const nodeStores = new Map();
33
50
  const nodes = new Map();
34
51
  for (const key of Object.keys(currentDoc.nodes)) {
@@ -47,6 +64,8 @@ export function createFormRuntime(port, options = {}) {
47
64
  submission: { status: 'idle' },
48
65
  };
49
66
  let destroyed = false;
67
+ let submissionGeneration = 0;
68
+ let currentAttempt = null;
50
69
  function syncNodeStores() {
51
70
  for (const [nodeId, nodeRuntimeState] of state.nodes) {
52
71
  const bundle = nodeStores.get(nodeId);
@@ -58,6 +77,25 @@ export function createFormRuntime(port, options = {}) {
58
77
  bundle.errors.set(nodeRuntimeState.validation.errors);
59
78
  bundle.validationStatus.set(nodeRuntimeState.validation.status);
60
79
  }
80
+ refreshVisibleErrors();
81
+ }
82
+ function refreshVisibleErrors() {
83
+ const result = [];
84
+ for (const [nodeId, bundle] of nodeStores) {
85
+ if (!bundle.showErrors.getSnapshot())
86
+ continue;
87
+ const errors = bundle.errors.getSnapshot();
88
+ if (errors.length === 0)
89
+ continue;
90
+ const uiNode = currentDoc.nodes[nodeId];
91
+ result.push({
92
+ nodeId,
93
+ fieldTitle: uiNode?.annotations?.title,
94
+ pointer: uiNode?.dataPointer ?? null,
95
+ errors,
96
+ });
97
+ }
98
+ visibleErrorsStore.set(result);
61
99
  }
62
100
  function handleRecompile() {
63
101
  const nextProjection = port.project(state.data);
@@ -106,67 +144,150 @@ export function createFormRuntime(port, options = {}) {
106
144
  nodeStores.delete(nodeId);
107
145
  }
108
146
  }
147
+ refreshVisibleErrors();
109
148
  }
110
- function applyValidationResult(result) {
111
- batch(() => {
112
- const errorsByPointer = new Map();
113
- for (const error of result.errors) {
114
- const list = errorsByPointer.get(error.instancePointer) ?? [];
115
- list.push(error);
116
- errorsByPointer.set(error.instancePointer, list);
117
- }
118
- const nextNodes = new Map(state.nodes);
119
- for (const [nodeId, nodeRuntimeState] of nextNodes) {
120
- const uiNode = currentDoc.nodes[nodeId];
121
- if (uiNode?.dataPointer == null)
122
- continue;
123
- const nodeErrors = errorsByPointer.get(uiNode.dataPointer) ?? [];
124
- const status = nodeErrors.length > 0 ? 'invalid' : 'valid';
125
- nextNodes.set(nodeId, { ...nodeRuntimeState, validation: { status, errors: nodeErrors } });
126
- const bundle = nodeStores.get(nodeId);
127
- if (bundle) {
128
- bundle.errors.set(nodeErrors);
129
- bundle.validationStatus.set(status);
130
- }
131
- }
132
- let submission = state.submission;
133
- const wasSubmitting = state.submission.status === 'validating';
134
- if (wasSubmitting) {
135
- submission = result.valid ? { status: 'submitting' } : { status: 'idle' };
136
- }
137
- state = { ...state, nodes: nextNodes, submission };
138
- submissionStore.set(submission);
139
- if (wasSubmitting && result.valid) {
140
- void runOnSubmit();
149
+ function applyNodeValidationResult(result) {
150
+ const errorsByPointer = new Map();
151
+ for (const error of result.errors) {
152
+ const list = errorsByPointer.get(error.instancePointer) ?? [];
153
+ list.push(error);
154
+ errorsByPointer.set(error.instancePointer, list);
155
+ }
156
+ const nextNodes = new Map(state.nodes);
157
+ for (const [nodeId, nodeRuntimeState] of nextNodes) {
158
+ const uiNode = currentDoc.nodes[nodeId];
159
+ if (uiNode?.dataPointer == null)
160
+ continue;
161
+ const nodeErrors = errorsByPointer.get(uiNode.dataPointer) ?? [];
162
+ const status = nodeErrors.length > 0 ? 'invalid' : 'valid';
163
+ nextNodes.set(nodeId, { ...nodeRuntimeState, validation: { status, errors: nodeErrors } });
164
+ const bundle = nodeStores.get(nodeId);
165
+ if (bundle) {
166
+ bundle.errors.set(nodeErrors);
167
+ bundle.validationStatus.set(status);
141
168
  }
142
- });
169
+ }
170
+ state = { ...state, nodes: nextNodes };
171
+ refreshVisibleErrors();
143
172
  }
144
- function runOnSubmit() {
145
- return Promise.resolve(options.onSubmit?.(state.data))
173
+ function runOnSubmit(attempt) {
174
+ return Promise.resolve(options.onSubmit?.(attempt.data))
146
175
  .then(() => {
147
- if (destroyed)
176
+ if (destroyed || attempt.generation !== submissionGeneration)
148
177
  return;
149
178
  batch(() => {
179
+ currentAttempt = null;
150
180
  state = { ...state, submission: { status: 'submitted' } };
151
181
  submissionStore.set(state.submission);
152
182
  });
153
183
  })
154
184
  .catch((error) => {
155
- if (destroyed)
185
+ if (destroyed || attempt.generation !== submissionGeneration)
156
186
  return;
157
187
  batch(() => {
188
+ currentAttempt = null;
158
189
  state = { ...state, submission: { status: 'idle', error } };
159
190
  submissionStore.set(state.submission);
160
191
  });
161
192
  });
162
193
  }
163
- function handleValidate() {
164
- Promise.resolve(port.validate(state.data))
165
- .then((result) => {
166
- if (!destroyed)
167
- applyValidationResult(result);
168
- })
169
- .catch(() => { });
194
+ function onValidationPending() {
195
+ if (destroyed)
196
+ return;
197
+ batch(() => {
198
+ const nextNodes = new Map(state.nodes);
199
+ for (const [nodeId, nodeRuntimeState] of nextNodes) {
200
+ nextNodes.set(nodeId, {
201
+ ...nodeRuntimeState,
202
+ validation: { ...nodeRuntimeState.validation, status: 'pending' },
203
+ });
204
+ const bundle = nodeStores.get(nodeId);
205
+ if (bundle)
206
+ bundle.validationStatus.set('pending');
207
+ }
208
+ state = { ...state, nodes: nextNodes };
209
+ refreshVisibleErrors();
210
+ });
211
+ }
212
+ function onValidationResult(result, trigger) {
213
+ if (destroyed)
214
+ return;
215
+ batch(() => {
216
+ applyNodeValidationResult(result);
217
+ if (trigger === 'submit' && state.submission.status === 'validating') {
218
+ const attempt = currentAttempt;
219
+ if (result.valid && attempt) {
220
+ const submission = { status: 'submitting' };
221
+ state = { ...state, submission };
222
+ submissionStore.set(submission);
223
+ void runOnSubmit(attempt);
224
+ }
225
+ else {
226
+ currentAttempt = null;
227
+ const submission = { status: 'idle' };
228
+ state = { ...state, submission };
229
+ submissionStore.set(submission);
230
+ }
231
+ }
232
+ });
233
+ }
234
+ function resetPendingNodes() {
235
+ const nextNodes = new Map(state.nodes);
236
+ let changed = false;
237
+ for (const [nodeId, nodeRuntimeState] of nextNodes) {
238
+ if (nodeRuntimeState.validation.status !== 'pending')
239
+ continue;
240
+ nextNodes.set(nodeId, {
241
+ ...nodeRuntimeState,
242
+ validation: { ...nodeRuntimeState.validation, status: 'idle' },
243
+ });
244
+ const bundle = nodeStores.get(nodeId);
245
+ if (bundle)
246
+ bundle.validationStatus.set('idle');
247
+ changed = true;
248
+ }
249
+ if (changed) {
250
+ state = { ...state, nodes: nextNodes };
251
+ refreshVisibleErrors();
252
+ }
253
+ }
254
+ function onValidationError(error, trigger) {
255
+ if (destroyed)
256
+ return;
257
+ batch(() => {
258
+ resetPendingNodes();
259
+ if (trigger === 'submit') {
260
+ currentAttempt = null;
261
+ state = { ...state, submission: { status: 'idle', error } };
262
+ submissionStore.set(state.submission);
263
+ }
264
+ });
265
+ }
266
+ const scheduler = createValidationScheduler({
267
+ runValidation: (trigger) => port.validate(trigger === 'submit' && currentAttempt
268
+ ? currentAttempt.data
269
+ : state.data),
270
+ onPending: onValidationPending,
271
+ onResult: onValidationResult,
272
+ onError: onValidationError,
273
+ }, options.validationDebounceMs);
274
+ function hintMatchesTrigger(nodeIds, trigger) {
275
+ return nodeIds.some((nodeId) => {
276
+ const uiNode = currentDoc.nodes[nodeId];
277
+ const pointer = uiNode?.dataPointer;
278
+ if (pointer == null)
279
+ return false;
280
+ return options.hints?.[pointer]?.validationTrigger === trigger;
281
+ });
282
+ }
283
+ function handleValidateEffect(effect) {
284
+ if (state.submission.status === 'submitting' && effect.trigger !== 'submit') {
285
+ return;
286
+ }
287
+ if (effect.trigger !== 'submit' && !hintMatchesTrigger(effect.nodeIds, effect.trigger)) {
288
+ return;
289
+ }
290
+ scheduler.schedule(effect.trigger);
170
291
  }
171
292
  function handleEffect(effect) {
172
293
  switch (effect.type) {
@@ -174,7 +295,7 @@ export function createFormRuntime(port, options = {}) {
174
295
  handleRecompile();
175
296
  break;
176
297
  case 'validate':
177
- handleValidate();
298
+ handleValidateEffect(effect);
178
299
  break;
179
300
  default:
180
301
  break;
@@ -183,8 +304,33 @@ export function createFormRuntime(port, options = {}) {
183
304
  function dispatch(command) {
184
305
  if (destroyed)
185
306
  return;
307
+ const mutatesData = isDataMutatingCommand(command);
308
+ if (mutatesData) {
309
+ scheduler.invalidate();
310
+ if (command.type === 'Reset') {
311
+ scheduler.cancelScheduled();
312
+ submissionGeneration++;
313
+ currentAttempt = null;
314
+ }
315
+ }
186
316
  const { nextState, effects } = processCommand(state, command, currentDoc);
187
317
  state = nextState;
318
+ const isAcceptedSubmit = effects.some((e) => e.type === 'validate' && e.trigger === 'submit');
319
+ if (isAcceptedSubmit) {
320
+ currentAttempt = { generation: ++submissionGeneration, data: state.data };
321
+ scheduler.cancelScheduled();
322
+ }
323
+ if (mutatesData && state.submission.status === 'validating') {
324
+ submissionGeneration++;
325
+ currentAttempt = null;
326
+ state = { ...state, submission: { status: 'idle' } };
327
+ }
328
+ if (mutatesData) {
329
+ // Reset nodes stuck at pending from an invalidated in-flight validation
330
+ batch(() => {
331
+ resetPendingNodes();
332
+ });
333
+ }
188
334
  batch(() => {
189
335
  dataStore.set(state.data);
190
336
  submissionStore.set(state.submission);
@@ -199,12 +345,16 @@ export function createFormRuntime(port, options = {}) {
199
345
  }
200
346
  function destroy() {
201
347
  destroyed = true;
348
+ submissionGeneration++;
349
+ currentAttempt = null;
350
+ scheduler.destroy();
202
351
  nodeStores.clear();
203
352
  }
204
353
  return {
205
354
  document: documentStore,
206
355
  data: dataStore,
207
356
  submission: submissionStore,
357
+ visibleErrors: visibleErrorsStore,
208
358
  dispatch,
209
359
  getNodeState,
210
360
  destroy,
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,12 @@ import type { UIDocument } from '../ir/types.js';
3
3
  import type { UIHints } from '../hints/types.js';
4
4
  import type { Command } from '../commands/types.js';
5
5
  import type { SubmissionState } from '../ir/runtime-state.js';
6
- import type { NodeId, MaybePromise, ValidationError } from '../types.js';
6
+ import type { NodeId, MaybePromise, ValidationError, VisibleError } from '../types.js';
7
7
  export interface FormRuntimeOptions {
8
8
  initialData?: unknown;
9
9
  hints?: UIHints;
10
10
  onSubmit?: (data: unknown) => MaybePromise<void>;
11
+ validationDebounceMs?: number;
11
12
  }
12
13
  export interface NodeState {
13
14
  readonly value: Store<unknown>;
@@ -17,11 +18,13 @@ export interface NodeState {
17
18
  readonly visible: Store<boolean>;
18
19
  readonly disabled: Store<boolean>;
19
20
  readonly validationStatus: Store<'idle' | 'pending' | 'valid' | 'invalid'>;
21
+ readonly showErrors: Store<boolean>;
20
22
  }
21
23
  export interface FormRuntime {
22
24
  readonly document: Store<UIDocument>;
23
25
  readonly data: Store<unknown>;
24
26
  readonly submission: Store<SubmissionState>;
27
+ readonly visibleErrors: Store<VisibleError[]>;
25
28
  dispatch(command: Command): void;
26
29
  getNodeState(nodeId: NodeId): NodeState | undefined;
27
30
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAExE,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;CAC3E;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEtF,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAA;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;IAC1E,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3C,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB"}
@@ -0,0 +1,20 @@
1
+ import type { MaybePromise, ValidationResult } from '../types.js';
2
+ export type ValidationTrigger = 'blur' | 'change' | 'submit';
3
+ export interface SchedulerCallbacks {
4
+ runValidation: (trigger: ValidationTrigger) => MaybePromise<ValidationResult>;
5
+ onPending: () => void;
6
+ onResult: (result: ValidationResult, trigger: ValidationTrigger) => void;
7
+ onError: (error: unknown, trigger: ValidationTrigger) => void;
8
+ }
9
+ export interface ValidationScheduler {
10
+ /** Schedule a validation run. Change triggers are debounced. */
11
+ schedule(trigger: ValidationTrigger): void;
12
+ /** Increment the epoch, invalidating in-flight and future-stale results. */
13
+ invalidate(): void;
14
+ /** Cancel queued debounce timers without touching the epoch. */
15
+ cancelScheduled(): void;
16
+ /** Clean up all timers and prevent in-flight results from calling back. */
17
+ destroy(): void;
18
+ }
19
+ export declare function createValidationScheduler(callbacks: SchedulerCallbacks, debounceMs?: number): ValidationScheduler;
20
+ //# sourceMappingURL=validation-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-scheduler.d.ts","sourceRoot":"","sources":["../../src/runtime/validation-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEjE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,YAAY,CAAC,gBAAgB,CAAC,CAAA;IAC7E,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACxE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC1C,4EAA4E;IAC5E,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,eAAe,IAAI,IAAI,CAAA;IACvB,2EAA2E;IAC3E,OAAO,IAAI,IAAI,CAAA;CAChB;AAQD,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,kBAAkB,EAC7B,UAAU,GAAE,MAA4B,GACvC,mBAAmB,CAoErB"}
@@ -0,0 +1,70 @@
1
+ const DEFAULT_DEBOUNCE_MS = 300;
2
+ function isThenable(value) {
3
+ return value != null && typeof value.then === 'function';
4
+ }
5
+ export function createValidationScheduler(callbacks, debounceMs = DEFAULT_DEBOUNCE_MS) {
6
+ let epoch = 0;
7
+ let debounceTimer = null;
8
+ let destroyed = false;
9
+ function clearDebounceTimer() {
10
+ if (debounceTimer != null) {
11
+ clearTimeout(debounceTimer);
12
+ debounceTimer = null;
13
+ }
14
+ }
15
+ function runValidationNow(trigger) {
16
+ if (destroyed)
17
+ return;
18
+ const capturedEpoch = epoch;
19
+ let result;
20
+ try {
21
+ result = callbacks.runValidation(trigger);
22
+ }
23
+ catch (err) {
24
+ callbacks.onError(err, trigger);
25
+ return;
26
+ }
27
+ if (isThenable(result)) {
28
+ callbacks.onPending();
29
+ result.then((r) => {
30
+ if (!destroyed && capturedEpoch === epoch)
31
+ callbacks.onResult(r, trigger);
32
+ }, (err) => {
33
+ if (!destroyed && capturedEpoch === epoch)
34
+ callbacks.onError(err, trigger);
35
+ });
36
+ }
37
+ else {
38
+ callbacks.onResult(result, trigger);
39
+ }
40
+ }
41
+ return {
42
+ schedule(trigger) {
43
+ if (destroyed)
44
+ return;
45
+ if (trigger === 'change') {
46
+ clearDebounceTimer();
47
+ debounceTimer = setTimeout(() => {
48
+ debounceTimer = null;
49
+ runValidationNow('change');
50
+ }, debounceMs);
51
+ }
52
+ else {
53
+ runValidationNow(trigger);
54
+ }
55
+ },
56
+ invalidate() {
57
+ epoch += 1;
58
+ // No longer cancels debounce timer. The timer fires against current
59
+ // data and captures the current epoch, so stale results are still gated.
60
+ },
61
+ cancelScheduled() {
62
+ clearDebounceTimer();
63
+ },
64
+ destroy() {
65
+ destroyed = true;
66
+ clearDebounceTimer();
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=validation-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-scheduler.js","sourceRoot":"","sources":["../../src/runtime/validation-scheduler.ts"],"names":[],"mappings":"AAsBA,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAE/B,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,IAAI,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,SAA6B,EAC7B,aAAqB,mBAAmB;IAExC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,aAAa,GAAyC,IAAI,CAAA;IAC9D,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,SAAS,kBAAkB;QACzB,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,YAAY,CAAC,aAAa,CAAC,CAAA;YAC3B,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB,CAAC,OAA0B;QAClD,IAAI,SAAS;YAAE,OAAM;QACrB,MAAM,aAAa,GAAG,KAAK,CAAA;QAE3B,IAAI,MAAsC,CAAA;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC/B,OAAM;QACR,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,SAAS,EAAE,CAAA;YACrB,MAAM,CAAC,IAAI,CACT,CAAC,CAAC,EAAE,EAAE;gBACJ,IAAI,CAAC,SAAS,IAAI,aAAa,KAAK,KAAK;oBAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAC3E,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,CAAC,SAAS,IAAI,aAAa,KAAK,KAAK;oBAAE,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC5E,CAAC,CACF,CAAA;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,CAAC,OAA0B;YACjC,IAAI,SAAS;gBAAE,OAAM;YACrB,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,kBAAkB,EAAE,CAAA;gBACpB,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,aAAa,GAAG,IAAI,CAAA;oBACpB,gBAAgB,CAAC,QAAQ,CAAC,CAAA;gBAC5B,CAAC,EAAE,UAAU,CAAC,CAAA;YAChB,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAED,UAAU;YACR,KAAK,IAAI,CAAC,CAAA;YACV,oEAAoE;YACpE,yEAAyE;QAC3E,CAAC;QAED,eAAe;YACb,kBAAkB,EAAE,CAAA;QACtB,CAAC;QAED,OAAO;YACL,SAAS,GAAG,IAAI,CAAA;YAChB,kBAAkB,EAAE,CAAA;QACtB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export type { Store, WritableStore } from './store.js';
2
- export { createStore } from './store.js';
2
+ export { createStore, createComputedStore } from './store.js';
3
3
  export { createSignal, createComputed, batch, subscribeToSignal } from './signal.js';
4
4
  export type { Signal, Computed } from './signal.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
@@ -1,3 +1,3 @@
1
- export { createStore } from './store.js';
1
+ export { createStore, createComputedStore } from './store.js';
2
2
  export { createSignal, createComputed, batch, subscribeToSignal } from './signal.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
@@ -6,4 +6,5 @@ export interface WritableStore<T> extends Store<T> {
6
6
  set(value: T): void;
7
7
  }
8
8
  export declare function createStore<T>(initialValue: T): WritableStore<T>;
9
+ export declare function createComputedStore<T>(fn: () => T): Store<T>;
9
10
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,WAAW,IAAI,CAAC,CAAA;IAChB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC5C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAQhE"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,WAAW,IAAI,CAAC,CAAA;IAChB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC5C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAQhE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAM5D"}
@@ -1,4 +1,4 @@
1
- import { createSignal, subscribeToSignal } from './signal.js';
1
+ import { createSignal, createComputed, subscribeToSignal } from './signal.js';
2
2
  export function createStore(initialValue) {
3
3
  const signal = createSignal(initialValue);
4
4
  return {
@@ -7,4 +7,11 @@ export function createStore(initialValue) {
7
7
  set: (value) => signal.set(value),
8
8
  };
9
9
  }
10
+ export function createComputedStore(fn) {
11
+ const computed = createComputed(fn);
12
+ return {
13
+ getSnapshot: () => computed.get(),
14
+ subscribe: (listener) => subscribeToSignal(computed, listener),
15
+ };
16
+ }
10
17
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAY7D,MAAM,UAAU,WAAW,CAAI,YAAe;IAC5C,MAAM,MAAM,GAAc,YAAY,CAAC,YAAY,CAAC,CAAA;IAEpD,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;QAC/B,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC5D,GAAG,EAAE,CAAC,KAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;KACrC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAY7E,MAAM,UAAU,WAAW,CAAI,YAAe;IAC5C,MAAM,MAAM,GAAc,YAAY,CAAC,YAAY,CAAC,CAAA;IAEpD,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;QAC/B,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC5D,GAAG,EAAE,CAAC,KAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;KACrC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAI,EAAW;IAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;IACnC,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;QACjC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC/D,CAAA;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -19,4 +19,10 @@ export interface ValidationError {
19
19
  message?: string;
20
20
  params: Record<string, unknown>;
21
21
  }
22
+ export interface VisibleError {
23
+ nodeId: NodeId;
24
+ fieldTitle: string | undefined;
25
+ pointer: JsonPointer | null;
26
+ errors: ValidationError[];
27
+ }
22
28
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAAA;AAC/D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,CAAA;AAE7D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5C,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,GACP,MAAM,CAAA;AAEV,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAAA;AAC/D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,CAAA;AAE7D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5C,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,GACP,MAAM,CAAA;AAEV,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@texaryn/core",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "description": "Framework-neutral UI IR, compiler, runtime, and renderer registry for schema-driven forms",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -25,7 +25,8 @@
25
25
  }
26
26
  },
27
27
  "files": [
28
- "dist"
28
+ "dist",
29
+ "CHANGELOG.md"
29
30
  ],
30
31
  "scripts": {
31
32
  "build": "tsc --build"