@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.
- package/LICENSE +190 -0
- package/dist/commands/handler.d.ts +5 -0
- package/dist/commands/handler.d.ts.map +1 -0
- package/dist/commands/handler.js +151 -0
- package/dist/commands/handler.js.map +1 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/types.d.ts +49 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/hints/index.d.ts +2 -0
- package/dist/hints/index.d.ts.map +1 -0
- package/dist/hints/index.js +2 -0
- package/dist/hints/index.js.map +1 -0
- package/dist/hints/types.d.ts +18 -0
- package/dist/hints/types.d.ts.map +1 -0
- package/dist/hints/types.js +2 -0
- package/dist/hints/types.js.map +1 -0
- package/dist/identity/index.d.ts +4 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +3 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/map.d.ts +15 -0
- package/dist/identity/map.d.ts.map +1 -0
- package/dist/identity/map.js +64 -0
- package/dist/identity/map.js.map +1 -0
- package/dist/identity/reconcile.d.ts +7 -0
- package/dist/identity/reconcile.d.ts.map +1 -0
- package/dist/identity/reconcile.js +56 -0
- package/dist/identity/reconcile.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/compiler-types.d.ts +7 -0
- package/dist/ir/compiler-types.d.ts.map +1 -0
- package/dist/ir/compiler-types.js +2 -0
- package/dist/ir/compiler-types.js.map +1 -0
- package/dist/ir/compiler.d.ts +5 -0
- package/dist/ir/compiler.d.ts.map +1 -0
- package/dist/ir/compiler.js +126 -0
- package/dist/ir/compiler.js.map +1 -0
- package/dist/ir/index.d.ts +5 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +2 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/runtime-state.d.ts +36 -0
- package/dist/ir/runtime-state.d.ts.map +1 -0
- package/dist/ir/runtime-state.js +2 -0
- package/dist/ir/runtime-state.js.map +1 -0
- package/dist/ir/types.d.ts +81 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +2 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/json-pointer.d.ts +5 -0
- package/dist/json-pointer.d.ts.map +1 -0
- package/dist/json-pointer.js +46 -0
- package/dist/json-pointer.js.map +1 -0
- package/dist/renderer/index.d.ts +3 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +2 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/registry.d.ts +3 -0
- package/dist/renderer/registry.d.ts.map +1 -0
- package/dist/renderer/registry.js +20 -0
- package/dist/renderer/registry.js.map +1 -0
- package/dist/renderer/types.d.ts +14 -0
- package/dist/renderer/types.d.ts.map +1 -0
- package/dist/renderer/types.js +2 -0
- package/dist/renderer/types.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/runtime.d.ts +4 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +213 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/types.d.ts +29 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/port.d.ts +34 -0
- package/dist/schema/port.d.ts.map +1 -0
- package/dist/schema/port.js +2 -0
- package/dist/schema/port.js.map +1 -0
- package/dist/state/index.d.ts +5 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +3 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/signal.d.ts +12 -0
- package/dist/state/signal.d.ts.map +1 -0
- package/dist/state/signal.js +115 -0
- package/dist/state/signal.js.map +1 -0
- package/dist/state/store.d.ts +9 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +10 -0
- package/dist/state/store.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|