@fieldia/core 0.24.0 → 0.26.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 +133 -1
- package/package.json +1 -1
- package/schema/page.schema.json +983 -329
- package/src/index.d.mts +6 -2
- package/src/index.d.ts +6 -2
- package/src/index.js +16 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +7 -2
- package/src/index.mjs.map +1 -1
- package/src/lib/format/actions.d.mts +31 -1
- package/src/lib/format/actions.d.ts +31 -1
- package/src/lib/format/actions.js +1 -0
- package/src/lib/format/actions.js.map +1 -1
- package/src/lib/format/actions.mjs +1 -0
- package/src/lib/format/actions.mjs.map +1 -1
- package/src/lib/format/duplicate-kinds.d.mts +10 -0
- package/src/lib/format/duplicate-kinds.d.ts +10 -0
- package/src/lib/format/duplicate-kinds.js +14 -0
- package/src/lib/format/duplicate-kinds.js.map +1 -0
- package/src/lib/format/duplicate-kinds.mjs +10 -0
- package/src/lib/format/duplicate-kinds.mjs.map +1 -0
- package/src/lib/format/duplicates.d.mts +22 -0
- package/src/lib/format/duplicates.d.ts +22 -0
- package/src/lib/format/duplicates.js +24 -0
- package/src/lib/format/duplicates.js.map +1 -0
- package/src/lib/format/duplicates.mjs +21 -0
- package/src/lib/format/duplicates.mjs.map +1 -0
- package/src/lib/format/field.d.mts +236 -0
- package/src/lib/format/field.d.ts +236 -0
- package/src/lib/format/field.js +4 -3
- package/src/lib/format/field.js.map +1 -1
- package/src/lib/format/field.mjs +2 -1
- package/src/lib/format/field.mjs.map +1 -1
- package/src/lib/format/head-checks.d.mts +3 -1
- package/src/lib/format/head-checks.d.ts +3 -1
- package/src/lib/format/head-checks.js +25 -4
- package/src/lib/format/head-checks.js.map +1 -1
- package/src/lib/format/head-checks.mjs +24 -4
- package/src/lib/format/head-checks.mjs.map +1 -1
- package/src/lib/format/import-fields.d.mts +18 -0
- package/src/lib/format/import-fields.d.ts +18 -0
- package/src/lib/format/import-fields.js +26 -0
- package/src/lib/format/import-fields.js.map +1 -0
- package/src/lib/format/import-fields.mjs +21 -0
- package/src/lib/format/import-fields.mjs.map +1 -0
- package/src/lib/format/layout.d.mts +7391 -3264
- package/src/lib/format/layout.d.ts +7391 -3264
- package/src/lib/format/layout.js +100 -37
- package/src/lib/format/layout.js.map +1 -1
- package/src/lib/format/layout.mjs +99 -36
- package/src/lib/format/layout.mjs.map +1 -1
- package/src/lib/format/layout.types.d.mts +5 -2
- package/src/lib/format/layout.types.d.ts +5 -2
- package/src/lib/format/page.d.mts +1018 -118
- package/src/lib/format/page.d.ts +1018 -118
- package/src/lib/format/page.js +17 -0
- package/src/lib/format/page.js.map +1 -1
- package/src/lib/format/page.mjs +17 -0
- package/src/lib/format/page.mjs.map +1 -1
- package/src/lib/format/records.d.mts +23 -0
- package/src/lib/format/records.d.ts +23 -0
- package/src/lib/format/records.js +28 -0
- package/src/lib/format/records.js.map +1 -0
- package/src/lib/format/records.mjs +25 -0
- package/src/lib/format/records.mjs.map +1 -0
- package/src/lib/format/references.d.mts +31 -0
- package/src/lib/format/references.d.ts +31 -0
- package/src/lib/format/references.js +185 -24
- package/src/lib/format/references.js.map +1 -1
- package/src/lib/format/references.mjs +185 -24
- package/src/lib/format/references.mjs.map +1 -1
- package/src/lib/format/translate.js +12 -6
- package/src/lib/format/translate.js.map +1 -1
- package/src/lib/format/translate.mjs +12 -6
- package/src/lib/format/translate.mjs.map +1 -1
- package/src/lib/format/upgrade.d.mts +8 -3
- package/src/lib/format/upgrade.d.ts +8 -3
- package/src/lib/format/upgrade.js +8 -3
- package/src/lib/format/upgrade.js.map +1 -1
- package/src/lib/format/upgrade.mjs +8 -3
- package/src/lib/format/upgrade.mjs.map +1 -1
- package/src/lib/format/version.d.mts +2 -2
- package/src/lib/format/version.d.ts +2 -2
- package/src/lib/format/version.js +2 -2
- package/src/lib/format/version.js.map +1 -1
- package/src/lib/format/version.mjs +2 -2
- package/src/lib/format/version.mjs.map +1 -1
- package/src/lib/record/check.js +2 -2
- package/src/lib/record/check.js.map +1 -1
- package/src/lib/record/check.mjs +3 -3
- package/src/lib/record/check.mjs.map +1 -1
- package/src/lib/record/data-source.d.mts +121 -0
- package/src/lib/record/data-source.d.ts +121 -0
- package/src/lib/record/data-source.js +16 -0
- package/src/lib/record/data-source.js.map +1 -1
- package/src/lib/record/data-source.mjs +15 -0
- package/src/lib/record/data-source.mjs.map +1 -1
- package/src/lib/record/form.d.mts +51 -3
- package/src/lib/record/form.d.ts +51 -3
- package/src/lib/record/form.js +78 -17
- package/src/lib/record/form.js.map +1 -1
- package/src/lib/record/form.mjs +79 -18
- package/src/lib/record/form.mjs.map +1 -1
- package/src/lib/record/inputs.js +8 -8
- package/src/lib/record/inputs.js.map +1 -1
- package/src/lib/record/inputs.mjs +9 -9
- package/src/lib/record/inputs.mjs.map +1 -1
- package/src/lib/record/limits.js +1 -1
- package/src/lib/record/limits.js.map +1 -1
- package/src/lib/record/limits.mjs +2 -2
- package/src/lib/record/limits.mjs.map +1 -1
- package/src/lib/record/locales/de.js +2 -0
- package/src/lib/record/locales/de.js.map +1 -1
- package/src/lib/record/locales/de.mjs +2 -0
- package/src/lib/record/locales/de.mjs.map +1 -1
- package/src/lib/record/memory-data-source.d.mts +12 -5
- package/src/lib/record/memory-data-source.d.ts +12 -5
- package/src/lib/record/memory-data-source.js +85 -1
- package/src/lib/record/memory-data-source.js.map +1 -1
- package/src/lib/record/memory-data-source.mjs +86 -2
- package/src/lib/record/memory-data-source.mjs.map +1 -1
- package/src/lib/record/memory-duplicates.d.mts +19 -0
- package/src/lib/record/memory-duplicates.d.ts +19 -0
- package/src/lib/record/memory-duplicates.js +78 -0
- package/src/lib/record/memory-duplicates.js.map +1 -0
- package/src/lib/record/memory-duplicates.mjs +74 -0
- package/src/lib/record/memory-duplicates.mjs.map +1 -0
- package/src/lib/record/messages.d.mts +24 -0
- package/src/lib/record/messages.d.ts +24 -0
- package/src/lib/record/messages.js +25 -0
- package/src/lib/record/messages.js.map +1 -1
- package/src/lib/record/messages.mjs +24 -0
- package/src/lib/record/messages.mjs.map +1 -1
- package/src/lib/record/record-words.d.mts +19 -0
- package/src/lib/record/record-words.d.ts +19 -0
- package/src/lib/record/record-words.js +60 -0
- package/src/lib/record/record-words.js.map +1 -0
- package/src/lib/record/record-words.mjs +56 -0
- package/src/lib/record/record-words.mjs.map +1 -0
- package/src/lib/record/rules.js +1 -1
- package/src/lib/record/rules.js.map +1 -1
- package/src/lib/record/rules.mjs +2 -2
- package/src/lib/record/rules.mjs.map +1 -1
- package/src/lib/record/run.d.mts +39 -1
- package/src/lib/record/run.d.ts +39 -1
- package/src/lib/record/run.js +15 -1
- package/src/lib/record/run.js.map +1 -1
- package/src/lib/record/run.mjs +15 -1
- package/src/lib/record/run.mjs.map +1 -1
- package/src/lib/record/search.js +2 -1
- package/src/lib/record/search.js.map +1 -1
- package/src/lib/record/search.mjs +2 -1
- package/src/lib/record/search.mjs.map +1 -1
- package/src/lib/record/structures.js +3 -3
- package/src/lib/record/structures.js.map +1 -1
- package/src/lib/record/structures.mjs +4 -4
- package/src/lib/record/structures.mjs.map +1 -1
- package/src/lib/record/waits.d.mts +32 -0
- package/src/lib/record/waits.d.ts +32 -0
- package/src/lib/record/waits.js +89 -0
- package/src/lib/record/waits.js.map +1 -0
- package/src/lib/record/waits.mjs +85 -0
- package/src/lib/record/waits.mjs.map +1 -0
- package/src/runtime.d.mts +13 -7
- package/src/runtime.d.ts +13 -7
- package/src/runtime.js +13 -3
- package/src/runtime.js.map +1 -1
- package/src/runtime.mjs +4 -1
- package/src/runtime.mjs.map +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { foldForSearch } from './input-rules.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* How a memory source answers `duplicates` (its `duplicates` option), for demos and tests: each stored record of the
|
|
4
|
+
* model but the one typed, alike in a field asked when it holds the same — a phone, an email, an id as people write
|
|
5
|
+
* them apart ("+20 2 2345-6789" is "+20223456789", an email in any case, "123-456-789" is "123 456 789"), a link by its
|
|
6
|
+
* record — or, in its name field, a name close enough (`nameLikeness`, 0.8 or more). The likest first, then those
|
|
7
|
+
* alike in more fields. Outside the one-tag script, as `scheduleSlots` is.
|
|
8
|
+
*
|
|
9
|
+
* createMemoryDataSource({ records, duplicates: alikeRecords() })
|
|
10
|
+
*/
|
|
11
|
+
export function alikeRecords(how = {}) {
|
|
12
|
+
return (request, records) => {
|
|
13
|
+
const named = how.names?.[request.model] ?? 'name';
|
|
14
|
+
const matches = [];
|
|
15
|
+
for (const [key, values] of Object.entries(records[request.model] ?? {})) {
|
|
16
|
+
if (request.recordId !== null && String(request.recordId) === key)
|
|
17
|
+
continue;
|
|
18
|
+
const alike = request.fields
|
|
19
|
+
.map((field) => [field, field === named ? nameLikeness(request.values[field], values[field]) : sameValue(request.values[field], values[field]) ? 1 : 0])
|
|
20
|
+
.filter(([, likeness]) => likeness >= NAME_LIKE);
|
|
21
|
+
if (!alike.length)
|
|
22
|
+
continue;
|
|
23
|
+
const id = Number.isFinite(Number(key)) ? Number(key) : key;
|
|
24
|
+
const name = values[named];
|
|
25
|
+
matches.push({ id, name: typeof name === 'string' ? name : key, why: alike.map(([field]) => field), score: Math.max(...alike.map(([, likeness]) => likeness)) });
|
|
26
|
+
}
|
|
27
|
+
return { matches: matches.sort((a, b) => (b.score ?? 0) - (a.score ?? 0) || b.why.length - a.why.length) };
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** How alike two names must be to be a possible duplicate's (`nameLikeness`). */
|
|
31
|
+
const NAME_LIKE = 0.8;
|
|
32
|
+
/** A link: a record's id and its name. */
|
|
33
|
+
const isLink = (value) => !!value && typeof value === 'object' && !Array.isArray(value) && 'id' in value && 'label' in value;
|
|
34
|
+
/** Words as records are compared by them: an email in any case; anything else folded, its spaces and marks — ( ) - . / — gone ("+20 2 2345-6789" is "+20223456789"). */
|
|
35
|
+
const comparedText = (text) => (text.includes('@') ? text.trim().toLowerCase() : foldForSearch(text).replace(/[\s()./-]+/g, ''));
|
|
36
|
+
/** Whether two values are the same as people write them apart: a link by its record, words as `comparedText`, numbers by their value. Nothing is the same as nothing. */
|
|
37
|
+
function sameValue(a, b) {
|
|
38
|
+
if (a === null || a === undefined || a === '' || b === null || b === undefined || b === '')
|
|
39
|
+
return false;
|
|
40
|
+
if (isLink(a) || isLink(b))
|
|
41
|
+
return isLink(a) && isLink(b) && String(a.id) === String(b.id);
|
|
42
|
+
if (typeof a === 'string' && typeof b === 'string')
|
|
43
|
+
return comparedText(a) !== '' && comparedText(a) === comparedText(b);
|
|
44
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* How alike two names are, from 0 to 1: 1 the same as people write it (any case, marks, spaces); 0.9 when every word
|
|
48
|
+
* of the shorter one, two or more, is in the longer ("Nile Traders", "Nile Traders Co."); else how many of their
|
|
49
|
+
* pairs of letters they share (Dice's coefficient: "Nile Trader", "Nile Traders" are 0.95).
|
|
50
|
+
*/
|
|
51
|
+
export function nameLikeness(a, b) {
|
|
52
|
+
if (typeof a !== 'string' || typeof b !== 'string')
|
|
53
|
+
return 0;
|
|
54
|
+
const words = (text) => foldForSearch(text).split(/[^\p{L}\p{N}]+/u).filter(Boolean);
|
|
55
|
+
const [x, y] = [words(a), words(b)];
|
|
56
|
+
if (!x.length || !y.length)
|
|
57
|
+
return 0;
|
|
58
|
+
if (x.join(' ') === y.join(' '))
|
|
59
|
+
return 1;
|
|
60
|
+
const [short, long] = x.length <= y.length ? [x, y] : [y, x];
|
|
61
|
+
if (short.length > 1 && short.every((word) => long.includes(word)))
|
|
62
|
+
return 0.9;
|
|
63
|
+
const pairs = (text) => Array.from({ length: Math.max(0, text.length - 1) }, (_, at) => text.slice(at, at + 2));
|
|
64
|
+
const [p, q] = [pairs(x.join('')), pairs(y.join(''))];
|
|
65
|
+
const left = [...q];
|
|
66
|
+
const shared = p.filter((pair) => {
|
|
67
|
+
const at = left.indexOf(pair);
|
|
68
|
+
if (at >= 0)
|
|
69
|
+
left.splice(at, 1);
|
|
70
|
+
return at >= 0;
|
|
71
|
+
}).length;
|
|
72
|
+
return p.length + q.length ? (2 * shared) / (p.length + q.length) : 0;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=memory-duplicates.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-duplicates.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/memory-duplicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAK9C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAA0C,EAAE;IACvE,OAAO,CAAC,OAA0B,EAAE,OAAyD,EAAoB,EAAE;QACjH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;QACnD,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG;gBAAE,SAAS;YAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;iBACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC;iBAChK,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,SAAS;YAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QACnK,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7G,CAAC,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,0CAA0C;AAC1C,MAAM,MAAM,GAAG,CAAC,KAAc,EAA0B,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC;AAE9J,wKAAwK;AACxK,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AAEzI,yKAAyK;AACzK,SAAS,SAAS,CAAC,CAAU,EAAE,CAAU;IACvC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACzG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;IACzH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,CAAU,EAAE,CAAU;IACjD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7F,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/E,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC,MAAM,CAAC;IACV,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -103,6 +103,18 @@ export interface Messages {
|
|
|
103
103
|
discardChanges: string;
|
|
104
104
|
/** Why a run of steps stopped: the record it ran on was replaced by another while it went on, and its steps are not for that one. */
|
|
105
105
|
recordReplaced: string;
|
|
106
|
+
/**
|
|
107
|
+
* The same sentences in the words a page names its records by (`Page.records`): `{record}` for one, `{records}` for
|
|
108
|
+
* more, `{aRecord}` for one with its article. Where a language leaves one out, it says its own sentence above.
|
|
109
|
+
*/
|
|
110
|
+
archiveConfirmNoun?: string;
|
|
111
|
+
deleteConfirmNoun?: string;
|
|
112
|
+
mayNotEditNoun?: string;
|
|
113
|
+
mayNotArchiveNoun?: string;
|
|
114
|
+
mayNotDuplicateNoun?: string;
|
|
115
|
+
mayNotDeleteNoun?: string;
|
|
116
|
+
discardChangesNoun?: string;
|
|
117
|
+
recordReplacedNoun?: string;
|
|
106
118
|
/** A text longer than its most, pasted whole: `{over}` characters too long for its `{max}`; one over (`overByOne`). The one message: its count stays a count. */
|
|
107
119
|
overBy: string;
|
|
108
120
|
overByOne: string;
|
|
@@ -118,8 +130,15 @@ export interface Messages {
|
|
|
118
130
|
patternBroken: string;
|
|
119
131
|
/** The language the days in these messages are written in, as Intl reads it. */
|
|
120
132
|
locale: string;
|
|
133
|
+
/**
|
|
134
|
+
* A field's label written small where a message puts it inside its sentence — "Choose at least 2 for interests" — as
|
|
135
|
+
* a form's page asks (`lowerLabels`): set on the form's own messages, never in a language's table.
|
|
136
|
+
*/
|
|
137
|
+
lowerLabels?: boolean;
|
|
121
138
|
}
|
|
122
139
|
export type Locale = 'en' | 'ar' | 'de' | 'fr';
|
|
140
|
+
/** A message every language has: the sentences in a page's words for its records (`…Noun`) are each language's own to give. */
|
|
141
|
+
export type MessageKey = Exclude<keyof Messages, `${string}Noun` | 'lowerLabels'>;
|
|
123
142
|
/**
|
|
124
143
|
* The messages in every language Fieldia has. This package holds all four;
|
|
125
144
|
* the one-tag script holds English alone, and a page adds another language
|
|
@@ -127,5 +146,10 @@ export type Locale = 'en' | 'ar' | 'de' | 'fr';
|
|
|
127
146
|
* `addLanguage`.
|
|
128
147
|
*/
|
|
129
148
|
export declare const MESSAGES: Record<Locale, Messages>;
|
|
149
|
+
/**
|
|
150
|
+
* A message filled in (`fill`), each field's label as its sentence puts it (`labelAt`): small inside the sentence where
|
|
151
|
+
* the form's page asks (`messages.lowerLabels`), else as written.
|
|
152
|
+
*/
|
|
153
|
+
export declare function fillMessage(messages: Messages, template: string, values: Record<string, string | number>): string;
|
|
130
154
|
/** Fill `{name}` placeholders. */
|
|
131
155
|
export declare function fill(template: string, values: Record<string, string | number>): string;
|
|
@@ -103,6 +103,18 @@ export interface Messages {
|
|
|
103
103
|
discardChanges: string;
|
|
104
104
|
/** Why a run of steps stopped: the record it ran on was replaced by another while it went on, and its steps are not for that one. */
|
|
105
105
|
recordReplaced: string;
|
|
106
|
+
/**
|
|
107
|
+
* The same sentences in the words a page names its records by (`Page.records`): `{record}` for one, `{records}` for
|
|
108
|
+
* more, `{aRecord}` for one with its article. Where a language leaves one out, it says its own sentence above.
|
|
109
|
+
*/
|
|
110
|
+
archiveConfirmNoun?: string;
|
|
111
|
+
deleteConfirmNoun?: string;
|
|
112
|
+
mayNotEditNoun?: string;
|
|
113
|
+
mayNotArchiveNoun?: string;
|
|
114
|
+
mayNotDuplicateNoun?: string;
|
|
115
|
+
mayNotDeleteNoun?: string;
|
|
116
|
+
discardChangesNoun?: string;
|
|
117
|
+
recordReplacedNoun?: string;
|
|
106
118
|
/** A text longer than its most, pasted whole: `{over}` characters too long for its `{max}`; one over (`overByOne`). The one message: its count stays a count. */
|
|
107
119
|
overBy: string;
|
|
108
120
|
overByOne: string;
|
|
@@ -118,8 +130,15 @@ export interface Messages {
|
|
|
118
130
|
patternBroken: string;
|
|
119
131
|
/** The language the days in these messages are written in, as Intl reads it. */
|
|
120
132
|
locale: string;
|
|
133
|
+
/**
|
|
134
|
+
* A field's label written small where a message puts it inside its sentence — "Choose at least 2 for interests" — as
|
|
135
|
+
* a form's page asks (`lowerLabels`): set on the form's own messages, never in a language's table.
|
|
136
|
+
*/
|
|
137
|
+
lowerLabels?: boolean;
|
|
121
138
|
}
|
|
122
139
|
export type Locale = 'en' | 'ar' | 'de' | 'fr';
|
|
140
|
+
/** A message every language has: the sentences in a page's words for its records (`…Noun`) are each language's own to give. */
|
|
141
|
+
export type MessageKey = Exclude<keyof Messages, `${string}Noun` | 'lowerLabels'>;
|
|
123
142
|
/**
|
|
124
143
|
* The messages in every language Fieldia has. This package holds all four;
|
|
125
144
|
* the one-tag script holds English alone, and a page adds another language
|
|
@@ -127,5 +146,10 @@ export type Locale = 'en' | 'ar' | 'de' | 'fr';
|
|
|
127
146
|
* `addLanguage`.
|
|
128
147
|
*/
|
|
129
148
|
export declare const MESSAGES: Record<Locale, Messages>;
|
|
149
|
+
/**
|
|
150
|
+
* A message filled in (`fill`), each field's label as its sentence puts it (`labelAt`): small inside the sentence where
|
|
151
|
+
* the form's page asks (`messages.lowerLabels`), else as written.
|
|
152
|
+
*/
|
|
153
|
+
export declare function fillMessage(messages: Messages, template: string, values: Record<string, string | number>): string;
|
|
130
154
|
/** Fill `{name}` placeholders. */
|
|
131
155
|
export declare function fill(template: string, values: Record<string, string | number>): string;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MESSAGES = void 0;
|
|
4
|
+
exports.fillMessage = fillMessage;
|
|
4
5
|
exports.fill = fill;
|
|
5
6
|
const all_1 = require("./locales/all");
|
|
7
|
+
const record_words_1 = require("./record-words");
|
|
6
8
|
/** English: always here, and the words a language leaves out. */
|
|
7
9
|
const en = {
|
|
8
10
|
required: '{label} is required',
|
|
@@ -70,6 +72,14 @@ const en = {
|
|
|
70
72
|
theirsUnread: 'Their version could not be read, so yours was not saved over it. Try Keep mine again, or Reload.',
|
|
71
73
|
discardChanges: 'Discard your changes?',
|
|
72
74
|
recordReplaced: 'Another record is shown now: the rest of these steps did not run.',
|
|
75
|
+
archiveConfirmNoun: 'Are you sure that you want to archive this {record}?',
|
|
76
|
+
deleteConfirmNoun: 'Are you sure you want to delete this {record}?',
|
|
77
|
+
mayNotEditNoun: 'You can read this {record}, but not change it.',
|
|
78
|
+
mayNotArchiveNoun: 'You cannot archive this {record}.',
|
|
79
|
+
mayNotDuplicateNoun: 'You cannot duplicate this {record}.',
|
|
80
|
+
mayNotDeleteNoun: 'You cannot delete this {record}.',
|
|
81
|
+
discardChangesNoun: 'Discard your changes to this {record}?',
|
|
82
|
+
recordReplacedNoun: 'Another {record} is shown now: the rest of these steps did not run.',
|
|
73
83
|
overBy: '{label} is {over} characters too long: shorten it to {max}',
|
|
74
84
|
overByOne: '{label} is 1 character too long: shorten it to {max}',
|
|
75
85
|
postcode: '{label}: a postcode in {country} has {n} digits, like {example}',
|
|
@@ -86,6 +96,21 @@ const en = {
|
|
|
86
96
|
* `addLanguage`.
|
|
87
97
|
*/
|
|
88
98
|
exports.MESSAGES = { en, ...all_1.LANGUAGES };
|
|
99
|
+
/** The blanks of a message a field's label fills: its own, a table's column, a range's start and end. */
|
|
100
|
+
const LABELS = ['label', 'column', 'start', 'end'];
|
|
101
|
+
/**
|
|
102
|
+
* A message filled in (`fill`), each field's label as its sentence puts it (`labelAt`): small inside the sentence where
|
|
103
|
+
* the form's page asks (`messages.lowerLabels`), else as written.
|
|
104
|
+
*/
|
|
105
|
+
function fillMessage(messages, template, values) {
|
|
106
|
+
if (!messages.lowerLabels)
|
|
107
|
+
return fill(template, values);
|
|
108
|
+
const own = { ...values };
|
|
109
|
+
for (const key of LABELS)
|
|
110
|
+
if (typeof own[key] === 'string')
|
|
111
|
+
own[key] = (0, record_words_1.labelAt)(template, key, true, messages.locale)(own[key]);
|
|
112
|
+
return fill(template, own);
|
|
113
|
+
}
|
|
89
114
|
/** Fill `{name}` placeholders. */
|
|
90
115
|
function fill(template, values) {
|
|
91
116
|
return template.replace(/\{(\w+)\}/g, (match, name) => (name in values ? String(values[name]) : match));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/messages.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LANGUAGES } from './locales/all.mjs';
|
|
2
|
+
import { labelAt } from './record-words.mjs';
|
|
2
3
|
/** English: always here, and the words a language leaves out. */
|
|
3
4
|
const en = {
|
|
4
5
|
required: '{label} is required',
|
|
@@ -66,6 +67,14 @@ const en = {
|
|
|
66
67
|
theirsUnread: 'Their version could not be read, so yours was not saved over it. Try Keep mine again, or Reload.',
|
|
67
68
|
discardChanges: 'Discard your changes?',
|
|
68
69
|
recordReplaced: 'Another record is shown now: the rest of these steps did not run.',
|
|
70
|
+
archiveConfirmNoun: 'Are you sure that you want to archive this {record}?',
|
|
71
|
+
deleteConfirmNoun: 'Are you sure you want to delete this {record}?',
|
|
72
|
+
mayNotEditNoun: 'You can read this {record}, but not change it.',
|
|
73
|
+
mayNotArchiveNoun: 'You cannot archive this {record}.',
|
|
74
|
+
mayNotDuplicateNoun: 'You cannot duplicate this {record}.',
|
|
75
|
+
mayNotDeleteNoun: 'You cannot delete this {record}.',
|
|
76
|
+
discardChangesNoun: 'Discard your changes to this {record}?',
|
|
77
|
+
recordReplacedNoun: 'Another {record} is shown now: the rest of these steps did not run.',
|
|
69
78
|
overBy: '{label} is {over} characters too long: shorten it to {max}',
|
|
70
79
|
overByOne: '{label} is 1 character too long: shorten it to {max}',
|
|
71
80
|
postcode: '{label}: a postcode in {country} has {n} digits, like {example}',
|
|
@@ -82,6 +91,21 @@ const en = {
|
|
|
82
91
|
* `addLanguage`.
|
|
83
92
|
*/
|
|
84
93
|
export const MESSAGES = { en, ...LANGUAGES };
|
|
94
|
+
/** The blanks of a message a field's label fills: its own, a table's column, a range's start and end. */
|
|
95
|
+
const LABELS = ['label', 'column', 'start', 'end'];
|
|
96
|
+
/**
|
|
97
|
+
* A message filled in (`fill`), each field's label as its sentence puts it (`labelAt`): small inside the sentence where
|
|
98
|
+
* the form's page asks (`messages.lowerLabels`), else as written.
|
|
99
|
+
*/
|
|
100
|
+
export function fillMessage(messages, template, values) {
|
|
101
|
+
if (!messages.lowerLabels)
|
|
102
|
+
return fill(template, values);
|
|
103
|
+
const own = { ...values };
|
|
104
|
+
for (const key of LABELS)
|
|
105
|
+
if (typeof own[key] === 'string')
|
|
106
|
+
own[key] = labelAt(template, key, true, messages.locale)(own[key]);
|
|
107
|
+
return fill(template, own);
|
|
108
|
+
}
|
|
85
109
|
/** Fill `{name}` placeholders. */
|
|
86
110
|
export function fill(template, values) {
|
|
87
111
|
return template.replace(/\{(\w+)\}/g, (match, name) => (name in values ? String(values[name]) : match));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PageRecords } from '../format/records.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* One of Fieldia's sentences in the words a page names its records by (`Page.records`): `named` — the sentence with
|
|
4
|
+
* `{record}` (one), `{records}` (more than one) and `{aRecord}` (one with its article) — those filled in, its first
|
|
5
|
+
* letter a capital where one of them begins it, and the rest (`{n}` and the like) left for its own fill. Else `plain`,
|
|
6
|
+
* the sentence as a page that names none reads it: where the page names no records, the language has no such sentence
|
|
7
|
+
* (`named` left out), or the sentence needs `a` and the page gave none — an article is never guessed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function recordSentence(records: PageRecords | undefined, named: string | undefined, plain: string, locale?: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* A field's label as a sentence of Fieldia's puts it at its blank `key` (`{label}`, `{field}`, `{fields}`…): with a
|
|
12
|
+
* small first letter where the page asks (`lower`: its `lowerLabels`) and the blank stands inside the sentence
|
|
13
|
+
* — after a word of it, a colon's words too: "Choose at least 2 for interests", "Fix tax rate to see total", "Check:
|
|
14
|
+
* phone" — else as written. A label that begins its sentence keeps its capital: "Phone is required", and "Status: …" at
|
|
15
|
+
* a line's start, a heading's place. So does a name ("IBAN", "WhatsApp", "E-mail"), and every label in a language that
|
|
16
|
+
* writes its nouns with a capital (German) or in a script with none (Arabic): a label there is as the page wrote it. Where a sentence puts the blank in both places, as
|
|
17
|
+
* written. The one rule every caller asks; the quiet look's "Add story points" asks it always.
|
|
18
|
+
*/
|
|
19
|
+
export declare function labelAt(template: string, key: string, lower: boolean | undefined, locale?: string): (label: string) => string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PageRecords } from '../format/records';
|
|
2
|
+
/**
|
|
3
|
+
* One of Fieldia's sentences in the words a page names its records by (`Page.records`): `named` — the sentence with
|
|
4
|
+
* `{record}` (one), `{records}` (more than one) and `{aRecord}` (one with its article) — those filled in, its first
|
|
5
|
+
* letter a capital where one of them begins it, and the rest (`{n}` and the like) left for its own fill. Else `plain`,
|
|
6
|
+
* the sentence as a page that names none reads it: where the page names no records, the language has no such sentence
|
|
7
|
+
* (`named` left out), or the sentence needs `a` and the page gave none — an article is never guessed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function recordSentence(records: PageRecords | undefined, named: string | undefined, plain: string, locale?: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* A field's label as a sentence of Fieldia's puts it at its blank `key` (`{label}`, `{field}`, `{fields}`…): with a
|
|
12
|
+
* small first letter where the page asks (`lower`: its `lowerLabels`) and the blank stands inside the sentence
|
|
13
|
+
* — after a word of it, a colon's words too: "Choose at least 2 for interests", "Fix tax rate to see total", "Check:
|
|
14
|
+
* phone" — else as written. A label that begins its sentence keeps its capital: "Phone is required", and "Status: …" at
|
|
15
|
+
* a line's start, a heading's place. So does a name ("IBAN", "WhatsApp", "E-mail"), and every label in a language that
|
|
16
|
+
* writes its nouns with a capital (German) or in a script with none (Arabic): a label there is as the page wrote it. Where a sentence puts the blank in both places, as
|
|
17
|
+
* written. The one rule every caller asks; the quiet look's "Add story points" asks it always.
|
|
18
|
+
*/
|
|
19
|
+
export declare function labelAt(template: string, key: string, lower: boolean | undefined, locale?: string): (label: string) => string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordSentence = recordSentence;
|
|
4
|
+
exports.labelAt = labelAt;
|
|
5
|
+
const translate_1 = require("../format/translate");
|
|
6
|
+
/** The words of a page's records in a sentence: one, more than one, and one with its article. */
|
|
7
|
+
const NOUNS = /\{(record|records|aRecord)\}/g;
|
|
8
|
+
/** Languages that write every noun with a capital: a label stays as written inside their sentences. */
|
|
9
|
+
const NOUNS_CAPITAL = /^(de|lb)(-|$)/i;
|
|
10
|
+
/** The first letter of some words, whole where it takes two code units; empty for none. */
|
|
11
|
+
const firstOf = (words) => (words ? String.fromCodePoint(words.codePointAt(0)) : '');
|
|
12
|
+
const capital = (words, locale) => firstOf(words).toLocaleUpperCase(locale) + words.slice(firstOf(words).length);
|
|
13
|
+
/**
|
|
14
|
+
* One of Fieldia's sentences in the words a page names its records by (`Page.records`): `named` — the sentence with
|
|
15
|
+
* `{record}` (one), `{records}` (more than one) and `{aRecord}` (one with its article) — those filled in, its first
|
|
16
|
+
* letter a capital where one of them begins it, and the rest (`{n}` and the like) left for its own fill. Else `plain`,
|
|
17
|
+
* the sentence as a page that names none reads it: where the page names no records, the language has no such sentence
|
|
18
|
+
* (`named` left out), or the sentence needs `a` and the page gave none — an article is never guessed.
|
|
19
|
+
*/
|
|
20
|
+
function recordSentence(records, named, plain, locale = 'en') {
|
|
21
|
+
const { one, other, a } = records ?? {};
|
|
22
|
+
if (!one || !other || named === undefined)
|
|
23
|
+
return plain;
|
|
24
|
+
if (named.includes('{aRecord}') && !a)
|
|
25
|
+
return plain;
|
|
26
|
+
const filled = named.replace(NOUNS, (_, noun) => (noun === 'record' ? one : noun === 'records' ? other : a));
|
|
27
|
+
return /^\{(record|records|aRecord)\}/.test(named) ? capital(filled, locale) : filled;
|
|
28
|
+
}
|
|
29
|
+
const asWritten = (label) => label;
|
|
30
|
+
/**
|
|
31
|
+
* A label with a small first letter: one whose first word starts as a common word does ("Phone", "Tax ID", "Order
|
|
32
|
+
* lines"), never a name — a first word with another capital, or none small after its first ("IBAN", "WhatsApp",
|
|
33
|
+
* "E-mail"). Its first letter only, as the quiet look's "Add story points" has always written it.
|
|
34
|
+
*/
|
|
35
|
+
const small = (locale) => (label) => {
|
|
36
|
+
const word = label.split(/\s/, 1)[0];
|
|
37
|
+
if (!/^\p{Lu}\p{Ll}/u.test(word) || /\p{Lu}/u.test(word.slice(firstOf(word).length)))
|
|
38
|
+
return label;
|
|
39
|
+
return firstOf(label).toLocaleLowerCase(locale) + label.slice(firstOf(label).length);
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* A field's label as a sentence of Fieldia's puts it at its blank `key` (`{label}`, `{field}`, `{fields}`…): with a
|
|
43
|
+
* small first letter where the page asks (`lower`: its `lowerLabels`) and the blank stands inside the sentence
|
|
44
|
+
* — after a word of it, a colon's words too: "Choose at least 2 for interests", "Fix tax rate to see total", "Check:
|
|
45
|
+
* phone" — else as written. A label that begins its sentence keeps its capital: "Phone is required", and "Status: …" at
|
|
46
|
+
* a line's start, a heading's place. So does a name ("IBAN", "WhatsApp", "E-mail"), and every label in a language that
|
|
47
|
+
* writes its nouns with a capital (German) or in a script with none (Arabic): a label there is as the page wrote it. Where a sentence puts the blank in both places, as
|
|
48
|
+
* written. The one rule every caller asks; the quiet look's "Add story points" asks it always.
|
|
49
|
+
*/
|
|
50
|
+
function labelAt(template, key, lower, locale = 'en') {
|
|
51
|
+
if (!lower || NOUNS_CAPITAL.test(locale) || (0, translate_1.isRightToLeft)(locale))
|
|
52
|
+
return asWritten;
|
|
53
|
+
const parts = template.split(`{${key}}`);
|
|
54
|
+
if (parts.length < 2)
|
|
55
|
+
return asWritten;
|
|
56
|
+
// Inside its sentence: some words of it before the blank, since the sentence began (the template's start, or a full stop's end).
|
|
57
|
+
const inside = parts.slice(0, -1).every((_, at) => /[\p{L}\p{N}]/u.test(parts.slice(0, at + 1).join(`{${key}}`).split(/[.!?؟]\s+|\n/).pop()));
|
|
58
|
+
return inside ? small(locale) : asWritten;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=record-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-words.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/record-words.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { isRightToLeft } from '../format/translate.mjs';
|
|
2
|
+
/** The words of a page's records in a sentence: one, more than one, and one with its article. */
|
|
3
|
+
const NOUNS = /\{(record|records|aRecord)\}/g;
|
|
4
|
+
/** Languages that write every noun with a capital: a label stays as written inside their sentences. */
|
|
5
|
+
const NOUNS_CAPITAL = /^(de|lb)(-|$)/i;
|
|
6
|
+
/** The first letter of some words, whole where it takes two code units; empty for none. */
|
|
7
|
+
const firstOf = (words) => (words ? String.fromCodePoint(words.codePointAt(0)) : '');
|
|
8
|
+
const capital = (words, locale) => firstOf(words).toLocaleUpperCase(locale) + words.slice(firstOf(words).length);
|
|
9
|
+
/**
|
|
10
|
+
* One of Fieldia's sentences in the words a page names its records by (`Page.records`): `named` — the sentence with
|
|
11
|
+
* `{record}` (one), `{records}` (more than one) and `{aRecord}` (one with its article) — those filled in, its first
|
|
12
|
+
* letter a capital where one of them begins it, and the rest (`{n}` and the like) left for its own fill. Else `plain`,
|
|
13
|
+
* the sentence as a page that names none reads it: where the page names no records, the language has no such sentence
|
|
14
|
+
* (`named` left out), or the sentence needs `a` and the page gave none — an article is never guessed.
|
|
15
|
+
*/
|
|
16
|
+
export function recordSentence(records, named, plain, locale = 'en') {
|
|
17
|
+
const { one, other, a } = records ?? {};
|
|
18
|
+
if (!one || !other || named === undefined)
|
|
19
|
+
return plain;
|
|
20
|
+
if (named.includes('{aRecord}') && !a)
|
|
21
|
+
return plain;
|
|
22
|
+
const filled = named.replace(NOUNS, (_, noun) => (noun === 'record' ? one : noun === 'records' ? other : a));
|
|
23
|
+
return /^\{(record|records|aRecord)\}/.test(named) ? capital(filled, locale) : filled;
|
|
24
|
+
}
|
|
25
|
+
const asWritten = (label) => label;
|
|
26
|
+
/**
|
|
27
|
+
* A label with a small first letter: one whose first word starts as a common word does ("Phone", "Tax ID", "Order
|
|
28
|
+
* lines"), never a name — a first word with another capital, or none small after its first ("IBAN", "WhatsApp",
|
|
29
|
+
* "E-mail"). Its first letter only, as the quiet look's "Add story points" has always written it.
|
|
30
|
+
*/
|
|
31
|
+
const small = (locale) => (label) => {
|
|
32
|
+
const word = label.split(/\s/, 1)[0];
|
|
33
|
+
if (!/^\p{Lu}\p{Ll}/u.test(word) || /\p{Lu}/u.test(word.slice(firstOf(word).length)))
|
|
34
|
+
return label;
|
|
35
|
+
return firstOf(label).toLocaleLowerCase(locale) + label.slice(firstOf(label).length);
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A field's label as a sentence of Fieldia's puts it at its blank `key` (`{label}`, `{field}`, `{fields}`…): with a
|
|
39
|
+
* small first letter where the page asks (`lower`: its `lowerLabels`) and the blank stands inside the sentence
|
|
40
|
+
* — after a word of it, a colon's words too: "Choose at least 2 for interests", "Fix tax rate to see total", "Check:
|
|
41
|
+
* phone" — else as written. A label that begins its sentence keeps its capital: "Phone is required", and "Status: …" at
|
|
42
|
+
* a line's start, a heading's place. So does a name ("IBAN", "WhatsApp", "E-mail"), and every label in a language that
|
|
43
|
+
* writes its nouns with a capital (German) or in a script with none (Arabic): a label there is as the page wrote it. Where a sentence puts the blank in both places, as
|
|
44
|
+
* written. The one rule every caller asks; the quiet look's "Add story points" asks it always.
|
|
45
|
+
*/
|
|
46
|
+
export function labelAt(template, key, lower, locale = 'en') {
|
|
47
|
+
if (!lower || NOUNS_CAPITAL.test(locale) || isRightToLeft(locale))
|
|
48
|
+
return asWritten;
|
|
49
|
+
const parts = template.split(`{${key}}`);
|
|
50
|
+
if (parts.length < 2)
|
|
51
|
+
return asWritten;
|
|
52
|
+
// Inside its sentence: some words of it before the blank, since the sentence began (the template's start, or a full stop's end).
|
|
53
|
+
const inside = parts.slice(0, -1).every((_, at) => /[\p{L}\p{N}]/u.test(parts.slice(0, at + 1).join(`{${key}}`).split(/[.!?؟]\s+|\n/).pop()));
|
|
54
|
+
return inside ? small(locale) : asWritten;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=record-words.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-words.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/record-words.ts"],"names":[],"mappings":"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"}
|
package/src/lib/record/rules.js
CHANGED
|
@@ -28,7 +28,7 @@ function checkRules(field, label, value, rules, at) {
|
|
|
28
28
|
continue;
|
|
29
29
|
const broken = brokenAsk(compiled, field, value, at.now, at.env.today?.()) ?? brokenAcross(compiled, at);
|
|
30
30
|
if (broken)
|
|
31
|
-
found[level] = compiled.rule.message ?? (0, messages_1.
|
|
31
|
+
found[level] = compiled.rule.message ?? (0, messages_1.fillMessage)(at.messages, at.messages[broken.say], { label, ...broken.values });
|
|
32
32
|
}
|
|
33
33
|
return found;
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/rules.ts"],"names":[],"mappings":";;AA0BA,oCAQC;AAWD,gCAgBC;AA1DD,uDAAmD;AACnD,qDAAgF;AAChF,yDAAoD;AACpD,+CAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/rules.ts"],"names":[],"mappings":"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"}
|
package/src/lib/record/rules.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { localDay } from '../expression/functions.mjs';
|
|
|
2
2
|
import { compileModifier } from '../expression/modifier.mjs';
|
|
3
3
|
import { isNumber } from '../expression/operations.mjs';
|
|
4
4
|
import { foldDigits, stripMarks } from './input-rules.mjs';
|
|
5
|
-
import {
|
|
5
|
+
import { fillMessage } from './messages.mjs';
|
|
6
6
|
import { isEmpty, lineKind } from './values.mjs';
|
|
7
7
|
export function compileRules(rules) {
|
|
8
8
|
return (rules ?? []).map((rule) => ({
|
|
@@ -24,7 +24,7 @@ export function checkRules(field, label, value, rules, at) {
|
|
|
24
24
|
continue;
|
|
25
25
|
const broken = brokenAsk(compiled, field, value, at.now, at.env.today?.()) ?? brokenAcross(compiled, at);
|
|
26
26
|
if (broken)
|
|
27
|
-
found[level] = compiled.rule.message ??
|
|
27
|
+
found[level] = compiled.rule.message ?? fillMessage(at.messages, at.messages[broken.say], { label, ...broken.values });
|
|
28
28
|
}
|
|
29
29
|
return found;
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/rules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAyB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rules.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/record/rules.ts"],"names":[],"mappings":"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"}
|