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