@evolu/common 8.1.0 → 8.3.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.
Files changed (232) hide show
  1. package/dist/src/Function.d.ts +1 -0
  2. package/dist/src/Function.d.ts.map +1 -1
  3. package/dist/src/Http.d.ts +9 -0
  4. package/dist/src/Http.d.ts.map +1 -1
  5. package/dist/src/Number.d.ts +66 -6
  6. package/dist/src/Number.d.ts.map +1 -1
  7. package/dist/src/Number.js +11 -3
  8. package/dist/src/Object.d.ts +1 -0
  9. package/dist/src/Object.d.ts.map +1 -1
  10. package/dist/src/RefCount.d.ts +1 -0
  11. package/dist/src/RefCount.d.ts.map +1 -1
  12. package/dist/src/Relation.d.ts +2 -0
  13. package/dist/src/Relation.d.ts.map +1 -1
  14. package/dist/src/Resource.d.ts +1 -0
  15. package/dist/src/Resource.d.ts.map +1 -1
  16. package/dist/src/Result.d.ts +383 -548
  17. package/dist/src/Result.d.ts.map +1 -1
  18. package/dist/src/Result.js +296 -46
  19. package/dist/src/Schedule.d.ts +2 -2
  20. package/dist/src/Schedule.d.ts.map +1 -1
  21. package/dist/src/StackTrace.d.ts +1 -0
  22. package/dist/src/StackTrace.d.ts.map +1 -1
  23. package/dist/src/Task.d.ts +978 -1061
  24. package/dist/src/Task.d.ts.map +1 -1
  25. package/dist/src/Task.js +1010 -159
  26. package/dist/src/Time.d.ts +71 -34
  27. package/dist/src/Time.d.ts.map +1 -1
  28. package/dist/src/Time.js +77 -1
  29. package/dist/src/Type.d.ts +1740 -795
  30. package/dist/src/Type.d.ts.map +1 -1
  31. package/dist/src/Type.js +1634 -211
  32. package/dist/src/Types.d.ts +0 -24
  33. package/dist/src/Types.d.ts.map +1 -1
  34. package/dist/src/intl/_en.d.ts +126 -0
  35. package/dist/src/intl/_en.d.ts.map +1 -0
  36. package/dist/src/intl/_en.js +267 -0
  37. package/dist/src/intl/ar.d.ts +117 -0
  38. package/dist/src/intl/ar.d.ts.map +1 -0
  39. package/dist/src/intl/ar.js +245 -0
  40. package/dist/src/intl/bn.d.ts +117 -0
  41. package/dist/src/intl/bn.d.ts.map +1 -0
  42. package/dist/src/intl/bn.js +258 -0
  43. package/dist/src/intl/ca.d.ts +117 -0
  44. package/dist/src/intl/ca.d.ts.map +1 -0
  45. package/dist/src/intl/ca.js +258 -0
  46. package/dist/src/intl/cs.d.ts +30 -7
  47. package/dist/src/intl/cs.d.ts.map +1 -1
  48. package/dist/src/intl/cs.js +65 -28
  49. package/dist/src/intl/da.d.ts +117 -0
  50. package/dist/src/intl/da.d.ts.map +1 -0
  51. package/dist/src/intl/da.js +258 -0
  52. package/dist/src/intl/de.d.ts +117 -0
  53. package/dist/src/intl/de.d.ts.map +1 -0
  54. package/dist/src/intl/de.js +258 -0
  55. package/dist/src/intl/el.d.ts +117 -0
  56. package/dist/src/intl/el.d.ts.map +1 -0
  57. package/dist/src/intl/el.js +265 -0
  58. package/dist/src/intl/es.d.ts +117 -0
  59. package/dist/src/intl/es.d.ts.map +1 -0
  60. package/dist/src/intl/es.js +258 -0
  61. package/dist/src/intl/fa.d.ts +117 -0
  62. package/dist/src/intl/fa.d.ts.map +1 -0
  63. package/dist/src/intl/fa.js +258 -0
  64. package/dist/src/intl/fi.d.ts +117 -0
  65. package/dist/src/intl/fi.d.ts.map +1 -0
  66. package/dist/src/intl/fi.js +258 -0
  67. package/dist/src/intl/fil.d.ts +117 -0
  68. package/dist/src/intl/fil.d.ts.map +1 -0
  69. package/dist/src/intl/fil.js +258 -0
  70. package/dist/src/intl/fr.d.ts +117 -0
  71. package/dist/src/intl/fr.d.ts.map +1 -0
  72. package/dist/src/intl/fr.js +258 -0
  73. package/dist/src/intl/he.d.ts +117 -0
  74. package/dist/src/intl/he.d.ts.map +1 -0
  75. package/dist/src/intl/he.js +258 -0
  76. package/dist/src/intl/hi.d.ts +117 -0
  77. package/dist/src/intl/hi.d.ts.map +1 -0
  78. package/dist/src/intl/hi.js +258 -0
  79. package/dist/src/intl/hr.d.ts +117 -0
  80. package/dist/src/intl/hr.d.ts.map +1 -0
  81. package/dist/src/intl/hr.js +265 -0
  82. package/dist/src/intl/hu.d.ts +63 -0
  83. package/dist/src/intl/hu.d.ts.map +1 -0
  84. package/dist/src/intl/hu.js +204 -0
  85. package/dist/src/intl/id.d.ts +117 -0
  86. package/dist/src/intl/id.d.ts.map +1 -0
  87. package/dist/src/intl/id.js +258 -0
  88. package/dist/src/intl/index.d.ts +42 -0
  89. package/dist/src/intl/index.d.ts.map +1 -1
  90. package/dist/src/intl/index.js +42 -0
  91. package/dist/src/intl/it.d.ts +117 -0
  92. package/dist/src/intl/it.d.ts.map +1 -0
  93. package/dist/src/intl/it.js +258 -0
  94. package/dist/src/intl/ja.d.ts +117 -0
  95. package/dist/src/intl/ja.d.ts.map +1 -0
  96. package/dist/src/intl/ja.js +258 -0
  97. package/dist/src/intl/ko.d.ts +117 -0
  98. package/dist/src/intl/ko.d.ts.map +1 -0
  99. package/dist/src/intl/ko.js +258 -0
  100. package/dist/src/intl/ml.d.ts +117 -0
  101. package/dist/src/intl/ml.d.ts.map +1 -0
  102. package/dist/src/intl/ml.js +258 -0
  103. package/dist/src/intl/mr.d.ts +117 -0
  104. package/dist/src/intl/mr.d.ts.map +1 -0
  105. package/dist/src/intl/mr.js +258 -0
  106. package/dist/src/intl/ms.d.ts +117 -0
  107. package/dist/src/intl/ms.d.ts.map +1 -0
  108. package/dist/src/intl/ms.js +245 -0
  109. package/dist/src/intl/nb.d.ts +63 -0
  110. package/dist/src/intl/nb.d.ts.map +1 -0
  111. package/dist/src/intl/nb.js +191 -0
  112. package/dist/src/intl/nl.d.ts +117 -0
  113. package/dist/src/intl/nl.d.ts.map +1 -0
  114. package/dist/src/intl/nl.js +258 -0
  115. package/dist/src/intl/pa.d.ts +117 -0
  116. package/dist/src/intl/pa.d.ts.map +1 -0
  117. package/dist/src/intl/pa.js +258 -0
  118. package/dist/src/intl/pl.d.ts +117 -0
  119. package/dist/src/intl/pl.d.ts.map +1 -0
  120. package/dist/src/intl/pl.js +242 -0
  121. package/dist/src/intl/pt-BR.d.ts +117 -0
  122. package/dist/src/intl/pt-BR.d.ts.map +1 -0
  123. package/dist/src/intl/pt-BR.js +258 -0
  124. package/dist/src/intl/pt.d.ts +117 -0
  125. package/dist/src/intl/pt.d.ts.map +1 -0
  126. package/dist/src/intl/pt.js +246 -0
  127. package/dist/src/intl/ro.d.ts +117 -0
  128. package/dist/src/intl/ro.d.ts.map +1 -0
  129. package/dist/src/intl/ro.js +258 -0
  130. package/dist/src/intl/sk.d.ts +117 -0
  131. package/dist/src/intl/sk.d.ts.map +1 -0
  132. package/dist/src/intl/sk.js +244 -0
  133. package/dist/src/intl/sl.d.ts +117 -0
  134. package/dist/src/intl/sl.d.ts.map +1 -0
  135. package/dist/src/intl/sl.js +258 -0
  136. package/dist/src/intl/sv.d.ts +117 -0
  137. package/dist/src/intl/sv.d.ts.map +1 -0
  138. package/dist/src/intl/sv.js +258 -0
  139. package/dist/src/intl/sw.d.ts +63 -0
  140. package/dist/src/intl/sw.d.ts.map +1 -0
  141. package/dist/src/intl/sw.js +191 -0
  142. package/dist/src/intl/ta.d.ts +117 -0
  143. package/dist/src/intl/ta.d.ts.map +1 -0
  144. package/dist/src/intl/ta.js +258 -0
  145. package/dist/src/intl/te.d.ts +117 -0
  146. package/dist/src/intl/te.d.ts.map +1 -0
  147. package/dist/src/intl/te.js +258 -0
  148. package/dist/src/intl/th.d.ts +117 -0
  149. package/dist/src/intl/th.d.ts.map +1 -0
  150. package/dist/src/intl/th.js +258 -0
  151. package/dist/src/intl/tr.d.ts +117 -0
  152. package/dist/src/intl/tr.d.ts.map +1 -0
  153. package/dist/src/intl/tr.js +255 -0
  154. package/dist/src/intl/uk.d.ts +117 -0
  155. package/dist/src/intl/uk.d.ts.map +1 -0
  156. package/dist/src/intl/uk.js +258 -0
  157. package/dist/src/intl/ur.d.ts +117 -0
  158. package/dist/src/intl/ur.d.ts.map +1 -0
  159. package/dist/src/intl/ur.js +245 -0
  160. package/dist/src/intl/vi.d.ts +117 -0
  161. package/dist/src/intl/vi.d.ts.map +1 -0
  162. package/dist/src/intl/vi.js +255 -0
  163. package/dist/src/intl/zh-CN.d.ts +117 -0
  164. package/dist/src/intl/zh-CN.d.ts.map +1 -0
  165. package/dist/src/intl/zh-CN.js +258 -0
  166. package/dist/src/intl/zh-TW.d.ts +117 -0
  167. package/dist/src/intl/zh-TW.d.ts.map +1 -0
  168. package/dist/src/intl/zh-TW.js +258 -0
  169. package/dist/src/local-first/Owner.d.ts +156 -62
  170. package/dist/src/local-first/Owner.d.ts.map +1 -1
  171. package/dist/src/local-first/Owner.js +119 -20
  172. package/package.json +1 -1
  173. package/src/Function.ts +2 -0
  174. package/src/Http.ts +9 -0
  175. package/src/Number.ts +85 -14
  176. package/src/Object.ts +2 -0
  177. package/src/RefCount.ts +2 -0
  178. package/src/Relation.ts +4 -0
  179. package/src/Resource.ts +2 -0
  180. package/src/Result.ts +397 -560
  181. package/src/Schedule.ts +1 -1
  182. package/src/StackTrace.ts +2 -0
  183. package/src/Task.ts +1145 -1225
  184. package/src/Time.ts +110 -62
  185. package/src/Type.ts +2842 -835
  186. package/src/Types.ts +0 -49
  187. package/src/intl/_en.ts +497 -0
  188. package/src/intl/ar.ts +417 -0
  189. package/src/intl/bn.ts +486 -0
  190. package/src/intl/ca.ts +488 -0
  191. package/src/intl/cs.ts +131 -32
  192. package/src/intl/da.ts +488 -0
  193. package/src/intl/de.ts +488 -0
  194. package/src/intl/el.ts +494 -0
  195. package/src/intl/es.ts +488 -0
  196. package/src/intl/fa.ts +487 -0
  197. package/src/intl/fi.ts +487 -0
  198. package/src/intl/fil.ts +488 -0
  199. package/src/intl/fr.ts +488 -0
  200. package/src/intl/he.ts +486 -0
  201. package/src/intl/hi.ts +487 -0
  202. package/src/intl/hr.ts +494 -0
  203. package/src/intl/hu.ts +387 -0
  204. package/src/intl/id.ts +487 -0
  205. package/src/intl/index.ts +42 -0
  206. package/src/intl/it.ts +488 -0
  207. package/src/intl/ja.ts +488 -0
  208. package/src/intl/ko.ts +487 -0
  209. package/src/intl/ml.ts +487 -0
  210. package/src/intl/mr.ts +487 -0
  211. package/src/intl/ms.ts +410 -0
  212. package/src/intl/nb.ts +364 -0
  213. package/src/intl/nl.ts +488 -0
  214. package/src/intl/pa.ts +487 -0
  215. package/src/intl/pl.ts +450 -0
  216. package/src/intl/pt-BR.ts +487 -0
  217. package/src/intl/pt.ts +424 -0
  218. package/src/intl/ro.ts +488 -0
  219. package/src/intl/sk.ts +412 -0
  220. package/src/intl/sl.ts +487 -0
  221. package/src/intl/sv.ts +488 -0
  222. package/src/intl/sw.ts +324 -0
  223. package/src/intl/ta.ts +487 -0
  224. package/src/intl/te.ts +487 -0
  225. package/src/intl/th.ts +484 -0
  226. package/src/intl/tr.ts +487 -0
  227. package/src/intl/uk.ts +488 -0
  228. package/src/intl/ur.ts +410 -0
  229. package/src/intl/vi.ts +435 -0
  230. package/src/intl/zh-CN.ts +482 -0
  231. package/src/intl/zh-TW.ts +482 -0
  232. package/src/local-first/Owner.ts +156 -62
package/src/intl/vi.ts ADDED
@@ -0,0 +1,435 @@
1
+ /**
2
+ * Bộ định dạng lỗi Evolu Type tiếng Việt.
3
+ *
4
+ * @module
5
+ */
6
+
7
+ import { assertNonNullable } from "../Assert.ts";
8
+ import { safelyStringifyUnknownValue } from "../String.ts";
9
+ import type {
10
+ ArrayError,
11
+ Base64UrlError,
12
+ BetweenError,
13
+ CapitalizedError,
14
+ DateIsoError,
15
+ DateIsoFromDateError,
16
+ DecimalStringError,
17
+ DiscriminatedUnionError,
18
+ EvoluTypeError,
19
+ FiniteError,
20
+ GreaterThanError,
21
+ GreaterThanOrEqualToError,
22
+ InstanceOfError,
23
+ Int64Error,
24
+ Int64StringError,
25
+ IntError,
26
+ IdError,
27
+ JsonError,
28
+ JsonValueError,
29
+ LengthError,
30
+ LessThanError,
31
+ LessThanOrEqualToError,
32
+ LiteralError,
33
+ MaxLengthError,
34
+ MinLengthError,
35
+ MnemonicError,
36
+ MultipleOfError,
37
+ NegativeDecimalStringError,
38
+ NegativeError,
39
+ NameError,
40
+ NeverError,
41
+ NonNaNError,
42
+ NonNegativeDecimalStringError,
43
+ NonNegativeError,
44
+ NonPositiveDecimalStringError,
45
+ NonPositiveError,
46
+ ObjectError,
47
+ ObjectNotObjectError,
48
+ ObjectPropertyAccessError,
49
+ ObjectTagError,
50
+ ObjectUnexpectedPrototypeError,
51
+ PositiveDecimalStringError,
52
+ PositiveError,
53
+ RecordError,
54
+ RegexError,
55
+ SetError,
56
+ TableIdError,
57
+ TemplateLiteralError,
58
+ TrimmedError,
59
+ TupleElementsError,
60
+ TupleError,
61
+ TypeError,
62
+ TypeErrorFormatter,
63
+ TypeOfError,
64
+ UInt64Error,
65
+ UnionError,
66
+ } from "../Type.ts";
67
+
68
+ const formatTypeOfError = (
69
+ error: TypeOfError<
70
+ "String" | "Number" | "BigInt" | "Boolean" | "Symbol" | "Function"
71
+ >,
72
+ ): string => {
73
+ const typeOf = error.expected.toLowerCase();
74
+ return `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là ${typeOf}.`;
75
+ };
76
+
77
+ const formatPlainObjectRootError = (
78
+ reason:
79
+ ObjectNotObjectError["reason"] | ObjectUnexpectedPrototypeError["reason"],
80
+ ): string =>
81
+ reason.kind === "NotObject"
82
+ ? `Giá trị ${safelyStringifyUnknownValue(reason.value)} không phải là đối tượng.`
83
+ : "Giá trị là một đối tượng, nhưng Object Output phải là một đối tượng thuần hoặc có nguyên mẫu null.";
84
+
85
+ /** Định dạng NeverError bằng tiếng Việt. */
86
+ export const formatNeverError: TypeErrorFormatter<NeverError> = (error) =>
87
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không hợp lệ cho kiểu Never.`;
88
+ /** Định dạng String TypeOfError bằng tiếng Việt. */
89
+ export const formatStringError: TypeErrorFormatter<TypeOfError<"String">> =
90
+ formatTypeOfError;
91
+ /** Định dạng TemplateLiteralError bằng tiếng Việt. */
92
+ export const formatTemplateLiteralError: TypeErrorFormatter<
93
+ TemplateLiteralError
94
+ > = (error) =>
95
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không khớp với mẫu chuỗi.`;
96
+ /** Định dạng Number TypeOfError bằng tiếng Việt. */
97
+ export const formatNumberError: TypeErrorFormatter<TypeOfError<"Number">> =
98
+ formatTypeOfError;
99
+ /** Định dạng BigInt TypeOfError bằng tiếng Việt. */
100
+ export const formatBigIntError: TypeErrorFormatter<TypeOfError<"BigInt">> =
101
+ formatTypeOfError;
102
+ /** Định dạng Boolean TypeOfError bằng tiếng Việt. */
103
+ export const formatBooleanError: TypeErrorFormatter<TypeOfError<"Boolean">> =
104
+ formatTypeOfError;
105
+ /** Định dạng Symbol TypeOfError bằng tiếng Việt. */
106
+ export const formatSymbolError: TypeErrorFormatter<TypeOfError<"Symbol">> =
107
+ formatTypeOfError;
108
+ /** Định dạng Function TypeOfError bằng tiếng Việt. */
109
+ export const formatFunctionError: TypeErrorFormatter<TypeOfError<"Function">> =
110
+ formatTypeOfError;
111
+ /** Định dạng EvoluTypeError bằng tiếng Việt. */
112
+ export const formatEvoluTypeError: TypeErrorFormatter<EvoluTypeError> = (
113
+ error,
114
+ ) =>
115
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là một Evolu Type.`;
116
+ /** Định dạng ObjectTagError bằng tiếng Việt. */
117
+ export const formatObjectTagError: TypeErrorFormatter<ObjectTagError> = (
118
+ error,
119
+ ) =>
120
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không có thẻ đối tượng mong đợi ${safelyStringifyUnknownValue(error.expected)}.`;
121
+ /** Định dạng InstanceOfError bằng tiếng Việt. */
122
+ export const formatInstanceOfError: TypeErrorFormatter<InstanceOfError> = (
123
+ error,
124
+ ) =>
125
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là một thể hiện của ${error.constructorName}.`;
126
+ /** Định dạng LiteralError bằng tiếng Việt. */
127
+ export const formatLiteralError: TypeErrorFormatter<LiteralError> = (error) =>
128
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không hoàn toàn bằng literal mong đợi: ${globalThis.String(error.expected)}.`;
129
+ /** Định dạng UnionError bằng tiếng Việt. */
130
+ export const formatUnionError: TypeErrorFormatter<UnionError> = () =>
131
+ "Giá trị không khớp với bất kỳ biến thể nào được cho phép.";
132
+ /** Định dạng DateIsoError bằng tiếng Việt. */
133
+ export const formatDateIsoError: TypeErrorFormatter<DateIsoError> = (error) =>
134
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là chuỗi ngày-giờ ISO chính tắc.`;
135
+ /** Định dạng DateIsoFromDateError bằng tiếng Việt. */
136
+ export const formatDateIsoFromDateError: TypeErrorFormatter<
137
+ DateIsoFromDateError
138
+ > = () => "Date không thể được biểu diễn dưới dạng DateIso.";
139
+ /** Định dạng DecimalStringError bằng tiếng Việt. */
140
+ export const formatDecimalStringError: TypeErrorFormatter<
141
+ DecimalStringError
142
+ > = (error) =>
143
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là chuỗi thập phân chính tắc.`;
144
+ /** Định dạng Int64Error bằng tiếng Việt. */
145
+ export const formatInt64Error: TypeErrorFormatter<Int64Error> = (error) =>
146
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là số nguyên 64-bit có dấu (Int64) hợp lệ.`;
147
+ /** Định dạng UInt64Error bằng tiếng Việt. */
148
+ export const formatUInt64Error: TypeErrorFormatter<UInt64Error> = (error) =>
149
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là số nguyên 64-bit không dấu (UInt64) hợp lệ.`;
150
+ /** Định dạng Int64StringError bằng tiếng Việt. */
151
+ export const formatInt64StringError: TypeErrorFormatter<Int64StringError> = (
152
+ error,
153
+ ) =>
154
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là chuỗi Int64 hợp lệ.`;
155
+ /** Định dạng CapitalizedError bằng tiếng Việt. */
156
+ export const formatCapitalizedError: TypeErrorFormatter<CapitalizedError> = (
157
+ error,
158
+ ) =>
159
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải viết hoa chữ cái đầu.`;
160
+ /** Định dạng TrimmedError bằng tiếng Việt. */
161
+ export const formatTrimmedError: TypeErrorFormatter<TrimmedError> = (error) =>
162
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải được cắt khoảng trắng đầu và cuối.`;
163
+ /** Định dạng MinLengthError bằng tiếng Việt. */
164
+ export const formatMinLengthError: TypeErrorFormatter<MinLengthError> = (
165
+ error,
166
+ ) =>
167
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không đạt độ dài tối thiểu là ${error.min}.`;
168
+ /** Định dạng MaxLengthError bằng tiếng Việt. */
169
+ export const formatMaxLengthError: TypeErrorFormatter<MaxLengthError> = (
170
+ error,
171
+ ) =>
172
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} vượt quá độ dài tối đa là ${error.max}.`;
173
+ /** Định dạng LengthError bằng tiếng Việt. */
174
+ export const formatLengthError: TypeErrorFormatter<LengthError> = (error) =>
175
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không có độ dài bắt buộc là ${error.exact}.`;
176
+ /** Định dạng RegexError bằng tiếng Việt. */
177
+ export const formatRegexError: TypeErrorFormatter<RegexError> = (error) =>
178
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không khớp với /${error.source}/${error.flags}.`;
179
+ /** Định dạng Base64UrlError bằng tiếng Việt. */
180
+ export const formatBase64UrlError: TypeErrorFormatter<Base64UrlError> = (
181
+ error,
182
+ ) =>
183
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là chuỗi Base64Url hợp lệ.`;
184
+ /** Định dạng NameError bằng tiếng Việt. */
185
+ export const formatNameError: TypeErrorFormatter<NameError> = (error) =>
186
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là Name hợp lệ.`;
187
+ /** Định dạng MnemonicError bằng tiếng Việt. */
188
+ export const formatMnemonicError: TypeErrorFormatter<MnemonicError> = (error) =>
189
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là cụm từ gợi nhớ BIP39 tiếng Anh hợp lệ.`;
190
+ /** Định dạng IdError bằng tiếng Việt. */
191
+ export const formatIdError: TypeErrorFormatter<IdError> = (error) =>
192
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là Id hợp lệ.`;
193
+ /** Định dạng TableIdError bằng tiếng Việt. */
194
+ export const formatTableIdError: TypeErrorFormatter<TableIdError> = (error) =>
195
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không phải là Id hợp lệ cho bảng ${error.table}.`;
196
+ /** Định dạng NonNegativeError bằng tiếng Việt. */
197
+ export const formatNonNegativeError: TypeErrorFormatter<NonNegativeError> = (
198
+ error,
199
+ ) =>
200
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải không âm (>= 0).`;
201
+ /** Định dạng NonNegativeDecimalStringError bằng tiếng Việt. */
202
+ export const formatNonNegativeDecimalStringError: TypeErrorFormatter<
203
+ NonNegativeDecimalStringError
204
+ > = (error) =>
205
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là chuỗi thập phân không âm.`;
206
+ /** Định dạng PositiveError bằng tiếng Việt. */
207
+ export const formatPositiveError: TypeErrorFormatter<PositiveError> = (error) =>
208
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải dương (> 0).`;
209
+ /** Định dạng PositiveDecimalStringError bằng tiếng Việt. */
210
+ export const formatPositiveDecimalStringError: TypeErrorFormatter<
211
+ PositiveDecimalStringError
212
+ > = (error) =>
213
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là chuỗi thập phân dương.`;
214
+ /** Định dạng NonPositiveError bằng tiếng Việt. */
215
+ export const formatNonPositiveError: TypeErrorFormatter<NonPositiveError> = (
216
+ error,
217
+ ) =>
218
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải không dương (<= 0).`;
219
+ /** Định dạng NonPositiveDecimalStringError bằng tiếng Việt. */
220
+ export const formatNonPositiveDecimalStringError: TypeErrorFormatter<
221
+ NonPositiveDecimalStringError
222
+ > = (error) =>
223
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là chuỗi thập phân không dương.`;
224
+ /** Định dạng NegativeError bằng tiếng Việt. */
225
+ export const formatNegativeError: TypeErrorFormatter<NegativeError> = (error) =>
226
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải âm (< 0).`;
227
+ /** Định dạng NegativeDecimalStringError bằng tiếng Việt. */
228
+ export const formatNegativeDecimalStringError: TypeErrorFormatter<
229
+ NegativeDecimalStringError
230
+ > = (error) =>
231
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là chuỗi thập phân âm.`;
232
+ /** Định dạng IntError bằng tiếng Việt. */
233
+ export const formatIntError: TypeErrorFormatter<IntError> = (error) =>
234
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là số nguyên an toàn.`;
235
+ /** Định dạng GreaterThanError bằng tiếng Việt. */
236
+ export const formatGreaterThanError: TypeErrorFormatter<GreaterThanError> = (
237
+ error,
238
+ ) =>
239
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải lớn hơn ${error.min}.`;
240
+ /** Định dạng GreaterThanOrEqualToError bằng tiếng Việt. */
241
+ export const formatGreaterThanOrEqualToError: TypeErrorFormatter<
242
+ GreaterThanOrEqualToError
243
+ > = (error) =>
244
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải lớn hơn hoặc bằng ${error.min}.`;
245
+ /** Định dạng LessThanError bằng tiếng Việt. */
246
+ export const formatLessThanError: TypeErrorFormatter<LessThanError> = (error) =>
247
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải nhỏ hơn ${error.max}.`;
248
+ /** Định dạng LessThanOrEqualToError bằng tiếng Việt. */
249
+ export const formatLessThanOrEqualToError: TypeErrorFormatter<
250
+ LessThanOrEqualToError
251
+ > = (error) =>
252
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải nhỏ hơn hoặc bằng ${error.max}.`;
253
+ /** Định dạng NonNaNError bằng tiếng Việt. */
254
+ export const formatNonNaNError: TypeErrorFormatter<NonNaNError> = () =>
255
+ "Giá trị không được là NaN.";
256
+ /** Định dạng FiniteError bằng tiếng Việt. */
257
+ export const formatFiniteError: TypeErrorFormatter<FiniteError> = (error) =>
258
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải hữu hạn.`;
259
+ /** Định dạng MultipleOfError bằng tiếng Việt. */
260
+ export const formatMultipleOfError: TypeErrorFormatter<MultipleOfError> = (
261
+ error,
262
+ ) =>
263
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải là bội số của ${error.divisor}.`;
264
+ /** Định dạng BetweenError bằng tiếng Việt. */
265
+ export const formatBetweenError: TypeErrorFormatter<BetweenError> = (error) =>
266
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} phải nằm trong khoảng từ ${error.min} đến ${error.max}, kể cả hai đầu.`;
267
+
268
+ /** Định dạng ArrayError bằng tiếng Việt. */
269
+ export const formatArrayError: TypeErrorFormatter<ArrayError> = (error) => {
270
+ if (error.reason.kind === "NotArray") {
271
+ return `Giá trị ${safelyStringifyUnknownValue(error.reason.value)} không phải là mảng.`;
272
+ }
273
+ const issue = error.reason.issues[0];
274
+
275
+ switch (issue.kind) {
276
+ case "Hole":
277
+ return `Phần tử mảng tại chỉ mục ${issue.index} bị thiếu.`;
278
+ case "Accessor":
279
+ return `Phần tử mảng tại chỉ mục ${issue.index} phải là thuộc tính dữ liệu.`;
280
+ case "ExcessProperty":
281
+ return "Không cho phép thuộc tính Array dư thừa. Hãy xóa nó hoặc dùng Type khác.";
282
+ case "Element":
283
+ return `Phần tử mảng tại chỉ mục ${issue.index} không hợp lệ.`;
284
+ }
285
+ };
286
+
287
+ /** Định dạng SetError bằng tiếng Việt. */
288
+ export const formatSetError: TypeErrorFormatter<SetError> = (error) => {
289
+ if (error.reason.kind === "NotSet") {
290
+ return `Giá trị ${safelyStringifyUnknownValue(error.reason.value)} không phải là Set.`;
291
+ }
292
+ if (error.reason.kind === "UnexpectedPrototype") {
293
+ return "Giá trị là một thể hiện của lớp con Set, nhưng Set Output phải là một thể hiện Set trực tiếp.";
294
+ }
295
+ const issue = error.reason.issues[0];
296
+
297
+ switch (issue.kind) {
298
+ case "ExcessProperty":
299
+ return `Không cho phép thuộc tính Set dư thừa ${safelyStringifyUnknownValue(issue.key)}.`;
300
+ case "Element":
301
+ return `Phần tử Set tại chỉ mục ${issue.index} không hợp lệ.`;
302
+ }
303
+ };
304
+
305
+ /** Định dạng TupleError bằng tiếng Việt. */
306
+ export const formatTupleError: TypeErrorFormatter<
307
+ TupleError | TupleElementsError<TypeError>
308
+ > = (error) => {
309
+ if (error.reason.kind === "NotArray") {
310
+ return `Giá trị ${safelyStringifyUnknownValue(error.reason.value)} không phải là tuple.`;
311
+ }
312
+ if (error.reason.kind === "InvalidLength") {
313
+ return `Tuple phải chứa đúng ${error.reason.expected} phần tử, nhưng giá trị chứa ${error.reason.actual}.`;
314
+ }
315
+ const issue = error.reason.issues[0];
316
+
317
+ switch (issue.kind) {
318
+ case "Hole":
319
+ return `Phần tử Tuple tại chỉ mục ${issue.index} bị thiếu.`;
320
+ case "Accessor":
321
+ return `Phần tử Tuple tại chỉ mục ${issue.index} phải là thuộc tính dữ liệu.`;
322
+ case "ExcessProperty":
323
+ return "Không cho phép thuộc tính Tuple dư thừa. Hãy xóa nó hoặc dùng Type khác.";
324
+ case "Element":
325
+ return `Phần tử Tuple tại chỉ mục ${issue.index} không hợp lệ.`;
326
+ }
327
+ };
328
+
329
+ /** Định dạng RecordError bằng tiếng Việt. */
330
+ export const formatRecordError: TypeErrorFormatter<RecordError> = (error) => {
331
+ if (error.reason.kind === "NotRecord") {
332
+ return `Giá trị ${safelyStringifyUnknownValue(error.reason.value)} không phải là Record.`;
333
+ }
334
+ if (error.reason.kind === "NotPlainRecord") {
335
+ return "Giá trị là một đối tượng, nhưng Record Output phải là một đối tượng thuần hoặc có nguyên mẫu null.";
336
+ }
337
+ const issue = error.reason.issues[0];
338
+
339
+ switch (issue.kind) {
340
+ case "Key":
341
+ return `Khóa thuộc tính ${safelyStringifyUnknownValue(issue.key)} không hợp lệ.`;
342
+ case "Value":
343
+ return `Giá trị của thuộc tính ${safelyStringifyUnknownValue(issue.key)} không hợp lệ.`;
344
+ case "Accessor":
345
+ return `Thuộc tính Record ${safelyStringifyUnknownValue(issue.key)} phải là thuộc tính dữ liệu.`;
346
+ case "NonEnumerable":
347
+ return `Thuộc tính Record ${safelyStringifyUnknownValue(issue.key)} phải có thể liệt kê.`;
348
+ case "Collision":
349
+ return `Các khóa Record ${safelyStringifyUnknownValue(issue.previousKey)} và ${safelyStringifyUnknownValue(issue.key)} giải mã thành cùng một khóa ${safelyStringifyUnknownValue(issue.outputKey)}.`;
350
+ }
351
+ };
352
+
353
+ /** Định dạng ObjectError bằng tiếng Việt. */
354
+ export const formatObjectError: TypeErrorFormatter<ObjectError> = (error) => {
355
+ if (error.reason.kind !== "Properties")
356
+ return formatPlainObjectRootError(error.reason);
357
+
358
+ const key = Reflect.ownKeys(error.reason.errors).at(0);
359
+ assertNonNullable(key);
360
+ const propertyError = error.reason.errors[key];
361
+ assertNonNullable(propertyError);
362
+
363
+ if (propertyError.type === "ObjectPropertyAccess") {
364
+ switch ((propertyError as ObjectPropertyAccessError).reason) {
365
+ case "Accessor":
366
+ return "Thuộc tính Object phải là thuộc tính dữ liệu. Hãy hiện thực hóa giá trị accessor thành dữ liệu thuần trước khi dùng Type này hoặc dùng Type khác.";
367
+ case "NonEnumerable":
368
+ return "Thuộc tính Object phải có thể liệt kê. Hãy làm cho nó có thể liệt kê hoặc dùng Type khác.";
369
+ }
370
+ }
371
+ if (propertyError.type === "ObjectMissingProperty") {
372
+ return `Thiếu thuộc tính bắt buộc ${safelyStringifyUnknownValue(key)}.`;
373
+ }
374
+ if (typeof key === "symbol") {
375
+ return "Khóa thuộc tính Object phải là chuỗi. Hãy xóa thuộc tính symbol hoặc dùng Type khác.";
376
+ }
377
+ if (propertyError.type === "ObjectExcessProperty") {
378
+ return `Thuộc tính ${safelyStringifyUnknownValue(key)} không được phép. Hãy xóa nó hoặc dùng Type khác.`;
379
+ }
380
+ return `Thuộc tính ${safelyStringifyUnknownValue(key)} không hợp lệ.`;
381
+ };
382
+
383
+ /** Định dạng DiscriminatedUnionError bằng tiếng Việt. */
384
+ export const formatDiscriminatedUnionError: TypeErrorFormatter<
385
+ DiscriminatedUnionError
386
+ > = (error) => {
387
+ switch (error.reason.kind) {
388
+ case "Object":
389
+ return formatPlainObjectRootError(error.reason.error.reason);
390
+ case "PropertyAccess": {
391
+ const property = `Thuộc tính phân biệt ${safelyStringifyUnknownValue(error.reason.key)}`;
392
+ if (error.reason.reason === "Accessor")
393
+ return `${property} phải là thuộc tính dữ liệu.`;
394
+ if (error.reason.reason === "Inherited")
395
+ return `${property} phải là thuộc tính riêng.`;
396
+ return `${property} phải có thể liệt kê.`;
397
+ }
398
+ case "Discriminator":
399
+ return `Thuộc tính phân biệt ${safelyStringifyUnknownValue(error.reason.key)} có giá trị không mong đợi ${safelyStringifyUnknownValue(error.reason.value)}.`;
400
+ case "Member":
401
+ return `Biến thể đã chọn ${safelyStringifyUnknownValue(error.reason.discriminator)} không hợp lệ.`;
402
+ }
403
+ };
404
+
405
+ /** Định dạng JsonValueError bằng tiếng Việt. */
406
+ export const formatJsonValueError: TypeErrorFormatter<JsonValueError> = (
407
+ error,
408
+ ) => {
409
+ const issue = error.reason.issues[0];
410
+
411
+ switch (issue.kind) {
412
+ case "InvalidType":
413
+ return `Giá trị ${safelyStringifyUnknownValue(issue.value)} không phải là giá trị JSON.`;
414
+ case "NonFiniteNumber":
415
+ return "Số JSON phải hữu hạn.";
416
+ case "UnexpectedPrototype":
417
+ return "Giá trị là một đối tượng, nhưng đối tượng JsonValue phải là đối tượng thuần hoặc có nguyên mẫu null.";
418
+ case "Accessor":
419
+ return "Thuộc tính JSON phải là thuộc tính dữ liệu. Hãy hiện thực hóa giá trị accessor thành dữ liệu thuần trước khi dùng Type này hoặc dùng Type khác.";
420
+ case "NonEnumerable":
421
+ return "Thuộc tính đối tượng JSON phải có thể liệt kê. Hãy xóa nó hoặc dùng Type khác.";
422
+ case "SymbolProperty":
423
+ return "Khóa thuộc tính đối tượng JSON phải là chuỗi. Hãy xóa thuộc tính symbol hoặc dùng Type khác.";
424
+ case "Hole":
425
+ return "Một phần tử mảng JSON bị thiếu.";
426
+ case "ExcessProperty":
427
+ return "Không cho phép thuộc tính mảng JSON dư thừa. Hãy xóa nó hoặc dùng Type khác.";
428
+ case "CircularReference":
429
+ return "JsonValue không được chứa tham chiếu vòng.";
430
+ }
431
+ };
432
+
433
+ /** Định dạng JsonError bằng tiếng Việt. */
434
+ export const formatJsonError: TypeErrorFormatter<JsonError> = (error) =>
435
+ `Giá trị ${safelyStringifyUnknownValue(error.value)} không thể được phân tích thành JsonValue.`;