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