@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,132 @@
1
+ import type { NumberTag } from "../../tags";
2
+
3
+ export type JSONSchemaTypeName =
4
+ | "string" //
5
+ | "number"
6
+ | "integer"
7
+ | "boolean"
8
+ | "object"
9
+ | "array"
10
+ | "null";
11
+
12
+ export interface ShapecraftMeta {
13
+ kind?:
14
+ | "date"
15
+ | "binary"
16
+ | "undefined"
17
+ | "vector"
18
+ | "range"
19
+ | "tuple"
20
+ | undefined;
21
+ numberTag?: NumberTag | undefined;
22
+ vectorDims?: number | undefined;
23
+ tupleLen?: number | undefined;
24
+ unique?: boolean | undefined;
25
+ primary?: boolean | undefined;
26
+ foreign?: { table: string; column: string } | undefined;
27
+ optional?: boolean | undefined;
28
+ anchor?: string | undefined;
29
+ }
30
+
31
+ export type JSONSchemaType =
32
+ | string //
33
+ | number
34
+ | boolean
35
+ | JSONSchemaObject
36
+ | JSONSchemaArray
37
+ | null;
38
+
39
+ export interface JSONSchemaObject {
40
+ [key: string]: JSONSchemaType;
41
+ }
42
+
43
+ export interface JSONSchemaArray extends Array<JSONSchemaType> {}
44
+
45
+ export type JSONSchemaVersion = string;
46
+
47
+ export type JSONSchemaDefinition = JSONSchema | boolean;
48
+ export interface JSONSchema {
49
+ $id?: string | undefined;
50
+ $ref?: string | undefined;
51
+ $schema?: JSONSchemaVersion | undefined;
52
+ $comment?: string | undefined;
53
+ $anchor?: string | undefined;
54
+
55
+ $defs?:
56
+ | {
57
+ [key: string]: JSONSchemaDefinition;
58
+ }
59
+ | undefined;
60
+
61
+ type?: JSONSchemaTypeName | JSONSchemaTypeName[] | undefined;
62
+ enum?: JSONSchemaType[] | undefined;
63
+ const?: JSONSchemaType | undefined;
64
+
65
+ multipleOf?: number | undefined;
66
+ maximum?: number | undefined;
67
+ exclusiveMaximum?: number | undefined;
68
+ minimum?: number | undefined;
69
+ exclusiveMinimum?: number | undefined;
70
+
71
+ maxLength?: number | undefined;
72
+ minLength?: number | undefined;
73
+ pattern?: string | undefined;
74
+
75
+ items?: JSONSchemaDefinition | JSONSchemaDefinition[] | undefined;
76
+ prefixItems?: JSONSchemaDefinition[] | undefined;
77
+ additionalItems?: JSONSchemaDefinition | undefined;
78
+ maxItems?: number | undefined;
79
+ minItems?: number | undefined;
80
+ uniqueItems?: boolean | undefined;
81
+ contains?: JSONSchemaDefinition | undefined;
82
+
83
+ maxProperties?: number | undefined;
84
+ minProperties?: number | undefined;
85
+ required?: string[] | undefined;
86
+ properties?:
87
+ | {
88
+ [key: string]: JSONSchemaDefinition;
89
+ }
90
+ | undefined;
91
+ patternProperties?:
92
+ | {
93
+ [key: string]: JSONSchemaDefinition;
94
+ }
95
+ | undefined;
96
+ additionalProperties?: JSONSchemaDefinition | undefined;
97
+ dependencies?:
98
+ | {
99
+ [key: string]: JSONSchemaDefinition | string[];
100
+ }
101
+ | undefined;
102
+ propertyNames?: JSONSchemaDefinition | undefined;
103
+
104
+ if?: JSONSchemaDefinition | undefined;
105
+ then?: JSONSchemaDefinition | undefined;
106
+ else?: JSONSchemaDefinition | undefined;
107
+
108
+ allOf?: JSONSchemaDefinition[] | undefined;
109
+ anyOf?: JSONSchemaDefinition[] | undefined;
110
+ oneOf?: JSONSchemaDefinition[] | undefined;
111
+ not?: JSONSchemaDefinition | undefined;
112
+
113
+ format?: string | undefined;
114
+
115
+ contentMediaType?: string | undefined;
116
+ contentEncoding?: string | undefined;
117
+
118
+ definitions?:
119
+ | {
120
+ [key: string]: JSONSchemaDefinition;
121
+ }
122
+ | undefined;
123
+
124
+ title?: string | undefined;
125
+ description?: string | undefined;
126
+ default?: JSONSchemaType | undefined;
127
+ readOnly?: boolean | undefined;
128
+ writeOnly?: boolean | undefined;
129
+ examples?: JSONSchemaType | undefined;
130
+
131
+ "x-shapecraft"?: ShapecraftMeta | undefined;
132
+ }
@@ -0,0 +1,89 @@
1
+ import { R } from "../../../../common/result";
2
+ import { shapes } from "../../../shape";
3
+ import { SQLDialect } from "../options";
4
+
5
+ export type Prelude = { name: string; sql: string };
6
+
7
+ export type ColumnDef = {
8
+ name: string;
9
+ type: string;
10
+ notNull: boolean;
11
+ primary: boolean;
12
+ unique: boolean;
13
+ identity: boolean;
14
+ defaultExpr?: string;
15
+ references?: string;
16
+ generated?: { expression: string; stored: boolean };
17
+ checks: string[];
18
+ comments: string[];
19
+ };
20
+
21
+ export type TypeRendering = {
22
+ type: string;
23
+ checks: string[];
24
+ prelude: Prelude[];
25
+ };
26
+
27
+ export type FormatDefault =
28
+ | { ok: true; expr: string }
29
+ | { ok: false; reason: string };
30
+
31
+ export interface Dialect {
32
+ readonly name: SQLDialect;
33
+
34
+ // True iff `anno.schema` is meaningful in this dialect. SQLite has no schemas.
35
+ readonly supportsSchema: boolean;
36
+
37
+ // Trailing tokens emitted after the closing paren of a CREATE TABLE
38
+ // (e.g. " STRICT" for SQLite). Empty string for postgres.
39
+ readonly tableTrailer: string;
40
+
41
+ // Convert a column's shape into a dialect-specific type string + per-type
42
+ // CHECK fragments + any prelude statements (named ENUM types, helper
43
+ // functions, etc.). Handles per-shape concerns only — primary/unique/default
44
+ // /foreign/autoIncrement are applied uniformly by convertField afterwards.
45
+ renderType(
46
+ name: string,
47
+ shape: shapes.Shape,
48
+ ): R.Result<TypeRendering, string[]>;
49
+
50
+ // Validate and apply autoIncrement annotation to a ColumnDef. Some dialects
51
+ // (SQLite) require autoIncrement columns to also be PRIMARY KEY and have a
52
+ // specific integer affinity; this hook lets the dialect enforce that.
53
+ applyAutoIncrement(
54
+ name: string,
55
+ shape: shapes.Shape,
56
+ col: ColumnDef,
57
+ ): string[];
58
+
59
+ // Format a literal default value into an SQL expression appropriate for the
60
+ // dialect. Casts (`::timestamptz`, `::jsonb`) are postgres-only.
61
+ formatDefault(v: unknown, columnType: string): FormatDefault;
62
+
63
+ // Validate the top-level mapping's annotations against dialect constraints.
64
+ // Returns an array of error messages — SQLite errors here on anno.schema.
65
+ validateMappingAnno(anno: shapes.Shape["anno"], title: string): string[];
66
+
67
+ // Render schema-creation prelude (e.g. CREATE SCHEMA IF NOT EXISTS "x";).
68
+ // SQLite returns the empty string and validateMappingAnno will have caught
69
+ // the misuse upstream.
70
+ schemaPrelude(name: string): string;
71
+
72
+ // Render a qualified or bare table name.
73
+ qualifiedTable(schema: string | undefined, title: string): string;
74
+
75
+ // Render a column definition line (no leading indent, no trailing comma).
76
+ // Dialects may special-case (e.g. SQLite collapses INTEGER+identity+primary
77
+ // into `INTEGER PRIMARY KEY AUTOINCREMENT`).
78
+ renderColumn(c: ColumnDef): string;
79
+
80
+ // Final validation pass after all columns are converted but before SQL is
81
+ // rendered. SQLite uses this to enforce single-PK constraints around
82
+ // AUTOINCREMENT columns.
83
+ finalizeColumns(cols: ColumnDef[]): string[];
84
+ }
85
+
86
+ export const quoteIdent = (name: string): string =>
87
+ `"${name.replace(/"/g, '""')}"`;
88
+
89
+ export const quoteLit = (s: string): string => `'${s.replace(/'/g, "''")}'`;
@@ -0,0 +1,14 @@
1
+ import { SQLDialect } from "../options";
2
+ import { Dialect } from "./dialect";
3
+ import { postgresDialect } from "./postgres";
4
+ import { sqliteDialect } from "./sqlite";
5
+
6
+ export type { Dialect, ColumnDef, Prelude } from "./dialect";
7
+ export { quoteIdent, quoteLit } from "./dialect";
8
+ export { renderReferentialActions } from "./postgres";
9
+
10
+ export const getDialect = (name: SQLDialect): Dialect => {
11
+ if (name === "postgres") return postgresDialect;
12
+ if (name === "sqlite") return sqliteDialect;
13
+ throw new Error(`unknown dialect: ${name}`);
14
+ };
@@ -0,0 +1,392 @@
1
+ import { R } from "../../../../common/result";
2
+ import { ReferentialAction } from "../../../annotation";
3
+ import { shapes } from "../../../shape";
4
+ import { NumberTag } from "../../../tags";
5
+ import {
6
+ ColumnDef,
7
+ Dialect,
8
+ FormatDefault,
9
+ Prelude,
10
+ quoteIdent,
11
+ quoteLit,
12
+ TypeRendering,
13
+ } from "./dialect";
14
+
15
+ const INT_RANGES: Record<string, { minimum?: number; maximum?: number }> = {
16
+ int8: { minimum: -128, maximum: 127 },
17
+ uint8: { minimum: 0, maximum: 255 },
18
+ int16: { minimum: -32768, maximum: 32767 },
19
+ uint16: { minimum: 0, maximum: 65535 },
20
+ int32: { minimum: -2_147_483_648, maximum: 2_147_483_647 },
21
+ uint32: { minimum: 0, maximum: 4_294_967_295 },
22
+ uint64: { minimum: 0 },
23
+ };
24
+
25
+ const INT_PG_TYPE: Record<string, string> = {
26
+ int: "bigint",
27
+ int8: "smallint",
28
+ uint8: "smallint",
29
+ int16: "smallint",
30
+ uint16: "integer",
31
+ int32: "integer",
32
+ uint32: "bigint",
33
+ int64: "bigint",
34
+ uint64: "numeric(20,0)",
35
+ };
36
+
37
+ const FLOAT_PG_TYPE: Record<string, string> = {
38
+ number: "double precision",
39
+ float: "real",
40
+ float32: "real",
41
+ float64: "double precision",
42
+ };
43
+
44
+ const isIntTag = (tag: NumberTag): boolean => tag in INT_PG_TYPE;
45
+
46
+ const ARRAY_IS_UNIQUE_FN = "shapecraft_array_is_unique";
47
+ const ARRAY_IS_UNIQUE_FN_SQL =
48
+ `CREATE OR REPLACE FUNCTION ${ARRAY_IS_UNIQUE_FN}(anyarray) RETURNS boolean\n` +
49
+ ` LANGUAGE sql IMMUTABLE PARALLEL SAFE\n` +
50
+ ` AS $$ SELECT cardinality($1) = cardinality(ARRAY(SELECT DISTINCT unnest($1))) $$;`;
51
+
52
+ const pgTypeRange = (
53
+ pgType: string,
54
+ ): { minimum?: number; maximum?: number } => {
55
+ if (pgType === "smallint") return { minimum: -32768, maximum: 32767 };
56
+ if (pgType === "integer")
57
+ return { minimum: -2_147_483_648, maximum: 2_147_483_647 };
58
+ return {};
59
+ };
60
+
61
+ const formatNumberLit = (n: number): string => {
62
+ if (!isFinite(n)) return `${quoteLit(String(n))}::double precision`;
63
+ return String(n);
64
+ };
65
+
66
+ const REFERENTIAL_ACTION_SQL: Record<ReferentialAction, string> = {
67
+ cascade: "CASCADE",
68
+ restrict: "RESTRICT",
69
+ setNull: "SET NULL",
70
+ setDefault: "SET DEFAULT",
71
+ noAction: "NO ACTION",
72
+ };
73
+
74
+ export const renderReferentialActions = (foreign: {
75
+ onDelete?: ReferentialAction;
76
+ onUpdate?: ReferentialAction;
77
+ }): string => {
78
+ const parts: string[] = [];
79
+ if (foreign.onDelete !== undefined) {
80
+ parts.push(`ON DELETE ${REFERENTIAL_ACTION_SQL[foreign.onDelete]}`);
81
+ }
82
+ if (foreign.onUpdate !== undefined) {
83
+ parts.push(`ON UPDATE ${REFERENTIAL_ACTION_SQL[foreign.onUpdate]}`);
84
+ }
85
+ return parts.length > 0 ? " " + parts.join(" ") : "";
86
+ };
87
+
88
+ const rangePgType = (shape: shapes.ShapeRange): string => {
89
+ const item = shape.input;
90
+ if (item.type === "date") {
91
+ if (shape.anno.format === "pgtype:tsrange") return "tsrange";
92
+ if (shape.anno.format === "pgtype:daterange") return "daterange";
93
+ return "tstzrange";
94
+ }
95
+ if (item.type === "number") {
96
+ if (item.tag === "int32" || item.tag === "int16") return "int4range";
97
+ if (item.tag === "int64" || item.tag === "int") return "int8range";
98
+ return "numrange";
99
+ }
100
+ return "tstzrange";
101
+ };
102
+
103
+ const arrayElementPgType = (s: shapes.Shape): string | null => {
104
+ if (s.type === "string") {
105
+ if (s.literal) return null;
106
+ if (s.anno.max !== undefined) return `varchar(${s.anno.max})`;
107
+ return "text";
108
+ }
109
+ if (s.type === "boolean") {
110
+ if (s.literal) return null;
111
+ return "boolean";
112
+ }
113
+ if (s.type === "number") {
114
+ if (s.literal) return null;
115
+ if (isIntTag(s.tag)) return INT_PG_TYPE[s.tag] ?? "bigint";
116
+ return FLOAT_PG_TYPE[s.tag] ?? "double precision";
117
+ }
118
+ if (s.type === "date") return "timestamptz";
119
+ if (s.type === "binary") return "bytea";
120
+ return null;
121
+ };
122
+
123
+ const unionEnumValues = (u: shapes.ShapeUnion): string[] | null => {
124
+ const variants = Array.from(u.input) as shapes.Shape[];
125
+ if (variants.length === 0) return null;
126
+ const values: string[] = [];
127
+ for (const v of variants) {
128
+ if (v.type !== "string" || v.literal !== true) return null;
129
+ values.push(v.input as string);
130
+ }
131
+ return values;
132
+ };
133
+
134
+ const renderType = (
135
+ name: string,
136
+ shape: shapes.Shape,
137
+ ): R.Result<TypeRendering, string[]> => {
138
+ const errors: string[] = [];
139
+ const prelude: Prelude[] = [];
140
+ const checks: string[] = [];
141
+ let pgType: string | null = null;
142
+
143
+ if (shape.type === "union") {
144
+ const values = unionEnumValues(shape);
145
+ if (values !== null) {
146
+ const enumName = shape.anno.title;
147
+ if (enumName !== undefined) {
148
+ const sql = `CREATE TYPE ${quoteIdent(enumName)} AS ENUM (${values
149
+ .map(quoteLit)
150
+ .join(", ")});`;
151
+ prelude.push({ name: enumName, sql });
152
+ pgType = quoteIdent(enumName);
153
+ } else {
154
+ pgType = "text";
155
+ checks.push(
156
+ `${quoteIdent(name)} IN (${values.map(quoteLit).join(", ")})`,
157
+ );
158
+ }
159
+ } else {
160
+ pgType = "jsonb";
161
+ }
162
+ } else {
163
+ switch (shape.type) {
164
+ case "string": {
165
+ if (shape.literal) {
166
+ pgType = "text";
167
+ checks.push(
168
+ `${quoteIdent(name)} = ${quoteLit(shape.input as string)}`,
169
+ );
170
+ } else {
171
+ if (shape.anno.max !== undefined) {
172
+ pgType = `varchar(${shape.anno.max})`;
173
+ } else {
174
+ pgType = "text";
175
+ }
176
+ if (shape.anno.min !== undefined) {
177
+ checks.push(
178
+ `char_length(${quoteIdent(name)}) >= ${shape.anno.min}`,
179
+ );
180
+ }
181
+ if (shape.anno.pattern !== undefined) {
182
+ const src =
183
+ shape.anno.pattern instanceof RegExp ?
184
+ shape.anno.pattern.source
185
+ : shape.anno.pattern;
186
+ checks.push(`${quoteIdent(name)} ~ ${quoteLit(src)}`);
187
+ }
188
+ }
189
+ break;
190
+ }
191
+ case "boolean": {
192
+ pgType = "boolean";
193
+ if (shape.literal) {
194
+ const v = shape.input as boolean;
195
+ checks.push(`${quoteIdent(name)} IS ${v ? "TRUE" : "FALSE"}`);
196
+ }
197
+ break;
198
+ }
199
+ case "number": {
200
+ if (shape.literal) {
201
+ if (isIntTag(shape.tag)) {
202
+ pgType = INT_PG_TYPE[shape.tag] ?? "bigint";
203
+ } else {
204
+ pgType = FLOAT_PG_TYPE[shape.tag] ?? "double precision";
205
+ }
206
+ checks.push(
207
+ `${quoteIdent(name)} = ${formatNumberLit(shape.input as number)}`,
208
+ );
209
+ } else if (isIntTag(shape.tag)) {
210
+ pgType = INT_PG_TYPE[shape.tag] ?? "bigint";
211
+ const natural = INT_RANGES[shape.tag];
212
+ let effMin: number | undefined = natural?.minimum;
213
+ let effMax: number | undefined = natural?.maximum;
214
+ if (shape.anno.min !== undefined) {
215
+ effMin =
216
+ effMin === undefined ?
217
+ shape.anno.min
218
+ : Math.max(effMin, shape.anno.min);
219
+ }
220
+ if (shape.anno.max !== undefined) {
221
+ effMax =
222
+ effMax === undefined ?
223
+ shape.anno.max
224
+ : Math.min(effMax, shape.anno.max);
225
+ }
226
+ const pgr = pgTypeRange(pgType);
227
+ if (
228
+ effMin !== undefined &&
229
+ (pgr.minimum === undefined || effMin > pgr.minimum)
230
+ ) {
231
+ checks.push(`${quoteIdent(name)} >= ${effMin}`);
232
+ }
233
+ if (
234
+ effMax !== undefined &&
235
+ (pgr.maximum === undefined || effMax < pgr.maximum)
236
+ ) {
237
+ checks.push(`${quoteIdent(name)} <= ${effMax}`);
238
+ }
239
+ } else {
240
+ pgType = FLOAT_PG_TYPE[shape.tag] ?? "double precision";
241
+ if (shape.anno.min !== undefined)
242
+ checks.push(`${quoteIdent(name)} >= ${shape.anno.min}`);
243
+ if (shape.anno.max !== undefined)
244
+ checks.push(`${quoteIdent(name)} <= ${shape.anno.max}`);
245
+ }
246
+ break;
247
+ }
248
+ case "date":
249
+ pgType = "timestamptz";
250
+ break;
251
+ case "binary":
252
+ pgType = "bytea";
253
+ break;
254
+ case "unknown":
255
+ pgType = "jsonb";
256
+ break;
257
+ case "nil":
258
+ errors.push(`field '${name}': nil cannot be a column`);
259
+ break;
260
+ case "undefined":
261
+ errors.push(`field '${name}': undefined cannot be a column`);
262
+ break;
263
+ case "array": {
264
+ const elt = arrayElementPgType(shape.input);
265
+ pgType = elt !== null ? `${elt}[]` : "jsonb";
266
+ if (shape.anno.min !== undefined)
267
+ checks.push(`cardinality(${quoteIdent(name)}) >= ${shape.anno.min}`);
268
+ if (shape.anno.max !== undefined)
269
+ checks.push(`cardinality(${quoteIdent(name)}) <= ${shape.anno.max}`);
270
+ if (shape.anno.uniqueItems === true) {
271
+ if (pgType === "jsonb") {
272
+ errors.push(
273
+ `field '${name}': uniqueItems is not supported on jsonb array columns`,
274
+ );
275
+ } else {
276
+ prelude.push({
277
+ name: ARRAY_IS_UNIQUE_FN,
278
+ sql: ARRAY_IS_UNIQUE_FN_SQL,
279
+ });
280
+ checks.push(`${ARRAY_IS_UNIQUE_FN}(${quoteIdent(name)})`);
281
+ }
282
+ }
283
+ break;
284
+ }
285
+ case "vector":
286
+ pgType = `vector(${shape.input.dims})`;
287
+ break;
288
+ case "range": {
289
+ pgType = rangePgType(shape);
290
+ break;
291
+ }
292
+ case "mapping":
293
+ case "record":
294
+ pgType = "jsonb";
295
+ break;
296
+ case "tuple": {
297
+ pgType = "jsonb";
298
+ const len = shape.input.length;
299
+ checks.push(
300
+ `jsonb_typeof(${quoteIdent(name)}) = 'array' AND jsonb_array_length(${quoteIdent(name)}) = ${len}`,
301
+ );
302
+ break;
303
+ }
304
+ }
305
+ }
306
+
307
+ if (pgType === null) {
308
+ return R.err(errors);
309
+ }
310
+ if (errors.length > 0) return R.err(errors);
311
+
312
+ return R.ok({ type: pgType, checks, prelude });
313
+ };
314
+
315
+ const formatDefault = (v: unknown, columnType: string): FormatDefault => {
316
+ if (v === null) return { ok: true, expr: "NULL" };
317
+ if (typeof v === "string") return { ok: true, expr: quoteLit(v) };
318
+ if (typeof v === "number") return { ok: true, expr: formatNumberLit(v) };
319
+ if (typeof v === "boolean") return { ok: true, expr: v ? "TRUE" : "FALSE" };
320
+ if (v instanceof Date)
321
+ return {
322
+ ok: true,
323
+ expr: `${quoteLit(v.toISOString())}::timestamptz`,
324
+ };
325
+ if (typeof v === "object" && columnType === "jsonb") {
326
+ try {
327
+ return { ok: true, expr: `${quoteLit(JSON.stringify(v))}::jsonb` };
328
+ } catch {
329
+ return { ok: false, reason: "default value could not be JSON-encoded" };
330
+ }
331
+ }
332
+ return {
333
+ ok: false,
334
+ reason: `default value of type ${typeof v} is not supported for column type ${columnType}`,
335
+ };
336
+ };
337
+
338
+ const applyAutoIncrement = (
339
+ name: string,
340
+ shape: shapes.Shape,
341
+ col: ColumnDef,
342
+ ): string[] => {
343
+ if (shape.type !== "number" || !isIntTag(shape.tag)) {
344
+ return [`field '${name}': autoIncrement requires an integer type`];
345
+ }
346
+ if (shape.tag === "uint64") {
347
+ return [
348
+ `field '${name}': autoIncrement is not supported on uint64 (numeric column)`,
349
+ ];
350
+ }
351
+ col.identity = true;
352
+ return [];
353
+ };
354
+
355
+ const renderColumn = (c: ColumnDef): string => {
356
+ const parts: string[] = [quoteIdent(c.name), c.type];
357
+ if (c.generated !== undefined) {
358
+ parts.push(
359
+ `GENERATED ALWAYS AS (${c.generated.expression}) ${c.generated.stored ? "STORED" : "VIRTUAL"}`,
360
+ );
361
+ if (c.primary) parts.push("PRIMARY KEY");
362
+ if (c.unique) parts.push("UNIQUE");
363
+ if (c.references !== undefined) parts.push(`REFERENCES ${c.references}`);
364
+ for (const chk of c.checks) parts.push(`CHECK (${chk})`);
365
+ return parts.join(" ");
366
+ }
367
+ if (c.notNull) parts.push("NOT NULL");
368
+ if (c.primary) parts.push("PRIMARY KEY");
369
+ if (c.unique) parts.push("UNIQUE");
370
+ if (c.identity) parts.push("GENERATED ALWAYS AS IDENTITY");
371
+ if (c.defaultExpr !== undefined) parts.push(`DEFAULT ${c.defaultExpr}`);
372
+ if (c.references !== undefined) parts.push(`REFERENCES ${c.references}`);
373
+ for (const chk of c.checks) parts.push(`CHECK (${chk})`);
374
+ return parts.join(" ");
375
+ };
376
+
377
+ export const postgresDialect: Dialect = {
378
+ name: "postgres",
379
+ supportsSchema: true,
380
+ tableTrailer: "",
381
+ renderType,
382
+ applyAutoIncrement,
383
+ formatDefault,
384
+ validateMappingAnno: (_anno, _title) => [],
385
+ schemaPrelude: (name) => `CREATE SCHEMA IF NOT EXISTS ${quoteIdent(name)};`,
386
+ qualifiedTable: (schema, title) =>
387
+ schema !== undefined ?
388
+ `${quoteIdent(schema)}.${quoteIdent(title)}`
389
+ : quoteIdent(title),
390
+ renderColumn,
391
+ finalizeColumns: () => [],
392
+ };