@ghostry/fabricator 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/esm/Adapter/Core.js +47 -0
  4. package/dist/esm/Adapter/Types.js +1 -0
  5. package/dist/esm/Bound.js +81 -0
  6. package/dist/esm/Distribution/index.js +200 -0
  7. package/dist/esm/Enumeration/Enumerate.js +103 -0
  8. package/dist/esm/Enumeration/Plan.js +286 -0
  9. package/dist/esm/Enumeration/Types.js +1 -0
  10. package/dist/esm/Error/index.js +201 -0
  11. package/dist/esm/Fabricator/Constructor.js +328 -0
  12. package/dist/esm/Fabricator/Types.js +1 -0
  13. package/dist/esm/Instance/Core.js +119 -0
  14. package/dist/esm/Instance/Types.js +1 -0
  15. package/dist/esm/Primitive/always/Fabricator.js +13 -0
  16. package/dist/esm/Primitive/always/Registry.js +11 -0
  17. package/dist/esm/Primitive/always/Schema.js +10 -0
  18. package/dist/esm/Primitive/always/Types.js +1 -0
  19. package/dist/esm/Primitive/always/index.js +5 -0
  20. package/dist/esm/Primitive/array/Fabricator.js +45 -0
  21. package/dist/esm/Primitive/array/Registry.js +26 -0
  22. package/dist/esm/Primitive/array/Schema.js +17 -0
  23. package/dist/esm/Primitive/array/Types.js +1 -0
  24. package/dist/esm/Primitive/array/index.js +5 -0
  25. package/dist/esm/Primitive/bigint/Fabricator.js +54 -0
  26. package/dist/esm/Primitive/bigint/Registry.js +31 -0
  27. package/dist/esm/Primitive/bigint/Schema.js +17 -0
  28. package/dist/esm/Primitive/bigint/Types.js +1 -0
  29. package/dist/esm/Primitive/bigint/index.js +5 -0
  30. package/dist/esm/Primitive/boolean/Fabricator.js +44 -0
  31. package/dist/esm/Primitive/boolean/Outcomes.js +5 -0
  32. package/dist/esm/Primitive/boolean/Registry.js +11 -0
  33. package/dist/esm/Primitive/boolean/Schema.js +33 -0
  34. package/dist/esm/Primitive/boolean/Types.js +1 -0
  35. package/dist/esm/Primitive/boolean/index.js +6 -0
  36. package/dist/esm/Primitive/choice/Fabricator.js +37 -0
  37. package/dist/esm/Primitive/choice/Registry.js +38 -0
  38. package/dist/esm/Primitive/choice/Schema.js +17 -0
  39. package/dist/esm/Primitive/choice/Types.js +1 -0
  40. package/dist/esm/Primitive/choice/index.js +5 -0
  41. package/dist/esm/Primitive/date/Fabricator.js +86 -0
  42. package/dist/esm/Primitive/date/Registry.js +61 -0
  43. package/dist/esm/Primitive/date/Schema.js +17 -0
  44. package/dist/esm/Primitive/date/Types.js +1 -0
  45. package/dist/esm/Primitive/date/index.js +5 -0
  46. package/dist/esm/Primitive/enum/Fabricator.js +33 -0
  47. package/dist/esm/Primitive/enum/Registry.js +33 -0
  48. package/dist/esm/Primitive/enum/Schema.js +17 -0
  49. package/dist/esm/Primitive/enum/Types.js +1 -0
  50. package/dist/esm/Primitive/enum/index.js +5 -0
  51. package/dist/esm/Primitive/index.js +24 -0
  52. package/dist/esm/Primitive/namespace.js +21 -0
  53. package/dist/esm/Primitive/null/Fabricator.js +14 -0
  54. package/dist/esm/Primitive/null/Registry.js +8 -0
  55. package/dist/esm/Primitive/null/Schema.js +10 -0
  56. package/dist/esm/Primitive/null/Types.js +1 -0
  57. package/dist/esm/Primitive/null/index.js +5 -0
  58. package/dist/esm/Primitive/nullable/Fabricator.js +58 -0
  59. package/dist/esm/Primitive/nullable/Outcomes.js +5 -0
  60. package/dist/esm/Primitive/nullable/Registry.js +13 -0
  61. package/dist/esm/Primitive/nullable/Schema.js +36 -0
  62. package/dist/esm/Primitive/nullable/Types.js +1 -0
  63. package/dist/esm/Primitive/nullable/index.js +6 -0
  64. package/dist/esm/Primitive/nullish/Fabricator.js +64 -0
  65. package/dist/esm/Primitive/nullish/Outcomes.js +6 -0
  66. package/dist/esm/Primitive/nullish/Registry.js +13 -0
  67. package/dist/esm/Primitive/nullish/Schema.js +36 -0
  68. package/dist/esm/Primitive/nullish/Types.js +1 -0
  69. package/dist/esm/Primitive/nullish/index.js +6 -0
  70. package/dist/esm/Primitive/number/Fabricator.js +73 -0
  71. package/dist/esm/Primitive/number/Registry.js +59 -0
  72. package/dist/esm/Primitive/number/Schema.js +18 -0
  73. package/dist/esm/Primitive/number/Types.js +1 -0
  74. package/dist/esm/Primitive/number/defaults.js +21 -0
  75. package/dist/esm/Primitive/number/index.js +5 -0
  76. package/dist/esm/Primitive/object/Fabricator.js +77 -0
  77. package/dist/esm/Primitive/object/Registry.js +146 -0
  78. package/dist/esm/Primitive/object/Schema.js +18 -0
  79. package/dist/esm/Primitive/object/Types.js +1 -0
  80. package/dist/esm/Primitive/object/compute/Fabricator.js +24 -0
  81. package/dist/esm/Primitive/object/compute/Registry.js +15 -0
  82. package/dist/esm/Primitive/object/compute/Schema.js +13 -0
  83. package/dist/esm/Primitive/object/compute/Types.js +1 -0
  84. package/dist/esm/Primitive/object/compute/index.js +5 -0
  85. package/dist/esm/Primitive/object/index.js +9 -0
  86. package/dist/esm/Primitive/object/omittable/Fabricator.js +57 -0
  87. package/dist/esm/Primitive/object/omittable/Outcomes.js +5 -0
  88. package/dist/esm/Primitive/object/omittable/Registry.js +13 -0
  89. package/dist/esm/Primitive/object/omittable/Schema.js +36 -0
  90. package/dist/esm/Primitive/object/omittable/Types.js +1 -0
  91. package/dist/esm/Primitive/object/omittable/index.js +6 -0
  92. package/dist/esm/Primitive/object/optional/Fabricator.js +55 -0
  93. package/dist/esm/Primitive/object/optional/Outcomes.js +6 -0
  94. package/dist/esm/Primitive/object/optional/Registry.js +13 -0
  95. package/dist/esm/Primitive/object/optional/Schema.js +36 -0
  96. package/dist/esm/Primitive/object/optional/Types.js +1 -0
  97. package/dist/esm/Primitive/object/optional/index.js +6 -0
  98. package/dist/esm/Primitive/opaque/Fabricator.js +19 -0
  99. package/dist/esm/Primitive/opaque/Registry.js +11 -0
  100. package/dist/esm/Primitive/opaque/Schema.js +10 -0
  101. package/dist/esm/Primitive/opaque/Types.js +1 -0
  102. package/dist/esm/Primitive/opaque/index.js +5 -0
  103. package/dist/esm/Primitive/record/Fabricator.js +55 -0
  104. package/dist/esm/Primitive/record/Registry.js +26 -0
  105. package/dist/esm/Primitive/record/Schema.js +17 -0
  106. package/dist/esm/Primitive/record/Types.js +1 -0
  107. package/dist/esm/Primitive/record/index.js +5 -0
  108. package/dist/esm/Primitive/recursive/Fabricator.js +33 -0
  109. package/dist/esm/Primitive/recursive/Registry.js +20 -0
  110. package/dist/esm/Primitive/recursive/Schema.js +10 -0
  111. package/dist/esm/Primitive/recursive/Terminate.js +236 -0
  112. package/dist/esm/Primitive/recursive/Types.js +1 -0
  113. package/dist/esm/Primitive/recursive/index.js +7 -0
  114. package/dist/esm/Primitive/recursive/self/Fabricator.js +15 -0
  115. package/dist/esm/Primitive/recursive/self/Registry.js +9 -0
  116. package/dist/esm/Primitive/recursive/self/Schema.js +10 -0
  117. package/dist/esm/Primitive/recursive/self/Types.js +1 -0
  118. package/dist/esm/Primitive/recursive/self/index.js +5 -0
  119. package/dist/esm/Primitive/string/Constants.js +73 -0
  120. package/dist/esm/Primitive/string/Fabricator.js +109 -0
  121. package/dist/esm/Primitive/string/Registry.js +25 -0
  122. package/dist/esm/Primitive/string/Schema.js +18 -0
  123. package/dist/esm/Primitive/string/Types.js +1 -0
  124. package/dist/esm/Primitive/string/index.js +6 -0
  125. package/dist/esm/Primitive/symbol/Fabricator.js +33 -0
  126. package/dist/esm/Primitive/symbol/Registry.js +17 -0
  127. package/dist/esm/Primitive/symbol/Schema.js +17 -0
  128. package/dist/esm/Primitive/symbol/Types.js +1 -0
  129. package/dist/esm/Primitive/symbol/index.js +5 -0
  130. package/dist/esm/Primitive/tuple/Fabricator.js +33 -0
  131. package/dist/esm/Primitive/tuple/Registry.js +13 -0
  132. package/dist/esm/Primitive/tuple/Schema.js +17 -0
  133. package/dist/esm/Primitive/tuple/Types.js +1 -0
  134. package/dist/esm/Primitive/tuple/index.js +5 -0
  135. package/dist/esm/Primitive/undefinable/Fabricator.js +58 -0
  136. package/dist/esm/Primitive/undefinable/Outcomes.js +5 -0
  137. package/dist/esm/Primitive/undefinable/Registry.js +13 -0
  138. package/dist/esm/Primitive/undefinable/Schema.js +36 -0
  139. package/dist/esm/Primitive/undefinable/Types.js +1 -0
  140. package/dist/esm/Primitive/undefinable/index.js +6 -0
  141. package/dist/esm/Primitive/undefined/Fabricator.js +16 -0
  142. package/dist/esm/Primitive/undefined/Registry.js +8 -0
  143. package/dist/esm/Primitive/undefined/Schema.js +10 -0
  144. package/dist/esm/Primitive/undefined/Types.js +1 -0
  145. package/dist/esm/Primitive/undefined/index.js +5 -0
  146. package/dist/esm/Random/CallSite.js +56 -0
  147. package/dist/esm/Random/Generator/sfc32.js +16 -0
  148. package/dist/esm/Random/Types.js +1 -0
  149. package/dist/esm/Random/index.js +151 -0
  150. package/dist/esm/Schema/Core.js +68 -0
  151. package/dist/esm/Schema/Registry.js +17 -0
  152. package/dist/esm/Schema/Types.js +1 -0
  153. package/dist/esm/Types.js +11 -0
  154. package/dist/esm/Utility/Core.js +36 -0
  155. package/dist/esm/Utility/DeepMerge.js +18 -0
  156. package/dist/esm/Utility/Digest.js +28 -0
  157. package/dist/esm/Utility/ShallowMerge.js +13 -0
  158. package/dist/esm/Utility/Types.js +1 -0
  159. package/dist/esm/index.js +11 -0
  160. package/dist/esm/internal.js +5 -0
  161. package/dist/types/Adapter/Core.d.ts +64 -0
  162. package/dist/types/Adapter/Types.d.ts +145 -0
  163. package/dist/types/Bound.d.ts +68 -0
  164. package/dist/types/Distribution/index.d.ts +157 -0
  165. package/dist/types/Enumeration/Enumerate.d.ts +35 -0
  166. package/dist/types/Enumeration/Plan.d.ts +44 -0
  167. package/dist/types/Enumeration/Types.d.ts +86 -0
  168. package/dist/types/Error/index.d.ts +541 -0
  169. package/dist/types/Fabricator/Constructor.d.ts +43 -0
  170. package/dist/types/Fabricator/Types.d.ts +150 -0
  171. package/dist/types/Instance/Core.d.ts +98 -0
  172. package/dist/types/Instance/Types.d.ts +167 -0
  173. package/dist/types/Primitive/always/Fabricator.d.ts +19 -0
  174. package/dist/types/Primitive/always/Registry.d.ts +3 -0
  175. package/dist/types/Primitive/always/Schema.d.ts +19 -0
  176. package/dist/types/Primitive/always/Types.d.ts +23 -0
  177. package/dist/types/Primitive/always/index.d.ts +5 -0
  178. package/dist/types/Primitive/array/Fabricator.d.ts +22 -0
  179. package/dist/types/Primitive/array/Registry.d.ts +18 -0
  180. package/dist/types/Primitive/array/Schema.d.ts +23 -0
  181. package/dist/types/Primitive/array/Types.d.ts +44 -0
  182. package/dist/types/Primitive/array/index.d.ts +5 -0
  183. package/dist/types/Primitive/bigint/Fabricator.d.ts +19 -0
  184. package/dist/types/Primitive/bigint/Registry.d.ts +19 -0
  185. package/dist/types/Primitive/bigint/Schema.d.ts +27 -0
  186. package/dist/types/Primitive/bigint/Types.d.ts +33 -0
  187. package/dist/types/Primitive/bigint/index.d.ts +5 -0
  188. package/dist/types/Primitive/boolean/Fabricator.d.ts +19 -0
  189. package/dist/types/Primitive/boolean/Outcomes.d.ts +12 -0
  190. package/dist/types/Primitive/boolean/Registry.d.ts +14 -0
  191. package/dist/types/Primitive/boolean/Schema.d.ts +28 -0
  192. package/dist/types/Primitive/boolean/Types.d.ts +26 -0
  193. package/dist/types/Primitive/boolean/index.d.ts +6 -0
  194. package/dist/types/Primitive/choice/Fabricator.d.ts +32 -0
  195. package/dist/types/Primitive/choice/Registry.d.ts +38 -0
  196. package/dist/types/Primitive/choice/Schema.d.ts +24 -0
  197. package/dist/types/Primitive/choice/Types.d.ts +35 -0
  198. package/dist/types/Primitive/choice/index.d.ts +5 -0
  199. package/dist/types/Primitive/date/Fabricator.d.ts +19 -0
  200. package/dist/types/Primitive/date/Registry.d.ts +82 -0
  201. package/dist/types/Primitive/date/Schema.d.ts +28 -0
  202. package/dist/types/Primitive/date/Types.d.ts +34 -0
  203. package/dist/types/Primitive/date/index.d.ts +5 -0
  204. package/dist/types/Primitive/enum/Fabricator.d.ts +19 -0
  205. package/dist/types/Primitive/enum/Registry.d.ts +39 -0
  206. package/dist/types/Primitive/enum/Schema.d.ts +23 -0
  207. package/dist/types/Primitive/enum/Types.d.ts +44 -0
  208. package/dist/types/Primitive/enum/index.d.ts +5 -0
  209. package/dist/types/Primitive/index.d.ts +28 -0
  210. package/dist/types/Primitive/namespace.d.ts +38 -0
  211. package/dist/types/Primitive/null/Fabricator.d.ts +19 -0
  212. package/dist/types/Primitive/null/Registry.d.ts +3 -0
  213. package/dist/types/Primitive/null/Schema.d.ts +16 -0
  214. package/dist/types/Primitive/null/Types.d.ts +15 -0
  215. package/dist/types/Primitive/null/index.d.ts +5 -0
  216. package/dist/types/Primitive/nullable/Fabricator.d.ts +31 -0
  217. package/dist/types/Primitive/nullable/Outcomes.d.ts +9 -0
  218. package/dist/types/Primitive/nullable/Registry.d.ts +3 -0
  219. package/dist/types/Primitive/nullable/Schema.d.ts +36 -0
  220. package/dist/types/Primitive/nullable/Types.d.ts +48 -0
  221. package/dist/types/Primitive/nullable/index.d.ts +6 -0
  222. package/dist/types/Primitive/nullish/Fabricator.d.ts +36 -0
  223. package/dist/types/Primitive/nullish/Outcomes.d.ts +9 -0
  224. package/dist/types/Primitive/nullish/Registry.d.ts +3 -0
  225. package/dist/types/Primitive/nullish/Schema.d.ts +36 -0
  226. package/dist/types/Primitive/nullish/Types.d.ts +58 -0
  227. package/dist/types/Primitive/nullish/index.d.ts +6 -0
  228. package/dist/types/Primitive/number/Fabricator.d.ts +19 -0
  229. package/dist/types/Primitive/number/Registry.d.ts +52 -0
  230. package/dist/types/Primitive/number/Schema.d.ts +32 -0
  231. package/dist/types/Primitive/number/Types.d.ts +56 -0
  232. package/dist/types/Primitive/number/defaults.d.ts +18 -0
  233. package/dist/types/Primitive/number/index.d.ts +5 -0
  234. package/dist/types/Primitive/object/Fabricator.d.ts +56 -0
  235. package/dist/types/Primitive/object/Registry.d.ts +23 -0
  236. package/dist/types/Primitive/object/Schema.d.ts +41 -0
  237. package/dist/types/Primitive/object/Types.d.ts +85 -0
  238. package/dist/types/Primitive/object/compute/Fabricator.d.ts +31 -0
  239. package/dist/types/Primitive/object/compute/Registry.d.ts +4 -0
  240. package/dist/types/Primitive/object/compute/Schema.d.ts +21 -0
  241. package/dist/types/Primitive/object/compute/Types.d.ts +56 -0
  242. package/dist/types/Primitive/object/compute/index.d.ts +5 -0
  243. package/dist/types/Primitive/object/index.d.ts +8 -0
  244. package/dist/types/Primitive/object/omittable/Fabricator.d.ts +37 -0
  245. package/dist/types/Primitive/object/omittable/Outcomes.d.ts +9 -0
  246. package/dist/types/Primitive/object/omittable/Registry.d.ts +3 -0
  247. package/dist/types/Primitive/object/omittable/Schema.d.ts +32 -0
  248. package/dist/types/Primitive/object/omittable/Types.d.ts +57 -0
  249. package/dist/types/Primitive/object/omittable/index.d.ts +6 -0
  250. package/dist/types/Primitive/object/optional/Fabricator.d.ts +45 -0
  251. package/dist/types/Primitive/object/optional/Outcomes.d.ts +9 -0
  252. package/dist/types/Primitive/object/optional/Registry.d.ts +3 -0
  253. package/dist/types/Primitive/object/optional/Schema.d.ts +32 -0
  254. package/dist/types/Primitive/object/optional/Types.d.ts +72 -0
  255. package/dist/types/Primitive/object/optional/index.d.ts +6 -0
  256. package/dist/types/Primitive/opaque/Fabricator.d.ts +19 -0
  257. package/dist/types/Primitive/opaque/Registry.d.ts +12 -0
  258. package/dist/types/Primitive/opaque/Schema.d.ts +22 -0
  259. package/dist/types/Primitive/opaque/Types.d.ts +18 -0
  260. package/dist/types/Primitive/opaque/index.d.ts +5 -0
  261. package/dist/types/Primitive/record/Fabricator.d.ts +25 -0
  262. package/dist/types/Primitive/record/Registry.d.ts +17 -0
  263. package/dist/types/Primitive/record/Schema.d.ts +27 -0
  264. package/dist/types/Primitive/record/Types.d.ts +85 -0
  265. package/dist/types/Primitive/record/index.d.ts +5 -0
  266. package/dist/types/Primitive/recursive/Fabricator.d.ts +47 -0
  267. package/dist/types/Primitive/recursive/Registry.d.ts +22 -0
  268. package/dist/types/Primitive/recursive/Schema.d.ts +21 -0
  269. package/dist/types/Primitive/recursive/Terminate.d.ts +20 -0
  270. package/dist/types/Primitive/recursive/Types.d.ts +82 -0
  271. package/dist/types/Primitive/recursive/index.d.ts +6 -0
  272. package/dist/types/Primitive/recursive/self/Fabricator.d.ts +29 -0
  273. package/dist/types/Primitive/recursive/self/Registry.d.ts +7 -0
  274. package/dist/types/Primitive/recursive/self/Schema.d.ts +20 -0
  275. package/dist/types/Primitive/recursive/self/Types.d.ts +28 -0
  276. package/dist/types/Primitive/recursive/self/index.d.ts +5 -0
  277. package/dist/types/Primitive/string/Constants.d.ts +58 -0
  278. package/dist/types/Primitive/string/Fabricator.d.ts +24 -0
  279. package/dist/types/Primitive/string/Registry.d.ts +44 -0
  280. package/dist/types/Primitive/string/Schema.d.ts +65 -0
  281. package/dist/types/Primitive/string/Types.d.ts +77 -0
  282. package/dist/types/Primitive/string/index.d.ts +6 -0
  283. package/dist/types/Primitive/symbol/Fabricator.d.ts +24 -0
  284. package/dist/types/Primitive/symbol/Registry.d.ts +16 -0
  285. package/dist/types/Primitive/symbol/Schema.d.ts +24 -0
  286. package/dist/types/Primitive/symbol/Types.d.ts +19 -0
  287. package/dist/types/Primitive/symbol/index.d.ts +5 -0
  288. package/dist/types/Primitive/tuple/Fabricator.d.ts +37 -0
  289. package/dist/types/Primitive/tuple/Registry.d.ts +3 -0
  290. package/dist/types/Primitive/tuple/Schema.d.ts +24 -0
  291. package/dist/types/Primitive/tuple/Types.d.ts +53 -0
  292. package/dist/types/Primitive/tuple/index.d.ts +5 -0
  293. package/dist/types/Primitive/undefinable/Fabricator.d.ts +31 -0
  294. package/dist/types/Primitive/undefinable/Outcomes.d.ts +9 -0
  295. package/dist/types/Primitive/undefinable/Registry.d.ts +3 -0
  296. package/dist/types/Primitive/undefinable/Schema.d.ts +36 -0
  297. package/dist/types/Primitive/undefinable/Types.d.ts +48 -0
  298. package/dist/types/Primitive/undefinable/index.d.ts +6 -0
  299. package/dist/types/Primitive/undefined/Fabricator.d.ts +19 -0
  300. package/dist/types/Primitive/undefined/Registry.d.ts +3 -0
  301. package/dist/types/Primitive/undefined/Schema.d.ts +16 -0
  302. package/dist/types/Primitive/undefined/Types.d.ts +15 -0
  303. package/dist/types/Primitive/undefined/index.d.ts +5 -0
  304. package/dist/types/Random/CallSite.d.ts +59 -0
  305. package/dist/types/Random/Generator/sfc32.d.ts +10 -0
  306. package/dist/types/Random/Types.d.ts +384 -0
  307. package/dist/types/Random/index.d.ts +107 -0
  308. package/dist/types/Schema/Core.d.ts +44 -0
  309. package/dist/types/Schema/Registry.d.ts +20 -0
  310. package/dist/types/Schema/Types.d.ts +70 -0
  311. package/dist/types/Types.d.ts +78 -0
  312. package/dist/types/Utility/Core.d.ts +35 -0
  313. package/dist/types/Utility/DeepMerge.d.ts +14 -0
  314. package/dist/types/Utility/Digest.d.ts +9 -0
  315. package/dist/types/Utility/ShallowMerge.d.ts +6 -0
  316. package/dist/types/Utility/Types.d.ts +4 -0
  317. package/dist/types/index.d.ts +186 -0
  318. package/dist/types/internal.d.ts +64 -0
  319. package/package.json +53 -0
@@ -0,0 +1,328 @@
1
+ import { FabricatorError } from "../Error/index.js";
2
+ import { Primitive } from "../Primitive/index.js";
3
+ import { isLayered, normalizeSeed } from "../Random/index.js";
4
+ import { toSchema } from "../Schema/Core.js";
5
+ import { Adaptation, Fixed, Kind, Layer, Meta } from "../Types.js";
6
+ import { inline } from "../Utility/Core.js";
7
+ function Constructor(source, stack) {
8
+ function make(schema, path, context) {
9
+ schema = toSchema(schema);
10
+ const kind = schema[Kind];
11
+ const common = {
12
+ algorithm: context.algorithm,
13
+ trace: context.toTrace(path, kind)
14
+ };
15
+ switch(kind){
16
+ case "number":
17
+ {
18
+ const s = schema;
19
+ return Primitive.number.Fabricator({
20
+ ...common,
21
+ schema: s
22
+ });
23
+ }
24
+ case "date":
25
+ {
26
+ const s = schema;
27
+ return Primitive.date.Fabricator({
28
+ ...common,
29
+ schema: s
30
+ });
31
+ }
32
+ case "boolean":
33
+ {
34
+ const s = schema;
35
+ return Primitive.boolean.Fabricator({
36
+ ...common,
37
+ schema: s
38
+ });
39
+ }
40
+ case "enum":
41
+ {
42
+ const s = schema;
43
+ return Primitive["enum"].Fabricator({
44
+ ...common,
45
+ schema: s
46
+ });
47
+ }
48
+ case "choice":
49
+ {
50
+ const s = schema;
51
+ const options = s[Meta].items.map(([weight, item], i)=>[
52
+ weight,
53
+ make(item, [
54
+ ...path,
55
+ i.toString(10)
56
+ ], context)
57
+ ]);
58
+ return Primitive.choice.Fabricator({
59
+ ...common,
60
+ schema: s
61
+ }, options);
62
+ }
63
+ case "always":
64
+ {
65
+ const s = schema;
66
+ return Primitive.always.Fabricator({
67
+ ...common,
68
+ schema: s
69
+ });
70
+ }
71
+ case "opaque":
72
+ {
73
+ const s = schema;
74
+ return Primitive.opaque.Fabricator({
75
+ ...common,
76
+ schema: s
77
+ });
78
+ }
79
+ case "symbol":
80
+ {
81
+ const s = schema;
82
+ return Primitive.symbol.Fabricator({
83
+ ...common,
84
+ schema: s
85
+ });
86
+ }
87
+ case "undefined":
88
+ {
89
+ const s = schema;
90
+ return Primitive.undefined.Fabricator({
91
+ ...common,
92
+ schema: s
93
+ });
94
+ }
95
+ case "undefinable":
96
+ {
97
+ const s = schema;
98
+ const inner = make(s[Meta].definition, [
99
+ ...path,
100
+ "definition"
101
+ ], context);
102
+ return Primitive.undefinable.Fabricator({
103
+ ...common,
104
+ schema: s
105
+ }, inner);
106
+ }
107
+ case "null":
108
+ {
109
+ const s = schema;
110
+ return Primitive["null"].Fabricator({
111
+ ...common,
112
+ schema: s
113
+ });
114
+ }
115
+ case "nullable":
116
+ {
117
+ const s = schema;
118
+ const inner = make(s[Meta].definition, [
119
+ ...path,
120
+ "definition"
121
+ ], context);
122
+ return Primitive.nullable.Fabricator({
123
+ ...common,
124
+ schema: s
125
+ }, inner);
126
+ }
127
+ case "nullish":
128
+ {
129
+ const s = schema;
130
+ const inner = make(s[Meta].definition, [
131
+ ...path,
132
+ "definition"
133
+ ], context);
134
+ return Primitive.nullish.Fabricator({
135
+ ...common,
136
+ schema: s
137
+ }, inner);
138
+ }
139
+ case "string":
140
+ {
141
+ const s = schema;
142
+ return Primitive.string.Fabricator({
143
+ ...common,
144
+ schema: s
145
+ });
146
+ }
147
+ case "bigint":
148
+ {
149
+ const s = schema;
150
+ return Primitive.bigint.Fabricator({
151
+ ...common,
152
+ schema: s
153
+ });
154
+ }
155
+ case "array":
156
+ {
157
+ const s = schema;
158
+ const element = make(s[Meta].definition, [
159
+ ...path,
160
+ "element"
161
+ ], context);
162
+ return Primitive.array.Fabricator({
163
+ ...common,
164
+ schema: s
165
+ }, element);
166
+ }
167
+ case "record":
168
+ {
169
+ const s = schema;
170
+ const key = make(s[Meta].key, [
171
+ ...path,
172
+ "key"
173
+ ], context);
174
+ const value = make(s[Meta].value, [
175
+ ...path,
176
+ "value"
177
+ ], context);
178
+ return Primitive.record.Fabricator({
179
+ ...common,
180
+ schema: s
181
+ }, key, value);
182
+ }
183
+ case "recursive":
184
+ {
185
+ const s = schema;
186
+ return Primitive.recursive.Fabricator({
187
+ ...common,
188
+ schema: s
189
+ }, source.fork, make);
190
+ }
191
+ case "recursive.self":
192
+ {
193
+ const s = schema;
194
+ return Primitive.recursive.self.Fabricator({
195
+ ...common,
196
+ schema: s
197
+ }, context.self);
198
+ }
199
+ case "tuple":
200
+ {
201
+ const s = schema;
202
+ const elements = s[Meta].items.map((item, i)=>make(item, [
203
+ ...path,
204
+ i.toString(10)
205
+ ], context));
206
+ return Primitive.tuple.Fabricator({
207
+ ...common,
208
+ schema: s
209
+ }, elements);
210
+ }
211
+ case "object.compute":
212
+ {
213
+ const s = schema;
214
+ return Primitive.object.compute.Fabricator({
215
+ ...common,
216
+ schema: s
217
+ });
218
+ }
219
+ case "object.omittable":
220
+ {
221
+ const s = schema;
222
+ const inner = make(s[Meta].definition, [
223
+ ...path,
224
+ "definition"
225
+ ], context);
226
+ return Primitive.object.omittable.Fabricator({
227
+ ...common,
228
+ schema: s
229
+ }, inner);
230
+ }
231
+ case "object.optional":
232
+ {
233
+ const s = schema;
234
+ const inner = make(s[Meta].definition, [
235
+ ...path,
236
+ "definition"
237
+ ], context);
238
+ return Primitive.object.optional.Fabricator({
239
+ ...common,
240
+ schema: s
241
+ }, inner);
242
+ }
243
+ case "object":
244
+ {
245
+ const s = schema;
246
+ const definition = s[Meta].definition;
247
+ const fields = {};
248
+ for(const key in definition){
249
+ const fieldSchema = definition[key];
250
+ const fieldPath = [
251
+ ...path,
252
+ key
253
+ ];
254
+ fields[key] = inline(()=>{
255
+ if (Fixed in fieldSchema) {
256
+ const built = make(fieldSchema, fieldPath, context);
257
+ const value = fieldSchema[Fixed];
258
+ if (Primitive.object.compute.isObjectComputeFabricator(built)) return {
259
+ ...built,
260
+ [Kind]: built[Meta].source[Kind],
261
+ fabricate: ()=>value
262
+ };
263
+ return {
264
+ ...built,
265
+ fabricate: ()=>value
266
+ };
267
+ }
268
+ return make(fieldSchema, fieldPath, context);
269
+ });
270
+ }
271
+ return Primitive.object.Fabricator({
272
+ ...common,
273
+ schema: Primitive.object.rehydrate(s)
274
+ }, fields);
275
+ }
276
+ default:
277
+ throw new FabricatorError.UnknownKindError(String(kind), "construction");
278
+ }
279
+ }
280
+ function construct(schema, options = {}) {
281
+ var _options_path;
282
+ if ("string" == typeof options.kind && options.kind !== schema[Kind]) throw new FabricatorError.TraceKindMismatchError(schema[Kind], options.kind);
283
+ const context = toConstructionContext(source, options, stack);
284
+ const made = make(schema, null != (_options_path = options.path) ? _options_path : [], context);
285
+ const adaptations = schema[Adaptation];
286
+ return adaptations ? {
287
+ ...made,
288
+ [Adaptation]: adaptations
289
+ } : made;
290
+ }
291
+ return construct;
292
+ }
293
+ function toConstructionContext(source, options, stack) {
294
+ const { source: rooted, root: construction } = resolveScope(source, options, stack);
295
+ return {
296
+ toTrace: (path, kind)=>({
297
+ ...construction,
298
+ path,
299
+ kind
300
+ }),
301
+ algorithm: rooted.algorithm
302
+ };
303
+ }
304
+ function resolveScope(source, options, stack) {
305
+ var _ref;
306
+ const frame = stack.current();
307
+ const base = null != (_ref = null == frame ? void 0 : frame.source) ? _ref : source;
308
+ const pins = {
309
+ clock: options.clock,
310
+ root: options.root,
311
+ file: options.file,
312
+ ordinal: options.ordinal
313
+ };
314
+ if (!options.seed) return {
315
+ source: base,
316
+ root: base.toRoot("attributed", pins)
317
+ };
318
+ const seed = isLayered(options.seed) ? [
319
+ ...base.seed,
320
+ ...normalizeSeed(options.seed[Layer])
321
+ ] : options.seed;
322
+ const forked = base.fork(seed);
323
+ return {
324
+ source: forked,
325
+ root: forked.toRoot("unattributed", pins)
326
+ };
327
+ }
328
+ export { Constructor };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,119 @@
1
+ import { enumerables } from "../Enumeration/Enumerate.js";
2
+ import { FabricatorError } from "../Error/index.js";
3
+ import { Constructor } from "../Fabricator/Constructor.js";
4
+ import { defaultAlgorithm, deriveClock, isLayered, normalizeSeed, resolveAttribution, toRandomSource } from "../Random/index.js";
5
+ import { registry } from "../Schema/Registry.js";
6
+ import { Layer } from "../Types.js";
7
+ import { inline } from "../Utility/Core.js";
8
+ const DEFAULT_COMBINATORIAL_LIMIT = 1024;
9
+ function resolveCombinatorialLimit(limit) {
10
+ if (void 0 === limit) return DEFAULT_COMBINATORIAL_LIMIT;
11
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new FabricatorError.InvalidCombinatorialLimitError(limit);
12
+ return limit;
13
+ }
14
+ function resolveClock(config) {
15
+ return "number" == typeof config.clock ? config.clock : deriveClock(config.algorithm, normalizeSeed(config.seed));
16
+ }
17
+ function overlay(base, over) {
18
+ var _ref, _over_algorithm, _base_attribution, _ref1, _over_types, _over_limits;
19
+ var _this;
20
+ const seed = inline(()=>{
21
+ if (void 0 === over.seed) return normalizeSeed(base.seed);
22
+ if (isLayered(over.seed)) return [
23
+ ...normalizeSeed(base.seed),
24
+ ...normalizeSeed(over.seed[Layer])
25
+ ];
26
+ return normalizeSeed(over.seed);
27
+ });
28
+ const clock = inline(()=>{
29
+ var _base_clock;
30
+ if ("seeded" === over.clock) return "seeded";
31
+ if (void 0 !== over.clock) return over.clock.valueOf();
32
+ return null != (_base_clock = base.clock) ? _base_clock : Date.now();
33
+ });
34
+ return {
35
+ seed,
36
+ clock,
37
+ algorithm: null != (_ref = null != (_over_algorithm = over.algorithm) ? _over_algorithm : base.algorithm) ? _ref : defaultAlgorithm,
38
+ attribution: over.attribution ? resolveAttribution(over.attribution) : null != (_base_attribution = base.attribution) ? _base_attribution : resolveAttribution(void 0),
39
+ types: null != (_ref1 = null != (_over_types = over.types) ? _over_types : base.types) ? _ref1 : registry,
40
+ limits: {
41
+ combinatorial: resolveCombinatorialLimit(null == (_this = null != (_over_limits = over.limits) ? _over_limits : base.limits) ? void 0 : _this.combinatorial)
42
+ }
43
+ };
44
+ }
45
+ function toStack() {
46
+ const frames = [];
47
+ return {
48
+ current: ()=>frames[frames.length - 1],
49
+ enter: (frame, block)=>{
50
+ frames.push(frame);
51
+ try {
52
+ return block();
53
+ } finally{
54
+ frames.pop();
55
+ }
56
+ }
57
+ };
58
+ }
59
+ function instantiate(config, stack) {
60
+ const source = toRandomSource({
61
+ seed: config.seed,
62
+ algorithm: config.algorithm,
63
+ attribution: config.attribution,
64
+ clock: resolveClock(config)
65
+ });
66
+ const Fabricator = Constructor(source, stack);
67
+ const { combinatorial, coverage } = enumerables(source, config.limits, stack);
68
+ function fork(forkOverlay = {}) {
69
+ return instantiate(overlay(config, forkOverlay), stack).instance;
70
+ }
71
+ function wrap(wrapOverlay, block) {
72
+ var _ref;
73
+ var _stack_current;
74
+ const base = null != (_ref = null == (_stack_current = stack.current()) ? void 0 : _stack_current.config) ? _ref : config;
75
+ const scopedConfig = overlay(base, wrapOverlay);
76
+ const scoped = instantiate(scopedConfig, stack);
77
+ return stack.enter({
78
+ config: scopedConfig,
79
+ source: scoped.source
80
+ }, ()=>block(scoped.instance));
81
+ }
82
+ const context = {
83
+ get seed () {
84
+ var _ref;
85
+ var _stack_current;
86
+ return normalizeSeed((null != (_ref = null == (_stack_current = stack.current()) ? void 0 : _stack_current.config) ? _ref : config).seed);
87
+ },
88
+ get algorithm () {
89
+ var _ref1;
90
+ var _stack_current1;
91
+ return (null != (_ref1 = null == (_stack_current1 = stack.current()) ? void 0 : _stack_current1.config) ? _ref1 : config).algorithm;
92
+ },
93
+ get attribution () {
94
+ var _ref2;
95
+ var _stack_current2;
96
+ return (null != (_ref2 = null == (_stack_current2 = stack.current()) ? void 0 : _stack_current2.config) ? _ref2 : config).attribution;
97
+ },
98
+ get clock () {
99
+ var _ref3;
100
+ var _stack_current3;
101
+ return resolveClock(null != (_ref3 = null == (_stack_current3 = stack.current()) ? void 0 : _stack_current3.config) ? _ref3 : config);
102
+ }
103
+ };
104
+ const instance = {
105
+ T: config.types,
106
+ Fabricator,
107
+ combinatorial,
108
+ coverage,
109
+ seed: source.seed,
110
+ fork,
111
+ wrap,
112
+ context
113
+ };
114
+ return {
115
+ instance,
116
+ source
117
+ };
118
+ }
119
+ export { DEFAULT_COMBINATORIAL_LIMIT, instantiate, overlay, toStack };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,13 @@
1
+ import { Kind, Meta } from "../../Types.js";
2
+ function Fabricator(context) {
3
+ const { schema, trace } = context;
4
+ const { value } = schema[Meta];
5
+ return {
6
+ [Kind]: "always",
7
+ [Meta]: schema[Meta],
8
+ trace,
9
+ fabricate: ()=>value,
10
+ schema
11
+ };
12
+ }
13
+ export { Fabricator };
@@ -0,0 +1,11 @@
1
+ import { Kind, Meta } from "../../Types.js";
2
+ import { Schema } from "./Schema.js";
3
+ function Registry(value) {
4
+ return Schema({
5
+ [Kind]: "always",
6
+ [Meta]: {
7
+ value
8
+ }
9
+ });
10
+ }
11
+ export default Registry;
@@ -0,0 +1,10 @@
1
+ import { withAdaptations } from "../../Adapter/Core.js";
2
+ import { Kind } from "../../Types.js";
3
+ function Schema(schema) {
4
+ return {
5
+ ...schema,
6
+ [Kind]: "always",
7
+ adapt: (adapter, produce)=>Schema(withAdaptations(schema, adapter, produce))
8
+ };
9
+ }
10
+ export { Schema };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,5 @@
1
+ export * from "./Types.js";
2
+ export * from "./Schema.js";
3
+ export * from "./Fabricator.js";
4
+ export * from "./Registry.js";
5
+ export { default } from "./Registry.js";
@@ -0,0 +1,45 @@
1
+ import { effectiveDiscrete } from "../../Bound.js";
2
+ import { toStreamFromTrace } from "../../Random/index.js";
3
+ import { Children, Kind, Meta } from "../../Types.js";
4
+ import { inline } from "../../Utility/Core.js";
5
+ import { Schema } from "./Schema.js";
6
+ function Fabricator(context, element) {
7
+ const { schema, algorithm, trace } = context;
8
+ const meta = schema[Meta];
9
+ const rehydrated = Schema(schema);
10
+ if (meta.produce) {
11
+ const stream = toStreamFromTrace(algorithm, trace);
12
+ const produce = meta.produce;
13
+ return {
14
+ [Kind]: "array",
15
+ [Meta]: meta,
16
+ trace,
17
+ [Children]: element,
18
+ fabricate: ()=>produce({
19
+ random: stream,
20
+ clock: trace.clock
21
+ }),
22
+ schema: rehydrated
23
+ };
24
+ }
25
+ const stream = toStreamFromTrace(algorithm, trace);
26
+ const whereby = meta.whereby;
27
+ const fabricate = ()=>{
28
+ const length = inline(()=>{
29
+ const { min, max } = effectiveDiscrete(whereby.length.min, whereby.length.max);
30
+ return min + Math.floor(stream.next() * (max - min + 1));
31
+ });
32
+ return Array.from({
33
+ length
34
+ }, ()=>element.fabricate());
35
+ };
36
+ return {
37
+ [Kind]: "array",
38
+ [Meta]: meta,
39
+ trace,
40
+ [Children]: element,
41
+ fabricate,
42
+ schema: rehydrated
43
+ };
44
+ }
45
+ export { Fabricator };
@@ -0,0 +1,26 @@
1
+ import { toLengthRange } from "../../Bound.js";
2
+ import { toSchema } from "../../Schema/Core.js";
3
+ import { Kind, Meta } from "../../Types.js";
4
+ import { Schema } from "./Schema.js";
5
+ function Registry(definition) {
6
+ const normalized = toSchema(definition);
7
+ return {
8
+ whereby: (whereby)=>Schema({
9
+ [Kind]: "array",
10
+ [Meta]: {
11
+ whereby: {
12
+ length: toLengthRange(whereby.length, "T.array.whereby")
13
+ },
14
+ definition: normalized
15
+ }
16
+ }),
17
+ as: (produce)=>Schema({
18
+ [Kind]: "array",
19
+ [Meta]: {
20
+ produce,
21
+ definition: normalized
22
+ }
23
+ })
24
+ };
25
+ }
26
+ export default Registry;
@@ -0,0 +1,17 @@
1
+ import { withAdaptations } from "../../Adapter/Core.js";
2
+ import { Kind, Meta } from "../../Types.js";
3
+ function Schema(schema) {
4
+ return {
5
+ ...schema,
6
+ [Kind]: "array",
7
+ as: (produce)=>Schema({
8
+ ...schema,
9
+ [Meta]: {
10
+ ...schema[Meta],
11
+ produce
12
+ }
13
+ }),
14
+ adapt: (adapter, produce)=>Schema(withAdaptations(schema, adapter, produce))
15
+ };
16
+ }
17
+ export { Schema };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,5 @@
1
+ export * from "./Types.js";
2
+ export * from "./Schema.js";
3
+ export * from "./Fabricator.js";
4
+ export * from "./Registry.js";
5
+ export { default } from "./Registry.js";
@@ -0,0 +1,54 @@
1
+ import { effectiveDiscreteBigint } from "../../Bound.js";
2
+ import { toStreamFromTrace } from "../../Random/index.js";
3
+ import { Kind, Meta } from "../../Types.js";
4
+ import { Schema } from "./Schema.js";
5
+ function Fabricator(context) {
6
+ const { schema, algorithm, trace } = context;
7
+ const meta = schema[Meta];
8
+ const rehydrated = Schema(schema);
9
+ if (meta.produce) {
10
+ const stream = toStreamFromTrace(algorithm, trace);
11
+ const produce = meta.produce;
12
+ return {
13
+ [Kind]: "bigint",
14
+ [Meta]: meta,
15
+ trace,
16
+ fabricate: ()=>produce({
17
+ random: stream,
18
+ clock: trace.clock
19
+ }),
20
+ schema: rehydrated
21
+ };
22
+ }
23
+ const stream = toStreamFromTrace(algorithm, trace);
24
+ const { min, max } = effectiveDiscreteBigint(meta.whereby.min, meta.whereby.max);
25
+ const range = max - min + BigInt(1);
26
+ const byteBits = 8;
27
+ const bitWidth = range.toString(2).length;
28
+ const byteWidth = Math.ceil(bitWidth / byteBits);
29
+ const bitMask = (BigInt(1) << BigInt(bitWidth)) - BigInt(1);
30
+ const fabricate = ()=>{
31
+ const buffer = new Uint8Array(byteWidth);
32
+ const readBufferAsBigInt = ()=>{
33
+ let value = BigInt(0);
34
+ for (const byte of buffer)value = value << BigInt(byteBits) | BigInt(byte);
35
+ return value;
36
+ };
37
+ const sample = ()=>{
38
+ for(let i = 0; i < buffer.length; i++)buffer[i] = Math.floor(256 * stream.next());
39
+ return readBufferAsBigInt() & bitMask;
40
+ };
41
+ while(true){
42
+ const candidate = sample();
43
+ if (candidate < range) return min + candidate;
44
+ }
45
+ };
46
+ return {
47
+ [Kind]: "bigint",
48
+ [Meta]: meta,
49
+ trace,
50
+ fabricate,
51
+ schema: rehydrated
52
+ };
53
+ }
54
+ export { Fabricator };
@@ -0,0 +1,31 @@
1
+ import { assertNonemptyDiscreteBigint, toBound } from "../../Bound.js";
2
+ import { Kind, Meta } from "../../Types.js";
3
+ import { Schema } from "./Schema.js";
4
+ function toWhereby(input) {
5
+ const max = toBound(input.max);
6
+ const min = void 0 === input.min ? {
7
+ value: -max.value,
8
+ exclusive: false
9
+ } : toBound(input.min);
10
+ assertNonemptyDiscreteBigint("T.bigint.whereby", min, max);
11
+ return {
12
+ min,
13
+ max
14
+ };
15
+ }
16
+ const Registry = {
17
+ [Kind]: "bigint",
18
+ whereby: (whereby)=>Schema({
19
+ [Kind]: "bigint",
20
+ [Meta]: {
21
+ whereby: toWhereby(whereby)
22
+ }
23
+ }),
24
+ as: (produce)=>Schema({
25
+ [Kind]: "bigint",
26
+ [Meta]: {
27
+ produce
28
+ }
29
+ })
30
+ };
31
+ export default Registry;