type-plus 4.8.2 → 4.10.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 (734) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +19 -18
  3. package/cjs/ComposableTypes.d.ts +1 -0
  4. package/cjs/ComposableTypes.d.ts.map +1 -0
  5. package/cjs/JSONTypes.d.ts +1 -0
  6. package/cjs/JSONTypes.d.ts.map +1 -0
  7. package/cjs/JSONTypes.js.map +1 -1
  8. package/cjs/PrimitiveTypes.d.ts +1 -0
  9. package/cjs/PrimitiveTypes.d.ts.map +1 -0
  10. package/cjs/UnionKeys.d.ts +1 -0
  11. package/cjs/UnionKeys.d.ts.map +1 -0
  12. package/cjs/array/CommonPropKeys.d.ts +2 -1
  13. package/cjs/array/CommonPropKeys.d.ts.map +1 -0
  14. package/cjs/array/Concat.d.ts +1 -0
  15. package/cjs/array/Concat.d.ts.map +1 -0
  16. package/cjs/array/CreateTuple.d.ts +2 -1
  17. package/cjs/array/CreateTuple.d.ts.map +1 -0
  18. package/cjs/array/Filter.d.ts +1 -0
  19. package/cjs/array/Filter.d.ts.map +1 -0
  20. package/cjs/array/FindFirst.d.ts +1 -0
  21. package/cjs/array/FindFirst.d.ts.map +1 -0
  22. package/cjs/array/FindLast.d.ts +1 -0
  23. package/cjs/array/FindLast.d.ts.map +1 -0
  24. package/cjs/array/Head.d.ts +1 -0
  25. package/cjs/array/Head.d.ts.map +1 -0
  26. package/cjs/array/IntersectOfProps.d.ts +3 -2
  27. package/cjs/array/IntersectOfProps.d.ts.map +1 -0
  28. package/cjs/array/IsArray.d.ts +1 -0
  29. package/cjs/array/IsArray.d.ts.map +1 -0
  30. package/cjs/array/Last.d.ts +1 -0
  31. package/cjs/array/Last.d.ts.map +1 -0
  32. package/cjs/array/PadLeft.d.ts +4 -3
  33. package/cjs/array/PadLeft.d.ts.map +1 -0
  34. package/cjs/array/Reverse.d.ts +1 -0
  35. package/cjs/array/Reverse.d.ts.map +1 -0
  36. package/cjs/array/Some.d.ts +4 -3
  37. package/cjs/array/Some.d.ts.map +1 -0
  38. package/cjs/array/Tail.d.ts +2 -1
  39. package/cjs/array/Tail.d.ts.map +1 -0
  40. package/cjs/array/UnionOfProps.d.ts +3 -2
  41. package/cjs/array/UnionOfProps.d.ts.map +1 -0
  42. package/cjs/array/UnionOfValues.d.ts +1 -0
  43. package/cjs/array/UnionOfValues.d.ts.map +1 -0
  44. package/cjs/array/drop.d.ts +3 -2
  45. package/cjs/array/drop.d.ts.map +1 -0
  46. package/cjs/array/drop.js.map +1 -1
  47. package/cjs/array/index.d.ts +20 -19
  48. package/cjs/array/index.d.ts.map +1 -0
  49. package/cjs/array/index.js +3 -3
  50. package/cjs/array/index.js.map +1 -1
  51. package/cjs/array/literalArray.d.ts +2 -1
  52. package/cjs/array/literalArray.d.ts.map +1 -0
  53. package/cjs/array/reduceWhile.d.ts +1 -0
  54. package/cjs/array/reduceWhile.d.ts.map +1 -0
  55. package/cjs/assertion/assertType.d.ts +3 -2
  56. package/cjs/assertion/assertType.d.ts.map +1 -0
  57. package/cjs/assertion/assertType.js +3 -3
  58. package/cjs/assertion/assertType.js.map +1 -1
  59. package/cjs/assertion/index.d.ts +2 -1
  60. package/cjs/assertion/index.d.ts.map +1 -0
  61. package/cjs/assertion/index.js +1 -1
  62. package/cjs/assertion/index.js.map +1 -1
  63. package/cjs/class/AnyConstructor.d.ts +1 -0
  64. package/cjs/class/AnyConstructor.d.ts.map +1 -0
  65. package/cjs/class/index.d.ts +3 -2
  66. package/cjs/class/index.d.ts.map +1 -0
  67. package/cjs/class/index.js +1 -1
  68. package/cjs/class/index.js.map +1 -1
  69. package/cjs/class/isConstructor.d.ts +2 -1
  70. package/cjs/class/isConstructor.d.ts.map +1 -0
  71. package/cjs/function/AnyFunction.d.ts +1 -0
  72. package/cjs/function/AnyFunction.d.ts.map +1 -0
  73. package/cjs/function/index.d.ts +2 -1
  74. package/cjs/function/index.d.ts.map +1 -0
  75. package/cjs/functional/ChainFn.d.ts +1 -0
  76. package/cjs/functional/ChainFn.d.ts.map +1 -0
  77. package/cjs/functional/compose.d.ts +3 -2
  78. package/cjs/functional/compose.d.ts.map +1 -0
  79. package/cjs/functional/compose.js.map +1 -1
  80. package/cjs/functional/index.d.ts +3 -2
  81. package/cjs/functional/index.d.ts.map +1 -0
  82. package/cjs/functional/index.js +1 -1
  83. package/cjs/functional/index.js.map +1 -1
  84. package/cjs/index.d.ts +18 -17
  85. package/cjs/index.d.ts.map +1 -0
  86. package/cjs/index.js +14 -14
  87. package/cjs/index.js.map +1 -1
  88. package/cjs/math/Abs.d.ts +2 -1
  89. package/cjs/math/Abs.d.ts.map +1 -0
  90. package/cjs/math/Add.d.ts +7 -6
  91. package/cjs/math/Add.d.ts.map +1 -0
  92. package/cjs/math/Digit.d.ts +7 -4
  93. package/cjs/math/Digit.d.ts.map +1 -0
  94. package/cjs/math/GreaterThan.d.ts +10 -9
  95. package/cjs/math/GreaterThan.d.ts.map +1 -0
  96. package/cjs/math/IsPositive.d.ts +1 -0
  97. package/cjs/math/IsPositive.d.ts.map +1 -0
  98. package/cjs/math/IsWhole.d.ts +1 -0
  99. package/cjs/math/IsWhole.d.ts.map +1 -0
  100. package/cjs/math/Max.d.ts +4 -10
  101. package/cjs/math/Max.d.ts.map +1 -0
  102. package/cjs/math/Subtract.d.ts +7 -6
  103. package/cjs/math/Subtract.d.ts.map +1 -0
  104. package/cjs/math/index.d.ts +9 -8
  105. package/cjs/math/index.d.ts.map +1 -0
  106. package/cjs/nodejs/index.d.ts +2 -1
  107. package/cjs/nodejs/index.d.ts.map +1 -0
  108. package/cjs/nodejs/index.js +1 -1
  109. package/cjs/nodejs/index.js.map +1 -1
  110. package/cjs/nodejs/isNodeError.d.ts +1 -0
  111. package/cjs/nodejs/isNodeError.d.ts.map +1 -0
  112. package/cjs/nominal-types/Brand.d.ts +3 -2
  113. package/cjs/nominal-types/Brand.d.ts.map +1 -0
  114. package/cjs/nominal-types/Brand.js +2 -2
  115. package/cjs/nominal-types/Brand.js.map +1 -1
  116. package/cjs/nominal-types/Flavor.d.ts +3 -2
  117. package/cjs/nominal-types/Flavor.d.ts.map +1 -0
  118. package/cjs/nominal-types/Flavor.js +2 -2
  119. package/cjs/nominal-types/Flavor.js.map +1 -1
  120. package/cjs/nominal-types/index.d.ts +4 -3
  121. package/cjs/nominal-types/index.d.ts.map +1 -0
  122. package/cjs/nominal-types/index.js +3 -3
  123. package/cjs/nominal-types/index.js.map +1 -1
  124. package/cjs/nominal-types/nominalMatch.d.ts +3 -2
  125. package/cjs/nominal-types/nominalMatch.d.ts.map +1 -0
  126. package/cjs/nominal-types/nominalMatch.js +2 -2
  127. package/cjs/nominal-types/nominalMatch.js.map +1 -1
  128. package/cjs/nominal-types/types.d.ts +1 -0
  129. package/cjs/nominal-types/types.d.ts.map +1 -0
  130. package/cjs/object/ANotB.d.ts +5 -4
  131. package/cjs/object/ANotB.d.ts.map +1 -0
  132. package/cjs/object/AnyRecord.d.ts +1 -0
  133. package/cjs/object/AnyRecord.d.ts.map +1 -0
  134. package/cjs/object/ExcludePropType.d.ts +1 -0
  135. package/cjs/object/ExcludePropType.d.ts.map +1 -0
  136. package/cjs/object/IsDisjoint.d.ts +4 -3
  137. package/cjs/object/IsDisjoint.d.ts.map +1 -0
  138. package/cjs/object/IsRecord.d.ts +1 -0
  139. package/cjs/object/IsRecord.d.ts.map +1 -0
  140. package/cjs/object/KeyTypes.d.ts +1 -0
  141. package/cjs/object/KeyTypes.d.ts.map +1 -0
  142. package/cjs/object/KeyofOptional.d.ts +1 -0
  143. package/cjs/object/KeyofOptional.d.ts.map +1 -0
  144. package/cjs/object/KeysWithDiffType.d.ts +4 -3
  145. package/cjs/object/KeysWithDiffType.d.ts.map +1 -0
  146. package/cjs/object/KnownKeys.d.ts +2 -1
  147. package/cjs/object/KnownKeys.d.ts.map +1 -0
  148. package/cjs/object/OptionalKeys.d.ts +2 -1
  149. package/cjs/object/OptionalKeys.d.ts.map +1 -0
  150. package/cjs/object/Partial.d.ts +4 -3
  151. package/cjs/object/Partial.d.ts.map +1 -0
  152. package/cjs/object/RecursiveIntersect.d.ts +2 -1
  153. package/cjs/object/RecursiveIntersect.d.ts.map +1 -0
  154. package/cjs/object/RecursivePartial.d.ts +2 -1
  155. package/cjs/object/RecursivePartial.d.ts.map +1 -0
  156. package/cjs/object/RecursiveRequired.d.ts +2 -1
  157. package/cjs/object/RecursiveRequired.d.ts.map +1 -0
  158. package/cjs/object/Required.d.ts +1 -0
  159. package/cjs/object/Required.d.ts.map +1 -0
  160. package/cjs/object/RequiredKeys.d.ts +3 -2
  161. package/cjs/object/RequiredKeys.d.ts.map +1 -0
  162. package/cjs/object/SpreadRecord.d.ts +2 -1
  163. package/cjs/object/SpreadRecord.d.ts.map +1 -0
  164. package/cjs/object/ValueOf.d.ts +1 -0
  165. package/cjs/object/ValueOf.d.ts.map +1 -0
  166. package/cjs/object/everyKey.d.ts +2 -1
  167. package/cjs/object/everyKey.d.ts.map +1 -0
  168. package/cjs/object/facade.d.ts +2 -1
  169. package/cjs/object/facade.d.ts.map +1 -0
  170. package/cjs/object/filterKey.d.ts +2 -1
  171. package/cjs/object/filterKey.d.ts.map +1 -0
  172. package/cjs/object/findKey.d.ts +2 -1
  173. package/cjs/object/findKey.d.ts.map +1 -0
  174. package/cjs/object/forEachKey.d.ts +2 -1
  175. package/cjs/object/forEachKey.d.ts.map +1 -0
  176. package/cjs/object/getField.d.ts +2 -1
  177. package/cjs/object/getField.d.ts.map +1 -0
  178. package/cjs/object/hasKey.d.ts +2 -1
  179. package/cjs/object/hasKey.d.ts.map +1 -0
  180. package/cjs/object/hasProperty.d.ts +2 -1
  181. package/cjs/object/hasProperty.d.ts.map +1 -0
  182. package/cjs/object/index.d.ts +37 -36
  183. package/cjs/object/index.d.ts.map +1 -0
  184. package/cjs/object/index.js +18 -18
  185. package/cjs/object/index.js.map +1 -1
  186. package/cjs/object/mapKey.d.ts +2 -1
  187. package/cjs/object/mapKey.d.ts.map +1 -0
  188. package/cjs/object/mapProperties.d.ts +3 -2
  189. package/cjs/object/mapProperties.d.ts.map +1 -0
  190. package/cjs/object/mapProperties.js +2 -2
  191. package/cjs/object/mapProperties.js.map +1 -1
  192. package/cjs/object/omit.d.ts +4 -3
  193. package/cjs/object/omit.d.ts.map +1 -0
  194. package/cjs/object/omit.js +2 -2
  195. package/cjs/object/omit.js.map +1 -1
  196. package/cjs/object/pick.d.ts +3 -2
  197. package/cjs/object/pick.d.ts.map +1 -0
  198. package/cjs/object/pick.js +2 -2
  199. package/cjs/object/pick.js.map +1 -1
  200. package/cjs/object/record.d.ts +3 -2
  201. package/cjs/object/record.d.ts.map +1 -0
  202. package/cjs/object/record.js +1 -1
  203. package/cjs/object/record.js.map +1 -1
  204. package/cjs/object/reduceKey.d.ts +2 -1
  205. package/cjs/object/reduceKey.d.ts.map +1 -0
  206. package/cjs/object/replaceProperty.d.ts +2 -1
  207. package/cjs/object/replaceProperty.d.ts.map +1 -0
  208. package/cjs/object/someKey.d.ts +2 -1
  209. package/cjs/object/someKey.d.ts.map +1 -0
  210. package/cjs/object/split.d.ts +3 -2
  211. package/cjs/object/split.d.ts.map +1 -0
  212. package/cjs/object/split.js +3 -3
  213. package/cjs/object/split.js.map +1 -1
  214. package/cjs/object/typeOverrideIncompatible.d.ts +2 -1
  215. package/cjs/object/typeOverrideIncompatible.d.ts.map +1 -0
  216. package/cjs/predicates/CanAssign.d.ts +3 -2
  217. package/cjs/predicates/CanAssign.d.ts.map +1 -0
  218. package/cjs/predicates/Equal.d.ts +1 -0
  219. package/cjs/predicates/Equal.d.ts.map +1 -0
  220. package/cjs/predicates/Extends.d.ts +1 -0
  221. package/cjs/predicates/Extends.d.ts.map +1 -0
  222. package/cjs/predicates/If.d.ts +1 -0
  223. package/cjs/predicates/If.d.ts.map +1 -0
  224. package/cjs/predicates/IsEmptyObject.d.ts +1 -0
  225. package/cjs/predicates/IsEmptyObject.d.ts.map +1 -0
  226. package/cjs/predicates/index.d.ts +9 -8
  227. package/cjs/predicates/index.d.ts.map +1 -0
  228. package/cjs/predicates/index.js +2 -2
  229. package/cjs/predicates/index.js.map +1 -1
  230. package/cjs/predicates/isType.d.ts +3 -2
  231. package/cjs/predicates/isType.d.ts.map +1 -0
  232. package/cjs/predicates/isType.js +2 -2
  233. package/cjs/predicates/isType.js.map +1 -1
  234. package/cjs/predicates/logical.d.ts +1 -0
  235. package/cjs/predicates/logical.d.ts.map +1 -0
  236. package/cjs/promise/PromiseValue.d.ts +1 -0
  237. package/cjs/promise/PromiseValue.d.ts.map +1 -0
  238. package/cjs/promise/PromiseValueMerge.d.ts +2 -1
  239. package/cjs/promise/PromiseValueMerge.d.ts.map +1 -0
  240. package/cjs/promise/index.d.ts +5 -4
  241. package/cjs/promise/index.d.ts.map +1 -0
  242. package/cjs/promise/index.js +2 -2
  243. package/cjs/promise/index.js.map +1 -1
  244. package/cjs/promise/isPromise.d.ts +1 -0
  245. package/cjs/promise/isPromise.d.ts.map +1 -0
  246. package/cjs/promise/mapSeries.d.ts +1 -0
  247. package/cjs/promise/mapSeries.d.ts.map +1 -0
  248. package/cjs/testing/index.d.ts +2 -1
  249. package/cjs/testing/index.d.ts.map +1 -0
  250. package/cjs/testing/index.js +1 -1
  251. package/cjs/testing/index.js.map +1 -1
  252. package/cjs/testing/stub.d.ts +3 -2
  253. package/cjs/testing/stub.d.ts.map +1 -0
  254. package/cjs/utils/NonNull.d.ts +1 -0
  255. package/cjs/utils/NonNull.d.ts.map +1 -0
  256. package/cjs/utils/NonUndefined.d.ts +1 -0
  257. package/cjs/utils/NonUndefined.d.ts.map +1 -0
  258. package/cjs/utils/Widen.d.ts +1 -0
  259. package/cjs/utils/Widen.d.ts.map +1 -0
  260. package/cjs/utils/as.d.ts +1 -0
  261. package/cjs/utils/as.d.ts.map +1 -0
  262. package/cjs/utils/index.d.ts +5 -4
  263. package/cjs/utils/index.d.ts.map +1 -0
  264. package/cjs/utils/index.js +1 -1
  265. package/cjs/utils/index.js.map +1 -1
  266. package/esm/ComposableTypes.d.ts +3 -0
  267. package/esm/ComposableTypes.d.ts.map +1 -0
  268. package/esm/JSONTypes.d.ts +12 -0
  269. package/esm/JSONTypes.d.ts.map +1 -0
  270. package/esm/JSONTypes.js.map +1 -1
  271. package/esm/PrimitiveTypes.d.ts +2 -0
  272. package/esm/PrimitiveTypes.d.ts.map +1 -0
  273. package/esm/UnionKeys.d.ts +2 -0
  274. package/esm/UnionKeys.d.ts.map +1 -0
  275. package/esm/array/CommonPropKeys.d.ts +4 -0
  276. package/esm/array/CommonPropKeys.d.ts.map +1 -0
  277. package/esm/array/Concat.d.ts +2 -0
  278. package/esm/array/Concat.d.ts.map +1 -0
  279. package/esm/array/CreateTuple.d.ts +3 -0
  280. package/esm/array/CreateTuple.d.ts.map +1 -0
  281. package/esm/array/Filter.d.ts +3 -0
  282. package/esm/array/Filter.d.ts.map +1 -0
  283. package/esm/array/FindFirst.d.ts +3 -0
  284. package/esm/array/FindFirst.d.ts.map +1 -0
  285. package/esm/array/FindLast.d.ts +2 -0
  286. package/esm/array/FindLast.d.ts.map +1 -0
  287. package/esm/array/Head.d.ts +2 -0
  288. package/esm/array/Head.d.ts.map +1 -0
  289. package/esm/array/IntersectOfProps.d.ts +5 -0
  290. package/esm/array/IntersectOfProps.d.ts.map +1 -0
  291. package/esm/array/IsArray.d.ts +2 -0
  292. package/esm/array/IsArray.d.ts.map +1 -0
  293. package/esm/array/Last.d.ts +2 -0
  294. package/esm/array/Last.d.ts.map +1 -0
  295. package/esm/array/PadLeft.d.ts +5 -0
  296. package/esm/array/PadLeft.d.ts.map +1 -0
  297. package/esm/array/Reverse.d.ts +2 -0
  298. package/esm/array/Reverse.d.ts.map +1 -0
  299. package/esm/array/Some.d.ts +8 -0
  300. package/esm/array/Some.d.ts.map +1 -0
  301. package/esm/array/Tail.d.ts +3 -0
  302. package/esm/array/Tail.d.ts.map +1 -0
  303. package/esm/array/UnionOfProps.d.ts +5 -0
  304. package/esm/array/UnionOfProps.d.ts.map +1 -0
  305. package/esm/array/UnionOfValues.d.ts +3 -0
  306. package/esm/array/UnionOfValues.d.ts.map +1 -0
  307. package/esm/array/drop.d.ts +13 -0
  308. package/esm/array/drop.d.ts.map +1 -0
  309. package/esm/array/drop.js.map +1 -1
  310. package/esm/array/index.d.ts +20 -0
  311. package/esm/array/index.d.ts.map +1 -0
  312. package/esm/array/index.js +3 -3
  313. package/esm/array/index.js.map +1 -1
  314. package/esm/array/literalArray.d.ts +3 -0
  315. package/esm/array/literalArray.d.ts.map +1 -0
  316. package/esm/array/reduceWhile.d.ts +2 -0
  317. package/esm/array/reduceWhile.d.ts.map +1 -0
  318. package/esm/assertion/assertType.d.ts +29 -0
  319. package/esm/assertion/assertType.d.ts.map +1 -0
  320. package/esm/assertion/assertType.js +1 -1
  321. package/esm/assertion/assertType.js.map +1 -1
  322. package/esm/assertion/index.d.ts +2 -0
  323. package/esm/assertion/index.d.ts.map +1 -0
  324. package/esm/assertion/index.js +1 -1
  325. package/esm/assertion/index.js.map +1 -1
  326. package/esm/class/AnyConstructor.d.ts +2 -0
  327. package/esm/class/AnyConstructor.d.ts.map +1 -0
  328. package/esm/class/index.d.ts +3 -0
  329. package/esm/class/index.d.ts.map +1 -0
  330. package/esm/class/index.js +1 -1
  331. package/esm/class/index.js.map +1 -1
  332. package/esm/class/isConstructor.d.ts +3 -0
  333. package/esm/class/isConstructor.d.ts.map +1 -0
  334. package/esm/function/AnyFunction.d.ts +2 -0
  335. package/esm/function/AnyFunction.d.ts.map +1 -0
  336. package/esm/function/index.d.ts +2 -0
  337. package/esm/function/index.d.ts.map +1 -0
  338. package/esm/functional/ChainFn.d.ts +3 -0
  339. package/esm/functional/ChainFn.d.ts.map +1 -0
  340. package/esm/functional/compose.d.ts +4 -0
  341. package/esm/functional/compose.d.ts.map +1 -0
  342. package/esm/functional/compose.js.map +1 -1
  343. package/esm/functional/index.d.ts +3 -0
  344. package/esm/functional/index.d.ts.map +1 -0
  345. package/esm/functional/index.js +1 -1
  346. package/esm/functional/index.js.map +1 -1
  347. package/esm/index.d.ts +19 -0
  348. package/esm/index.d.ts.map +1 -0
  349. package/esm/index.js +14 -14
  350. package/esm/index.js.map +1 -1
  351. package/esm/math/Abs.d.ts +3 -0
  352. package/esm/math/Abs.d.ts.map +1 -0
  353. package/esm/math/Add.d.ts +16 -0
  354. package/esm/math/Add.d.ts.map +1 -0
  355. package/esm/math/Digit.d.ts +97 -0
  356. package/esm/math/Digit.d.ts.map +1 -0
  357. package/esm/math/GreaterThan.d.ts +12 -0
  358. package/esm/math/GreaterThan.d.ts.map +1 -0
  359. package/esm/math/IsPositive.d.ts +2 -0
  360. package/esm/math/IsPositive.d.ts.map +1 -0
  361. package/esm/math/IsWhole.d.ts +2 -0
  362. package/esm/math/IsWhole.d.ts.map +1 -0
  363. package/esm/math/Max.d.ts +4 -0
  364. package/esm/math/Max.d.ts.map +1 -0
  365. package/esm/math/Subtract.d.ts +13 -0
  366. package/esm/math/Subtract.d.ts.map +1 -0
  367. package/esm/math/index.d.ts +9 -0
  368. package/esm/math/index.d.ts.map +1 -0
  369. package/esm/nodejs/index.d.ts +2 -0
  370. package/esm/nodejs/index.d.ts.map +1 -0
  371. package/esm/nodejs/index.js +1 -1
  372. package/esm/nodejs/index.js.map +1 -1
  373. package/esm/nodejs/isNodeError.d.ts +26 -0
  374. package/esm/nodejs/isNodeError.d.ts.map +1 -0
  375. package/esm/nominal-types/Brand.d.ts +11 -0
  376. package/esm/nominal-types/Brand.d.ts.map +1 -0
  377. package/esm/nominal-types/Brand.js +1 -1
  378. package/esm/nominal-types/Brand.js.map +1 -1
  379. package/esm/nominal-types/Flavor.d.ts +8 -0
  380. package/esm/nominal-types/Flavor.d.ts.map +1 -0
  381. package/esm/nominal-types/Flavor.js +1 -1
  382. package/esm/nominal-types/Flavor.js.map +1 -1
  383. package/esm/nominal-types/index.d.ts +4 -0
  384. package/esm/nominal-types/index.d.ts.map +1 -0
  385. package/esm/nominal-types/index.js +3 -3
  386. package/esm/nominal-types/index.js.map +1 -1
  387. package/esm/nominal-types/nominalMatch.d.ts +5 -0
  388. package/esm/nominal-types/nominalMatch.d.ts.map +1 -0
  389. package/esm/nominal-types/nominalMatch.js +1 -1
  390. package/esm/nominal-types/nominalMatch.js.map +1 -1
  391. package/esm/nominal-types/types.d.ts +3 -0
  392. package/esm/nominal-types/types.d.ts.map +1 -0
  393. package/esm/object/ANotB.d.ts +14 -0
  394. package/esm/object/ANotB.d.ts.map +1 -0
  395. package/esm/object/AnyRecord.d.ts +2 -0
  396. package/esm/object/AnyRecord.d.ts.map +1 -0
  397. package/esm/object/ExcludePropType.d.ts +4 -0
  398. package/esm/object/ExcludePropType.d.ts.map +1 -0
  399. package/esm/object/IsDisjoint.d.ts +5 -0
  400. package/esm/object/IsDisjoint.d.ts.map +1 -0
  401. package/esm/object/IsRecord.d.ts +2 -0
  402. package/esm/object/IsRecord.d.ts.map +1 -0
  403. package/esm/object/KeyTypes.d.ts +2 -0
  404. package/esm/object/KeyTypes.d.ts.map +1 -0
  405. package/esm/object/KeyofOptional.d.ts +3 -0
  406. package/esm/object/KeyofOptional.d.ts.map +1 -0
  407. package/esm/object/KeysWithDiffType.d.ts +7 -0
  408. package/esm/object/KeysWithDiffType.d.ts.map +1 -0
  409. package/esm/object/KnownKeys.d.ts +7 -0
  410. package/esm/object/KnownKeys.d.ts.map +1 -0
  411. package/esm/object/OptionalKeys.d.ts +8 -0
  412. package/esm/object/OptionalKeys.d.ts.map +1 -0
  413. package/esm/object/Partial.d.ts +7 -0
  414. package/esm/object/Partial.d.ts.map +1 -0
  415. package/esm/object/RecursiveIntersect.d.ts +5 -0
  416. package/esm/object/RecursiveIntersect.d.ts.map +1 -0
  417. package/esm/object/RecursivePartial.d.ts +5 -0
  418. package/esm/object/RecursivePartial.d.ts.map +1 -0
  419. package/esm/object/RecursiveRequired.d.ts +5 -0
  420. package/esm/object/RecursiveRequired.d.ts.map +1 -0
  421. package/esm/object/Required.d.ts +3 -0
  422. package/esm/object/Required.d.ts.map +1 -0
  423. package/esm/object/RequiredKeys.d.ts +7 -0
  424. package/esm/object/RequiredKeys.d.ts.map +1 -0
  425. package/esm/object/SpreadRecord.d.ts +3 -0
  426. package/esm/object/SpreadRecord.d.ts.map +1 -0
  427. package/esm/object/ValueOf.d.ts +2 -0
  428. package/esm/object/ValueOf.d.ts.map +1 -0
  429. package/esm/object/everyKey.d.ts +3 -0
  430. package/esm/object/everyKey.d.ts.map +1 -0
  431. package/esm/object/facade.d.ts +14 -0
  432. package/esm/object/facade.d.ts.map +1 -0
  433. package/esm/object/filterKey.d.ts +3 -0
  434. package/esm/object/filterKey.d.ts.map +1 -0
  435. package/esm/object/findKey.d.ts +3 -0
  436. package/esm/object/findKey.d.ts.map +1 -0
  437. package/esm/object/forEachKey.d.ts +3 -0
  438. package/esm/object/forEachKey.d.ts.map +1 -0
  439. package/esm/object/getField.d.ts +4 -0
  440. package/esm/object/getField.d.ts.map +1 -0
  441. package/esm/object/hasKey.d.ts +4 -0
  442. package/esm/object/hasKey.d.ts.map +1 -0
  443. package/esm/object/hasProperty.d.ts +3 -0
  444. package/esm/object/hasProperty.d.ts.map +1 -0
  445. package/esm/object/index.d.ts +37 -0
  446. package/esm/object/index.d.ts.map +1 -0
  447. package/esm/object/index.js +18 -18
  448. package/esm/object/index.js.map +1 -1
  449. package/esm/object/mapKey.d.ts +3 -0
  450. package/esm/object/mapKey.d.ts.map +1 -0
  451. package/esm/object/mapProperties.d.ts +6 -0
  452. package/esm/object/mapProperties.d.ts.map +1 -0
  453. package/esm/object/mapProperties.js +1 -1
  454. package/esm/object/mapProperties.js.map +1 -1
  455. package/esm/object/omit.d.ts +18 -0
  456. package/esm/object/omit.d.ts.map +1 -0
  457. package/esm/object/omit.js +1 -1
  458. package/esm/object/omit.js.map +1 -1
  459. package/esm/object/pick.d.ts +21 -0
  460. package/esm/object/pick.d.ts.map +1 -0
  461. package/esm/object/pick.js +1 -1
  462. package/esm/object/pick.js.map +1 -1
  463. package/esm/object/record.d.ts +4 -0
  464. package/esm/object/record.d.ts.map +1 -0
  465. package/esm/object/record.js +1 -1
  466. package/esm/object/record.js.map +1 -1
  467. package/esm/object/reduceKey.d.ts +4 -0
  468. package/esm/object/reduceKey.d.ts.map +1 -0
  469. package/esm/object/replaceProperty.d.ts +6 -0
  470. package/esm/object/replaceProperty.d.ts.map +1 -0
  471. package/esm/object/someKey.d.ts +3 -0
  472. package/esm/object/someKey.d.ts.map +1 -0
  473. package/esm/object/split.d.ts +82 -0
  474. package/esm/object/split.d.ts.map +1 -0
  475. package/esm/object/split.js +1 -1
  476. package/esm/object/split.js.map +1 -1
  477. package/esm/object/typeOverrideIncompatible.d.ts +3 -0
  478. package/esm/object/typeOverrideIncompatible.d.ts.map +1 -0
  479. package/esm/predicates/CanAssign.d.ts +7 -0
  480. package/esm/predicates/CanAssign.d.ts.map +1 -0
  481. package/esm/predicates/Equal.d.ts +5 -0
  482. package/esm/predicates/Equal.d.ts.map +1 -0
  483. package/esm/predicates/Extends.d.ts +5 -0
  484. package/esm/predicates/Extends.d.ts.map +1 -0
  485. package/esm/predicates/If.d.ts +2 -0
  486. package/esm/predicates/If.d.ts.map +1 -0
  487. package/esm/predicates/IsEmptyObject.d.ts +2 -0
  488. package/esm/predicates/IsEmptyObject.d.ts.map +1 -0
  489. package/esm/predicates/index.d.ts +12 -0
  490. package/esm/predicates/index.d.ts.map +1 -0
  491. package/esm/predicates/index.js +2 -2
  492. package/esm/predicates/index.js.map +1 -1
  493. package/esm/predicates/isType.d.ts +11 -0
  494. package/esm/predicates/isType.d.ts.map +1 -0
  495. package/esm/predicates/isType.js +1 -1
  496. package/esm/predicates/isType.js.map +1 -1
  497. package/esm/predicates/logical.d.ts +5 -0
  498. package/esm/predicates/logical.d.ts.map +1 -0
  499. package/esm/promise/PromiseValue.d.ts +2 -0
  500. package/esm/promise/PromiseValue.d.ts.map +1 -0
  501. package/esm/promise/PromiseValueMerge.d.ts +3 -0
  502. package/esm/promise/PromiseValueMerge.d.ts.map +1 -0
  503. package/esm/promise/index.d.ts +5 -0
  504. package/esm/promise/index.d.ts.map +1 -0
  505. package/esm/promise/index.js +2 -2
  506. package/esm/promise/index.js.map +1 -1
  507. package/esm/promise/isPromise.d.ts +2 -0
  508. package/esm/promise/isPromise.d.ts.map +1 -0
  509. package/esm/promise/mapSeries.d.ts +2 -0
  510. package/esm/promise/mapSeries.d.ts.map +1 -0
  511. package/esm/testing/index.d.ts +2 -0
  512. package/esm/testing/index.d.ts.map +1 -0
  513. package/esm/testing/index.js +1 -1
  514. package/esm/testing/index.js.map +1 -1
  515. package/esm/testing/stub.d.ts +10 -0
  516. package/esm/testing/stub.d.ts.map +1 -0
  517. package/esm/utils/NonNull.d.ts +2 -0
  518. package/esm/utils/NonNull.d.ts.map +1 -0
  519. package/esm/utils/NonUndefined.d.ts +2 -0
  520. package/esm/utils/NonUndefined.d.ts.map +1 -0
  521. package/esm/utils/Widen.d.ts +2 -0
  522. package/esm/utils/Widen.d.ts.map +1 -0
  523. package/esm/utils/as.d.ts +7 -0
  524. package/esm/utils/as.d.ts.map +1 -0
  525. package/esm/utils/index.d.ts +5 -0
  526. package/esm/utils/index.d.ts.map +1 -0
  527. package/esm/utils/index.js +1 -1
  528. package/esm/utils/index.js.map +1 -1
  529. package/package.json +47 -42
  530. package/ts/JSONTypes.ts +17 -18
  531. package/ts/array/CommonPropKeys.ts +18 -18
  532. package/ts/array/CreateTuple.ts +1 -1
  533. package/ts/array/IntersectOfProps.ts +20 -20
  534. package/ts/array/PadLeft.ts +3 -3
  535. package/ts/array/Some.ts +3 -3
  536. package/ts/array/Tail.ts +1 -1
  537. package/ts/array/UnionOfProps.ts +18 -18
  538. package/ts/array/drop.ts +3 -3
  539. package/ts/array/index.ts +19 -19
  540. package/ts/array/literalArray.ts +1 -1
  541. package/ts/assertion/assertType.ts +105 -105
  542. package/ts/assertion/index.ts +1 -1
  543. package/ts/binary/_binary.ts +1 -1
  544. package/ts/binary/index.ts +2 -2
  545. package/ts/class/index.ts +2 -2
  546. package/ts/class/isConstructor.ts +1 -1
  547. package/ts/function/index.ts +1 -1
  548. package/ts/functional/Maybe.ts +19 -19
  549. package/ts/functional/compose.ts +4 -3
  550. package/ts/functional/index.ts +3 -3
  551. package/ts/index.ts +19 -19
  552. package/ts/math/Abs.ts +1 -1
  553. package/ts/math/Add.ts +6 -6
  554. package/ts/math/Digit.ts +6 -4
  555. package/ts/math/GreaterThan.ts +16 -17
  556. package/ts/math/Max.ts +6 -30
  557. package/ts/math/Subtract.ts +6 -6
  558. package/ts/math/index.ts +8 -8
  559. package/ts/nodejs/index.ts +1 -1
  560. package/ts/nominal-types/Brand.ts +2 -2
  561. package/ts/nominal-types/Flavor.ts +32 -32
  562. package/ts/nominal-types/index.ts +3 -3
  563. package/ts/nominal-types/nominalMatch.ts +3 -3
  564. package/ts/object/ANotB.ts +21 -21
  565. package/ts/object/IsDisjoint.ts +12 -12
  566. package/ts/object/KeysWithDiffType.ts +3 -3
  567. package/ts/object/KnownKeys.ts +1 -1
  568. package/ts/object/OptionalKeys.ts +1 -1
  569. package/ts/object/Partial.ts +3 -3
  570. package/ts/object/RecursiveIntersect.ts +1 -1
  571. package/ts/object/RecursivePartial.ts +1 -1
  572. package/ts/object/RecursiveRequired.ts +1 -1
  573. package/ts/object/RequiredKeys.ts +2 -2
  574. package/ts/object/SpreadRecord.ts +6 -6
  575. package/ts/object/everyKey.ts +1 -1
  576. package/ts/object/facade.ts +39 -39
  577. package/ts/object/filterKey.ts +1 -1
  578. package/ts/object/findKey.ts +1 -1
  579. package/ts/object/forEachKey.ts +1 -1
  580. package/ts/object/getField.ts +1 -1
  581. package/ts/object/hasKey.ts +7 -7
  582. package/ts/object/hasProperty.ts +1 -1
  583. package/ts/object/index.ts +36 -36
  584. package/ts/object/mapKey.ts +1 -1
  585. package/ts/object/mapProperties.ts +3 -3
  586. package/ts/object/omit.ts +36 -36
  587. package/ts/object/pick.ts +35 -35
  588. package/ts/object/record.ts +5 -4
  589. package/ts/object/reduceKey.ts +1 -1
  590. package/ts/object/replaceProperty.ts +1 -1
  591. package/ts/object/someKey.ts +1 -1
  592. package/ts/object/split.ts +5 -4
  593. package/ts/object/typeOverrideIncompatible.ts +10 -10
  594. package/ts/predicates/CanAssign.ts +2 -2
  595. package/ts/predicates/index.ts +8 -8
  596. package/ts/predicates/isType.ts +30 -30
  597. package/ts/promise/PromiseValueMerge.ts +1 -1
  598. package/ts/promise/index.ts +4 -4
  599. package/ts/testing/index.ts +1 -1
  600. package/ts/testing/stub.ts +2 -2
  601. package/ts/utils/index.ts +4 -4
  602. package/ts/ComposableTypes.spec.ts +0 -29
  603. package/ts/JSONTypes.spec.ts +0 -43
  604. package/ts/array/CommonPropKeys.spec.ts +0 -20
  605. package/ts/array/Concat.spec.ts +0 -21
  606. package/ts/array/CreateTuple.spec.ts +0 -46
  607. package/ts/array/DropFirst.spec.ts +0 -21
  608. package/ts/array/DropLast.spec.ts +0 -21
  609. package/ts/array/DropMatch.spec.ts +0 -234
  610. package/ts/array/Filter.spec.ts +0 -107
  611. package/ts/array/FindFirst.spec.ts +0 -27
  612. package/ts/array/FindLast.spec.ts +0 -27
  613. package/ts/array/Head.spec.ts +0 -21
  614. package/ts/array/IntersectOfProps.spec.ts +0 -14
  615. package/ts/array/Last.spec.ts +0 -32
  616. package/ts/array/PadLeft.spec.ts +0 -26
  617. package/ts/array/Reverse.spec.ts +0 -17
  618. package/ts/array/Some.spec.ts +0 -79
  619. package/ts/array/Tail.spec.ts +0 -32
  620. package/ts/array/UnionOfProps.spec.ts +0 -14
  621. package/ts/array/UnionOfValues.spec.ts +0 -11
  622. package/ts/array/literalArray.spec.ts +0 -7
  623. package/ts/array/reduceWhile.spec.ts +0 -27
  624. package/ts/assertion/assertType.spec.ts +0 -507
  625. package/ts/binary/index.spec.ts +0 -28
  626. package/ts/class/AnyConstructor.spec.ts +0 -13
  627. package/ts/class/isConstructor.spec.ts +0 -35
  628. package/ts/function/AnyFunction.spec.ts +0 -21
  629. package/ts/functional/ChainFn.spec.ts +0 -7
  630. package/ts/functional/Maybe.spec.ts +0 -42
  631. package/ts/functional/compose.spec.ts +0 -32
  632. package/ts/index.spec.ts +0 -7
  633. package/ts/math/Abs.spec.ts +0 -14
  634. package/ts/math/Add.spec.ts +0 -82
  635. package/ts/math/Digit.spec.ts +0 -184
  636. package/ts/math/GreaterThan.spec.ts +0 -43
  637. package/ts/math/IsPositive.spec.ts +0 -15
  638. package/ts/math/IsWhole.spec.ts +0 -19
  639. package/ts/math/Max.spec.ts +0 -35
  640. package/ts/math/Subtract.spec.ts +0 -40
  641. package/ts/nodejs/isNodeError.spec.ts +0 -11
  642. package/ts/nominal-types/Brand.spec.ts +0 -43
  643. package/ts/nominal-types/Flavor.spec.ts +0 -51
  644. package/ts/nominal-types/nominalMatch.spec.ts +0 -54
  645. package/ts/object/ANotB.spec.ts +0 -78
  646. package/ts/object/ExcludePropType.spec.ts +0 -13
  647. package/ts/object/IsDisjoint.spec.ts +0 -25
  648. package/ts/object/IsRecord.spec.ts +0 -22
  649. package/ts/object/KeyTypes.spec.ts +0 -9
  650. package/ts/object/KeyofOptional.spec.ts +0 -8
  651. package/ts/object/KeysWithDiffType.spec.ts +0 -21
  652. package/ts/object/KnownKeys.spec.ts +0 -39
  653. package/ts/object/OptionalKeys.spec.ts +0 -23
  654. package/ts/object/Partial.spec.ts +0 -49
  655. package/ts/object/RecursiveIntersect.spec.ts +0 -39
  656. package/ts/object/RecursiveRequired.spec.ts +0 -57
  657. package/ts/object/Required.spec.ts +0 -29
  658. package/ts/object/RequiredKeys.spec.ts +0 -24
  659. package/ts/object/SpreadRecord.spec.ts +0 -14
  660. package/ts/object/ValueOf.spec.ts +0 -36
  661. package/ts/object/everyKey.spec.ts +0 -11
  662. package/ts/object/facade.spec.ts +0 -22
  663. package/ts/object/filterKey.spec.ts +0 -8
  664. package/ts/object/findKey.spec.ts +0 -8
  665. package/ts/object/forEachKey.spec.ts +0 -9
  666. package/ts/object/getField.spec.ts +0 -21
  667. package/ts/object/hasKey.spec.ts +0 -29
  668. package/ts/object/hasProperty.spec.ts +0 -15
  669. package/ts/object/mapKey.spec.ts +0 -8
  670. package/ts/object/mapProperties.spec.ts +0 -27
  671. package/ts/object/omit.spec.ts +0 -104
  672. package/ts/object/pick.spec.ts +0 -66
  673. package/ts/object/record.spec.ts +0 -54
  674. package/ts/object/reduceKey.spec.ts +0 -18
  675. package/ts/object/replaceProperty.spec.ts +0 -16
  676. package/ts/object/run.ts +0 -0
  677. package/ts/object/someKey.spec.ts +0 -6
  678. package/ts/object/split.spec.ts +0 -119
  679. package/ts/object/typeOverrideIncompatible.spec.ts +0 -24
  680. package/ts/predicates/CanAssign.spec.ts +0 -57
  681. package/ts/predicates/Equal.spec.ts +0 -71
  682. package/ts/predicates/If.spec.ts +0 -14
  683. package/ts/predicates/IsEmptyObject.spec.ts +0 -15
  684. package/ts/predicates/index.spec.ts +0 -73
  685. package/ts/predicates/isType.spec.ts +0 -106
  686. package/ts/predicates/logical.spec.ts +0 -59
  687. package/ts/promise/PromiseValue.spec.ts +0 -6
  688. package/ts/promise/PromiseValueMerge.spec.ts +0 -7
  689. package/ts/promise/isPromise.spec.ts +0 -26
  690. package/ts/promise/mapSeries.spec.ts +0 -12
  691. package/ts/testing/stub.spec.ts +0 -58
  692. package/ts/type-checker/.eslintrc.json +0 -5
  693. package/ts/type-checker/AnyType.ts +0 -13
  694. package/ts/type-checker/Boolean.ts +0 -34
  695. package/ts/type-checker/Tuple.spec.ts +0 -15
  696. package/ts/type-checker/Tuple.ts +0 -14
  697. package/ts/type-checker/buildTypes.spec.ts +0 -28
  698. package/ts/type-checker/index.ts +0 -0
  699. package/ts/type-checker/typeChecker.spec.ts +0 -14
  700. package/ts/type-checker/typeChecker.ts +0 -52
  701. package/ts/type-checker/types.ts +0 -19
  702. package/ts/types/.eslintrc.json +0 -5
  703. package/ts/types/AllType.ts +0 -31
  704. package/ts/types/Any.ts +0 -7
  705. package/ts/types/Array.ts +0 -43
  706. package/ts/types/BigInt.ts +0 -36
  707. package/ts/types/Boolean.ts +0 -36
  708. package/ts/types/Generate.ts +0 -48
  709. package/ts/types/Null.ts +0 -14
  710. package/ts/types/Number.ts +0 -56
  711. package/ts/types/Object.ts +0 -53
  712. package/ts/types/Record.ts +0 -25
  713. package/ts/types/String.ts +0 -56
  714. package/ts/types/Symbol.ts +0 -19
  715. package/ts/types/Tuple.ts +0 -50
  716. package/ts/types/Undefined.ts +0 -8
  717. package/ts/types/Union.ts +0 -46
  718. package/ts/types/Unknown.ts +0 -9
  719. package/ts/types/analyze.spec.ts +0 -979
  720. package/ts/types/analyze.ts +0 -170
  721. package/ts/types/check.spec.ts +0 -12
  722. package/ts/types/check.ts +0 -26
  723. package/ts/types/conform.spec.ts +0 -7
  724. package/ts/types/conform.ts +0 -27
  725. package/ts/types/getPlainAnalysisReport.spec.ts +0 -354
  726. package/ts/types/getPlainAnalysisReport.ts +0 -115
  727. package/ts/types/index.ts +0 -28
  728. package/ts/types/optional.ts +0 -30
  729. package/ts/types/required.ts +0 -30
  730. package/ts/types/satisfy.accept.ts +0 -39
  731. package/ts/types/satisfy.spec.ts +0 -600
  732. package/ts/types/satisfy.ts +0 -27
  733. package/ts/types/types.ts +0 -10
  734. package/ts/utils/as.spec.ts +0 -45
@@ -1,170 +0,0 @@
1
- import { reduceByKey } from '../object'
2
- import { AllType } from './AllType'
3
- import { Array as ArrayType } from './Array'
4
- import { Boolean } from './Boolean'
5
- import { number, Number } from './Number'
6
- import { object, ObjectType } from './Object'
7
- import { Record as RecordType } from './Record'
8
- import { string, String } from './String'
9
- import { Tuple } from './Tuple'
10
- import { Type } from './types'
11
- import { Union } from './Union'
12
-
13
- export namespace analyze {
14
- export type Options = { strict: boolean }
15
- export type Result = {
16
- options: Options,
17
- analysis: AllType.Analysis,
18
- actual: any
19
- }
20
- }
21
- export function analyze(options: analyze.Options, type: AllType, actual: unknown): analyze.Result {
22
- return {
23
- options,
24
- analysis: analyzeInternal(options, type, actual),
25
- actual
26
- }
27
- }
28
- export function analyzeInternal(options: analyze.Options, type: AllType, actual: unknown): AllType.Analysis {
29
- const t = type['type']
30
- switch (t) {
31
- case 'unknown':
32
- case 'any':
33
- return ok(type)
34
- case 'undefined':
35
- case 'symbol':
36
- return typeof actual === t ? ok(type) : fail(t)
37
- case 'null':
38
- return actual === null ? ok(type) : fail(t)
39
- case 'boolean': return analyzeBoolean(type as Boolean, actual)
40
- case 'number': return analyzeType(number, type as Number, actual)
41
- case 'string': return analyzeType(string, type as String, actual)
42
- // case 'bigint': return analyzeType(bigint, type as BigInt, actual)
43
- case 'object': return analyzeObject(options, type as ObjectType, actual)
44
- case 'record': return analyzeRecord(options, type as RecordType, actual)
45
- case 'array': return analyzeArray(options, type as ArrayType, actual)
46
- case 'tuple': return analyzeTuple(options, type as Tuple, actual)
47
- case 'union': return analyzeUnion(options, type as Union, actual)
48
- }
49
- }
50
-
51
- function analyzeBoolean(type: Boolean, actual: unknown) {
52
- const value = type['value']
53
- if (value === undefined) {
54
- return typeof actual === 'boolean' ? ok(type) : fail('boolean', value)
55
- }
56
- else {
57
- return value === actual ? ok(type) : fail('boolean', value)
58
- }
59
- }
60
-
61
- function analyzeType(
62
- baseType: Number | String, // | BigInt,
63
- type: Type<any, any>,
64
- actual: unknown
65
- ) {
66
- const value = type['value']
67
- return typeof actual === baseType['type'] && (type === baseType || actual === value)
68
- ? ok(type)
69
- : fail(type['type'], type['value'])
70
- }
71
-
72
- function analyzeUnion(options: analyze.Options, type: Union, actual: unknown) {
73
- const subTypes = type['value']
74
- const r = subTypes.map(t => analyzeInternal(options, t, actual))
75
- return r.some(r => !r.fail) ? ok(type) : fail('union', r)
76
- }
77
-
78
- function analyzeArray(options: analyze.Options, type: ArrayType<AllType>, actual: unknown) {
79
- const subType = type['value']
80
- if (!Array.isArray(actual)) return fail('array', subType ? ok(subType) : undefined)
81
- if (subType === undefined) return ok(type)
82
-
83
- const r = actual.reduce((p, a, i) => {
84
- const r = analyzeInternal(options, subType, a)
85
- if (r.fail) {
86
- p.value = r.value
87
- p.keys.push(i)
88
- p.actual.push(a)
89
- }
90
- return p
91
- }, { keys: [], actual: [] })
92
- return r.keys.length === 0 ?
93
- ok(type) :
94
- fail('array', { ...fail(subType['type'], r.value) })
95
- }
96
-
97
- function analyzeTuple(options: analyze.Options, type: Tuple, actual: unknown) {
98
- const value = type['value']
99
- if (!Array.isArray(actual)) return fail('tuple', value.map(ok))
100
- const results = value.map((v, i) => analyzeInternal(options, v, actual[i]))
101
- if (options.strict && results.length < actual.length) {
102
- return fail('tuple', results)
103
- }
104
- return results.every(r => !r.fail) ? ok(type) : fail('tuple', results)
105
- }
106
-
107
- function analyzeObject(options: analyze.Options, type: ObjectType, actual: any) {
108
- const typeMap = type['value']
109
- if (!isOnlyObject(actual)) return fail('object', typeMap ? object.map(v => ok(v), typeMap) : undefined)
110
- if (type === object as ObjectType) return ok(type)
111
-
112
- const typeKeys = Object.keys(typeMap)
113
- const s = { ...actual }
114
- const results = typeKeys.reduce(
115
- (p, k) => {
116
- const r = p.value[k] = analyzeInternal(options, typeMap[k], actual[k])
117
- p.fail ||= !!r.fail
118
- s[k] = undefined
119
- return p
120
- },
121
- { fail: false, value: {} } as { fail: boolean, value: Record<string, AllType.Analysis> }
122
- )
123
- const skeys = Object.keys(s)
124
- if (options.strict && skeys.length > typeKeys.length) {
125
- return fail('object', results.value)
126
- }
127
-
128
- return !results.fail ? ok(type) : fail('object', results.value)
129
- }
130
-
131
- function analyzeRecord(options: analyze.Options, type: RecordType, actual: unknown) {
132
- const subType = type['value']
133
- if (!isOnlyObject(actual)) return fail('record', ok(subType))
134
-
135
- const r = reduceByKey(actual, (p, k) => {
136
- const r = analyzeInternal(options, subType, actual[k])
137
- if (r.fail) {
138
- p.value = r.value
139
- p.keys.push(k)
140
- p.actual.push(actual[k])
141
- }
142
- return p
143
- }, { keys: [] as string[], actual: [] as any[], value: undefined as any })
144
- return r.keys.length === 0 ?
145
- ok(type) :
146
- fail('record', { ...fail(subType['type'], r.value) })
147
- }
148
-
149
- function ok(t: { type: AllType.Analysis['type'], ['value']?: AllType.Analysis['value'] }): AllType.Analysis {
150
- const type = t['type']
151
- const value = t['value']
152
- if (value === undefined) return { type, value }
153
- if (typeof value !== 'object' || value === null) return { type, value }
154
- if (Array.isArray(value)) return { type, value: value.map(ok) } as any
155
- if (value['type']) return { type, value: ok(value) } as any
156
- return {
157
- type, value: reduceByKey(
158
- value as Record<string, any>,
159
- (p, k) => (p[k] = ok(value[k]), p),
160
- {} as Record<string, any>)
161
- } as any
162
- }
163
-
164
- function fail(type: AllType.Analysis['type'], value?: AllType.Analysis['value']): AllType.Analysis {
165
- return value === undefined ? { type, fail: true } : { type, value, fail: true }
166
- }
167
-
168
- function isOnlyObject(actual: unknown): actual is Object {
169
- return typeof actual === 'object' && actual !== null && !Array.isArray(actual)
170
- }
@@ -1,12 +0,0 @@
1
- import * as T from '.'
2
- import { check } from './check'
3
-
4
- test('check without strict', () => {
5
- const t = T.tuple.create(T.string)
6
- expect(check({ strict: false }, t, ['a', 'b', 'c', 'd'])).toBe(true)
7
- })
8
-
9
- test('check with strict', () => {
10
- const t = T.tuple.create(T.string)
11
- expect(check({ strict: true }, t, ['a', 'b', 'c', 'd'])).toBe(false)
12
- })
package/ts/types/check.ts DELETED
@@ -1,26 +0,0 @@
1
- import { AllType } from './AllType'
2
- import { analyze } from './analyze'
3
- import { Generate } from './Generate'
4
- import { getPlainAnalysisReport } from './getPlainAnalysisReport'
5
-
6
- /**
7
- * Checks if the specified `subject` against the `type`.
8
- * @return type guard (boolean). If the subject does not check to the type,
9
- * the detail report is available in `check.result`,
10
- * and you can get a string report using `check.getReport()`
11
- */
12
- export function check<T extends AllType>(options: analyze.Options, type: T, subject: unknown): subject is Generate<T> {
13
- const result = check.result = analyze(options, type, subject)
14
- return !result.analysis.fail
15
- }
16
-
17
- /**
18
- * Analysis report.
19
- */
20
- check.result = { analysis: {}, actual: undefined } as analyze.Result
21
-
22
- /**
23
- * Gets a simple report of the analysis.
24
- */
25
- check.getReport = () => getPlainAnalysisReport(check.result)
26
-
@@ -1,7 +0,0 @@
1
- import * as T from '.'
2
- import { conform } from './conform'
3
-
4
- test('conform is strict', () => {
5
- const t = T.tuple.create(T.string)
6
- expect(conform(t, ['a', 'b', 'c', 'd'])).toBe(false)
7
- })
@@ -1,27 +0,0 @@
1
- import { AllType } from './AllType'
2
- import { analyze } from './analyze'
3
- import { Generate } from './Generate'
4
- import { getPlainAnalysisReport } from './getPlainAnalysisReport'
5
-
6
- /**
7
- * Checks if the specified `subject` conforms to the `type`.
8
- * `conform()` is the shortcut of `check({ strict: true }, ...)`.
9
- * @return type guard (boolean). If the subject does not conform to the type,
10
- * the detail report is available in `conform.result`,
11
- * and you can get a string report using `conform.getReport()`
12
- */
13
- export function conform<T extends AllType>(type: T, subject: unknown): subject is Generate<T> {
14
- const result = conform.result = analyze({ strict: true }, type, subject)
15
- return !result.analysis.fail
16
- }
17
-
18
- /**
19
- * Analysis report.
20
- */
21
- conform.result = { analysis: {}, actual: undefined } as analyze.Result
22
-
23
- /**
24
- * Gets a simple report of the analysis.
25
- */
26
- conform.getReport = () => getPlainAnalysisReport(conform.result)
27
-
@@ -1,354 +0,0 @@
1
- import * as T from '.'
2
- import { AllType } from './AllType'
3
- import { analyze } from './analyze'
4
- import { getPlainAnalysisReport } from './getPlainAnalysisReport'
5
-
6
- const nonStrict = { strict: false, debug: false }
7
- const strict = { strict: true, debug: false }
8
-
9
- describe('any', () => {
10
- test('pass', () => {
11
- assertReportEquals(nonStrict, T.any, false,
12
- `The subject satisfies type any`)
13
- })
14
- test('strict pass', () => {
15
- assertReportEquals(strict, T.any, false,
16
- `The subject strictly satisfies type any`)
17
- })
18
- })
19
-
20
- describe('unknown', () => {
21
- test('pass', () => {
22
- assertReportEquals(nonStrict, T.unknown, false,
23
- `The subject satisfies type unknown`)
24
- })
25
- test('strict pass', () => {
26
- assertReportEquals(strict, T.unknown, false,
27
- `The subject strictly satisfies type unknown`)
28
- })
29
- })
30
-
31
- describe('undefined', () => {
32
- test('pass', () => {
33
- assertReportEquals(nonStrict, T.undefined, undefined,
34
- `The subject satisfies type undefined`)
35
- })
36
- test('strict pass', () => {
37
- assertReportEquals(strict, T.undefined, undefined,
38
- `The subject strictly satisfies type undefined`)
39
- })
40
- test('fail with explicit undefined', () => {
41
- assertReportEquals(nonStrict, T.undefined, false,
42
- `subject expects to be undefined but is actually false`)
43
- })
44
- })
45
-
46
- describe('null', () => {
47
- test('pass', () => {
48
- assertReportEquals(nonStrict, T.null, null,
49
- `The subject satisfies type null`)
50
- })
51
- test('strict pass', () => {
52
- assertReportEquals(strict, T.null, null,
53
- `The subject strictly satisfies type null`)
54
- })
55
- test('fail with explicit null', () => {
56
- assertReportEquals(nonStrict, T.null, false,
57
- `subject expects to be null but is actually false`)
58
- })
59
- })
60
- describe('boolean', () => {
61
- test('pass', () => {
62
- assertReportEquals(nonStrict, T.boolean, false,
63
- `The subject satisfies type boolean`)
64
- })
65
- test('strict pass', () => {
66
- assertReportEquals(strict, T.boolean, true,
67
- `The subject strictly satisfies type boolean`)
68
- })
69
-
70
- test('not boolean', () => {
71
- assertReportEquals(nonStrict, T.boolean, undefined,
72
- `subject expects to be boolean but is actually undefined`)
73
- })
74
-
75
- test('specific boolean violation', () => {
76
- assertReportEquals(nonStrict, T.boolean.true, false,
77
- `subject expects to be true but is actually false`)
78
- })
79
-
80
- test('optional boolean violation', () => {
81
- assertReportEquals(nonStrict, T.boolean.optional, null,
82
- `subject expects to be (boolean | undefined) but is actually null`)
83
- })
84
-
85
- test('optional specific boolean violation', () => {
86
- assertReportEquals(nonStrict, T.boolean.optional.false, true,
87
- `subject expects to be (false | undefined) but is actually true`)
88
- })
89
- })
90
- describe('number', () => {
91
- test('not number', () => {
92
- assertReportEquals(nonStrict, T.number, undefined,
93
- `subject expects to be number but is actually undefined`)
94
- })
95
-
96
- test('specific number violation', () => {
97
- assertReportEquals(nonStrict, T.number.create(1), false,
98
- `subject expects to be 1 but is actually false`)
99
- })
100
-
101
- test('optional number violation', () => {
102
- assertReportEquals(nonStrict, T.number.optional, false,
103
- `subject expects to be (number | undefined) but is actually false`)
104
- })
105
-
106
- test('optional specific number violation', () => {
107
- assertReportEquals(nonStrict, T.number.optional.create(2), false,
108
- `subject expects to be (2 | undefined) but is actually false`)
109
- })
110
-
111
- test('number list violation', () => {
112
- assertReportEquals(nonStrict, T.number.list(1, 2, 3), false,
113
- `subject expects to be (1 | 2 | 3) but is actually false`)
114
- })
115
-
116
- test('optional number list violation', () => {
117
- assertReportEquals(nonStrict, T.number.optional.list(1, 2, 3), false,
118
- `subject expects to be (1 | 2 | 3 | undefined) but is actually false`)
119
- })
120
- })
121
- describe('string', () => {
122
- test('not string', () => {
123
- assertReportEquals(nonStrict, T.string, undefined,
124
- `subject expects to be string but is actually undefined`)
125
- })
126
-
127
- test('specific string violation', () => {
128
- assertReportEquals(nonStrict, T.string.create('a'), false,
129
- `subject expects to be 'a' but is actually false`)
130
- })
131
-
132
- test('optional string violation', () => {
133
- assertReportEquals(nonStrict, T.string.optional, false,
134
- `subject expects to be (string | undefined) but is actually false`)
135
- })
136
-
137
- test('optional specific string violation', () => {
138
- assertReportEquals(nonStrict, T.string.optional.create('b'), false,
139
- `subject expects to be ('b' | undefined) but is actually false`)
140
- })
141
-
142
- test('string list violation', () => {
143
- assertReportEquals(nonStrict, T.string.list('a', 'b', 'c'), false,
144
- `subject expects to be ('a' | 'b' | 'c') but is actually false`)
145
- })
146
-
147
- test('optional string list violation', () => {
148
- assertReportEquals(nonStrict, T.string.optional.list('a', 'b', 'c'), false,
149
- `subject expects to be ('a' | 'b' | 'c' | undefined) but is actually false`)
150
- })
151
- })
152
- describe('symbol', () => {
153
- test('not symbol', () => {
154
- assertReportEquals(nonStrict, T.symbol, undefined,
155
- `subject expects to be symbol but is actually undefined`)
156
- })
157
- })
158
- describe('bigint', () => {
159
- // test('not bigint', () => {
160
- // assertReportEquals(nonStrict, T.bigint, undefined,
161
- // `subject expects to be bigint but is actually undefined`)
162
- // })
163
- })
164
- describe('array', () => {
165
- test('base violation', () => {
166
- assertReportEquals(nonStrict, T.array, undefined,
167
- `subject expects to be Array<any> but is actually undefined`)
168
- })
169
- test('specific array violation', () => {
170
- assertReportEquals(nonStrict, T.array.create(T.number), false,
171
- `subject expects to be Array<number> but is actually false`)
172
- })
173
- test('optional array violation', () => {
174
- assertReportEquals(nonStrict, T.array.optional, false,
175
- `subject expects to be (Array<any> | undefined) but is actually false`)
176
- })
177
- test('optional specific array violation', () => {
178
- assertReportEquals(nonStrict, T.array.optional.create(T.number), false,
179
- `subject expects to be (Array<number> | undefined) but is actually false`)
180
- })
181
- })
182
- describe('tuple', () => {
183
- test('specific tuple violation', () => {
184
- assertReportEquals(
185
- nonStrict,
186
- T.tuple.create(T.number.create(1), T.string.create('a')),
187
- false,
188
- `subject expects to be [1,'a'] but is actually false`)
189
- })
190
- test('optional specific tuple violation', () => {
191
- assertReportEquals(
192
- nonStrict,
193
- T.tuple.optional.create(T.number),
194
- false,
195
- `subject expects to be ([number] | undefined) but is actually false`)
196
- })
197
- test('missing entry', () => {
198
- assertReportEquals(
199
- nonStrict,
200
- T.tuple.create(T.null),
201
- [],
202
- [
203
- `subject expects to be [null] but is actually []`,
204
- `subject[0] expects to be null but is actually undefined`
205
- ].join('\n')
206
- )
207
- })
208
- test('actual is object', () => {
209
- assertReportEquals(
210
- nonStrict,
211
- T.tuple.create(T.null, T.number),
212
- { a: 1 },
213
- [
214
- `subject expects to be [null,number] but is actually { a: 1 }`
215
- ].join('\n')
216
- )
217
- })
218
- test('strict with extra entry', () => {
219
- assertReportEquals(
220
- strict,
221
- T.tuple.create(T.null),
222
- [null, 1],
223
- [
224
- `subject expects to be strictly [null] but is actually [null, 1]`,
225
- `index 1 should not contain any value`
226
- ].join('\n')
227
- )
228
- })
229
- test('strict with extra entries', () => {
230
- assertReportEquals(
231
- strict,
232
- T.tuple.create(T.null, T.number),
233
- [null, 1, 'a', false],
234
- [
235
- `subject expects to be strictly [null,number] but is actually [null, 1, 'a', false]`,
236
- `indices 2,3 should not contain any value`
237
- ].join('\n')
238
- )
239
- })
240
- })
241
- describe('object', () => {
242
- test('not object', () => {
243
- assertReportEquals(nonStrict, T.object, undefined,
244
- `subject expects to be object but is actually undefined`)
245
- })
246
- test('specific object violation', () => {
247
- assertReportEquals(
248
- nonStrict,
249
- T.object.create({ a: T.null }),
250
- false,
251
- `subject expects to be { a: null } but is actually false`)
252
- })
253
- test('optional specific object violation', () => {
254
- assertReportEquals(
255
- nonStrict,
256
- T.object.optional.create({ a: T.object.create({ b: T.string }) }),
257
- false,
258
- `subject expects to be ({ a: { b: string } } | undefined) but is actually false`)
259
- })
260
- test('in object violation', () => {
261
- assertReportEquals(
262
- nonStrict,
263
- T.object.create({ a: T.string }),
264
- { a: 1 },
265
- [
266
- `subject expects to be { a: string } but is actually { a: 1 }`,
267
- `subject.a expects to be string but is actually 1`
268
- ].join('\n')
269
- )
270
- })
271
- test('nested object violation', () => {
272
- assertReportEquals(
273
- nonStrict,
274
- T.object.create({ a: T.object.create({ b: T.string }) }),
275
- { a: { b: 1 } },
276
- [
277
- `subject expects to be { a: { b: string } } but is actually { a: { b: 1 } }`,
278
- `subject.a expects to be { b: string } but is actually { b: 1 }`,
279
- `subject.a.b expects to be string but is actually 1`
280
- ].join('\n')
281
- )
282
- })
283
- test('- prop violation', () => {
284
- assertReportEquals(
285
- nonStrict,
286
- T.object.create({ 'a-b': T.string }),
287
- { 'a-b': 1 },
288
- [
289
- `subject expects to be { 'a-b': string } but is actually { 'a-b': 1 }`,
290
- `subject['a-b'] expects to be string but is actually 1`
291
- ].join('\n')
292
- )
293
- })
294
- test('strict with extra property', () => {
295
- assertReportEquals(
296
- strict,
297
- T.object.create({ a: T.number }),
298
- { a: 1, b: 2 },
299
- [
300
- `subject expects to be strictly { a: number } but is actually { a: 1, b: 2 }`,
301
- `property b should not contain any value`
302
- ].join('\n')
303
- )
304
- })
305
- test('strict with extra properties', () => {
306
- assertReportEquals(
307
- strict,
308
- T.object.create({ a: T.number }),
309
- { a: 1, b: 2, c: 'c' },
310
- [
311
- `subject expects to be strictly { a: number } but is actually { a: 1, b: 2, c: 'c' }`,
312
- `properties b,c should not contain any value`
313
- ].join('\n')
314
- )
315
- })
316
- test('object with array', () => {
317
- assertReportEquals(
318
- nonStrict,
319
- T.object.create({ a: T.array, b: T.string }),
320
- { a: [], b: 1 },
321
- [
322
- `subject expects to be { a: Array<any>, b: string } but is actually { a: [], b: 1 }`,
323
- `subject.b expects to be string but is actually 1`
324
- ].join('\n')
325
- )
326
- })
327
- })
328
- describe('record', () => {
329
- test('specific record violation', () => {
330
- assertReportEquals(
331
- nonStrict,
332
- T.record.create(T.null),
333
- false,
334
- `subject expects to be Record<string, null> but is actually false`)
335
- })
336
- test('optional specific record violation', () => {
337
- assertReportEquals(
338
- nonStrict,
339
- T.record.optional.create(T.record.create(T.string)),
340
- false,
341
- `subject expects to be (Record<string, Record<string, string>> | undefined) but is actually false`)
342
- })
343
- test(`nested violation`, () => {
344
- assertReportEquals(
345
- nonStrict,
346
- T.record.optional.create(T.record.create(T.string)),
347
- { a: { b: 1 } },
348
- `subject expects to be (Record<string, Record<string, string>> | undefined) but is actually { a: { b: 1 } }`)
349
- })
350
- })
351
-
352
- function assertReportEquals(options: analyze.Options, type: AllType, subject: unknown, report: string) {
353
- expect(getPlainAnalysisReport(analyze(options, type, subject))).toEqual(report)
354
- }