@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 @@
1
+ {"version":3,"file":"tracker.js","sources":["../../src/migrations/tracker.ts"],"sourcesContent":["/**\n * Migration Tracker\n *\n * Manages migration state, tracking which migrations have been applied,\n * and providing idempotent migration application.\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { hostname } from 'node:os';\nimport { createLogger } from '@happyvertical/logger';\nimport { detectEngine } from '../schema/ddl/index.js';\n// DatabaseEngine comes from the DDL layer (the json-inclusive type that\n// `detectEngine` actually returns), matching `SchemaComparer` in differ.ts.\n// The migration stack supports the JSON adapter post-R11, so the tracker's\n// engine type must include 'json' too — the narrower `migrations/types`\n// alias would reject it.\nimport type { DatabaseEngine } from '../schema/ddl/types.js';\nimport type {\n DriftReport,\n MigrationDefinition,\n MigrationResult,\n MigrationStatus,\n SchemaMigrationRecord,\n} from '../schema/types.js';\nimport { CREATE_SMRT_SCHEMA_MIGRATIONS_TABLE } from '../system/schema.js';\nimport { computeChecksum, verifyChecksum } from './checksum.js';\nimport type {\n ApplyMigrationsOptions,\n DatabaseInterface,\n MigrationTrackerOptions,\n RollbackOptions,\n} from './types.js';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Row type for _smrt_schema_migrations table\n */\ninterface MigrationRow {\n id: string;\n name: string;\n version: string;\n checksum: string;\n applied_checksum?: string | null;\n applied_at: string;\n execution_time_ms?: number | null;\n package_name?: string | null;\n source_file?: string | null;\n status: string;\n error_message?: string | null;\n attempts: number;\n is_reversible: number | boolean;\n rolled_back_at?: string | null;\n applied_by?: string | null;\n batch: number;\n}\n\n/**\n * Default options for MigrationTracker\n */\nconst DEFAULT_OPTIONS = {\n lockTimeout: 30000,\n statementTimeout: 60000,\n useConcurrentIndexes: true,\n};\n\nclass AtomicMigrationRollback extends Error {\n constructor(\n public readonly results: MigrationResult[],\n public readonly failed: MigrationResult,\n ) {\n super(`Atomic migration batch failed at ${failed.name}`);\n }\n}\n\nconst CONCURRENT_INDEX_STATEMENT_RE =\n /(?:(?:CREATE\\s+(?:UNIQUE\\s+)?INDEX|DROP\\s+INDEX)\\s+CONCURRENTLY|REINDEX(?:\\s*\\([^)]*\\))?\\s+(?:INDEX|TABLE|SCHEMA|DATABASE|SYSTEM)\\s+CONCURRENTLY)/i;\n\nfunction findConcurrentIndexStatement(\n definitions: MigrationDefinition[],\n): { migrationName: string; statement: string } | null {\n for (const definition of definitions) {\n const statement = definition.up.find((sql) =>\n CONCURRENT_INDEX_STATEMENT_RE.test(sql),\n );\n\n if (statement) {\n return {\n migrationName: definition.id,\n statement,\n };\n }\n }\n\n return null;\n}\n\n/**\n * MigrationTracker class\n *\n * Provides migration tracking and state management:\n * - Initializes the _smrt_schema_migrations tracking table\n * - Tracks applied migrations with checksums\n * - Provides idempotent migration application\n * - Supports rollback via DOWN scripts\n * - Handles PostgreSQL-specific concerns (CONCURRENTLY, lock timeout)\n */\nexport class MigrationTracker {\n private db: DatabaseInterface;\n private options: Required<Omit<MigrationTrackerOptions, 'db' | 'engineHint'>>;\n private engineHint?: string;\n private dbEngine: DatabaseEngine;\n /**\n * Memoized initialization promise. Storing the in-flight promise (rather\n * than a `boolean` flag set after the DDL completes) makes `initialize()`\n * safe under concurrency: multiple parallel callers all `await` the same\n * promise instead of independently re-running the DDL. On error the slot\n * is cleared so the next caller retries — a transient failure doesn't\n * permanently poison the instance.\n */\n private initializePromise: Promise<void> | null = null;\n private currentBatch: number | null = null;\n\n constructor(options: MigrationTrackerOptions) {\n this.db = options.db;\n this.options = {\n lockTimeout: options.lockTimeout ?? DEFAULT_OPTIONS.lockTimeout,\n statementTimeout:\n options.statementTimeout ?? DEFAULT_OPTIONS.statementTimeout,\n useConcurrentIndexes:\n options.useConcurrentIndexes ?? DEFAULT_OPTIONS.useConcurrentIndexes,\n };\n this.engineHint = options.engineHint;\n this.dbEngine = this.detectDbEngine();\n }\n\n /**\n * Detect the database engine. Honors an explicit `engineHint` (passed via\n * `MigrationTrackerOptions`) before falling back to URL parsing — this is\n * the same `detectEngine` contract used by `SchemaComparer` and the rest\n * of the migration stack, so the tracker stays consistent with the DDL\n * the orchestrator generated.\n */\n private detectDbEngine(): DatabaseEngine {\n const dbWithConfig = this.db as DatabaseInterface & {\n config?: { url?: string };\n };\n const url = this.db.url || dbWithConfig.config?.url || '';\n return detectEngine(url, this.engineHint);\n }\n\n /**\n * Get the current database engine\n */\n getEngine(): DatabaseEngine {\n return this.dbEngine;\n }\n\n /**\n * Initialize the migrations tracking table\n */\n async initialize(): Promise<void> {\n if (!this.initializePromise) {\n this.initializePromise = this.runInitializeDdl().catch((error) => {\n this.initializePromise = null;\n throw error;\n });\n }\n return this.initializePromise;\n }\n\n private async runInitializeDdl(): Promise<void> {\n // Parse and execute each statement in the DDL\n const statements = CREATE_SMRT_SCHEMA_MIGRATIONS_TABLE.split(';')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n\n for (const statement of statements) {\n await this.db.query(statement);\n }\n }\n\n /**\n * Get all applied migrations ordered by applied_at\n */\n async getAppliedMigrations(): Promise<SchemaMigrationRecord[]> {\n await this.initialize();\n\n const result = await this.db.query(\n `SELECT * FROM _smrt_schema_migrations WHERE status = 'completed' ORDER BY applied_at ASC`,\n );\n\n return (result.rows as MigrationRow[]).map((row) => ({\n ...row,\n applied_at: new Date(row.applied_at),\n rolled_back_at: row.rolled_back_at ? new Date(row.rolled_back_at) : null,\n is_reversible: Boolean(row.is_reversible),\n })) as SchemaMigrationRecord[];\n }\n\n /**\n * Get pending migrations (defined but not applied)\n */\n async getPendingMigrations(\n definitions: MigrationDefinition[],\n ): Promise<MigrationDefinition[]> {\n const applied = await this.getAppliedMigrations();\n const appliedNames = new Set(applied.map((m) => m.name));\n return definitions.filter((d) => !appliedNames.has(d.id));\n }\n\n /**\n * Check if a migration has been applied\n */\n async isApplied(migrationId: string): Promise<boolean> {\n await this.initialize();\n\n const result = await this.db.query(\n `SELECT 1 FROM _smrt_schema_migrations WHERE name = ? AND status = 'completed' LIMIT 1`,\n migrationId,\n );\n\n return result.rows.length > 0;\n }\n\n /**\n * Get a single migration record by name\n */\n async getMigration(name: string): Promise<SchemaMigrationRecord | null> {\n await this.initialize();\n\n const result = await this.db.query(\n `SELECT * FROM _smrt_schema_migrations WHERE name = ? LIMIT 1`,\n name,\n );\n\n if (result.rows.length === 0) return null;\n\n const row = result.rows[0] as MigrationRow;\n return {\n ...row,\n applied_at: new Date(row.applied_at),\n rolled_back_at: row.rolled_back_at ? new Date(row.rolled_back_at) : null,\n is_reversible: Boolean(row.is_reversible),\n } as SchemaMigrationRecord;\n }\n\n /**\n * Get the next batch number\n */\n async getNextBatch(): Promise<number> {\n await this.initialize();\n\n const result = await this.db.query(\n `SELECT MAX(batch) as max_batch FROM _smrt_schema_migrations`,\n );\n\n const row = result.rows[0] as { max_batch: number | null } | undefined;\n return (row?.max_batch ?? 0) + 1;\n }\n\n /**\n * Detect drift between migration definitions and applied migrations\n */\n async detectDrift(\n definitions: MigrationDefinition[],\n ): Promise<DriftReport[]> {\n const applied = await this.getAppliedMigrations();\n const reports: DriftReport[] = [];\n\n const appliedMap = new Map(applied.map((m) => [m.name, m]));\n const definitionMap = new Map(definitions.map((d) => [d.id, d]));\n\n // Check each applied migration against definitions\n for (const record of applied) {\n const definition = definitionMap.get(record.name);\n\n if (!definition) {\n // Migration applied but definition is missing\n reports.push({\n migration_name: record.name,\n expected_checksum: 'N/A',\n actual_checksum: record.checksum,\n drift_type: 'unknown_in_db',\n recommendation:\n 'Migration exists in database but definition is missing. Manual cleanup may be required.',\n });\n continue;\n }\n\n // Check checksum\n const currentChecksum = computeChecksum(definition.up);\n const verification = verifyChecksum(\n currentChecksum,\n record.checksum,\n record.applied_checksum,\n );\n\n if (!verification.valid) {\n const driftType = verification.drift ?? 'db_modified';\n reports.push({\n migration_name: record.name,\n expected_checksum: record.checksum,\n actual_checksum: currentChecksum,\n drift_type: driftType,\n recommendation:\n driftType === 'file_modified'\n ? 'Migration file was modified after application. Create a new migration instead.'\n : 'Database schema was modified outside of migrations. Review and reconcile manually.',\n });\n }\n }\n\n return reports;\n }\n\n /**\n * Apply a single migration\n */\n async apply(\n definition: MigrationDefinition,\n options: ApplyMigrationsOptions = {},\n ): Promise<MigrationResult> {\n await this.initialize();\n const startTime = Date.now();\n const checksum = computeChecksum(definition.up);\n\n // Check if migration record already exists\n const existing = await this.getMigration(definition.id);\n\n if (existing) {\n // Handle based on existing status\n switch (existing.status) {\n case 'completed':\n if (!options.force && existing.checksum !== checksum) {\n return {\n success: false,\n applied: false,\n skipped: false,\n name: definition.id,\n checksum,\n execution_time_ms: 0,\n error: `Migration ${definition.id} checksum mismatch. Was already applied with different checksum. Use --force to override.`,\n };\n }\n\n if (!options.force && !options.reconcile) {\n // Already applied, skip\n return {\n success: true,\n applied: false,\n skipped: true,\n name: definition.id,\n checksum,\n execution_time_ms: 0,\n };\n }\n break;\n\n case 'failed':\n if (!options.force && !options.reconcile) {\n return {\n success: false,\n applied: false,\n skipped: false,\n name: definition.id,\n checksum,\n execution_time_ms: 0,\n error: `Migration ${definition.id} previously failed: ${existing.error_message || 'Unknown error'}. Use --force to retry.`,\n };\n }\n // Will retry below\n break;\n\n case 'running':\n if (!options.force) {\n return {\n success: false,\n applied: false,\n skipped: false,\n name: definition.id,\n checksum,\n execution_time_ms: 0,\n error: `Migration ${definition.id} is currently running or was interrupted. Use --force to retry if the previous run crashed.`,\n };\n }\n // Will retry below\n break;\n\n case 'rolled_back':\n // Rolled back migrations can be re-applied without --force\n break;\n }\n }\n\n if (options.dryRun) {\n return {\n success: true,\n applied: false,\n skipped: false,\n name: definition.id,\n checksum,\n execution_time_ms: Date.now() - startTime,\n };\n }\n\n // Get batch number\n if (this.currentBatch === null) {\n this.currentBatch = await this.getNextBatch();\n }\n\n // Determine if we're updating an existing record or inserting new\n const id = existing?.id || randomUUID();\n const attempts = (existing?.attempts || 0) + 1;\n\n if (existing) {\n // Update existing record to 'running'\n await this.db.query(\n `UPDATE _smrt_schema_migrations\n SET status = 'running', checksum = ?, attempts = ?, error_message = NULL, batch = ?, applied_by = ?, applied_at = CURRENT_TIMESTAMP\n WHERE id = ?`,\n checksum,\n attempts,\n this.currentBatch,\n hostname(),\n id,\n );\n } else {\n // Insert new record\n await this.db.query(\n `INSERT INTO _smrt_schema_migrations\n (id, name, version, checksum, status, attempts, is_reversible, package_name, source_file, applied_by, batch)\n VALUES (?, ?, ?, ?, 'running', 1, ?, ?, ?, ?, ?)`,\n id,\n definition.id,\n definition.version,\n checksum,\n (definition.is_reversible ?? definition.down.length > 0) ? 1 : 0,\n definition.package_name ?? null,\n definition.source_file ?? null,\n hostname(),\n this.currentBatch,\n );\n }\n\n try {\n // Execute the migration\n await this.executeStatements(definition.up, options);\n\n // Mark as completed\n const executionTime = Date.now() - startTime;\n await this.db.query(\n `UPDATE _smrt_schema_migrations\n SET status = 'completed', execution_time_ms = ?, applied_checksum = ?, applied_at = CURRENT_TIMESTAMP\n WHERE id = ?`,\n executionTime,\n checksum,\n id,\n );\n\n return {\n success: true,\n applied: true,\n skipped: false,\n name: definition.id,\n checksum,\n execution_time_ms: executionTime,\n };\n } catch (error) {\n const migrationError =\n error instanceof Error ? error : new Error(String(error));\n\n // Mark as failed. In an outer atomic Postgres transaction, a DDL error\n // aborts the transaction and this status write must be skipped so the\n // caller can roll back the whole batch while preserving the root error.\n try {\n await this.db.query(\n `UPDATE _smrt_schema_migrations\n SET status = 'failed', error_message = ?\n WHERE id = ?`,\n migrationError.message,\n id,\n );\n } catch (persistError) {\n // Preserve the migration failure; status persistence is secondary and\n // may be impossible until the surrounding transaction rolls back.\n const persistMessage =\n persistError instanceof Error\n ? persistError.message\n : String(persistError);\n logger.error(\n `Failed to persist failed status for migration ${definition.id}: ${persistMessage}`,\n );\n }\n\n return {\n success: false,\n applied: false,\n skipped: false,\n name: definition.id,\n checksum,\n execution_time_ms: Date.now() - startTime,\n error: migrationError,\n };\n }\n }\n\n /**\n * Apply multiple migrations in order\n */\n async applyAll(\n definitions: MigrationDefinition[],\n options: ApplyMigrationsOptions = {},\n ): Promise<MigrationResult[]> {\n if (options.atomic && !options.dryRun) {\n if (!this.db.transaction) {\n throw new Error(\n 'Atomic migration batches require a database adapter with transaction support.',\n );\n }\n\n if (this.dbEngine === 'postgres') {\n const concurrentStatement = findConcurrentIndexStatement(definitions);\n if (concurrentStatement) {\n throw new Error(\n `Atomic migration batch cannot include CONCURRENTLY index DDL in ${concurrentStatement.migrationName}; PostgreSQL forbids CONCURRENTLY inside a transaction.`,\n );\n }\n }\n\n try {\n return await this.db.transaction(async (tx) => {\n const txDb = {\n ...tx,\n transaction: async <T>(\n callback: (transactionDb: DatabaseInterface) => Promise<T>,\n ) => callback(tx as DatabaseInterface),\n } as DatabaseInterface;\n const txTracker = new MigrationTracker({\n db: txDb,\n lockTimeout: this.options.lockTimeout,\n statementTimeout: this.options.statementTimeout,\n useConcurrentIndexes: false,\n });\n const results = await txTracker.applyAll(definitions, {\n ...options,\n atomic: false,\n continueOnError: false,\n postgresSafe: false,\n });\n const failed = results.find((result) => !result.success);\n\n if (failed) {\n throw new AtomicMigrationRollback(results, failed);\n }\n\n return results;\n });\n } catch (error) {\n if (error instanceof AtomicMigrationRollback) {\n return error.results.map((result) => {\n if (!result.success || !result.applied) {\n return result;\n }\n\n return {\n ...result,\n success: false,\n applied: false,\n skipped: false,\n rolled_back: true,\n error: new Error(\n `Rolled back because migration ${error.failed.name} failed`,\n ),\n };\n });\n }\n\n throw error;\n }\n }\n\n const results: MigrationResult[] = [];\n this.currentBatch = await this.getNextBatch();\n\n for (const definition of definitions) {\n const result = await this.apply(definition, options);\n results.push(result);\n options.onProgress?.(result);\n\n if (!result.success && !options.continueOnError) {\n break;\n }\n }\n\n this.currentBatch = null;\n return results;\n }\n\n /**\n * Rollback a migration\n */\n async rollback(\n name: string,\n definition: MigrationDefinition,\n options: RollbackOptions = {},\n ): Promise<MigrationResult> {\n await this.initialize();\n const startTime = Date.now();\n const checksum = computeChecksum(definition.down);\n\n const record = await this.getMigration(name);\n if (!record) {\n return {\n success: false,\n name,\n checksum,\n execution_time_ms: 0,\n error: new Error(`Migration ${name} not found in database`),\n };\n }\n\n if (record.status !== 'completed') {\n return {\n success: false,\n name,\n checksum,\n execution_time_ms: 0,\n error: new Error(\n `Migration ${name} is not in completed state (current: ${record.status})`,\n ),\n };\n }\n\n if (!definition.down.length) {\n return {\n success: false,\n name,\n checksum,\n execution_time_ms: 0,\n error: new Error(\n `Migration ${name} is not reversible (no down statements)`,\n ),\n };\n }\n\n if (options.dryRun) {\n return {\n success: true,\n name,\n checksum,\n execution_time_ms: Date.now() - startTime,\n rolled_back: true,\n };\n }\n\n try {\n // Execute DOWN statements\n await this.executeStatements(definition.down, {});\n\n // Mark as rolled back\n await this.db.query(\n `UPDATE _smrt_schema_migrations\n SET status = 'rolled_back', rolled_back_at = CURRENT_TIMESTAMP\n WHERE name = ?`,\n name,\n );\n\n return {\n success: true,\n name,\n checksum,\n execution_time_ms: Date.now() - startTime,\n rolled_back: true,\n };\n } catch (error) {\n return {\n success: false,\n name,\n checksum,\n execution_time_ms: Date.now() - startTime,\n error: error instanceof Error ? error : new Error(String(error)),\n rolled_back: false,\n };\n }\n }\n\n /**\n * Get migration history with optional filtering\n */\n async getHistory(\n options: { limit?: number; since?: Date; status?: MigrationStatus } = {},\n ): Promise<SchemaMigrationRecord[]> {\n await this.initialize();\n\n let sql = `SELECT * FROM _smrt_schema_migrations WHERE 1=1`;\n const params: unknown[] = [];\n\n if (options.status) {\n sql += ` AND status = ?`;\n params.push(options.status);\n }\n\n if (options.since) {\n sql += ` AND applied_at >= ?`;\n params.push(options.since.toISOString());\n }\n\n sql += ` ORDER BY applied_at DESC`;\n\n if (options.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n const result = await this.db.query(sql, ...params);\n\n return (result.rows as MigrationRow[]).map((row) => ({\n ...row,\n applied_at: new Date(row.applied_at),\n rolled_back_at: row.rolled_back_at ? new Date(row.rolled_back_at) : null,\n is_reversible: Boolean(row.is_reversible),\n })) as SchemaMigrationRecord[];\n }\n\n /**\n * Execute SQL statements with appropriate transaction handling\n */\n private async executeStatements(\n statements: string[],\n options: ApplyMigrationsOptions,\n ): Promise<void> {\n if (this.dbEngine === 'postgres' && options.postgresSafe) {\n await this.executePostgresStatements(statements);\n } else {\n await this.executeWithTransaction(statements);\n }\n }\n\n /**\n * Execute statements within a transaction (SQLite/DuckDB)\n */\n private async executeWithTransaction(statements: string[]): Promise<void> {\n if (this.db.transaction) {\n await this.db.transaction(async (tx) => {\n for (const sql of statements) {\n await tx.query(sql);\n }\n });\n } else {\n // Fallback to sequential execution\n for (const sql of statements) {\n await this.db.query(sql);\n }\n }\n }\n\n /**\n * Execute statements with PostgreSQL-specific handling\n *\n * - CONCURRENTLY statements run outside transaction\n * - Regular statements run in transaction with lock_timeout\n *\n * Both CREATE and DROP variants of CONCURRENTLY must be detected — Postgres\n * forbids `DROP INDEX CONCURRENTLY` inside a transaction block, just like\n * the create variant. Issue #1165: the migration generator emits\n * `DROP INDEX CONCURRENTLY` for shape-drift recreates and orphan-index\n * cleanups, so the regex needs to cover both keywords.\n */\n private async executePostgresStatements(statements: string[]): Promise<void> {\n const { concurrent: finalConcurrent, regular: finalRegular } =\n planPostgresStatements(statements, !!this.options.useConcurrentIndexes);\n\n // CONCURRENTLY statements come from `planPostgresStatements`, which\n // also pushes any post-transform CREATE/DROP CONCURRENTLY into the\n // outside-transaction set. The original `concurrentStatements` list\n // is folded in there too so callers below see one merged stream.\n\n // Execute regular statements in transaction with timeouts\n if (finalRegular.length > 0 && this.db.transaction) {\n await this.db.transaction(async (tx) => {\n // Set session-level timeouts\n await tx.query(\n `SET LOCAL lock_timeout = '${this.options.lockTimeout}ms'`,\n );\n await tx.query(\n `SET LOCAL statement_timeout = '${this.options.statementTimeout}ms'`,\n );\n\n for (const sql of finalRegular) {\n await tx.query(sql);\n }\n });\n } else if (finalRegular.length > 0) {\n for (const sql of finalRegular) {\n await this.db.query(sql);\n }\n }\n\n // Execute CONCURRENTLY statements outside transaction\n for (const sql of finalConcurrent) {\n // Set lock timeout for the session\n await this.db.query(`SET lock_timeout = '${this.options.lockTimeout}ms'`);\n await this.db.query(sql);\n }\n }\n}\n\n/**\n * Split a batch of SQL statements into a transaction-safe set and a\n * concurrent set, applying `--postgres-safe` rewriting if requested.\n *\n * Exported for unit testing and to give external callers a way to\n * reason about what the tracker would execute in PostgreSQL safe mode.\n *\n * Rules:\n * - Statements already containing `CONCURRENTLY` for CREATE/DROP INDEX or\n * REINDEX operations always go to the concurrent set — Postgres rejects\n * them inside transactions.\n * - When `useConcurrentIndexes` is true, plain `CREATE INDEX` and plain\n * `DROP INDEX` are rewritten to use `CONCURRENTLY`, then routed to\n * the concurrent set. This is what the CLI `--postgres-safe` flag and\n * the auto-migrate path rely on for issue #1165's shape-drift drops.\n * - All other statements stay in the regular (transaction) set.\n */\nexport function planPostgresStatements(\n statements: string[],\n useConcurrentIndexes: boolean,\n): { concurrent: string[]; regular: string[] } {\n const concurrentRegex = CONCURRENT_INDEX_STATEMENT_RE;\n\n const concurrent: string[] = [];\n const regular: string[] = [];\n\n for (const sql of statements) {\n if (concurrentRegex.test(sql)) {\n concurrent.push(sql);\n continue;\n }\n if (useConcurrentIndexes) {\n if (/CREATE\\s+(UNIQUE\\s+)?INDEX\\s+(?!CONCURRENTLY)/i.test(sql)) {\n concurrent.push(\n sql.replace(\n /CREATE\\s+(UNIQUE\\s+)?INDEX\\s+/i,\n 'CREATE $1INDEX CONCURRENTLY ',\n ),\n );\n continue;\n }\n if (/DROP\\s+INDEX\\s+(?!CONCURRENTLY)/i.test(sql)) {\n concurrent.push(\n sql.replace(/DROP\\s+INDEX\\s+/i, 'DROP INDEX CONCURRENTLY '),\n );\n continue;\n }\n }\n regular.push(sql);\n }\n\n return { concurrent, regular };\n}\n"],"names":["results"],"mappings":";;;;;;AAiCA,MAAM,SAAS,aAAa,EAAE,OAAO,QAAQ;AA2B7C,MAAM,kBAAkB;AAAA,EACtB,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,sBAAsB;AACxB;AAEA,MAAM,gCAAgC,MAAM;AAAA,EAC1C,YACkB,SACA,QAChB;AACA,UAAM,oCAAoC,OAAO,IAAI,EAAE;AAHvC,SAAA,UAAA;AACA,SAAA,SAAA;AAAA,EAGlB;AAAA,EAJkB;AAAA,EACA;AAIpB;AAEA,MAAM,gCACJ;AAEF,SAAS,6BACP,aACqD;AACrD,aAAW,cAAc,aAAa;AACpC,UAAM,YAAY,WAAW,GAAG;AAAA,MAAK,CAAC,QACpC,8BAA8B,KAAK,GAAG;AAAA,IAAA;AAGxC,QAAI,WAAW;AACb,aAAO;AAAA,QACL,eAAe,WAAW;AAAA,QAC1B;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAYO,MAAM,iBAAiB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAA0C;AAAA,EAC1C,eAA8B;AAAA,EAEtC,YAAY,SAAkC;AAC5C,SAAK,KAAK,QAAQ;AAClB,SAAK,UAAU;AAAA,MACb,aAAa,QAAQ,eAAe,gBAAgB;AAAA,MACpD,kBACE,QAAQ,oBAAoB,gBAAgB;AAAA,MAC9C,sBACE,QAAQ,wBAAwB,gBAAgB;AAAA,IAAA;AAEpD,SAAK,aAAa,QAAQ;AAC1B,SAAK,WAAW,KAAK,eAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,iBAAiC;AACvC,UAAM,eAAe,KAAK;AAG1B,UAAM,MAAM,KAAK,GAAG,OAAO,aAAa,QAAQ,OAAO;AACvD,WAAO,aAAa,KAAK,KAAK,UAAU;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,YAA4B;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAA4B;AAChC,QAAI,CAAC,KAAK,mBAAmB;AAC3B,WAAK,oBAAoB,KAAK,iBAAA,EAAmB,MAAM,CAAC,UAAU;AAChE,aAAK,oBAAoB;AACzB,cAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,mBAAkC;AAE9C,UAAM,aAAa,oCAAoC,MAAM,GAAG,EAC7D,IAAI,CAAC,MAAM,EAAE,KAAA,CAAM,EACnB,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAE7B,eAAW,aAAa,YAAY;AAClC,YAAM,KAAK,GAAG,MAAM,SAAS;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAyD;AAC7D,UAAM,KAAK,WAAA;AAEX,UAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC3B;AAAA,IAAA;AAGF,WAAQ,OAAO,KAAwB,IAAI,CAAC,SAAS;AAAA,MACnD,GAAG;AAAA,MACH,YAAY,IAAI,KAAK,IAAI,UAAU;AAAA,MACnC,gBAAgB,IAAI,iBAAiB,IAAI,KAAK,IAAI,cAAc,IAAI;AAAA,MACpE,eAAe,QAAQ,IAAI,aAAa;AAAA,IAAA,EACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBACJ,aACgC;AAChC,UAAM,UAAU,MAAM,KAAK,qBAAA;AAC3B,UAAM,eAAe,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACvD,WAAO,YAAY,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,aAAuC;AACrD,UAAM,KAAK,WAAA;AAEX,UAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC3B;AAAA,MACA;AAAA,IAAA;AAGF,WAAO,OAAO,KAAK,SAAS;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,MAAqD;AACtE,UAAM,KAAK,WAAA;AAEX,UAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC3B;AAAA,MACA;AAAA,IAAA;AAGF,QAAI,OAAO,KAAK,WAAW,EAAG,QAAO;AAErC,UAAM,MAAM,OAAO,KAAK,CAAC;AACzB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY,IAAI,KAAK,IAAI,UAAU;AAAA,MACnC,gBAAgB,IAAI,iBAAiB,IAAI,KAAK,IAAI,cAAc,IAAI;AAAA,MACpE,eAAe,QAAQ,IAAI,aAAa;AAAA,IAAA;AAAA,EAE5C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAgC;AACpC,UAAM,KAAK,WAAA;AAEX,UAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC3B;AAAA,IAAA;AAGF,UAAM,MAAM,OAAO,KAAK,CAAC;AACzB,YAAQ,KAAK,aAAa,KAAK;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YACJ,aACwB;AACxB,UAAM,UAAU,MAAM,KAAK,qBAAA;AAC3B,UAAM,UAAyB,CAAA;AAEZ,QAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,UAAM,gBAAgB,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAG/D,eAAW,UAAU,SAAS;AAC5B,YAAM,aAAa,cAAc,IAAI,OAAO,IAAI;AAEhD,UAAI,CAAC,YAAY;AAEf,gBAAQ,KAAK;AAAA,UACX,gBAAgB,OAAO;AAAA,UACvB,mBAAmB;AAAA,UACnB,iBAAiB,OAAO;AAAA,UACxB,YAAY;AAAA,UACZ,gBACE;AAAA,QAAA,CACH;AACD;AAAA,MACF;AAGA,YAAM,kBAAkB,gBAAgB,WAAW,EAAE;AACrD,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAGT,UAAI,CAAC,aAAa,OAAO;AACvB,cAAM,YAAY,aAAa,SAAS;AACxC,gBAAQ,KAAK;AAAA,UACX,gBAAgB,OAAO;AAAA,UACvB,mBAAmB,OAAO;AAAA,UAC1B,iBAAiB;AAAA,UACjB,YAAY;AAAA,UACZ,gBACE,cAAc,kBACV,mFACA;AAAA,QAAA,CACP;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MACJ,YACA,UAAkC,IACR;AAC1B,UAAM,KAAK,WAAA;AACX,UAAM,YAAY,KAAK,IAAA;AACvB,UAAM,WAAW,gBAAgB,WAAW,EAAE;AAG9C,UAAM,WAAW,MAAM,KAAK,aAAa,WAAW,EAAE;AAEtD,QAAI,UAAU;AAEZ,cAAQ,SAAS,QAAA;AAAA,QACf,KAAK;AACH,cAAI,CAAC,QAAQ,SAAS,SAAS,aAAa,UAAU;AACpD,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,MAAM,WAAW;AAAA,cACjB;AAAA,cACA,mBAAmB;AAAA,cACnB,OAAO,aAAa,WAAW,EAAE;AAAA,YAAA;AAAA,UAErC;AAEA,cAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,WAAW;AAExC,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,MAAM,WAAW;AAAA,cACjB;AAAA,cACA,mBAAmB;AAAA,YAAA;AAAA,UAEvB;AACA;AAAA,QAEF,KAAK;AACH,cAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,WAAW;AACxC,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,MAAM,WAAW;AAAA,cACjB;AAAA,cACA,mBAAmB;AAAA,cACnB,OAAO,aAAa,WAAW,EAAE,uBAAuB,SAAS,iBAAiB,eAAe;AAAA,YAAA;AAAA,UAErG;AAEA;AAAA,QAEF,KAAK;AACH,cAAI,CAAC,QAAQ,OAAO;AAClB,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,MAAM,WAAW;AAAA,cACjB;AAAA,cACA,mBAAmB;AAAA,cACnB,OAAO,aAAa,WAAW,EAAE;AAAA,YAAA;AAAA,UAErC;AAEA;AAAA,MAIA;AAAA,IAEN;AAEA,QAAI,QAAQ,QAAQ;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB;AAAA,QACA,mBAAmB,KAAK,QAAQ;AAAA,MAAA;AAAA,IAEpC;AAGA,QAAI,KAAK,iBAAiB,MAAM;AAC9B,WAAK,eAAe,MAAM,KAAK,aAAA;AAAA,IACjC;AAGA,UAAM,KAAK,UAAU,MAAM,WAAA;AAC3B,UAAM,YAAY,UAAU,YAAY,KAAK;AAE7C,QAAI,UAAU;AAEZ,YAAM,KAAK,GAAG;AAAA,QACZ;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,SAAA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,OAAO;AAEL,YAAM,KAAK,GAAG;AAAA,QACZ;AAAA;AAAA;AAAA,QAGA;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX;AAAA,QACC,WAAW,iBAAiB,WAAW,KAAK,SAAS,IAAK,IAAI;AAAA,QAC/D,WAAW,gBAAgB;AAAA,QAC3B,WAAW,eAAe;AAAA,QAC1B,SAAA;AAAA,QACA,KAAK;AAAA,MAAA;AAAA,IAET;AAEA,QAAI;AAEF,YAAM,KAAK,kBAAkB,WAAW,IAAI,OAAO;AAGnD,YAAM,gBAAgB,KAAK,IAAA,IAAQ;AACnC,YAAM,KAAK,GAAG;AAAA,QACZ;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAGF,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB;AAAA,QACA,mBAAmB;AAAA,MAAA;AAAA,IAEvB,SAAS,OAAO;AACd,YAAM,iBACJ,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAK1D,UAAI;AACF,cAAM,KAAK,GAAG;AAAA,UACZ;AAAA;AAAA;AAAA,UAGA,eAAe;AAAA,UACf;AAAA,QAAA;AAAA,MAEJ,SAAS,cAAc;AAGrB,cAAM,iBACJ,wBAAwB,QACpB,aAAa,UACb,OAAO,YAAY;AACzB,eAAO;AAAA,UACL,iDAAiD,WAAW,EAAE,KAAK,cAAc;AAAA,QAAA;AAAA,MAErF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB;AAAA,QACA,mBAAmB,KAAK,IAAA,IAAQ;AAAA,QAChC,OAAO;AAAA,MAAA;AAAA,IAEX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SACJ,aACA,UAAkC,IACN;AAC5B,QAAI,QAAQ,UAAU,CAAC,QAAQ,QAAQ;AACrC,UAAI,CAAC,KAAK,GAAG,aAAa;AACxB,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,KAAK,aAAa,YAAY;AAChC,cAAM,sBAAsB,6BAA6B,WAAW;AACpE,YAAI,qBAAqB;AACvB,gBAAM,IAAI;AAAA,YACR,mEAAmE,oBAAoB,aAAa;AAAA,UAAA;AAAA,QAExG;AAAA,MACF;AAEA,UAAI;AACF,eAAO,MAAM,KAAK,GAAG,YAAY,OAAO,OAAO;AAC7C,gBAAM,OAAO;AAAA,YACX,GAAG;AAAA,YACH,aAAa,OACX,aACG,SAAS,EAAuB;AAAA,UAAA;AAEvC,gBAAM,YAAY,IAAI,iBAAiB;AAAA,YACrC,IAAI;AAAA,YACJ,aAAa,KAAK,QAAQ;AAAA,YAC1B,kBAAkB,KAAK,QAAQ;AAAA,YAC/B,sBAAsB;AAAA,UAAA,CACvB;AACD,gBAAMA,WAAU,MAAM,UAAU,SAAS,aAAa;AAAA,YACpD,GAAG;AAAA,YACH,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,cAAc;AAAA,UAAA,CACf;AACD,gBAAM,SAASA,SAAQ,KAAK,CAAC,WAAW,CAAC,OAAO,OAAO;AAEvD,cAAI,QAAQ;AACV,kBAAM,IAAI,wBAAwBA,UAAS,MAAM;AAAA,UACnD;AAEA,iBAAOA;AAAAA,QACT,CAAC;AAAA,MACH,SAAS,OAAO;AACd,YAAI,iBAAiB,yBAAyB;AAC5C,iBAAO,MAAM,QAAQ,IAAI,CAAC,WAAW;AACnC,gBAAI,CAAC,OAAO,WAAW,CAAC,OAAO,SAAS;AACtC,qBAAO;AAAA,YACT;AAEA,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,aAAa;AAAA,cACb,OAAO,IAAI;AAAA,gBACT,iCAAiC,MAAM,OAAO,IAAI;AAAA,cAAA;AAAA,YACpD;AAAA,UAEJ,CAAC;AAAA,QACH;AAEA,cAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,UAA6B,CAAA;AACnC,SAAK,eAAe,MAAM,KAAK,aAAA;AAE/B,eAAW,cAAc,aAAa;AACpC,YAAM,SAAS,MAAM,KAAK,MAAM,YAAY,OAAO;AACnD,cAAQ,KAAK,MAAM;AACnB,cAAQ,aAAa,MAAM;AAE3B,UAAI,CAAC,OAAO,WAAW,CAAC,QAAQ,iBAAiB;AAC/C;AAAA,MACF;AAAA,IACF;AAEA,SAAK,eAAe;AACpB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SACJ,MACA,YACA,UAA2B,CAAA,GACD;AAC1B,UAAM,KAAK,WAAA;AACX,UAAM,YAAY,KAAK,IAAA;AACvB,UAAM,WAAW,gBAAgB,WAAW,IAAI;AAEhD,UAAM,SAAS,MAAM,KAAK,aAAa,IAAI;AAC3C,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,QACnB,OAAO,IAAI,MAAM,aAAa,IAAI,wBAAwB;AAAA,MAAA;AAAA,IAE9D;AAEA,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,QACnB,OAAO,IAAI;AAAA,UACT,aAAa,IAAI,wCAAwC,OAAO,MAAM;AAAA,QAAA;AAAA,MACxE;AAAA,IAEJ;AAEA,QAAI,CAAC,WAAW,KAAK,QAAQ;AAC3B,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,QACnB,OAAO,IAAI;AAAA,UACT,aAAa,IAAI;AAAA,QAAA;AAAA,MACnB;AAAA,IAEJ;AAEA,QAAI,QAAQ,QAAQ;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,mBAAmB,KAAK,IAAA,IAAQ;AAAA,QAChC,aAAa;AAAA,MAAA;AAAA,IAEjB;AAEA,QAAI;AAEF,YAAM,KAAK,kBAAkB,WAAW,MAAM,CAAA,CAAE;AAGhD,YAAM,KAAK,GAAG;AAAA,QACZ;AAAA;AAAA;AAAA,QAGA;AAAA,MAAA;AAGF,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,mBAAmB,KAAK,IAAA,IAAQ;AAAA,QAChC,aAAa;AAAA,MAAA;AAAA,IAEjB,SAAS,OAAO;AACd,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,mBAAmB,KAAK,IAAA,IAAQ;AAAA,QAChC,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,QAC/D,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WACJ,UAAsE,IACpC;AAClC,UAAM,KAAK,WAAA;AAEX,QAAI,MAAM;AACV,UAAM,SAAoB,CAAA;AAE1B,QAAI,QAAQ,QAAQ;AAClB,aAAO;AACP,aAAO,KAAK,QAAQ,MAAM;AAAA,IAC5B;AAEA,QAAI,QAAQ,OAAO;AACjB,aAAO;AACP,aAAO,KAAK,QAAQ,MAAM,YAAA,CAAa;AAAA,IACzC;AAEA,WAAO;AAEP,QAAI,QAAQ,OAAO;AACjB,aAAO;AACP,aAAO,KAAK,QAAQ,KAAK;AAAA,IAC3B;AAEA,UAAM,SAAS,MAAM,KAAK,GAAG,MAAM,KAAK,GAAG,MAAM;AAEjD,WAAQ,OAAO,KAAwB,IAAI,CAAC,SAAS;AAAA,MACnD,GAAG;AAAA,MACH,YAAY,IAAI,KAAK,IAAI,UAAU;AAAA,MACnC,gBAAgB,IAAI,iBAAiB,IAAI,KAAK,IAAI,cAAc,IAAI;AAAA,MACpE,eAAe,QAAQ,IAAI,aAAa;AAAA,IAAA,EACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBACZ,YACA,SACe;AACf,QAAI,KAAK,aAAa,cAAc,QAAQ,cAAc;AACxD,YAAM,KAAK,0BAA0B,UAAU;AAAA,IACjD,OAAO;AACL,YAAM,KAAK,uBAAuB,UAAU;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,uBAAuB,YAAqC;AACxE,QAAI,KAAK,GAAG,aAAa;AACvB,YAAM,KAAK,GAAG,YAAY,OAAO,OAAO;AACtC,mBAAW,OAAO,YAAY;AAC5B,gBAAM,GAAG,MAAM,GAAG;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AAEL,iBAAW,OAAO,YAAY;AAC5B,cAAM,KAAK,GAAG,MAAM,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAc,0BAA0B,YAAqC;AAC3E,UAAM,EAAE,YAAY,iBAAiB,SAAS,aAAA,IAC5C,uBAAuB,YAAY,CAAC,CAAC,KAAK,QAAQ,oBAAoB;AAQxE,QAAI,aAAa,SAAS,KAAK,KAAK,GAAG,aAAa;AAClD,YAAM,KAAK,GAAG,YAAY,OAAO,OAAO;AAEtC,cAAM,GAAG;AAAA,UACP,6BAA6B,KAAK,QAAQ,WAAW;AAAA,QAAA;AAEvD,cAAM,GAAG;AAAA,UACP,kCAAkC,KAAK,QAAQ,gBAAgB;AAAA,QAAA;AAGjE,mBAAW,OAAO,cAAc;AAC9B,gBAAM,GAAG,MAAM,GAAG;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH,WAAW,aAAa,SAAS,GAAG;AAClC,iBAAW,OAAO,cAAc;AAC9B,cAAM,KAAK,GAAG,MAAM,GAAG;AAAA,MACzB;AAAA,IACF;AAGA,eAAW,OAAO,iBAAiB;AAEjC,YAAM,KAAK,GAAG,MAAM,uBAAuB,KAAK,QAAQ,WAAW,KAAK;AACxE,YAAM,KAAK,GAAG,MAAM,GAAG;AAAA,IACzB;AAAA,EACF;AACF;AAmBO,SAAS,uBACd,YACA,sBAC6C;AAC7C,QAAM,kBAAkB;AAExB,QAAM,aAAuB,CAAA;AAC7B,QAAM,UAAoB,CAAA;AAE1B,aAAW,OAAO,YAAY;AAC5B,QAAI,gBAAgB,KAAK,GAAG,GAAG;AAC7B,iBAAW,KAAK,GAAG;AACnB;AAAA,IACF;AACA,QAAI,sBAAsB;AACxB,UAAI,iDAAiD,KAAK,GAAG,GAAG;AAC9D,mBAAW;AAAA,UACT,IAAI;AAAA,YACF;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAEF;AAAA,MACF;AACA,UAAI,mCAAmC,KAAK,GAAG,GAAG;AAChD,mBAAW;AAAA,UACT,IAAI,QAAQ,oBAAoB,0BAA0B;AAAA,QAAA;AAE5D;AAAA,MACF;AAAA,IACF;AACA,YAAQ,KAAK,GAAG;AAAA,EAClB;AAEA,SAAO,EAAE,YAAY,QAAA;AACvB;"}
@@ -0,0 +1,221 @@
1
+ import { DatabaseInterface, ColumnDefinitionWithName as SqlColumnDefinitionWithName, IndexDefinition as SqlIndexDefinition, TableSchemaInfo as SqlTableSchemaInfo } from '@happyvertical/sql';
2
+ import { MigrationResult } from '../schema/types.js';
3
+ export type { SqlColumnDefinitionWithName, DatabaseInterface, SqlIndexDefinition, SqlTableSchemaInfo, };
4
+ export type { DriftReport, MigrationDefinition, MigrationResult, MigrationStatus, SchemaChange, SchemaDiff, SchemaMigrationRecord, } from '../schema/types.js';
5
+ /**
6
+ * Options for the MigrationTracker
7
+ */
8
+ export interface MigrationTrackerOptions {
9
+ /** Database interface from @happyvertical/sql */
10
+ db: DatabaseInterface;
11
+ /** PostgreSQL lock timeout in milliseconds (default: 30000) */
12
+ lockTimeout?: number;
13
+ /** PostgreSQL statement timeout in milliseconds (default: 60000) */
14
+ statementTimeout?: number;
15
+ /** Use CREATE INDEX CONCURRENTLY for indexes in PostgreSQL (default: true) */
16
+ useConcurrentIndexes?: boolean;
17
+ /**
18
+ * Explicit engine hint used when `db.url` is empty or ambiguous (e.g. JSON
19
+ * adapter, or adapters that expose the URL on `db.config?.url`). Without
20
+ * it the tracker falls back to URL-only detection and may skip
21
+ * Postgres-specific safety paths (CONCURRENTLY rewrites, lock timeouts)
22
+ * on connections whose caller meant Postgres.
23
+ */
24
+ engineHint?: string;
25
+ }
26
+ /**
27
+ * Table schema info from database introspection
28
+ */
29
+ export interface TableSchemaInfo {
30
+ tableName: string;
31
+ columns: Record<string, ColumnInfo>;
32
+ indexes: IndexInfo[];
33
+ foreignKeys?: ForeignKeyInfo[];
34
+ }
35
+ /**
36
+ * Column info from database introspection
37
+ */
38
+ export interface ColumnInfo {
39
+ name: string;
40
+ type: string;
41
+ notNull?: boolean;
42
+ defaultValue?: unknown;
43
+ primaryKey?: boolean;
44
+ }
45
+ /**
46
+ * Index info from database introspection
47
+ */
48
+ export interface IndexInfo {
49
+ name: string;
50
+ columns: string[];
51
+ unique?: boolean;
52
+ }
53
+ /**
54
+ * Foreign key info from database introspection
55
+ */
56
+ export interface ForeignKeyInfo {
57
+ column: string;
58
+ referencesTable: string;
59
+ referencesColumn: string;
60
+ onDelete?: string;
61
+ onUpdate?: string;
62
+ }
63
+ /**
64
+ * Column definition with name for alterTable operations
65
+ */
66
+ export interface ColumnDefinitionWithName {
67
+ name: string;
68
+ type: string;
69
+ notNull?: boolean;
70
+ defaultValue?: unknown;
71
+ unique?: boolean;
72
+ primaryKey?: boolean;
73
+ }
74
+ /**
75
+ * Index definition for alterTable operations
76
+ */
77
+ export interface IndexDefinition {
78
+ name: string;
79
+ columns: string[];
80
+ unique?: boolean;
81
+ where?: string;
82
+ }
83
+ /**
84
+ * Database engine type
85
+ */
86
+ export type DatabaseEngine = 'sqlite' | 'postgres' | 'duckdb';
87
+ /**
88
+ * Options for batch migration application
89
+ */
90
+ export interface ApplyMigrationsOptions {
91
+ /** Apply the full batch in one transaction and roll back all applied changes on first failure */
92
+ atomic?: boolean;
93
+ /** Continue applying migrations even if one fails */
94
+ continueOnError?: boolean;
95
+ /** Dry run - don't actually apply migrations */
96
+ dryRun?: boolean;
97
+ /** Force application even if checksums don't match */
98
+ force?: boolean;
99
+ /**
100
+ * Reconcile migration history with live schema drift.
101
+ *
102
+ * When true, the tracker may re-run a migration if the caller has already
103
+ * independently determined the change is still required. Completed
104
+ * migrations still require a checksum match. Failed migrations may be retried
105
+ * with the current definition because they were never applied successfully.
106
+ * Running migrations still require `force` because SMRT does not currently
107
+ * have a heartbeat or lock-owner check that can prove the original process
108
+ * is dead.
109
+ */
110
+ reconcile?: boolean;
111
+ /** Use PostgreSQL-safe operations (CONCURRENTLY, lock timeout) */
112
+ postgresSafe?: boolean;
113
+ /** Called after each migration attempt completes, before the batch continues */
114
+ onProgress?: (result: MigrationResult) => void;
115
+ }
116
+ /**
117
+ * Options for rollback operations
118
+ */
119
+ export interface RollbackOptions {
120
+ /** Number of migrations to rollback (default: 1) */
121
+ steps?: number;
122
+ /** Rollback to a specific migration (exclusive - migrations after this will be rolled back) */
123
+ to?: string;
124
+ /** Dry run - don't actually rollback */
125
+ dryRun?: boolean;
126
+ /** Skip confirmation prompt */
127
+ force?: boolean;
128
+ }
129
+ /**
130
+ * Options for migration file parsing
131
+ */
132
+ export interface ParseMigrationOptions {
133
+ /** Expected format of migration file */
134
+ format?: 'sql' | 'typescript';
135
+ }
136
+ /**
137
+ * Parsed migration file content
138
+ */
139
+ export interface ParsedMigrationFile {
140
+ /** Migration ID extracted from file */
141
+ id: string;
142
+ /** Description extracted from file */
143
+ description?: string;
144
+ /** UP SQL statements */
145
+ up: string[];
146
+ /** DOWN SQL statements */
147
+ down: string[];
148
+ /** Dependencies extracted from file */
149
+ dependencies?: string[];
150
+ }
151
+ /**
152
+ * Migration mode configuration
153
+ */
154
+ export type MigrationMode = 'dynamic';
155
+ /**
156
+ * Data migration for updating existing data (e.g., STI discriminator upgrades)
157
+ */
158
+ export interface DataMigration {
159
+ type: 'data';
160
+ table: string;
161
+ description: string;
162
+ up: DataMigrationStatement[];
163
+ down: DataMigrationStatement[];
164
+ }
165
+ /**
166
+ * Single data migration statement with optional parameters
167
+ */
168
+ export interface DataMigrationStatement {
169
+ sql: string;
170
+ params?: unknown[];
171
+ }
172
+ /**
173
+ * STI discriminator migration (specific type of data migration)
174
+ */
175
+ export interface StiDiscriminatorMigration extends DataMigration {
176
+ type: 'data';
177
+ migrationCategory: 'sti-discriminator';
178
+ oldValue: string;
179
+ newValue: string;
180
+ table: string;
181
+ column: string;
182
+ }
183
+ /**
184
+ * Result of applying a data migration
185
+ */
186
+ export interface DataMigrationResult {
187
+ success: boolean;
188
+ name: string;
189
+ rowsAffected?: number;
190
+ execution_time_ms: number;
191
+ error?: string;
192
+ }
193
+ /**
194
+ * Migrations configuration for smrt.config.js
195
+ */
196
+ export interface MigrationsConfig {
197
+ /** Directory for migration files (default: './migrations') */
198
+ directory?: string;
199
+ /** Tracking table name (default: '_smrt_schema_migrations') */
200
+ table?: string;
201
+ /** Default file format (default: 'sql') */
202
+ format?: 'sql' | 'typescript';
203
+ /** Naming scheme (default: 'sequence') */
204
+ naming?: 'sequence' | 'timestamp';
205
+ /** Migration mode (default: 'dynamic') */
206
+ mode?: MigrationMode;
207
+ /** Or configure by environment */
208
+ modeByEnvironment?: Record<string, MigrationMode>;
209
+ /** Auto-generate DOWN scripts (default: true) */
210
+ autoGenerateDown?: boolean;
211
+ /** PostgreSQL-specific options */
212
+ postgres?: {
213
+ /** Use CONCURRENTLY for index creation (default: true) */
214
+ useConcurrently?: boolean;
215
+ /** Lock timeout for migrations (default: '30s') */
216
+ lockTimeout?: string;
217
+ /** Statement timeout for migrations (default: '60s') */
218
+ statementTimeout?: string;
219
+ };
220
+ }
221
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrations/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Barrel file for migrations module
3
+ * This file exists because vite's getCoreEntries() expects src/migrations.ts
4
+ * when the package.json export is ./dist/migrations.js
5
+ */
6
+ export * from './migrations/index.js';
7
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { BackfillTracker } from "./migrations/backfill-tracker.js";
2
+ import { computeChecksum, normalizeSQL, shortChecksum, verifyChecksum } from "./migrations/checksum.js";
3
+ import { SchemaComparer, generateSchemaDiff, getSQLFromDiff, hasActionableChanges } from "./migrations/differ.js";
4
+ import { MigrationGenerator, createMigrationDefinition, generateMigrationSequence, generateMigrationTimestamp } from "./migrations/generator.js";
5
+ import { getPendingSchemaStatements, migrateSmrtSchemas } from "./migrations/orchestrate.js";
6
+ import { MigrationTracker, planPostgresStatements } from "./migrations/tracker.js";
7
+ export {
8
+ BackfillTracker,
9
+ MigrationGenerator,
10
+ MigrationTracker,
11
+ SchemaComparer,
12
+ computeChecksum,
13
+ createMigrationDefinition,
14
+ generateMigrationSequence,
15
+ generateMigrationTimestamp,
16
+ generateSchemaDiff,
17
+ getPendingSchemaStatements,
18
+ getSQLFromDiff,
19
+ hasActionableChanges,
20
+ migrateSmrtSchemas,
21
+ normalizeSQL,
22
+ planPostgresStatements,
23
+ shortChecksum,
24
+ verifyChecksum
25
+ };
26
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,56 @@
1
+ const balanced = (a, b, str) => {
2
+ const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
3
+ const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
4
+ const r = ma !== null && mb != null && range(ma, mb, str);
5
+ return r && {
6
+ start: r[0],
7
+ end: r[1],
8
+ pre: str.slice(0, r[0]),
9
+ body: str.slice(r[0] + ma.length, r[1]),
10
+ post: str.slice(r[1] + mb.length)
11
+ };
12
+ };
13
+ const maybeMatch = (reg, str) => {
14
+ const m = str.match(reg);
15
+ return m ? m[0] : null;
16
+ };
17
+ const range = (a, b, str) => {
18
+ let begs, beg, left, right = void 0, result;
19
+ let ai = str.indexOf(a);
20
+ let bi = str.indexOf(b, ai + 1);
21
+ let i = ai;
22
+ if (ai >= 0 && bi > 0) {
23
+ if (a === b) {
24
+ return [ai, bi];
25
+ }
26
+ begs = [];
27
+ left = str.length;
28
+ while (i >= 0 && !result) {
29
+ if (i === ai) {
30
+ begs.push(i);
31
+ ai = str.indexOf(a, i + 1);
32
+ } else if (begs.length === 1) {
33
+ const r = begs.pop();
34
+ if (r !== void 0)
35
+ result = [r, bi];
36
+ } else {
37
+ beg = begs.pop();
38
+ if (beg !== void 0 && beg < left) {
39
+ left = beg;
40
+ right = bi;
41
+ }
42
+ bi = str.indexOf(b, i + 1);
43
+ }
44
+ i = ai < bi && ai >= 0 ? ai : bi;
45
+ }
46
+ if (begs.length && right !== void 0) {
47
+ result = [left, right];
48
+ }
49
+ }
50
+ return result;
51
+ };
52
+ export {
53
+ balanced,
54
+ range
55
+ };
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../../../../../node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js"],"sourcesContent":["export const balanced = (a, b, str) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a;\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b;\n const r = ma !== null && mb != null && range(ma, mb, str);\n return (r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n });\n};\nconst maybeMatch = (reg, str) => {\n const m = str.match(reg);\n return m ? m[0] : null;\n};\nexport const range = (a, b, str) => {\n let begs, beg, left, right = undefined, result;\n let ai = str.indexOf(a);\n let bi = str.indexOf(b, ai + 1);\n let i = ai;\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n }\n else if (begs.length === 1) {\n const r = begs.pop();\n if (r !== undefined)\n result = [r, bi];\n }\n else {\n beg = begs.pop();\n if (beg !== undefined && beg < left) {\n left = beg;\n right = bi;\n }\n bi = str.indexOf(b, i + 1);\n }\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n if (begs.length && right !== undefined) {\n result = [left, right];\n }\n }\n return result;\n};\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"AAAY,MAAC,WAAW,CAAC,GAAG,GAAG,QAAQ;AACnC,QAAM,KAAK,aAAa,SAAS,WAAW,GAAG,GAAG,IAAI;AACtD,QAAM,KAAK,aAAa,SAAS,WAAW,GAAG,GAAG,IAAI;AACtD,QAAM,IAAI,OAAO,QAAQ,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG;AACxD,SAAQ,KAAK;AAAA,IACT,OAAO,EAAE,CAAC;AAAA,IACV,KAAK,EAAE,CAAC;AAAA,IACR,KAAK,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,IACtB,MAAM,IAAI,MAAM,EAAE,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;AAAA,IACtC,MAAM,IAAI,MAAM,EAAE,CAAC,IAAI,GAAG,MAAM;AAAA,EACxC;AACA;AACA,MAAM,aAAa,CAAC,KAAK,QAAQ;AAC7B,QAAM,IAAI,IAAI,MAAM,GAAG;AACvB,SAAO,IAAI,EAAE,CAAC,IAAI;AACtB;AACY,MAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ;AAChC,MAAI,MAAM,KAAK,MAAM,QAAQ,QAAW;AACxC,MAAI,KAAK,IAAI,QAAQ,CAAC;AACtB,MAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC;AAC9B,MAAI,IAAI;AACR,MAAI,MAAM,KAAK,KAAK,GAAG;AACnB,QAAI,MAAM,GAAG;AACT,aAAO,CAAC,IAAI,EAAE;AAAA,IAClB;AACA,WAAO,CAAA;AACP,WAAO,IAAI;AACX,WAAO,KAAK,KAAK,CAAC,QAAQ;AACtB,UAAI,MAAM,IAAI;AACV,aAAK,KAAK,CAAC;AACX,aAAK,IAAI,QAAQ,GAAG,IAAI,CAAC;AAAA,MAC7B,WACS,KAAK,WAAW,GAAG;AACxB,cAAM,IAAI,KAAK,IAAG;AAClB,YAAI,MAAM;AACN,mBAAS,CAAC,GAAG,EAAE;AAAA,MACvB,OACK;AACD,cAAM,KAAK,IAAG;AACd,YAAI,QAAQ,UAAa,MAAM,MAAM;AACjC,iBAAO;AACP,kBAAQ;AAAA,QACZ;AACA,aAAK,IAAI,QAAQ,GAAG,IAAI,CAAC;AAAA,MAC7B;AACA,UAAI,KAAK,MAAM,MAAM,IAAI,KAAK;AAAA,IAClC;AACA,QAAI,KAAK,UAAU,UAAU,QAAW;AACpC,eAAS,CAAC,MAAM,KAAK;AAAA,IACzB;AAAA,EACJ;AACA,SAAO;AACX;","x_google_ignoreList":[0]}
@@ -0,0 +1,163 @@
1
+ import { balanced } from "../../../../../balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js";
2
+ const escSlash = "\0SLASH" + Math.random() + "\0";
3
+ const escOpen = "\0OPEN" + Math.random() + "\0";
4
+ const escClose = "\0CLOSE" + Math.random() + "\0";
5
+ const escComma = "\0COMMA" + Math.random() + "\0";
6
+ const escPeriod = "\0PERIOD" + Math.random() + "\0";
7
+ const escSlashPattern = new RegExp(escSlash, "g");
8
+ const escOpenPattern = new RegExp(escOpen, "g");
9
+ const escClosePattern = new RegExp(escClose, "g");
10
+ const escCommaPattern = new RegExp(escComma, "g");
11
+ const escPeriodPattern = new RegExp(escPeriod, "g");
12
+ const slashPattern = /\\\\/g;
13
+ const openPattern = /\\{/g;
14
+ const closePattern = /\\}/g;
15
+ const commaPattern = /\\,/g;
16
+ const periodPattern = /\\\./g;
17
+ const EXPANSION_MAX = 1e5;
18
+ function numeric(str) {
19
+ return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
20
+ }
21
+ function escapeBraces(str) {
22
+ return str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod);
23
+ }
24
+ function unescapeBraces(str) {
25
+ return str.replace(escSlashPattern, "\\").replace(escOpenPattern, "{").replace(escClosePattern, "}").replace(escCommaPattern, ",").replace(escPeriodPattern, ".");
26
+ }
27
+ function parseCommaParts(str) {
28
+ if (!str) {
29
+ return [""];
30
+ }
31
+ const parts = [];
32
+ const m = balanced("{", "}", str);
33
+ if (!m) {
34
+ return str.split(",");
35
+ }
36
+ const { pre, body, post } = m;
37
+ const p = pre.split(",");
38
+ p[p.length - 1] += "{" + body + "}";
39
+ const postParts = parseCommaParts(post);
40
+ if (post.length) {
41
+ p[p.length - 1] += postParts.shift();
42
+ p.push.apply(p, postParts);
43
+ }
44
+ parts.push.apply(parts, p);
45
+ return parts;
46
+ }
47
+ function expand(str, options = {}) {
48
+ if (!str) {
49
+ return [];
50
+ }
51
+ const { max = EXPANSION_MAX } = options;
52
+ if (str.slice(0, 2) === "{}") {
53
+ str = "\\{\\}" + str.slice(2);
54
+ }
55
+ return expand_(escapeBraces(str), max, true).map(unescapeBraces);
56
+ }
57
+ function embrace(str) {
58
+ return "{" + str + "}";
59
+ }
60
+ function isPadded(el) {
61
+ return /^-?0\d/.test(el);
62
+ }
63
+ function lte(i, y) {
64
+ return i <= y;
65
+ }
66
+ function gte(i, y) {
67
+ return i >= y;
68
+ }
69
+ function expand_(str, max, isTop) {
70
+ const expansions = [];
71
+ const m = balanced("{", "}", str);
72
+ if (!m)
73
+ return [str];
74
+ const pre = m.pre;
75
+ const post = m.post.length ? expand_(m.post, max, false) : [""];
76
+ if (/\$$/.test(m.pre)) {
77
+ for (let k = 0; k < post.length && k < max; k++) {
78
+ const expansion = pre + "{" + m.body + "}" + post[k];
79
+ expansions.push(expansion);
80
+ }
81
+ } else {
82
+ const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
83
+ const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
84
+ const isSequence = isNumericSequence || isAlphaSequence;
85
+ const isOptions = m.body.indexOf(",") >= 0;
86
+ if (!isSequence && !isOptions) {
87
+ if (m.post.match(/,(?!,).*\}/)) {
88
+ str = m.pre + "{" + m.body + escClose + m.post;
89
+ return expand_(str, max, true);
90
+ }
91
+ return [str];
92
+ }
93
+ let n;
94
+ if (isSequence) {
95
+ n = m.body.split(/\.\./);
96
+ } else {
97
+ n = parseCommaParts(m.body);
98
+ if (n.length === 1 && n[0] !== void 0) {
99
+ n = expand_(n[0], max, false).map(embrace);
100
+ if (n.length === 1) {
101
+ return post.map((p) => m.pre + n[0] + p);
102
+ }
103
+ }
104
+ }
105
+ let N;
106
+ if (isSequence && n[0] !== void 0 && n[1] !== void 0) {
107
+ const x = numeric(n[0]);
108
+ const y = numeric(n[1]);
109
+ const width = Math.max(n[0].length, n[1].length);
110
+ let incr = n.length === 3 && n[2] !== void 0 ? Math.max(Math.abs(numeric(n[2])), 1) : 1;
111
+ let test = lte;
112
+ const reverse = y < x;
113
+ if (reverse) {
114
+ incr *= -1;
115
+ test = gte;
116
+ }
117
+ const pad = n.some(isPadded);
118
+ N = [];
119
+ for (let i = x; test(i, y); i += incr) {
120
+ let c;
121
+ if (isAlphaSequence) {
122
+ c = String.fromCharCode(i);
123
+ if (c === "\\") {
124
+ c = "";
125
+ }
126
+ } else {
127
+ c = String(i);
128
+ if (pad) {
129
+ const need = width - c.length;
130
+ if (need > 0) {
131
+ const z = new Array(need + 1).join("0");
132
+ if (i < 0) {
133
+ c = "-" + z + c.slice(1);
134
+ } else {
135
+ c = z + c;
136
+ }
137
+ }
138
+ }
139
+ }
140
+ N.push(c);
141
+ }
142
+ } else {
143
+ N = [];
144
+ for (let j = 0; j < n.length; j++) {
145
+ N.push.apply(N, expand_(n[j], max, false));
146
+ }
147
+ }
148
+ for (let j = 0; j < N.length; j++) {
149
+ for (let k = 0; k < post.length && expansions.length < max; k++) {
150
+ const expansion = pre + N[j] + post[k];
151
+ if (!isTop || isSequence || expansion) {
152
+ expansions.push(expansion);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ return expansions;
158
+ }
159
+ export {
160
+ EXPANSION_MAX,
161
+ expand
162
+ };
163
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../../../../../node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js"],"sourcesContent":["import { balanced } from 'balanced-match';\nconst escSlash = '\\0SLASH' + Math.random() + '\\0';\nconst escOpen = '\\0OPEN' + Math.random() + '\\0';\nconst escClose = '\\0CLOSE' + Math.random() + '\\0';\nconst escComma = '\\0COMMA' + Math.random() + '\\0';\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0';\nconst escSlashPattern = new RegExp(escSlash, 'g');\nconst escOpenPattern = new RegExp(escOpen, 'g');\nconst escClosePattern = new RegExp(escClose, 'g');\nconst escCommaPattern = new RegExp(escComma, 'g');\nconst escPeriodPattern = new RegExp(escPeriod, 'g');\nconst slashPattern = /\\\\\\\\/g;\nconst openPattern = /\\\\{/g;\nconst closePattern = /\\\\}/g;\nconst commaPattern = /\\\\,/g;\nconst periodPattern = /\\\\\\./g;\nexport const EXPANSION_MAX = 100_000;\nfunction numeric(str) {\n return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);\n}\nfunction escapeBraces(str) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod);\n}\nfunction unescapeBraces(str) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.');\n}\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str) {\n if (!str) {\n return [''];\n }\n const parts = [];\n const m = balanced('{', '}', str);\n if (!m) {\n return str.split(',');\n }\n const { pre, body, post } = m;\n const p = pre.split(',');\n p[p.length - 1] += '{' + body + '}';\n const postParts = parseCommaParts(post);\n if (post.length) {\n ;\n p[p.length - 1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n parts.push.apply(parts, p);\n return parts;\n}\nexport function expand(str, options = {}) {\n if (!str) {\n return [];\n }\n const { max = EXPANSION_MAX } = options;\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2);\n }\n return expand_(escapeBraces(str), max, true).map(unescapeBraces);\n}\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\nfunction expand_(str, max, isTop) {\n /** @type {string[]} */\n const expansions = [];\n const m = balanced('{', '}', str);\n if (!m)\n return [str];\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre;\n const post = m.post.length ? expand_(m.post, max, false) : [''];\n if (/\\$$/.test(m.pre)) {\n for (let k = 0; k < post.length && k < max; k++) {\n const expansion = pre + '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n }\n else {\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n const isSequence = isNumericSequence || isAlphaSequence;\n const isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand_(str, max, true);\n }\n return [str];\n }\n let n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n }\n else {\n n = parseCommaParts(m.body);\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], max, false).map(embrace);\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n return post.map(p => m.pre + n[0] + p);\n }\n /* c8 ignore stop */\n }\n }\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n let N;\n if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n const x = numeric(n[0]);\n const y = numeric(n[1]);\n const width = Math.max(n[0].length, n[1].length);\n let incr = n.length === 3 && n[2] !== undefined ?\n Math.max(Math.abs(numeric(n[2])), 1)\n : 1;\n let test = lte;\n const reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n const pad = n.some(isPadded);\n N = [];\n for (let i = x; test(i, y); i += incr) {\n let c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\') {\n c = '';\n }\n }\n else {\n c = String(i);\n if (pad) {\n const need = width - c.length;\n if (need > 0) {\n const z = new Array(need + 1).join('0');\n if (i < 0) {\n c = '-' + z + c.slice(1);\n }\n else {\n c = z + c;\n }\n }\n }\n }\n N.push(c);\n }\n }\n else {\n N = [];\n for (let j = 0; j < n.length; j++) {\n N.push.apply(N, expand_(n[j], max, false));\n }\n }\n for (let j = 0; j < N.length; j++) {\n for (let k = 0; k < post.length && expansions.length < max; k++) {\n const expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion) {\n expansions.push(expansion);\n }\n }\n }\n }\n return expansions;\n}\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,13 @@
1
+ const MAX_PATTERN_LENGTH = 1024 * 64;
2
+ const assertValidPattern = (pattern) => {
3
+ if (typeof pattern !== "string") {
4
+ throw new TypeError("invalid pattern");
5
+ }
6
+ if (pattern.length > MAX_PATTERN_LENGTH) {
7
+ throw new TypeError("pattern is too long");
8
+ }
9
+ };
10
+ export {
11
+ assertValidPattern
12
+ };
13
+ //# sourceMappingURL=assert-valid-pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-valid-pattern.js","sources":["../../../../../../../../../../node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js"],"sourcesContent":["const MAX_PATTERN_LENGTH = 1024 * 64;\nexport const assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n//# sourceMappingURL=assert-valid-pattern.js.map"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,OAAO;AACtB,MAAC,qBAAqB,CAAC,YAAY;AAC3C,MAAI,OAAO,YAAY,UAAU;AAC7B,UAAM,IAAI,UAAU,iBAAiB;AAAA,EACzC;AACA,MAAI,QAAQ,SAAS,oBAAoB;AACrC,UAAM,IAAI,UAAU,qBAAqB;AAAA,EAC7C;AACJ;","x_google_ignoreList":[0]}