@elaraai/e3-ui 1.0.83 → 1.0.85
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/dist/src/bind/data.d.ts +4 -3
- package/dist/src/bind/data.d.ts.map +1 -1
- package/dist/src/bind/data.js +4 -3
- package/dist/src/bind/data.js.map +1 -1
- package/dist/src/bind/record.d.ts +234 -6
- package/dist/src/bind/record.d.ts.map +1 -1
- package/dist/src/bind/record.js +250 -7
- package/dist/src/bind/record.js.map +1 -1
- package/dist/src/bind/sources.d.ts +148 -0
- package/dist/src/bind/sources.d.ts.map +1 -0
- package/dist/src/bind/sources.js +116 -0
- package/dist/src/bind/sources.js.map +1 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +4 -1
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +11 -1
- package/dist/src/internal.js.map +1 -1
- package/dist/src/query/builder.d.ts +3257 -0
- package/dist/src/query/builder.d.ts.map +1 -0
- package/dist/src/query/builder.js +126 -0
- package/dist/src/query/builder.js.map +1 -0
- package/dist/src/query/index.d.ts +108 -0
- package/dist/src/query/index.d.ts.map +1 -0
- package/dist/src/query/index.js +76 -0
- package/dist/src/query/index.js.map +1 -0
- package/dist/src/query/library.d.ts +3241 -0
- package/dist/src/query/library.d.ts.map +1 -0
- package/dist/src/query/library.js +114 -0
- package/dist/src/query/library.js.map +1 -0
- package/dist/src/query/queries.d.ts +4696 -0
- package/dist/src/query/queries.d.ts.map +1 -0
- package/dist/src/query/queries.js +129 -0
- package/dist/src/query/queries.js.map +1 -0
- package/dist/src/query/saved.d.ts +72 -0
- package/dist/src/query/saved.d.ts.map +1 -0
- package/dist/src/query/saved.js +84 -0
- package/dist/src/query/saved.js.map +1 -0
- package/dist/src/query/steps.d.ts +613 -0
- package/dist/src/query/steps.d.ts.map +1 -0
- package/dist/src/query/steps.js +316 -0
- package/dist/src/query/steps.js.map +1 -0
- package/dist/src/query/types.d.ts +444 -0
- package/dist/src/query/types.d.ts.map +1 -0
- package/dist/src/query/types.js +113 -0
- package/dist/src/query/types.js.map +1 -0
- package/dist/src/studio/builder.d.ts +3123 -0
- package/dist/src/studio/builder.d.ts.map +1 -0
- package/dist/src/studio/builder.js +115 -0
- package/dist/src/studio/builder.js.map +1 -0
- package/dist/src/studio/canvas.d.ts +83 -0
- package/dist/src/studio/canvas.d.ts.map +1 -0
- package/dist/src/studio/canvas.js +71 -0
- package/dist/src/studio/canvas.js.map +1 -0
- package/dist/src/studio/component.d.ts +178 -0
- package/dist/src/studio/component.d.ts.map +1 -0
- package/dist/src/studio/component.js +189 -0
- package/dist/src/studio/component.js.map +1 -0
- package/dist/src/studio/index.d.ts +104 -0
- package/dist/src/studio/index.d.ts.map +1 -0
- package/dist/src/studio/index.js +75 -0
- package/dist/src/studio/index.js.map +1 -0
- package/dist/src/studio/inspector.d.ts +208 -0
- package/dist/src/studio/inspector.d.ts.map +1 -0
- package/dist/src/studio/inspector.js +155 -0
- package/dist/src/studio/inspector.js.map +1 -0
- package/dist/src/studio/library.d.ts +3506 -0
- package/dist/src/studio/library.d.ts.map +1 -0
- package/dist/src/studio/library.js +245 -0
- package/dist/src/studio/library.js.map +1 -0
- package/dist/src/studio/page.d.ts +305 -0
- package/dist/src/studio/page.d.ts.map +1 -0
- package/dist/src/studio/page.js +105 -0
- package/dist/src/studio/page.js.map +1 -0
- package/dist/src/studio/pages.d.ts +10929 -0
- package/dist/src/studio/pages.d.ts.map +1 -0
- package/dist/src/studio/pages.js +502 -0
- package/dist/src/studio/pages.js.map +1 -0
- package/dist/src/studio/palette.d.ts +179 -0
- package/dist/src/studio/palette.d.ts.map +1 -0
- package/dist/src/studio/palette.js +120 -0
- package/dist/src/studio/palette.js.map +1 -0
- package/dist/src/studio/publish.d.ts +397 -0
- package/dist/src/studio/publish.d.ts.map +1 -0
- package/dist/src/studio/publish.js +198 -0
- package/dist/src/studio/publish.js.map +1 -0
- package/dist/src/ui.d.ts +16 -3
- package/dist/src/ui.d.ts.map +1 -1
- package/dist/src/ui.js +21 -1
- package/dist/src/ui.js.map +1 -1
- package/dist/test/bind/data/data.examples.d.ts +76 -1
- package/dist/test/bind/data/data.examples.d.ts.map +1 -1
- package/dist/test/bind/data/data.examples.js +176 -3
- package/dist/test/bind/data/data.examples.js.map +1 -1
- package/dist/test/bind/func/func.examples.d.ts +8 -0
- package/dist/test/bind/func/func.examples.d.ts.map +1 -1
- package/dist/test/bind/func/func.examples.js +4 -3
- package/dist/test/bind/func/func.examples.js.map +1 -1
- package/dist/test/bind/record/record.examples.d.ts +65 -1
- package/dist/test/bind/record/record.examples.d.ts.map +1 -1
- package/dist/test/bind/record/record.examples.js +21 -3
- package/dist/test/bind/record/record.examples.js.map +1 -1
- package/dist/test/query/query.examples.d.ts +5022 -0
- package/dist/test/query/query.examples.d.ts.map +1 -0
- package/dist/test/query/query.examples.js +467 -0
- package/dist/test/query/query.examples.js.map +1 -0
- package/dist/test/studio/component.examples.d.ts +7 -0
- package/dist/test/studio/component.examples.d.ts.map +1 -0
- package/dist/test/studio/component.examples.js +46 -0
- package/dist/test/studio/component.examples.js.map +1 -0
- package/dist/test/studio/page.examples.d.ts +7 -0
- package/dist/test/studio/page.examples.d.ts.map +1 -0
- package/dist/test/studio/page.examples.js +64 -0
- package/dist/test/studio/page.examples.js.map +1 -0
- package/dist/test/studio/studio.examples.d.ts +1766 -0
- package/dist/test/studio/studio.examples.d.ts.map +1 -0
- package/dist/test/studio/studio.examples.js +354 -0
- package/dist/test/studio/studio.examples.js.map +1 -0
- package/package.json +9 -8
package/dist/src/bind/record.js
CHANGED
|
@@ -15,10 +15,16 @@
|
|
|
15
15
|
* latest-wins mutation lifecycle. A record's mutations serialize server-side
|
|
16
16
|
* under compare-and-swap, so one shared channel per record is the honest model.
|
|
17
17
|
*
|
|
18
|
+
* `commit.<name>(…)` is the same write awaited: an async closure that resolves
|
|
19
|
+
* to the server's terminal outcome. `Record.onApply` builds on it — an
|
|
20
|
+
* editable collection's `onApply` that commits each batch to the record
|
|
21
|
+
* through its patch door, as one commit.
|
|
22
|
+
*
|
|
18
23
|
* @packageDocumentation
|
|
19
24
|
*/
|
|
20
|
-
import { East, ArrayType, BooleanType, FunctionType, IntegerType, NullType, OptionType, StringType, StructType, VariantType, } from '@elaraai/east';
|
|
21
|
-
import { DatasetStatusType, RecordCommitInfoType } from '@elaraai/e3-types';
|
|
25
|
+
import { East, ArrayType, AsyncFunctionType, BooleanType, DictType, Expr, FunctionType, IntegerType, NullType, OptionType, PatchType, StringType, StructType, VariantType, dictPatchOpsType, isTypeEqual, none, printType, some, variant, } from '@elaraai/east';
|
|
26
|
+
import { DatasetStatusType, MutationResultType, RecordCommitInfoType } from '@elaraai/e3-types';
|
|
27
|
+
import { Editing } from '@elaraai/east-ui';
|
|
22
28
|
// ============================================================================
|
|
23
29
|
// Status + error + descriptor types
|
|
24
30
|
// ============================================================================
|
|
@@ -79,6 +85,29 @@ export const RecordBindingType = StructType({
|
|
|
79
85
|
name: StringType,
|
|
80
86
|
mutations: ArrayType(StringType),
|
|
81
87
|
});
|
|
88
|
+
/**
|
|
89
|
+
* The outcome of an awaited write (`commit.<name>`): the server's terminal
|
|
90
|
+
* `MutationResult`, passed on as it came, and `transport` for a call that got
|
|
91
|
+
* no answer.
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* Only `committed` wrote anything. `transport` is the one outcome that leaves
|
|
95
|
+
* it unknown whether the write committed — it may have reached the server
|
|
96
|
+
* before its answer was lost — which is what the write's request id is for: a
|
|
97
|
+
* retry with the same id resolves to that commit instead of writing twice.
|
|
98
|
+
*
|
|
99
|
+
* @property committed - The new commit, and the record state it wrote
|
|
100
|
+
* @property invalid - A lookup, arity or signature error; nothing ran
|
|
101
|
+
* @property failed - The mutation's program failed; see its stderr
|
|
102
|
+
* @property timed_out - The program ran out of time; nothing was written
|
|
103
|
+
* @property conflict - The compare-and-swap lost the race `attempts` times, or
|
|
104
|
+
* the write no longer matched the record — then `detail` names the key
|
|
105
|
+
* @property transport - The call got no answer, so whether it committed is unknown
|
|
106
|
+
*/
|
|
107
|
+
export const RecordOutcomeType = VariantType({
|
|
108
|
+
...MutationResultType.fields.outcome.cases,
|
|
109
|
+
transport: StructType({ message: StringType }),
|
|
110
|
+
});
|
|
82
111
|
// ============================================================================
|
|
83
112
|
// Bind handle — return type of `Record.bind`.
|
|
84
113
|
// ============================================================================
|
|
@@ -86,7 +115,7 @@ export const RecordBindingType = StructType({
|
|
|
86
115
|
* The struct returned by every {@link Record.bind} call. The read side
|
|
87
116
|
* (`read` / `status` / `history`) is served reactively from the shared dataset
|
|
88
117
|
* cache; the write side lives under `mutate` — one closure per mutation plus
|
|
89
|
-
* the shared lifecycle accessors.
|
|
118
|
+
* the shared lifecycle accessors — and under `commit`, the same writes awaited.
|
|
90
119
|
*
|
|
91
120
|
* @remarks
|
|
92
121
|
* The handle's shape IS the signature: the runtime recovers the state type
|
|
@@ -102,11 +131,22 @@ export const RecordBindingType = StructType({
|
|
|
102
131
|
* @property read - The record's current committed state. Reactive — re-fires
|
|
103
132
|
* when a mutation commits (the dataset cache refreshes the record's bytes).
|
|
104
133
|
* @property status - Per-dataset freshness signal — see {@link DatasetStatusType}.
|
|
105
|
-
* @property history - The commit chain, newest first
|
|
106
|
-
*
|
|
134
|
+
* @property history - The commit chain, newest first, as far as one request is
|
|
135
|
+
* answered: all of it, unless the server's host pages a record's history
|
|
136
|
+
* (e3-api-server's `historyLimit`), when it is the newest page; `none` until
|
|
137
|
+
* the first load completes, then the cached chain (refreshed after each
|
|
138
|
+
* commit).
|
|
107
139
|
* @property mutate - The write surface: one fire-and-forget closure per
|
|
108
140
|
* mutation (typed from its def), plus the shared `pending` / `status` /
|
|
109
141
|
* `error` / `cancel`.
|
|
142
|
+
* @property commit - The writes awaited: one async closure per mutation,
|
|
143
|
+
* taking a request id before the mutation's own arguments and resolving to
|
|
144
|
+
* its {@link RecordOutcomeType}. The id makes a retry after an unanswered
|
|
145
|
+
* call resolve to the first call's commit rather than writing twice; `""`
|
|
146
|
+
* is a write without one. It runs on `mutate`'s channel, so `pending` /
|
|
147
|
+
* `status` / `error` show it too, and a conflict reads the record and its
|
|
148
|
+
* history again before the outcome settles — `read` and `history` then show
|
|
149
|
+
* what the write lost to.
|
|
110
150
|
* @property start - Launch the workspace dataflow without mutating, so tasks
|
|
111
151
|
* that consume this record recompute against its latest committed state.
|
|
112
152
|
* The standalone "Run" affordance — a mutation refreshes the record's own
|
|
@@ -121,18 +161,21 @@ export const RecordBindHandleType = (stateType, mutations) => {
|
|
|
121
161
|
error: FunctionType([], OptionType(RecordErrorType)),
|
|
122
162
|
cancel: FunctionType([], NullType),
|
|
123
163
|
};
|
|
164
|
+
const commitFields = {};
|
|
124
165
|
for (const [name, argTypes] of Object.entries(mutations)) {
|
|
125
166
|
if (name in mutateFields) {
|
|
126
167
|
throw new Error(`Record.bind: mutation name "${name}" collides with a reserved mutate ` +
|
|
127
168
|
`field (pending/status/error/cancel). Rename the mutation.`);
|
|
128
169
|
}
|
|
129
170
|
mutateFields[name] = FunctionType(argTypes, NullType);
|
|
171
|
+
commitFields[name] = AsyncFunctionType([StringType, ...argTypes], RecordOutcomeType);
|
|
130
172
|
}
|
|
131
173
|
return StructType({
|
|
132
174
|
read: FunctionType([], stateType),
|
|
133
175
|
status: FunctionType([], DatasetStatusType),
|
|
134
176
|
history: FunctionType([], OptionType(ArrayType(RecordCommitInfoType))),
|
|
135
177
|
mutate: StructType(mutateFields),
|
|
178
|
+
commit: StructType(commitFields),
|
|
136
179
|
start: FunctionType([], NullType),
|
|
137
180
|
binding: RecordBindingType,
|
|
138
181
|
});
|
|
@@ -166,6 +209,7 @@ export const recordBindPlatformFn = East.genericPlatform("record_bind", ["H"], [
|
|
|
166
209
|
// `record_mutate` is generic over the per-mutation `ArgsStruct` `A` (the N args
|
|
167
210
|
// bundled into one struct, since platform fns are fixed-arity): the impl recovers
|
|
168
211
|
// the per-arg types from `A`'s fields and the values from the passed struct.
|
|
212
|
+
// `record_commit` is its awaited sibling, which takes the write's request id too.
|
|
169
213
|
const record_read = East.genericPlatform("record_read", ["T"], [StringType], "T", { optional: true });
|
|
170
214
|
const record_status = East.platform("record_status", [StringType], DatasetStatusType, { optional: true });
|
|
171
215
|
const record_history = East.platform("record_history", [StringType], OptionType(ArrayType(RecordCommitInfoType)), { optional: true });
|
|
@@ -175,6 +219,7 @@ const record_mutate_status = East.platform("record_mutate_status", [StringType],
|
|
|
175
219
|
const record_mutate_error = East.platform("record_mutate_error", [StringType], OptionType(RecordErrorType), { optional: true });
|
|
176
220
|
const record_mutate_cancel = East.platform("record_mutate_cancel", [StringType], NullType, { optional: true });
|
|
177
221
|
const record_mutate = East.genericPlatform("record_mutate", ["A"], [StringType, StringType, "A"], NullType, { optional: true });
|
|
222
|
+
const record_commit = East.asyncGenericPlatform("record_commit", ["A"], [StringType, StringType, StringType, "A"], RecordOutcomeType, { optional: true });
|
|
178
223
|
/**
|
|
179
224
|
* Low-level platform primitives that back {@link Record.bind}'s handle methods.
|
|
180
225
|
*
|
|
@@ -201,6 +246,8 @@ export const RecordBindPrimitives = {
|
|
|
201
246
|
mutateCancel: record_mutate_cancel,
|
|
202
247
|
/** `record_mutate([ArgsStruct], recordName, mutationName, argsStruct) -> Null`. */
|
|
203
248
|
mutate: record_mutate,
|
|
249
|
+
/** `record_commit([ArgsStruct], recordName, mutationName, requestId, argsStruct) ~> RecordOutcome` — the awaited write. */
|
|
250
|
+
commit: record_commit,
|
|
204
251
|
};
|
|
205
252
|
// ============================================================================
|
|
206
253
|
// User-facing factory.
|
|
@@ -267,20 +314,216 @@ function bindRecord(record, mutations) {
|
|
|
267
314
|
const nameValue = East.value(record.name, StringType);
|
|
268
315
|
return recordBindPlatformFn([handleType], nameValue);
|
|
269
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* An awaited write's outcome as the editing session's answer. A commit is
|
|
319
|
+
* applied at the record state it wrote, which a pinned source installs; a
|
|
320
|
+
* conflict carries the issues naming what went stale; anything else refused
|
|
321
|
+
* the write. A call that got no answer may have committed, so it throws: the
|
|
322
|
+
* session keeps the request, and its retry sends the same request id, which
|
|
323
|
+
* resolves to that commit rather than writing twice.
|
|
324
|
+
*/
|
|
325
|
+
const settleWrite = East.function([RecordOutcomeType, ArrayType(Editing.Types.Issue)], Editing.Types.ApplyResult, ($, outcome, conflicts) => {
|
|
326
|
+
const result = $.let(variant("conflict", conflicts), Editing.Types.ApplyResult);
|
|
327
|
+
$.match(outcome, {
|
|
328
|
+
committed: ($, done) => { $.assign(result, variant("applied", { revision: some(done.stateHash) })); },
|
|
329
|
+
invalid: ($, refused) => {
|
|
330
|
+
$.assign(result, variant("rejected", [{ entry: "", row: none, field: none, message: refused.message }]));
|
|
331
|
+
},
|
|
332
|
+
failed: ($, refused) => {
|
|
333
|
+
$.assign(result, variant("rejected", [{ entry: "", row: none, field: none, message: East.str `The write failed: ${refused.stderr}` }]));
|
|
334
|
+
},
|
|
335
|
+
timed_out: ($, refused) => {
|
|
336
|
+
$.assign(result, variant("rejected", [{ entry: "", row: none, field: none, message: East.str `The write ran out of time after ${refused.ms} ms and wrote nothing` }]));
|
|
337
|
+
},
|
|
338
|
+
transport: ($, lost) => {
|
|
339
|
+
$.error(East.str `The write got no answer, so it may have committed — retry to find out: ${lost.message}`);
|
|
340
|
+
},
|
|
341
|
+
});
|
|
342
|
+
return result;
|
|
343
|
+
});
|
|
344
|
+
function applyToRecord(handle, options = {}) {
|
|
345
|
+
const fields = Expr.type(handle).fields;
|
|
346
|
+
const recordType = fields["read"].output;
|
|
347
|
+
if (recordType.type !== "Dict") {
|
|
348
|
+
throw new Error(`Record.onApply: an Apply writes a record's entries by key, so the record must be a Dict — ` +
|
|
349
|
+
`this one holds ${printType(recordType)}`);
|
|
350
|
+
}
|
|
351
|
+
const mutation = options.mutation ?? "patch";
|
|
352
|
+
const commits = fields["commit"];
|
|
353
|
+
const door = commits?.type === "Struct" ? commits.fields[mutation] : undefined;
|
|
354
|
+
if (door === undefined || !isTypeEqual(door, AsyncFunctionType([StringType, PatchType(recordType)], RecordOutcomeType))) {
|
|
355
|
+
throw new Error(`Record.onApply: "${mutation}" is not bound as this record's patch door — bind the record with ` +
|
|
356
|
+
`e3.mutation.patch(record${mutation === "patch" ? "" : `, "${mutation}"`}) among its mutations`);
|
|
357
|
+
}
|
|
358
|
+
// The handle's fields as the Apply reads them; entries are opaque here, as
|
|
359
|
+
// in Editing.apply, and their runtime types are exact.
|
|
360
|
+
const bound = handle;
|
|
361
|
+
const write = bound.commit[mutation];
|
|
362
|
+
// Who changed the record last, for a conflict's words. A conflict reads the
|
|
363
|
+
// history again before the write settles, so it is current.
|
|
364
|
+
const lastChange = East.function([], StringType, (_$) => bound.history().match({
|
|
365
|
+
some: (_$2, commits) => commits.tryGet(0n).match({
|
|
366
|
+
some: (_$3, head) => East.str ` — last changed by ${head.actor}`,
|
|
367
|
+
none: (_$3) => East.str ``,
|
|
368
|
+
}),
|
|
369
|
+
none: (_$2) => East.str ``,
|
|
370
|
+
}));
|
|
371
|
+
if ("entry" in options) {
|
|
372
|
+
const entryType = recordType.value;
|
|
373
|
+
const get = East.value(options.get);
|
|
374
|
+
const read = Expr.type(get);
|
|
375
|
+
if (read.type !== "Function" || read.inputs.length !== 1 || !isTypeEqual(read.inputs[0], entryType)
|
|
376
|
+
|| read.output.type !== "Array" || read.output.value.type !== "Struct") {
|
|
377
|
+
throw new Error("Record.onApply: `get` must be an East function from the record's entry to an Array of row structs");
|
|
378
|
+
}
|
|
379
|
+
const rowType = read.output.value;
|
|
380
|
+
const rowsType = ArrayType(rowType);
|
|
381
|
+
const set = East.value(options.set);
|
|
382
|
+
const replace = Expr.type(set);
|
|
383
|
+
if (replace.type !== "Function" || replace.inputs.length !== 2 || !isTypeEqual(replace.inputs[0], entryType)
|
|
384
|
+
|| !isTypeEqual(replace.inputs[1], rowsType) || !isTypeEqual(replace.output, entryType)) {
|
|
385
|
+
throw new Error("Record.onApply: `set` must be an East function from the record's entry and its new rows to the entry");
|
|
386
|
+
}
|
|
387
|
+
const entryKey = East.value(options.entry, recordType.key);
|
|
388
|
+
const apply = Editing.apply(rowType, options.idField);
|
|
389
|
+
return East.asyncFunction([Editing.Types.ChangeSet(rowType)], Editing.Types.ApplyResult, ($, batch) => {
|
|
390
|
+
const rowsOf = $.const(get);
|
|
391
|
+
const withRows = $.const(set);
|
|
392
|
+
const applyRows = $.const(apply);
|
|
393
|
+
const commit = $.const(write);
|
|
394
|
+
const settle = $.const(settleWrite);
|
|
395
|
+
const changedBy = $.const(lastChange);
|
|
396
|
+
const key = $.const(entryKey);
|
|
397
|
+
const result = $.let(variant("conflict", []), Editing.Types.ApplyResult);
|
|
398
|
+
$.match(batch.base, {
|
|
399
|
+
revision: ($) => {
|
|
400
|
+
$.assign(result, variant("rejected", [{ entry: "", row: none, field: none,
|
|
401
|
+
message: "Rows inside a record entry are checked against the rows the edit began from — a snapshot, never a revision" }]));
|
|
402
|
+
},
|
|
403
|
+
snapshot: ($, rows) => {
|
|
404
|
+
$.match(bound.read().tryGet(key), {
|
|
405
|
+
none: ($) => {
|
|
406
|
+
$.assign(result, variant("conflict", [{ entry: "", row: none, field: none,
|
|
407
|
+
message: East.str `The entry was removed since this edit began${changedBy()}` }]));
|
|
408
|
+
},
|
|
409
|
+
some: ($, current) => {
|
|
410
|
+
$.match(applyRows(rows, batch, none), {
|
|
411
|
+
conflict: ($, issues) => { $.assign(result, variant("conflict", issues)); },
|
|
412
|
+
applied: ($, next) => {
|
|
413
|
+
const now = $.const(rowsOf(current));
|
|
414
|
+
// Moved since the edit began — unless to this very edit's
|
|
415
|
+
// rows, which a retry after an unanswered write finds.
|
|
416
|
+
$.if(East.notEqual(now, rows).and(() => East.notEqual(now, next)), ($) => {
|
|
417
|
+
$.assign(result, variant("conflict", [{ entry: "", row: none, field: none,
|
|
418
|
+
message: East.str `The entry changed since this edit began${changedBy()}` }]));
|
|
419
|
+
}).else(($) => {
|
|
420
|
+
// The entry before and after the edit, each alone in a record:
|
|
421
|
+
// their diff reaches the entry's rows and nothing else.
|
|
422
|
+
const before = $.let(new Map(), recordType);
|
|
423
|
+
$(before.insert(key, withRows(current, rows)));
|
|
424
|
+
const after = $.let(new Map(), recordType);
|
|
425
|
+
$(after.insert(key, withRows(current, next)));
|
|
426
|
+
const outcome = $.const(commit(batch.requestId, East.diff(before, after)));
|
|
427
|
+
const conflicts = $.let([], ArrayType(Editing.Types.Issue));
|
|
428
|
+
$.match(outcome, {
|
|
429
|
+
conflict: ($) => {
|
|
430
|
+
$(conflicts.pushLast({ entry: "", row: none, field: none,
|
|
431
|
+
message: East.str `The entry changed since this edit began${changedBy()}` }));
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
$.assign(result, settle(outcome, conflicts));
|
|
435
|
+
});
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
},
|
|
439
|
+
});
|
|
440
|
+
},
|
|
441
|
+
});
|
|
442
|
+
return result;
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
const keyType = recordType.key;
|
|
446
|
+
const entryType = recordType.value;
|
|
447
|
+
const batchType = "keyed" in options && options.keyed === true
|
|
448
|
+
? Editing.Types.ChangeSet(entryType, keyType)
|
|
449
|
+
: Editing.Types.ChangeSet(entryType);
|
|
450
|
+
// A change names its entry by the key's text: a String key is its own
|
|
451
|
+
// text, any other key its `.east` printing, read back here.
|
|
452
|
+
const keyOf = keyType.type === "String"
|
|
453
|
+
? East.function([StringType], StringType, (_$, id) => id)
|
|
454
|
+
: East.function([StringType], keyType, (_$, id) => id.parse(keyType));
|
|
455
|
+
return East.asyncFunction([batchType], Editing.Types.ApplyResult, ($, batch) => {
|
|
456
|
+
const keyFrom = $.const(keyOf);
|
|
457
|
+
const commit = $.const(write);
|
|
458
|
+
const settle = $.const(settleWrite);
|
|
459
|
+
const changedBy = $.const(lastChange);
|
|
460
|
+
// Each change is its entry's insert, update or delete, restated by key.
|
|
461
|
+
// The values and entry patches are the batch's own, carrying what each
|
|
462
|
+
// entry was when the edit began, which the record checks.
|
|
463
|
+
const ops = $.let(new Map(), DictType(keyType, dictPatchOpsType(entryType)));
|
|
464
|
+
$.for(batch.changes, ($, change) => {
|
|
465
|
+
const key = $.const(keyFrom(change.id));
|
|
466
|
+
$.match(change.patch, {
|
|
467
|
+
replace: ($, swap) => {
|
|
468
|
+
$.match(swap.after, {
|
|
469
|
+
some: ($, after) => {
|
|
470
|
+
$.match(swap.before, {
|
|
471
|
+
none: ($) => { $(ops.insert(key, variant("insert", after))); },
|
|
472
|
+
some: ($, before) => { $(ops.insert(key, variant("update", East.diff(before, after)))); },
|
|
473
|
+
});
|
|
474
|
+
},
|
|
475
|
+
none: ($) => {
|
|
476
|
+
$.match(swap.before, { some: ($, before) => { $(ops.insert(key, variant("delete", before))); } });
|
|
477
|
+
},
|
|
478
|
+
});
|
|
479
|
+
},
|
|
480
|
+
patch: ($, entry) => {
|
|
481
|
+
$.match(entry, { some: ($, update) => { $(ops.insert(key, variant("update", update))); } });
|
|
482
|
+
},
|
|
483
|
+
});
|
|
484
|
+
});
|
|
485
|
+
const outcome = $.const(commit(batch.requestId, variant("patch", ops)));
|
|
486
|
+
const conflicts = $.let([], ArrayType(Editing.Types.Issue));
|
|
487
|
+
$.match(outcome, {
|
|
488
|
+
conflict: ($) => {
|
|
489
|
+
// The entries whose change no longer applies to the record as it
|
|
490
|
+
// stands are the ones another write moved.
|
|
491
|
+
const current = $.const(bound.read());
|
|
492
|
+
const by = $.const(changedBy());
|
|
493
|
+
$.for(batch.changes, ($, change) => {
|
|
494
|
+
const key = $.const(keyFrom(change.id));
|
|
495
|
+
$.try(($) => {
|
|
496
|
+
$(East.applyPatch(current.tryGet(key), change.patch));
|
|
497
|
+
}).catch(($) => {
|
|
498
|
+
$(conflicts.pushLast({ entry: change.id, row: none, field: none, message: East.str `Changed since this edit began${by}` }));
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
$.if(conflicts.size().equal(0n), ($) => {
|
|
502
|
+
$(conflicts.pushLast({ entry: "", row: none, field: none, message: East.str `The record changed since this edit began${by}` }));
|
|
503
|
+
});
|
|
504
|
+
},
|
|
505
|
+
});
|
|
506
|
+
return settle(outcome, conflicts);
|
|
507
|
+
});
|
|
508
|
+
}
|
|
270
509
|
/**
|
|
271
510
|
* The Record namespace — reactive record (read + mutate + history) binding for
|
|
272
|
-
* e3 UI tasks.
|
|
511
|
+
* e3 UI tasks, and the Apply that commits an editable collection to a record.
|
|
273
512
|
*
|
|
274
513
|
* @remarks
|
|
275
514
|
* `Record.bind` binds an `e3.record` and its mutations to a handle: `read` /
|
|
276
515
|
* `status` / `history` observe the record's current state (served from the
|
|
277
516
|
* shared dataset cache), and `mutate.<name>` applies a typed mutation
|
|
278
|
-
* fire-and-forget under compare-and-swap, refreshing `read()` on commit
|
|
517
|
+
* fire-and-forget under compare-and-swap, refreshing `read()` on commit;
|
|
518
|
+
* `commit.<name>` is the same write awaited. `Record.onApply` commits a
|
|
519
|
+
* Sheet's, a Plan's or a SnapGrid's batches to the record, each Apply one commit
|
|
520
|
+
* through its patch door.
|
|
279
521
|
*
|
|
280
522
|
* Use inside `Reactive.Root` for reactive re-rendering as the record and the
|
|
281
523
|
* mutation lifecycle change.
|
|
282
524
|
*/
|
|
283
525
|
export const Record = {
|
|
284
526
|
bind: bindRecord,
|
|
527
|
+
onApply: applyToRecord,
|
|
285
528
|
};
|
|
286
529
|
//# sourceMappingURL=record.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/bind/record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/bind/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Bound data sources (#935) — the datasets a component may read, as the page
|
|
7
|
+
* that holds it binds them: each a name, the binding's descriptor, and the
|
|
8
|
+
* value's East type, read off the handle.
|
|
9
|
+
*
|
|
10
|
+
* A component handed `datasets={{ orders, customers, bom }}` reads exactly
|
|
11
|
+
* those, by those names. The bindings are already in the `ui()` task's
|
|
12
|
+
* manifest — `Data.bind` under `paths`, `Data.bindPaged` under `pages`,
|
|
13
|
+
* `Record.bind` under `records` — so scope needs nothing new, and each name's
|
|
14
|
+
* type is known before any request.
|
|
15
|
+
*
|
|
16
|
+
* @packageDocumentation
|
|
17
|
+
*/
|
|
18
|
+
import { ArrayType, StringType, StructType, VariantType, type BooleanType, type ExprType, type FunctionType } from "@elaraai/east";
|
|
19
|
+
import type { BoundValue, PagedValue } from "./data.js";
|
|
20
|
+
import type { RecordBindingType } from "./record.js";
|
|
21
|
+
/**
|
|
22
|
+
* A data source a component may read: the name it reads it by, the binding it
|
|
23
|
+
* is, and its value's type.
|
|
24
|
+
*
|
|
25
|
+
* @property name - The name it is read by — a query's root field: `orders` for `.orders`
|
|
26
|
+
* @property source - The binding:
|
|
27
|
+
* - `paged` — a `Data.bindPaged` handle's `id`: its dataset's path, printed;
|
|
28
|
+
* - `record` — a `Record.bind` handle's record name;
|
|
29
|
+
* - `value` — a `Data.bind` handle's dataset path
|
|
30
|
+
* @property type - The value's East type, from the handle's own type
|
|
31
|
+
*/
|
|
32
|
+
export declare const DataSourceType: StructType<{
|
|
33
|
+
readonly name: StringType;
|
|
34
|
+
readonly source: VariantType<{
|
|
35
|
+
readonly paged: StringType;
|
|
36
|
+
readonly record: StringType;
|
|
37
|
+
readonly value: ArrayType<VariantType<{
|
|
38
|
+
readonly field: StringType;
|
|
39
|
+
}>>;
|
|
40
|
+
}>;
|
|
41
|
+
readonly type: import("@elaraai/east").RecursiveType<VariantType<{
|
|
42
|
+
readonly Never: import("@elaraai/east").NullType;
|
|
43
|
+
readonly Null: import("@elaraai/east").NullType;
|
|
44
|
+
readonly Boolean: import("@elaraai/east").NullType;
|
|
45
|
+
readonly Integer: import("@elaraai/east").NullType;
|
|
46
|
+
readonly Float: import("@elaraai/east").NullType;
|
|
47
|
+
readonly String: import("@elaraai/east").NullType;
|
|
48
|
+
readonly DateTime: import("@elaraai/east").NullType;
|
|
49
|
+
readonly Blob: import("@elaraai/east").NullType;
|
|
50
|
+
readonly Ref: import("@elaraai/east").RecursiveTypeMarker;
|
|
51
|
+
readonly Array: import("@elaraai/east").RecursiveTypeMarker;
|
|
52
|
+
readonly Set: import("@elaraai/east").RecursiveTypeMarker;
|
|
53
|
+
readonly Dict: StructType<{
|
|
54
|
+
readonly key: import("@elaraai/east").RecursiveTypeMarker;
|
|
55
|
+
readonly value: import("@elaraai/east").RecursiveTypeMarker;
|
|
56
|
+
}>;
|
|
57
|
+
readonly Struct: ArrayType<StructType<{
|
|
58
|
+
readonly name: StringType;
|
|
59
|
+
readonly type: import("@elaraai/east").RecursiveTypeMarker;
|
|
60
|
+
}>>;
|
|
61
|
+
readonly Variant: ArrayType<StructType<{
|
|
62
|
+
readonly name: StringType;
|
|
63
|
+
readonly type: import("@elaraai/east").RecursiveTypeMarker;
|
|
64
|
+
}>>;
|
|
65
|
+
readonly Recursive: VariantType<{
|
|
66
|
+
readonly ref: import("@elaraai/east").IntegerType;
|
|
67
|
+
readonly wrapper: StructType<{
|
|
68
|
+
readonly id: import("@elaraai/east").IntegerType;
|
|
69
|
+
readonly inner: import("@elaraai/east").RecursiveTypeMarker;
|
|
70
|
+
}>;
|
|
71
|
+
}>;
|
|
72
|
+
readonly Function: StructType<{
|
|
73
|
+
readonly inputs: ArrayType<import("@elaraai/east").RecursiveTypeMarker>;
|
|
74
|
+
readonly output: import("@elaraai/east").RecursiveTypeMarker;
|
|
75
|
+
}>;
|
|
76
|
+
readonly AsyncFunction: StructType<{
|
|
77
|
+
readonly inputs: ArrayType<import("@elaraai/east").RecursiveTypeMarker>;
|
|
78
|
+
readonly output: import("@elaraai/east").RecursiveTypeMarker;
|
|
79
|
+
}>;
|
|
80
|
+
readonly Vector: import("@elaraai/east").RecursiveTypeMarker;
|
|
81
|
+
readonly Matrix: import("@elaraai/east").RecursiveTypeMarker;
|
|
82
|
+
}>>;
|
|
83
|
+
}>;
|
|
84
|
+
/** Type representing a data source a component may read. */
|
|
85
|
+
export type DataSourceType = typeof DataSourceType;
|
|
86
|
+
/**
|
|
87
|
+
* A binding a component may read as a data source: a `Data.bind`,
|
|
88
|
+
* `Data.bindPaged` or `Record.bind` handle, over any value type.
|
|
89
|
+
*
|
|
90
|
+
* @remarks
|
|
91
|
+
* The value type is `any` because a handle's East type is invariant in it: a
|
|
92
|
+
* `PagedValue<ArrayType<Order>>` is not a `PagedValue<EastType>`. Each
|
|
93
|
+
* source's type is read off its handle at build time ({@link dataSources}).
|
|
94
|
+
*/
|
|
95
|
+
export type BoundSource = BoundValue<any> | PagedValue<any> | BoundRecordSource;
|
|
96
|
+
/**
|
|
97
|
+
* A `Record.bind` handle as a data source reads it, whatever mutations it is
|
|
98
|
+
* bound with: its `read`, its `mutate` — which tells it from a `Data.bind`
|
|
99
|
+
* handle — and its `binding`, which names the record.
|
|
100
|
+
*/
|
|
101
|
+
type BoundRecordSource = ExprType<StructType<{
|
|
102
|
+
read: FunctionType<[], any>;
|
|
103
|
+
mutate: StructType<{
|
|
104
|
+
pending: FunctionType<[], BooleanType>;
|
|
105
|
+
}>;
|
|
106
|
+
binding: RecordBindingType;
|
|
107
|
+
}>>;
|
|
108
|
+
/**
|
|
109
|
+
* Refuses a data source's name that a jq program can't read as a root field.
|
|
110
|
+
*
|
|
111
|
+
* @param component - The component or function, for the message (`"Query.Builder"`)
|
|
112
|
+
* @param name - The data source's name
|
|
113
|
+
* @throws {Error} When the name is not letters, digits and `_`, not starting
|
|
114
|
+
* with a digit, naming it
|
|
115
|
+
*/
|
|
116
|
+
export declare function assertRootField(component: string, name: string): void;
|
|
117
|
+
/**
|
|
118
|
+
* The data sources a component reads, from the bindings it is handed, in the
|
|
119
|
+
* order they are given.
|
|
120
|
+
*
|
|
121
|
+
* @remarks
|
|
122
|
+
* Each binding's kind is told by its handle's East struct: a `page` field is a
|
|
123
|
+
* `Data.bindPaged` handle, a `mutate` field a `Record.bind` handle, and any
|
|
124
|
+
* other a `Data.bind` handle. The descriptor is read off the handle as an East
|
|
125
|
+
* expression — `id`, `binding.name` or `binding.source` — and the value type
|
|
126
|
+
* is written as a literal from the handle's type: `read`'s output, or the
|
|
127
|
+
* element of `page`'s `Option`.
|
|
128
|
+
*
|
|
129
|
+
* @param component - The component, for the messages (`"Query.Builder"`)
|
|
130
|
+
* @param sources - Each data source's name and binding
|
|
131
|
+
* @returns An East expression of the data sources
|
|
132
|
+
* @throws {Error} When a name is not a jq identifier — letters, digits and
|
|
133
|
+
* `_`, not starting with a digit — naming it; when no source is given; and
|
|
134
|
+
* when a binding is not a `Data.bind`, `Data.bindPaged` or `Record.bind`
|
|
135
|
+
* handle
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* const orders = $.let(Data.bindPaged(d.orders));
|
|
140
|
+
* const customers = $.let(Data.bind(d.customers));
|
|
141
|
+
* const sources = dataSources("Query.Builder", { orders, customers });
|
|
142
|
+
* // [{ name: "orders", source: paged(".inputs.orders"), type: … },
|
|
143
|
+
* // { name: "customers", source: value([inputs, customers]), type: … }]
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export declare function dataSources(component: string, sources: Readonly<Record<string, BoundSource>>): ExprType<ArrayType<DataSourceType>>;
|
|
147
|
+
export {};
|
|
148
|
+
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../src/bind/sources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AAEH,OAAO,EACH,SAAS,EAIT,UAAU,EACV,UAAU,EACV,WAAW,EAGX,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACb,KAAK,YAAY,EAEpB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQzB,CAAC;AAEH,4DAA4D;AAC5D,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;AAEhF;;;;GAIG;AACH,KAAK,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC;IACzC,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5B,MAAM,EAAE,UAAU,CAAC;QAAE,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;IAC/D,OAAO,EAAE,iBAAiB,CAAC;CAC9B,CAAC,CAAC,CAAC;AAKJ;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIrE;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAuBlI"}
|