pema 0.1.0 → 0.2.1

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 (358) hide show
  1. package/LICENSE +19 -0
  2. package/lib/private/ArrayType.d.ts +31 -5
  3. package/lib/private/ArrayType.js +86 -22
  4. package/lib/private/BigIntDataType.d.ts +3 -0
  5. package/lib/private/BigIntDataType.js +2 -0
  6. package/lib/private/BigIntType.d.ts +8 -3
  7. package/lib/private/BigIntType.js +7 -4
  8. package/lib/private/BigUintDataType.d.ts +3 -0
  9. package/lib/private/BigUintDataType.js +2 -0
  10. package/lib/private/BigUintType.d.ts +10 -0
  11. package/lib/private/BigUintType.js +10 -0
  12. package/lib/private/BlobType.d.ts +12 -2
  13. package/lib/private/BlobType.js +12 -2
  14. package/lib/private/BooleanType.d.ts +10 -2
  15. package/lib/private/BooleanType.js +14 -2
  16. package/lib/private/BuiltinType.d.ts +7 -5
  17. package/lib/private/BuiltinType.js +18 -17
  18. package/lib/private/CoerceKey.d.ts +4 -0
  19. package/lib/private/CoerceKey.js +3 -0
  20. package/lib/private/ConstructorType.d.ts +10 -4
  21. package/lib/private/ConstructorType.js +13 -11
  22. package/lib/private/DataKey.d.ts +4 -0
  23. package/lib/private/DataKey.js +2 -0
  24. package/lib/private/DataType.d.ts +23 -0
  25. package/lib/private/DataType.js +2 -0
  26. package/lib/private/DateType.d.ts +12 -2
  27. package/lib/private/DateType.js +15 -2
  28. package/lib/private/DecrementDepth.d.ts +3 -0
  29. package/lib/private/DecrementDepth.js +2 -0
  30. package/lib/private/DefaultType.d.ts +13 -6
  31. package/lib/private/DefaultType.js +19 -11
  32. package/lib/private/FileType.d.ts +12 -2
  33. package/lib/private/FileType.js +12 -2
  34. package/lib/private/FloatDataType.d.ts +3 -0
  35. package/lib/private/FloatDataType.js +2 -0
  36. package/lib/private/GenericType.d.ts +2 -2
  37. package/lib/private/GenericType.js +2 -2
  38. package/lib/private/Id.d.ts +3 -0
  39. package/lib/private/Id.js +2 -0
  40. package/lib/private/Infer.d.ts +2 -2
  41. package/lib/private/InferInputSchema.d.ts +26 -0
  42. package/lib/private/InferInputSchema.js +2 -0
  43. package/lib/private/InferSchema.d.ts +5 -5
  44. package/lib/private/InferStore.d.ts +9 -0
  45. package/lib/private/InferStore.js +2 -0
  46. package/lib/private/InferStoreOut.d.ts +8 -0
  47. package/lib/private/InferStoreOut.js +2 -0
  48. package/lib/private/IntDataType.d.ts +3 -0
  49. package/lib/private/IntDataType.js +2 -0
  50. package/lib/private/IntType.d.ts +10 -5
  51. package/lib/private/IntType.js +13 -12
  52. package/lib/private/Issue.d.ts +6 -0
  53. package/lib/private/Issue.js +2 -0
  54. package/lib/private/LiteralType.d.ts +9 -2
  55. package/lib/private/LiteralType.js +17 -9
  56. package/lib/private/NormalizeSchema.d.ts +12 -7
  57. package/lib/private/NullType.d.ts +6 -2
  58. package/lib/private/NullType.js +11 -11
  59. package/lib/private/NumberType.d.ts +7 -3
  60. package/lib/private/NumberType.js +7 -4
  61. package/lib/private/NumericType.d.ts +25 -0
  62. package/lib/private/NumericType.js +38 -0
  63. package/lib/private/ObjectType.d.ts +23 -0
  64. package/lib/private/ObjectType.js +53 -0
  65. package/lib/private/OptionalType.d.ts +12 -5
  66. package/lib/private/OptionalType.js +16 -4
  67. package/lib/private/ParseError.d.ts +10 -0
  68. package/lib/private/ParseError.js +51 -0
  69. package/lib/private/ParseIssue.d.ts +5 -0
  70. package/lib/private/ParseIssue.js +2 -0
  71. package/lib/private/ParseOptions.d.ts +10 -0
  72. package/lib/private/ParseOptions.js +3 -0
  73. package/lib/private/Parsed.d.ts +24 -0
  74. package/lib/private/Parsed.js +17 -0
  75. package/lib/private/ParsedKey.d.ts +4 -0
  76. package/lib/private/ParsedKey.js +3 -0
  77. package/lib/private/PartialType.d.ts +25 -0
  78. package/lib/private/PartialType.js +69 -0
  79. package/lib/private/Partialable.d.ts +5 -0
  80. package/lib/private/Partialable.js +2 -0
  81. package/lib/private/PrimaryType.d.ts +14 -0
  82. package/lib/private/PrimaryType.js +26 -0
  83. package/lib/private/PrimitiveType.d.ts +12 -4
  84. package/lib/private/PrimitiveType.js +50 -17
  85. package/lib/private/PureType.d.ts +15 -0
  86. package/lib/private/PureType.js +21 -0
  87. package/lib/private/RecordType.d.ts +19 -4
  88. package/lib/private/RecordType.js +43 -14
  89. package/lib/private/RecordTypeKey.d.ts +1 -1
  90. package/lib/private/Schema.d.ts +3 -3
  91. package/lib/private/SchemaError.d.ts +4 -0
  92. package/lib/private/SchemaError.js +8 -0
  93. package/lib/private/Serialized.d.ts +72 -0
  94. package/lib/private/Serialized.js +2 -0
  95. package/lib/private/StoreId.d.ts +6 -0
  96. package/lib/private/StoreId.js +2 -0
  97. package/lib/private/StoreSchema.d.ts +8 -0
  98. package/lib/private/StoreSchema.js +2 -0
  99. package/lib/private/StoreType.d.ts +21 -0
  100. package/lib/private/StoreType.js +45 -0
  101. package/lib/private/Storeable.d.ts +15 -0
  102. package/lib/private/Storeable.js +7 -0
  103. package/lib/private/StringType.d.ts +17 -5
  104. package/lib/private/StringType.js +47 -13
  105. package/lib/private/SymbolType.d.ts +4 -1
  106. package/lib/private/SymbolType.js +5 -2
  107. package/lib/private/TupleType.d.ts +11 -4
  108. package/lib/private/TupleType.js +16 -22
  109. package/lib/private/Type.d.ts +5 -3
  110. package/lib/private/Type.js +2 -2
  111. package/lib/private/URLType.d.ts +16 -2
  112. package/lib/private/URLType.js +12 -2
  113. package/lib/private/UintDataType.d.ts +3 -0
  114. package/lib/private/UintDataType.js +2 -0
  115. package/lib/private/UintType.d.ts +14 -7
  116. package/lib/private/UintType.js +20 -12
  117. package/lib/private/UndefinedType.d.ts +4 -1
  118. package/lib/private/UndefinedType.js +7 -2
  119. package/lib/private/UnionType.d.ts +15 -4
  120. package/lib/private/UnionType.js +32 -26
  121. package/lib/private/UnknownType.d.ts +5 -0
  122. package/lib/private/UnknownType.js +7 -0
  123. package/lib/private/Validator.d.ts +1 -1
  124. package/lib/private/VirtualType.d.ts +6 -0
  125. package/lib/private/VirtualType.js +11 -0
  126. package/lib/private/array.d.ts +6 -3
  127. package/lib/private/array.js +7 -1
  128. package/lib/private/bigint.d.ts +1 -3
  129. package/lib/private/bigint.js +1 -2
  130. package/lib/private/biguint.d.ts +2 -0
  131. package/lib/private/biguint.js +2 -0
  132. package/lib/private/boolean.d.ts +3 -0
  133. package/lib/private/boolean.js +3 -0
  134. package/lib/private/coerce/bigint.d.ts +2 -0
  135. package/lib/private/coerce/bigint.js +13 -0
  136. package/lib/private/coerce/date.d.ts +2 -0
  137. package/lib/private/coerce/date.js +56 -0
  138. package/lib/private/coerce/int.d.ts +2 -0
  139. package/lib/private/coerce/int.js +8 -0
  140. package/lib/private/constructor.d.ts +5 -2
  141. package/lib/private/constructor.js +3 -0
  142. package/lib/private/error/fail.d.ts +3 -0
  143. package/lib/private/error/fail.js +5 -0
  144. package/lib/private/error/schemafail.d.ts +3 -0
  145. package/lib/private/error/schemafail.js +5 -0
  146. package/lib/private/error.d.ts +3 -2
  147. package/lib/private/error.js +10 -3
  148. package/lib/private/expect.d.ts +12 -11
  149. package/lib/private/expect.js +22 -11
  150. package/lib/private/expected.js +10 -1
  151. package/lib/private/f32.d.ts +4 -0
  152. package/lib/private/f32.js +4 -0
  153. package/lib/private/f64.d.ts +4 -0
  154. package/lib/private/f64.js +3 -0
  155. package/lib/private/i128.d.ts +4 -0
  156. package/lib/private/i128.js +6 -0
  157. package/lib/private/i16.d.ts +4 -0
  158. package/lib/private/i16.js +6 -0
  159. package/lib/private/i32.d.ts +4 -0
  160. package/lib/private/i32.js +6 -0
  161. package/lib/private/i64.d.ts +4 -0
  162. package/lib/private/i64.js +6 -0
  163. package/lib/private/i8.d.ts +4 -0
  164. package/lib/private/i8.js +6 -0
  165. package/lib/private/index.d.ts +4 -2
  166. package/lib/private/index.js +5 -40
  167. package/lib/private/int.d.ts +1 -3
  168. package/lib/private/int.js +1 -2
  169. package/lib/private/is-parsed-type.d.ts +3 -0
  170. package/lib/private/is-parsed-type.js +6 -0
  171. package/lib/private/json/JSONIssue.d.ts +6 -0
  172. package/lib/private/json/JSONIssue.js +2 -0
  173. package/lib/private/json/JSONPayload.d.ts +5 -0
  174. package/lib/private/json/JSONPayload.js +2 -0
  175. package/lib/private/literal.d.ts +1 -2
  176. package/lib/private/literal.js +1 -1
  177. package/lib/private/normalize.d.ts +4 -0
  178. package/lib/private/normalize.js +42 -0
  179. package/lib/private/number.d.ts +1 -3
  180. package/lib/private/number.js +1 -2
  181. package/lib/private/object.d.ts +11 -0
  182. package/lib/private/object.js +10 -0
  183. package/lib/private/optional.d.ts +2 -2
  184. package/lib/private/partial.d.ts +9 -0
  185. package/lib/private/partial.js +8 -0
  186. package/lib/private/path/join.d.ts +3 -0
  187. package/lib/private/path/join.js +13 -0
  188. package/lib/private/path/next.d.ts +9 -0
  189. package/lib/private/path/next.js +9 -0
  190. package/lib/private/path/rebase.d.ts +3 -0
  191. package/lib/private/path/rebase.js +9 -0
  192. package/lib/private/primary.d.ts +4 -0
  193. package/lib/private/primary.js +3 -0
  194. package/lib/private/pure.d.ts +3 -0
  195. package/lib/private/pure.js +5 -0
  196. package/lib/private/record.d.ts +5 -2
  197. package/lib/private/record.js +3 -0
  198. package/lib/private/spec/bigint.d.ts +5 -0
  199. package/lib/private/spec/bigint.js +73 -0
  200. package/lib/private/spec/biguint.d.ts +5 -0
  201. package/lib/private/spec/biguint.js +73 -0
  202. package/lib/private/spec/int.d.ts +5 -0
  203. package/lib/private/spec/int.js +70 -0
  204. package/lib/private/spec/uint.d.ts +5 -0
  205. package/lib/private/spec/uint.js +73 -0
  206. package/lib/private/string.d.ts +3 -0
  207. package/lib/private/string.js +3 -0
  208. package/lib/private/test/messages-of.d.ts +3 -0
  209. package/lib/private/test/messages-of.js +4 -0
  210. package/lib/private/test/paths-of.d.ts +3 -0
  211. package/lib/private/test/paths-of.js +4 -0
  212. package/lib/private/test/throws-issues.d.ts +4 -0
  213. package/lib/private/test/throws-issues.js +13 -0
  214. package/lib/private/trait/Default.d.ts +9 -0
  215. package/lib/private/trait/Default.js +4 -0
  216. package/lib/private/trait/Optional.d.ts +11 -0
  217. package/lib/private/trait/Optional.js +4 -0
  218. package/lib/private/tuple.d.ts +6 -2
  219. package/lib/private/tuple.js +6 -1
  220. package/lib/private/u128.d.ts +4 -0
  221. package/lib/private/u128.js +6 -0
  222. package/lib/private/u16.d.ts +4 -0
  223. package/lib/private/u16.js +6 -0
  224. package/lib/private/u32.d.ts +7 -0
  225. package/lib/private/u32.js +9 -0
  226. package/lib/private/u64.d.ts +4 -0
  227. package/lib/private/u64.js +6 -0
  228. package/lib/private/u8.d.ts +4 -0
  229. package/lib/private/u8.js +6 -0
  230. package/lib/private/uint.d.ts +1 -3
  231. package/lib/private/uint.js +1 -2
  232. package/lib/private/union.d.ts +6 -5
  233. package/lib/private/union.js +4 -1
  234. package/lib/private/unknown.d.ts +7 -0
  235. package/lib/private/unknown.js +6 -0
  236. package/lib/private/validator/email.d.ts +3 -0
  237. package/lib/private/validator/email.js +4 -0
  238. package/lib/private/validator/ends-with.d.ts +4 -0
  239. package/lib/private/validator/ends-with.js +11 -0
  240. package/lib/private/validator/f32.d.ts +2 -0
  241. package/lib/private/validator/f32.js +11 -0
  242. package/lib/private/validator/integer.d.ts +3 -0
  243. package/lib/private/validator/integer.js +12 -0
  244. package/lib/private/validator/isotime.d.ts +2 -0
  245. package/lib/private/validator/isotime.js +30 -0
  246. package/lib/private/validator/length.d.ts +5 -0
  247. package/lib/private/validator/length.js +29 -0
  248. package/lib/private/validator/max.d.ts +6 -0
  249. package/lib/private/validator/max.js +37 -0
  250. package/lib/private/validator/min.d.ts +6 -0
  251. package/lib/private/validator/min.js +37 -0
  252. package/lib/private/validator/port.d.ts +3 -0
  253. package/lib/private/validator/port.js +15 -0
  254. package/lib/private/validator/range.d.ts +3 -0
  255. package/lib/private/validator/range.js +22 -0
  256. package/lib/private/validator/regex.d.ts +5 -0
  257. package/lib/private/validator/regex.js +15 -0
  258. package/lib/private/validator/starts-with.d.ts +4 -0
  259. package/lib/private/validator/starts-with.js +11 -0
  260. package/lib/private/validator/unique-by.d.ts +2 -0
  261. package/lib/private/validator/unique-by.js +23 -0
  262. package/lib/private/validator/unique-with.d.ts +2 -0
  263. package/lib/private/validator/unique-with.js +18 -0
  264. package/lib/private/validator/unique.d.ts +2 -0
  265. package/lib/private/validator/unique.js +19 -0
  266. package/lib/private/validator/uuid.d.ts +3 -0
  267. package/lib/private/validator/uuid.js +4 -0
  268. package/lib/private/validator/values.d.ts +4 -0
  269. package/lib/private/validator/values.js +14 -0
  270. package/lib/public/DataType.d.ts +2 -0
  271. package/lib/public/DataType.js +2 -0
  272. package/lib/public/Id.d.ts +2 -0
  273. package/lib/public/Id.js +2 -0
  274. package/lib/public/InferStore.d.ts +2 -0
  275. package/lib/public/InferStore.js +2 -0
  276. package/lib/public/InferStoreOut.d.ts +2 -0
  277. package/lib/public/InferStoreOut.js +2 -0
  278. package/lib/public/Issue.d.ts +2 -0
  279. package/lib/public/Issue.js +2 -0
  280. package/lib/public/JSONPayload.d.ts +2 -0
  281. package/lib/public/JSONPayload.js +2 -0
  282. package/lib/public/ParseError.d.ts +2 -0
  283. package/lib/public/ParseError.js +2 -0
  284. package/lib/public/Serialized.d.ts +2 -0
  285. package/lib/public/Serialized.js +2 -0
  286. package/lib/public/StoreId.d.ts +2 -0
  287. package/lib/public/StoreId.js +2 -0
  288. package/lib/public/StoreSchema.d.ts +2 -0
  289. package/lib/public/StoreSchema.js +2 -0
  290. package/lib/public/StoreType.d.ts +3 -0
  291. package/lib/public/StoreType.js +2 -0
  292. package/lib/public/array.d.ts +3 -0
  293. package/lib/public/array.js +3 -0
  294. package/lib/public/bigint.d.ts +2 -0
  295. package/lib/public/bigint.js +2 -0
  296. package/lib/public/biguint.d.ts +2 -0
  297. package/lib/public/biguint.js +2 -0
  298. package/lib/public/boolean.d.ts +1 -0
  299. package/lib/public/boolean.js +1 -0
  300. package/lib/public/constructor.d.ts +1 -0
  301. package/lib/public/constructor.js +1 -0
  302. package/lib/public/f32.d.ts +2 -0
  303. package/lib/public/f32.js +2 -0
  304. package/lib/public/f64.d.ts +2 -0
  305. package/lib/public/f64.js +2 -0
  306. package/lib/public/i128.d.ts +2 -0
  307. package/lib/public/i128.js +2 -0
  308. package/lib/public/i16.d.ts +2 -0
  309. package/lib/public/i16.js +2 -0
  310. package/lib/public/i32.d.ts +2 -0
  311. package/lib/public/i32.js +2 -0
  312. package/lib/public/i64.d.ts +2 -0
  313. package/lib/public/i64.js +2 -0
  314. package/lib/public/i8.d.ts +2 -0
  315. package/lib/public/i8.js +2 -0
  316. package/lib/public/index.d.ts +6 -0
  317. package/lib/public/index.js +6 -0
  318. package/lib/public/number.d.ts +1 -0
  319. package/lib/public/number.js +1 -0
  320. package/lib/public/primary.d.ts +2 -0
  321. package/lib/public/primary.js +2 -0
  322. package/lib/public/pure.d.ts +2 -0
  323. package/lib/public/pure.js +2 -0
  324. package/lib/public/record.d.ts +1 -0
  325. package/lib/public/record.js +1 -0
  326. package/lib/public/string.d.ts +1 -0
  327. package/lib/public/string.js +1 -0
  328. package/lib/public/u128.d.ts +2 -0
  329. package/lib/public/u128.js +2 -0
  330. package/lib/public/u16.d.ts +2 -0
  331. package/lib/public/u16.js +2 -0
  332. package/lib/public/u32.d.ts +2 -0
  333. package/lib/public/u32.js +2 -0
  334. package/lib/public/u64.d.ts +2 -0
  335. package/lib/public/u64.js +2 -0
  336. package/lib/public/u8.d.ts +2 -0
  337. package/lib/public/u8.js +2 -0
  338. package/lib/public/uint.d.ts +3 -0
  339. package/lib/public/uint.js +3 -0
  340. package/lib/public/union.d.ts +1 -0
  341. package/lib/public/union.js +1 -0
  342. package/lib/public/unknown.d.ts +3 -0
  343. package/lib/public/unknown.js +2 -0
  344. package/package.json +14 -11
  345. package/lib/private/AbstractConstructor.d.ts +0 -3
  346. package/lib/private/AbstractConstructor.js +0 -2
  347. package/lib/private/MaybeInt.d.ts +0 -3
  348. package/lib/private/MaybeInt.js +0 -2
  349. package/lib/private/SchemaType.d.ts +0 -13
  350. package/lib/private/SchemaType.js +0 -63
  351. package/lib/private/Validated.d.ts +0 -8
  352. package/lib/private/Validated.js +0 -10
  353. package/lib/private/ValidatedKey.d.ts +0 -4
  354. package/lib/private/ValidatedKey.js +0 -3
  355. package/lib/private/is-int.d.ts +0 -3
  356. package/lib/private/is-int.js +0 -5
  357. package/lib/private/is_validated_type.d.ts +0 -4
  358. package/lib/private/is_validated_type.js +0 -5
@@ -0,0 +1,11 @@
1
+ import GenericType from "#GenericType";
2
+ const storeable = (x) => !!x && typeof x === "object" && "datatype" in x;
3
+ export default class VirtualType extends GenericType {
4
+ get datatype() {
5
+ if (storeable(this.schema)) {
6
+ return this.schema.datatype;
7
+ }
8
+ throw new Error("cannot be used in a store");
9
+ }
10
+ }
11
+ //# sourceMappingURL=VirtualType.js.map
@@ -1,5 +1,8 @@
1
1
  import ArrayType from "#ArrayType";
2
- import type Validated from "#Validated";
3
- declare const _default: <const T extends Validated<unknown>>(t: T) => ArrayType<T>;
4
- export default _default;
2
+ import type NormalizeSchema from "#NormalizeSchema";
3
+ import type Schema from "#Schema";
4
+ /**
5
+ * Value is an array of the given type.
6
+ */
7
+ export default function array<const S extends Schema>(of: S): ArrayType<NormalizeSchema<S>>;
5
8
  //# sourceMappingURL=array.d.ts.map
@@ -1,3 +1,9 @@
1
1
  import ArrayType from "#ArrayType";
2
- export default (t) => new ArrayType(t);
2
+ import normalize from "#normalize";
3
+ /**
4
+ * Value is an array of the given type.
5
+ */
6
+ export default function array(of) {
7
+ return new ArrayType(normalize(of));
8
+ }
3
9
  //# sourceMappingURL=array.js.map
@@ -1,4 +1,2 @@
1
- import BigIntType from "#BigIntType";
2
- declare const _default: BigIntType;
3
- export default _default;
1
+ export { default } from "#i64";
4
2
  //# sourceMappingURL=bigint.d.ts.map
@@ -1,3 +1,2 @@
1
- import BigIntType from "#BigIntType";
2
- export default new BigIntType();
1
+ export { default } from "#i64";
3
2
  //# sourceMappingURL=bigint.js.map
@@ -0,0 +1,2 @@
1
+ export { default } from "#u64";
2
+ //# sourceMappingURL=biguint.d.ts.map
@@ -0,0 +1,2 @@
1
+ export { default } from "#u64";
2
+ //# sourceMappingURL=biguint.js.map
@@ -1,4 +1,7 @@
1
1
  import BooleanType from "#BooleanType";
2
+ /**
3
+ * Value is a boolean.
4
+ */
2
5
  declare const _default: BooleanType;
3
6
  export default _default;
4
7
  //# sourceMappingURL=boolean.d.ts.map
@@ -1,3 +1,6 @@
1
1
  import BooleanType from "#BooleanType";
2
+ /**
3
+ * Value is a boolean.
4
+ */
2
5
  export default new BooleanType();
3
6
  //# sourceMappingURL=boolean.js.map
@@ -0,0 +1,2 @@
1
+ export default function coerceBigInt(x: unknown): unknown;
2
+ //# sourceMappingURL=bigint.d.ts.map
@@ -0,0 +1,13 @@
1
+ import integer from "@rcompat/is/integer";
2
+ import numeric from "@rcompat/is/numeric";
3
+ export default function coerceBigInt(x) {
4
+ // normalize from string to number; other types unaffected
5
+ const n = numeric(x) ? Number(x) : x;
6
+ // normalize from number to bigint; other types unaffected
7
+ if (integer(n)) {
8
+ return BigInt(n);
9
+ }
10
+ // bigint or invalid
11
+ return x;
12
+ }
13
+ //# sourceMappingURL=bigint.js.map
@@ -0,0 +1,2 @@
1
+ export default function coerceDate(x: unknown): unknown;
2
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1,56 @@
1
+ const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
2
+ // time with optional :ss and .ms, but TZ is REQUIRED (Z or ±HH:MM)
3
+ const ISO_DATETIME_TZ = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(?:Z|[+-]\d{2}:\d{2})$/;
4
+ // signed integer
5
+ const INT = /^[+-]?\d+$/;
6
+ function epoch(n, digits) {
7
+ // for strings we use digit-count to choose s vs ms.
8
+ // for numbers we ALWAYS treat as ms (no digits provided)
9
+ const ms = digits !== undefined
10
+ ? (digits >= 13 ? n : n * 1000)
11
+ : n;
12
+ const date = new Date(ms);
13
+ return Number.isNaN(date.getTime()) ? undefined : date;
14
+ }
15
+ function fromNumber(n) {
16
+ const date = epoch(n);
17
+ return date !== undefined ? date : n;
18
+ }
19
+ function fromString(raw) {
20
+ const s = raw.trim();
21
+ if (s === "")
22
+ return raw;
23
+ // integer string -> epoch seconds or ms (based on digit count)
24
+ if (INT.test(s)) {
25
+ const digits = s[0] === "+" || s[0] === "-" ? s.length - 1 : s.length;
26
+ const n = Number(s);
27
+ const date = epoch(n, digits);
28
+ return date ?? raw;
29
+ }
30
+ // ISO date-only -> interpret as UTC midnight
31
+ if (ISO_DATE.test(s)) {
32
+ const date = new Date(`${s}T00:00:00.000Z`);
33
+ return Number.isNaN(date.getTime()) ? raw : date;
34
+ }
35
+ // ISO datetime *with* timezone
36
+ if (ISO_DATETIME_TZ.test(s)) {
37
+ const date = new Date(s);
38
+ return Number.isNaN(date.getTime()) ? raw : date;
39
+ }
40
+ return raw;
41
+ }
42
+ export default function coerceDate(x) {
43
+ // already a Date
44
+ if (x instanceof Date)
45
+ return x;
46
+ // numbers are treated as epochs
47
+ if (typeof x === "number" && Number.isFinite(x)) {
48
+ return fromNumber(x);
49
+ }
50
+ // strings
51
+ if (typeof x === "string") {
52
+ return fromString(x);
53
+ }
54
+ return x;
55
+ }
56
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1,2 @@
1
+ export default function coerceInt(x: unknown): unknown;
2
+ //# sourceMappingURL=int.d.ts.map
@@ -0,0 +1,8 @@
1
+ import numeric from "@rcompat/is/numeric";
2
+ export default function coerceInt(x) {
3
+ if (numeric(x)) {
4
+ return Number(x);
5
+ }
6
+ return x;
7
+ }
8
+ //# sourceMappingURL=int.js.map
@@ -1,5 +1,8 @@
1
1
  import ConstructorType from "#ConstructorType";
2
- import type AbstractConstructor from "@rcompat/type/AbstractConstructor";
3
- declare const _default: <const C extends AbstractConstructor>(constructor: C) => ConstructorType<C>;
2
+ import type AbstractNewable from "@rcompat/type/AbstractNewable";
3
+ /**
4
+ * Value is a constructed instance of the given class.
5
+ */
6
+ declare const _default: <const C extends AbstractNewable>(constructor: C) => ConstructorType<C>;
4
7
  export default _default;
5
8
  //# sourceMappingURL=constructor.d.ts.map
@@ -1,3 +1,6 @@
1
1
  import ConstructorType from "#ConstructorType";
2
+ /**
3
+ * Value is a constructed instance of the given class.
4
+ */
2
5
  export default (constructor) => new ConstructorType(constructor);
3
6
  //# sourceMappingURL=constructor.js.map
@@ -0,0 +1,3 @@
1
+ import ParseError from "#ParseError";
2
+ export default function fail(input: unknown, msg: string): ParseError;
3
+ //# sourceMappingURL=fail.d.ts.map
@@ -0,0 +1,5 @@
1
+ import ParseError from "#ParseError";
2
+ export default function fail(input, msg) {
3
+ return new ParseError([{ input, message: msg, path: "" }]);
4
+ }
5
+ //# sourceMappingURL=fail.js.map
@@ -0,0 +1,3 @@
1
+ import SchemaError from "#SchemaError";
2
+ export default function schemafail(message: string, ...args: unknown[]): SchemaError;
3
+ //# sourceMappingURL=schemafail.d.ts.map
@@ -0,0 +1,5 @@
1
+ import SchemaError from "#SchemaError";
2
+ export default function schemafail(message, ...args) {
3
+ return new SchemaError(message, ...args);
4
+ }
5
+ //# sourceMappingURL=schemafail.js.map
@@ -1,3 +1,4 @@
1
- declare const _default: (message: string, key?: string) => string;
2
- export default _default;
1
+ import type ParseIssue from "#ParseIssue";
2
+ import type ParseOptions from "#ParseOptions";
3
+ export default function error<T>(name: string, x: unknown, options?: ParseOptions<T>): [ParseIssue];
3
4
  //# sourceMappingURL=error.d.ts.map
@@ -1,4 +1,11 @@
1
- export default (message, key) => key === undefined
2
- ? message
3
- : `${key}: ${message}`;
1
+ import expected from "#expected";
2
+ import ParsedKey from "#ParsedKey";
3
+ export default function error(name, x, options) {
4
+ return [{
5
+ input: x,
6
+ message: expected(name, x),
7
+ path: options?.[ParsedKey] ?? "",
8
+ }];
9
+ }
10
+ ;
4
11
  //# sourceMappingURL=error.js.map
@@ -1,21 +1,22 @@
1
1
  declare const types: {
2
2
  a: string;
3
3
  b: string;
4
+ bb: string;
5
+ bi: string;
6
+ co: string;
4
7
  d: string;
5
- n: string;
6
- s: string;
7
- u: string;
8
- bt: string;
9
8
  f: string;
10
- bb: string;
11
- o: string;
9
+ i: string;
10
+ n: string;
12
11
  nl: string;
12
+ o: string;
13
+ s: string;
13
14
  sy: string;
14
- ur: string;
15
- i: string;
15
+ u: string;
16
16
  ui: string;
17
- co: string;
17
+ ur: string;
18
18
  };
19
- declare const _default: (type: keyof typeof types, got: unknown, at?: string) => string;
20
- export default _default;
19
+ type At = number | string;
20
+ export default function expect(type: keyof typeof types, got: unknown, at?: At): string;
21
+ export {};
21
22
  //# sourceMappingURL=expect.d.ts.map
@@ -1,21 +1,32 @@
1
1
  const types = {
2
2
  a: "array",
3
3
  b: "boolean",
4
+ bb: "blob",
5
+ bi: "bigint",
6
+ co: "constructor",
4
7
  d: "date",
5
- n: "number",
6
- s: "string",
7
- u: "undefined",
8
- bt: "bigint",
9
8
  f: "file",
10
- bb: "blob",
11
- o: "object",
9
+ i: "int",
10
+ n: "number",
12
11
  nl: "null",
12
+ o: "object",
13
+ s: "string",
13
14
  sy: "symbol",
14
- ur: "url",
15
- i: "int",
15
+ u: "undefined",
16
16
  ui: "uint",
17
- co: "constructor",
17
+ ur: "url",
18
18
  };
19
- const prefix = (at) => at ? `${at}: ` : "";
20
- export default (type, got, at = "") => `${prefix(at)}expected ${types[type]}, got \`${got}\` (${typeof got})`;
19
+ const prefix = (at) => at ? `.${at}: ` : "";
20
+ function print_got(got) {
21
+ if (got === undefined) {
22
+ return "undefined";
23
+ }
24
+ if (got === null) {
25
+ return "null";
26
+ }
27
+ return `\`${got}\` (${typeof got})`;
28
+ }
29
+ export default function expect(type, got, at = "") {
30
+ return `${prefix(`${at}`)}expected ${types[type]}, got ${print_got(got)}`;
31
+ }
21
32
  //# sourceMappingURL=expect.js.map
@@ -1,2 +1,11 @@
1
- export default (type, x) => `expected ${type}, got \`${x?.toString() ?? x}\` (${(typeof x)})`;
1
+ function print_got(x) {
2
+ if (x === undefined) {
3
+ return "undefined";
4
+ }
5
+ if (x === null) {
6
+ return "null";
7
+ }
8
+ return `\`${x?.toString() ?? x}\` (${(typeof x)})`;
9
+ }
10
+ export default (type, x) => `expected ${type}, got ${print_got(x)}`;
2
11
  //# sourceMappingURL=expected.js.map
@@ -0,0 +1,4 @@
1
+ import NumberType from "#NumberType";
2
+ declare const _default: NumberType<"f32">;
3
+ export default _default;
4
+ //# sourceMappingURL=f32.d.ts.map
@@ -0,0 +1,4 @@
1
+ import NumberType from "#NumberType";
2
+ import f32 from "#validator/f32";
3
+ export default new NumberType("f32", [f32]);
4
+ //# sourceMappingURL=f32.js.map
@@ -0,0 +1,4 @@
1
+ import NumberType from "#NumberType";
2
+ declare const _default: NumberType<"f64">;
3
+ export default _default;
4
+ //# sourceMappingURL=f64.d.ts.map
@@ -0,0 +1,3 @@
1
+ import NumberType from "#NumberType";
2
+ export default new NumberType("f64");
3
+ //# sourceMappingURL=f64.js.map
@@ -0,0 +1,4 @@
1
+ import BigIntType from "#BigIntType";
2
+ declare const _default: BigIntType<"i128">;
3
+ export default _default;
4
+ //# sourceMappingURL=i128.d.ts.map
@@ -0,0 +1,6 @@
1
+ import BigIntType from "#BigIntType";
2
+ import range from "#validator/range";
3
+ const from = -(2n ** 127n);
4
+ const to = 2n ** 127n - 1n;
5
+ export default new BigIntType("i128", [range(from, to)]);
6
+ //# sourceMappingURL=i128.js.map
@@ -0,0 +1,4 @@
1
+ import IntType from "#IntType";
2
+ declare const _default: IntType<"i16">;
3
+ export default _default;
4
+ //# sourceMappingURL=i16.d.ts.map
@@ -0,0 +1,6 @@
1
+ import IntType from "#IntType";
2
+ import range from "#validator/range";
3
+ const from = -(2 ** 15);
4
+ const to = 2 ** 15 - 1;
5
+ export default new IntType("i16", [range(from, to)]);
6
+ //# sourceMappingURL=i16.js.map
@@ -0,0 +1,4 @@
1
+ import IntType from "#IntType";
2
+ declare const _default: IntType<"i32">;
3
+ export default _default;
4
+ //# sourceMappingURL=i32.d.ts.map
@@ -0,0 +1,6 @@
1
+ import IntType from "#IntType";
2
+ import range from "#validator/range";
3
+ const from = -(2 ** 31);
4
+ const to = 2 ** 31 - 1;
5
+ export default new IntType("i32", [range(from, to)]);
6
+ //# sourceMappingURL=i32.js.map
@@ -0,0 +1,4 @@
1
+ import BigIntType from "#BigIntType";
2
+ declare const _default: BigIntType<"i64">;
3
+ export default _default;
4
+ //# sourceMappingURL=i64.d.ts.map
@@ -0,0 +1,6 @@
1
+ import BigIntType from "#BigIntType";
2
+ import range from "#validator/range";
3
+ const from = -(2n ** 63n);
4
+ const to = (2n ** 63n) - 1n;
5
+ export default new BigIntType("i64", [range(from, to)]);
6
+ //# sourceMappingURL=i64.js.map
@@ -0,0 +1,4 @@
1
+ import IntType from "#IntType";
2
+ declare const _default: IntType<"i8">;
3
+ export default _default;
4
+ //# sourceMappingURL=i8.d.ts.map
@@ -0,0 +1,6 @@
1
+ import IntType from "#IntType";
2
+ import range from "#validator/range";
3
+ const from = -(2 ** 7);
4
+ const to = 2 ** 7 - 1;
5
+ export default new IntType("i8", [range(from, to)]);
6
+ //# sourceMappingURL=i8.js.map
@@ -1,5 +1,7 @@
1
1
  import type NormalizeSchema from "#NormalizeSchema";
2
2
  import type Schema from "#Schema";
3
- import SchemaType from "#SchemaType";
4
- export default function schema<const S extends Schema>(s: S): SchemaType<NormalizeSchema<S>>;
3
+ /**
4
+ * Create a schema.
5
+ */
6
+ export default function schema<const S extends Schema>(s: S): NormalizeSchema<S>;
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1,43 +1,8 @@
1
- import array from "#array";
2
- import constructor from "#constructor";
3
- import is_validated_type from "#is_validated_type";
4
- import literal from "#literal";
5
- import null_type from "#null";
6
- import SchemaType from "#SchemaType";
7
- import tuple from "#tuple";
8
- import undefined_type from "#undefined";
9
- const is_constructor = (value) => {
10
- try {
11
- if (typeof value !== "function")
12
- return false;
13
- new value();
14
- return true;
15
- }
16
- catch {
17
- return false;
18
- }
19
- };
1
+ import normalize from "#normalize";
2
+ /**
3
+ * Create a schema.
4
+ */
20
5
  export default function schema(s) {
21
- if (s === null) {
22
- return new SchemaType(null_type);
23
- }
24
- if (s === undefined) {
25
- return new SchemaType(undefined_type);
26
- }
27
- if (typeof s === "string") {
28
- return new SchemaType(literal(s));
29
- }
30
- if (is_constructor(s)) {
31
- return new SchemaType(constructor(s));
32
- }
33
- if (Array.isArray(s)) {
34
- if (s.length === 1 && is_validated_type(s[0])) {
35
- return new SchemaType(array(s[0]));
36
- }
37
- else {
38
- return new SchemaType(tuple(...s));
39
- }
40
- }
41
- return new SchemaType(s);
6
+ return normalize(s);
42
7
  }
43
8
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,2 @@
1
- import IntType from "#IntType";
2
- declare const _default: IntType;
3
- export default _default;
1
+ export { default } from "#i32";
4
2
  //# sourceMappingURL=int.d.ts.map
@@ -1,3 +1,2 @@
1
- import IntType from "#IntType";
2
- export default new IntType();
1
+ export { default } from "#i32";
3
2
  //# sourceMappingURL=int.js.map
@@ -0,0 +1,3 @@
1
+ import type Parsed from "#Parsed";
2
+ export default function isParsedType(x: unknown): x is Parsed<unknown>;
3
+ //# sourceMappingURL=is-parsed-type.d.ts.map
@@ -0,0 +1,6 @@
1
+ import ParsedKey from "#ParsedKey";
2
+ export default function isParsedType(x) {
3
+ return !!x && typeof x === "object" && ParsedKey in x;
4
+ }
5
+ ;
6
+ //# sourceMappingURL=is-parsed-type.js.map
@@ -0,0 +1,6 @@
1
+ type JSONIssue = {
2
+ message: string;
3
+ messages: string[];
4
+ };
5
+ export type { JSONIssue as default };
6
+ //# sourceMappingURL=JSONIssue.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=JSONIssue.js.map
@@ -0,0 +1,5 @@
1
+ import type JSONIssue from "#json/JSONIssue";
2
+ import type JSONPointer from "@rcompat/type/JSONPointer";
3
+ type JSONPayload = JSONIssue | Record<JSONPointer, JSONIssue>;
4
+ export type { JSONPayload as default };
5
+ //# sourceMappingURL=JSONPayload.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=JSONPayload.js.map
@@ -1,5 +1,4 @@
1
1
  import LiteralType from "#LiteralType";
2
- type Literal = string;
3
- declare const _default: <T extends Literal>(t: T) => LiteralType<T>;
2
+ declare const _default: typeof LiteralType.new;
4
3
  export default _default;
5
4
  //# sourceMappingURL=literal.d.ts.map
@@ -1,3 +1,3 @@
1
1
  import LiteralType from "#LiteralType";
2
- export default (t) => new LiteralType(t);
2
+ export default LiteralType.new;
3
3
  //# sourceMappingURL=literal.js.map
@@ -0,0 +1,4 @@
1
+ import type NormalizeSchema from "#NormalizeSchema";
2
+ import type Schema from "#Schema";
3
+ export default function normalize<const T extends Schema>(x: T): NormalizeSchema<T>;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1,42 @@
1
+ import ArrayType from "#ArrayType";
2
+ import ConstructorType from "#ConstructorType";
3
+ import LiteralType from "#LiteralType";
4
+ import NullType from "#NullType";
5
+ import ObjectType from "#ObjectType";
6
+ import ParsedKey from "#ParsedKey";
7
+ import TupleType from "#TupleType";
8
+ import UndefinedType from "#UndefinedType";
9
+ import newable from "@rcompat/is/newable";
10
+ function isParsed(x) {
11
+ return !!x && typeof x === "object" && ParsedKey in x;
12
+ }
13
+ function isPlain(x) {
14
+ return !!x && typeof x === "object" &&
15
+ Object.getPrototypeOf(x) === Object.prototype;
16
+ }
17
+ export default function normalize(x) {
18
+ if (isParsed(x))
19
+ return x;
20
+ if (x === null)
21
+ return new NullType();
22
+ if (x === undefined)
23
+ return new UndefinedType();
24
+ if (typeof x === "string" || typeof x === "number" || typeof x === "boolean")
25
+ return new LiteralType(x);
26
+ if (newable(x)) {
27
+ return new ConstructorType(x);
28
+ }
29
+ if (Array.isArray(x)) {
30
+ return x.length === 1
31
+ ? new ArrayType(normalize(x[0]))
32
+ : new TupleType(x.map(normalize));
33
+ }
34
+ if (isPlain(x)) {
35
+ const props = {};
36
+ for (const [k, v] of Object.entries(x))
37
+ props[k] = normalize(v);
38
+ return new ObjectType(props);
39
+ }
40
+ throw new TypeError("Unsupported type-like value passed to asType");
41
+ }
42
+ //# sourceMappingURL=normalize.js.map
@@ -1,4 +1,2 @@
1
- import NumberType from "#NumberType";
2
- declare const _default: NumberType;
3
- export default _default;
1
+ export { default } from "#f64";
4
2
  //# sourceMappingURL=number.d.ts.map
@@ -1,3 +1,2 @@
1
- import NumberType from "#NumberType";
2
- export default new NumberType();
1
+ export { default } from "#f64";
3
2
  //# sourceMappingURL=number.js.map
@@ -0,0 +1,11 @@
1
+ import type NormalizeSchema from "#NormalizeSchema";
2
+ import ObjectType from "#ObjectType";
3
+ import type Schema from "#Schema";
4
+ import type Dict from "@rcompat/type/Dict";
5
+ import type EO from "@rcompat/type/EO";
6
+ type NormalizeProps<S extends Dict<Schema>> = keyof S extends never ? EO : {
7
+ [K in keyof S]: NormalizeSchema<S[K]>;
8
+ };
9
+ export default function object<P extends Dict<Schema>>(properties: P): ObjectType<NormalizeProps<P>>;
10
+ export {};
11
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1,10 @@
1
+ import normalize from "#normalize";
2
+ import ObjectType from "#ObjectType";
3
+ export default function object(peries) {
4
+ const props = {};
5
+ for (const [k, v] of Object.entries(peries)) {
6
+ props[k] = normalize(v);
7
+ }
8
+ return new ObjectType(props);
9
+ }
10
+ //# sourceMappingURL=object.js.map