@shapecraft/core 1.0.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 (584) hide show
  1. package/dist/cjs/common/array.d.ts +3 -0
  2. package/dist/cjs/common/array.d.ts.map +1 -0
  3. package/dist/cjs/common/array.js +17 -0
  4. package/dist/cjs/common/array.js.map +1 -0
  5. package/dist/cjs/common/index.d.ts +6 -0
  6. package/dist/cjs/common/index.d.ts.map +1 -0
  7. package/dist/cjs/common/index.js +22 -0
  8. package/dist/cjs/common/index.js.map +1 -0
  9. package/dist/cjs/common/is.d.ts +5 -0
  10. package/dist/cjs/common/is.d.ts.map +1 -0
  11. package/dist/cjs/common/is.js +36 -0
  12. package/dist/cjs/common/is.js.map +1 -0
  13. package/dist/cjs/common/object.d.ts +4 -0
  14. package/dist/cjs/common/object.d.ts.map +1 -0
  15. package/dist/cjs/common/object.js +20 -0
  16. package/dist/cjs/common/object.js.map +1 -0
  17. package/dist/cjs/common/phantom.d.ts +2 -0
  18. package/dist/cjs/common/phantom.d.ts.map +1 -0
  19. package/dist/cjs/common/phantom.js +3 -0
  20. package/dist/cjs/common/phantom.js.map +1 -0
  21. package/dist/cjs/common/result.d.ts +22 -0
  22. package/dist/cjs/common/result.d.ts.map +1 -0
  23. package/dist/cjs/common/result.js +28 -0
  24. package/dist/cjs/common/result.js.map +1 -0
  25. package/dist/cjs/common/string.d.ts +3 -0
  26. package/dist/cjs/common/string.d.ts.map +1 -0
  27. package/dist/cjs/common/string.js +33 -0
  28. package/dist/cjs/common/string.js.map +1 -0
  29. package/dist/cjs/common/types.d.ts +14 -0
  30. package/dist/cjs/common/types.d.ts.map +1 -0
  31. package/dist/cjs/common/types.js +3 -0
  32. package/dist/cjs/common/types.js.map +1 -0
  33. package/dist/cjs/index.d.ts +2 -0
  34. package/dist/cjs/index.d.ts.map +1 -0
  35. package/dist/cjs/index.js +18 -0
  36. package/dist/cjs/index.js.map +1 -0
  37. package/dist/cjs/shape/annotate.d.ts +57 -0
  38. package/dist/cjs/shape/annotate.d.ts.map +1 -0
  39. package/dist/cjs/shape/annotate.js +37 -0
  40. package/dist/cjs/shape/annotate.js.map +1 -0
  41. package/dist/cjs/shape/annotation.d.ts +39 -0
  42. package/dist/cjs/shape/annotation.d.ts.map +1 -0
  43. package/dist/cjs/shape/annotation.js +3 -0
  44. package/dist/cjs/shape/annotation.js.map +1 -0
  45. package/dist/cjs/shape/base.d.ts +33 -0
  46. package/dist/cjs/shape/base.d.ts.map +1 -0
  47. package/dist/cjs/shape/base.js +26 -0
  48. package/dist/cjs/shape/base.js.map +1 -0
  49. package/dist/cjs/shape/builder.d.ts +168 -0
  50. package/dist/cjs/shape/builder.d.ts.map +1 -0
  51. package/dist/cjs/shape/builder.js +156 -0
  52. package/dist/cjs/shape/builder.js.map +1 -0
  53. package/dist/cjs/shape/error.d.ts +5 -0
  54. package/dist/cjs/shape/error.d.ts.map +1 -0
  55. package/dist/cjs/shape/error.js +3 -0
  56. package/dist/cjs/shape/error.js.map +1 -0
  57. package/dist/cjs/shape/index.d.ts +4 -0
  58. package/dist/cjs/shape/index.d.ts.map +1 -0
  59. package/dist/cjs/shape/index.js +20 -0
  60. package/dist/cjs/shape/index.js.map +1 -0
  61. package/dist/cjs/shape/number.d.ts +8 -0
  62. package/dist/cjs/shape/number.d.ts.map +1 -0
  63. package/dist/cjs/shape/number.js +123 -0
  64. package/dist/cjs/shape/number.js.map +1 -0
  65. package/dist/cjs/shape/shape.d.ts +150 -0
  66. package/dist/cjs/shape/shape.d.ts.map +1 -0
  67. package/dist/cjs/shape/shape.js +158 -0
  68. package/dist/cjs/shape/shape.js.map +1 -0
  69. package/dist/cjs/shape/tags.d.ts +4 -0
  70. package/dist/cjs/shape/tags.d.ts.map +1 -0
  71. package/dist/cjs/shape/tags.js +3 -0
  72. package/dist/cjs/shape/tags.js.map +1 -0
  73. package/dist/cjs/shape/transforms/index.d.ts +4 -0
  74. package/dist/cjs/shape/transforms/index.d.ts.map +1 -0
  75. package/dist/cjs/shape/transforms/index.js +20 -0
  76. package/dist/cjs/shape/transforms/index.js.map +1 -0
  77. package/dist/cjs/shape/transforms/json-schema/index.d.ts +3 -0
  78. package/dist/cjs/shape/transforms/json-schema/index.d.ts.map +1 -0
  79. package/dist/cjs/shape/transforms/json-schema/index.js +19 -0
  80. package/dist/cjs/shape/transforms/json-schema/index.js.map +1 -0
  81. package/dist/cjs/shape/transforms/json-schema/transform.d.ts +5 -0
  82. package/dist/cjs/shape/transforms/json-schema/transform.d.ts.map +1 -0
  83. package/dist/cjs/shape/transforms/json-schema/transform.js +739 -0
  84. package/dist/cjs/shape/transforms/json-schema/transform.js.map +1 -0
  85. package/dist/cjs/shape/transforms/json-schema/types.d.ts +87 -0
  86. package/dist/cjs/shape/transforms/json-schema/types.d.ts.map +1 -0
  87. package/dist/cjs/shape/transforms/json-schema/types.js +3 -0
  88. package/dist/cjs/shape/transforms/json-schema/types.js.map +1 -0
  89. package/dist/cjs/shape/transforms/sql/dialects/dialect.d.ts +51 -0
  90. package/dist/cjs/shape/transforms/sql/dialects/dialect.d.ts.map +1 -0
  91. package/dist/cjs/shape/transforms/sql/dialects/dialect.js +8 -0
  92. package/dist/cjs/shape/transforms/sql/dialects/dialect.js.map +1 -0
  93. package/dist/cjs/shape/transforms/sql/dialects/index.d.ts +7 -0
  94. package/dist/cjs/shape/transforms/sql/dialects/index.d.ts.map +1 -0
  95. package/dist/cjs/shape/transforms/sql/dialects/index.js +19 -0
  96. package/dist/cjs/shape/transforms/sql/dialects/index.js.map +1 -0
  97. package/dist/cjs/shape/transforms/sql/dialects/postgres.d.ts +8 -0
  98. package/dist/cjs/shape/transforms/sql/dialects/postgres.d.ts.map +1 -0
  99. package/dist/cjs/shape/transforms/sql/dialects/postgres.js +374 -0
  100. package/dist/cjs/shape/transforms/sql/dialects/postgres.js.map +1 -0
  101. package/dist/cjs/shape/transforms/sql/dialects/sqlite.d.ts +3 -0
  102. package/dist/cjs/shape/transforms/sql/dialects/sqlite.d.ts.map +1 -0
  103. package/dist/cjs/shape/transforms/sql/dialects/sqlite.js +318 -0
  104. package/dist/cjs/shape/transforms/sql/dialects/sqlite.js.map +1 -0
  105. package/dist/cjs/shape/transforms/sql/from-sql.d.ts +5 -0
  106. package/dist/cjs/shape/transforms/sql/from-sql.d.ts.map +1 -0
  107. package/dist/cjs/shape/transforms/sql/from-sql.js +201 -0
  108. package/dist/cjs/shape/transforms/sql/from-sql.js.map +1 -0
  109. package/dist/cjs/shape/transforms/sql/index.d.ts +4 -0
  110. package/dist/cjs/shape/transforms/sql/index.d.ts.map +1 -0
  111. package/dist/cjs/shape/transforms/sql/index.js +20 -0
  112. package/dist/cjs/shape/transforms/sql/index.js.map +1 -0
  113. package/dist/cjs/shape/transforms/sql/options.d.ts +6 -0
  114. package/dist/cjs/shape/transforms/sql/options.d.ts.map +1 -0
  115. package/dist/cjs/shape/transforms/sql/options.js +6 -0
  116. package/dist/cjs/shape/transforms/sql/options.js.map +1 -0
  117. package/dist/cjs/shape/transforms/sql/parser/check-decoder.d.ts +25 -0
  118. package/dist/cjs/shape/transforms/sql/parser/check-decoder.d.ts.map +1 -0
  119. package/dist/cjs/shape/transforms/sql/parser/check-decoder.js +417 -0
  120. package/dist/cjs/shape/transforms/sql/parser/check-decoder.js.map +1 -0
  121. package/dist/cjs/shape/transforms/sql/parser/create-domain.d.ts +11 -0
  122. package/dist/cjs/shape/transforms/sql/parser/create-domain.d.ts.map +1 -0
  123. package/dist/cjs/shape/transforms/sql/parser/create-domain.js +95 -0
  124. package/dist/cjs/shape/transforms/sql/parser/create-domain.js.map +1 -0
  125. package/dist/cjs/shape/transforms/sql/parser/create-table.d.ts +28 -0
  126. package/dist/cjs/shape/transforms/sql/parser/create-table.d.ts.map +1 -0
  127. package/dist/cjs/shape/transforms/sql/parser/create-table.js +744 -0
  128. package/dist/cjs/shape/transforms/sql/parser/create-table.js.map +1 -0
  129. package/dist/cjs/shape/transforms/sql/parser/create-type.d.ts +23 -0
  130. package/dist/cjs/shape/transforms/sql/parser/create-type.d.ts.map +1 -0
  131. package/dist/cjs/shape/transforms/sql/parser/create-type.js +76 -0
  132. package/dist/cjs/shape/transforms/sql/parser/create-type.js.map +1 -0
  133. package/dist/cjs/shape/transforms/sql/parser/cursor.d.ts +32 -0
  134. package/dist/cjs/shape/transforms/sql/parser/cursor.d.ts.map +1 -0
  135. package/dist/cjs/shape/transforms/sql/parser/cursor.js +168 -0
  136. package/dist/cjs/shape/transforms/sql/parser/cursor.js.map +1 -0
  137. package/dist/cjs/shape/transforms/sql/parser/default-decoder.d.ts +10 -0
  138. package/dist/cjs/shape/transforms/sql/parser/default-decoder.d.ts.map +1 -0
  139. package/dist/cjs/shape/transforms/sql/parser/default-decoder.js +125 -0
  140. package/dist/cjs/shape/transforms/sql/parser/default-decoder.js.map +1 -0
  141. package/dist/cjs/shape/transforms/sql/parser/lexer.d.ts +14 -0
  142. package/dist/cjs/shape/transforms/sql/parser/lexer.d.ts.map +1 -0
  143. package/dist/cjs/shape/transforms/sql/parser/lexer.js +259 -0
  144. package/dist/cjs/shape/transforms/sql/parser/lexer.js.map +1 -0
  145. package/dist/cjs/shape/transforms/sql/parser/pg-types.d.ts +21 -0
  146. package/dist/cjs/shape/transforms/sql/parser/pg-types.d.ts.map +1 -0
  147. package/dist/cjs/shape/transforms/sql/parser/pg-types.js +213 -0
  148. package/dist/cjs/shape/transforms/sql/parser/pg-types.js.map +1 -0
  149. package/dist/cjs/shape/transforms/sql/parser/sqlite-types.d.ts +8 -0
  150. package/dist/cjs/shape/transforms/sql/parser/sqlite-types.d.ts.map +1 -0
  151. package/dist/cjs/shape/transforms/sql/parser/sqlite-types.js +93 -0
  152. package/dist/cjs/shape/transforms/sql/parser/sqlite-types.js.map +1 -0
  153. package/dist/cjs/shape/transforms/sql/parser/statements.d.ts +9 -0
  154. package/dist/cjs/shape/transforms/sql/parser/statements.d.ts.map +1 -0
  155. package/dist/cjs/shape/transforms/sql/parser/statements.js +158 -0
  156. package/dist/cjs/shape/transforms/sql/parser/statements.js.map +1 -0
  157. package/dist/cjs/shape/transforms/sql/parser/type-spec.d.ts +12 -0
  158. package/dist/cjs/shape/transforms/sql/parser/type-spec.d.ts.map +1 -0
  159. package/dist/cjs/shape/transforms/sql/parser/type-spec.js +136 -0
  160. package/dist/cjs/shape/transforms/sql/parser/type-spec.js.map +1 -0
  161. package/dist/cjs/shape/transforms/sql/transform.d.ts +5 -0
  162. package/dist/cjs/shape/transforms/sql/transform.d.ts.map +1 -0
  163. package/dist/cjs/shape/transforms/sql/transform.js +262 -0
  164. package/dist/cjs/shape/transforms/sql/transform.js.map +1 -0
  165. package/dist/cjs/shape/transforms/typescript/index.d.ts +2 -0
  166. package/dist/cjs/shape/transforms/typescript/index.d.ts.map +1 -0
  167. package/dist/cjs/shape/transforms/typescript/index.js +18 -0
  168. package/dist/cjs/shape/transforms/typescript/index.js.map +1 -0
  169. package/dist/cjs/shape/transforms/typescript/transform.d.ts +3 -0
  170. package/dist/cjs/shape/transforms/typescript/transform.d.ts.map +1 -0
  171. package/dist/cjs/shape/transforms/typescript/transform.js +190 -0
  172. package/dist/cjs/shape/transforms/typescript/transform.js.map +1 -0
  173. package/dist/cjs/shape/validate.d.ts +7 -0
  174. package/dist/cjs/shape/validate.d.ts.map +1 -0
  175. package/dist/cjs/shape/validate.js +360 -0
  176. package/dist/cjs/shape/validate.js.map +1 -0
  177. package/dist/esm/common/array.d.ts +3 -0
  178. package/dist/esm/common/array.d.ts.map +1 -0
  179. package/dist/esm/common/array.js +12 -0
  180. package/dist/esm/common/array.js.map +1 -0
  181. package/dist/esm/common/index.d.ts +6 -0
  182. package/dist/esm/common/index.d.ts.map +1 -0
  183. package/dist/esm/common/index.js +6 -0
  184. package/dist/esm/common/index.js.map +1 -0
  185. package/dist/esm/common/is.d.ts +5 -0
  186. package/dist/esm/common/is.d.ts.map +1 -0
  187. package/dist/esm/common/is.js +29 -0
  188. package/dist/esm/common/is.js.map +1 -0
  189. package/dist/esm/common/object.d.ts +4 -0
  190. package/dist/esm/common/object.d.ts.map +1 -0
  191. package/dist/esm/common/object.js +15 -0
  192. package/dist/esm/common/object.js.map +1 -0
  193. package/dist/esm/common/phantom.d.ts +2 -0
  194. package/dist/esm/common/phantom.d.ts.map +1 -0
  195. package/dist/esm/common/phantom.js +2 -0
  196. package/dist/esm/common/phantom.js.map +1 -0
  197. package/dist/esm/common/result.d.ts +22 -0
  198. package/dist/esm/common/result.d.ts.map +1 -0
  199. package/dist/esm/common/result.js +25 -0
  200. package/dist/esm/common/result.js.map +1 -0
  201. package/dist/esm/common/string.d.ts +3 -0
  202. package/dist/esm/common/string.d.ts.map +1 -0
  203. package/dist/esm/common/string.js +28 -0
  204. package/dist/esm/common/string.js.map +1 -0
  205. package/dist/esm/common/types.d.ts +14 -0
  206. package/dist/esm/common/types.d.ts.map +1 -0
  207. package/dist/esm/common/types.js +2 -0
  208. package/dist/esm/common/types.js.map +1 -0
  209. package/dist/esm/index.d.ts +2 -0
  210. package/dist/esm/index.d.ts.map +1 -0
  211. package/dist/esm/index.js +2 -0
  212. package/dist/esm/index.js.map +1 -0
  213. package/dist/esm/shape/annotate.d.ts +57 -0
  214. package/dist/esm/shape/annotate.d.ts.map +1 -0
  215. package/dist/esm/shape/annotate.js +34 -0
  216. package/dist/esm/shape/annotate.js.map +1 -0
  217. package/dist/esm/shape/annotation.d.ts +39 -0
  218. package/dist/esm/shape/annotation.d.ts.map +1 -0
  219. package/dist/esm/shape/annotation.js +2 -0
  220. package/dist/esm/shape/annotation.js.map +1 -0
  221. package/dist/esm/shape/base.d.ts +33 -0
  222. package/dist/esm/shape/base.d.ts.map +1 -0
  223. package/dist/esm/shape/base.js +20 -0
  224. package/dist/esm/shape/base.js.map +1 -0
  225. package/dist/esm/shape/builder.d.ts +168 -0
  226. package/dist/esm/shape/builder.d.ts.map +1 -0
  227. package/dist/esm/shape/builder.js +146 -0
  228. package/dist/esm/shape/builder.js.map +1 -0
  229. package/dist/esm/shape/error.d.ts +5 -0
  230. package/dist/esm/shape/error.d.ts.map +1 -0
  231. package/dist/esm/shape/error.js +2 -0
  232. package/dist/esm/shape/error.js.map +1 -0
  233. package/dist/esm/shape/index.d.ts +4 -0
  234. package/dist/esm/shape/index.d.ts.map +1 -0
  235. package/dist/esm/shape/index.js +4 -0
  236. package/dist/esm/shape/index.js.map +1 -0
  237. package/dist/esm/shape/number.d.ts +8 -0
  238. package/dist/esm/shape/number.d.ts.map +1 -0
  239. package/dist/esm/shape/number.js +114 -0
  240. package/dist/esm/shape/number.js.map +1 -0
  241. package/dist/esm/shape/shape.d.ts +150 -0
  242. package/dist/esm/shape/shape.d.ts.map +1 -0
  243. package/dist/esm/shape/shape.js +121 -0
  244. package/dist/esm/shape/shape.js.map +1 -0
  245. package/dist/esm/shape/tags.d.ts +4 -0
  246. package/dist/esm/shape/tags.d.ts.map +1 -0
  247. package/dist/esm/shape/tags.js +2 -0
  248. package/dist/esm/shape/tags.js.map +1 -0
  249. package/dist/esm/shape/transforms/index.d.ts +4 -0
  250. package/dist/esm/shape/transforms/index.d.ts.map +1 -0
  251. package/dist/esm/shape/transforms/index.js +4 -0
  252. package/dist/esm/shape/transforms/index.js.map +1 -0
  253. package/dist/esm/shape/transforms/json-schema/index.d.ts +3 -0
  254. package/dist/esm/shape/transforms/json-schema/index.d.ts.map +1 -0
  255. package/dist/esm/shape/transforms/json-schema/index.js +3 -0
  256. package/dist/esm/shape/transforms/json-schema/index.js.map +1 -0
  257. package/dist/esm/shape/transforms/json-schema/transform.d.ts +5 -0
  258. package/dist/esm/shape/transforms/json-schema/transform.d.ts.map +1 -0
  259. package/dist/esm/shape/transforms/json-schema/transform.js +734 -0
  260. package/dist/esm/shape/transforms/json-schema/transform.js.map +1 -0
  261. package/dist/esm/shape/transforms/json-schema/types.d.ts +87 -0
  262. package/dist/esm/shape/transforms/json-schema/types.d.ts.map +1 -0
  263. package/dist/esm/shape/transforms/json-schema/types.js +2 -0
  264. package/dist/esm/shape/transforms/json-schema/types.js.map +1 -0
  265. package/dist/esm/shape/transforms/sql/dialects/dialect.d.ts +51 -0
  266. package/dist/esm/shape/transforms/sql/dialects/dialect.d.ts.map +1 -0
  267. package/dist/esm/shape/transforms/sql/dialects/dialect.js +3 -0
  268. package/dist/esm/shape/transforms/sql/dialects/dialect.js.map +1 -0
  269. package/dist/esm/shape/transforms/sql/dialects/index.d.ts +7 -0
  270. package/dist/esm/shape/transforms/sql/dialects/index.d.ts.map +1 -0
  271. package/dist/esm/shape/transforms/sql/dialects/index.js +12 -0
  272. package/dist/esm/shape/transforms/sql/dialects/index.js.map +1 -0
  273. package/dist/esm/shape/transforms/sql/dialects/postgres.d.ts +8 -0
  274. package/dist/esm/shape/transforms/sql/dialects/postgres.d.ts.map +1 -0
  275. package/dist/esm/shape/transforms/sql/dialects/postgres.js +370 -0
  276. package/dist/esm/shape/transforms/sql/dialects/postgres.js.map +1 -0
  277. package/dist/esm/shape/transforms/sql/dialects/sqlite.d.ts +3 -0
  278. package/dist/esm/shape/transforms/sql/dialects/sqlite.d.ts.map +1 -0
  279. package/dist/esm/shape/transforms/sql/dialects/sqlite.js +315 -0
  280. package/dist/esm/shape/transforms/sql/dialects/sqlite.js.map +1 -0
  281. package/dist/esm/shape/transforms/sql/from-sql.d.ts +5 -0
  282. package/dist/esm/shape/transforms/sql/from-sql.d.ts.map +1 -0
  283. package/dist/esm/shape/transforms/sql/from-sql.js +197 -0
  284. package/dist/esm/shape/transforms/sql/from-sql.js.map +1 -0
  285. package/dist/esm/shape/transforms/sql/index.d.ts +4 -0
  286. package/dist/esm/shape/transforms/sql/index.d.ts.map +1 -0
  287. package/dist/esm/shape/transforms/sql/index.js +4 -0
  288. package/dist/esm/shape/transforms/sql/index.js.map +1 -0
  289. package/dist/esm/shape/transforms/sql/options.d.ts +6 -0
  290. package/dist/esm/shape/transforms/sql/options.d.ts.map +1 -0
  291. package/dist/esm/shape/transforms/sql/options.js +2 -0
  292. package/dist/esm/shape/transforms/sql/options.js.map +1 -0
  293. package/dist/esm/shape/transforms/sql/parser/check-decoder.d.ts +25 -0
  294. package/dist/esm/shape/transforms/sql/parser/check-decoder.d.ts.map +1 -0
  295. package/dist/esm/shape/transforms/sql/parser/check-decoder.js +412 -0
  296. package/dist/esm/shape/transforms/sql/parser/check-decoder.js.map +1 -0
  297. package/dist/esm/shape/transforms/sql/parser/create-domain.d.ts +11 -0
  298. package/dist/esm/shape/transforms/sql/parser/create-domain.d.ts.map +1 -0
  299. package/dist/esm/shape/transforms/sql/parser/create-domain.js +91 -0
  300. package/dist/esm/shape/transforms/sql/parser/create-domain.js.map +1 -0
  301. package/dist/esm/shape/transforms/sql/parser/create-table.d.ts +28 -0
  302. package/dist/esm/shape/transforms/sql/parser/create-table.d.ts.map +1 -0
  303. package/dist/esm/shape/transforms/sql/parser/create-table.js +740 -0
  304. package/dist/esm/shape/transforms/sql/parser/create-table.js.map +1 -0
  305. package/dist/esm/shape/transforms/sql/parser/create-type.d.ts +23 -0
  306. package/dist/esm/shape/transforms/sql/parser/create-type.d.ts.map +1 -0
  307. package/dist/esm/shape/transforms/sql/parser/create-type.js +72 -0
  308. package/dist/esm/shape/transforms/sql/parser/create-type.js.map +1 -0
  309. package/dist/esm/shape/transforms/sql/parser/cursor.d.ts +32 -0
  310. package/dist/esm/shape/transforms/sql/parser/cursor.d.ts.map +1 -0
  311. package/dist/esm/shape/transforms/sql/parser/cursor.js +163 -0
  312. package/dist/esm/shape/transforms/sql/parser/cursor.js.map +1 -0
  313. package/dist/esm/shape/transforms/sql/parser/default-decoder.d.ts +10 -0
  314. package/dist/esm/shape/transforms/sql/parser/default-decoder.d.ts.map +1 -0
  315. package/dist/esm/shape/transforms/sql/parser/default-decoder.js +121 -0
  316. package/dist/esm/shape/transforms/sql/parser/default-decoder.js.map +1 -0
  317. package/dist/esm/shape/transforms/sql/parser/lexer.d.ts +14 -0
  318. package/dist/esm/shape/transforms/sql/parser/lexer.d.ts.map +1 -0
  319. package/dist/esm/shape/transforms/sql/parser/lexer.js +253 -0
  320. package/dist/esm/shape/transforms/sql/parser/lexer.js.map +1 -0
  321. package/dist/esm/shape/transforms/sql/parser/pg-types.d.ts +21 -0
  322. package/dist/esm/shape/transforms/sql/parser/pg-types.d.ts.map +1 -0
  323. package/dist/esm/shape/transforms/sql/parser/pg-types.js +208 -0
  324. package/dist/esm/shape/transforms/sql/parser/pg-types.js.map +1 -0
  325. package/dist/esm/shape/transforms/sql/parser/sqlite-types.d.ts +8 -0
  326. package/dist/esm/shape/transforms/sql/parser/sqlite-types.d.ts.map +1 -0
  327. package/dist/esm/shape/transforms/sql/parser/sqlite-types.js +89 -0
  328. package/dist/esm/shape/transforms/sql/parser/sqlite-types.js.map +1 -0
  329. package/dist/esm/shape/transforms/sql/parser/statements.d.ts +9 -0
  330. package/dist/esm/shape/transforms/sql/parser/statements.d.ts.map +1 -0
  331. package/dist/esm/shape/transforms/sql/parser/statements.js +153 -0
  332. package/dist/esm/shape/transforms/sql/parser/statements.js.map +1 -0
  333. package/dist/esm/shape/transforms/sql/parser/type-spec.d.ts +12 -0
  334. package/dist/esm/shape/transforms/sql/parser/type-spec.d.ts.map +1 -0
  335. package/dist/esm/shape/transforms/sql/parser/type-spec.js +130 -0
  336. package/dist/esm/shape/transforms/sql/parser/type-spec.js.map +1 -0
  337. package/dist/esm/shape/transforms/sql/transform.d.ts +5 -0
  338. package/dist/esm/shape/transforms/sql/transform.d.ts.map +1 -0
  339. package/dist/esm/shape/transforms/sql/transform.js +258 -0
  340. package/dist/esm/shape/transforms/sql/transform.js.map +1 -0
  341. package/dist/esm/shape/transforms/typescript/index.d.ts +2 -0
  342. package/dist/esm/shape/transforms/typescript/index.d.ts.map +1 -0
  343. package/dist/esm/shape/transforms/typescript/index.js +2 -0
  344. package/dist/esm/shape/transforms/typescript/index.js.map +1 -0
  345. package/dist/esm/shape/transforms/typescript/transform.d.ts +3 -0
  346. package/dist/esm/shape/transforms/typescript/transform.d.ts.map +1 -0
  347. package/dist/esm/shape/transforms/typescript/transform.js +186 -0
  348. package/dist/esm/shape/transforms/typescript/transform.js.map +1 -0
  349. package/dist/esm/shape/validate.d.ts +7 -0
  350. package/dist/esm/shape/validate.d.ts.map +1 -0
  351. package/dist/esm/shape/validate.js +355 -0
  352. package/dist/esm/shape/validate.js.map +1 -0
  353. package/dist/esm/src/common/array.d.ts +3 -0
  354. package/dist/esm/src/common/array.d.ts.map +1 -0
  355. package/dist/esm/src/common/array.js +12 -0
  356. package/dist/esm/src/common/array.js.map +1 -0
  357. package/dist/esm/src/common/index.d.ts +6 -0
  358. package/dist/esm/src/common/index.d.ts.map +1 -0
  359. package/dist/esm/src/common/index.js +6 -0
  360. package/dist/esm/src/common/index.js.map +1 -0
  361. package/dist/esm/src/common/is.d.ts +5 -0
  362. package/dist/esm/src/common/is.d.ts.map +1 -0
  363. package/dist/esm/src/common/is.js +29 -0
  364. package/dist/esm/src/common/is.js.map +1 -0
  365. package/dist/esm/src/common/object.d.ts +4 -0
  366. package/dist/esm/src/common/object.d.ts.map +1 -0
  367. package/dist/esm/src/common/object.js +15 -0
  368. package/dist/esm/src/common/object.js.map +1 -0
  369. package/dist/esm/src/common/phantom.d.ts +2 -0
  370. package/dist/esm/src/common/phantom.d.ts.map +1 -0
  371. package/dist/esm/src/common/phantom.js +2 -0
  372. package/dist/esm/src/common/phantom.js.map +1 -0
  373. package/dist/esm/src/common/result.d.ts +22 -0
  374. package/dist/esm/src/common/result.d.ts.map +1 -0
  375. package/dist/esm/src/common/result.js +25 -0
  376. package/dist/esm/src/common/result.js.map +1 -0
  377. package/dist/esm/src/common/string.d.ts +3 -0
  378. package/dist/esm/src/common/string.d.ts.map +1 -0
  379. package/dist/esm/src/common/string.js +28 -0
  380. package/dist/esm/src/common/string.js.map +1 -0
  381. package/dist/esm/src/common/types.d.ts +14 -0
  382. package/dist/esm/src/common/types.d.ts.map +1 -0
  383. package/dist/esm/src/common/types.js +2 -0
  384. package/dist/esm/src/common/types.js.map +1 -0
  385. package/dist/esm/src/index.d.ts +2 -0
  386. package/dist/esm/src/index.d.ts.map +1 -0
  387. package/dist/esm/src/index.js +2 -0
  388. package/dist/esm/src/index.js.map +1 -0
  389. package/dist/esm/src/shape/annotate.d.ts +57 -0
  390. package/dist/esm/src/shape/annotate.d.ts.map +1 -0
  391. package/dist/esm/src/shape/annotate.js +34 -0
  392. package/dist/esm/src/shape/annotate.js.map +1 -0
  393. package/dist/esm/src/shape/annotation.d.ts +39 -0
  394. package/dist/esm/src/shape/annotation.d.ts.map +1 -0
  395. package/dist/esm/src/shape/annotation.js +2 -0
  396. package/dist/esm/src/shape/annotation.js.map +1 -0
  397. package/dist/esm/src/shape/base.d.ts +33 -0
  398. package/dist/esm/src/shape/base.d.ts.map +1 -0
  399. package/dist/esm/src/shape/base.js +20 -0
  400. package/dist/esm/src/shape/base.js.map +1 -0
  401. package/dist/esm/src/shape/builder.d.ts +168 -0
  402. package/dist/esm/src/shape/builder.d.ts.map +1 -0
  403. package/dist/esm/src/shape/builder.js +146 -0
  404. package/dist/esm/src/shape/builder.js.map +1 -0
  405. package/dist/esm/src/shape/error.d.ts +5 -0
  406. package/dist/esm/src/shape/error.d.ts.map +1 -0
  407. package/dist/esm/src/shape/error.js +2 -0
  408. package/dist/esm/src/shape/error.js.map +1 -0
  409. package/dist/esm/src/shape/index.d.ts +4 -0
  410. package/dist/esm/src/shape/index.d.ts.map +1 -0
  411. package/dist/esm/src/shape/index.js +4 -0
  412. package/dist/esm/src/shape/index.js.map +1 -0
  413. package/dist/esm/src/shape/number.d.ts +8 -0
  414. package/dist/esm/src/shape/number.d.ts.map +1 -0
  415. package/dist/esm/src/shape/number.js +114 -0
  416. package/dist/esm/src/shape/number.js.map +1 -0
  417. package/dist/esm/src/shape/shape.d.ts +150 -0
  418. package/dist/esm/src/shape/shape.d.ts.map +1 -0
  419. package/dist/esm/src/shape/shape.js +121 -0
  420. package/dist/esm/src/shape/shape.js.map +1 -0
  421. package/dist/esm/src/shape/tags.d.ts +4 -0
  422. package/dist/esm/src/shape/tags.d.ts.map +1 -0
  423. package/dist/esm/src/shape/tags.js +2 -0
  424. package/dist/esm/src/shape/tags.js.map +1 -0
  425. package/dist/esm/src/shape/transforms/index.d.ts +4 -0
  426. package/dist/esm/src/shape/transforms/index.d.ts.map +1 -0
  427. package/dist/esm/src/shape/transforms/index.js +4 -0
  428. package/dist/esm/src/shape/transforms/index.js.map +1 -0
  429. package/dist/esm/src/shape/transforms/json-schema/index.d.ts +3 -0
  430. package/dist/esm/src/shape/transforms/json-schema/index.d.ts.map +1 -0
  431. package/dist/esm/src/shape/transforms/json-schema/index.js +3 -0
  432. package/dist/esm/src/shape/transforms/json-schema/index.js.map +1 -0
  433. package/dist/esm/src/shape/transforms/json-schema/transform.d.ts +5 -0
  434. package/dist/esm/src/shape/transforms/json-schema/transform.d.ts.map +1 -0
  435. package/dist/esm/src/shape/transforms/json-schema/transform.js +734 -0
  436. package/dist/esm/src/shape/transforms/json-schema/transform.js.map +1 -0
  437. package/dist/esm/src/shape/transforms/json-schema/types.d.ts +87 -0
  438. package/dist/esm/src/shape/transforms/json-schema/types.d.ts.map +1 -0
  439. package/dist/esm/src/shape/transforms/json-schema/types.js +2 -0
  440. package/dist/esm/src/shape/transforms/json-schema/types.js.map +1 -0
  441. package/dist/esm/src/shape/transforms/sql/dialects/dialect.d.ts +51 -0
  442. package/dist/esm/src/shape/transforms/sql/dialects/dialect.d.ts.map +1 -0
  443. package/dist/esm/src/shape/transforms/sql/dialects/dialect.js +3 -0
  444. package/dist/esm/src/shape/transforms/sql/dialects/dialect.js.map +1 -0
  445. package/dist/esm/src/shape/transforms/sql/dialects/index.d.ts +7 -0
  446. package/dist/esm/src/shape/transforms/sql/dialects/index.d.ts.map +1 -0
  447. package/dist/esm/src/shape/transforms/sql/dialects/index.js +12 -0
  448. package/dist/esm/src/shape/transforms/sql/dialects/index.js.map +1 -0
  449. package/dist/esm/src/shape/transforms/sql/dialects/postgres.d.ts +8 -0
  450. package/dist/esm/src/shape/transforms/sql/dialects/postgres.d.ts.map +1 -0
  451. package/dist/esm/src/shape/transforms/sql/dialects/postgres.js +370 -0
  452. package/dist/esm/src/shape/transforms/sql/dialects/postgres.js.map +1 -0
  453. package/dist/esm/src/shape/transforms/sql/dialects/sqlite.d.ts +3 -0
  454. package/dist/esm/src/shape/transforms/sql/dialects/sqlite.d.ts.map +1 -0
  455. package/dist/esm/src/shape/transforms/sql/dialects/sqlite.js +315 -0
  456. package/dist/esm/src/shape/transforms/sql/dialects/sqlite.js.map +1 -0
  457. package/dist/esm/src/shape/transforms/sql/from-sql.d.ts +5 -0
  458. package/dist/esm/src/shape/transforms/sql/from-sql.d.ts.map +1 -0
  459. package/dist/esm/src/shape/transforms/sql/from-sql.js +197 -0
  460. package/dist/esm/src/shape/transforms/sql/from-sql.js.map +1 -0
  461. package/dist/esm/src/shape/transforms/sql/index.d.ts +4 -0
  462. package/dist/esm/src/shape/transforms/sql/index.d.ts.map +1 -0
  463. package/dist/esm/src/shape/transforms/sql/index.js +4 -0
  464. package/dist/esm/src/shape/transforms/sql/index.js.map +1 -0
  465. package/dist/esm/src/shape/transforms/sql/options.d.ts +6 -0
  466. package/dist/esm/src/shape/transforms/sql/options.d.ts.map +1 -0
  467. package/dist/esm/src/shape/transforms/sql/options.js +2 -0
  468. package/dist/esm/src/shape/transforms/sql/options.js.map +1 -0
  469. package/dist/esm/src/shape/transforms/sql/parser/check-decoder.d.ts +25 -0
  470. package/dist/esm/src/shape/transforms/sql/parser/check-decoder.d.ts.map +1 -0
  471. package/dist/esm/src/shape/transforms/sql/parser/check-decoder.js +412 -0
  472. package/dist/esm/src/shape/transforms/sql/parser/check-decoder.js.map +1 -0
  473. package/dist/esm/src/shape/transforms/sql/parser/create-domain.d.ts +11 -0
  474. package/dist/esm/src/shape/transforms/sql/parser/create-domain.d.ts.map +1 -0
  475. package/dist/esm/src/shape/transforms/sql/parser/create-domain.js +91 -0
  476. package/dist/esm/src/shape/transforms/sql/parser/create-domain.js.map +1 -0
  477. package/dist/esm/src/shape/transforms/sql/parser/create-table.d.ts +28 -0
  478. package/dist/esm/src/shape/transforms/sql/parser/create-table.d.ts.map +1 -0
  479. package/dist/esm/src/shape/transforms/sql/parser/create-table.js +740 -0
  480. package/dist/esm/src/shape/transforms/sql/parser/create-table.js.map +1 -0
  481. package/dist/esm/src/shape/transforms/sql/parser/create-type.d.ts +23 -0
  482. package/dist/esm/src/shape/transforms/sql/parser/create-type.d.ts.map +1 -0
  483. package/dist/esm/src/shape/transforms/sql/parser/create-type.js +72 -0
  484. package/dist/esm/src/shape/transforms/sql/parser/create-type.js.map +1 -0
  485. package/dist/esm/src/shape/transforms/sql/parser/cursor.d.ts +32 -0
  486. package/dist/esm/src/shape/transforms/sql/parser/cursor.d.ts.map +1 -0
  487. package/dist/esm/src/shape/transforms/sql/parser/cursor.js +163 -0
  488. package/dist/esm/src/shape/transforms/sql/parser/cursor.js.map +1 -0
  489. package/dist/esm/src/shape/transforms/sql/parser/default-decoder.d.ts +10 -0
  490. package/dist/esm/src/shape/transforms/sql/parser/default-decoder.d.ts.map +1 -0
  491. package/dist/esm/src/shape/transforms/sql/parser/default-decoder.js +121 -0
  492. package/dist/esm/src/shape/transforms/sql/parser/default-decoder.js.map +1 -0
  493. package/dist/esm/src/shape/transforms/sql/parser/lexer.d.ts +14 -0
  494. package/dist/esm/src/shape/transforms/sql/parser/lexer.d.ts.map +1 -0
  495. package/dist/esm/src/shape/transforms/sql/parser/lexer.js +253 -0
  496. package/dist/esm/src/shape/transforms/sql/parser/lexer.js.map +1 -0
  497. package/dist/esm/src/shape/transforms/sql/parser/pg-types.d.ts +21 -0
  498. package/dist/esm/src/shape/transforms/sql/parser/pg-types.d.ts.map +1 -0
  499. package/dist/esm/src/shape/transforms/sql/parser/pg-types.js +208 -0
  500. package/dist/esm/src/shape/transforms/sql/parser/pg-types.js.map +1 -0
  501. package/dist/esm/src/shape/transforms/sql/parser/sqlite-types.d.ts +8 -0
  502. package/dist/esm/src/shape/transforms/sql/parser/sqlite-types.d.ts.map +1 -0
  503. package/dist/esm/src/shape/transforms/sql/parser/sqlite-types.js +89 -0
  504. package/dist/esm/src/shape/transforms/sql/parser/sqlite-types.js.map +1 -0
  505. package/dist/esm/src/shape/transforms/sql/parser/statements.d.ts +9 -0
  506. package/dist/esm/src/shape/transforms/sql/parser/statements.d.ts.map +1 -0
  507. package/dist/esm/src/shape/transforms/sql/parser/statements.js +153 -0
  508. package/dist/esm/src/shape/transforms/sql/parser/statements.js.map +1 -0
  509. package/dist/esm/src/shape/transforms/sql/parser/type-spec.d.ts +12 -0
  510. package/dist/esm/src/shape/transforms/sql/parser/type-spec.d.ts.map +1 -0
  511. package/dist/esm/src/shape/transforms/sql/parser/type-spec.js +130 -0
  512. package/dist/esm/src/shape/transforms/sql/parser/type-spec.js.map +1 -0
  513. package/dist/esm/src/shape/transforms/sql/transform.d.ts +5 -0
  514. package/dist/esm/src/shape/transforms/sql/transform.d.ts.map +1 -0
  515. package/dist/esm/src/shape/transforms/sql/transform.js +258 -0
  516. package/dist/esm/src/shape/transforms/sql/transform.js.map +1 -0
  517. package/dist/esm/src/shape/transforms/typescript/index.d.ts +2 -0
  518. package/dist/esm/src/shape/transforms/typescript/index.d.ts.map +1 -0
  519. package/dist/esm/src/shape/transforms/typescript/index.js +2 -0
  520. package/dist/esm/src/shape/transforms/typescript/index.js.map +1 -0
  521. package/dist/esm/src/shape/transforms/typescript/transform.d.ts +3 -0
  522. package/dist/esm/src/shape/transforms/typescript/transform.d.ts.map +1 -0
  523. package/dist/esm/src/shape/transforms/typescript/transform.js +186 -0
  524. package/dist/esm/src/shape/transforms/typescript/transform.js.map +1 -0
  525. package/dist/esm/src/shape/validate.d.ts +7 -0
  526. package/dist/esm/src/shape/validate.d.ts.map +1 -0
  527. package/dist/esm/src/shape/validate.js +355 -0
  528. package/dist/esm/src/shape/validate.js.map +1 -0
  529. package/package.json +40 -0
  530. package/src/common/array.test.ts +19 -0
  531. package/src/common/array.ts +15 -0
  532. package/src/common/index.ts +5 -0
  533. package/src/common/is.ts +23 -0
  534. package/src/common/object.ts +35 -0
  535. package/src/common/phantom.ts +1 -0
  536. package/src/common/result.ts +43 -0
  537. package/src/common/string.ts +28 -0
  538. package/src/common/types.ts +34 -0
  539. package/src/index.ts +1 -0
  540. package/src/shape/annotate.ts +139 -0
  541. package/src/shape/annotation.ts +47 -0
  542. package/src/shape/base.ts +71 -0
  543. package/src/shape/builder.test.ts +728 -0
  544. package/src/shape/builder.ts +475 -0
  545. package/src/shape/error.ts +4 -0
  546. package/src/shape/index.ts +3 -0
  547. package/src/shape/number.ts +118 -0
  548. package/src/shape/shape.test.ts +792 -0
  549. package/src/shape/shape.ts +377 -0
  550. package/src/shape/tags.ts +14 -0
  551. package/src/shape/transforms/index.ts +3 -0
  552. package/src/shape/transforms/json-schema/index.ts +2 -0
  553. package/src/shape/transforms/json-schema/transform.test.ts +850 -0
  554. package/src/shape/transforms/json-schema/transform.ts +882 -0
  555. package/src/shape/transforms/json-schema/types.ts +132 -0
  556. package/src/shape/transforms/sql/dialects/dialect.ts +89 -0
  557. package/src/shape/transforms/sql/dialects/index.ts +14 -0
  558. package/src/shape/transforms/sql/dialects/postgres.ts +392 -0
  559. package/src/shape/transforms/sql/dialects/sqlite.ts +333 -0
  560. package/src/shape/transforms/sql/from-sql.test.ts +704 -0
  561. package/src/shape/transforms/sql/from-sql.ts +210 -0
  562. package/src/shape/transforms/sql/index.ts +3 -0
  563. package/src/shape/transforms/sql/options.ts +6 -0
  564. package/src/shape/transforms/sql/parser/check-decoder.ts +457 -0
  565. package/src/shape/transforms/sql/parser/create-domain.ts +105 -0
  566. package/src/shape/transforms/sql/parser/create-table.ts +809 -0
  567. package/src/shape/transforms/sql/parser/create-type.ts +91 -0
  568. package/src/shape/transforms/sql/parser/cursor.ts +179 -0
  569. package/src/shape/transforms/sql/parser/default-decoder.ts +129 -0
  570. package/src/shape/transforms/sql/parser/lexer.ts +289 -0
  571. package/src/shape/transforms/sql/parser/pg-types.ts +247 -0
  572. package/src/shape/transforms/sql/parser/sqlite-types.ts +103 -0
  573. package/src/shape/transforms/sql/parser/statements.ts +127 -0
  574. package/src/shape/transforms/sql/parser/type-spec.ts +159 -0
  575. package/src/shape/transforms/sql/transform.sqlite.test.ts +448 -0
  576. package/src/shape/transforms/sql/transform.test.ts +880 -0
  577. package/src/shape/transforms/sql/transform.ts +295 -0
  578. package/src/shape/transforms/typescript/index.ts +1 -0
  579. package/src/shape/transforms/typescript/transform.ts +211 -0
  580. package/src/shape/tuple.test.ts +171 -0
  581. package/src/shape/validate.ts +413 -0
  582. package/tsconfig.cjs.json +11 -0
  583. package/tsconfig.esm.json +10 -0
  584. package/tsconfig.json +23 -0
@@ -0,0 +1,734 @@
1
+ import { annotate, shapes } from "../../shape";
2
+ const INT_RANGES = {
3
+ int8: { minimum: -128, maximum: 127 },
4
+ uint8: { minimum: 0, maximum: 255 },
5
+ int16: { minimum: -32768, maximum: 32767 },
6
+ uint16: { minimum: 0, maximum: 65535 },
7
+ int32: { minimum: -2_147_483_648, maximum: 2_147_483_647 },
8
+ uint32: { minimum: 0, maximum: 4_294_967_295 },
9
+ int64: { minimum: Number.MIN_SAFE_INTEGER, maximum: Number.MAX_SAFE_INTEGER },
10
+ uint64: { minimum: 0, maximum: Number.MAX_SAFE_INTEGER },
11
+ int: {},
12
+ };
13
+ const FLOAT32_MAX = 3.4028234663852886e38;
14
+ const FLOAT_RANGES = {
15
+ float32: { minimum: -FLOAT32_MAX, maximum: FLOAT32_MAX },
16
+ float64: {},
17
+ float: {},
18
+ number: {},
19
+ };
20
+ const numberTagRange = (tag) => {
21
+ if (tag in INT_RANGES)
22
+ return { type: "integer", ...(INT_RANGES[tag] ?? {}) };
23
+ return { type: "number", ...(FLOAT_RANGES[tag] ?? {}) };
24
+ };
25
+ const attachMeta = (out, meta) => Object.keys(meta).length === 0 ? out : { ...out, "x-shapecraft": meta };
26
+ const isLiteralScalar = (s) => (s.type === "string" || s.type === "number" || s.type === "boolean") &&
27
+ s.literal === true;
28
+ const refTo = (tableName, ctx) => {
29
+ const anchor = ctx.anchorOf[tableName];
30
+ return anchor !== undefined ? `#${anchor}` : `#/$defs/${tableName}`;
31
+ };
32
+ const convert = (shape, topLevel, modCtx) => {
33
+ if (modCtx !== undefined &&
34
+ shape.anno.foreign !== undefined &&
35
+ shape.anno.foreign.table in modCtx.tablesByName) {
36
+ return { $ref: refTo(shape.anno.foreign.table, modCtx) };
37
+ }
38
+ const meta = {};
39
+ if (shape.anno.unique)
40
+ meta.unique = true;
41
+ if (shape.anno.primary)
42
+ meta.primary = true;
43
+ if (shape.anno.foreign)
44
+ meta.foreign = shape.anno.foreign;
45
+ if (topLevel && shape.anno.optional)
46
+ meta.optional = true;
47
+ let out = {};
48
+ switch (shape.type) {
49
+ case "string": {
50
+ if (shape.literal) {
51
+ out = { const: shape.input };
52
+ break;
53
+ }
54
+ out = { type: "string" };
55
+ if (shape.anno.min !== undefined)
56
+ out.minLength = shape.anno.min;
57
+ if (shape.anno.max !== undefined)
58
+ out.maxLength = shape.anno.max;
59
+ if (shape.anno.pattern !== undefined) {
60
+ out.pattern =
61
+ shape.anno.pattern instanceof RegExp ?
62
+ shape.anno.pattern.source
63
+ : shape.anno.pattern;
64
+ }
65
+ if (shape.anno.format !== undefined)
66
+ out.format = shape.anno.format;
67
+ break;
68
+ }
69
+ case "number": {
70
+ if (shape.literal) {
71
+ out = { const: shape.input };
72
+ break;
73
+ }
74
+ const r = numberTagRange(shape.tag);
75
+ out = { type: r.type };
76
+ if (r.minimum !== undefined)
77
+ out.minimum = r.minimum;
78
+ if (r.maximum !== undefined)
79
+ out.maximum = r.maximum;
80
+ if (shape.anno.min !== undefined)
81
+ out.minimum =
82
+ out.minimum === undefined ?
83
+ shape.anno.min
84
+ : Math.max(out.minimum, shape.anno.min);
85
+ if (shape.anno.max !== undefined)
86
+ out.maximum =
87
+ out.maximum === undefined ?
88
+ shape.anno.max
89
+ : Math.min(out.maximum, shape.anno.max);
90
+ meta.numberTag = shape.tag;
91
+ break;
92
+ }
93
+ case "boolean": {
94
+ out =
95
+ shape.literal ? { const: shape.input } : { type: "boolean" };
96
+ break;
97
+ }
98
+ case "nil":
99
+ out = { type: "null" };
100
+ break;
101
+ case "undefined":
102
+ out = {};
103
+ meta.kind = "undefined";
104
+ break;
105
+ case "unknown":
106
+ out = {};
107
+ break;
108
+ case "date":
109
+ out = { type: "string", format: "date-time" };
110
+ meta.kind = "date";
111
+ break;
112
+ case "binary":
113
+ out = { type: "string", contentEncoding: "base64" };
114
+ meta.kind = "binary";
115
+ break;
116
+ case "array": {
117
+ out = { type: "array", items: convert(shape.input, false, modCtx) };
118
+ if (shape.anno.min !== undefined)
119
+ out.minItems = shape.anno.min;
120
+ if (shape.anno.max !== undefined)
121
+ out.maxItems = shape.anno.max;
122
+ if (shape.anno.uniqueItems)
123
+ out.uniqueItems = true;
124
+ break;
125
+ }
126
+ case "vector": {
127
+ out = {
128
+ type: "array",
129
+ items: convert(shape.input.format, false, modCtx),
130
+ minItems: shape.input.dims,
131
+ maxItems: shape.input.dims,
132
+ };
133
+ meta.kind = "vector";
134
+ meta.vectorDims = shape.input.dims;
135
+ break;
136
+ }
137
+ case "tuple": {
138
+ out = {
139
+ type: "array",
140
+ prefixItems: shape.input.map((s) => convert(s, false, modCtx)),
141
+ minItems: shape.input.length,
142
+ maxItems: shape.input.length,
143
+ };
144
+ meta.kind = "tuple";
145
+ meta.tupleLen = shape.input.length;
146
+ break;
147
+ }
148
+ case "range": {
149
+ const itemSchema = convert(shape.input, false, modCtx);
150
+ out = {
151
+ type: "object",
152
+ properties: {
153
+ lower: { anyOf: [itemSchema, { type: "null" }] },
154
+ upper: { anyOf: [itemSchema, { type: "null" }] },
155
+ lowerInclusive: { type: "boolean" },
156
+ upperInclusive: { type: "boolean" },
157
+ },
158
+ required: ["lower", "upper", "lowerInclusive", "upperInclusive"],
159
+ additionalProperties: false,
160
+ };
161
+ meta.kind = "range";
162
+ break;
163
+ }
164
+ case "mapping": {
165
+ const properties = {};
166
+ const required = [];
167
+ for (const [k, child] of Object.entries(shape.input)) {
168
+ properties[k] = convert(child, false, modCtx);
169
+ if (!child.anno.optional)
170
+ required.push(k);
171
+ }
172
+ out = { type: "object", properties, additionalProperties: false };
173
+ if (required.length > 0)
174
+ out.required = required;
175
+ break;
176
+ }
177
+ case "record": {
178
+ const [keyShape, valShape] = shape.input;
179
+ out = {
180
+ type: "object",
181
+ additionalProperties: convert(valShape, false, modCtx),
182
+ };
183
+ if (keyShape.type === "string" && keyShape.anno.pattern !== undefined) {
184
+ const src = keyShape.anno.pattern instanceof RegExp ?
185
+ keyShape.anno.pattern.source
186
+ : keyShape.anno.pattern;
187
+ out.propertyNames = { type: "string", pattern: src };
188
+ }
189
+ else if (keyShape.type === "number") {
190
+ out.propertyNames = { type: "string", pattern: "^-?\\d+(\\.\\d+)?$" };
191
+ }
192
+ break;
193
+ }
194
+ case "union": {
195
+ const variants = Array.from(shape.input);
196
+ if (variants.length > 0 && variants.every(isLiteralScalar)) {
197
+ out = {
198
+ enum: variants.map((v) => v.input),
199
+ };
200
+ }
201
+ else {
202
+ out = { anyOf: variants.map((v) => convert(v, false, modCtx)) };
203
+ }
204
+ break;
205
+ }
206
+ case "module": {
207
+ const tablesByName = {};
208
+ const anchorOf = {};
209
+ for (const [k, table] of Object.entries(shape.input)) {
210
+ tablesByName[k] = table;
211
+ const a = table.anno.meta?.anchor;
212
+ anchorOf[k] = typeof a === "string" ? a : undefined;
213
+ }
214
+ const ctx = { tablesByName, anchorOf };
215
+ const defs = {};
216
+ for (const [k, table] of Object.entries(shape.input)) {
217
+ const sub = convert(table, false, ctx);
218
+ const anchor = anchorOf[k];
219
+ defs[k] = anchor !== undefined ? { $anchor: anchor, ...sub } : sub;
220
+ }
221
+ out = { $defs: defs };
222
+ break;
223
+ }
224
+ }
225
+ if (shape.anno.title !== undefined)
226
+ out.title = shape.anno.title;
227
+ if (shape.anno.description !== undefined)
228
+ out.description = shape.anno.description;
229
+ return attachMeta(out, meta);
230
+ };
231
+ export const toJSONSchema = (shape) => convert(shape, true);
232
+ const numberByTag = (tag) => {
233
+ switch (tag) {
234
+ case "int":
235
+ return shapes.int();
236
+ case "int8":
237
+ return shapes.int8();
238
+ case "uint8":
239
+ return shapes.uint8();
240
+ case "int16":
241
+ return shapes.int16();
242
+ case "uint16":
243
+ return shapes.uint16();
244
+ case "int32":
245
+ return shapes.int32();
246
+ case "uint32":
247
+ return shapes.uint32();
248
+ case "int64":
249
+ return shapes.int64();
250
+ case "uint64":
251
+ return shapes.uint64();
252
+ case "float":
253
+ return shapes.float();
254
+ case "float32":
255
+ return shapes.float32();
256
+ case "float64":
257
+ return shapes.float64();
258
+ default:
259
+ return shapes.number();
260
+ }
261
+ };
262
+ const naturalRangeForTag = (tag) => {
263
+ if (tag in INT_RANGES)
264
+ return INT_RANGES[tag] ?? {};
265
+ return FLOAT_RANGES[tag] ?? {};
266
+ };
267
+ const asSchema = (def) => {
268
+ if (def === undefined || def === true)
269
+ return {};
270
+ if (def === false)
271
+ return {};
272
+ return def;
273
+ };
274
+ // JSON Schema doesn't require `type` — when `properties`/`items` are present,
275
+ // the type is implied. Infer it so we don't fall through to `unknown`.
276
+ const effectiveType = (s) => {
277
+ if (typeof s.type === "string")
278
+ return s.type;
279
+ if (Array.isArray(s.type) && s.type.length > 0)
280
+ return s.type[0];
281
+ if (s.properties !== undefined ||
282
+ s.additionalProperties !== undefined ||
283
+ s.patternProperties !== undefined ||
284
+ s.required !== undefined ||
285
+ s.propertyNames !== undefined ||
286
+ s.minProperties !== undefined ||
287
+ s.maxProperties !== undefined)
288
+ return "object";
289
+ if (s.items !== undefined ||
290
+ s.uniqueItems !== undefined ||
291
+ s.minItems !== undefined ||
292
+ s.maxItems !== undefined)
293
+ return "array";
294
+ return undefined;
295
+ };
296
+ const literalFromValue = (v) => {
297
+ if (typeof v === "string" || typeof v === "number" || typeof v === "boolean")
298
+ return shapes.literal(v);
299
+ if (v === null)
300
+ return shapes.nil();
301
+ return shapes.unknown();
302
+ };
303
+ // oneOf/anyOf variants are often refinements on a sibling `type` (e.g.
304
+ // `{type: "string", oneOf: [{format: "ipv4"}, ...]}`). Inherit the parent's
305
+ // effective type into variants that don't declare their own, so each variant
306
+ // resolves to a real shape rather than `unknown`. Drop any variants that
307
+ // still resolve to `unknown` after that, and fall back to type-based handling
308
+ // if nothing substantive survives.
309
+ const combinatorBase = (schema, idx) => {
310
+ const variantsRaw = schema.anyOf ?? schema.oneOf;
311
+ if (variantsRaw === undefined || variantsRaw.length === 0)
312
+ return undefined;
313
+ const parentType = effectiveType(schema);
314
+ const all = variantsRaw.map((v) => {
315
+ const vs = asSchema(v);
316
+ const merged = (vs.type === undefined &&
317
+ parentType !== undefined &&
318
+ vs.$ref === undefined) ?
319
+ { type: parentType, ...vs }
320
+ : vs;
321
+ return convertFrom(merged, false, idx);
322
+ });
323
+ const substantive = all.filter((s) => s.type !== "unknown");
324
+ if (substantive.length === 0)
325
+ return undefined;
326
+ if (substantive.length === 1)
327
+ return substantive[0];
328
+ return shapes.union(substantive);
329
+ };
330
+ const convertFrom = (schema, topLevel, idx) => {
331
+ if (idx !== undefined && typeof schema.$ref === "string") {
332
+ const key = resolveRef(schema.$ref, idx);
333
+ const target = key !== null ? idx.defs[key] : undefined;
334
+ if (target !== undefined)
335
+ return convertFrom(target, false, idx);
336
+ return shapes.unknown();
337
+ }
338
+ const meta = schema["x-shapecraft"] ?? {};
339
+ let base;
340
+ const combinator = combinatorBase(schema, idx);
341
+ if (schema.const !== undefined) {
342
+ base = literalFromValue(schema.const);
343
+ }
344
+ else if (schema.enum !== undefined &&
345
+ Array.isArray(schema.enum) &&
346
+ schema.enum.length > 0) {
347
+ base = shapes.union(schema.enum.map(literalFromValue));
348
+ }
349
+ else if (combinator !== undefined) {
350
+ base = combinator;
351
+ }
352
+ else if (meta.kind === "undefined") {
353
+ base = shapes.notDefined();
354
+ }
355
+ else if (meta.kind === "date") {
356
+ base = shapes.date();
357
+ }
358
+ else if (meta.kind === "binary") {
359
+ base = shapes.binary();
360
+ }
361
+ else if (meta.kind === "vector") {
362
+ const itemSchema = asSchema(Array.isArray(schema.items) ? schema.items[0] : schema.items);
363
+ const itemTag = itemSchema["x-shapecraft"]?.numberTag ?? "number";
364
+ const format = numberByTag(itemTag);
365
+ const dims = meta.vectorDims ?? schema.minItems ?? 0;
366
+ base = shapes.vector(dims, format);
367
+ }
368
+ else if (meta.kind === "tuple" ||
369
+ Array.isArray(schema.prefixItems) ||
370
+ (Array.isArray(schema.items) && schema.items.length >= 2)) {
371
+ const items = schema.prefixItems ?? (Array.isArray(schema.items) ? schema.items : []);
372
+ base = shapes.tuple(...items.map((s) => convertFrom(asSchema(s), false, idx)));
373
+ }
374
+ else if (meta.kind === "range") {
375
+ const lowerDef = schema.properties?.["lower"];
376
+ const lowerSchema = asSchema(lowerDef);
377
+ const variants = lowerSchema.anyOf ?? lowerSchema.oneOf ?? undefined;
378
+ const inner = variants !== undefined ?
379
+ (variants.map((v) => asSchema(v)).find((v) => v.type !== "null") ?? {})
380
+ : lowerSchema;
381
+ base = shapes.range(convertFrom(inner, false, idx));
382
+ }
383
+ else {
384
+ switch (effectiveType(schema)) {
385
+ case "null":
386
+ base = shapes.nil();
387
+ break;
388
+ case "boolean":
389
+ base = shapes.boolean();
390
+ break;
391
+ case "string": {
392
+ if (schema.format === "date-time" ||
393
+ schema.format === "date" ||
394
+ schema.format === "timestamp" ||
395
+ schema.format === "time") {
396
+ base = shapes.date();
397
+ }
398
+ else if (schema.contentEncoding === "base64") {
399
+ base = shapes.binary();
400
+ }
401
+ else {
402
+ let s = shapes.string();
403
+ if (schema.pattern !== undefined)
404
+ s = annotate.pattern(s, schema.pattern);
405
+ if (schema.minLength !== undefined)
406
+ s = annotate.min(s, schema.minLength);
407
+ if (schema.maxLength !== undefined)
408
+ s = annotate.max(s, schema.maxLength);
409
+ if (schema.format !== undefined)
410
+ s = annotate.format(s, schema.format);
411
+ base = s;
412
+ }
413
+ break;
414
+ }
415
+ case "integer":
416
+ case "number": {
417
+ const tag = meta.numberTag ?? (schema.type === "integer" ? "int" : "number");
418
+ let n = numberByTag(tag);
419
+ const natural = naturalRangeForTag(tag);
420
+ if (schema.minimum !== undefined &&
421
+ (natural.minimum === undefined || schema.minimum !== natural.minimum))
422
+ n = annotate.min(n, schema.minimum);
423
+ if (schema.maximum !== undefined &&
424
+ (natural.maximum === undefined || schema.maximum !== natural.maximum))
425
+ n = annotate.max(n, schema.maximum);
426
+ base = n;
427
+ break;
428
+ }
429
+ case "array": {
430
+ const itemSchema = asSchema(Array.isArray(schema.items) ? schema.items[0] : schema.items);
431
+ let a = shapes.array(convertFrom(itemSchema, false, idx));
432
+ if (schema.minItems !== undefined)
433
+ a = annotate.min(a, schema.minItems);
434
+ if (schema.maxItems !== undefined)
435
+ a = annotate.max(a, schema.maxItems);
436
+ if (schema.uniqueItems === true)
437
+ a = annotate.uniqueItems(a);
438
+ base = a;
439
+ break;
440
+ }
441
+ case "object": {
442
+ if (schema.properties !== undefined) {
443
+ const required = new Set(schema.required ?? []);
444
+ const rec = {};
445
+ for (const [k, v] of Object.entries(schema.properties)) {
446
+ let child = convertFrom(asSchema(v), false, idx);
447
+ if (!required.has(k))
448
+ child = annotate.optional(child);
449
+ rec[k] = child;
450
+ }
451
+ base = shapes.mapping(rec);
452
+ }
453
+ else if (schema.additionalProperties !== undefined &&
454
+ schema.additionalProperties !== false) {
455
+ const valShape = convertFrom(asSchema(schema.additionalProperties), false, idx);
456
+ const pn = (schema.propertyNames !== undefined &&
457
+ schema.propertyNames !== true &&
458
+ schema.propertyNames !== false) ?
459
+ schema.propertyNames
460
+ : undefined;
461
+ let keyShape;
462
+ if (pn?.pattern === "^-?\\d+(\\.\\d+)?$") {
463
+ keyShape = shapes.number();
464
+ }
465
+ else if (pn?.pattern !== undefined) {
466
+ keyShape = annotate.pattern(shapes.string(), pn.pattern);
467
+ }
468
+ else {
469
+ keyShape = shapes.string();
470
+ }
471
+ base = shapes.record(keyShape, valShape);
472
+ }
473
+ else {
474
+ base = shapes.unknown();
475
+ }
476
+ break;
477
+ }
478
+ default:
479
+ base = shapes.unknown();
480
+ }
481
+ }
482
+ if (meta.unique === true)
483
+ base = annotate.unique(base);
484
+ if (meta.primary === true)
485
+ base = annotate.primary(base);
486
+ if (meta.foreign !== undefined)
487
+ base = annotate.foreign(base, meta.foreign.table, meta.foreign.column);
488
+ if (topLevel && meta.optional === true)
489
+ base = annotate.optional(base);
490
+ if (schema.title !== undefined)
491
+ base = annotate.titled(base, schema.title);
492
+ if (schema.description !== undefined)
493
+ base = annotate.described(base, schema.description);
494
+ return base;
495
+ };
496
+ const buildRefIndex = (schema) => {
497
+ const defs = {};
498
+ const byAnchor = new Map();
499
+ const byPath = new Map();
500
+ const collect = (rawDefs, pathPrefix) => {
501
+ if (rawDefs === undefined)
502
+ return;
503
+ for (const [key, defDef] of Object.entries(rawDefs)) {
504
+ if (typeof defDef !== "object" || defDef === null)
505
+ continue;
506
+ const def = defDef;
507
+ if (defs[key] === undefined)
508
+ defs[key] = def;
509
+ byPath.set(`${pathPrefix}${key}`, key);
510
+ if (def.$anchor !== undefined)
511
+ byAnchor.set(def.$anchor, key);
512
+ }
513
+ };
514
+ collect(schema.$defs, "#/$defs/");
515
+ collect(schema.definitions, "#/definitions/");
516
+ return { defs, byAnchor, byPath };
517
+ };
518
+ const resolveRef = (ref, idx) => {
519
+ if (ref.startsWith("#/$defs/") || ref.startsWith("#/definitions/"))
520
+ return idx.byPath.get(ref) ?? null;
521
+ if (ref.startsWith("#") && !ref.startsWith("#/"))
522
+ return idx.byAnchor.get(ref.slice(1)) ?? null;
523
+ return null;
524
+ };
525
+ const detectPkPropertyName = (defName, def) => {
526
+ const required = new Set(def.required ?? []);
527
+ const props = def.properties ?? {};
528
+ const lower = defName.toLowerCase();
529
+ const candidates = ["id", `${lower}id`, `${lower}_id`];
530
+ for (const cand of candidates) {
531
+ for (const propName of Object.keys(props)) {
532
+ if (propName.toLowerCase() === cand && required.has(propName))
533
+ return propName;
534
+ }
535
+ }
536
+ return null;
537
+ };
538
+ const bareTypeShape = (s) => {
539
+ switch (s.type) {
540
+ case "number":
541
+ return numberByTag(s.tag);
542
+ case "string":
543
+ return shapes.string();
544
+ case "boolean":
545
+ return shapes.boolean();
546
+ case "date":
547
+ return shapes.date();
548
+ case "binary":
549
+ return shapes.binary();
550
+ default:
551
+ return s;
552
+ }
553
+ };
554
+ const lastSegment = (id) => {
555
+ const slash = id.lastIndexOf("/");
556
+ const tail = slash >= 0 ? id.slice(slash + 1) : id;
557
+ const dot = tail.indexOf(".");
558
+ return dot >= 0 ? tail.slice(0, dot) : tail;
559
+ };
560
+ const topLevelTableName = (schema) => {
561
+ if (typeof schema.title === "string" && schema.title.length > 0)
562
+ return schema.title;
563
+ if (typeof schema.$id === "string" && schema.$id.length > 0)
564
+ return lastSegment(schema.$id);
565
+ return "root";
566
+ };
567
+ const buildPkInfo = (defKey, def, idx) => {
568
+ const pkName = detectPkPropertyName(defKey, def);
569
+ if (pkName !== null) {
570
+ const propSchema = asSchema(def.properties?.[pkName]);
571
+ const propShape = convertFrom(propSchema, false, idx);
572
+ return {
573
+ column: pkName,
574
+ shape: bareTypeShape(propShape),
575
+ autoInjected: false,
576
+ };
577
+ }
578
+ const props = def.properties ?? {};
579
+ const hasLiteralId = Object.keys(props).some((n) => n.toLowerCase() === "id");
580
+ if (hasLiteralId) {
581
+ throw new Error(`def '${defKey}' has an 'id' field that doesn't qualify as PK (not in required[])`);
582
+ }
583
+ return {
584
+ column: "id",
585
+ shape: shapes.int64(),
586
+ autoInjected: true,
587
+ };
588
+ };
589
+ const convertDefToTable = (defKey, def, idx, pkRegistry, junctions) => {
590
+ const required = new Set(def.required ?? []);
591
+ const props = def.properties ?? {};
592
+ const pkInfo = pkRegistry[defKey];
593
+ const rec = {};
594
+ if (pkInfo !== undefined && pkInfo.autoInjected) {
595
+ rec[pkInfo.column] = annotate.autoIncremented(annotate.primary(shapes.int64()));
596
+ }
597
+ for (const [propName, propSchemaRaw] of Object.entries(props)) {
598
+ const propSchema = asSchema(propSchemaRaw);
599
+ if (typeof propSchema.$ref === "string") {
600
+ const targetKey = resolveRef(propSchema.$ref, idx);
601
+ const targetDef = targetKey !== null ? idx.defs[targetKey] : undefined;
602
+ if (targetKey === null || targetDef === undefined) {
603
+ let s = shapes.unknown();
604
+ if (!required.has(propName))
605
+ s = annotate.optional(s);
606
+ rec[propName] = s;
607
+ continue;
608
+ }
609
+ if (targetDef.type === "object") {
610
+ const targetPk = pkRegistry[targetKey];
611
+ if (targetPk === undefined || targetPk.shape.type === "unknown") {
612
+ throw new Error(`def '${defKey}': $ref target '${targetKey}' has no usable PK type for FK`);
613
+ }
614
+ let fk = annotate.foreign(bareTypeShape(targetPk.shape), targetKey, targetPk.column);
615
+ if (!required.has(propName))
616
+ fk = annotate.optional(fk);
617
+ rec[propName] = fk;
618
+ continue;
619
+ }
620
+ let inlined = convertFrom(targetDef, false, idx);
621
+ if (!required.has(propName))
622
+ inlined = annotate.optional(inlined);
623
+ rec[propName] = inlined;
624
+ continue;
625
+ }
626
+ if (propSchema.type === "array") {
627
+ const itemSchema = asSchema(Array.isArray(propSchema.items) ?
628
+ propSchema.items[0]
629
+ : propSchema.items);
630
+ if (typeof itemSchema.$ref === "string") {
631
+ const targetKey = resolveRef(itemSchema.$ref, idx);
632
+ const targetDef = targetKey !== null ? idx.defs[targetKey] : undefined;
633
+ if (targetKey !== null &&
634
+ targetDef !== undefined &&
635
+ targetDef.type === "object" &&
636
+ pkRegistry[targetKey] !== undefined) {
637
+ junctions.push({
638
+ parentTable: defKey,
639
+ property: propName,
640
+ refTable: targetKey,
641
+ });
642
+ continue;
643
+ }
644
+ }
645
+ }
646
+ if (pkInfo !== undefined &&
647
+ !pkInfo.autoInjected &&
648
+ propName === pkInfo.column) {
649
+ rec[propName] = annotate.primary(bareTypeShape(pkInfo.shape));
650
+ continue;
651
+ }
652
+ let child = convertFrom(propSchema, false, idx);
653
+ if (!required.has(propName))
654
+ child = annotate.optional(child);
655
+ rec[propName] = child;
656
+ }
657
+ let mapping = shapes.mapping(rec);
658
+ mapping = annotate.titled(mapping, defKey);
659
+ if (typeof def.$anchor === "string") {
660
+ mapping = annotate.meta(mapping, {
661
+ anchor: def.$anchor,
662
+ });
663
+ }
664
+ if (typeof def.description === "string") {
665
+ mapping = annotate.described(mapping, def.description);
666
+ }
667
+ return mapping;
668
+ };
669
+ const buildJunctionTable = (spec, pkRegistry) => {
670
+ const parentPk = pkRegistry[spec.parentTable];
671
+ const refPk = pkRegistry[spec.refTable];
672
+ if (parentPk === undefined || refPk === undefined) {
673
+ throw new Error(`junction table ${spec.parentTable}_${spec.property}: missing PK for endpoint`);
674
+ }
675
+ const name = `${spec.parentTable}_${spec.property}`;
676
+ const parentCol = `${spec.parentTable}_id`;
677
+ const refCol = `${spec.property}_id`;
678
+ const parentFk = annotate.primary(annotate.foreign(bareTypeShape(parentPk.shape), spec.parentTable, parentPk.column));
679
+ const refFk = annotate.primary(annotate.foreign(bareTypeShape(refPk.shape), spec.refTable, refPk.column));
680
+ const rec = parentCol === refCol ?
681
+ // self-ref edge case: column-name collision impossible because we use
682
+ // `${property}_id` for the second column. If somehow they still match,
683
+ // fall back to a numeric suffix.
684
+ { [parentCol]: parentFk, [`${refCol}_2`]: refFk }
685
+ : { [parentCol]: parentFk, [refCol]: refFk };
686
+ let mapping = shapes.mapping(rec);
687
+ mapping = annotate.titled(mapping, name);
688
+ mapping = annotate.meta(mapping, { junction: true });
689
+ return { name, mapping };
690
+ };
691
+ const convertFromModule = (schema) => {
692
+ const idx = buildRefIndex(schema);
693
+ const pkRegistry = {};
694
+ for (const [defKey, def] of Object.entries(idx.defs)) {
695
+ if (def.type !== "object")
696
+ continue;
697
+ pkRegistry[defKey] = buildPkInfo(defKey, def, idx);
698
+ }
699
+ const hasTopLevelObject = schema.type === "object" && schema.properties !== undefined;
700
+ let topLevelKey = null;
701
+ if (hasTopLevelObject) {
702
+ topLevelKey = topLevelTableName(schema);
703
+ if (topLevelKey in pkRegistry) {
704
+ throw new Error(`top-level table name '${topLevelKey}' collides with a $defs key`);
705
+ }
706
+ pkRegistry[topLevelKey] = buildPkInfo(topLevelKey, schema, idx);
707
+ }
708
+ const tables = {};
709
+ const junctions = [];
710
+ for (const [defKey, def] of Object.entries(idx.defs)) {
711
+ if (def.type !== "object")
712
+ continue;
713
+ tables[defKey] = convertDefToTable(defKey, def, idx, pkRegistry, junctions);
714
+ }
715
+ if (topLevelKey !== null) {
716
+ tables[topLevelKey] = convertDefToTable(topLevelKey, schema, idx, pkRegistry, junctions);
717
+ }
718
+ for (const spec of junctions) {
719
+ const { name, mapping } = buildJunctionTable(spec, pkRegistry);
720
+ tables[name] = mapping;
721
+ }
722
+ let mod = shapes.module(tables);
723
+ if (typeof schema.title === "string")
724
+ mod = annotate.titled(mod, schema.title);
725
+ if (typeof schema.description === "string")
726
+ mod = annotate.described(mod, schema.description);
727
+ return mod;
728
+ };
729
+ export const fromJSONSchema = (schema) => {
730
+ if (schema.$defs !== undefined || schema.definitions !== undefined)
731
+ return convertFromModule(schema);
732
+ return convertFrom(schema, true);
733
+ };
734
+ //# sourceMappingURL=transform.js.map