@fieldia/core 0.20.0 → 0.22.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 +116 -1
- package/package.json +1 -1
- package/schema/page.schema.json +173 -1
- package/src/index.d.mts +2 -2
- package/src/index.d.ts +2 -2
- package/src/index.js +3 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +2 -2
- package/src/index.mjs.map +1 -1
- package/src/lib/expression/parser.js +4 -4
- package/src/lib/expression/parser.js.map +1 -1
- package/src/lib/expression/parser.mjs +5 -5
- package/src/lib/expression/parser.mjs.map +1 -1
- package/src/lib/expression/tokenizer.d.mts +12 -0
- package/src/lib/expression/tokenizer.d.ts +12 -0
- package/src/lib/expression/tokenizer.js +21 -12
- package/src/lib/expression/tokenizer.js.map +1 -1
- package/src/lib/expression/tokenizer.mjs +20 -12
- package/src/lib/expression/tokenizer.mjs.map +1 -1
- package/src/lib/format/check-page.d.mts +3 -2
- package/src/lib/format/check-page.d.ts +3 -2
- package/src/lib/format/check-page.js +9 -4
- package/src/lib/format/check-page.js.map +1 -1
- package/src/lib/format/check-page.mjs +10 -5
- package/src/lib/format/check-page.mjs.map +1 -1
- package/src/lib/format/field.d.mts +101 -0
- package/src/lib/format/field.d.ts +101 -0
- package/src/lib/format/field.js +25 -2
- package/src/lib/format/field.js.map +1 -1
- package/src/lib/format/field.mjs +24 -1
- package/src/lib/format/field.mjs.map +1 -1
- package/src/lib/format/layout.d.mts +142 -17
- package/src/lib/format/layout.d.ts +142 -17
- package/src/lib/format/layout.js +18 -1
- package/src/lib/format/layout.js.map +1 -1
- package/src/lib/format/layout.mjs +17 -0
- package/src/lib/format/layout.mjs.map +1 -1
- package/src/lib/format/layout.types.d.mts +6 -2
- package/src/lib/format/layout.types.d.ts +6 -2
- package/src/lib/format/page.d.mts +87 -10
- package/src/lib/format/page.d.ts +87 -10
- package/src/lib/format/page.js +5 -1
- package/src/lib/format/page.js.map +1 -1
- package/src/lib/format/page.mjs +6 -2
- package/src/lib/format/page.mjs.map +1 -1
- package/src/lib/format/pattern.d.mts +10 -0
- package/src/lib/format/pattern.d.ts +10 -0
- package/src/lib/format/pattern.js +33 -0
- package/src/lib/format/pattern.js.map +1 -0
- package/src/lib/format/pattern.mjs +30 -0
- package/src/lib/format/pattern.mjs.map +1 -0
- package/src/lib/format/references.d.mts +7 -0
- package/src/lib/format/references.d.ts +7 -0
- package/src/lib/format/references.js +54 -0
- package/src/lib/format/references.js.map +1 -1
- package/src/lib/format/references.mjs +54 -0
- package/src/lib/format/references.mjs.map +1 -1
- package/src/lib/format/translate.js +6 -4
- package/src/lib/format/translate.js.map +1 -1
- package/src/lib/format/translate.mjs +6 -4
- package/src/lib/format/translate.mjs.map +1 -1
- package/src/lib/format/upgrade.d.mts +41 -0
- package/src/lib/format/upgrade.d.ts +41 -0
- package/src/lib/format/upgrade.js +41 -0
- package/src/lib/format/upgrade.js.map +1 -0
- package/src/lib/format/upgrade.mjs +37 -0
- package/src/lib/format/upgrade.mjs.map +1 -0
- package/src/lib/format/validate.d.mts +2 -1
- package/src/lib/format/validate.d.ts +2 -1
- package/src/lib/format/validate.js +4 -2
- package/src/lib/format/validate.js.map +1 -1
- package/src/lib/format/validate.mjs +4 -2
- package/src/lib/format/validate.mjs.map +1 -1
- package/src/lib/format/version.d.mts +16 -1
- package/src/lib/format/version.d.ts +16 -1
- package/src/lib/format/version.js +39 -2
- package/src/lib/format/version.js.map +1 -1
- package/src/lib/format/version.mjs +36 -1
- package/src/lib/format/version.mjs.map +1 -1
- package/src/lib/record/check.d.mts +13 -3
- package/src/lib/record/check.d.ts +13 -3
- package/src/lib/record/check.js +87 -17
- package/src/lib/record/check.js.map +1 -1
- package/src/lib/record/check.mjs +85 -17
- package/src/lib/record/check.mjs.map +1 -1
- package/src/lib/record/data-source.d.mts +224 -10
- package/src/lib/record/data-source.d.ts +224 -10
- package/src/lib/record/data-source.js +29 -0
- package/src/lib/record/data-source.js.map +1 -1
- package/src/lib/record/data-source.mjs +25 -0
- package/src/lib/record/data-source.mjs.map +1 -1
- package/src/lib/record/filter.js +14 -2
- package/src/lib/record/filter.js.map +1 -1
- package/src/lib/record/filter.mjs +14 -2
- package/src/lib/record/filter.mjs.map +1 -1
- package/src/lib/record/form.d.mts +186 -3
- package/src/lib/record/form.d.ts +186 -3
- package/src/lib/record/form.js +1036 -57
- package/src/lib/record/form.js.map +1 -1
- package/src/lib/record/form.mjs +1037 -60
- package/src/lib/record/form.mjs.map +1 -1
- package/src/lib/record/input-rules.d.mts +277 -0
- package/src/lib/record/input-rules.d.ts +277 -0
- package/src/lib/record/input-rules.js +724 -0
- package/src/lib/record/input-rules.js.map +1 -0
- package/src/lib/record/input-rules.mjs +705 -0
- package/src/lib/record/input-rules.mjs.map +1 -0
- package/src/lib/record/inputs.d.mts +25 -0
- package/src/lib/record/inputs.d.ts +25 -0
- package/src/lib/record/inputs.js +135 -9
- package/src/lib/record/inputs.js.map +1 -1
- package/src/lib/record/inputs.mjs +131 -9
- package/src/lib/record/inputs.mjs.map +1 -1
- package/src/lib/record/locales/ar.js +23 -2
- package/src/lib/record/locales/ar.js.map +1 -1
- package/src/lib/record/locales/ar.mjs +23 -2
- package/src/lib/record/locales/ar.mjs.map +1 -1
- package/src/lib/record/locales/de.js +23 -2
- package/src/lib/record/locales/de.js.map +1 -1
- package/src/lib/record/locales/de.mjs +23 -2
- package/src/lib/record/locales/de.mjs.map +1 -1
- package/src/lib/record/locales/fr.js +23 -2
- package/src/lib/record/locales/fr.js.map +1 -1
- package/src/lib/record/locales/fr.mjs +23 -2
- package/src/lib/record/locales/fr.mjs.map +1 -1
- package/src/lib/record/memory-data-source.d.mts +40 -3
- package/src/lib/record/memory-data-source.d.ts +40 -3
- package/src/lib/record/memory-data-source.js +171 -23
- package/src/lib/record/memory-data-source.js.map +1 -1
- package/src/lib/record/memory-data-source.mjs +171 -23
- package/src/lib/record/memory-data-source.mjs.map +1 -1
- package/src/lib/record/messages.d.mts +43 -0
- package/src/lib/record/messages.d.ts +43 -0
- package/src/lib/record/messages.js +23 -2
- package/src/lib/record/messages.js.map +1 -1
- package/src/lib/record/messages.mjs +23 -2
- package/src/lib/record/messages.mjs.map +1 -1
- package/src/lib/record/rules.js +3 -1
- package/src/lib/record/rules.js.map +1 -1
- package/src/lib/record/rules.mjs +3 -1
- package/src/lib/record/rules.mjs.map +1 -1
- package/src/lib/record/run.d.mts +53 -9
- package/src/lib/record/run.d.ts +53 -9
- package/src/lib/record/run.js +68 -21
- package/src/lib/record/run.js.map +1 -1
- package/src/lib/record/run.mjs +68 -21
- package/src/lib/record/run.mjs.map +1 -1
- package/src/lib/record/search.d.mts +8 -1
- package/src/lib/record/search.d.ts +8 -1
- package/src/lib/record/search.js +28 -8
- package/src/lib/record/search.js.map +1 -1
- package/src/lib/record/search.mjs +28 -8
- package/src/lib/record/search.mjs.map +1 -1
- package/src/lib/record/structures.d.mts +8 -3
- package/src/lib/record/structures.d.ts +8 -3
- package/src/lib/record/structures.js +51 -7
- package/src/lib/record/structures.js.map +1 -1
- package/src/lib/record/structures.mjs +48 -6
- package/src/lib/record/structures.mjs.map +1 -1
- package/src/lib/record/upload-to.d.mts +50 -0
- package/src/lib/record/upload-to.d.ts +50 -0
- package/src/lib/record/upload-to.js +117 -0
- package/src/lib/record/upload-to.js.map +1 -0
- package/src/lib/record/upload-to.mjs +114 -0
- package/src/lib/record/upload-to.mjs.map +1 -0
- package/src/lib/record/uploads.d.mts +152 -0
- package/src/lib/record/uploads.d.ts +152 -0
- package/src/lib/record/uploads.js +345 -0
- package/src/lib/record/uploads.js.map +1 -0
- package/src/lib/record/uploads.mjs +337 -0
- package/src/lib/record/uploads.mjs.map +1 -0
- package/src/lib/record/values.d.mts +6 -0
- package/src/lib/record/values.d.ts +6 -0
- package/src/lib/record/values.js.map +1 -1
- package/src/lib/record/values.mjs.map +1 -1
- package/src/runtime.d.mts +15 -8
- package/src/runtime.d.ts +15 -8
- package/src/runtime.js +48 -1
- package/src/runtime.js.map +1 -1
- package/src/runtime.mjs +12 -5
- package/src/runtime.mjs.map +1 -1
package/src/lib/record/check.mjs
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { fieldPattern } from '../format/pattern.mjs';
|
|
1
2
|
import { checkDay } from './limits.mjs';
|
|
2
3
|
import { fill, MESSAGES } from './messages.mjs';
|
|
4
|
+
import { charCount, foldDigits, MOST_DIGITS, placesOf, stripMarks } from './input-rules.mjs';
|
|
3
5
|
import { isEmpty } from './values.mjs';
|
|
4
6
|
/**
|
|
5
7
|
* Check one value against its field. Returns the message to show, or
|
|
6
|
-
* undefined when the value is fine
|
|
7
|
-
*
|
|
8
|
+
* undefined when the value is fine, naming the field ("Name is required",
|
|
9
|
+
* "Bio takes at most 120 characters").
|
|
8
10
|
*
|
|
9
11
|
* An empty optional value passes everything: a pattern or a minimum applies
|
|
10
12
|
* to what someone typed, not to a field they left alone.
|
|
@@ -24,11 +26,18 @@ today) {
|
|
|
24
26
|
case 'html': {
|
|
25
27
|
if (typeof value !== 'string')
|
|
26
28
|
return say('text');
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
// Characters as a person sees them and a server counts them: an emoji is one. A text pasted over its most is
|
|
30
|
+
// kept whole, and told how far over it is.
|
|
31
|
+
const count = (field.type === 'char' || field.type === 'text') && field.size !== undefined ? charCount(value) : 0;
|
|
32
|
+
if ((field.type === 'char' || field.type === 'text') && field.size !== undefined && count > field.size) {
|
|
33
|
+
// One over is said as one: "1 character over", never "1 characters".
|
|
34
|
+
return say(count - field.size === 1 ? 'overByOne' : 'overBy', { max: field.size, over: count - field.size });
|
|
29
35
|
}
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
// The whole answer, trimmed, its digits as 0-9 and no direction marks: "١١٥١١" is five digits. A pattern that
|
|
37
|
+
// does not read is the page's to fix (checkPage names it), never a reason to refuse a person.
|
|
38
|
+
const pattern = field.type === 'char' && field.pattern !== undefined ? fieldPattern(field.pattern) : null;
|
|
39
|
+
if (field.type === 'char' && pattern instanceof RegExp && !pattern.test(foldDigits(stripMarks(value)).trim())) {
|
|
40
|
+
return field.patternHint ? fill(field.patternHint, { label }) : say('pattern');
|
|
32
41
|
}
|
|
33
42
|
return undefined;
|
|
34
43
|
}
|
|
@@ -43,9 +52,17 @@ today) {
|
|
|
43
52
|
return say('min', { min: field.min });
|
|
44
53
|
if (field.max !== undefined && value > field.max)
|
|
45
54
|
return say('max', { max: field.max });
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
const digits = field.type === 'integer' ? undefined : field.digits;
|
|
56
|
+
if (digits && placesOf(value) > digits[1])
|
|
57
|
+
return digits[1] === 0 ? say('integer') : say(decimalsKey(digits[1], messages.locale), { digits: digits[1] });
|
|
58
|
+
// Past what a number keeps exactly (15 digits, a safe whole number), or past the field's own digits[0]: a value
|
|
59
|
+
// from outside, as a box never takes one. The whole part counts, and the places the field keeps.
|
|
60
|
+
const integerPart = Math.trunc(Math.abs(value));
|
|
61
|
+
const whole = integerPart === 0 ? 0 : integerPart < 1e21 ? String(integerPart).length : 22;
|
|
62
|
+
if (whole > MOST_DIGITS || (field.type === 'integer' && !Number.isSafeInteger(value)))
|
|
63
|
+
return say('digits', { n: MOST_DIGITS });
|
|
64
|
+
if (digits && whole > digits[0] - digits[1])
|
|
65
|
+
return say('digits', { n: digits[0] });
|
|
49
66
|
return undefined;
|
|
50
67
|
}
|
|
51
68
|
case 'boolean':
|
|
@@ -88,10 +105,32 @@ today) {
|
|
|
88
105
|
case 'binary':
|
|
89
106
|
case 'image':
|
|
90
107
|
return checkFiles(field, value, say, messages);
|
|
108
|
+
case 'properties':
|
|
109
|
+
return Object.values(checkProperties(field.definitions, value, messages, today))[0];
|
|
91
110
|
default:
|
|
92
111
|
return undefined;
|
|
93
112
|
}
|
|
94
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* A properties value checked property by property, each as a field of its
|
|
116
|
+
* kind: text, a whole number, a number, yes or no, a choice, a date. Their
|
|
117
|
+
* problems by property name, in their definitions' order, each naming its
|
|
118
|
+
* property ("Floor must be a whole number"). Nothing is asked of properties
|
|
119
|
+
* with no definitions: each is then worked out from what it holds.
|
|
120
|
+
*/
|
|
121
|
+
export function checkProperties(definitions, value, messages = MESSAGES.en, today) {
|
|
122
|
+
const problems = {};
|
|
123
|
+
if (!definitions || !value || typeof value !== 'object' || Array.isArray(value))
|
|
124
|
+
return problems;
|
|
125
|
+
const values = value;
|
|
126
|
+
for (const definition of definitions) {
|
|
127
|
+
const field = { type: definition.type, label: definition.label, ...(definition.options ? { options: definition.options } : {}) };
|
|
128
|
+
const problem = checkValue(field, values[definition.name], false, messages, today);
|
|
129
|
+
if (problem)
|
|
130
|
+
problems[definition.name] = problem;
|
|
131
|
+
}
|
|
132
|
+
return problems;
|
|
133
|
+
}
|
|
95
134
|
/** A matrix: an answer per row, each from the columns; every row answered when required. */
|
|
96
135
|
function checkMatrix(field, value, required, say) {
|
|
97
136
|
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
@@ -116,12 +155,28 @@ function checkMatrix(field, value, required, say) {
|
|
|
116
155
|
return say('matrixRows');
|
|
117
156
|
return undefined;
|
|
118
157
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
158
|
+
/** A field takes at most `places` decimal places, in its language's words and plural form ("Area takes at most 1 decimal place"). */
|
|
159
|
+
export function decimalsWords(label, places, messages = MESSAGES.en) {
|
|
160
|
+
return fill(places === 0 ? messages.integer : messages[decimalsKey(places, messages.locale)], { label, digits: places });
|
|
161
|
+
}
|
|
162
|
+
const pluralRules = new Map();
|
|
163
|
+
/**
|
|
164
|
+
* The decimals message for `places`, in the plural form the language takes for
|
|
165
|
+
* it: one; two (Arabic's dual); 3 to 10; 11 and more (Arabic's singular after them).
|
|
166
|
+
*/
|
|
167
|
+
function decimalsKey(places, locale) {
|
|
168
|
+
let rules = pluralRules.get(locale);
|
|
169
|
+
if (!rules) {
|
|
170
|
+
try {
|
|
171
|
+
rules = new Intl.PluralRules(locale);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
rules = new Intl.PluralRules('en');
|
|
175
|
+
}
|
|
176
|
+
pluralRules.set(locale, rules);
|
|
177
|
+
}
|
|
178
|
+
const form = rules.select(places);
|
|
179
|
+
return form === 'one' ? 'decimalsOne' : form === 'two' ? 'decimalsTwo' : form === 'many' || (form === 'other' && locale === 'ar') ? 'decimalsMany' : 'decimals';
|
|
125
180
|
}
|
|
126
181
|
function isRecord(value) {
|
|
127
182
|
return (value !== null &&
|
|
@@ -144,8 +199,9 @@ function checkDateTime(value, say) {
|
|
|
144
199
|
const [y, mo, d, h, mi, s] = match.slice(1).map((part) => Number(part ?? 0));
|
|
145
200
|
return realDay(y, mo, d) && h < 24 && mi < 60 && s < 60 ? undefined : say('datetimeInvalid');
|
|
146
201
|
}
|
|
202
|
+
/** A day of the calendar people write: its year of four digits (never year 2, which a box half typed once made), a month and a day it has. */
|
|
147
203
|
function realDay(year, month, day) {
|
|
148
|
-
if (month < 1 || month > 12 || day < 1)
|
|
204
|
+
if (year < 1000 || month < 1 || month > 12 || day < 1)
|
|
149
205
|
return false;
|
|
150
206
|
const lengths = [31, year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
151
207
|
return day <= lengths[month - 1];
|
|
@@ -176,7 +232,7 @@ export function fileProblem(field, file, messages = MESSAGES.en, label = file.na
|
|
|
176
232
|
if (field.maxSize !== undefined && file.size > field.maxSize)
|
|
177
233
|
return fill(messages.fileSize, { label, size: formatBytes(field.maxSize) });
|
|
178
234
|
const accept = field.type === 'image' ? ['image/*'] : field.accept;
|
|
179
|
-
if (accept && !accepts(accept, file.type)) {
|
|
235
|
+
if (accept && !(file.type ? accepts(accept, file.type) : acceptsByName(accept, file.name))) {
|
|
180
236
|
const types = describeTypes(accept, messages.or);
|
|
181
237
|
return fill(messages.fileType, { label, types, aTypes: article(types) });
|
|
182
238
|
}
|
|
@@ -192,6 +248,18 @@ function accepts(patterns, type) {
|
|
|
192
248
|
}
|
|
193
249
|
/** Office kinds by the extension people know them by, from a word in their media type. */
|
|
194
250
|
const EXTENSIONS = 'pdf PDF,msword DOC,wordprocessingml DOCX,opendocument.text ODT,plain TXT,ms-excel XLS,spreadsheetml XLSX,opendocument.spreadsheet ODS,csv CSV,ms-powerpoint PPT,presentationml PPTX,opendocument.presentation ODP'.split(',').map((pair) => pair.split(' '));
|
|
251
|
+
/** The extensions a picture's file ends in, as people know them. */
|
|
252
|
+
const PICTURES = 'PNG JPG JPEG GIF WEBP AVIF HEIC HEIF BMP TIF TIFF SVG'.split(' ');
|
|
253
|
+
/**
|
|
254
|
+
* Whether a file the browser or the system gave no media type (a dropped PDF, on some systems) is one of these kinds,
|
|
255
|
+
* by the extension its name ends in, in any case: "REPORT.PDF" is a PDF, "me.jpg" a picture.
|
|
256
|
+
*/
|
|
257
|
+
function acceptsByName(patterns, name) {
|
|
258
|
+
const extension = /\.([A-Za-z0-9]+)$/.exec(name.trim())?.[1]?.toUpperCase();
|
|
259
|
+
if (!extension)
|
|
260
|
+
return false;
|
|
261
|
+
return patterns.some((pattern) => (pattern === 'image/*' ? PICTURES.includes(extension) : !pattern.endsWith('/*') && [describeType(pattern), pattern === 'image/jpeg' ? 'JPG' : ''].includes(extension)));
|
|
262
|
+
}
|
|
195
263
|
function describeType(pattern) {
|
|
196
264
|
if (pattern.endsWith('/*'))
|
|
197
265
|
return pattern.slice(0, -2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/check.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,18 @@ import type { RunStop } from './run.mjs';
|
|
|
8
8
|
* and every method is optional so a page uses only what it needs.
|
|
9
9
|
*/
|
|
10
10
|
export interface DataSource {
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Read a record. Needed to edit an existing record. Its values, or
|
|
13
|
+
* `loadedRecord(values, { version, can })` to tell also its version — so a
|
|
14
|
+
* save can tell that someone else changed it since — and what this person
|
|
15
|
+
* may do with it. `loadedRecordOf` reads either the same way.
|
|
16
|
+
*/
|
|
17
|
+
load?(request: LoadRequest): Promise<Values | LoadedRecord>;
|
|
18
|
+
/**
|
|
19
|
+
* Create (`id: null`) or update a record. Needed to save a record page. A
|
|
20
|
+
* source that keeps versions compares `request.version` with the record's
|
|
21
|
+
* and throws a `ConflictError` when someone else saved it since.
|
|
22
|
+
*/
|
|
14
23
|
save?(request: SaveRequest): Promise<SaveResult>;
|
|
15
24
|
/** Recalculate after a value changes, the way a backend's onchange does. */
|
|
16
25
|
onchange?(request: OnchangeRequest): Promise<OnchangeResult>;
|
|
@@ -20,7 +29,7 @@ export interface DataSource {
|
|
|
20
29
|
create?(request: CreateRequest): Promise<RelatedRecord>;
|
|
21
30
|
/** Store one response to a `responses` page, such as a survey. */
|
|
22
31
|
submit?(request: SubmitRequest): Promise<SubmitResult>;
|
|
23
|
-
/** Records for a list: filtered, sorted and one page of them, with how many there are in all. */
|
|
32
|
+
/** Records for a list: filtered, sorted and one page of them, with how many there are in all; with `allIds`, the ids of every one that matches. */
|
|
24
33
|
list?(request: ListRequest): Promise<ListResult>;
|
|
25
34
|
/** How many records fall under each value of a field, for a list's Group By. */
|
|
26
35
|
groups?(request: GroupRequest): Promise<Group[]>;
|
|
@@ -43,7 +52,76 @@ export interface DataSource {
|
|
|
43
52
|
* preview: each a file with its `url` (or its `data`) and its media type.
|
|
44
53
|
*/
|
|
45
54
|
attachments?(request: RecordRequest): Promise<FileValue[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Totals over the records a search finds — each field's sum, average,
|
|
57
|
+
* least, most or count — over them all and, with `groupBy`, under each
|
|
58
|
+
* value of a field: the row under a list and the sums on its Group By
|
|
59
|
+
* headings. Without it, a list shows no totals.
|
|
60
|
+
*/
|
|
61
|
+
totals?(request: TotalsRequest): Promise<TotalsResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Store one file where the app keeps files, as soon as it is picked, for a
|
|
64
|
+
* file or picture field: the record then keeps only its link. Without it,
|
|
65
|
+
* a file travels inside the record as base64, as it always has. To fail,
|
|
66
|
+
* throw: the field offers Retry, except after `saveRefused({ kind: 'rule',
|
|
67
|
+
* message })`, which says the store refuses this file (its kind, its
|
|
68
|
+
* size) and is shown as it is.
|
|
69
|
+
*/
|
|
70
|
+
upload?(file: UploadFile, request: UploadRequest): Promise<UploadedFile>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Which state of a record a page opened, as its source keeps it: an etag, a
|
|
74
|
+
* write date, a revision number — Fieldia only hands `token` back — with who
|
|
75
|
+
* changed the record last and when, for the words a conflict shows ("Mona
|
|
76
|
+
* changed this at 10:42").
|
|
77
|
+
*/
|
|
78
|
+
export interface RecordVersion {
|
|
79
|
+
token: string;
|
|
80
|
+
/** Who changed it last, by the name people know them by. */
|
|
81
|
+
by?: string;
|
|
82
|
+
/** When, as an ISO date and time: `2026-10-13T10:42:00Z`. */
|
|
83
|
+
at?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* What this person may do with one record. Each is allowed unless it says
|
|
87
|
+
* `false`, so a source that tells nothing keeps today's behaviour. The page
|
|
88
|
+
* hides what is not allowed — never shows it disabled — and says why.
|
|
89
|
+
*/
|
|
90
|
+
export interface RecordPermissions {
|
|
91
|
+
/** False: the form is read-only for this person, and Save is hidden. */
|
|
92
|
+
edit?: boolean;
|
|
93
|
+
/** False: Delete is hidden, and the `delete` step's buttons. */
|
|
94
|
+
delete?: boolean;
|
|
95
|
+
/** False: Archive and Unarchive are hidden, and those steps' buttons. */
|
|
96
|
+
archive?: boolean;
|
|
97
|
+
/** False: Duplicate is hidden, and the `duplicate` step's buttons. */
|
|
98
|
+
duplicate?: boolean;
|
|
99
|
+
/** Fields this person may see but not change on this record, by name. */
|
|
100
|
+
readonlyFields?: string[];
|
|
101
|
+
/** Fields this person may not see on this record, by name: hidden, and the source leaves their values out. */
|
|
102
|
+
hiddenFields?: string[];
|
|
103
|
+
/** Why not everything is allowed, in the person's language, for the page to say: "Only Mona, the lead's agent, can change it." */
|
|
104
|
+
reason?: string;
|
|
46
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* A record as `load` gives it to tell more than its values. A field cannot
|
|
108
|
+
* be named `$loaded`, so the mark keeps it apart from bare values.
|
|
109
|
+
*/
|
|
110
|
+
export interface LoadedRecord {
|
|
111
|
+
$loaded: true;
|
|
112
|
+
values: Values;
|
|
113
|
+
/** The version it was read at: each save carries it back. */
|
|
114
|
+
version?: RecordVersion;
|
|
115
|
+
/** What this person may do with it. */
|
|
116
|
+
can?: RecordPermissions;
|
|
117
|
+
}
|
|
118
|
+
/** What `load` returns to tell a record's version, or what this person may do with it, beside its values. */
|
|
119
|
+
export declare function loadedRecord(values: Values, more?: {
|
|
120
|
+
version?: RecordVersion;
|
|
121
|
+
can?: RecordPermissions;
|
|
122
|
+
}): LoadedRecord;
|
|
123
|
+
/** What a load gave, in one shape: bare values, as every source gave them before, are a record with nothing more to tell. */
|
|
124
|
+
export declare function loadedRecordOf(loaded: Values | LoadedRecord): LoadedRecord;
|
|
47
125
|
/** One stored record, by its model and id. */
|
|
48
126
|
export interface RecordRequest {
|
|
49
127
|
model: string;
|
|
@@ -83,11 +161,31 @@ export interface SaveRequest {
|
|
|
83
161
|
changes: RecordChanges;
|
|
84
162
|
/** Every value, for sources that save whole records. */
|
|
85
163
|
values: Values;
|
|
164
|
+
/**
|
|
165
|
+
* True when the save carries some of the record's fields, not all of it:
|
|
166
|
+
* `values` then holds the fields in `changes` alone and `fields` names
|
|
167
|
+
* them alone — a save from outside a form, which never had the rest, as a
|
|
168
|
+
* calendar's move and its Undo. A source that saves whole records writes
|
|
169
|
+
* these over the record as stored and keeps every other field.
|
|
170
|
+
*/
|
|
171
|
+
partial?: boolean;
|
|
172
|
+
/**
|
|
173
|
+
* The version the record was opened at — from its load, or from the last
|
|
174
|
+
* save — for a source that refuses a save over someone else's. None for a
|
|
175
|
+
* new record, nor from a source that tells no versions. "Keep mine" after
|
|
176
|
+
* a conflict saves again with the conflict's `version`: these changes over
|
|
177
|
+
* the record as it is now.
|
|
178
|
+
*/
|
|
179
|
+
version?: RecordVersion;
|
|
86
180
|
}
|
|
87
181
|
export interface SaveResult {
|
|
88
182
|
id: RecordId;
|
|
89
183
|
/** The record as stored, when the source recalculated anything. */
|
|
90
184
|
values?: Values;
|
|
185
|
+
/** Its version now, for the next save to carry. */
|
|
186
|
+
version?: RecordVersion;
|
|
187
|
+
/** What the person may do with it now, when the save changed that (a stage that locks it). */
|
|
188
|
+
can?: RecordPermissions;
|
|
91
189
|
}
|
|
92
190
|
export interface OnchangeRequest {
|
|
93
191
|
model: string;
|
|
@@ -137,14 +235,28 @@ export interface ListRequest {
|
|
|
137
235
|
sort: SortOrder[];
|
|
138
236
|
offset: number;
|
|
139
237
|
limit: number;
|
|
238
|
+
/**
|
|
239
|
+
* Give also the id of every record that matches, in this order, in
|
|
240
|
+
* `ListResult.allIds`: for "Select all 1,284 that match", export and bulk
|
|
241
|
+
* edit. A source that leaves it out is paged through instead.
|
|
242
|
+
*/
|
|
243
|
+
allIds?: boolean;
|
|
140
244
|
}
|
|
141
245
|
export interface ListResult {
|
|
142
|
-
records:
|
|
143
|
-
id: RecordId;
|
|
144
|
-
values: Values;
|
|
145
|
-
}[];
|
|
246
|
+
records: ListedRecord[];
|
|
146
247
|
/** How many records match in all, for the pager. */
|
|
147
248
|
total: number;
|
|
249
|
+
/** With `allIds`: every matching record's id. Fewer than `total` means the source stopped short, and the page says so. */
|
|
250
|
+
allIds?: RecordId[];
|
|
251
|
+
}
|
|
252
|
+
/** One row of a list. */
|
|
253
|
+
export interface ListedRecord {
|
|
254
|
+
id: RecordId;
|
|
255
|
+
values: Values;
|
|
256
|
+
/** Its version, for a bulk edit that saves it to carry. */
|
|
257
|
+
version?: RecordVersion;
|
|
258
|
+
/** What the person may do with it: its row's buttons and a bulk edit keep to it. */
|
|
259
|
+
can?: RecordPermissions;
|
|
148
260
|
}
|
|
149
261
|
export interface GroupRequest {
|
|
150
262
|
model: string;
|
|
@@ -157,6 +269,82 @@ export interface Group {
|
|
|
157
269
|
label: string;
|
|
158
270
|
count: number;
|
|
159
271
|
}
|
|
272
|
+
/** How a field is totalled: added up, averaged, its least or its most, or how many records hold a value in it. */
|
|
273
|
+
export type TotalKind = 'sum' | 'avg' | 'min' | 'max' | 'count';
|
|
274
|
+
export interface TotalsRequest {
|
|
275
|
+
model: string;
|
|
276
|
+
/** The list's search, as `list` gets it. For the ticked rows alone, add `{ field: 'id', op: 'in', value: ids }`. */
|
|
277
|
+
filter: ResolvedFilter[];
|
|
278
|
+
/** What to total, by field: `{ amount: ['sum'], hours: ['sum', 'avg'] }`. */
|
|
279
|
+
totals: Record<string, TotalKind[]>;
|
|
280
|
+
/** Total under each value of this field as well, grouped as `groups` groups it: a Group By heading's sums. */
|
|
281
|
+
groupBy?: string;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Each field's totals, by field and then by kind: `totals.amount.sum`. The
|
|
285
|
+
* sum and the count of nothing are 0, the others null. A total the source
|
|
286
|
+
* cannot make honestly — amounts in more than one currency — is null, and
|
|
287
|
+
* the page shows none.
|
|
288
|
+
*/
|
|
289
|
+
export type Totals = Record<string, Partial<Record<TotalKind, number | null>>>;
|
|
290
|
+
export interface TotalsResult {
|
|
291
|
+
/** How many records match. */
|
|
292
|
+
count: number;
|
|
293
|
+
totals: Totals;
|
|
294
|
+
/** With `groupBy`: each value's totals, in the order `groups` gives them. */
|
|
295
|
+
groups?: TotalsGroup[];
|
|
296
|
+
}
|
|
297
|
+
export interface TotalsGroup extends Group {
|
|
298
|
+
totals: Totals;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* A file to store: what an upload reads of a browser's `File`. Core names no
|
|
302
|
+
* DOM types; an adapter may type its parameter `File` and hand it to `fetch`
|
|
303
|
+
* or a storage SDK as it is.
|
|
304
|
+
*/
|
|
305
|
+
export interface UploadFile {
|
|
306
|
+
readonly name: string;
|
|
307
|
+
readonly size: number;
|
|
308
|
+
readonly type: string;
|
|
309
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
310
|
+
}
|
|
311
|
+
/** An `AbortSignal`, as far as an upload listens to it. */
|
|
312
|
+
export interface UploadSignal {
|
|
313
|
+
readonly aborted: boolean;
|
|
314
|
+
addEventListener(type: 'abort', listener: () => void): void;
|
|
315
|
+
removeEventListener(type: 'abort', listener: () => void): void;
|
|
316
|
+
}
|
|
317
|
+
export interface UploadRequest {
|
|
318
|
+
/** The page's model: for a saved form placed in a record, the record's. */
|
|
319
|
+
model: string;
|
|
320
|
+
/**
|
|
321
|
+
* The file or picture field the file is for. In a saved form placed in a
|
|
322
|
+
* record, whose answers the record keeps under the part's name, the field's
|
|
323
|
+
* place in them: `consent.doc`, as a line's table is `consent.items`.
|
|
324
|
+
*/
|
|
325
|
+
field: string;
|
|
326
|
+
/** The record it is for; null while that record is new — its first save links the file to it. */
|
|
327
|
+
recordId: RecordId | null;
|
|
328
|
+
/** For a field on a line of a table: the table's field, the line's key and, once saved, its id. */
|
|
329
|
+
line?: {
|
|
330
|
+
field: string;
|
|
331
|
+
key: string;
|
|
332
|
+
id?: RecordId;
|
|
333
|
+
};
|
|
334
|
+
/** Aborts when the person takes the file away or leaves before it is stored: stop, and reject with an error named `AbortError`. */
|
|
335
|
+
signal?: UploadSignal;
|
|
336
|
+
/** How far it has got, bytes sent of the bytes in all, for its progress bar; without a call the bar moves with no number. */
|
|
337
|
+
onProgress?: (sent: number, total: number) => void;
|
|
338
|
+
}
|
|
339
|
+
/** A stored file, as the field keeps it — a `FileValue` with its link instead of its bytes. */
|
|
340
|
+
export interface UploadedFile {
|
|
341
|
+
url: string;
|
|
342
|
+
name: string;
|
|
343
|
+
size: number;
|
|
344
|
+
type: string;
|
|
345
|
+
/** Its id, where the source keeps files as records of their own (Flectra's attachments): a save links it by this. */
|
|
346
|
+
fileId?: RecordId;
|
|
347
|
+
}
|
|
160
348
|
/**
|
|
161
349
|
* A filter as a search receives it: each `valueFrom` already replaced by its
|
|
162
350
|
* value. An adapter must keep the groups: `any` is an OR, `all` an AND.
|
|
@@ -213,16 +401,42 @@ export type LinkOp = {
|
|
|
213
401
|
/**
|
|
214
402
|
* Why a save was refused, so each kind is shown where it belongs: `fields`
|
|
215
403
|
* under those fields, a `rule` (a backend's business rule) in a dialog,
|
|
216
|
-
* `network` in a banner with Retry,
|
|
404
|
+
* `network` in a banner with Retry, `other` beside Save with Retry, and a
|
|
405
|
+
* `conflict` with Reload and Keep mine.
|
|
217
406
|
*/
|
|
218
407
|
export interface SaveProblem {
|
|
219
408
|
/** `stopped`: a step of the page's `beforeSave` stopped it, with `reason` — no data source was asked. */
|
|
220
|
-
kind: 'fields' | 'rule' | 'network' | 'other' | 'stopped';
|
|
409
|
+
kind: 'fields' | 'rule' | 'network' | 'other' | 'stopped' | 'conflict';
|
|
221
410
|
message: string;
|
|
222
411
|
/** For `fields`: a message for each field, by name. */
|
|
223
412
|
fields?: Record<string, string>;
|
|
224
413
|
/** For `stopped`: why the step stopped. */
|
|
225
414
|
reason?: RunStop;
|
|
415
|
+
/** For `conflict`: who changed the record, when, and what it holds now. */
|
|
416
|
+
conflict?: SaveConflict;
|
|
417
|
+
}
|
|
418
|
+
/** Someone else saved the record after this page opened it. */
|
|
419
|
+
export interface SaveConflict {
|
|
420
|
+
/** The version the record has now, with who changed it and when. Saving with it is "Keep mine". */
|
|
421
|
+
version: RecordVersion;
|
|
422
|
+
/**
|
|
423
|
+
* The record as the other person left it, when the source has it: what
|
|
424
|
+
* Reload shows without asking again, and what a source that saves whole
|
|
425
|
+
* records keeps of theirs under Keep mine — their values, with this
|
|
426
|
+
* person's changes over them.
|
|
427
|
+
*/
|
|
428
|
+
theirs?: Values;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* What a source's save throws when the record changed after the page opened
|
|
432
|
+
* it: `saveProblemOf` reads it as a `conflict`, and the page names who
|
|
433
|
+
* changed it and when (`conflict.version.by`, `.at`) and offers Reload or
|
|
434
|
+
* Keep mine.
|
|
435
|
+
*/
|
|
436
|
+
export declare class ConflictError extends Error {
|
|
437
|
+
readonly conflict: SaveConflict;
|
|
438
|
+
readonly problem: SaveProblem;
|
|
439
|
+
constructor(conflict: SaveConflict, message?: string);
|
|
226
440
|
}
|
|
227
441
|
/** An error for a data source's save to throw when the backend refuses it. */
|
|
228
442
|
export declare function saveRefused(problem: SaveProblem): Error & {
|