@fieldia/core 0.10.0 → 0.12.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/README.md +204 -0
- package/package.json +1 -1
- package/schema/page.schema.json +4700 -904
- package/src/index.d.mts +2 -1
- package/src/index.d.ts +2 -1
- package/src/index.js +7 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +2 -1
- package/src/index.mjs.map +1 -1
- package/src/lib/expression/built-ins.d.mts +4 -0
- package/src/lib/expression/built-ins.d.ts +4 -0
- package/src/lib/expression/built-ins.js +8 -0
- package/src/lib/expression/built-ins.js.map +1 -0
- package/src/lib/expression/built-ins.mjs +5 -0
- package/src/lib/expression/built-ins.mjs.map +1 -0
- package/src/lib/expression/evaluator.js +17 -7
- package/src/lib/expression/evaluator.js.map +1 -1
- package/src/lib/expression/evaluator.mjs +17 -7
- package/src/lib/expression/evaluator.mjs.map +1 -1
- package/src/lib/expression/expression.d.mts +7 -0
- package/src/lib/expression/expression.d.ts +7 -0
- package/src/lib/expression/expression.js +2 -0
- package/src/lib/expression/expression.js.map +1 -1
- package/src/lib/expression/expression.mjs +3 -1
- package/src/lib/expression/expression.mjs.map +1 -1
- package/src/lib/expression/functions.d.mts +2 -0
- package/src/lib/expression/functions.d.ts +2 -0
- package/src/lib/expression/functions.js +38 -5
- package/src/lib/expression/functions.js.map +1 -1
- package/src/lib/expression/functions.mjs +38 -5
- package/src/lib/expression/functions.mjs.map +1 -1
- package/src/lib/expression/modifier.d.mts +7 -0
- package/src/lib/expression/modifier.d.ts +7 -0
- package/src/lib/expression/modifier.js +3 -1
- package/src/lib/expression/modifier.js.map +1 -1
- package/src/lib/expression/modifier.mjs +4 -2
- package/src/lib/expression/modifier.mjs.map +1 -1
- package/src/lib/expression/parser.d.mts +8 -1
- package/src/lib/expression/parser.d.ts +8 -1
- package/src/lib/expression/parser.js +30 -2
- package/src/lib/expression/parser.js.map +1 -1
- package/src/lib/expression/parser.mjs +30 -2
- package/src/lib/expression/parser.mjs.map +1 -1
- package/src/lib/expression/reads.d.mts +7 -0
- package/src/lib/expression/reads.d.ts +7 -0
- package/src/lib/expression/reads.js +23 -0
- package/src/lib/expression/reads.js.map +1 -1
- package/src/lib/expression/reads.mjs +21 -0
- package/src/lib/expression/reads.mjs.map +1 -1
- package/src/lib/format/actions.d.mts +1176 -0
- package/src/lib/format/actions.d.ts +1176 -0
- package/src/lib/format/actions.js +62 -0
- package/src/lib/format/actions.js.map +1 -0
- package/src/lib/format/actions.mjs +59 -0
- package/src/lib/format/actions.mjs.map +1 -0
- package/src/lib/format/check-page.d.mts +7 -2
- package/src/lib/format/check-page.d.ts +7 -2
- package/src/lib/format/check-page.js +6 -3
- package/src/lib/format/check-page.js.map +1 -1
- package/src/lib/format/check-page.mjs +6 -3
- package/src/lib/format/check-page.mjs.map +1 -1
- package/src/lib/format/field.d.mts +3285 -214
- package/src/lib/format/field.d.ts +3285 -214
- package/src/lib/format/field.js +105 -16
- package/src/lib/format/field.js.map +1 -1
- package/src/lib/format/field.mjs +104 -15
- package/src/lib/format/field.mjs.map +1 -1
- package/src/lib/format/hotkeys.d.mts +6 -0
- package/src/lib/format/hotkeys.d.ts +6 -0
- package/src/lib/format/hotkeys.js +11 -0
- package/src/lib/format/hotkeys.js.map +1 -0
- package/src/lib/format/hotkeys.mjs +7 -0
- package/src/lib/format/hotkeys.mjs.map +1 -0
- package/src/lib/format/layout.d.mts +4773 -211
- package/src/lib/format/layout.d.ts +4773 -211
- package/src/lib/format/layout.js +147 -21
- package/src/lib/format/layout.js.map +1 -1
- package/src/lib/format/layout.mjs +146 -20
- package/src/lib/format/layout.mjs.map +1 -1
- package/src/lib/format/layout.types.d.mts +2 -1
- package/src/lib/format/layout.types.d.ts +2 -1
- package/src/lib/format/page.d.mts +3563 -222
- package/src/lib/format/page.d.ts +3563 -222
- package/src/lib/format/page.js +19 -2
- package/src/lib/format/page.js.map +1 -1
- package/src/lib/format/page.mjs +20 -3
- package/src/lib/format/page.mjs.map +1 -1
- package/src/lib/format/part-look.d.mts +36 -0
- package/src/lib/format/part-look.d.ts +36 -0
- package/src/lib/format/part-look.js +23 -0
- package/src/lib/format/part-look.js.map +1 -0
- package/src/lib/format/part-look.mjs +20 -0
- package/src/lib/format/part-look.mjs.map +1 -0
- package/src/lib/format/references.d.mts +54 -2
- package/src/lib/format/references.d.ts +54 -2
- package/src/lib/format/references.js +450 -43
- package/src/lib/format/references.js.map +1 -1
- package/src/lib/format/references.mjs +450 -43
- package/src/lib/format/references.mjs.map +1 -1
- package/src/lib/format/translate.js +5 -3
- package/src/lib/format/translate.js.map +1 -1
- package/src/lib/format/translate.mjs +5 -3
- package/src/lib/format/translate.mjs.map +1 -1
- package/src/lib/format/words.d.mts +9 -0
- package/src/lib/format/words.d.ts +9 -0
- package/src/lib/format/words.js +35 -0
- package/src/lib/format/words.js.map +1 -0
- package/src/lib/format/words.mjs +30 -0
- package/src/lib/format/words.mjs.map +1 -0
- package/src/lib/record/cells.d.mts +37 -0
- package/src/lib/record/cells.d.ts +37 -0
- package/src/lib/record/cells.js +59 -0
- package/src/lib/record/cells.js.map +1 -0
- package/src/lib/record/cells.mjs +54 -0
- package/src/lib/record/cells.mjs.map +1 -0
- package/src/lib/record/compute.d.mts +5 -4
- package/src/lib/record/compute.d.ts +5 -4
- package/src/lib/record/compute.js +11 -10
- package/src/lib/record/compute.js.map +1 -1
- package/src/lib/record/compute.mjs +12 -11
- package/src/lib/record/compute.mjs.map +1 -1
- package/src/lib/record/data-source.d.mts +37 -3
- package/src/lib/record/data-source.d.ts +37 -3
- package/src/lib/record/data-source.js.map +1 -1
- package/src/lib/record/data-source.mjs.map +1 -1
- package/src/lib/record/env.d.mts +38 -1
- package/src/lib/record/env.d.ts +38 -1
- package/src/lib/record/env.js +41 -3
- package/src/lib/record/env.js.map +1 -1
- package/src/lib/record/env.mjs +38 -3
- package/src/lib/record/env.mjs.map +1 -1
- package/src/lib/record/filter.d.mts +10 -0
- package/src/lib/record/filter.d.ts +10 -0
- package/src/lib/record/filter.js +49 -0
- package/src/lib/record/filter.js.map +1 -1
- package/src/lib/record/filter.mjs +48 -0
- package/src/lib/record/filter.mjs.map +1 -1
- package/src/lib/record/form.d.mts +226 -25
- package/src/lib/record/form.d.ts +226 -25
- package/src/lib/record/form.js +785 -83
- package/src/lib/record/form.js.map +1 -1
- package/src/lib/record/form.mjs +787 -85
- package/src/lib/record/form.mjs.map +1 -1
- package/src/lib/record/locales/ar.js +3 -0
- package/src/lib/record/locales/ar.js.map +1 -1
- package/src/lib/record/locales/ar.mjs +3 -0
- package/src/lib/record/locales/ar.mjs.map +1 -1
- package/src/lib/record/locales/de.js +3 -0
- package/src/lib/record/locales/de.js.map +1 -1
- package/src/lib/record/locales/de.mjs +3 -0
- package/src/lib/record/locales/de.mjs.map +1 -1
- package/src/lib/record/locales/fr.js +3 -0
- package/src/lib/record/locales/fr.js.map +1 -1
- package/src/lib/record/locales/fr.mjs +3 -0
- package/src/lib/record/locales/fr.mjs.map +1 -1
- package/src/lib/record/memory-data-source.d.mts +26 -2
- package/src/lib/record/memory-data-source.d.ts +26 -2
- package/src/lib/record/memory-data-source.js +98 -7
- package/src/lib/record/memory-data-source.js.map +1 -1
- package/src/lib/record/memory-data-source.mjs +98 -7
- package/src/lib/record/memory-data-source.mjs.map +1 -1
- package/src/lib/record/messages.d.mts +5 -0
- package/src/lib/record/messages.d.ts +5 -0
- package/src/lib/record/messages.js +3 -0
- package/src/lib/record/messages.js.map +1 -1
- package/src/lib/record/messages.mjs +3 -0
- package/src/lib/record/messages.mjs.map +1 -1
- package/src/lib/record/roles.d.mts +10 -0
- package/src/lib/record/roles.d.ts +10 -0
- package/src/lib/record/roles.js +21 -0
- package/src/lib/record/roles.js.map +1 -0
- package/src/lib/record/roles.mjs +18 -0
- package/src/lib/record/roles.mjs.map +1 -0
- package/src/lib/record/rules.js +30 -0
- package/src/lib/record/rules.js.map +1 -1
- package/src/lib/record/rules.mjs +31 -1
- package/src/lib/record/rules.mjs.map +1 -1
- package/src/lib/record/run.d.mts +248 -0
- package/src/lib/record/run.d.ts +248 -0
- package/src/lib/record/run.js +455 -0
- package/src/lib/record/run.js.map +1 -0
- package/src/lib/record/run.mjs +450 -0
- package/src/lib/record/run.mjs.map +1 -0
- package/src/lib/record/set-when.d.mts +5 -2
- package/src/lib/record/set-when.d.ts +5 -2
- package/src/lib/record/set-when.js +28 -12
- package/src/lib/record/set-when.js.map +1 -1
- package/src/lib/record/set-when.mjs +30 -14
- package/src/lib/record/set-when.mjs.map +1 -1
- package/src/lib/record/value-map.d.mts +41 -0
- package/src/lib/record/value-map.d.ts +41 -0
- package/src/lib/record/value-map.js +80 -0
- package/src/lib/record/value-map.js.map +1 -0
- package/src/lib/record/value-map.mjs +73 -0
- package/src/lib/record/value-map.mjs.map +1 -0
- package/src/lib/record/values.d.mts +10 -0
- package/src/lib/record/values.d.ts +10 -0
- package/src/lib/record/values.js.map +1 -1
- package/src/lib/record/values.mjs.map +1 -1
- package/src/runtime.d.mts +11 -4
- package/src/runtime.d.ts +11 -4
- package/src/runtime.js +13 -1
- package/src/runtime.js.map +1 -1
- package/src/runtime.mjs +4 -0
- package/src/runtime.mjs.map +1 -1
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DONE = void 0;
|
|
4
|
+
exports.createRunner = createRunner;
|
|
5
|
+
exports.createMoments = createMoments;
|
|
6
|
+
const expression_1 = require("../expression/expression");
|
|
7
|
+
const modifier_1 = require("../expression/modifier");
|
|
8
|
+
const names_1 = require("../format/names");
|
|
9
|
+
const words_1 = require("../format/words");
|
|
10
|
+
const compute_1 = require("./compute");
|
|
11
|
+
const filter_1 = require("./filter");
|
|
12
|
+
const values_1 = require("./values");
|
|
13
|
+
exports.DONE = Object.freeze({ done: true });
|
|
14
|
+
/** The kinds of field an expression gives a value to; the rest hold records, lines or files, and take a field named alone whole. */
|
|
15
|
+
const EXPRESSIBLE = new Set(['char', 'text', 'html', 'integer', 'float', 'monetary', 'boolean', 'date', 'datetime', 'selection', 'json']);
|
|
16
|
+
const wordsOf = (error) => (error instanceof Error ? error.message : String(error));
|
|
17
|
+
/** Steps run against one form. Expressions are read once and kept. */
|
|
18
|
+
function createRunner(form) {
|
|
19
|
+
const expressions = new Map();
|
|
20
|
+
const conditions = new Map();
|
|
21
|
+
const expression = (source) => {
|
|
22
|
+
let found = expressions.get(source);
|
|
23
|
+
if (!found)
|
|
24
|
+
expressions.set(source, (found = (0, expression_1.compileExpression)(source)));
|
|
25
|
+
return found;
|
|
26
|
+
};
|
|
27
|
+
function holds(when) {
|
|
28
|
+
if (typeof when === 'boolean')
|
|
29
|
+
return when;
|
|
30
|
+
let found = conditions.get(when);
|
|
31
|
+
if (!found)
|
|
32
|
+
conditions.set(when, (found = (0, modifier_1.compileModifier)(when)));
|
|
33
|
+
const { context, env } = form.reading();
|
|
34
|
+
return found.evaluate(context, env);
|
|
35
|
+
}
|
|
36
|
+
/** A field named alone, when its value is taken whole. */
|
|
37
|
+
const named = (source) => {
|
|
38
|
+
const name = source.trim();
|
|
39
|
+
return names_1.FIELD_NAME.test(name) ? name : null;
|
|
40
|
+
};
|
|
41
|
+
/** An expression over this form's values. A field named alone is taken whole when `whole` — a link with its name, the lines themselves. */
|
|
42
|
+
function read(source, whole) {
|
|
43
|
+
const name = named(source);
|
|
44
|
+
if (whole && name !== null && name in form.fields)
|
|
45
|
+
return (0, values_1.structuredCopy)(form.values()[name]);
|
|
46
|
+
const { context, env } = form.reading();
|
|
47
|
+
return expression(source).evaluate(context, env);
|
|
48
|
+
}
|
|
49
|
+
/** The name this form knows a record by, from a link to the same model it holds. */
|
|
50
|
+
function knownLabel(relation, id) {
|
|
51
|
+
const values = form.values();
|
|
52
|
+
for (const [name, def] of Object.entries(form.fields)) {
|
|
53
|
+
if ((def.type !== 'many2one' && def.type !== 'many2many') || def.relation !== relation)
|
|
54
|
+
continue;
|
|
55
|
+
const held = values[name];
|
|
56
|
+
const records = (Array.isArray(held) ? held : held ? [held] : []);
|
|
57
|
+
const found = records.find((record) => record && record.id === id);
|
|
58
|
+
if (found)
|
|
59
|
+
return found.label;
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
/** What a value from an expression, the app or another form becomes in a field: a link from an id or a record, anything else as `compute` fits it. */
|
|
64
|
+
function fit(def, raw, label = () => undefined) {
|
|
65
|
+
const link = (item) => {
|
|
66
|
+
if (item === null || item === undefined || item === false || item === '')
|
|
67
|
+
return null;
|
|
68
|
+
const relation = def.relation;
|
|
69
|
+
const labelOf = (id) => label(id) ?? knownLabel(relation, id) ?? String(id);
|
|
70
|
+
if (typeof item === 'number' || typeof item === 'string')
|
|
71
|
+
return { id: item, label: labelOf(item) };
|
|
72
|
+
if (typeof item === 'object' && !Array.isArray(item) && 'id' in item) {
|
|
73
|
+
const record = item;
|
|
74
|
+
return { id: record.id, label: typeof record.label === 'string' ? record.label : labelOf(record.id) };
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
};
|
|
78
|
+
if (def.type === 'many2one')
|
|
79
|
+
return link(raw);
|
|
80
|
+
if (def.type === 'many2many')
|
|
81
|
+
return (Array.isArray(raw) ? raw : [raw]).map(link).filter((record) => record !== null);
|
|
82
|
+
return (0, compute_1.fitTo)(def, raw);
|
|
83
|
+
}
|
|
84
|
+
function fieldOf(name) {
|
|
85
|
+
const def = form.fields[name];
|
|
86
|
+
if (!def)
|
|
87
|
+
throw new Error(`The page has no field "${name}"`);
|
|
88
|
+
return def;
|
|
89
|
+
}
|
|
90
|
+
async function ask(message) {
|
|
91
|
+
if (form.host)
|
|
92
|
+
return form.host.ask(message);
|
|
93
|
+
if (form.confirm)
|
|
94
|
+
return form.confirm(message);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
function cannot(message) {
|
|
98
|
+
return { reason: 'cannot', message };
|
|
99
|
+
}
|
|
100
|
+
/** Open a page through the host, take its answers back, and run its `then`. */
|
|
101
|
+
async function open(step, scope) {
|
|
102
|
+
const host = form.host;
|
|
103
|
+
if (!host)
|
|
104
|
+
return cannot(`Nothing can open "${step.page}" here: the form has no host`);
|
|
105
|
+
const record = step.record !== undefined ? read(step.record, false) : null;
|
|
106
|
+
const request = {
|
|
107
|
+
page: step.page,
|
|
108
|
+
...(step.version !== undefined ? { version: step.version } : {}),
|
|
109
|
+
as: step.as ?? 'dialog',
|
|
110
|
+
...(step.side && step.as === 'panel' ? { side: step.side } : {}),
|
|
111
|
+
...(step.title !== undefined ? { title: step.title } : {}),
|
|
112
|
+
recordId: typeof record === 'number' || (typeof record === 'string' && record !== '') ? record : null,
|
|
113
|
+
...(step.values ? { values: readMap(step.values) } : {}),
|
|
114
|
+
...(step.filter ? { filter: (0, filter_1.resolveFilter)(step.filter, form.reading().context) } : {}),
|
|
115
|
+
};
|
|
116
|
+
let result;
|
|
117
|
+
try {
|
|
118
|
+
result = await host.open(request);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return { reason: 'cannot', message: wordsOf(error), error };
|
|
122
|
+
}
|
|
123
|
+
if (!result.saved)
|
|
124
|
+
return { reason: 'closed' };
|
|
125
|
+
if (step.into)
|
|
126
|
+
form.write(into(step.into, result));
|
|
127
|
+
if (!step.then)
|
|
128
|
+
return null;
|
|
129
|
+
const then = await runSteps(step.then, scope);
|
|
130
|
+
return then.done ? null : { reason: then.reason, message: then.message, step: then.step, error: then.error };
|
|
131
|
+
}
|
|
132
|
+
/** What a new page starts with: each an expression over this form's values, a field named alone taken whole. */
|
|
133
|
+
function readMap(map) {
|
|
134
|
+
const values = {};
|
|
135
|
+
for (const [name, source] of Object.entries(map))
|
|
136
|
+
values[name] = (read(source, true) ?? null);
|
|
137
|
+
return values;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* This form's fields from an opened page's answers: each an expression over
|
|
141
|
+
* its values, where `id` is the record it saved. A link set to that record
|
|
142
|
+
* is labelled by the host's `label`, else its `display_name`, else its
|
|
143
|
+
* `name`, else its id.
|
|
144
|
+
*/
|
|
145
|
+
function into(map, result) {
|
|
146
|
+
const answers = result.values ?? {};
|
|
147
|
+
const id = result.recordId ?? null;
|
|
148
|
+
const context = { ...asRead(answers), id };
|
|
149
|
+
const title = [result.label, answers['display_name'], answers['name']].find((text) => typeof text === 'string' && text !== '');
|
|
150
|
+
const label = (other) => (other === id ? title : undefined);
|
|
151
|
+
const values = {};
|
|
152
|
+
for (const [name, source] of Object.entries(map)) {
|
|
153
|
+
const def = fieldOf(name);
|
|
154
|
+
const alone = named(source);
|
|
155
|
+
const raw = alone === 'id' ? id : alone !== null && !EXPRESSIBLE.has(def.type) && alone in answers ? answers[alone] : expression(source).evaluate(context, { today: form.today });
|
|
156
|
+
values[name] = fit(def, raw, label);
|
|
157
|
+
}
|
|
158
|
+
return values;
|
|
159
|
+
}
|
|
160
|
+
async function call(step, scope) {
|
|
161
|
+
const request = {
|
|
162
|
+
id: scope.id,
|
|
163
|
+
action: step.action,
|
|
164
|
+
...(step.params ? { params: (0, values_1.structuredCopy)(step.params) } : {}),
|
|
165
|
+
recordId: form.recordId(),
|
|
166
|
+
values: (0, values_1.structuredCopy)(form.values()),
|
|
167
|
+
...(scope.recordIds ? { recordIds: [...scope.recordIds] } : {}),
|
|
168
|
+
...(scope.line ? { line: (0, values_1.structuredCopy)(scope.line) } : {}),
|
|
169
|
+
...(scope.lines ? { lines: (0, values_1.structuredCopy)(scope.lines) } : {}),
|
|
170
|
+
};
|
|
171
|
+
if (!form.onAction)
|
|
172
|
+
return null;
|
|
173
|
+
let answer;
|
|
174
|
+
try {
|
|
175
|
+
answer = (await form.onAction(request)) ?? undefined;
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
return { reason: 'app', message: wordsOf(error), error };
|
|
179
|
+
}
|
|
180
|
+
form.answered(request, answer);
|
|
181
|
+
if (!answer)
|
|
182
|
+
return null;
|
|
183
|
+
// The server's record first, then what the app says over it.
|
|
184
|
+
if (answer.reload) {
|
|
185
|
+
const reloaded = await form.reload();
|
|
186
|
+
if (reloaded)
|
|
187
|
+
return reloaded;
|
|
188
|
+
}
|
|
189
|
+
if (answer.values) {
|
|
190
|
+
const known = {};
|
|
191
|
+
for (const [name, value] of Object.entries(answer.values))
|
|
192
|
+
if (name in form.fields)
|
|
193
|
+
known[name] = fit(form.fields[name], value);
|
|
194
|
+
form.write(known);
|
|
195
|
+
}
|
|
196
|
+
if (answer.say !== undefined) {
|
|
197
|
+
const said = typeof answer.say === 'string' ? { message: answer.say } : answer.say;
|
|
198
|
+
form.host?.say(said.message, said.tone ?? 'info');
|
|
199
|
+
}
|
|
200
|
+
if (answer.post !== undefined) {
|
|
201
|
+
const posted = typeof answer.post === 'string' ? { message: answer.post } : answer.post;
|
|
202
|
+
const stopped = await post(posted.message, posted.kind ?? 'note', false);
|
|
203
|
+
if (stopped)
|
|
204
|
+
return stopped;
|
|
205
|
+
}
|
|
206
|
+
if (answer.record !== undefined) {
|
|
207
|
+
const moved = await form.showRecord(answer.record);
|
|
208
|
+
if (moved)
|
|
209
|
+
return moved;
|
|
210
|
+
}
|
|
211
|
+
if (answer.open) {
|
|
212
|
+
const opened = await open(answer.open, scope);
|
|
213
|
+
if (opened)
|
|
214
|
+
return opened;
|
|
215
|
+
}
|
|
216
|
+
if (answer.stop) {
|
|
217
|
+
if (typeof answer.stop === 'string')
|
|
218
|
+
form.host?.say(answer.stop, 'warning');
|
|
219
|
+
return { reason: 'app', ...(typeof answer.stop === 'string' ? { message: answer.stop } : {}) };
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
/** Words posted: a `post` step's with each `{field}` filled in, or the app's as they are. */
|
|
224
|
+
async function post(message, kind, filled) {
|
|
225
|
+
const parts = filled ? (0, words_1.splitValues)(message) : [{ text: message }];
|
|
226
|
+
const text = parts.map((part) => (part.field ? form.wordsOf(part.field) : part.text)).join('');
|
|
227
|
+
// An html field's value comes as HTML; the rest are escaped, a line each.
|
|
228
|
+
const body = parts
|
|
229
|
+
.map((part) => (part.field && form.fields[part.field]?.type === 'html' ? String(form.values()[part.field] ?? '') : escapeHtml(part.field ? form.wordsOf(part.field) : part.text)))
|
|
230
|
+
.join('');
|
|
231
|
+
const posted = await form.post({ kind, text, body: `<p>${body}</p>` });
|
|
232
|
+
return posted ? null : cannot('Nothing can post a message here: no conversation is beside this record');
|
|
233
|
+
}
|
|
234
|
+
/** A record step the data source cannot do: the app's action of its name, answered as a call is. */
|
|
235
|
+
async function instead(name, method, scope) {
|
|
236
|
+
if (!form.onAction)
|
|
237
|
+
return cannot(`Nothing can ${name} this record here: the data source has no ${method}, and the app takes no actions`);
|
|
238
|
+
return call({ action: name }, scope);
|
|
239
|
+
}
|
|
240
|
+
/** Archive the record or bring it back, copy it, or delete it: through the data source when it can, else the app. */
|
|
241
|
+
async function recordStep(name, scope) {
|
|
242
|
+
const id = form.recordId();
|
|
243
|
+
if (id == null)
|
|
244
|
+
return cannot(`A new record cannot be ${name === 'duplicate' ? 'duplicated' : name === 'delete' ? 'deleted' : `${name}d`}: it is not saved yet`);
|
|
245
|
+
if (name === 'archive' || name === 'unarchive') {
|
|
246
|
+
if (!form.archive)
|
|
247
|
+
return instead(name, 'archive', scope);
|
|
248
|
+
await form.archive(name === 'archive');
|
|
249
|
+
form.told({ archived: name === 'archive' }, id);
|
|
250
|
+
return form.reload();
|
|
251
|
+
}
|
|
252
|
+
if (name === 'duplicate') {
|
|
253
|
+
// What was changed goes with the copy: it is saved first.
|
|
254
|
+
if (form.changed()) {
|
|
255
|
+
const saved = await form.save(scope.chain);
|
|
256
|
+
if (saved)
|
|
257
|
+
return saved;
|
|
258
|
+
}
|
|
259
|
+
if (!form.copy) {
|
|
260
|
+
const stopped = await instead(name, 'copy', scope);
|
|
261
|
+
const now = form.recordId();
|
|
262
|
+
if (!stopped && now != null && now !== id)
|
|
263
|
+
form.told({ copied: now }, id);
|
|
264
|
+
return stopped;
|
|
265
|
+
}
|
|
266
|
+
const copied = await form.copy();
|
|
267
|
+
const moved = await form.showRecord(copied);
|
|
268
|
+
if (moved)
|
|
269
|
+
return moved;
|
|
270
|
+
form.told({ copied }, id);
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
if (!form.remove) {
|
|
274
|
+
const stopped = await instead(name, 'delete', scope);
|
|
275
|
+
if (!stopped)
|
|
276
|
+
form.told({ deleted: true }, id);
|
|
277
|
+
return stopped;
|
|
278
|
+
}
|
|
279
|
+
await form.remove();
|
|
280
|
+
form.told({ deleted: true }, id);
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
async function runStep(step, scope) {
|
|
284
|
+
switch (step.do) {
|
|
285
|
+
case 'set': {
|
|
286
|
+
const def = fieldOf(step.field);
|
|
287
|
+
form.write({ [step.field]: fit(def, read(step.value, !EXPRESSIBLE.has(def.type))) });
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
case 'clear':
|
|
291
|
+
form.write({ [step.field]: (0, values_1.emptyValue)(fieldOf(step.field)) });
|
|
292
|
+
return null;
|
|
293
|
+
case 'addLine': {
|
|
294
|
+
const def = fieldOf(step.field);
|
|
295
|
+
if (def.type !== 'one2many')
|
|
296
|
+
return cannot(`"${step.field}" is a ${def.type}; a line is added to a one2many`);
|
|
297
|
+
const values = {};
|
|
298
|
+
for (const [name, source] of Object.entries(step.values ?? {})) {
|
|
299
|
+
const sub = def.fields[name];
|
|
300
|
+
if (!sub)
|
|
301
|
+
return cannot(`The lines of "${step.field}" have no field "${name}"`);
|
|
302
|
+
values[name] = fit(sub, read(source, !EXPRESSIBLE.has(sub.type)));
|
|
303
|
+
}
|
|
304
|
+
form.addLine(step.field, values);
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
case 'check':
|
|
308
|
+
return form.check(step.fields);
|
|
309
|
+
case 'save':
|
|
310
|
+
return form.save(scope.chain);
|
|
311
|
+
case 'reset':
|
|
312
|
+
form.reset();
|
|
313
|
+
return null;
|
|
314
|
+
case 'goTo': {
|
|
315
|
+
const stepped = form.goTo(step.target, scope.chain);
|
|
316
|
+
if (stepped !== undefined)
|
|
317
|
+
return stepped;
|
|
318
|
+
const show = form.host?.show;
|
|
319
|
+
if (!show)
|
|
320
|
+
return cannot(`Nothing can show "${step.target}" here: the form has no host that shows tabs`);
|
|
321
|
+
form.showing(scope.chain, () => show.call(form.host, step.target));
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
case 'say':
|
|
325
|
+
form.host?.say(step.message, step.tone ?? 'info');
|
|
326
|
+
return null;
|
|
327
|
+
case 'ask':
|
|
328
|
+
return (await ask(step.message)) ? null : { reason: 'no', message: step.message };
|
|
329
|
+
case 'call':
|
|
330
|
+
return call(step, scope);
|
|
331
|
+
case 'open':
|
|
332
|
+
return open(step, scope);
|
|
333
|
+
case 'close': {
|
|
334
|
+
const close = form.host?.close;
|
|
335
|
+
if (!close)
|
|
336
|
+
return cannot('Nothing can close this form: it has no host, or was not opened in a dialog or panel');
|
|
337
|
+
close.call(form.host);
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
case 'reload':
|
|
341
|
+
return form.reload();
|
|
342
|
+
case 'openUrl': {
|
|
343
|
+
const openUrl = form.host?.openUrl;
|
|
344
|
+
if (!openUrl)
|
|
345
|
+
return cannot('Nothing can open a web address here: the form has no host that opens one');
|
|
346
|
+
const url = read(step.url, false);
|
|
347
|
+
if (typeof url !== 'string' || !url.trim())
|
|
348
|
+
return cannot(`"${step.url}" gives no address to open`);
|
|
349
|
+
openUrl.call(form.host, url.trim(), step.newTab ?? true);
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
case 'archive':
|
|
353
|
+
case 'unarchive':
|
|
354
|
+
case 'duplicate':
|
|
355
|
+
case 'delete':
|
|
356
|
+
return recordStep(step.do, scope);
|
|
357
|
+
case 'post':
|
|
358
|
+
return post(step.message, step.kind ?? 'note', true);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async function runSteps(steps, scope) {
|
|
362
|
+
for (let at = 0; at < steps.length; at++) {
|
|
363
|
+
const step = steps[at];
|
|
364
|
+
let stopped;
|
|
365
|
+
try {
|
|
366
|
+
if (step.when !== undefined && !holds(step.when))
|
|
367
|
+
continue;
|
|
368
|
+
stopped = await runStep(step, scope);
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
stopped = { reason: 'cannot', message: wordsOf(error), error };
|
|
372
|
+
}
|
|
373
|
+
if (stopped) {
|
|
374
|
+
return {
|
|
375
|
+
done: false,
|
|
376
|
+
stoppedAt: at,
|
|
377
|
+
step: stopped.step ?? step,
|
|
378
|
+
reason: stopped.reason,
|
|
379
|
+
...(stopped.message !== undefined ? { message: stopped.message } : {}),
|
|
380
|
+
...(stopped.error !== undefined ? { error: stopped.error } : {}),
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return exports.DONE;
|
|
385
|
+
}
|
|
386
|
+
return { runSteps, ask };
|
|
387
|
+
}
|
|
388
|
+
/** What an expression reads in another form's answers, its fields unknown: a link as its id, links as their ids, a reference as "model,id", lines by their keys, a file by its name. */
|
|
389
|
+
function asRead(values) {
|
|
390
|
+
const read = {};
|
|
391
|
+
const one = (value) => {
|
|
392
|
+
if (value === null || typeof value !== 'object')
|
|
393
|
+
return value;
|
|
394
|
+
const object = value;
|
|
395
|
+
if ('key' in object && 'values' in object)
|
|
396
|
+
return object['key'];
|
|
397
|
+
if ('model' in object && 'id' in object)
|
|
398
|
+
return `${object['model']},${object['id']}`;
|
|
399
|
+
if ('id' in object)
|
|
400
|
+
return object['id'];
|
|
401
|
+
if ('name' in object && 'type' in object && 'size' in object)
|
|
402
|
+
return object['name'];
|
|
403
|
+
return value;
|
|
404
|
+
};
|
|
405
|
+
for (const [name, value] of Object.entries(values))
|
|
406
|
+
read[name] = Array.isArray(value) ? value.map(one) : one(value);
|
|
407
|
+
return read;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* One run of each moment at a time. A moment set off by a step of its own
|
|
411
|
+
* run — or a run it set off — does not run. Set off while a run of it is
|
|
412
|
+
* going: `again` moments (open, change, show) run once more after it, with
|
|
413
|
+
* the values as they are then, however many times they were set off
|
|
414
|
+
* meanwhile; the others (beforeSave, afterSave) do not run — a save made
|
|
415
|
+
* meanwhile goes ahead without them, so nothing waits on itself.
|
|
416
|
+
*/
|
|
417
|
+
function createMoments(run) {
|
|
418
|
+
const slots = new Map();
|
|
419
|
+
return function moment(key, steps, chain, again) {
|
|
420
|
+
if (!steps?.length || chain.includes(key))
|
|
421
|
+
return Promise.resolve(exports.DONE);
|
|
422
|
+
/** A run of it, known as running before its first step does: a step that sets it off again finds it busy. */
|
|
423
|
+
const go = (slot) => {
|
|
424
|
+
let settle;
|
|
425
|
+
const running = new Promise((resolve) => (settle = resolve)).finally(() => {
|
|
426
|
+
if (slot.running === running && !slot.queued)
|
|
427
|
+
slots.delete(key);
|
|
428
|
+
});
|
|
429
|
+
slot.running = running;
|
|
430
|
+
settle(run(key, steps, [...chain, key]));
|
|
431
|
+
return running;
|
|
432
|
+
};
|
|
433
|
+
const busy = slots.get(key);
|
|
434
|
+
if (!busy) {
|
|
435
|
+
const slot = { running: Promise.resolve(exports.DONE) };
|
|
436
|
+
slots.set(key, slot);
|
|
437
|
+
return go(slot);
|
|
438
|
+
}
|
|
439
|
+
if (!again)
|
|
440
|
+
return Promise.resolve(exports.DONE);
|
|
441
|
+
if (!busy.queued) {
|
|
442
|
+
const next = () => {
|
|
443
|
+
busy.queued = undefined;
|
|
444
|
+
return go(busy);
|
|
445
|
+
};
|
|
446
|
+
busy.queued = busy.running.then(next, next);
|
|
447
|
+
}
|
|
448
|
+
return busy.queued;
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/** Words as HTML: every character that means something there escaped, each line break a <br>. */
|
|
452
|
+
function escapeHtml(text) {
|
|
453
|
+
return text.replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]).replace(/\n/g, '<br>');
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/run.ts"],"names":[],"mappings":"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"}
|