@texaryn/core 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +190 -0
  2. package/dist/commands/handler.d.ts +5 -0
  3. package/dist/commands/handler.d.ts.map +1 -0
  4. package/dist/commands/handler.js +151 -0
  5. package/dist/commands/handler.js.map +1 -0
  6. package/dist/commands/index.d.ts +3 -0
  7. package/dist/commands/index.d.ts.map +1 -0
  8. package/dist/commands/index.js +2 -0
  9. package/dist/commands/index.js.map +1 -0
  10. package/dist/commands/types.d.ts +49 -0
  11. package/dist/commands/types.d.ts.map +1 -0
  12. package/dist/commands/types.js +2 -0
  13. package/dist/commands/types.js.map +1 -0
  14. package/dist/hints/index.d.ts +2 -0
  15. package/dist/hints/index.d.ts.map +1 -0
  16. package/dist/hints/index.js +2 -0
  17. package/dist/hints/index.js.map +1 -0
  18. package/dist/hints/types.d.ts +18 -0
  19. package/dist/hints/types.d.ts.map +1 -0
  20. package/dist/hints/types.js +2 -0
  21. package/dist/hints/types.js.map +1 -0
  22. package/dist/identity/index.d.ts +4 -0
  23. package/dist/identity/index.d.ts.map +1 -0
  24. package/dist/identity/index.js +3 -0
  25. package/dist/identity/index.js.map +1 -0
  26. package/dist/identity/map.d.ts +15 -0
  27. package/dist/identity/map.d.ts.map +1 -0
  28. package/dist/identity/map.js +64 -0
  29. package/dist/identity/map.js.map +1 -0
  30. package/dist/identity/reconcile.d.ts +7 -0
  31. package/dist/identity/reconcile.d.ts.map +1 -0
  32. package/dist/identity/reconcile.js +56 -0
  33. package/dist/identity/reconcile.js.map +1 -0
  34. package/dist/index.d.ts +18 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +8 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/ir/compiler-types.d.ts +7 -0
  39. package/dist/ir/compiler-types.d.ts.map +1 -0
  40. package/dist/ir/compiler-types.js +2 -0
  41. package/dist/ir/compiler-types.js.map +1 -0
  42. package/dist/ir/compiler.d.ts +5 -0
  43. package/dist/ir/compiler.d.ts.map +1 -0
  44. package/dist/ir/compiler.js +126 -0
  45. package/dist/ir/compiler.js.map +1 -0
  46. package/dist/ir/index.d.ts +5 -0
  47. package/dist/ir/index.d.ts.map +1 -0
  48. package/dist/ir/index.js +2 -0
  49. package/dist/ir/index.js.map +1 -0
  50. package/dist/ir/runtime-state.d.ts +36 -0
  51. package/dist/ir/runtime-state.d.ts.map +1 -0
  52. package/dist/ir/runtime-state.js +2 -0
  53. package/dist/ir/runtime-state.js.map +1 -0
  54. package/dist/ir/types.d.ts +81 -0
  55. package/dist/ir/types.d.ts.map +1 -0
  56. package/dist/ir/types.js +2 -0
  57. package/dist/ir/types.js.map +1 -0
  58. package/dist/json-pointer.d.ts +5 -0
  59. package/dist/json-pointer.d.ts.map +1 -0
  60. package/dist/json-pointer.js +46 -0
  61. package/dist/json-pointer.js.map +1 -0
  62. package/dist/renderer/index.d.ts +3 -0
  63. package/dist/renderer/index.d.ts.map +1 -0
  64. package/dist/renderer/index.js +2 -0
  65. package/dist/renderer/index.js.map +1 -0
  66. package/dist/renderer/registry.d.ts +3 -0
  67. package/dist/renderer/registry.d.ts.map +1 -0
  68. package/dist/renderer/registry.js +20 -0
  69. package/dist/renderer/registry.js.map +1 -0
  70. package/dist/renderer/types.d.ts +14 -0
  71. package/dist/renderer/types.d.ts.map +1 -0
  72. package/dist/renderer/types.js +2 -0
  73. package/dist/renderer/types.js.map +1 -0
  74. package/dist/runtime/index.d.ts +3 -0
  75. package/dist/runtime/index.d.ts.map +1 -0
  76. package/dist/runtime/index.js +2 -0
  77. package/dist/runtime/index.js.map +1 -0
  78. package/dist/runtime/runtime.d.ts +4 -0
  79. package/dist/runtime/runtime.d.ts.map +1 -0
  80. package/dist/runtime/runtime.js +213 -0
  81. package/dist/runtime/runtime.js.map +1 -0
  82. package/dist/runtime/types.d.ts +29 -0
  83. package/dist/runtime/types.d.ts.map +1 -0
  84. package/dist/runtime/types.js +2 -0
  85. package/dist/runtime/types.js.map +1 -0
  86. package/dist/schema/index.d.ts +2 -0
  87. package/dist/schema/index.d.ts.map +1 -0
  88. package/dist/schema/index.js +2 -0
  89. package/dist/schema/index.js.map +1 -0
  90. package/dist/schema/port.d.ts +34 -0
  91. package/dist/schema/port.d.ts.map +1 -0
  92. package/dist/schema/port.js +2 -0
  93. package/dist/schema/port.js.map +1 -0
  94. package/dist/state/index.d.ts +5 -0
  95. package/dist/state/index.d.ts.map +1 -0
  96. package/dist/state/index.js +3 -0
  97. package/dist/state/index.js.map +1 -0
  98. package/dist/state/signal.d.ts +12 -0
  99. package/dist/state/signal.d.ts.map +1 -0
  100. package/dist/state/signal.js +115 -0
  101. package/dist/state/signal.js.map +1 -0
  102. package/dist/state/store.d.ts +9 -0
  103. package/dist/state/store.d.ts.map +1 -0
  104. package/dist/state/store.js +10 -0
  105. package/dist/state/store.js.map +1 -0
  106. package/dist/types.d.ts +22 -0
  107. package/dist/types.d.ts.map +1 -0
  108. package/dist/types.js +2 -0
  109. package/dist/types.js.map +1 -0
  110. package/package.json +33 -0
@@ -0,0 +1,213 @@
1
+ import { compile } from '../ir/compiler.js';
2
+ import { processCommand } from '../commands/handler.js';
3
+ import { createStore } from '../state/store.js';
4
+ import { batch } from '../state/signal.js';
5
+ import { getAtPointer } from '../json-pointer.js';
6
+ function defaultNodeState(value) {
7
+ return {
8
+ value,
9
+ validation: { status: 'idle', errors: [] },
10
+ interaction: { dirty: false, touched: false, pristine: true, modified: false },
11
+ };
12
+ }
13
+ function createNodeStoreBundle(nodeState, uiNode) {
14
+ return {
15
+ value: createStore(nodeState.value),
16
+ errors: createStore(nodeState.validation.errors),
17
+ dirty: createStore(nodeState.interaction.dirty),
18
+ touched: createStore(nodeState.interaction.touched),
19
+ visible: createStore(uiNode.visible),
20
+ disabled: createStore(uiNode.disabled),
21
+ validationStatus: createStore(nodeState.validation.status),
22
+ };
23
+ }
24
+ export function createFormRuntime(port, options = {}) {
25
+ const initialData = options.initialData ?? {};
26
+ const projection = port.project(initialData);
27
+ const initialCompile = compile(projection, initialData, options.hints);
28
+ let currentDoc = initialCompile.document;
29
+ const documentStore = createStore(initialCompile.document);
30
+ const dataStore = createStore(initialData);
31
+ const submissionStore = createStore({ status: 'idle' });
32
+ const nodeStores = new Map();
33
+ const nodes = new Map();
34
+ for (const key of Object.keys(currentDoc.nodes)) {
35
+ const nodeId = key;
36
+ const uiNode = currentDoc.nodes[key];
37
+ const value = uiNode.dataPointer != null ? getAtPointer(initialData, uiNode.dataPointer) : undefined;
38
+ const nodeRuntimeState = defaultNodeState(value);
39
+ nodes.set(nodeId, nodeRuntimeState);
40
+ nodeStores.set(nodeId, createNodeStoreBundle(nodeRuntimeState, uiNode));
41
+ }
42
+ let state = {
43
+ data: initialData,
44
+ initialData,
45
+ nodes,
46
+ identities: initialCompile.identityMap,
47
+ submission: { status: 'idle' },
48
+ };
49
+ let destroyed = false;
50
+ function syncNodeStores() {
51
+ for (const [nodeId, nodeRuntimeState] of state.nodes) {
52
+ const bundle = nodeStores.get(nodeId);
53
+ if (!bundle)
54
+ continue;
55
+ bundle.value.set(nodeRuntimeState.value);
56
+ bundle.dirty.set(nodeRuntimeState.interaction.dirty);
57
+ bundle.touched.set(nodeRuntimeState.interaction.touched);
58
+ bundle.errors.set(nodeRuntimeState.validation.errors);
59
+ bundle.validationStatus.set(nodeRuntimeState.validation.status);
60
+ }
61
+ }
62
+ function handleRecompile() {
63
+ const nextProjection = port.project(state.data);
64
+ const result = compile(nextProjection, state.data, options.hints);
65
+ currentDoc = result.document;
66
+ state = { ...state, identities: result.identityMap };
67
+ documentStore.set(currentDoc);
68
+ const seenNodeIds = new Set();
69
+ for (const key of Object.keys(currentDoc.nodes)) {
70
+ const nodeId = key;
71
+ seenNodeIds.add(nodeId);
72
+ const uiNode = currentDoc.nodes[key];
73
+ const value = uiNode.dataPointer != null ? getAtPointer(state.data, uiNode.dataPointer) : undefined;
74
+ const bundle = nodeStores.get(nodeId);
75
+ if (bundle) {
76
+ // A node id can end up representing a different array position after
77
+ // an insert/remove/move shifts indices, since ids are assigned by
78
+ // traversal order rather than tracked per logical item. Re-derive
79
+ // `value` from the freshly recompiled data so the bundle reflects
80
+ // whatever this id now points at, while keeping the id's own
81
+ // interaction/validation history (dirty, touched, errors, status).
82
+ const previous = state.nodes.get(nodeId);
83
+ const nodeRuntimeState = previous
84
+ ? { ...previous, value }
85
+ : defaultNodeState(value);
86
+ state.nodes.set(nodeId, nodeRuntimeState);
87
+ bundle.value.set(nodeRuntimeState.value);
88
+ bundle.dirty.set(nodeRuntimeState.interaction.dirty);
89
+ bundle.touched.set(nodeRuntimeState.interaction.touched);
90
+ bundle.errors.set(nodeRuntimeState.validation.errors);
91
+ bundle.validationStatus.set(nodeRuntimeState.validation.status);
92
+ bundle.visible.set(uiNode.visible);
93
+ bundle.disabled.set(uiNode.disabled);
94
+ continue;
95
+ }
96
+ const nodeRuntimeState = defaultNodeState(value);
97
+ state.nodes.set(nodeId, nodeRuntimeState);
98
+ nodeStores.set(nodeId, createNodeStoreBundle(nodeRuntimeState, uiNode));
99
+ }
100
+ // Drop entries for node ids that no longer appear in the recompiled
101
+ // document (e.g. the trailing item after an array shrinks), so both
102
+ // maps don't grow without bound across the form's lifetime.
103
+ for (const nodeId of state.nodes.keys()) {
104
+ if (!seenNodeIds.has(nodeId)) {
105
+ state.nodes.delete(nodeId);
106
+ nodeStores.delete(nodeId);
107
+ }
108
+ }
109
+ }
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();
141
+ }
142
+ });
143
+ }
144
+ function runOnSubmit() {
145
+ return Promise.resolve(options.onSubmit?.(state.data))
146
+ .then(() => {
147
+ if (destroyed)
148
+ return;
149
+ batch(() => {
150
+ state = { ...state, submission: { status: 'submitted' } };
151
+ submissionStore.set(state.submission);
152
+ });
153
+ })
154
+ .catch((error) => {
155
+ if (destroyed)
156
+ return;
157
+ batch(() => {
158
+ state = { ...state, submission: { status: 'idle', error } };
159
+ submissionStore.set(state.submission);
160
+ });
161
+ });
162
+ }
163
+ function handleValidate() {
164
+ Promise.resolve(port.validate(state.data))
165
+ .then((result) => {
166
+ if (!destroyed)
167
+ applyValidationResult(result);
168
+ })
169
+ .catch(() => { });
170
+ }
171
+ function handleEffect(effect) {
172
+ switch (effect.type) {
173
+ case 'recompile':
174
+ handleRecompile();
175
+ break;
176
+ case 'validate':
177
+ handleValidate();
178
+ break;
179
+ default:
180
+ break;
181
+ }
182
+ }
183
+ function dispatch(command) {
184
+ if (destroyed)
185
+ return;
186
+ const { nextState, effects } = processCommand(state, command, currentDoc);
187
+ state = nextState;
188
+ batch(() => {
189
+ dataStore.set(state.data);
190
+ submissionStore.set(state.submission);
191
+ syncNodeStores();
192
+ for (const effect of effects) {
193
+ handleEffect(effect);
194
+ }
195
+ });
196
+ }
197
+ function getNodeState(nodeId) {
198
+ return nodeStores.get(nodeId);
199
+ }
200
+ function destroy() {
201
+ destroyed = true;
202
+ nodeStores.clear();
203
+ }
204
+ return {
205
+ document: documentStore,
206
+ data: dataStore,
207
+ submission: submissionStore,
208
+ dispatch,
209
+ getNodeState,
210
+ destroy,
211
+ };
212
+ }
213
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Store } from '../state/store.js';
2
+ import type { UIDocument } from '../ir/types.js';
3
+ import type { UIHints } from '../hints/types.js';
4
+ import type { Command } from '../commands/types.js';
5
+ import type { SubmissionState } from '../ir/runtime-state.js';
6
+ import type { NodeId, MaybePromise, ValidationError } from '../types.js';
7
+ export interface FormRuntimeOptions {
8
+ initialData?: unknown;
9
+ hints?: UIHints;
10
+ onSubmit?: (data: unknown) => MaybePromise<void>;
11
+ }
12
+ export interface NodeState {
13
+ readonly value: Store<unknown>;
14
+ readonly errors: Store<ValidationError[]>;
15
+ readonly dirty: Store<boolean>;
16
+ readonly touched: Store<boolean>;
17
+ readonly visible: Store<boolean>;
18
+ readonly disabled: Store<boolean>;
19
+ readonly validationStatus: Store<'idle' | 'pending' | 'valid' | 'invalid'>;
20
+ }
21
+ export interface FormRuntime {
22
+ readonly document: Store<UIDocument>;
23
+ readonly data: Store<unknown>;
24
+ readonly submission: Store<SubmissionState>;
25
+ dispatch(command: Command): void;
26
+ getNodeState(nodeId: NodeId): NodeState | undefined;
27
+ destroy(): void;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type { SchemaEvaluationPort, SchemaProjection, NodeProjection, ChildProjection, AnnotationSet, } from './port.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import type { JsonPointer, JsonSchemaType, MaybePromise, ValidationResult } from '../types.js';
2
+ import type { FieldConstraints, EnumOption } from '../ir/types.js';
3
+ export interface SchemaEvaluationPort {
4
+ project(data: unknown): SchemaProjection;
5
+ validate(data: unknown): MaybePromise<ValidationResult>;
6
+ validateAt?(data: unknown, pointer: JsonPointer): MaybePromise<ValidationResult>;
7
+ }
8
+ export interface SchemaProjection {
9
+ nodes: Map<JsonPointer, NodeProjection>;
10
+ }
11
+ export interface NodeProjection {
12
+ type: JsonSchemaType;
13
+ format?: string;
14
+ constraints: FieldConstraints;
15
+ children?: ChildProjection[];
16
+ enumValues?: EnumOption[];
17
+ active: boolean;
18
+ annotations: AnnotationSet;
19
+ }
20
+ export interface ChildProjection {
21
+ pointer: JsonPointer;
22
+ key: string;
23
+ required: boolean;
24
+ }
25
+ export interface AnnotationSet {
26
+ title?: string;
27
+ description?: string;
28
+ readOnly?: boolean;
29
+ writeOnly?: boolean;
30
+ deprecated?: boolean;
31
+ examples?: unknown[];
32
+ default?: unknown;
33
+ }
34
+ //# sourceMappingURL=port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/schema/port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAA;IAExC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAA;IAEvD,UAAU,CAAC,CACT,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,YAAY,CAAC,gBAAgB,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,gBAAgB,CAAA;IAC7B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;IAC5B,UAAU,CAAC,EAAE,UAAU,EAAE,CAAA;IACzB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,aAAa,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/schema/port.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export type { Store, WritableStore } from './store.js';
2
+ export { createStore } from './store.js';
3
+ export { createSignal, createComputed, batch, subscribeToSignal } from './signal.js';
4
+ export type { Signal, Computed } from './signal.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export { createStore } from './store.js';
2
+ export { createSignal, createComputed, batch, subscribeToSignal } from './signal.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,12 @@
1
+ export interface Signal<T> {
2
+ get(): T;
3
+ set(value: T): void;
4
+ }
5
+ export interface Computed<T> {
6
+ get(): T;
7
+ }
8
+ export declare function createSignal<T>(initialValue: T): Signal<T>;
9
+ export declare function createComputed<T>(fn: () => T): Computed<T>;
10
+ export declare function batch(fn: () => void): void;
11
+ export declare function subscribeToSignal<T>(source: Signal<T> | Computed<T>, listener: () => void): () => void;
12
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/state/signal.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,GAAG,IAAI,CAAC,CAAA;IACR,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,GAAG,IAAI,CAAC,CAAA;CACT;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE1D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAE1D;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAY1C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,MAAM,IAAI,GACnB,MAAM,IAAI,CAKZ"}
@@ -0,0 +1,115 @@
1
+ let currentComputation = null;
2
+ let batchDepth = 0;
3
+ const pendingNotifications = new Set();
4
+ export function createSignal(initialValue) {
5
+ return new SignalImpl(initialValue);
6
+ }
7
+ export function createComputed(fn) {
8
+ return new ComputedImpl(fn);
9
+ }
10
+ export function batch(fn) {
11
+ batchDepth++;
12
+ try {
13
+ fn();
14
+ }
15
+ finally {
16
+ batchDepth--;
17
+ if (batchDepth === 0) {
18
+ const fns = [...pendingNotifications];
19
+ pendingNotifications.clear();
20
+ for (const f of fns)
21
+ f();
22
+ }
23
+ }
24
+ }
25
+ export function subscribeToSignal(source, listener) {
26
+ const impl = source;
27
+ impl.subscribers.add(listener);
28
+ if (impl instanceof ComputedImpl)
29
+ impl.get();
30
+ return () => { impl.subscribers.delete(listener); };
31
+ }
32
+ class SignalImpl {
33
+ value;
34
+ dependents = new Set();
35
+ subscribers = new Set();
36
+ constructor(initialValue) {
37
+ this.value = initialValue;
38
+ }
39
+ get() {
40
+ if (currentComputation) {
41
+ this.dependents.add(currentComputation);
42
+ currentComputation.sources.add(this);
43
+ }
44
+ return this.value;
45
+ }
46
+ set(newValue) {
47
+ if (Object.is(this.value, newValue))
48
+ return;
49
+ this.value = newValue;
50
+ this.notify();
51
+ }
52
+ notify() {
53
+ for (const dep of this.dependents)
54
+ dep.markDirty();
55
+ if (batchDepth > 0) {
56
+ for (const fn of this.subscribers)
57
+ pendingNotifications.add(fn);
58
+ }
59
+ else {
60
+ for (const fn of this.subscribers)
61
+ fn();
62
+ }
63
+ }
64
+ }
65
+ class ComputedImpl {
66
+ value;
67
+ dirty = true;
68
+ fn;
69
+ sources = new Set();
70
+ dependents = new Set();
71
+ subscribers = new Set();
72
+ constructor(fn) {
73
+ this.fn = fn;
74
+ }
75
+ get() {
76
+ if (currentComputation) {
77
+ this.dependents.add(currentComputation);
78
+ currentComputation.sources.add(this);
79
+ }
80
+ if (this.dirty)
81
+ this.recompute();
82
+ return this.value;
83
+ }
84
+ markDirty() {
85
+ if (this.dirty)
86
+ return;
87
+ this.dirty = true;
88
+ for (const dep of this.dependents)
89
+ dep.markDirty();
90
+ if (batchDepth > 0) {
91
+ for (const fn of this.subscribers)
92
+ pendingNotifications.add(fn);
93
+ }
94
+ else {
95
+ for (const fn of this.subscribers)
96
+ fn();
97
+ }
98
+ }
99
+ recompute() {
100
+ for (const source of this.sources) {
101
+ source.dependents.delete(this);
102
+ }
103
+ this.sources.clear();
104
+ const prev = currentComputation;
105
+ currentComputation = this;
106
+ try {
107
+ this.value = this.fn();
108
+ }
109
+ finally {
110
+ currentComputation = prev;
111
+ }
112
+ this.dirty = false;
113
+ }
114
+ }
115
+ //# sourceMappingURL=signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/state/signal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface Store<T> {
2
+ getSnapshot(): T;
3
+ subscribe(listener: () => void): () => void;
4
+ }
5
+ export interface WritableStore<T> extends Store<T> {
6
+ set(value: T): void;
7
+ }
8
+ export declare function createStore<T>(initialValue: T): WritableStore<T>;
9
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ import { createSignal, subscribeToSignal } from './signal.js';
2
+ export function createStore(initialValue) {
3
+ const signal = createSignal(initialValue);
4
+ return {
5
+ getSnapshot: () => signal.get(),
6
+ subscribe: (listener) => subscribeToSignal(signal, listener),
7
+ set: (value) => signal.set(value),
8
+ };
9
+ }
10
+ //# sourceMappingURL=store.js.map
@@ -0,0 +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"}
@@ -0,0 +1,22 @@
1
+ export type NodeId = string & {
2
+ __brand: 'NodeId';
3
+ };
4
+ export type StableItemId = string & {
5
+ __brand: 'StableItemId';
6
+ };
7
+ export type JsonPointer = string & {
8
+ __brand: 'JsonPointer';
9
+ };
10
+ export type MaybePromise<T> = T | Promise<T>;
11
+ export type JsonSchemaType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'null';
12
+ export interface ValidationResult {
13
+ valid: boolean;
14
+ errors: ValidationError[];
15
+ }
16
+ export interface ValidationError {
17
+ instancePointer: string;
18
+ keyword: string;
19
+ message?: string;
20
+ params: Record<string, unknown>;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@texaryn/core",
3
+ "version": "0.0.0",
4
+ "description": "Framework-neutral UI IR, compiler, runtime, and renderer registry for schema-driven forms",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/texaryn/texaryn.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "homepage": "https://github.com/texaryn/texaryn#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/texaryn/texaryn/issues"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc --build"
32
+ }
33
+ }