@happyvertical/smrt-core 0.30.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 (631) hide show
  1. package/AGENTS.md +124 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +265 -0
  5. package/bin/smrt-prebuild.js +26 -0
  6. package/dist/__tests__/fixtures/advisor-test-classes.d.ts +28 -0
  7. package/dist/__tests__/fixtures/advisor-test-classes.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts +12 -0
  9. package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts.map +1 -0
  10. package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts +28 -0
  11. package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/inheritance-test-classes.d.ts +43 -0
  13. package/dist/__tests__/fixtures/inheritance-test-classes.d.ts.map +1 -0
  14. package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts +18 -0
  15. package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts +15 -0
  17. package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts.map +1 -0
  18. package/dist/__tests__/fixtures/object-spec-test-classes.d.ts +13 -0
  19. package/dist/__tests__/fixtures/object-spec-test-classes.d.ts.map +1 -0
  20. package/dist/__tests__/fixtures/registry-test-classes.d.ts +23 -0
  21. package/dist/__tests__/fixtures/registry-test-classes.d.ts.map +1 -0
  22. package/dist/adapters/ai-usage.d.ts +23 -0
  23. package/dist/adapters/ai-usage.d.ts.map +1 -0
  24. package/dist/adapters/ai-usage.js +105 -0
  25. package/dist/adapters/ai-usage.js.map +1 -0
  26. package/dist/adapters/cost-rates.d.ts +20 -0
  27. package/dist/adapters/cost-rates.d.ts.map +1 -0
  28. package/dist/adapters/cost-rates.js +40 -0
  29. package/dist/adapters/cost-rates.js.map +1 -0
  30. package/dist/adapters/index.d.ts +19 -0
  31. package/dist/adapters/index.d.ts.map +1 -0
  32. package/dist/adapters/metrics.d.ts +111 -0
  33. package/dist/adapters/metrics.d.ts.map +1 -0
  34. package/dist/adapters/metrics.js +169 -0
  35. package/dist/adapters/metrics.js.map +1 -0
  36. package/dist/adapters/pubsub.d.ts +124 -0
  37. package/dist/adapters/pubsub.d.ts.map +1 -0
  38. package/dist/adapters/pubsub.js +121 -0
  39. package/dist/adapters/pubsub.js.map +1 -0
  40. package/dist/browser.d.ts +32 -0
  41. package/dist/browser.d.ts.map +1 -0
  42. package/dist/browser.js +68 -0
  43. package/dist/browser.js.map +1 -0
  44. package/dist/child-accessors.d.ts +27 -0
  45. package/dist/child-accessors.d.ts.map +1 -0
  46. package/dist/child-accessors.js +35 -0
  47. package/dist/child-accessors.js.map +1 -0
  48. package/dist/class.d.ts +313 -0
  49. package/dist/class.d.ts.map +1 -0
  50. package/dist/class.js +896 -0
  51. package/dist/class.js.map +1 -0
  52. package/dist/collection-cache.d.ts +110 -0
  53. package/dist/collection-cache.d.ts.map +1 -0
  54. package/dist/collection-cache.js +187 -0
  55. package/dist/collection-cache.js.map +1 -0
  56. package/dist/collection.d.ts +894 -0
  57. package/dist/collection.d.ts.map +1 -0
  58. package/dist/collection.js +1987 -0
  59. package/dist/collection.js.map +1 -0
  60. package/dist/config/global-config.d.ts +3 -0
  61. package/dist/config/global-config.d.ts.map +1 -0
  62. package/dist/config/global-config.js +19 -0
  63. package/dist/config/global-config.js.map +1 -0
  64. package/dist/config.d.ts +145 -0
  65. package/dist/config.d.ts.map +1 -0
  66. package/dist/config.js +57 -0
  67. package/dist/config.js.map +1 -0
  68. package/dist/consumer-plugin/index.d.ts +22 -0
  69. package/dist/consumer-plugin/index.d.ts.map +1 -0
  70. package/dist/consumer-plugin/index.js +452 -0
  71. package/dist/consumer-plugin/index.js.map +1 -0
  72. package/dist/consumer-plugin.d.ts +8 -0
  73. package/dist/consumer-plugin.d.ts.map +1 -0
  74. package/dist/consumer-plugin.js +5 -0
  75. package/dist/consumer-plugin.js.map +1 -0
  76. package/dist/database.d.ts +95 -0
  77. package/dist/database.d.ts.map +1 -0
  78. package/dist/database.js +32 -0
  79. package/dist/database.js.map +1 -0
  80. package/dist/decorators/compatibility.d.ts +14 -0
  81. package/dist/decorators/compatibility.d.ts.map +1 -0
  82. package/dist/decorators/compatibility.js +111 -0
  83. package/dist/decorators/compatibility.js.map +1 -0
  84. package/dist/decorators/index.d.ts +381 -0
  85. package/dist/decorators/index.d.ts.map +1 -0
  86. package/dist/decorators/index.js +104 -0
  87. package/dist/decorators/index.js.map +1 -0
  88. package/dist/dispatch/bus.d.ts +306 -0
  89. package/dist/dispatch/bus.d.ts.map +1 -0
  90. package/dist/dispatch/bus.js +583 -0
  91. package/dist/dispatch/bus.js.map +1 -0
  92. package/dist/dispatch/collections/DispatchSubscriptions.d.ts +79 -0
  93. package/dist/dispatch/collections/DispatchSubscriptions.d.ts.map +1 -0
  94. package/dist/dispatch/collections/DispatchSubscriptions.js +243 -0
  95. package/dist/dispatch/collections/DispatchSubscriptions.js.map +1 -0
  96. package/dist/dispatch/collections/Dispatches.d.ts +98 -0
  97. package/dist/dispatch/collections/Dispatches.d.ts.map +1 -0
  98. package/dist/dispatch/collections/Dispatches.js +358 -0
  99. package/dist/dispatch/collections/Dispatches.js.map +1 -0
  100. package/dist/dispatch/index.d.ts +47 -0
  101. package/dist/dispatch/index.d.ts.map +1 -0
  102. package/dist/dispatch/models/Dispatch.d.ts +101 -0
  103. package/dist/dispatch/models/Dispatch.d.ts.map +1 -0
  104. package/dist/dispatch/models/Dispatch.js +162 -0
  105. package/dist/dispatch/models/Dispatch.js.map +1 -0
  106. package/dist/dispatch/models/DispatchSubscription.d.ts +83 -0
  107. package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -0
  108. package/dist/dispatch/models/DispatchSubscription.js +112 -0
  109. package/dist/dispatch/models/DispatchSubscription.js.map +1 -0
  110. package/dist/dispatch/tenant-resolver.d.ts +98 -0
  111. package/dist/dispatch/tenant-resolver.d.ts.map +1 -0
  112. package/dist/dispatch/tenant-resolver.js +32 -0
  113. package/dist/dispatch/tenant-resolver.js.map +1 -0
  114. package/dist/dispatch/types.d.ts +149 -0
  115. package/dist/dispatch/types.d.ts.map +1 -0
  116. package/dist/embeddings/hash.d.ts +33 -0
  117. package/dist/embeddings/hash.d.ts.map +1 -0
  118. package/dist/embeddings/hash.js +37 -0
  119. package/dist/embeddings/hash.js.map +1 -0
  120. package/dist/embeddings/index.d.ts +36 -0
  121. package/dist/embeddings/index.d.ts.map +1 -0
  122. package/dist/embeddings/provider.d.ts +75 -0
  123. package/dist/embeddings/provider.d.ts.map +1 -0
  124. package/dist/embeddings/provider.js +170 -0
  125. package/dist/embeddings/provider.js.map +1 -0
  126. package/dist/embeddings/similarity.d.ts +47 -0
  127. package/dist/embeddings/similarity.d.ts.map +1 -0
  128. package/dist/embeddings/similarity.js +64 -0
  129. package/dist/embeddings/similarity.js.map +1 -0
  130. package/dist/embeddings/storage.d.ts +125 -0
  131. package/dist/embeddings/storage.d.ts.map +1 -0
  132. package/dist/embeddings/storage.js +283 -0
  133. package/dist/embeddings/storage.js.map +1 -0
  134. package/dist/embeddings/types.d.ts +250 -0
  135. package/dist/embeddings/types.d.ts.map +1 -0
  136. package/dist/errors.d.ts +363 -0
  137. package/dist/errors.d.ts.map +1 -0
  138. package/dist/errors.js +669 -0
  139. package/dist/errors.js.map +1 -0
  140. package/dist/generators/cli.d.ts +162 -0
  141. package/dist/generators/cli.d.ts.map +1 -0
  142. package/dist/generators/cli.js +462 -0
  143. package/dist/generators/cli.js.map +1 -0
  144. package/dist/generators/index.d.ts +13 -0
  145. package/dist/generators/index.d.ts.map +1 -0
  146. package/dist/generators/mcp-runtime-template.d.ts +60 -0
  147. package/dist/generators/mcp-runtime-template.d.ts.map +1 -0
  148. package/dist/generators/mcp-runtime-template.js +509 -0
  149. package/dist/generators/mcp-runtime-template.js.map +1 -0
  150. package/dist/generators/mcp.d.ts +231 -0
  151. package/dist/generators/mcp.d.ts.map +1 -0
  152. package/dist/generators/mcp.js +1220 -0
  153. package/dist/generators/mcp.js.map +1 -0
  154. package/dist/generators/rest.d.ts +171 -0
  155. package/dist/generators/rest.d.ts.map +1 -0
  156. package/dist/generators/rest.js +591 -0
  157. package/dist/generators/rest.js.map +1 -0
  158. package/dist/generators/swagger.d.ts +21 -0
  159. package/dist/generators/swagger.d.ts.map +1 -0
  160. package/dist/generators/swagger.js +307 -0
  161. package/dist/generators/swagger.js.map +1 -0
  162. package/dist/generators/tenant-gate.d.ts +74 -0
  163. package/dist/generators/tenant-gate.d.ts.map +1 -0
  164. package/dist/generators/tenant-gate.js +15 -0
  165. package/dist/generators/tenant-gate.js.map +1 -0
  166. package/dist/generators.d.ts +8 -0
  167. package/dist/generators.d.ts.map +1 -0
  168. package/dist/generators.js +19 -0
  169. package/dist/generators.js.map +1 -0
  170. package/dist/hierarchical.d.ts +103 -0
  171. package/dist/hierarchical.d.ts.map +1 -0
  172. package/dist/hierarchical.js +184 -0
  173. package/dist/hierarchical.js.map +1 -0
  174. package/dist/index.d.ts +57 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +202 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/interceptors.d.ts +251 -0
  179. package/dist/interceptors.d.ts.map +1 -0
  180. package/dist/interceptors.js +259 -0
  181. package/dist/interceptors.js.map +1 -0
  182. package/dist/junction.d.ts +99 -0
  183. package/dist/junction.d.ts.map +1 -0
  184. package/dist/junction.js +136 -0
  185. package/dist/junction.js.map +1 -0
  186. package/dist/knowledge.d.ts +11 -0
  187. package/dist/knowledge.d.ts.map +1 -0
  188. package/dist/knowledge.js +310 -0
  189. package/dist/knowledge.js.map +1 -0
  190. package/dist/lazy-config.d.ts +160 -0
  191. package/dist/lazy-config.d.ts.map +1 -0
  192. package/dist/lazy-config.js +146 -0
  193. package/dist/lazy-config.js.map +1 -0
  194. package/dist/manifest/discover-base-classes.d.ts +78 -0
  195. package/dist/manifest/discover-base-classes.d.ts.map +1 -0
  196. package/dist/manifest/discover-base-classes.js +85 -0
  197. package/dist/manifest/discover-base-classes.js.map +1 -0
  198. package/dist/manifest/discover-smrt-packages.d.ts +48 -0
  199. package/dist/manifest/discover-smrt-packages.d.ts.map +1 -0
  200. package/dist/manifest/discover-smrt-packages.js +361 -0
  201. package/dist/manifest/discover-smrt-packages.js.map +1 -0
  202. package/dist/manifest/generator.d.ts +93 -0
  203. package/dist/manifest/generator.d.ts.map +1 -0
  204. package/dist/manifest/generator.js +380 -0
  205. package/dist/manifest/generator.js.map +1 -0
  206. package/dist/manifest/index.d.ts +16 -0
  207. package/dist/manifest/index.d.ts.map +1 -0
  208. package/dist/manifest/index.js +51 -0
  209. package/dist/manifest/index.js.map +1 -0
  210. package/dist/manifest/manager.d.ts +51 -0
  211. package/dist/manifest/manager.d.ts.map +1 -0
  212. package/dist/manifest/manager.js +89 -0
  213. package/dist/manifest/manager.js.map +1 -0
  214. package/dist/manifest/manifest-loader.d.ts +187 -0
  215. package/dist/manifest/manifest-loader.d.ts.map +1 -0
  216. package/dist/manifest/manifest-loader.js +847 -0
  217. package/dist/manifest/manifest-loader.js.map +1 -0
  218. package/dist/manifest/sources/composite.d.ts +22 -0
  219. package/dist/manifest/sources/composite.d.ts.map +1 -0
  220. package/dist/manifest/sources/composite.js +60 -0
  221. package/dist/manifest/sources/composite.js.map +1 -0
  222. package/dist/manifest/sources/embedded.d.ts +7 -0
  223. package/dist/manifest/sources/embedded.d.ts.map +1 -0
  224. package/dist/manifest/sources/embedded.js +30 -0
  225. package/dist/manifest/sources/embedded.js.map +1 -0
  226. package/dist/manifest/sources/explicit-paths.d.ts +17 -0
  227. package/dist/manifest/sources/explicit-paths.d.ts.map +1 -0
  228. package/dist/manifest/sources/explicit-paths.js +35 -0
  229. package/dist/manifest/sources/explicit-paths.js.map +1 -0
  230. package/dist/manifest/sources/fallback.d.ts +25 -0
  231. package/dist/manifest/sources/fallback.d.ts.map +1 -0
  232. package/dist/manifest/sources/fallback.js +63 -0
  233. package/dist/manifest/sources/fallback.js.map +1 -0
  234. package/dist/manifest/sources/index.d.ts +17 -0
  235. package/dist/manifest/sources/index.d.ts.map +1 -0
  236. package/dist/manifest/sources/local-test.d.ts +7 -0
  237. package/dist/manifest/sources/local-test.d.ts.map +1 -0
  238. package/dist/manifest/sources/local-test.js +21 -0
  239. package/dist/manifest/sources/local-test.js.map +1 -0
  240. package/dist/manifest/sources/static.d.ts +7 -0
  241. package/dist/manifest/sources/static.d.ts.map +1 -0
  242. package/dist/manifest/sources/static.js +19 -0
  243. package/dist/manifest/sources/static.js.map +1 -0
  244. package/dist/manifest/sources/test.d.ts +7 -0
  245. package/dist/manifest/sources/test.d.ts.map +1 -0
  246. package/dist/manifest/sources/test.js +21 -0
  247. package/dist/manifest/sources/test.js.map +1 -0
  248. package/dist/manifest/sources/types.d.ts +79 -0
  249. package/dist/manifest/sources/types.d.ts.map +1 -0
  250. package/dist/manifest/sources/types.js +61 -0
  251. package/dist/manifest/sources/types.js.map +1 -0
  252. package/dist/manifest/static-manifest.d.ts +4 -0
  253. package/dist/manifest/static-manifest.d.ts.map +1 -0
  254. package/dist/manifest/static-manifest.js +1535 -0
  255. package/dist/manifest/static-manifest.js.map +1 -0
  256. package/dist/manifest/store.d.ts +111 -0
  257. package/dist/manifest/store.d.ts.map +1 -0
  258. package/dist/manifest/store.js +431 -0
  259. package/dist/manifest/store.js.map +1 -0
  260. package/dist/manifest/test-manifest-loader.d.ts +3 -0
  261. package/dist/manifest/test-manifest-loader.d.ts.map +1 -0
  262. package/dist/manifest/test-manifest-stub.d.ts +4 -0
  263. package/dist/manifest/test-manifest-stub.d.ts.map +1 -0
  264. package/dist/manifest/test-manifest-stub.js +80013 -0
  265. package/dist/manifest/test-manifest-stub.js.map +1 -0
  266. package/dist/manifest.d.ts +8 -0
  267. package/dist/manifest.d.ts.map +1 -0
  268. package/dist/manifest.js +20 -0
  269. package/dist/manifest.js.map +1 -0
  270. package/dist/manifest.json +1489 -0
  271. package/dist/mcp-advisor/index.d.ts +499 -0
  272. package/dist/mcp-advisor/index.d.ts.map +1 -0
  273. package/dist/mcp-advisor/tools/add-ai-methods.d.ts +6 -0
  274. package/dist/mcp-advisor/tools/add-ai-methods.d.ts.map +1 -0
  275. package/dist/mcp-advisor/tools/configure-decorators.d.ts +6 -0
  276. package/dist/mcp-advisor/tools/configure-decorators.d.ts.map +1 -0
  277. package/dist/mcp-advisor/tools/generate-collection.d.ts +6 -0
  278. package/dist/mcp-advisor/tools/generate-collection.d.ts.map +1 -0
  279. package/dist/mcp-advisor/tools/generate-field-definitions.d.ts +6 -0
  280. package/dist/mcp-advisor/tools/generate-field-definitions.d.ts.map +1 -0
  281. package/dist/mcp-advisor/tools/generate-smrt-class.d.ts +6 -0
  282. package/dist/mcp-advisor/tools/generate-smrt-class.d.ts.map +1 -0
  283. package/dist/mcp-advisor/tools/get-object-config.d.ts +6 -0
  284. package/dist/mcp-advisor/tools/get-object-config.d.ts.map +1 -0
  285. package/dist/mcp-advisor/tools/get-object-schema.d.ts +10 -0
  286. package/dist/mcp-advisor/tools/get-object-schema.d.ts.map +1 -0
  287. package/dist/mcp-advisor/tools/list-registered-objects.d.ts +9 -0
  288. package/dist/mcp-advisor/tools/list-registered-objects.d.ts.map +1 -0
  289. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts +9 -0
  290. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts.map +1 -0
  291. package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts +9 -0
  292. package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts.map +1 -0
  293. package/dist/mcp-advisor/tools/validate-smrt-object.d.ts +6 -0
  294. package/dist/mcp-advisor/tools/validate-smrt-object.d.ts.map +1 -0
  295. package/dist/mcp-advisor/types.d.ts +209 -0
  296. package/dist/mcp-advisor/types.d.ts.map +1 -0
  297. package/dist/migrations/backfill-tracker.d.ts +84 -0
  298. package/dist/migrations/backfill-tracker.d.ts.map +1 -0
  299. package/dist/migrations/backfill-tracker.js +118 -0
  300. package/dist/migrations/backfill-tracker.js.map +1 -0
  301. package/dist/migrations/checksum.d.ts +43 -0
  302. package/dist/migrations/checksum.d.ts.map +1 -0
  303. package/dist/migrations/checksum.js +32 -0
  304. package/dist/migrations/checksum.js.map +1 -0
  305. package/dist/migrations/differ.d.ts +186 -0
  306. package/dist/migrations/differ.d.ts.map +1 -0
  307. package/dist/migrations/differ.js +601 -0
  308. package/dist/migrations/differ.js.map +1 -0
  309. package/dist/migrations/generator.d.ts +133 -0
  310. package/dist/migrations/generator.d.ts.map +1 -0
  311. package/dist/migrations/generator.js +328 -0
  312. package/dist/migrations/generator.js.map +1 -0
  313. package/dist/migrations/index.d.ts +20 -0
  314. package/dist/migrations/index.d.ts.map +1 -0
  315. package/dist/migrations/orchestrate.d.ts +148 -0
  316. package/dist/migrations/orchestrate.d.ts.map +1 -0
  317. package/dist/migrations/orchestrate.js +118 -0
  318. package/dist/migrations/orchestrate.js.map +1 -0
  319. package/dist/migrations/tracker.d.ts +134 -0
  320. package/dist/migrations/tracker.d.ts.map +1 -0
  321. package/dist/migrations/tracker.js +624 -0
  322. package/dist/migrations/tracker.js.map +1 -0
  323. package/dist/migrations/types.d.ts +221 -0
  324. package/dist/migrations/types.d.ts.map +1 -0
  325. package/dist/migrations.d.ts +7 -0
  326. package/dist/migrations.d.ts.map +1 -0
  327. package/dist/migrations.js +26 -0
  328. package/dist/migrations.js.map +1 -0
  329. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +56 -0
  330. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +1 -0
  331. package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js +163 -0
  332. package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
  333. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js +13 -0
  334. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  335. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js +654 -0
  336. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  337. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js +111 -0
  338. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  339. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js +10 -0
  340. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  341. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js +824 -0
  342. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js.map +1 -0
  343. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js +10 -0
  344. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  345. package/dist/object.d.ts +1202 -0
  346. package/dist/object.d.ts.map +1 -0
  347. package/dist/object.js +2731 -0
  348. package/dist/object.js.map +1 -0
  349. package/dist/polymorphic-association.d.ts +69 -0
  350. package/dist/polymorphic-association.d.ts.map +1 -0
  351. package/dist/polymorphic-association.js +96 -0
  352. package/dist/polymorphic-association.js.map +1 -0
  353. package/dist/prebuild/cli.d.ts +7 -0
  354. package/dist/prebuild/cli.d.ts.map +1 -0
  355. package/dist/prebuild/cli.js +29 -0
  356. package/dist/prebuild/cli.js.map +1 -0
  357. package/dist/prebuild/index.d.ts +22 -0
  358. package/dist/prebuild/index.d.ts.map +1 -0
  359. package/dist/prebuild/index.js +239 -0
  360. package/dist/prebuild/index.js.map +1 -0
  361. package/dist/prebuild.d.ts +8 -0
  362. package/dist/prebuild.d.ts.map +1 -0
  363. package/dist/prebuild.js +6 -0
  364. package/dist/prebuild.js.map +1 -0
  365. package/dist/registry/cache-config.d.ts +13 -0
  366. package/dist/registry/cache-config.d.ts.map +1 -0
  367. package/dist/registry/cache-config.js +17 -0
  368. package/dist/registry/cache-config.js.map +1 -0
  369. package/dist/registry/class-registration.d.ts +31 -0
  370. package/dist/registry/class-registration.d.ts.map +1 -0
  371. package/dist/registry/class-registration.js +1074 -0
  372. package/dist/registry/class-registration.js.map +1 -0
  373. package/dist/registry/collection-resolution.d.ts +45 -0
  374. package/dist/registry/collection-resolution.d.ts.map +1 -0
  375. package/dist/registry/collection-resolution.js +121 -0
  376. package/dist/registry/collection-resolution.js.map +1 -0
  377. package/dist/registry/collision-policy.d.ts +179 -0
  378. package/dist/registry/collision-policy.d.ts.map +1 -0
  379. package/dist/registry/collision-policy.js +153 -0
  380. package/dist/registry/collision-policy.js.map +1 -0
  381. package/dist/registry/diagnostics.d.ts +58 -0
  382. package/dist/registry/diagnostics.d.ts.map +1 -0
  383. package/dist/registry/diagnostics.js +54 -0
  384. package/dist/registry/diagnostics.js.map +1 -0
  385. package/dist/registry/embedding-manager.d.ts +23 -0
  386. package/dist/registry/embedding-manager.d.ts.map +1 -0
  387. package/dist/registry/embedding-manager.js +62 -0
  388. package/dist/registry/embedding-manager.js.map +1 -0
  389. package/dist/registry/index.d.ts +13 -0
  390. package/dist/registry/index.d.ts.map +1 -0
  391. package/dist/registry/inheritance-resolver.d.ts +13 -0
  392. package/dist/registry/inheritance-resolver.d.ts.map +1 -0
  393. package/dist/registry/inheritance-resolver.js +244 -0
  394. package/dist/registry/inheritance-resolver.js.map +1 -0
  395. package/dist/registry/manifest-field-merge.d.ts +4 -0
  396. package/dist/registry/manifest-field-merge.d.ts.map +1 -0
  397. package/dist/registry/manifest-field-merge.js +82 -0
  398. package/dist/registry/manifest-field-merge.js.map +1 -0
  399. package/dist/registry/name-resolver.d.ts +102 -0
  400. package/dist/registry/name-resolver.d.ts.map +1 -0
  401. package/dist/registry/name-resolver.js +241 -0
  402. package/dist/registry/name-resolver.js.map +1 -0
  403. package/dist/registry/relationship-graph.d.ts +16 -0
  404. package/dist/registry/relationship-graph.d.ts.map +1 -0
  405. package/dist/registry/relationship-graph.js +79 -0
  406. package/dist/registry/relationship-graph.js.map +1 -0
  407. package/dist/registry/schema-builder.d.ts +113 -0
  408. package/dist/registry/schema-builder.d.ts.map +1 -0
  409. package/dist/registry/schema-builder.js +474 -0
  410. package/dist/registry/schema-builder.js.map +1 -0
  411. package/dist/registry/shared-state.d.ts +62 -0
  412. package/dist/registry/shared-state.d.ts.map +1 -0
  413. package/dist/registry/shared-state.js +135 -0
  414. package/dist/registry/shared-state.js.map +1 -0
  415. package/dist/registry/types.d.ts +667 -0
  416. package/dist/registry/types.d.ts.map +1 -0
  417. package/dist/registry/validator.d.ts +13 -0
  418. package/dist/registry/validator.d.ts.map +1 -0
  419. package/dist/registry/validator.js +138 -0
  420. package/dist/registry/validator.js.map +1 -0
  421. package/dist/registry.d.ts +1358 -0
  422. package/dist/registry.d.ts.map +1 -0
  423. package/dist/registry.js +2301 -0
  424. package/dist/registry.js.map +1 -0
  425. package/dist/runtime/client.d.ts +34 -0
  426. package/dist/runtime/client.d.ts.map +1 -0
  427. package/dist/runtime/client.js +104 -0
  428. package/dist/runtime/client.js.map +1 -0
  429. package/dist/runtime/index.d.ts +10 -0
  430. package/dist/runtime/index.d.ts.map +1 -0
  431. package/dist/runtime/mcp.d.ts +47 -0
  432. package/dist/runtime/mcp.d.ts.map +1 -0
  433. package/dist/runtime/mcp.js +72 -0
  434. package/dist/runtime/mcp.js.map +1 -0
  435. package/dist/runtime/server.d.ts +92 -0
  436. package/dist/runtime/server.d.ts.map +1 -0
  437. package/dist/runtime/server.js +390 -0
  438. package/dist/runtime/server.js.map +1 -0
  439. package/dist/runtime/types.d.ts +58 -0
  440. package/dist/runtime/types.d.ts.map +1 -0
  441. package/dist/runtime.d.ts +8 -0
  442. package/dist/runtime.d.ts.map +1 -0
  443. package/dist/runtime.js +10 -0
  444. package/dist/runtime.js.map +1 -0
  445. package/dist/scanner/import-scanner.d.ts +7 -0
  446. package/dist/scanner/import-scanner.d.ts.map +1 -0
  447. package/dist/scanner/index.d.ts +12 -0
  448. package/dist/scanner/index.d.ts.map +1 -0
  449. package/dist/scanner/manifest-generator.d.ts +304 -0
  450. package/dist/scanner/manifest-generator.d.ts.map +1 -0
  451. package/dist/scanner/manifest-generator.js +1707 -0
  452. package/dist/scanner/manifest-generator.js.map +1 -0
  453. package/dist/scanner/test-file-patterns.d.ts +18 -0
  454. package/dist/scanner/test-file-patterns.d.ts.map +1 -0
  455. package/dist/scanner/test-file-patterns.js +16 -0
  456. package/dist/scanner/test-file-patterns.js.map +1 -0
  457. package/dist/scanner/types.d.ts +313 -0
  458. package/dist/scanner/types.d.ts.map +1 -0
  459. package/dist/scanner/types.js +2 -0
  460. package/dist/scanner/types.js.map +1 -0
  461. package/dist/scanner.d.ts +6 -0
  462. package/dist/scanner.d.ts.map +1 -0
  463. package/dist/scanner.js +6 -0
  464. package/dist/scanner.js.map +1 -0
  465. package/dist/schema/code-generator.d.ts +53 -0
  466. package/dist/schema/code-generator.d.ts.map +1 -0
  467. package/dist/schema/ddl/base-strategy.d.ts +80 -0
  468. package/dist/schema/ddl/base-strategy.d.ts.map +1 -0
  469. package/dist/schema/ddl/base-strategy.js +240 -0
  470. package/dist/schema/ddl/base-strategy.js.map +1 -0
  471. package/dist/schema/ddl/duckdb-strategy.d.ts +33 -0
  472. package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -0
  473. package/dist/schema/ddl/duckdb-strategy.js +74 -0
  474. package/dist/schema/ddl/duckdb-strategy.js.map +1 -0
  475. package/dist/schema/ddl/index.d.ts +53 -0
  476. package/dist/schema/ddl/index.d.ts.map +1 -0
  477. package/dist/schema/ddl/index.js +80 -0
  478. package/dist/schema/ddl/index.js.map +1 -0
  479. package/dist/schema/ddl/json-duckdb-strategy.d.ts +8 -0
  480. package/dist/schema/ddl/json-duckdb-strategy.d.ts.map +1 -0
  481. package/dist/schema/ddl/json-duckdb-strategy.js +14 -0
  482. package/dist/schema/ddl/json-duckdb-strategy.js.map +1 -0
  483. package/dist/schema/ddl/postgres-strategy.d.ts +29 -0
  484. package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -0
  485. package/dist/schema/ddl/postgres-strategy.js +102 -0
  486. package/dist/schema/ddl/postgres-strategy.js.map +1 -0
  487. package/dist/schema/ddl/sqlite-strategy.d.ts +38 -0
  488. package/dist/schema/ddl/sqlite-strategy.d.ts.map +1 -0
  489. package/dist/schema/ddl/sqlite-strategy.js +74 -0
  490. package/dist/schema/ddl/sqlite-strategy.js.map +1 -0
  491. package/dist/schema/ddl/types.d.ts +114 -0
  492. package/dist/schema/ddl/types.d.ts.map +1 -0
  493. package/dist/schema/generator.d.ts +176 -0
  494. package/dist/schema/generator.d.ts.map +1 -0
  495. package/dist/schema/generator.js +1076 -0
  496. package/dist/schema/generator.js.map +1 -0
  497. package/dist/schema/index-utils.d.ts +19 -0
  498. package/dist/schema/index-utils.d.ts.map +1 -0
  499. package/dist/schema/index-utils.js +32 -0
  500. package/dist/schema/index-utils.js.map +1 -0
  501. package/dist/schema/index.d.ts +13 -0
  502. package/dist/schema/index.d.ts.map +1 -0
  503. package/dist/schema/override-system.d.ts +43 -0
  504. package/dist/schema/override-system.d.ts.map +1 -0
  505. package/dist/schema/schema-aggregator.d.ts +112 -0
  506. package/dist/schema/schema-aggregator.d.ts.map +1 -0
  507. package/dist/schema/schema-manager.d.ts +95 -0
  508. package/dist/schema/schema-manager.d.ts.map +1 -0
  509. package/dist/schema/schema-manager.js +283 -0
  510. package/dist/schema/schema-manager.js.map +1 -0
  511. package/dist/schema/sql-identifiers.d.ts +107 -0
  512. package/dist/schema/sql-identifiers.d.ts.map +1 -0
  513. package/dist/schema/sql-identifiers.js +190 -0
  514. package/dist/schema/sql-identifiers.js.map +1 -0
  515. package/dist/schema/table-verifier.d.ts +10 -0
  516. package/dist/schema/table-verifier.d.ts.map +1 -0
  517. package/dist/schema/table-verifier.js +37 -0
  518. package/dist/schema/table-verifier.js.map +1 -0
  519. package/dist/schema/types.d.ts +241 -0
  520. package/dist/schema/types.d.ts.map +1 -0
  521. package/dist/schema/utils.d.ts +32 -0
  522. package/dist/schema/utils.d.ts.map +1 -0
  523. package/dist/schema/utils.js +134 -0
  524. package/dist/schema/utils.js.map +1 -0
  525. package/dist/scripts/create-wrappers.js +89 -0
  526. package/dist/scripts/generate-manifest.js +155 -0
  527. package/dist/scripts/generate-test-manifest.js +77 -0
  528. package/dist/scripts/migrate-datetime-to-timestamp.ts +310 -0
  529. package/dist/scripts/prepack.js +49 -0
  530. package/dist/signals/bus.d.ts +64 -0
  531. package/dist/signals/bus.d.ts.map +1 -0
  532. package/dist/signals/bus.js +102 -0
  533. package/dist/signals/bus.js.map +1 -0
  534. package/dist/signals/index.d.ts +11 -0
  535. package/dist/signals/index.d.ts.map +1 -0
  536. package/dist/signals/sanitizer.d.ts +54 -0
  537. package/dist/signals/sanitizer.d.ts.map +1 -0
  538. package/dist/signals/sanitizer.js +111 -0
  539. package/dist/signals/sanitizer.js.map +1 -0
  540. package/dist/smrt-knowledge.json +335 -0
  541. package/dist/system/compatibility.d.ts +8 -0
  542. package/dist/system/compatibility.d.ts.map +1 -0
  543. package/dist/system/compatibility.js +409 -0
  544. package/dist/system/compatibility.js.map +1 -0
  545. package/dist/system/index.d.ts +9 -0
  546. package/dist/system/index.d.ts.map +1 -0
  547. package/dist/system/schema.d.ts +69 -0
  548. package/dist/system/schema.d.ts.map +1 -0
  549. package/dist/system/schema.js +271 -0
  550. package/dist/system/schema.js.map +1 -0
  551. package/dist/system/types.d.ts +135 -0
  552. package/dist/system/types.d.ts.map +1 -0
  553. package/dist/system-fields.d.ts +44 -0
  554. package/dist/system-fields.d.ts.map +1 -0
  555. package/dist/system-fields.js +55 -0
  556. package/dist/system-fields.js.map +1 -0
  557. package/dist/table-cache.d.ts +28 -0
  558. package/dist/table-cache.d.ts.map +1 -0
  559. package/dist/table-cache.js +21 -0
  560. package/dist/table-cache.js.map +1 -0
  561. package/dist/test-utils.d.ts +140 -0
  562. package/dist/test-utils.d.ts.map +1 -0
  563. package/dist/testing/database.d.ts +73 -0
  564. package/dist/testing/database.d.ts.map +1 -0
  565. package/dist/testing/database.js +204 -0
  566. package/dist/testing/database.js.map +1 -0
  567. package/dist/testing/index.d.ts +21 -0
  568. package/dist/testing/index.d.ts.map +1 -0
  569. package/dist/testing.d.ts +6 -0
  570. package/dist/testing.d.ts.map +1 -0
  571. package/dist/testing.js +5 -0
  572. package/dist/testing.js.map +1 -0
  573. package/dist/tools/index.d.ts +8 -0
  574. package/dist/tools/index.d.ts.map +1 -0
  575. package/dist/tools/tool-executor.d.ts +101 -0
  576. package/dist/tools/tool-executor.d.ts.map +1 -0
  577. package/dist/tools/tool-executor.js +142 -0
  578. package/dist/tools/tool-executor.js.map +1 -0
  579. package/dist/tools/tool-generator.d.ts +54 -0
  580. package/dist/tools/tool-generator.d.ts.map +1 -0
  581. package/dist/tools/tool-generator.js +121 -0
  582. package/dist/tools/tool-generator.js.map +1 -0
  583. package/dist/utils/chunk.d.ts +32 -0
  584. package/dist/utils/chunk.d.ts.map +1 -0
  585. package/dist/utils/chunk.js +14 -0
  586. package/dist/utils/chunk.js.map +1 -0
  587. package/dist/utils/import-workspace-module.d.ts +8 -0
  588. package/dist/utils/import-workspace-module.d.ts.map +1 -0
  589. package/dist/utils/import-workspace-module.js +81 -0
  590. package/dist/utils/import-workspace-module.js.map +1 -0
  591. package/dist/utils/json.d.ts +102 -0
  592. package/dist/utils/json.d.ts.map +1 -0
  593. package/dist/utils/json.js +43 -0
  594. package/dist/utils/json.js.map +1 -0
  595. package/dist/utils/lru-cache.d.ts +69 -0
  596. package/dist/utils/lru-cache.d.ts.map +1 -0
  597. package/dist/utils/lru-cache.js +100 -0
  598. package/dist/utils/lru-cache.js.map +1 -0
  599. package/dist/utils/naming.d.ts +16 -0
  600. package/dist/utils/naming.d.ts.map +1 -0
  601. package/dist/utils/naming.js +23 -0
  602. package/dist/utils/naming.js.map +1 -0
  603. package/dist/utils/qualified-names.d.ts +122 -0
  604. package/dist/utils/qualified-names.d.ts.map +1 -0
  605. package/dist/utils/qualified-names.js +82 -0
  606. package/dist/utils/qualified-names.js.map +1 -0
  607. package/dist/utils/scanner-module.d.ts +37 -0
  608. package/dist/utils/scanner-module.d.ts.map +1 -0
  609. package/dist/utils.d.ts +177 -0
  610. package/dist/utils.d.ts.map +1 -0
  611. package/dist/utils.js +185 -0
  612. package/dist/utils.js.map +1 -0
  613. package/dist/vite-plugin/import-build-aware.d.ts +68 -0
  614. package/dist/vite-plugin/import-build-aware.d.ts.map +1 -0
  615. package/dist/vite-plugin/import-build-aware.js +72 -0
  616. package/dist/vite-plugin/import-build-aware.js.map +1 -0
  617. package/dist/vite-plugin/index.d.ts +59 -0
  618. package/dist/vite-plugin/index.d.ts.map +1 -0
  619. package/dist/vite-plugin/index.js +1400 -0
  620. package/dist/vite-plugin/index.js.map +1 -0
  621. package/dist/vite-plugin/sveltekit-generator.d.ts +66 -0
  622. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -0
  623. package/dist/vite-plugin/sveltekit-generator.js +1375 -0
  624. package/dist/vite-plugin/sveltekit-generator.js.map +1 -0
  625. package/dist/vite-plugin/templates/default-ui.ts +432 -0
  626. package/dist/vite-plugin/templates/default.html +206 -0
  627. package/dist/vite-plugin.d.ts +8 -0
  628. package/dist/vite-plugin.d.ts.map +1 -0
  629. package/dist/vite-plugin.js +11 -0
  630. package/dist/vite-plugin.js.map +1 -0
  631. package/package.json +208 -0
@@ -0,0 +1,80 @@
1
+ import { BaseDDLStrategy } from "./base-strategy.js";
2
+ import { DuckDBStrategy } from "./duckdb-strategy.js";
3
+ import { JsonDuckDBStrategy } from "./json-duckdb-strategy.js";
4
+ import { PostgresStrategy } from "./postgres-strategy.js";
5
+ import { SQLiteStrategy } from "./sqlite-strategy.js";
6
+ const strategies = {
7
+ sqlite: new SQLiteStrategy(),
8
+ duckdb: new DuckDBStrategy(),
9
+ json: new JsonDuckDBStrategy(),
10
+ postgres: new PostgresStrategy()
11
+ };
12
+ function getDDLStrategy(engine) {
13
+ const strategy = strategies[engine];
14
+ if (!strategy) {
15
+ throw new Error(`Unknown database engine: ${engine}`);
16
+ }
17
+ return strategy;
18
+ }
19
+ function getAllStrategies() {
20
+ return Object.values(strategies);
21
+ }
22
+ function generateDDLForEngine(schema, engine) {
23
+ const strategy = getDDLStrategy(engine);
24
+ return {
25
+ createTable: strategy.generateCreateTable(schema),
26
+ indexes: strategy.generateIndexes(schema),
27
+ triggers: strategy.generateTriggers(schema)
28
+ };
29
+ }
30
+ function generateMultiEngineDDL(schema) {
31
+ return {
32
+ sqlite: generateDDLForEngine(schema, "sqlite"),
33
+ duckdb: generateDDLForEngine(schema, "duckdb"),
34
+ json: generateDDLForEngine(schema, "json"),
35
+ postgres: generateDDLForEngine(schema, "postgres")
36
+ };
37
+ }
38
+ function detectEngine(url, type) {
39
+ if (type) {
40
+ switch (type.toLowerCase()) {
41
+ case "sqlite":
42
+ case "libsql":
43
+ return "sqlite";
44
+ case "duckdb":
45
+ case "json":
46
+ return "duckdb";
47
+ case "postgres":
48
+ case "postgresql":
49
+ case "pg":
50
+ return "postgres";
51
+ }
52
+ }
53
+ const urlLower = url.toLowerCase();
54
+ if (urlLower.startsWith("postgres://") || urlLower.startsWith("postgresql://")) {
55
+ return "postgres";
56
+ }
57
+ if (urlLower.endsWith(".duckdb") || urlLower.includes("duckdb")) {
58
+ return "duckdb";
59
+ }
60
+ if (urlLower.endsWith(".json") || urlLower.includes("/json/") || urlLower.includes("-json")) {
61
+ return "duckdb";
62
+ }
63
+ if (urlLower.endsWith(".db") || urlLower.endsWith(".sqlite") || urlLower.endsWith(".sqlite3") || urlLower === ":memory:") {
64
+ return "sqlite";
65
+ }
66
+ return "sqlite";
67
+ }
68
+ export {
69
+ BaseDDLStrategy,
70
+ DuckDBStrategy,
71
+ JsonDuckDBStrategy,
72
+ PostgresStrategy,
73
+ SQLiteStrategy,
74
+ detectEngine,
75
+ generateDDLForEngine,
76
+ generateMultiEngineDDL,
77
+ getAllStrategies,
78
+ getDDLStrategy
79
+ };
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/schema/ddl/index.ts"],"sourcesContent":["/**\n * DDL Generator Module\n *\n * Per-engine DDL generation for SMRT schema management.\n * SMRT handles ALL database maintenance directly - SDK SQL remains a pure query/CRUD layer.\n */\n\nexport { BaseDDLStrategy } from './base-strategy.js';\nexport { DuckDBStrategy } from './duckdb-strategy.js';\nexport { JsonDuckDBStrategy } from './json-duckdb-strategy.js';\nexport { PostgresStrategy } from './postgres-strategy.js';\nexport { SQLiteStrategy } from './sqlite-strategy.js';\nexport * from './types.js';\n\nimport type { SchemaDefinition } from '../types.js';\nimport { DuckDBStrategy } from './duckdb-strategy.js';\nimport { JsonDuckDBStrategy } from './json-duckdb-strategy.js';\nimport { PostgresStrategy } from './postgres-strategy.js';\nimport { SQLiteStrategy } from './sqlite-strategy.js';\nimport type {\n DatabaseEngine,\n DDLStrategy,\n EngineSpecificDDL,\n MultiEngineDDL,\n} from './types.js';\n\n// Singleton instances for each strategy\nconst strategies: Record<DatabaseEngine, DDLStrategy> = {\n sqlite: new SQLiteStrategy(),\n duckdb: new DuckDBStrategy(),\n json: new JsonDuckDBStrategy(),\n postgres: new PostgresStrategy(),\n};\n\n/**\n * Get the DDL strategy for a specific database engine\n *\n * @param engine - The database engine type\n * @returns The DDL strategy for that engine\n */\nexport function getDDLStrategy(engine: DatabaseEngine): DDLStrategy {\n const strategy = strategies[engine];\n if (!strategy) {\n throw new Error(`Unknown database engine: ${engine}`);\n }\n return strategy;\n}\n\n/**\n * Get all available DDL strategies\n *\n * @returns Array of all DDL strategies\n */\nexport function getAllStrategies(): DDLStrategy[] {\n return Object.values(strategies);\n}\n\n/**\n * Generate DDL for a specific engine\n *\n * @param schema - The schema definition\n * @param engine - The target database engine\n * @returns Engine-specific DDL (createTable, indexes, triggers)\n */\nexport function generateDDLForEngine(\n schema: SchemaDefinition,\n engine: DatabaseEngine,\n): EngineSpecificDDL {\n const strategy = getDDLStrategy(engine);\n\n return {\n createTable: strategy.generateCreateTable(schema),\n indexes: strategy.generateIndexes(schema),\n triggers: strategy.generateTriggers(schema),\n };\n}\n\n/**\n * Generate DDL for all supported engines\n *\n * Useful for storing pre-generated DDL in manifest at build time.\n *\n * @param schema - The schema definition\n * @returns DDL for all engines\n */\nexport function generateMultiEngineDDL(\n schema: SchemaDefinition,\n): MultiEngineDDL {\n return {\n sqlite: generateDDLForEngine(schema, 'sqlite'),\n duckdb: generateDDLForEngine(schema, 'duckdb'),\n json: generateDDLForEngine(schema, 'json'),\n postgres: generateDDLForEngine(schema, 'postgres'),\n };\n}\n\n/**\n * Detect database engine from URL or connection type\n *\n * @param url - Database URL or path\n * @param type - Optional explicit type hint\n * @returns Detected database engine\n */\nexport function detectEngine(url: string, type?: string): DatabaseEngine {\n // Explicit type takes precedence\n if (type) {\n switch (type.toLowerCase()) {\n case 'sqlite':\n case 'libsql':\n return 'sqlite';\n case 'duckdb':\n case 'json':\n // Query-level compatibility treats JSON as DuckDB. DDL callers that\n // need JSON's UUID-as-TEXT behavior should detect the adapter\n // structurally (exportTable) or request the `json` strategy directly.\n return 'duckdb';\n case 'postgres':\n case 'postgresql':\n case 'pg':\n return 'postgres';\n default:\n // Fall through to URL detection\n break;\n }\n }\n\n // Detect from URL\n const urlLower = url.toLowerCase();\n\n if (\n urlLower.startsWith('postgres://') ||\n urlLower.startsWith('postgresql://')\n ) {\n return 'postgres';\n }\n\n if (urlLower.endsWith('.duckdb') || urlLower.includes('duckdb')) {\n return 'duckdb';\n }\n\n // JSON adapter detection - matches .json extension, /json/ path, or -json- in name\n // This is needed because JSON adapter uses DuckDB internally and requires\n // inline UNIQUE constraints for UPSERT to work\n if (\n urlLower.endsWith('.json') ||\n urlLower.includes('/json/') ||\n urlLower.includes('-json')\n ) {\n // Query-level compatibility treats JSON as DuckDB. DDL callers that need\n // JSON's UUID-as-TEXT behavior should detect the adapter structurally\n // (exportTable) or request the `json` strategy directly.\n return 'duckdb';\n }\n\n // Default to SQLite for file-based databases\n if (\n urlLower.endsWith('.db') ||\n urlLower.endsWith('.sqlite') ||\n urlLower.endsWith('.sqlite3') ||\n urlLower === ':memory:'\n ) {\n return 'sqlite';\n }\n\n // Default fallback\n return 'sqlite';\n}\n"],"names":["SQLiteStrategy","DuckDBStrategy","JsonDuckDBStrategy","PostgresStrategy"],"mappings":";;;;;AA2BA,MAAM,aAAkD;AAAA,EACtD,QAAQ,IAAIA,eAAAA;AAAAA,EACZ,QAAQ,IAAIC,eAAAA;AAAAA,EACZ,MAAM,IAAIC,mBAAAA;AAAAA,EACV,UAAU,IAAIC,iBAAAA;AAChB;AAQO,SAAS,eAAe,QAAqC;AAClE,QAAM,WAAW,WAAW,MAAM;AAClC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,4BAA4B,MAAM,EAAE;AAAA,EACtD;AACA,SAAO;AACT;AAOO,SAAS,mBAAkC;AAChD,SAAO,OAAO,OAAO,UAAU;AACjC;AASO,SAAS,qBACd,QACA,QACmB;AACnB,QAAM,WAAW,eAAe,MAAM;AAEtC,SAAO;AAAA,IACL,aAAa,SAAS,oBAAoB,MAAM;AAAA,IAChD,SAAS,SAAS,gBAAgB,MAAM;AAAA,IACxC,UAAU,SAAS,iBAAiB,MAAM;AAAA,EAAA;AAE9C;AAUO,SAAS,uBACd,QACgB;AAChB,SAAO;AAAA,IACL,QAAQ,qBAAqB,QAAQ,QAAQ;AAAA,IAC7C,QAAQ,qBAAqB,QAAQ,QAAQ;AAAA,IAC7C,MAAM,qBAAqB,QAAQ,MAAM;AAAA,IACzC,UAAU,qBAAqB,QAAQ,UAAU;AAAA,EAAA;AAErD;AASO,SAAS,aAAa,KAAa,MAA+B;AAEvE,MAAI,MAAM;AACR,YAAQ,KAAK,eAAY;AAAA,MACvB,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAIH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,IAGP;AAAA,EAEN;AAGA,QAAM,WAAW,IAAI,YAAA;AAErB,MACE,SAAS,WAAW,aAAa,KACjC,SAAS,WAAW,eAAe,GACnC;AACA,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS,SAAS,KAAK,SAAS,SAAS,QAAQ,GAAG;AAC/D,WAAO;AAAA,EACT;AAKA,MACE,SAAS,SAAS,OAAO,KACzB,SAAS,SAAS,QAAQ,KAC1B,SAAS,SAAS,OAAO,GACzB;AAIA,WAAO;AAAA,EACT;AAGA,MACE,SAAS,SAAS,KAAK,KACvB,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,UAAU,KAC5B,aAAa,YACb;AACA,WAAO;AAAA,EACT;AAGA,SAAO;AACT;"}
@@ -0,0 +1,8 @@
1
+ import { SQLDataType } from '../types.js';
2
+ import { DuckDBStrategy } from './duckdb-strategy.js';
3
+ import { DatabaseEngine } from './types.js';
4
+ export declare class JsonDuckDBStrategy extends DuckDBStrategy {
5
+ readonly engine: DatabaseEngine;
6
+ mapType(type: SQLDataType): string;
7
+ }
8
+ //# sourceMappingURL=json-duckdb-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-duckdb-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/json-duckdb-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAU;IAEzC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;CAOnC"}
@@ -0,0 +1,14 @@
1
+ import { DuckDBStrategy } from "./duckdb-strategy.js";
2
+ class JsonDuckDBStrategy extends DuckDBStrategy {
3
+ engine = "json";
4
+ mapType(type) {
5
+ if (type === "UUID") {
6
+ return "TEXT";
7
+ }
8
+ return super.mapType(type);
9
+ }
10
+ }
11
+ export {
12
+ JsonDuckDBStrategy
13
+ };
14
+ //# sourceMappingURL=json-duckdb-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-duckdb-strategy.js","sources":["../../../src/schema/ddl/json-duckdb-strategy.ts"],"sourcesContent":["/**\n * JSON Adapter DDL Strategy\n *\n * The JSON adapter is backed by DuckDB, so it needs DuckDB's inline UNIQUE\n * constraints for UPSERT. However, DuckDB's Node API currently round-trips\n * native UUID values as their 128-bit numeric representation, so SMRT stores\n * UUID columns as TEXT for JSON-backed databases.\n */\n\nimport type { SQLDataType } from '../types.js';\nimport { DuckDBStrategy } from './duckdb-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class JsonDuckDBStrategy extends DuckDBStrategy {\n readonly engine: DatabaseEngine = 'json';\n\n mapType(type: SQLDataType): string {\n if (type === 'UUID') {\n return 'TEXT';\n }\n\n return super.mapType(type);\n }\n}\n"],"names":[],"mappings":";AAaO,MAAM,2BAA2B,eAAe;AAAA,EAC5C,SAAyB;AAAA,EAElC,QAAQ,MAA2B;AACjC,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,QAAQ,IAAI;AAAA,EAC3B;AACF;"}
@@ -0,0 +1,29 @@
1
+ import { SQLDataType, TriggerDefinition } from '../types.js';
2
+ import { BaseDDLStrategy } from './base-strategy.js';
3
+ import { DatabaseEngine } from './types.js';
4
+ export declare class PostgresStrategy extends BaseDDLStrategy {
5
+ readonly engine: DatabaseEngine;
6
+ /**
7
+ * Map types for PostgreSQL
8
+ * - JSON → JSONB (more efficient, supports indexing)
9
+ * - TIMESTAMP → TIMESTAMP WITH TIME ZONE (best practice)
10
+ */
11
+ mapType(type: SQLDataType): string;
12
+ /**
13
+ * Generate trigger for PostgreSQL
14
+ *
15
+ * PostgreSQL triggers require a separate function, then the trigger.
16
+ * For updated_at timestamps, we generate both.
17
+ */
18
+ protected generateTriggerStatement(tableName: string, trigger: TriggerDefinition): string;
19
+ /**
20
+ * PostgreSQL supports triggers
21
+ */
22
+ supportsTriggers(): boolean;
23
+ /**
24
+ * PostgreSQL doesn't require inline UNIQUE for UPSERT
25
+ * Both inline and separate indexes work with ON CONFLICT
26
+ */
27
+ requiresInlineUnique(): boolean;
28
+ }
29
+ //# sourceMappingURL=postgres-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/postgres-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAc;IAE7C;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAelC;;;;;OAKG;IACH,SAAS,CAAC,wBAAwB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,MAAM;IAkDT;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,102 @@
1
+ import { BaseDDLStrategy } from "./base-strategy.js";
2
+ class PostgresStrategy extends BaseDDLStrategy {
3
+ engine = "postgres";
4
+ /**
5
+ * Map types for PostgreSQL
6
+ * - JSON → JSONB (more efficient, supports indexing)
7
+ * - TIMESTAMP → TIMESTAMP WITH TIME ZONE (best practice)
8
+ */
9
+ mapType(type) {
10
+ switch (type) {
11
+ case "JSON":
12
+ return "JSONB";
13
+ // PostgreSQL JSONB is more efficient
14
+ case "TIMESTAMP":
15
+ return "TIMESTAMP";
16
+ // Could use TIMESTAMPTZ for timezone-aware
17
+ case "REAL":
18
+ return "DOUBLE PRECISION";
19
+ // PostgreSQL convention
20
+ case "UUID":
21
+ return "uuid";
22
+ // Native 16-byte uuid (R11) — vs 37-byte text
23
+ default:
24
+ return super.mapType(type);
25
+ }
26
+ }
27
+ /**
28
+ * Generate trigger for PostgreSQL
29
+ *
30
+ * PostgreSQL triggers require a separate function, then the trigger.
31
+ * For updated_at timestamps, we generate both.
32
+ */
33
+ generateTriggerStatement(tableName, trigger) {
34
+ if (trigger.name.includes("updated_at")) {
35
+ const functionName = `update_${tableName}_updated_at`;
36
+ let sql2 = `-- Function for ${trigger.name}
37
+ `;
38
+ sql2 += `CREATE OR REPLACE FUNCTION ${functionName}()
39
+ `;
40
+ sql2 += `RETURNS TRIGGER AS $$
41
+ `;
42
+ sql2 += `BEGIN
43
+ `;
44
+ sql2 += ` NEW.updated_at = CURRENT_TIMESTAMP;
45
+ `;
46
+ sql2 += ` RETURN NEW;
47
+ `;
48
+ sql2 += `END;
49
+ `;
50
+ sql2 += `$$ LANGUAGE plpgsql;
51
+
52
+ `;
53
+ sql2 += `-- Trigger
54
+ `;
55
+ sql2 += `DROP TRIGGER IF EXISTS "${trigger.name}" ON "${tableName}";
56
+ `;
57
+ sql2 += `CREATE TRIGGER "${trigger.name}"
58
+ `;
59
+ sql2 += `${trigger.when} ${trigger.event} ON "${tableName}"
60
+ `;
61
+ sql2 += `FOR EACH ROW
62
+ `;
63
+ sql2 += `EXECUTE FUNCTION ${functionName}();`;
64
+ return sql2;
65
+ }
66
+ let sql = `DROP TRIGGER IF EXISTS "${trigger.name}" ON "${tableName}";
67
+ `;
68
+ sql += `CREATE TRIGGER "${trigger.name}"
69
+ `;
70
+ sql += `${trigger.when} ${trigger.event} ON "${tableName}"
71
+ `;
72
+ sql += `FOR EACH ROW
73
+ `;
74
+ if (trigger.condition) {
75
+ sql += `WHEN (${trigger.condition})
76
+ `;
77
+ }
78
+ if (trigger.body.includes("EXECUTE")) {
79
+ sql += trigger.body;
80
+ } else {
81
+ sql += `EXECUTE FUNCTION ${trigger.body}`;
82
+ }
83
+ return `${sql};`;
84
+ }
85
+ /**
86
+ * PostgreSQL supports triggers
87
+ */
88
+ supportsTriggers() {
89
+ return true;
90
+ }
91
+ /**
92
+ * PostgreSQL doesn't require inline UNIQUE for UPSERT
93
+ * Both inline and separate indexes work with ON CONFLICT
94
+ */
95
+ requiresInlineUnique() {
96
+ return false;
97
+ }
98
+ }
99
+ export {
100
+ PostgresStrategy
101
+ };
102
+ //# sourceMappingURL=postgres-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-strategy.js","sources":["../../../src/schema/ddl/postgres-strategy.ts"],"sourcesContent":["/**\n * PostgreSQL DDL Strategy\n *\n * PostgreSQL-specific DDL generation with the following characteristics:\n * - JSONB type for JSON columns (more efficient than JSON)\n * - Native BOOLEAN type\n * - Full trigger support with PL/pgSQL functions\n * - UNIQUE can be inline or separate indexes\n * - Supports CAST in DEFAULT values\n */\n\nimport type { SQLDataType, TriggerDefinition } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class PostgresStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'postgres';\n\n /**\n * Map types for PostgreSQL\n * - JSON → JSONB (more efficient, supports indexing)\n * - TIMESTAMP → TIMESTAMP WITH TIME ZONE (best practice)\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'JSON':\n return 'JSONB'; // PostgreSQL JSONB is more efficient\n case 'TIMESTAMP':\n return 'TIMESTAMP'; // Could use TIMESTAMPTZ for timezone-aware\n case 'REAL':\n return 'DOUBLE PRECISION'; // PostgreSQL convention\n case 'UUID':\n return 'uuid'; // Native 16-byte uuid (R11) — vs 37-byte text\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Generate trigger for PostgreSQL\n *\n * PostgreSQL triggers require a separate function, then the trigger.\n * For updated_at timestamps, we generate both.\n */\n protected generateTriggerStatement(\n tableName: string,\n trigger: TriggerDefinition,\n ): string {\n // For simple triggers, we need to create a function first\n // This is PostgreSQL's two-step trigger process\n\n // Check if this is an updated_at trigger\n if (trigger.name.includes('updated_at')) {\n // Generate the function and trigger for updated_at\n const functionName = `update_${tableName}_updated_at`;\n\n let sql = `-- Function for ${trigger.name}\\n`;\n sql += `CREATE OR REPLACE FUNCTION ${functionName}()\\n`;\n sql += `RETURNS TRIGGER AS $$\\n`;\n sql += `BEGIN\\n`;\n sql += ` NEW.updated_at = CURRENT_TIMESTAMP;\\n`;\n sql += ` RETURN NEW;\\n`;\n sql += `END;\\n`;\n sql += `$$ LANGUAGE plpgsql;\\n\\n`;\n\n sql += `-- Trigger\\n`;\n sql += `DROP TRIGGER IF EXISTS \"${trigger.name}\" ON \"${tableName}\";\\n`;\n sql += `CREATE TRIGGER \"${trigger.name}\"\\n`;\n sql += `${trigger.when} ${trigger.event} ON \"${tableName}\"\\n`;\n sql += `FOR EACH ROW\\n`;\n sql += `EXECUTE FUNCTION ${functionName}();`;\n\n return sql;\n }\n\n // For custom triggers, use the provided body\n let sql = `DROP TRIGGER IF EXISTS \"${trigger.name}\" ON \"${tableName}\";\\n`;\n sql += `CREATE TRIGGER \"${trigger.name}\"\\n`;\n sql += `${trigger.when} ${trigger.event} ON \"${tableName}\"\\n`;\n sql += `FOR EACH ROW\\n`;\n\n if (trigger.condition) {\n sql += `WHEN (${trigger.condition})\\n`;\n }\n\n // PostgreSQL triggers need EXECUTE FUNCTION or EXECUTE PROCEDURE\n // If body contains a function call, use it directly\n if (trigger.body.includes('EXECUTE')) {\n sql += trigger.body;\n } else {\n // Wrap in anonymous DO block or assume it's a function name\n sql += `EXECUTE FUNCTION ${trigger.body}`;\n }\n\n return `${sql};`;\n }\n\n /**\n * PostgreSQL supports triggers\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * PostgreSQL doesn't require inline UNIQUE for UPSERT\n * Both inline and separate indexes work with ON CONFLICT\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":["sql"],"mappings":";AAeO,MAAM,yBAAyB,gBAAgB;AAAA,EAC3C,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlC,QAAQ,MAA2B;AACjC,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT;AACE,eAAO,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQU,yBACR,WACA,SACQ;AAKR,QAAI,QAAQ,KAAK,SAAS,YAAY,GAAG;AAEvC,YAAM,eAAe,UAAU,SAAS;AAExC,UAAIA,OAAM,mBAAmB,QAAQ,IAAI;AAAA;AACzCA,cAAO,8BAA8B,YAAY;AAAA;AACjDA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AAAA;AAEPA,cAAO;AAAA;AACPA,cAAO,2BAA2B,QAAQ,IAAI,SAAS,SAAS;AAAA;AAChEA,cAAO,mBAAmB,QAAQ,IAAI;AAAA;AACtCA,cAAO,GAAG,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ,SAAS;AAAA;AACxDA,cAAO;AAAA;AACPA,cAAO,oBAAoB,YAAY;AAEvC,aAAOA;AAAAA,IACT;AAGA,QAAI,MAAM,2BAA2B,QAAQ,IAAI,SAAS,SAAS;AAAA;AACnE,WAAO,mBAAmB,QAAQ,IAAI;AAAA;AACtC,WAAO,GAAG,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ,SAAS;AAAA;AACxD,WAAO;AAAA;AAEP,QAAI,QAAQ,WAAW;AACrB,aAAO,SAAS,QAAQ,SAAS;AAAA;AAAA,IACnC;AAIA,QAAI,QAAQ,KAAK,SAAS,SAAS,GAAG;AACpC,aAAO,QAAQ;AAAA,IACjB,OAAO;AAEL,aAAO,oBAAoB,QAAQ,IAAI;AAAA,IACzC;AAEA,WAAO,GAAG,GAAG;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
@@ -0,0 +1,38 @@
1
+ import { SQLDataType } from '../types.js';
2
+ import { BaseDDLStrategy } from './base-strategy.js';
3
+ import { DatabaseEngine } from './types.js';
4
+ export declare class SQLiteStrategy extends BaseDDLStrategy {
5
+ readonly engine: DatabaseEngine;
6
+ /**
7
+ * SQLite JSON-path index expression — uses the JSON1 `json_extract` function
8
+ * since SQLite has no native `->>` operator pre-3.38 and we want broad
9
+ * compatibility with hosted SQLite/libSQL variants.
10
+ */
11
+ protected formatJsonPathIndexExpression(jsonColumn: string, path: string): string;
12
+ /**
13
+ * Map types for SQLite
14
+ * - BOOLEAN → INTEGER (SQLite uses 0/1)
15
+ * - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)
16
+ * - TIMESTAMP → DATETIME (SQLite convention)
17
+ */
18
+ mapType(type: SQLDataType): string;
19
+ /**
20
+ * Format boolean as 0/1 for SQLite.
21
+ *
22
+ * `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to
23
+ * the shared safe formatter and bridges this override in as the boolean
24
+ * literals — so SQLite booleans render as 0/1 and no CAST expression is ever
25
+ * emitted in a DEFAULT clause.
26
+ */
27
+ protected formatBooleanDefault(value: any): string;
28
+ /**
29
+ * SQLite supports triggers
30
+ */
31
+ supportsTriggers(): boolean;
32
+ /**
33
+ * SQLite doesn't require inline UNIQUE for UPSERT
34
+ * Both inline and separate indexes work
35
+ */
36
+ requiresInlineUnique(): boolean;
37
+ }
38
+ //# sourceMappingURL=sqlite-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAY;IAE3C;;;;OAIG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAoBT;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAalC;;;;;;;OAOG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAIlD;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,74 @@
1
+ import { isSafeIdentifier, isSafeIdentifierPath, quoteIdentifier, quoteStringLiteral } from "../sql-identifiers.js";
2
+ import { BaseDDLStrategy } from "./base-strategy.js";
3
+ class SQLiteStrategy extends BaseDDLStrategy {
4
+ engine = "sqlite";
5
+ /**
6
+ * SQLite JSON-path index expression — uses the JSON1 `json_extract` function
7
+ * since SQLite has no native `->>` operator pre-3.38 and we want broad
8
+ * compatibility with hosted SQLite/libSQL variants.
9
+ */
10
+ formatJsonPathIndexExpression(jsonColumn, path) {
11
+ if (!isSafeIdentifier(jsonColumn)) {
12
+ throw new Error(
13
+ `[DDL] Unsafe JSON-path index column "${jsonColumn}": must be a simple identifier`
14
+ );
15
+ }
16
+ if (!isSafeIdentifierPath(path)) {
17
+ throw new Error(
18
+ `[DDL] Unsafe JSON-path index path "${path}": must be a simple (dotted) identifier`
19
+ );
20
+ }
21
+ return `json_extract(${quoteIdentifier(jsonColumn)}, ${quoteStringLiteral(
22
+ `$.${path}`
23
+ )})`;
24
+ }
25
+ /**
26
+ * Map types for SQLite
27
+ * - BOOLEAN → INTEGER (SQLite uses 0/1)
28
+ * - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)
29
+ * - TIMESTAMP → DATETIME (SQLite convention)
30
+ */
31
+ mapType(type) {
32
+ switch (type) {
33
+ case "BOOLEAN":
34
+ return "INTEGER";
35
+ // SQLite uses 0/1 for booleans
36
+ case "JSON":
37
+ return "TEXT";
38
+ // SQLite stores JSON as TEXT
39
+ case "TIMESTAMP":
40
+ return "DATETIME";
41
+ // SQLite convention
42
+ default:
43
+ return super.mapType(type);
44
+ }
45
+ }
46
+ /**
47
+ * Format boolean as 0/1 for SQLite.
48
+ *
49
+ * `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to
50
+ * the shared safe formatter and bridges this override in as the boolean
51
+ * literals — so SQLite booleans render as 0/1 and no CAST expression is ever
52
+ * emitted in a DEFAULT clause.
53
+ */
54
+ formatBooleanDefault(value) {
55
+ return value ? "1" : "0";
56
+ }
57
+ /**
58
+ * SQLite supports triggers
59
+ */
60
+ supportsTriggers() {
61
+ return true;
62
+ }
63
+ /**
64
+ * SQLite doesn't require inline UNIQUE for UPSERT
65
+ * Both inline and separate indexes work
66
+ */
67
+ requiresInlineUnique() {
68
+ return false;
69
+ }
70
+ }
71
+ export {
72
+ SQLiteStrategy
73
+ };
74
+ //# sourceMappingURL=sqlite-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-strategy.js","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"sourcesContent":["/**\n * SQLite DDL Strategy\n *\n * SQLite-specific DDL generation with the following characteristics:\n * - No CAST expressions in DEFAULT values\n * - BOOLEAN stored as INTEGER (0/1)\n * - JSON stored as TEXT (with JSON1 extension functions)\n * - Supports triggers with SQLite syntax\n * - UNIQUE can be inline or separate indexes\n */\n\nimport {\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type { SQLDataType } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class SQLiteStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'sqlite';\n\n /**\n * SQLite JSON-path index expression — uses the JSON1 `json_extract` function\n * since SQLite has no native `->>` operator pre-3.38 and we want broad\n * compatibility with hosted SQLite/libSQL variants.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n // Column must be a simple identifier (no dots); only the path may be dotted.\n // Mirrors the `assertSafeJsonPathTarget` file-level helper in\n // base-strategy.ts so this SQLite override doesn't silently accept dotted\n // columns that PG/DuckDB (and renderIndexTarget) reject.\n if (!isSafeIdentifier(jsonColumn)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index column \"${jsonColumn}\": must be a simple identifier`,\n );\n }\n if (!isSafeIdentifierPath(path)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index path \"${path}\": must be a simple (dotted) identifier`,\n );\n }\n return `json_extract(${quoteIdentifier(jsonColumn)}, ${quoteStringLiteral(\n `$.${path}`,\n )})`;\n }\n\n /**\n * Map types for SQLite\n * - BOOLEAN → INTEGER (SQLite uses 0/1)\n * - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)\n * - TIMESTAMP → DATETIME (SQLite convention)\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'BOOLEAN':\n return 'INTEGER'; // SQLite uses 0/1 for booleans\n case 'JSON':\n return 'TEXT'; // SQLite stores JSON as TEXT\n case 'TIMESTAMP':\n return 'DATETIME'; // SQLite convention\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Format boolean as 0/1 for SQLite.\n *\n * `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to\n * the shared safe formatter and bridges this override in as the boolean\n * literals — so SQLite booleans render as 0/1 and no CAST expression is ever\n * emitted in a DEFAULT clause.\n */\n protected formatBooleanDefault(value: any): string {\n return value ? '1' : '0';\n }\n\n /**\n * SQLite supports triggers\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * SQLite doesn't require inline UNIQUE for UPSERT\n * Both inline and separate indexes work\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,gBAAgB;AAAA,EACzC,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,8BACR,YACA,MACQ;AAKR,QAAI,CAAC,iBAAiB,UAAU,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,wCAAwC,UAAU;AAAA,MAAA;AAAA,IAEtD;AACA,QAAI,CAAC,qBAAqB,IAAI,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,sCAAsC,IAAI;AAAA,MAAA;AAAA,IAE9C;AACA,WAAO,gBAAgB,gBAAgB,UAAU,CAAC,KAAK;AAAA,MACrD,KAAK,IAAI;AAAA,IAAA,CACV;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,MAA2B;AACjC,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT;AACE,eAAO,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,qBAAqB,OAAoB;AACjD,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
@@ -0,0 +1,114 @@
1
+ import { SchemaDefinition, SQLDataType } from '../types.js';
2
+ /**
3
+ * Supported database engines
4
+ * - sqlite: SQLite/LibSQL databases
5
+ * - duckdb: DuckDB databases
6
+ * - json: JSON adapter backed by DuckDB, with UUID stored as TEXT for stable
7
+ * JS round-tripping
8
+ * - postgres: PostgreSQL databases
9
+ */
10
+ export type DatabaseEngine = 'sqlite' | 'duckdb' | 'json' | 'postgres';
11
+ /**
12
+ * Engine-specific DDL output
13
+ */
14
+ export interface EngineSpecificDDL {
15
+ /** CREATE TABLE statement */
16
+ createTable: string;
17
+ /** CREATE INDEX statements (separate from table for SQLite/Postgres) */
18
+ indexes: string[];
19
+ /** CREATE TRIGGER statements (not supported by DuckDB) */
20
+ triggers: string[];
21
+ }
22
+ /**
23
+ * Multi-engine DDL for manifest storage
24
+ */
25
+ export interface MultiEngineDDL {
26
+ sqlite: EngineSpecificDDL;
27
+ duckdb: EngineSpecificDDL;
28
+ json: EngineSpecificDDL;
29
+ postgres: EngineSpecificDDL;
30
+ }
31
+ /**
32
+ * DDL Generator Strategy Interface
33
+ *
34
+ * Each database engine implements this interface to generate
35
+ * engine-specific DDL from a SchemaDefinition.
36
+ */
37
+ export interface DDLStrategy {
38
+ /** The database engine this strategy generates DDL for */
39
+ readonly engine: DatabaseEngine;
40
+ /**
41
+ * Generate CREATE TABLE statement
42
+ * @param schema - The schema definition to generate DDL for
43
+ * @returns CREATE TABLE SQL statement
44
+ */
45
+ generateCreateTable(schema: SchemaDefinition): string;
46
+ /**
47
+ * Generate CREATE INDEX statements
48
+ * For DuckDB, UNIQUE indexes should be inline constraints, not separate indexes
49
+ * @param schema - The schema definition
50
+ * @returns Array of CREATE INDEX SQL statements
51
+ */
52
+ generateIndexes(schema: SchemaDefinition): string[];
53
+ /**
54
+ * Generate CREATE TRIGGER statements
55
+ * DuckDB does not support triggers - returns empty array
56
+ * @param schema - The schema definition
57
+ * @returns Array of CREATE TRIGGER SQL statements
58
+ */
59
+ generateTriggers(schema: SchemaDefinition): string[];
60
+ /**
61
+ * Map abstract SQL type to engine-specific type
62
+ * @param type - Abstract SQL data type
63
+ * @returns Engine-specific SQL type string
64
+ */
65
+ mapType(type: SQLDataType): string;
66
+ /**
67
+ * Format a default value for the engine
68
+ * SQLite: No CAST expressions
69
+ * DuckDB/Postgres: Can use CAST
70
+ * @param value - The default value
71
+ * @param type - The column type
72
+ * @returns Formatted default value SQL
73
+ */
74
+ formatDefaultValue(value: any, type: SQLDataType): string;
75
+ /**
76
+ * Whether this engine supports database triggers
77
+ * @returns true if triggers are supported
78
+ */
79
+ supportsTriggers(): boolean;
80
+ /**
81
+ * Whether this engine requires inline UNIQUE constraints for UPSERT
82
+ * DuckDB requires this due to issue #12684
83
+ * @returns true if UNIQUE must be inline
84
+ */
85
+ requiresInlineUnique(): boolean;
86
+ /**
87
+ * Generate a single column definition for use in ALTER TABLE ADD COLUMN
88
+ * @param columnName - The column name
89
+ * @param columnDef - The column definition
90
+ * @returns Column definition SQL fragment (e.g. '"name" TEXT DEFAULT '')
91
+ */
92
+ generateColumnDefinition(columnName: string, columnDef: import('../types').ColumnDefinition): string;
93
+ }
94
+ /**
95
+ * Column generation options
96
+ */
97
+ export interface ColumnGenerationOptions {
98
+ /** Include NOT NULL constraint */
99
+ includeNotNull?: boolean;
100
+ /** Include DEFAULT clause */
101
+ includeDefault?: boolean;
102
+ /** Include PRIMARY KEY constraint */
103
+ includePrimaryKey?: boolean;
104
+ }
105
+ /**
106
+ * Table generation options
107
+ */
108
+ export interface TableGenerationOptions {
109
+ /** Whether to use IF NOT EXISTS */
110
+ ifNotExists?: boolean;
111
+ /** Additional table constraints to append */
112
+ additionalConstraints?: string[];
113
+ }
114
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAEtD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAEpD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAErD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAEnC;;;;;;;OAOG;IACH,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAE1D;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;;;OAIG;IACH,oBAAoB,IAAI,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,UAAU,EAAE,gBAAgB,GAC7C,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC"}