@evolu/common 8.14.0 → 8.15.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/dist/src/Crypto.d.ts +2 -1
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Redacted.d.ts +19 -39
- package/dist/src/Redacted.d.ts.map +1 -1
- package/dist/src/Redacted.js +18 -33
- package/dist/src/Type.d.ts +161 -0
- package/dist/src/Type.d.ts.map +1 -1
- package/dist/src/Type.js +152 -2
- package/dist/src/WebSocket.d.ts +16 -1
- package/dist/src/WebSocket.d.ts.map +1 -1
- package/dist/src/WebSocket.js +14 -2
- package/dist/src/intl/_en.d.ts +5 -1
- package/dist/src/intl/_en.d.ts.map +1 -1
- package/dist/src/intl/_en.js +4 -0
- package/dist/src/intl/ar.d.ts +5 -1
- package/dist/src/intl/ar.d.ts.map +1 -1
- package/dist/src/intl/ar.js +4 -0
- package/dist/src/intl/bn.d.ts +5 -1
- package/dist/src/intl/bn.d.ts.map +1 -1
- package/dist/src/intl/bn.js +4 -0
- package/dist/src/intl/ca.d.ts +5 -1
- package/dist/src/intl/ca.d.ts.map +1 -1
- package/dist/src/intl/ca.js +4 -0
- package/dist/src/intl/cs.d.ts +5 -1
- package/dist/src/intl/cs.d.ts.map +1 -1
- package/dist/src/intl/cs.js +4 -0
- package/dist/src/intl/da.d.ts +5 -1
- package/dist/src/intl/da.d.ts.map +1 -1
- package/dist/src/intl/da.js +4 -0
- package/dist/src/intl/de.d.ts +5 -1
- package/dist/src/intl/de.d.ts.map +1 -1
- package/dist/src/intl/de.js +4 -0
- package/dist/src/intl/el.d.ts +5 -1
- package/dist/src/intl/el.d.ts.map +1 -1
- package/dist/src/intl/el.js +4 -0
- package/dist/src/intl/es.d.ts +5 -1
- package/dist/src/intl/es.d.ts.map +1 -1
- package/dist/src/intl/es.js +4 -0
- package/dist/src/intl/fa.d.ts +5 -1
- package/dist/src/intl/fa.d.ts.map +1 -1
- package/dist/src/intl/fa.js +4 -0
- package/dist/src/intl/fi.d.ts +5 -1
- package/dist/src/intl/fi.d.ts.map +1 -1
- package/dist/src/intl/fi.js +4 -0
- package/dist/src/intl/fil.d.ts +5 -1
- package/dist/src/intl/fil.d.ts.map +1 -1
- package/dist/src/intl/fil.js +4 -0
- package/dist/src/intl/fr.d.ts +5 -1
- package/dist/src/intl/fr.d.ts.map +1 -1
- package/dist/src/intl/fr.js +4 -0
- package/dist/src/intl/he.d.ts +5 -1
- package/dist/src/intl/he.d.ts.map +1 -1
- package/dist/src/intl/he.js +4 -0
- package/dist/src/intl/hi.d.ts +5 -1
- package/dist/src/intl/hi.d.ts.map +1 -1
- package/dist/src/intl/hi.js +4 -0
- package/dist/src/intl/hr.d.ts +5 -1
- package/dist/src/intl/hr.d.ts.map +1 -1
- package/dist/src/intl/hr.js +4 -0
- package/dist/src/intl/hu.d.ts +3 -1
- package/dist/src/intl/hu.d.ts.map +1 -1
- package/dist/src/intl/hu.js +2 -0
- package/dist/src/intl/id.d.ts +5 -1
- package/dist/src/intl/id.d.ts.map +1 -1
- package/dist/src/intl/id.js +4 -0
- package/dist/src/intl/it.d.ts +5 -1
- package/dist/src/intl/it.d.ts.map +1 -1
- package/dist/src/intl/it.js +4 -0
- package/dist/src/intl/ja.d.ts +5 -1
- package/dist/src/intl/ja.d.ts.map +1 -1
- package/dist/src/intl/ja.js +4 -0
- package/dist/src/intl/ko.d.ts +5 -1
- package/dist/src/intl/ko.d.ts.map +1 -1
- package/dist/src/intl/ko.js +4 -0
- package/dist/src/intl/ml.d.ts +5 -1
- package/dist/src/intl/ml.d.ts.map +1 -1
- package/dist/src/intl/ml.js +4 -0
- package/dist/src/intl/mr.d.ts +5 -1
- package/dist/src/intl/mr.d.ts.map +1 -1
- package/dist/src/intl/mr.js +4 -0
- package/dist/src/intl/ms.d.ts +5 -1
- package/dist/src/intl/ms.d.ts.map +1 -1
- package/dist/src/intl/ms.js +4 -0
- package/dist/src/intl/nb.d.ts +3 -1
- package/dist/src/intl/nb.d.ts.map +1 -1
- package/dist/src/intl/nb.js +2 -0
- package/dist/src/intl/nl.d.ts +5 -1
- package/dist/src/intl/nl.d.ts.map +1 -1
- package/dist/src/intl/nl.js +4 -0
- package/dist/src/intl/pa.d.ts +5 -1
- package/dist/src/intl/pa.d.ts.map +1 -1
- package/dist/src/intl/pa.js +4 -0
- package/dist/src/intl/pl.d.ts +4 -0
- package/dist/src/intl/pl.d.ts.map +1 -1
- package/dist/src/intl/pl.js +4 -0
- package/dist/src/intl/pt-BR.d.ts +5 -1
- package/dist/src/intl/pt-BR.d.ts.map +1 -1
- package/dist/src/intl/pt-BR.js +4 -0
- package/dist/src/intl/pt.d.ts +5 -1
- package/dist/src/intl/pt.d.ts.map +1 -1
- package/dist/src/intl/pt.js +4 -0
- package/dist/src/intl/ro.d.ts +5 -1
- package/dist/src/intl/ro.d.ts.map +1 -1
- package/dist/src/intl/ro.js +4 -0
- package/dist/src/intl/sk.d.ts +5 -1
- package/dist/src/intl/sk.d.ts.map +1 -1
- package/dist/src/intl/sk.js +4 -0
- package/dist/src/intl/sl.d.ts +5 -1
- package/dist/src/intl/sl.d.ts.map +1 -1
- package/dist/src/intl/sl.js +4 -0
- package/dist/src/intl/sv.d.ts +5 -1
- package/dist/src/intl/sv.d.ts.map +1 -1
- package/dist/src/intl/sv.js +4 -0
- package/dist/src/intl/sw.d.ts +2 -0
- package/dist/src/intl/sw.d.ts.map +1 -1
- package/dist/src/intl/sw.js +2 -0
- package/dist/src/intl/ta.d.ts +5 -1
- package/dist/src/intl/ta.d.ts.map +1 -1
- package/dist/src/intl/ta.js +4 -0
- package/dist/src/intl/te.d.ts +5 -1
- package/dist/src/intl/te.d.ts.map +1 -1
- package/dist/src/intl/te.js +4 -0
- package/dist/src/intl/th.d.ts +5 -1
- package/dist/src/intl/th.d.ts.map +1 -1
- package/dist/src/intl/th.js +4 -0
- package/dist/src/intl/tr.d.ts +5 -1
- package/dist/src/intl/tr.d.ts.map +1 -1
- package/dist/src/intl/tr.js +4 -0
- package/dist/src/intl/uk.d.ts +5 -1
- package/dist/src/intl/uk.d.ts.map +1 -1
- package/dist/src/intl/uk.js +4 -0
- package/dist/src/intl/ur.d.ts +5 -1
- package/dist/src/intl/ur.d.ts.map +1 -1
- package/dist/src/intl/ur.js +4 -0
- package/dist/src/intl/vi.d.ts +5 -1
- package/dist/src/intl/vi.d.ts.map +1 -1
- package/dist/src/intl/vi.js +4 -0
- package/dist/src/intl/zh-CN.d.ts +5 -1
- package/dist/src/intl/zh-CN.d.ts.map +1 -1
- package/dist/src/intl/zh-CN.js +4 -0
- package/dist/src/intl/zh-TW.d.ts +5 -1
- package/dist/src/intl/zh-TW.d.ts.map +1 -1
- package/dist/src/intl/zh-TW.js +4 -0
- package/dist/src/local-first/Evolu.d.ts.map +1 -1
- package/dist/src/local-first/Evolu.js +6 -1
- package/package.json +1 -1
- package/src/Crypto.ts +2 -1
- package/src/Redacted.test.ts +231 -0
- package/src/Redacted.ts +36 -47
- package/src/Type.test.ts +166 -0
- package/src/Type.ts +198 -2
- package/src/WebSocket.ts +33 -4
- package/src/intl/_en.ts +10 -0
- package/src/intl/ar.ts +8 -0
- package/src/intl/bn.ts +10 -0
- package/src/intl/ca.ts +10 -0
- package/src/intl/cs.ts +10 -0
- package/src/intl/da.ts +10 -0
- package/src/intl/de.ts +10 -0
- package/src/intl/el.ts +10 -0
- package/src/intl/es.ts +10 -0
- package/src/intl/fa.ts +10 -0
- package/src/intl/fi.ts +10 -0
- package/src/intl/fil.ts +10 -0
- package/src/intl/fr.ts +10 -0
- package/src/intl/he.ts +10 -0
- package/src/intl/hi.ts +10 -0
- package/src/intl/hr.ts +10 -0
- package/src/intl/hu.ts +6 -0
- package/src/intl/id.ts +10 -0
- package/src/intl/intl.test.ts +88 -0
- package/src/intl/it.ts +10 -0
- package/src/intl/ja.ts +10 -0
- package/src/intl/ko.ts +10 -0
- package/src/intl/ml.ts +10 -0
- package/src/intl/mr.ts +10 -0
- package/src/intl/ms.ts +8 -0
- package/src/intl/nb.ts +6 -0
- package/src/intl/nl.ts +10 -0
- package/src/intl/pa.ts +10 -0
- package/src/intl/pl.ts +12 -0
- package/src/intl/pt-BR.ts +10 -0
- package/src/intl/pt.ts +8 -0
- package/src/intl/ro.ts +10 -0
- package/src/intl/sk.ts +8 -0
- package/src/intl/sl.ts +10 -0
- package/src/intl/sv.ts +10 -0
- package/src/intl/sw.ts +4 -0
- package/src/intl/ta.ts +10 -0
- package/src/intl/te.ts +10 -0
- package/src/intl/th.ts +10 -0
- package/src/intl/tr.ts +10 -0
- package/src/intl/uk.ts +10 -0
- package/src/intl/ur.ts +8 -0
- package/src/intl/vi.ts +8 -0
- package/src/intl/zh-CN.ts +10 -0
- package/src/intl/zh-TW.ts +10 -0
- package/src/local-first/Evolu.test.ts +62 -8
- package/src/local-first/Evolu.ts +7 -1
package/src/intl/te.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatTypeOfError = (
|
|
@@ -258,6 +260,10 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
258
260
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
259
261
|
`విలువ ${safelyStringifyUnknownValue(error.value)} చెల్లుబాటు అయ్యే Name కాదు.`;
|
|
260
262
|
|
|
263
|
+
/** EmailErrorను తెలుగులో ఫార్మాట్ చేస్తుంది. */
|
|
264
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
265
|
+
`విలువ ${safelyStringifyUnknownValue(error.value)} చెల్లుబాటు అయ్యే ఇమెయిల్ చిరునామా కాదు.`;
|
|
266
|
+
|
|
261
267
|
/** MnemonicErrorను తెలుగులో ఫార్మాట్ చేస్తుంది. */
|
|
262
268
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
263
269
|
`విలువ ${safelyStringifyUnknownValue(error.value)} చెల్లుబాటు అయ్యే ఆంగ్ల BIP39 mnemonic కాదు.`;
|
|
@@ -270,6 +276,10 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
270
276
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
271
277
|
`విలువ ${safelyStringifyUnknownValue(error.value)} పట్టిక ${error.table} కు చెల్లుబాటు అయ్యే Id కాదు.`;
|
|
272
278
|
|
|
279
|
+
/** UuidErrorను తెలుగులో ఫార్మాట్ చేస్తుంది. */
|
|
280
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
281
|
+
`విలువ ${safelyStringifyUnknownValue(error.value)} చిన్న అక్షరాలలోని ప్రామాణిక UUID కాదు.`;
|
|
282
|
+
|
|
273
283
|
/** NonNegativeErrorను తెలుగులో ఫార్మాట్ చేస్తుంది. */
|
|
274
284
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
275
285
|
error,
|
package/src/intl/th.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatTypeOfError = (
|
|
@@ -256,6 +258,10 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
256
258
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
257
259
|
`ค่า ${safelyStringifyUnknownValue(error.value)} ไม่ใช่ Name ที่ถูกต้อง`;
|
|
258
260
|
|
|
261
|
+
/** จัดรูปแบบ EmailError เป็นภาษาไทย */
|
|
262
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
263
|
+
`ค่า ${safelyStringifyUnknownValue(error.value)} ไม่ใช่ที่อยู่อีเมลที่ถูกต้อง`;
|
|
264
|
+
|
|
259
265
|
/** จัดรูปแบบ MnemonicError เป็นภาษาไทย */
|
|
260
266
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
261
267
|
`ค่า ${safelyStringifyUnknownValue(error.value)} ไม่ใช่ mnemonic BIP39 ภาษาอังกฤษที่ถูกต้อง`;
|
|
@@ -268,6 +274,10 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
268
274
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
269
275
|
`ค่า ${safelyStringifyUnknownValue(error.value)} ไม่ใช่ Id ที่ถูกต้องสำหรับตาราง ${error.table}`;
|
|
270
276
|
|
|
277
|
+
/** จัดรูปแบบ UuidError เป็นภาษาไทย */
|
|
278
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
279
|
+
`ค่า ${safelyStringifyUnknownValue(error.value)} ไม่ใช่ UUID ตัวพิมพ์เล็กรูปแบบมาตรฐาน`;
|
|
280
|
+
|
|
271
281
|
/** จัดรูปแบบ NonNegativeError เป็นภาษาไทย */
|
|
272
282
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
273
283
|
error,
|
package/src/intl/tr.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatValueMustBe = (value: unknown, expected: string): string =>
|
|
@@ -258,6 +260,10 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
258
260
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
259
261
|
`Değer ${safelyStringifyUnknownValue(error.value)} geçerli bir Name değildir.`;
|
|
260
262
|
|
|
263
|
+
/** Formats an EmailError in Turkish. */
|
|
264
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
265
|
+
`Değer ${safelyStringifyUnknownValue(error.value)} geçerli bir e-posta adresi değildir.`;
|
|
266
|
+
|
|
261
267
|
/** Formats a MnemonicError in Turkish. */
|
|
262
268
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
263
269
|
`Değer ${safelyStringifyUnknownValue(error.value)} geçerli bir İngilizce BIP39 anımsatıcı değildir.`;
|
|
@@ -270,6 +276,10 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
270
276
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
271
277
|
`Değer ${safelyStringifyUnknownValue(error.value)} ${error.table} tablosu için geçerli bir Id değildir.`;
|
|
272
278
|
|
|
279
|
+
/** Formats a UuidError in Turkish. */
|
|
280
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
281
|
+
`Değer ${safelyStringifyUnknownValue(error.value)} kurallı bir küçük harfli UUID değildir.`;
|
|
282
|
+
|
|
273
283
|
/** Formats a NonNegativeError in Turkish. */
|
|
274
284
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
275
285
|
error,
|
package/src/intl/uk.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const typeOfNames = {
|
|
@@ -262,6 +264,10 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
262
264
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
263
265
|
`Значення ${safelyStringifyUnknownValue(error.value)} не є допустимим Name.`;
|
|
264
266
|
|
|
267
|
+
/** Форматує EmailError українською. */
|
|
268
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
269
|
+
`Значення ${safelyStringifyUnknownValue(error.value)} не є допустимою адресою електронної пошти.`;
|
|
270
|
+
|
|
265
271
|
/** Форматує MnemonicError українською. */
|
|
266
272
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
267
273
|
`Значення ${safelyStringifyUnknownValue(error.value)} не є допустимою англійською мнемонічною фразою BIP39.`;
|
|
@@ -274,6 +280,10 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
274
280
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
275
281
|
`Значення ${safelyStringifyUnknownValue(error.value)} не є допустимим Id для таблиці ${error.table}.`;
|
|
276
282
|
|
|
283
|
+
/** Форматує UuidError українською. */
|
|
284
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
285
|
+
`Значення ${safelyStringifyUnknownValue(error.value)} не є канонічним UUID у нижньому регістрі.`;
|
|
286
|
+
|
|
277
287
|
/** Форматує NonNegativeError українською. */
|
|
278
288
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
279
289
|
error,
|
package/src/intl/ur.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatTypeOfError = (
|
|
@@ -224,6 +226,9 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
224
226
|
/** NameError کو اردو میں فارمیٹ کرتا ہے۔ */
|
|
225
227
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
226
228
|
`قدر ${safelyStringifyUnknownValue(error.value)} درست Name نہیں ہے۔`;
|
|
229
|
+
/** EmailError کو اردو میں فارمیٹ کرتا ہے۔ */
|
|
230
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
231
|
+
`قدر ${safelyStringifyUnknownValue(error.value)} درست ای میل ایڈریس نہیں ہے۔`;
|
|
227
232
|
/** MnemonicError کو اردو میں فارمیٹ کرتا ہے۔ */
|
|
228
233
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
229
234
|
`قدر ${safelyStringifyUnknownValue(error.value)} درست انگریزی BIP39 mnemonic نہیں ہے۔`;
|
|
@@ -233,6 +238,9 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
233
238
|
/** TableIdError کو اردو میں فارمیٹ کرتا ہے۔ */
|
|
234
239
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
235
240
|
`قدر ${safelyStringifyUnknownValue(error.value)} جدول ${error.table} کے لیے درست Id نہیں ہے۔`;
|
|
241
|
+
/** UuidError کو اردو میں فارمیٹ کرتا ہے۔ */
|
|
242
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
243
|
+
`قدر ${safelyStringifyUnknownValue(error.value)} چھوٹے حروف والا canonical UUID نہیں ہے۔`;
|
|
236
244
|
/** NonNegativeError کو اردو میں فارمیٹ کرتا ہے۔ */
|
|
237
245
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
238
246
|
error,
|
package/src/intl/vi.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatTypeOfError = (
|
|
@@ -225,6 +227,9 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
225
227
|
/** Định dạng NameError bằng tiếng Việt. */
|
|
226
228
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
227
229
|
`Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là Name hợp lệ.`;
|
|
230
|
+
/** Định dạng EmailError bằng tiếng Việt. */
|
|
231
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
232
|
+
`Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là địa chỉ email hợp lệ.`;
|
|
228
233
|
/** Định dạng MnemonicError bằng tiếng Việt. */
|
|
229
234
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
230
235
|
`Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là cụm từ gợi nhớ BIP39 tiếng Anh hợp lệ.`;
|
|
@@ -234,6 +239,9 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
234
239
|
/** Định dạng TableIdError bằng tiếng Việt. */
|
|
235
240
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
236
241
|
`Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là Id hợp lệ cho bảng ${error.table}.`;
|
|
242
|
+
/** Định dạng UuidError bằng tiếng Việt. */
|
|
243
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
244
|
+
`Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là UUID chữ thường chính tắc.`;
|
|
237
245
|
/** Định dạng NonNegativeError bằng tiếng Việt. */
|
|
238
246
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
239
247
|
error,
|
package/src/intl/zh-CN.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatTypeOfError = (
|
|
@@ -254,6 +256,10 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
254
256
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
255
257
|
`值 ${safelyStringifyUnknownValue(error.value)} 不是有效的 Name。`;
|
|
256
258
|
|
|
259
|
+
/** 以简体中文格式化 EmailError。 */
|
|
260
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
261
|
+
`值 ${safelyStringifyUnknownValue(error.value)} 不是有效的电子邮件地址。`;
|
|
262
|
+
|
|
257
263
|
/** 以简体中文格式化 MnemonicError。 */
|
|
258
264
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
259
265
|
`值 ${safelyStringifyUnknownValue(error.value)} 不是有效的英文 BIP39 助记词。`;
|
|
@@ -266,6 +272,10 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
266
272
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
267
273
|
`值 ${safelyStringifyUnknownValue(error.value)} 不是表 ${error.table} 的有效 Id。`;
|
|
268
274
|
|
|
275
|
+
/** 以简体中文格式化 UuidError。 */
|
|
276
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
277
|
+
`值 ${safelyStringifyUnknownValue(error.value)} 不是规范的小写 UUID。`;
|
|
278
|
+
|
|
269
279
|
/** 以简体中文格式化 NonNegativeError。 */
|
|
270
280
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
271
281
|
error,
|
package/src/intl/zh-TW.ts
CHANGED
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
DateIsoFromDateError,
|
|
24
24
|
DecimalStringError,
|
|
25
25
|
DiscriminatedUnionError,
|
|
26
|
+
EmailError,
|
|
26
27
|
EvoluTypeError,
|
|
27
28
|
FiniteError,
|
|
28
29
|
GreaterThanError,
|
|
@@ -74,6 +75,7 @@ import type {
|
|
|
74
75
|
TypeOfError,
|
|
75
76
|
UInt64Error,
|
|
76
77
|
UnionError,
|
|
78
|
+
UuidError,
|
|
77
79
|
} from "../Type.ts";
|
|
78
80
|
|
|
79
81
|
const formatTypeOfError = (
|
|
@@ -254,6 +256,10 @@ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
|
|
|
254
256
|
export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
|
|
255
257
|
`值 ${safelyStringifyUnknownValue(error.value)} 不是有效的 Name。`;
|
|
256
258
|
|
|
259
|
+
/** 以繁體中文格式化 EmailError。 */
|
|
260
|
+
export const formatEmailError: TypeErrorFormatter<EmailError> = (error) =>
|
|
261
|
+
`值 ${safelyStringifyUnknownValue(error.value)} 不是有效的電子郵件地址。`;
|
|
262
|
+
|
|
257
263
|
/** 以繁體中文格式化 MnemonicError。 */
|
|
258
264
|
export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
|
|
259
265
|
`值 ${safelyStringifyUnknownValue(error.value)} 不是有效的英文 BIP39 助記詞。`;
|
|
@@ -266,6 +272,10 @@ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
|
|
|
266
272
|
export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
|
|
267
273
|
`值 ${safelyStringifyUnknownValue(error.value)} 不是資料表 ${error.table} 的有效 Id。`;
|
|
268
274
|
|
|
275
|
+
/** 以繁體中文格式化 UuidError。 */
|
|
276
|
+
export const formatUuidError: TypeErrorFormatter<UuidError> = (error) =>
|
|
277
|
+
`值 ${safelyStringifyUnknownValue(error.value)} 不是標準小寫 UUID。`;
|
|
278
|
+
|
|
269
279
|
/** 以繁體中文格式化 NonNegativeError。 */
|
|
270
280
|
export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
|
|
271
281
|
error,
|
|
@@ -35,6 +35,8 @@ import {
|
|
|
35
35
|
createOwnerSecret,
|
|
36
36
|
createOwnerWebSocketTransport,
|
|
37
37
|
createSharedOwner,
|
|
38
|
+
createSharedReadonlyOwner,
|
|
39
|
+
type Owner,
|
|
38
40
|
testAppOwner,
|
|
39
41
|
} from "./Owner.ts";
|
|
40
42
|
import {
|
|
@@ -124,6 +126,13 @@ const testOwnerTransport = createOwnerWebSocketTransport({
|
|
|
124
126
|
ownerId: testAppOwner.id,
|
|
125
127
|
});
|
|
126
128
|
|
|
129
|
+
/** {@link testAppOwner} as useOwner posts it, without its type and mnemonic. */
|
|
130
|
+
const testPostedAppOwner: Owner = {
|
|
131
|
+
id: testAppOwner.id,
|
|
132
|
+
encryptionKey: testAppOwner.encryptionKey,
|
|
133
|
+
writeKey: testAppOwner.writeKey,
|
|
134
|
+
};
|
|
135
|
+
|
|
127
136
|
const createQuery = createQueryBuilder(Schema);
|
|
128
137
|
|
|
129
138
|
const todoTitleQuery = createQuery((db) =>
|
|
@@ -1178,7 +1187,7 @@ describe("Evolu", () => {
|
|
|
1178
1187
|
{
|
|
1179
1188
|
action: "add",
|
|
1180
1189
|
owner: {
|
|
1181
|
-
owner:
|
|
1190
|
+
owner: testPostedAppOwner,
|
|
1182
1191
|
transports: [{ type: "WebSocket", url: "wss://free.evoluhq.com" }],
|
|
1183
1192
|
},
|
|
1184
1193
|
},
|
|
@@ -1260,7 +1269,14 @@ describe("Evolu", () => {
|
|
|
1260
1269
|
const { run, evoluInputs } = setup;
|
|
1261
1270
|
const evolu = await run.ok(testCreateEvolu);
|
|
1262
1271
|
const sharedOwner = createSharedOwner(createOwnerSecret(run.deps));
|
|
1263
|
-
const owner = {
|
|
1272
|
+
const owner = {
|
|
1273
|
+
owner: {
|
|
1274
|
+
id: sharedOwner.id,
|
|
1275
|
+
encryptionKey: sharedOwner.encryptionKey,
|
|
1276
|
+
writeKey: sharedOwner.writeKey,
|
|
1277
|
+
},
|
|
1278
|
+
transports: [testOwnerTransport],
|
|
1279
|
+
};
|
|
1264
1280
|
assertNotSame(sharedOwner.id, evolu.appOwner.id);
|
|
1265
1281
|
|
|
1266
1282
|
const unuse = evolu.useOwner(sharedOwner, [testOwnerTransport]);
|
|
@@ -1340,7 +1356,7 @@ describe("Evolu", () => {
|
|
|
1340
1356
|
actions: [
|
|
1341
1357
|
{
|
|
1342
1358
|
owner: {
|
|
1343
|
-
owner:
|
|
1359
|
+
owner: testPostedAppOwner,
|
|
1344
1360
|
transports: [testOwnerTransport],
|
|
1345
1361
|
},
|
|
1346
1362
|
action: "add",
|
|
@@ -1376,7 +1392,45 @@ describe("Evolu", () => {
|
|
|
1376
1392
|
actions: [
|
|
1377
1393
|
{
|
|
1378
1394
|
owner: {
|
|
1379
|
-
owner:
|
|
1395
|
+
owner: testPostedAppOwner,
|
|
1396
|
+
transports: [testOwnerTransport],
|
|
1397
|
+
},
|
|
1398
|
+
action: "add",
|
|
1399
|
+
},
|
|
1400
|
+
],
|
|
1401
|
+
},
|
|
1402
|
+
]);
|
|
1403
|
+
});
|
|
1404
|
+
|
|
1405
|
+
it("posts only the owner id and keys", async () => {
|
|
1406
|
+
await using setup = await setupRunWithEvoluDeps();
|
|
1407
|
+
const { run, evoluInputs } = setup;
|
|
1408
|
+
const evolu = await run.ok(testCreateEvolu);
|
|
1409
|
+
const readonlyOwner = createSharedReadonlyOwner(
|
|
1410
|
+
createSharedOwner(createOwnerSecret(run.deps)),
|
|
1411
|
+
);
|
|
1412
|
+
|
|
1413
|
+
evolu.useOwner(testAppOwner, [testOwnerTransport]);
|
|
1414
|
+
evolu.useOwner(readonlyOwner, [testOwnerTransport]);
|
|
1415
|
+
await testWaitForWorkerMessage();
|
|
1416
|
+
|
|
1417
|
+
assertEqual(evoluInputs, [
|
|
1418
|
+
{
|
|
1419
|
+
type: "UseOwner",
|
|
1420
|
+
actions: [
|
|
1421
|
+
{
|
|
1422
|
+
owner: {
|
|
1423
|
+
owner: testPostedAppOwner,
|
|
1424
|
+
transports: [testOwnerTransport],
|
|
1425
|
+
},
|
|
1426
|
+
action: "add",
|
|
1427
|
+
},
|
|
1428
|
+
{
|
|
1429
|
+
owner: {
|
|
1430
|
+
owner: {
|
|
1431
|
+
id: readonlyOwner.id,
|
|
1432
|
+
encryptionKey: readonlyOwner.encryptionKey,
|
|
1433
|
+
},
|
|
1380
1434
|
transports: [testOwnerTransport],
|
|
1381
1435
|
},
|
|
1382
1436
|
action: "add",
|
|
@@ -1404,14 +1458,14 @@ describe("Evolu", () => {
|
|
|
1404
1458
|
actions: [
|
|
1405
1459
|
{
|
|
1406
1460
|
owner: {
|
|
1407
|
-
owner:
|
|
1461
|
+
owner: testPostedAppOwner,
|
|
1408
1462
|
transports: [testOwnerTransport],
|
|
1409
1463
|
},
|
|
1410
1464
|
action: "add",
|
|
1411
1465
|
},
|
|
1412
1466
|
{
|
|
1413
1467
|
owner: {
|
|
1414
|
-
owner:
|
|
1468
|
+
owner: testPostedAppOwner,
|
|
1415
1469
|
transports: [testOwnerTransport],
|
|
1416
1470
|
},
|
|
1417
1471
|
action: "remove",
|
|
@@ -1447,7 +1501,7 @@ describe("Evolu", () => {
|
|
|
1447
1501
|
actions: [
|
|
1448
1502
|
{
|
|
1449
1503
|
owner: {
|
|
1450
|
-
owner:
|
|
1504
|
+
owner: testPostedAppOwner,
|
|
1451
1505
|
transports: [testOwnerTransport],
|
|
1452
1506
|
},
|
|
1453
1507
|
action: "remove",
|
|
@@ -1480,7 +1534,7 @@ describe("Evolu", () => {
|
|
|
1480
1534
|
actions: [
|
|
1481
1535
|
{
|
|
1482
1536
|
owner: {
|
|
1483
|
-
owner:
|
|
1537
|
+
owner: testPostedAppOwner,
|
|
1484
1538
|
transports: [testOwnerTransport],
|
|
1485
1539
|
},
|
|
1486
1540
|
action: "add",
|
package/src/local-first/Evolu.ts
CHANGED
|
@@ -1772,8 +1772,14 @@ export const createEvolu =
|
|
|
1772
1772
|
"useOwner requires explicit non-empty transports when config.transports is empty.",
|
|
1773
1773
|
);
|
|
1774
1774
|
|
|
1775
|
+
// Post only what workers use. Forwarding the caller's object would copy
|
|
1776
|
+
// an AppOwner's mnemonic into every worker.
|
|
1777
|
+
const { id, encryptionKey } = owner;
|
|
1775
1778
|
const syncOwner: SyncOwner = {
|
|
1776
|
-
owner
|
|
1779
|
+
owner:
|
|
1780
|
+
"writeKey" in owner
|
|
1781
|
+
? { id, encryptionKey, writeKey: owner.writeKey }
|
|
1782
|
+
: { id, encryptionKey },
|
|
1777
1783
|
transports: effectiveTransports,
|
|
1778
1784
|
};
|
|
1779
1785
|
|