@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,140 @@
1
+ /**
2
+ * Comprehensive test utilities for SMRT framework testing
3
+ *
4
+ * Provides unified mocking for collections, objects, and database operations
5
+ * to support both CLI and API generator testing scenarios.
6
+ */
7
+ /**
8
+ * Snapshot ObjectRegistry state and return a restore function for manifest-heavy
9
+ * tests that mutate registry internals at runtime.
10
+ */
11
+ export declare function snapshotObjectRegistryState(): () => void;
12
+ /**
13
+ * Mock object instance with all required lifecycle methods
14
+ */
15
+ export interface MockObject {
16
+ id: string;
17
+ slug?: string;
18
+ created_at?: string;
19
+ updated_at?: string;
20
+ [key: string]: any;
21
+ save: () => Promise<MockObject>;
22
+ delete: () => Promise<void>;
23
+ initialize: () => Promise<void>;
24
+ }
25
+ /**
26
+ * Mock collection with all CRUD operations
27
+ */
28
+ export interface MockCollection {
29
+ list: (options?: any) => Promise<MockObject[]>;
30
+ get: (id: string) => Promise<MockObject | null>;
31
+ create: (data: any) => Promise<MockObject>;
32
+ update: (id: string, data: any) => Promise<MockObject>;
33
+ delete: (id: string) => Promise<void>;
34
+ initialize: () => Promise<void>;
35
+ save: (object: MockObject) => Promise<MockObject>;
36
+ }
37
+ /**
38
+ * Test data factory for generating consistent mock data
39
+ */
40
+ export declare class TestDataFactory {
41
+ private static idCounter;
42
+ static generateId(): string;
43
+ static generateTestUser(overrides?: Partial<MockObject>): MockObject;
44
+ static generateTestProduct(overrides?: Partial<MockObject>): MockObject;
45
+ /**
46
+ * Generate multiple test objects
47
+ */
48
+ static generateMultiple<T extends MockObject>(generator: (overrides?: Partial<T>) => T, count: number, overrides?: Partial<T>): T[];
49
+ }
50
+ /**
51
+ * Mock collection factory with comprehensive CRUD support
52
+ */
53
+ export declare class MockCollectionFactory {
54
+ private storage;
55
+ /**
56
+ * Create a mock collection with realistic behavior
57
+ */
58
+ createMockCollection(objectType?: 'user' | 'product'): MockCollection;
59
+ /**
60
+ * Clear all mock data
61
+ */
62
+ clear(): void;
63
+ /**
64
+ * Get current storage for inspection
65
+ */
66
+ getStorage(): Map<string, MockObject>;
67
+ }
68
+ /**
69
+ * Complete mock context factory for CLI and API testing
70
+ */
71
+ export declare class MockContextFactory {
72
+ private collectionFactory;
73
+ /**
74
+ * Create a comprehensive mock context with database and AI
75
+ */
76
+ createMockContext(overrides?: any): any;
77
+ /**
78
+ * Create mock collections for testing
79
+ */
80
+ createMockCollections(): {
81
+ TestUser: MockCollection;
82
+ TestProduct: MockCollection;
83
+ };
84
+ /**
85
+ * Clear all mock data
86
+ */
87
+ clear(): void;
88
+ }
89
+ /**
90
+ * Enhanced test setup utilities
91
+ */
92
+ export declare class TestSetup {
93
+ private static mockFactory;
94
+ /**
95
+ * Set up complete test environment
96
+ */
97
+ static setupTestEnvironment(): {
98
+ mockContext: any;
99
+ mockCollections: {
100
+ TestUser: MockCollection;
101
+ TestProduct: MockCollection;
102
+ };
103
+ cleanup: () => void;
104
+ };
105
+ /**
106
+ * Mock collection constructor to return mock instances
107
+ */
108
+ static mockCollectionConstructors(mockCollections: any): any;
109
+ /**
110
+ * Create realistic database query responses
111
+ */
112
+ static createDatabaseResponses(objectType?: 'user' | 'product'): {
113
+ list: {
114
+ rows: MockObject[];
115
+ };
116
+ get: {
117
+ rows: MockObject[];
118
+ };
119
+ create: {
120
+ rows: MockObject[];
121
+ };
122
+ update: {
123
+ rows: MockObject[];
124
+ };
125
+ delete: {
126
+ rows: never[];
127
+ };
128
+ empty: {
129
+ rows: never[];
130
+ };
131
+ };
132
+ }
133
+ /**
134
+ * Export commonly used mock instances for convenience
135
+ */
136
+ export declare const mockContextFactory: MockContextFactory;
137
+ export declare const testDataFactory: typeof TestDataFactory;
138
+ export declare const mockCollectionFactory: MockCollectionFactory;
139
+ export declare const testSetup: typeof TestSetup;
140
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { DatabaseInterface } from '@happyvertical/sql';
2
+ /**
3
+ * Options for creating a test database
4
+ */
5
+ export interface TestDatabaseOptions {
6
+ /**
7
+ * Database type (default: 'sqlite')
8
+ * - 'sqlite': SQLite database
9
+ * - 'json': JSON adapter (stores data as JSON files with DuckDB for querying)
10
+ */
11
+ type?: 'sqlite' | 'json';
12
+ /**
13
+ * Database URL (default: ':memory:')
14
+ * Use ':memory:' for in-memory databases (fastest for tests)
15
+ * Or provide a file path for persistent test databases
16
+ */
17
+ url?: string;
18
+ /**
19
+ * Pre-existing database to initialize schemas in.
20
+ * If provided, `type` and `url` are ignored.
21
+ */
22
+ db?: DatabaseInterface;
23
+ /**
24
+ * Specific classes to setup schemas for.
25
+ * If not provided, sets up schemas for all registered classes.
26
+ */
27
+ classes?: string[];
28
+ /**
29
+ * Whether to include system tables (default: true)
30
+ * System tables include _smrt_contexts, _smrt_migrations, etc.
31
+ */
32
+ includeSystemTables?: boolean;
33
+ }
34
+ /**
35
+ * Creates an in-memory test database with schemas pre-created
36
+ *
37
+ * This utility is designed for testing. It creates an in-memory database
38
+ * and initializes all registered SMRT object schemas using the **same
39
+ * schema generation logic** as the production migration system.
40
+ *
41
+ * **Key features:**
42
+ * - Uses `SchemaGenerator.generateSQL()` - the single source of truth for DDL
43
+ * - Handles STI (Single Table Inheritance) correctly
44
+ * - Creates system tables for framework functionality
45
+ * - Safe for parallel test execution (each call creates isolated instance)
46
+ *
47
+ * @param options - Configuration options
48
+ * @returns Promise resolving to configured DatabaseInterface
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * // Basic usage - all registered schemas
53
+ * const db = await getTestDatabase();
54
+ *
55
+ * // Specific classes only
56
+ * const db = await getTestDatabase({ classes: ['Council', 'Meeting'] });
57
+ *
58
+ * // JSON adapter instead of SQLite
59
+ * const db = await getTestDatabase({ type: 'json' });
60
+ *
61
+ * // File-based database for persistent tests
62
+ * const db = await getTestDatabase({ type: 'sqlite', url: '/tmp/test.db' });
63
+ *
64
+ * // Initialize schemas in an existing database
65
+ * const myDb = await getDatabase({ type: 'sqlite', url: ':memory:' });
66
+ * await getTestDatabase({ db: myDb });
67
+ *
68
+ * // Skip system tables (rare use case)
69
+ * const db = await getTestDatabase({ includeSystemTables: false });
70
+ * ```
71
+ */
72
+ export declare function getTestDatabase(options?: TestDatabaseOptions): Promise<DatabaseInterface>;
73
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/testing/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAgJ5D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAuCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAqH5B"}
@@ -0,0 +1,204 @@
1
+ import { getDatabase } from "@happyvertical/sql";
2
+ import { isCollectionRegistration, resolveCollectionItemClassName, resolveRelatedRegistration } from "../registry/collection-resolution.js";
3
+ import { ObjectRegistry } from "../registry.js";
4
+ import { SchemaGenerator } from "../schema/generator.js";
5
+ import { ensureLegacySystemTableCompatibility } from "../system/compatibility.js";
6
+ import { ALL_SYSTEM_TABLES } from "../system/schema.js";
7
+ function resolveSTIBaseRegistration(className, stiBaseName) {
8
+ const registered = ObjectRegistry.getClass(className);
9
+ if (stiBaseName.includes(":")) {
10
+ return ObjectRegistry.getClass(stiBaseName);
11
+ }
12
+ if (registered?.packageName) {
13
+ const samePackageBase = ObjectRegistry.getClassInPackage(
14
+ registered.packageName,
15
+ stiBaseName
16
+ );
17
+ if (samePackageBase) {
18
+ return samePackageBase;
19
+ }
20
+ }
21
+ return ObjectRegistry.getClass(stiBaseName);
22
+ }
23
+ function resolveSTIBaseLookupName(className, stiBaseName) {
24
+ const stiBase = resolveSTIBaseRegistration(className, stiBaseName);
25
+ return stiBase?.qualifiedName || stiBase?.name || stiBaseName;
26
+ }
27
+ function isSTIChild(className) {
28
+ const stiBaseName = ObjectRegistry.getSTIBase(className);
29
+ if (!stiBaseName) {
30
+ return false;
31
+ }
32
+ const registered = ObjectRegistry.getClass(className);
33
+ const stiBase = resolveSTIBaseRegistration(className, stiBaseName);
34
+ if (registered && stiBase) {
35
+ return registered !== stiBase;
36
+ }
37
+ return stiBaseName !== className;
38
+ }
39
+ const collectionRegistrationLookup = {
40
+ findClass: (className) => ObjectRegistry.getClass(className),
41
+ findClassInPackage: (packageName, className) => ObjectRegistry.getClassInPackage(packageName, className),
42
+ getInheritanceChain: (className) => ObjectRegistry.getInheritanceChain(className)
43
+ };
44
+ function resolveCollectionSchemaClassName(className, registered) {
45
+ const itemClassName = resolveCollectionItemClassName(
46
+ className,
47
+ registered,
48
+ collectionRegistrationLookup
49
+ );
50
+ if (itemClassName) {
51
+ const itemRegistration = resolveRelatedRegistration(
52
+ itemClassName,
53
+ registered,
54
+ collectionRegistrationLookup
55
+ );
56
+ const itemLookupName = itemRegistration?.qualifiedName || itemRegistration?.name || itemClassName;
57
+ const stiBase = ObjectRegistry.getSTIBase(itemLookupName);
58
+ return stiBase ? resolveSTIBaseLookupName(itemLookupName, stiBase) : itemLookupName;
59
+ }
60
+ const tableName = registered.schema?.tableName || registered.config.tableName || ObjectRegistry.getTableName(className);
61
+ if (!tableName) {
62
+ return className;
63
+ }
64
+ const collectionPackage = registered.packageName;
65
+ for (const candidate of ObjectRegistry.getAllClasses().values()) {
66
+ if (candidate === registered || isCollectionRegistration(
67
+ candidate.qualifiedName || candidate.name,
68
+ candidate,
69
+ collectionRegistrationLookup
70
+ )) {
71
+ continue;
72
+ }
73
+ const candidateTableName = candidate.schema?.tableName || candidate.config.tableName;
74
+ if (candidateTableName !== tableName) {
75
+ continue;
76
+ }
77
+ if (collectionPackage && candidate.packageName && candidate.packageName !== collectionPackage) {
78
+ continue;
79
+ }
80
+ const candidateLookupName = candidate.qualifiedName || candidate.name;
81
+ const stiBase = ObjectRegistry.getSTIBase(candidateLookupName);
82
+ return stiBase ? resolveSTIBaseLookupName(candidateLookupName, stiBase) : candidateLookupName;
83
+ }
84
+ return className;
85
+ }
86
+ function resolveRequestedSchemaClassName(className) {
87
+ const registered = ObjectRegistry.getClass(className);
88
+ if (!registered) {
89
+ return className;
90
+ }
91
+ if (!isCollectionRegistration(
92
+ className,
93
+ registered,
94
+ collectionRegistrationLookup
95
+ )) {
96
+ const stiBase = ObjectRegistry.getSTIBase(className);
97
+ return stiBase ? resolveSTIBaseLookupName(className, stiBase) : className;
98
+ }
99
+ return resolveCollectionSchemaClassName(className, registered);
100
+ }
101
+ function resolveRequestedSchemaClassNames(classNames) {
102
+ const resolved = [];
103
+ const seen = /* @__PURE__ */ new Set();
104
+ for (const className of classNames) {
105
+ const schemaClassName = resolveRequestedSchemaClassName(className);
106
+ if (seen.has(schemaClassName)) {
107
+ continue;
108
+ }
109
+ seen.add(schemaClassName);
110
+ resolved.push(schemaClassName);
111
+ }
112
+ return resolved;
113
+ }
114
+ async function getTestDatabase(options = {}) {
115
+ const {
116
+ type = "sqlite",
117
+ url = ":memory:",
118
+ db: existingDb,
119
+ classes,
120
+ includeSystemTables = true
121
+ } = options;
122
+ const db = existingDb ?? await getDatabase({
123
+ type,
124
+ url,
125
+ __smrtSkipVitestSchemaPreparation: true
126
+ });
127
+ if (includeSystemTables) {
128
+ await initializeSystemTables(db);
129
+ }
130
+ const classNames = resolveRequestedSchemaClassNames(
131
+ classes ?? ObjectRegistry.getQualifiedClassNames()
132
+ );
133
+ if (classNames.length === 0) {
134
+ return db;
135
+ }
136
+ const schemaGenerator = new SchemaGenerator();
137
+ const ddlEngine = type === "json" || typeof db.exportTable === "function" ? "json" : "sqlite";
138
+ const createdTables = /* @__PURE__ */ new Set();
139
+ for (const className of classNames) {
140
+ const registered = ObjectRegistry.getClass(className);
141
+ if (isSTIChild(className)) {
142
+ continue;
143
+ }
144
+ const tableName = ObjectRegistry.getTableName(className);
145
+ if (!tableName || createdTables.has(tableName)) {
146
+ continue;
147
+ }
148
+ const fields = await ObjectRegistry.getAllFields(className);
149
+ const strategy = ObjectRegistry.getTableStrategy(className);
150
+ const runtimeSchemaConfig = {
151
+ conflictColumns: ObjectRegistry.getConflictColumns(className),
152
+ idType: registered?.config.idType,
153
+ registry: ObjectRegistry
154
+ };
155
+ const schema = strategy === "sti" ? await schemaGenerator.generateSTISchemaFromRegistry(
156
+ className,
157
+ tableName,
158
+ fields,
159
+ runtimeSchemaConfig
160
+ ) : schemaGenerator.generateSchemaFromRegistry(
161
+ className,
162
+ tableName,
163
+ fields,
164
+ runtimeSchemaConfig
165
+ );
166
+ const ddl = schemaGenerator.generateSQL(schema, ddlEngine);
167
+ try {
168
+ await db.query(ddl);
169
+ createdTables.add(tableName);
170
+ const ddlStrategy = (await import("../schema/ddl/index.js")).getDDLStrategy(ddlEngine);
171
+ const indexStatements = ddlStrategy.generateIndexes(schema);
172
+ for (const indexSQL of indexStatements) {
173
+ try {
174
+ await db.query(indexSQL);
175
+ } catch (indexError) {
176
+ console.warn(
177
+ `[getTestDatabase] Warning: Failed to create index: ${indexError instanceof Error ? indexError.message : String(indexError)} (SQL: ${indexSQL})`
178
+ );
179
+ }
180
+ }
181
+ } catch (error) {
182
+ throw new Error(
183
+ `[getTestDatabase] Failed to create table '${tableName}' for class '${className}': ${error instanceof Error ? error.message : String(error)}`,
184
+ { cause: error }
185
+ );
186
+ }
187
+ }
188
+ return db;
189
+ }
190
+ async function initializeSystemTables(db) {
191
+ await ensureLegacySystemTableCompatibility(db);
192
+ const allStatements = [];
193
+ for (const multiStatementSQL of ALL_SYSTEM_TABLES) {
194
+ const statements = multiStatementSQL.split(";").map((s) => s.trim()).filter((s) => s.length > 0);
195
+ allStatements.push(...statements);
196
+ }
197
+ for (const statement of allStatements) {
198
+ await db.query(statement);
199
+ }
200
+ }
201
+ export {
202
+ getTestDatabase
203
+ };
204
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sources":["../../src/testing/database.ts"],"sourcesContent":["/**\n * Test database utilities for SMRT framework\n *\n * Provides `getTestDatabase()` which creates an in-memory database with all\n * registered SMRT object schemas. Uses the same schema generation logic as\n * the migration system to ensure consistency between test and production.\n *\n * @example\n * ```typescript\n * import { getTestDatabase } from '@happyvertical/smrt-core/testing';\n *\n * beforeEach(async () => {\n * const db = await getTestDatabase();\n * collection = await MyCollection.create({ db });\n * });\n * ```\n */\n\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport { getDatabase } from '@happyvertical/sql';\nimport {\n type CollectionRegistrationLookup,\n isCollectionRegistration,\n resolveCollectionItemClassName,\n resolveRelatedRegistration,\n} from '../registry/collection-resolution.js';\nimport { ObjectRegistry } from '../registry.js';\nimport { SchemaGenerator } from '../schema/generator.js';\nimport { ensureLegacySystemTableCompatibility } from '../system/compatibility.js';\nimport { ALL_SYSTEM_TABLES } from '../system/schema.js';\n\ntype TestDatabaseConnectionOptions = Parameters<typeof getDatabase>[0] & {\n __smrtSkipVitestSchemaPreparation?: boolean;\n};\n\nfunction resolveSTIBaseRegistration(className: string, stiBaseName: string) {\n const registered = ObjectRegistry.getClass(className);\n\n if (stiBaseName.includes(':')) {\n return ObjectRegistry.getClass(stiBaseName);\n }\n\n if (registered?.packageName) {\n const samePackageBase = ObjectRegistry.getClassInPackage(\n registered.packageName,\n stiBaseName,\n );\n if (samePackageBase) {\n return samePackageBase;\n }\n }\n\n return ObjectRegistry.getClass(stiBaseName);\n}\n\nfunction resolveSTIBaseLookupName(\n className: string,\n stiBaseName: string,\n): string {\n const stiBase = resolveSTIBaseRegistration(className, stiBaseName);\n return stiBase?.qualifiedName || stiBase?.name || stiBaseName;\n}\n\nfunction isSTIChild(className: string): boolean {\n const stiBaseName = ObjectRegistry.getSTIBase(className);\n if (!stiBaseName) {\n return false;\n }\n\n const registered = ObjectRegistry.getClass(className);\n const stiBase = resolveSTIBaseRegistration(className, stiBaseName);\n\n if (registered && stiBase) {\n return registered !== stiBase;\n }\n\n return stiBaseName !== className;\n}\n\ntype RegisteredSchemaClass = NonNullable<\n ReturnType<typeof ObjectRegistry.getClass>\n>;\n\nconst collectionRegistrationLookup: CollectionRegistrationLookup = {\n findClass: (className) => ObjectRegistry.getClass(className),\n findClassInPackage: (packageName, className) =>\n ObjectRegistry.getClassInPackage(packageName, className),\n getInheritanceChain: (className) =>\n ObjectRegistry.getInheritanceChain(className),\n};\n\nfunction resolveCollectionSchemaClassName(\n className: string,\n registered: RegisteredSchemaClass,\n): string {\n const itemClassName = resolveCollectionItemClassName(\n className,\n registered,\n collectionRegistrationLookup,\n );\n if (itemClassName) {\n const itemRegistration = resolveRelatedRegistration(\n itemClassName,\n registered,\n collectionRegistrationLookup,\n );\n const itemLookupName =\n itemRegistration?.qualifiedName ||\n itemRegistration?.name ||\n itemClassName;\n const stiBase = ObjectRegistry.getSTIBase(itemLookupName);\n return stiBase\n ? resolveSTIBaseLookupName(itemLookupName, stiBase)\n : itemLookupName;\n }\n\n const tableName =\n registered.schema?.tableName ||\n registered.config.tableName ||\n ObjectRegistry.getTableName(className);\n if (!tableName) {\n return className;\n }\n\n const collectionPackage = registered.packageName;\n\n for (const candidate of ObjectRegistry.getAllClasses().values()) {\n if (\n candidate === registered ||\n isCollectionRegistration(\n candidate.qualifiedName || candidate.name,\n candidate,\n collectionRegistrationLookup,\n )\n ) {\n continue;\n }\n\n const candidateTableName =\n candidate.schema?.tableName || candidate.config.tableName;\n if (candidateTableName !== tableName) {\n continue;\n }\n\n if (\n collectionPackage &&\n candidate.packageName &&\n candidate.packageName !== collectionPackage\n ) {\n continue;\n }\n\n const candidateLookupName = candidate.qualifiedName || candidate.name;\n const stiBase = ObjectRegistry.getSTIBase(candidateLookupName);\n return stiBase\n ? resolveSTIBaseLookupName(candidateLookupName, stiBase)\n : candidateLookupName;\n }\n\n return className;\n}\n\n/**\n * Options for creating a test database\n */\nexport interface TestDatabaseOptions {\n /**\n * Database type (default: 'sqlite')\n * - 'sqlite': SQLite database\n * - 'json': JSON adapter (stores data as JSON files with DuckDB for querying)\n */\n type?: 'sqlite' | 'json';\n\n /**\n * Database URL (default: ':memory:')\n * Use ':memory:' for in-memory databases (fastest for tests)\n * Or provide a file path for persistent test databases\n */\n url?: string;\n\n /**\n * Pre-existing database to initialize schemas in.\n * If provided, `type` and `url` are ignored.\n */\n db?: DatabaseInterface;\n\n /**\n * Specific classes to setup schemas for.\n * If not provided, sets up schemas for all registered classes.\n */\n classes?: string[];\n\n /**\n * Whether to include system tables (default: true)\n * System tables include _smrt_contexts, _smrt_migrations, etc.\n */\n includeSystemTables?: boolean;\n}\n\nfunction resolveRequestedSchemaClassName(className: string): string {\n const registered = ObjectRegistry.getClass(className);\n if (!registered) {\n return className;\n }\n\n if (\n !isCollectionRegistration(\n className,\n registered,\n collectionRegistrationLookup,\n )\n ) {\n const stiBase = ObjectRegistry.getSTIBase(className);\n return stiBase ? resolveSTIBaseLookupName(className, stiBase) : className;\n }\n\n return resolveCollectionSchemaClassName(className, registered);\n}\n\nfunction resolveRequestedSchemaClassNames(classNames: string[]): string[] {\n const resolved: string[] = [];\n const seen = new Set<string>();\n\n for (const className of classNames) {\n const schemaClassName = resolveRequestedSchemaClassName(className);\n if (seen.has(schemaClassName)) {\n continue;\n }\n\n seen.add(schemaClassName);\n resolved.push(schemaClassName);\n }\n\n return resolved;\n}\n\n/**\n * Creates an in-memory test database with schemas pre-created\n *\n * This utility is designed for testing. It creates an in-memory database\n * and initializes all registered SMRT object schemas using the **same\n * schema generation logic** as the production migration system.\n *\n * **Key features:**\n * - Uses `SchemaGenerator.generateSQL()` - the single source of truth for DDL\n * - Handles STI (Single Table Inheritance) correctly\n * - Creates system tables for framework functionality\n * - Safe for parallel test execution (each call creates isolated instance)\n *\n * @param options - Configuration options\n * @returns Promise resolving to configured DatabaseInterface\n *\n * @example\n * ```typescript\n * // Basic usage - all registered schemas\n * const db = await getTestDatabase();\n *\n * // Specific classes only\n * const db = await getTestDatabase({ classes: ['Council', 'Meeting'] });\n *\n * // JSON adapter instead of SQLite\n * const db = await getTestDatabase({ type: 'json' });\n *\n * // File-based database for persistent tests\n * const db = await getTestDatabase({ type: 'sqlite', url: '/tmp/test.db' });\n *\n * // Initialize schemas in an existing database\n * const myDb = await getDatabase({ type: 'sqlite', url: ':memory:' });\n * await getTestDatabase({ db: myDb });\n *\n * // Skip system tables (rare use case)\n * const db = await getTestDatabase({ includeSystemTables: false });\n * ```\n */\nexport async function getTestDatabase(\n options: TestDatabaseOptions = {},\n): Promise<DatabaseInterface> {\n const {\n type = 'sqlite',\n url = ':memory:',\n db: existingDb,\n classes,\n includeSystemTables = true,\n } = options;\n\n // Use existing database or create new one\n const db =\n existingDb ??\n (await getDatabase({\n type,\n url,\n __smrtSkipVitestSchemaPreparation: true,\n } as TestDatabaseConnectionOptions));\n\n // Initialize system tables (same as production)\n if (includeSystemTables) {\n await initializeSystemTables(db);\n }\n\n // Get class names to setup\n const classNames = resolveRequestedSchemaClassNames(\n classes ?? ObjectRegistry.getQualifiedClassNames(),\n );\n\n // Skip if no classes registered\n if (classNames.length === 0) {\n return db;\n }\n\n // Use the same schema generation as production\n const schemaGenerator = new SchemaGenerator();\n const ddlEngine =\n type === 'json' || typeof (db as any).exportTable === 'function'\n ? 'json'\n : 'sqlite';\n\n // Track created tables to avoid duplicates (STI base classes)\n const createdTables = new Set<string>();\n\n for (const className of classNames) {\n // R11: the registration carries idType (native uuid vs text); read it\n // below when building runtimeSchemaConfig.\n const registered = ObjectRegistry.getClass(className);\n // Skip STI children - their schema is part of the base class table.\n // main (#1324): isSTIChild() compares RegisteredClass *identity* rather\n // than raw strings, so it stays correct under R5-canon (getSTIBase returns\n // qualified names) while also handling collection/override registrations.\n if (isSTIChild(className)) {\n continue;\n }\n\n const tableName = ObjectRegistry.getTableName(className);\n if (!tableName || createdTables.has(tableName)) {\n continue;\n }\n\n const fields = await ObjectRegistry.getAllFields(className);\n const strategy = ObjectRegistry.getTableStrategy(className);\n const runtimeSchemaConfig = {\n conflictColumns: ObjectRegistry.getConflictColumns(className),\n idType: registered?.config.idType,\n registry: ObjectRegistry,\n };\n\n // Generate schema using SchemaGenerator (same as migrations)\n const schema =\n strategy === 'sti'\n ? await schemaGenerator.generateSTISchemaFromRegistry(\n className,\n tableName,\n fields,\n runtimeSchemaConfig,\n )\n : schemaGenerator.generateSchemaFromRegistry(\n className,\n tableName,\n fields,\n runtimeSchemaConfig,\n );\n\n // Generate DDL using generateSQL() - the single source of truth\n const ddl = schemaGenerator.generateSQL(schema, ddlEngine);\n\n try {\n await db.query(ddl);\n createdTables.add(tableName);\n\n // Create indexes (use DDL strategy so jsonPath / where / etc. render)\n const ddlStrategy = (\n await import('../schema/ddl/index.js')\n ).getDDLStrategy(ddlEngine);\n const indexStatements = ddlStrategy.generateIndexes(schema);\n for (const indexSQL of indexStatements) {\n try {\n await db.query(indexSQL);\n } catch (indexError) {\n // Log but don't fail on index creation errors\n // Some indexes may fail if columns don't exist (STI meta fields)\n console.warn(\n `[getTestDatabase] Warning: Failed to create index: ${indexError instanceof Error ? indexError.message : String(indexError)} (SQL: ${indexSQL})`,\n );\n }\n }\n } catch (error) {\n // Provide helpful error message for table creation failures\n throw new Error(\n `[getTestDatabase] Failed to create table '${tableName}' for class '${className}': ${error instanceof Error ? error.message : String(error)}`,\n { cause: error },\n );\n }\n }\n\n return db;\n}\n\n/**\n * Initialize SMRT system tables in a database\n *\n * System tables use _smrt_ prefix and store framework metadata.\n * All statements use `IF NOT EXISTS` for idempotency.\n *\n * @param db - Database interface to initialize\n */\nasync function initializeSystemTables(db: DatabaseInterface): Promise<void> {\n await ensureLegacySystemTableCompatibility(db);\n\n // Split multi-statement SQL into individual statements\n const allStatements: string[] = [];\n for (const multiStatementSQL of ALL_SYSTEM_TABLES) {\n const statements = multiStatementSQL\n .split(';')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n allStatements.push(...statements);\n }\n\n // Use db.query() — system tables use CREATE TABLE/INDEX IF NOT EXISTS\n // which databases handle natively without per-column existence checks.\n for (const statement of allStatements) {\n await db.query(statement);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SMRT Testing Utilities
3
+ *
4
+ * Provides utilities for testing SMRT objects in isolation.
5
+ * The main export is `getTestDatabase()` which creates an in-memory
6
+ * database with all registered schemas pre-created.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { getTestDatabase } from '@happyvertical/smrt-core/testing';
11
+ *
12
+ * beforeEach(async () => {
13
+ * const db = await getTestDatabase();
14
+ * collection = await MyCollection.create({ db });
15
+ * });
16
+ * ```
17
+ *
18
+ * @packageDocumentation
19
+ */
20
+ export { getTestDatabase, type TestDatabaseOptions } from './database.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-export testing utilities from testing/index.ts
3
+ * This file exists to satisfy the package.json exports configuration
4
+ */
5
+ export * from './testing/index.js';
6
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { getTestDatabase } from "./testing/database.js";
2
+ export {
3
+ getTestDatabase
4
+ };
5
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AI Function Calling Tools Module
3
+ *
4
+ * Public API for AI tool generation and execution
5
+ */
6
+ export { executeToolCall, executeToolCalls, formatToolResults, type ToolCall, type ToolCallResult, validateToolCall, } from './tool-executor.js';
7
+ export { type AiConfig, convertTypeToJsonSchema, generateToolFromMethod, generateToolManifest, shouldIncludeMethod, } from './tool-generator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,QAAQ,EACb,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { SignalBus } from '../signals/bus.js';
2
+ /**
3
+ * Tool call structure from AI response
4
+ */
5
+ export interface ToolCall {
6
+ /**
7
+ * Unique identifier for this tool call
8
+ */
9
+ id: string;
10
+ /**
11
+ * Type of tool (always 'function' for now)
12
+ */
13
+ type: 'function';
14
+ /**
15
+ * Function details
16
+ */
17
+ function: {
18
+ /**
19
+ * Name of the method to call
20
+ */
21
+ name: string;
22
+ /**
23
+ * JSON string of arguments to pass to the method
24
+ */
25
+ arguments: string;
26
+ };
27
+ }
28
+ /**
29
+ * Result of executing a tool call
30
+ */
31
+ export interface ToolCallResult {
32
+ /**
33
+ * Tool call ID for correlation
34
+ */
35
+ id: string;
36
+ /**
37
+ * Method name that was called
38
+ */
39
+ methodName: string;
40
+ /**
41
+ * Parsed arguments that were used
42
+ */
43
+ arguments: Record<string, any>;
44
+ /**
45
+ * Result returned from the method
46
+ */
47
+ result: any;
48
+ /**
49
+ * Whether the call succeeded
50
+ */
51
+ success: boolean;
52
+ /**
53
+ * Error message if call failed
54
+ */
55
+ error?: string;
56
+ /**
57
+ * Execution time in milliseconds
58
+ */
59
+ duration?: number;
60
+ }
61
+ /**
62
+ * Validates tool call arguments against method parameters
63
+ *
64
+ * @param methodName - Name of the method being called
65
+ * @param args - Parsed arguments from tool call
66
+ * @param allowedMethods - List of methods AI is allowed to call
67
+ * @throws ValidationError if method not allowed or arguments invalid
68
+ */
69
+ export declare function validateToolCall(methodName: string, args: Record<string, any>, allowedMethods: string[]): void;
70
+ /**
71
+ * Executes a tool call on an object instance
72
+ *
73
+ * @param instance - Object instance to call method on
74
+ * @param toolCall - Tool call from AI
75
+ * @param allowedMethods - List of methods AI is allowed to call
76
+ * @param signalBus - Optional signal bus for emitting execution events
77
+ * @returns Result of the tool call execution
78
+ */
79
+ export declare function executeToolCall(instance: any, toolCall: ToolCall, allowedMethods: string[], signalBus?: SignalBus): Promise<ToolCallResult>;
80
+ /**
81
+ * Executes multiple tool calls in sequence
82
+ *
83
+ * @param instance - Object instance to call methods on
84
+ * @param toolCalls - Array of tool calls from AI
85
+ * @param allowedMethods - List of methods AI is allowed to call
86
+ * @param signalBus - Optional signal bus for emitting execution events
87
+ * @returns Array of tool call results
88
+ */
89
+ export declare function executeToolCalls(instance: any, toolCalls: ToolCall[], allowedMethods: string[], signalBus?: SignalBus): Promise<ToolCallResult[]>;
90
+ /**
91
+ * Formats tool call results into messages for AI
92
+ *
93
+ * @param results - Tool call execution results
94
+ * @returns Array of tool response messages
95
+ */
96
+ export declare function formatToolResults(results: ToolCallResult[]): Array<{
97
+ role: 'tool';
98
+ tool_call_id: string;
99
+ content: string;
100
+ }>;
101
+ //# sourceMappingURL=tool-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../src/tools/tool-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE;QACR;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,cAAc,EAAE,MAAM,EAAE,GACvB,IAAI,CAkBN;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,MAAM,EAAE,EACxB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,cAAc,CAAC,CA8GzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,QAAQ,EAAE,EACrB,cAAc,EAAE,MAAM,EAAE,EACxB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,cAAc,EAAE,CAAC,CAoB3B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EAAE,GACxB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhE"}