@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,452 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { generateDeclarations } from "../prebuild/index.js";
4
+ const VIRTUAL_MODULES = {
5
+ "@smrt/routes": "smrt:routes",
6
+ "@smrt/client": "smrt:client",
7
+ "@smrt/mcp": "smrt:mcp",
8
+ "@smrt/types": "smrt:types",
9
+ "@smrt/manifest": "smrt:manifest"
10
+ };
11
+ function smrtConsumer(options = {}) {
12
+ const {
13
+ packages = [],
14
+ generateTypes = true,
15
+ typesDir = "src/types/smrt-generated",
16
+ projectRoot = process.cwd(),
17
+ disableScanning = false
18
+ } = options;
19
+ let smrtPackages = [];
20
+ let typeManifest = null;
21
+ let typesGenerated = false;
22
+ return {
23
+ name: "smrt-consumer",
24
+ async buildStart() {
25
+ console.log("[smrt:consumer] Initializing SMRT consumer plugin");
26
+ if (packages.length === 0 && !disableScanning) {
27
+ smrtPackages = await discoverSmrtPackages(projectRoot);
28
+ } else {
29
+ smrtPackages = packages;
30
+ }
31
+ if (smrtPackages.length > 0) {
32
+ console.log(
33
+ `[smrt:consumer] Found SMRT packages: ${smrtPackages.join(", ")}`
34
+ );
35
+ typeManifest = await aggregateTypeManifests(smrtPackages, projectRoot);
36
+ await saveAggregatedManifest(typeManifest, projectRoot);
37
+ await generateRegistrationFile(typeManifest, projectRoot);
38
+ if (generateTypes && !typesGenerated) {
39
+ await generateProjectTypes(typeManifest, typesDir, projectRoot);
40
+ typesGenerated = true;
41
+ }
42
+ } else {
43
+ console.log("[smrt:consumer] No SMRT packages found");
44
+ typeManifest = { version: "1.0.0", timestamp: Date.now(), objects: {} };
45
+ }
46
+ },
47
+ resolveId(id, _importer) {
48
+ if (id in VIRTUAL_MODULES) {
49
+ const typeFileName = getTypeFileName(id);
50
+ const typePath = path.join(projectRoot, typesDir, typeFileName);
51
+ if (fs.existsSync(typePath)) {
52
+ return typePath;
53
+ }
54
+ return `\0${VIRTUAL_MODULES[id]}`;
55
+ }
56
+ return null;
57
+ },
58
+ async load(id) {
59
+ const cleanId = id.startsWith("\0") ? id.slice(1) : id;
60
+ if (!typeManifest) {
61
+ typeManifest = { version: "1.0.0", timestamp: Date.now(), objects: {} };
62
+ }
63
+ switch (cleanId) {
64
+ case "smrt:routes":
65
+ return generateFallbackRoutesModule();
66
+ case "smrt:client":
67
+ return generateFallbackClientModule(typeManifest);
68
+ case "smrt:mcp":
69
+ return generateFallbackMcpModule();
70
+ case "smrt:types":
71
+ return generateFallbackTypesModule(typeManifest);
72
+ case "smrt:manifest":
73
+ return generateFallbackManifestModule(typeManifest);
74
+ default:
75
+ return null;
76
+ }
77
+ }
78
+ };
79
+ }
80
+ async function discoverSmrtPackages(projectRoot) {
81
+ const packages = [];
82
+ const nodeModulesPath = path.join(projectRoot, "node_modules");
83
+ if (!fs.existsSync(nodeModulesPath)) {
84
+ return packages;
85
+ }
86
+ try {
87
+ const packageJsonPath = path.join(projectRoot, "package.json");
88
+ if (fs.existsSync(packageJsonPath)) {
89
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
90
+ const allDeps = {
91
+ ...packageJson.dependencies,
92
+ ...packageJson.devDependencies,
93
+ ...packageJson.peerDependencies
94
+ };
95
+ for (const [name, version] of Object.entries(allDeps)) {
96
+ if (typeof version === "string" && (name.includes("smrt") || name.includes("@have/") || await hasSmrtManifest(nodeModulesPath, name))) {
97
+ packages.push(name);
98
+ }
99
+ }
100
+ }
101
+ } catch (error) {
102
+ console.warn("[smrt:consumer] Error discovering packages:", error);
103
+ }
104
+ return packages;
105
+ }
106
+ async function hasSmrtManifest(nodeModulesPath, packageName) {
107
+ const packagePath = path.join(nodeModulesPath, packageName);
108
+ const manifestPath = path.join(
109
+ packagePath,
110
+ "dist",
111
+ "manifest",
112
+ "static-manifest.js"
113
+ );
114
+ return fs.existsSync(manifestPath);
115
+ }
116
+ async function aggregateTypeManifests(packages, projectRoot) {
117
+ const aggregatedManifest = {
118
+ version: "1.0.0",
119
+ timestamp: Date.now(),
120
+ objects: {}
121
+ };
122
+ for (const packageName of packages) {
123
+ try {
124
+ const packageDir = path.join(projectRoot, "node_modules", packageName);
125
+ const packageJsonPath = path.join(packageDir, "package.json");
126
+ let packageJson;
127
+ try {
128
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf-8");
129
+ packageJson = JSON.parse(packageJsonContent);
130
+ } catch {
131
+ console.warn(
132
+ `[smrt:consumer] Could not read package.json for ${packageName}`
133
+ );
134
+ continue;
135
+ }
136
+ const manifestCandidates = [
137
+ path.join(packageDir, "dist", "manifest", "static-manifest.js"),
138
+ path.join(packageDir, "dist", "manifest.json"),
139
+ path.join(packageDir, "manifest.json")
140
+ ];
141
+ for (const manifestPath of manifestCandidates) {
142
+ if (fs.existsSync(manifestPath)) {
143
+ let manifest;
144
+ if (manifestPath.endsWith(".js")) {
145
+ const manifestModule = await import(manifestPath);
146
+ manifest = manifestModule.staticManifest || manifestModule.default;
147
+ } else {
148
+ const manifestContent = fs.readFileSync(manifestPath, "utf-8");
149
+ manifest = JSON.parse(manifestContent);
150
+ }
151
+ if (manifest?.objects) {
152
+ console.log(
153
+ `[smrt:consumer] Loaded manifest from ${packageName} (${Object.keys(manifest.objects).length} objects)`
154
+ );
155
+ for (const [objectName, objectDef] of Object.entries(
156
+ manifest.objects
157
+ )) {
158
+ const def = objectDef;
159
+ aggregatedManifest.objects[objectName] = {
160
+ ...def,
161
+ // Ensure package metadata is preserved/set
162
+ packageName: def.packageName || manifest.packageName || packageName,
163
+ packageVersion: def.packageVersion || manifest.packageVersion || packageJson.version,
164
+ // Add fallback import paths if missing
165
+ importPath: def.importPath || determineImportPath(packageJson),
166
+ exportName: def.exportName || def.className || objectName,
167
+ collectionExportName: def.collectionExportName || `${def.className || objectName}Collection`
168
+ };
169
+ }
170
+ break;
171
+ }
172
+ }
173
+ }
174
+ } catch (error) {
175
+ console.warn(
176
+ `[smrt:consumer] Error loading manifest from ${packageName}:`,
177
+ error
178
+ );
179
+ }
180
+ }
181
+ return aggregatedManifest;
182
+ }
183
+ function determineImportPath(packageJson) {
184
+ const packageName = packageJson.name;
185
+ if (!packageName) {
186
+ throw new Error("Package name not found in package.json");
187
+ }
188
+ if (packageJson.exports) {
189
+ if (packageJson.exports["./objects"]) {
190
+ return `${packageName}/objects`;
191
+ }
192
+ const mainExport = packageJson.exports["."];
193
+ if (mainExport) {
194
+ if (typeof mainExport === "object") {
195
+ if (mainExport.import) {
196
+ return packageName;
197
+ }
198
+ if (mainExport.default) {
199
+ return packageName;
200
+ }
201
+ }
202
+ return packageName;
203
+ }
204
+ }
205
+ if (packageJson.main) {
206
+ return packageName;
207
+ }
208
+ return packageName;
209
+ }
210
+ async function saveAggregatedManifest(manifest, projectRoot) {
211
+ const smrtDir = path.join(projectRoot, ".smrt");
212
+ const manifestPath = path.join(smrtDir, "manifest.json");
213
+ try {
214
+ if (!fs.existsSync(smrtDir)) {
215
+ fs.mkdirSync(smrtDir, { recursive: true });
216
+ }
217
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
218
+ console.log(
219
+ `[smrt:consumer] Saved aggregated manifest to .smrt/manifest.json (${Object.keys(manifest.objects).length} objects)`
220
+ );
221
+ } catch (error) {
222
+ console.warn("[smrt:consumer] Failed to save aggregated manifest:", error);
223
+ }
224
+ }
225
+ async function generateRegistrationFile(manifest, projectRoot) {
226
+ const smrtDir = path.join(projectRoot, ".smrt");
227
+ const registerPath = path.join(smrtDir, "register.js");
228
+ const imports = [];
229
+ const registrations = [];
230
+ let importedEntryCount = 0;
231
+ let registeredObjectCount = 0;
232
+ const manifestObjects = manifest.objects;
233
+ const manifestObjectLookup = /* @__PURE__ */ new Map();
234
+ for (const [key, def] of Object.entries(manifestObjects)) {
235
+ const candidate = def;
236
+ const lookupKeys = [
237
+ key,
238
+ key.includes(":") ? key.split(":").pop() : void 0,
239
+ candidate.qualifiedName,
240
+ candidate.className,
241
+ candidate.exportName
242
+ ];
243
+ for (const lookupKey of lookupKeys) {
244
+ if (lookupKey && !manifestObjectLookup.has(lookupKey)) {
245
+ manifestObjectLookup.set(lookupKey, candidate);
246
+ }
247
+ }
248
+ }
249
+ const collectionClassMemo = /* @__PURE__ */ new WeakMap();
250
+ const isCollectionClass = (def, seen = /* @__PURE__ */ new Set()) => {
251
+ if (!def || typeof def !== "object") {
252
+ return false;
253
+ }
254
+ const cached = collectionClassMemo.get(def);
255
+ if (cached !== void 0) {
256
+ return cached;
257
+ }
258
+ if (def?.extends === "SmrtCollection" || def?.extendsTypeArg !== void 0) {
259
+ collectionClassMemo.set(def, true);
260
+ return true;
261
+ }
262
+ const parentName = def?.extendsQualified || def?.extends;
263
+ if (!parentName || seen.has(parentName)) {
264
+ collectionClassMemo.set(def, false);
265
+ return false;
266
+ }
267
+ seen.add(parentName);
268
+ const parentDef = manifestObjectLookup.get(parentName);
269
+ const isCollection = parentDef ? isCollectionClass(parentDef, seen) : false;
270
+ collectionClassMemo.set(def, isCollection);
271
+ return isCollection;
272
+ };
273
+ for (const [objectName, objectDef] of Object.entries(manifestObjects)) {
274
+ const def = objectDef;
275
+ if (!def.packageName || def.packageName === manifest.packageName) {
276
+ continue;
277
+ }
278
+ const importPath = def.importPath || def.packageName;
279
+ const exportName = def.exportName || def.className || objectName;
280
+ const collectionExportName = def.collectionExportName;
281
+ const hasCollection = def.hasCollection;
282
+ const tableName = def.collection || objectName.toLowerCase();
283
+ if (hasCollection && collectionExportName) {
284
+ imports.push(
285
+ `import { ${exportName}, ${collectionExportName} } from '${importPath}';`
286
+ );
287
+ } else {
288
+ imports.push(`import { ${exportName} } from '${importPath}';`);
289
+ }
290
+ importedEntryCount++;
291
+ if (isCollectionClass(def)) {
292
+ continue;
293
+ }
294
+ registrations.push(
295
+ `ObjectRegistry.register(${exportName}, { name: ${JSON.stringify(exportName)}, packageName: ${JSON.stringify(def.packageName)} });`
296
+ );
297
+ if (hasCollection && collectionExportName) {
298
+ registrations.push(
299
+ `ObjectRegistry.registerCollection('${tableName}', ${collectionExportName});`
300
+ );
301
+ }
302
+ registeredObjectCount++;
303
+ }
304
+ if (importedEntryCount === 0) {
305
+ console.log("[smrt:consumer] No external entries - skipping register.js");
306
+ return;
307
+ }
308
+ const registeredObjectLabel = registeredObjectCount === 1 ? "object" : "objects";
309
+ const content = `/**
310
+ * Auto-generated by @happyvertical/smrt-core/consumer-plugin
311
+ * DO NOT EDIT - This file is regenerated on every build
312
+ *
313
+ * Registers SMRT objects from external packages for CLI discovery.
314
+ * Generated at: ${(/* @__PURE__ */ new Date()).toISOString()}
315
+ */
316
+
317
+ import { ObjectRegistry } from '@happyvertical/smrt-core';
318
+
319
+ ${imports.join("\n")}
320
+
321
+ // Register all objects (executed during module evaluation)
322
+ ${registrations.join("\n")}
323
+
324
+ export function registerAll() {
325
+ // Objects are already registered during module evaluation
326
+ console.log('[smrt:register] Registered ${registeredObjectCount} external ${registeredObjectLabel}');
327
+ }
328
+ `;
329
+ if (!fs.existsSync(smrtDir)) {
330
+ fs.mkdirSync(smrtDir, { recursive: true });
331
+ }
332
+ fs.writeFileSync(registerPath, content, "utf-8");
333
+ console.log(
334
+ `[smrt:consumer] Generated .smrt/register.js with ${importedEntryCount} external entries (${registeredObjectCount} registered ${registeredObjectLabel})`
335
+ );
336
+ }
337
+ async function generateProjectTypes(typeManifest, typesDir, projectRoot) {
338
+ if (!typeManifest || Object.keys(typeManifest.objects).length === 0) {
339
+ console.log(
340
+ "[smrt:consumer] No SMRT objects found, skipping type generation"
341
+ );
342
+ return;
343
+ }
344
+ await generateDeclarations({
345
+ manifest: typeManifest,
346
+ outDir: typesDir,
347
+ projectRoot,
348
+ includeVirtualModules: true,
349
+ includeObjectTypes: true
350
+ });
351
+ console.log(
352
+ `[smrt:consumer] Generated types for ${Object.keys(typeManifest.objects).length} objects`
353
+ );
354
+ }
355
+ function getTypeFileName(virtualModule) {
356
+ const moduleMap = {
357
+ "@smrt/routes": "smrt-routes.d.ts",
358
+ "@smrt/client": "smrt-client.d.ts",
359
+ "@smrt/mcp": "smrt-mcp.d.ts",
360
+ "@smrt/types": "smrt-types.d.ts",
361
+ "@smrt/manifest": "smrt-manifest.d.ts"
362
+ };
363
+ return moduleMap[virtualModule] || "smrt-unknown.d.ts";
364
+ }
365
+ function generateFallbackRoutesModule() {
366
+ return `
367
+ // Fallback routes module
368
+ export function setupRoutes(app) {
369
+ console.warn('[smrt:consumer] No routes available - SMRT packages may not be properly configured');
370
+ }
371
+ export default setupRoutes;
372
+ `;
373
+ }
374
+ function generateFallbackClientModule(manifest) {
375
+ const objects = Object.entries(manifest?.objects || {});
376
+ if (objects.length === 0) {
377
+ return `
378
+ // Fallback client module
379
+ export function createClient(basePath = '/api/v1') {
380
+ console.warn('[smrt:consumer] No API client available - SMRT packages may not be properly configured');
381
+ return {};
382
+ }
383
+ export default createClient;
384
+ `;
385
+ }
386
+ const clientMethods = objects.map(([name, obj]) => {
387
+ const { collection } = obj;
388
+ return `
389
+ ${name}: {
390
+ list: () => fetch(basePath + '/${collection}').then(r => r.json()),
391
+ get: (id) => fetch(basePath + '/${collection}/' + id).then(r => r.json()),
392
+ create: (data) => fetch(basePath + '/${collection}', {
393
+ method: 'POST',
394
+ headers: { 'Content-Type': 'application/json' },
395
+ body: JSON.stringify(data)
396
+ }).then(r => r.json()),
397
+ update: (id, data) => fetch(basePath + '/${collection}/' + id, {
398
+ method: 'PUT',
399
+ headers: { 'Content-Type': 'application/json' },
400
+ body: JSON.stringify(data)
401
+ }).then(r => r.json()),
402
+ delete: (id) => fetch(basePath + '/${collection}/' + id, {
403
+ method: 'DELETE'
404
+ }).then(r => r.ok)
405
+ }`;
406
+ }).join(",");
407
+ return `
408
+ // Auto-generated API client from SMRT consumer
409
+ export function createClient(basePath = '/api/v1') {
410
+ return {${clientMethods}
411
+ };
412
+ }
413
+ export default createClient;
414
+ `;
415
+ }
416
+ function generateFallbackMcpModule() {
417
+ return `
418
+ // Fallback MCP module
419
+ export const tools = [];
420
+ export function createMCPServer() {
421
+ console.warn('[smrt:consumer] No MCP tools available - SMRT packages may not be properly configured');
422
+ return { name: 'smrt-consumer', version: '1.0.0', tools: [] };
423
+ }
424
+ export default createMCPServer;
425
+ `;
426
+ }
427
+ function generateFallbackTypesModule(manifest) {
428
+ const objects = Object.entries(manifest?.objects || {});
429
+ if (objects.length === 0) {
430
+ return `// No types available`;
431
+ }
432
+ const interfaces = objects.map(([_name, obj]) => {
433
+ return `export interface ${obj.className}Data {
434
+ id?: string;
435
+ created_at?: string;
436
+ updated_at?: string;
437
+ [key: string]: any;
438
+ }`;
439
+ });
440
+ return interfaces.join("\n\n");
441
+ }
442
+ function generateFallbackManifestModule(manifest) {
443
+ return `
444
+ // Auto-generated manifest from SMRT consumer
445
+ export const manifest = ${JSON.stringify(manifest, null, 2)};
446
+ export default manifest;
447
+ `;
448
+ }
449
+ export {
450
+ smrtConsumer
451
+ };
452
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/consumer-plugin/index.ts"],"sourcesContent":["/**\n * Vite plugin for consuming SMRT packages\n * Solves virtual module resolution in downstream projects\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { Plugin } from 'vite';\nimport { generateDeclarations } from '../prebuild/index.js';\n\nexport interface SmrtConsumerOptions {\n /** SMRT packages to scan (e.g., ['@my-org/products', '@my-org/content']) */\n packages?: string[];\n /** Generate TypeScript declarations */\n generateTypes?: boolean;\n /** Output directory for generated types */\n typesDir?: string;\n /** Project root path */\n projectRoot?: string;\n /** SvelteKit integration mode */\n svelteKit?: boolean;\n /** Use static types only (for federation builds) */\n staticTypes?: boolean;\n /** Disable file scanning */\n disableScanning?: boolean;\n}\n\nconst VIRTUAL_MODULES = {\n '@smrt/routes': 'smrt:routes',\n '@smrt/client': 'smrt:client',\n '@smrt/mcp': 'smrt:mcp',\n '@smrt/types': 'smrt:types',\n '@smrt/manifest': 'smrt:manifest',\n};\n\n/**\n * Consumer plugin for projects that use SMRT packages\n */\nexport function smrtConsumer(options: SmrtConsumerOptions = {}): Plugin {\n const {\n packages = [],\n generateTypes = true,\n typesDir = 'src/types/smrt-generated',\n projectRoot = process.cwd(),\n disableScanning = false,\n } = options;\n\n let smrtPackages: string[] = [];\n let typeManifest: any = null;\n let typesGenerated = false;\n\n return {\n name: 'smrt-consumer',\n\n async buildStart() {\n console.log('[smrt:consumer] Initializing SMRT consumer plugin');\n\n // Discover SMRT packages if not explicitly specified\n if (packages.length === 0 && !disableScanning) {\n smrtPackages = await discoverSmrtPackages(projectRoot);\n } else {\n smrtPackages = packages;\n }\n\n if (smrtPackages.length > 0) {\n console.log(\n `[smrt:consumer] Found SMRT packages: ${smrtPackages.join(', ')}`,\n );\n\n // Aggregate type manifests from discovered packages\n typeManifest = await aggregateTypeManifests(smrtPackages, projectRoot);\n\n // Save aggregated manifest for CLI discovery\n await saveAggregatedManifest(typeManifest, projectRoot);\n\n // Generate registration file for CLI class loading\n await generateRegistrationFile(typeManifest, projectRoot);\n\n // Generate types if requested\n if (generateTypes && !typesGenerated) {\n await generateProjectTypes(typeManifest, typesDir, projectRoot);\n typesGenerated = true;\n }\n } else {\n console.log('[smrt:consumer] No SMRT packages found');\n typeManifest = { version: '1.0.0', timestamp: Date.now(), objects: {} };\n }\n },\n\n resolveId(id, _importer) {\n // Resolve virtual modules to generated type declarations\n if (id in VIRTUAL_MODULES) {\n const typeFileName = getTypeFileName(id);\n const typePath = path.join(projectRoot, typesDir, typeFileName);\n\n // If types file exists, resolve to it\n if (fs.existsSync(typePath)) {\n return typePath;\n }\n\n // Otherwise use virtual module ID for runtime resolution\n return `\\0${VIRTUAL_MODULES[id as keyof typeof VIRTUAL_MODULES]}`;\n }\n return null;\n },\n\n async load(id) {\n // Handle virtual modules if types aren't available\n const cleanId = id.startsWith('\\0') ? id.slice(1) : id;\n\n if (!typeManifest) {\n typeManifest = { version: '1.0.0', timestamp: Date.now(), objects: {} };\n }\n\n switch (cleanId) {\n case 'smrt:routes':\n return generateFallbackRoutesModule();\n\n case 'smrt:client':\n return generateFallbackClientModule(typeManifest);\n\n case 'smrt:mcp':\n return generateFallbackMcpModule();\n\n case 'smrt:types':\n return generateFallbackTypesModule(typeManifest);\n\n case 'smrt:manifest':\n return generateFallbackManifestModule(typeManifest);\n\n default:\n return null;\n }\n },\n };\n}\n\n/**\n * Discover SMRT packages in node_modules\n */\nasync function discoverSmrtPackages(projectRoot: string): Promise<string[]> {\n const packages: string[] = [];\n const nodeModulesPath = path.join(projectRoot, 'node_modules');\n\n if (!fs.existsSync(nodeModulesPath)) {\n return packages;\n }\n\n try {\n // Check package.json for workspace dependencies\n const packageJsonPath = path.join(projectRoot, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies,\n };\n\n // Look for packages that likely contain SMRT objects\n for (const [name, version] of Object.entries(allDeps)) {\n if (\n typeof version === 'string' &&\n (name.includes('smrt') ||\n name.includes('@have/') ||\n (await hasSmrtManifest(nodeModulesPath, name)))\n ) {\n packages.push(name);\n }\n }\n }\n } catch (error) {\n console.warn('[smrt:consumer] Error discovering packages:', error);\n }\n\n return packages;\n}\n\n/**\n * Check if a package has SMRT manifest\n */\nasync function hasSmrtManifest(\n nodeModulesPath: string,\n packageName: string,\n): Promise<boolean> {\n const packagePath = path.join(nodeModulesPath, packageName);\n const manifestPath = path.join(\n packagePath,\n 'dist',\n 'manifest',\n 'static-manifest.js',\n );\n return fs.existsSync(manifestPath);\n}\n\n/**\n * Aggregate type manifests from multiple packages\n */\nasync function aggregateTypeManifests(\n packages: string[],\n projectRoot: string,\n): Promise<any> {\n const aggregatedManifest = {\n version: '1.0.0',\n timestamp: Date.now(),\n objects: {} as Record<string, any>,\n };\n\n for (const packageName of packages) {\n try {\n const packageDir = path.join(projectRoot, 'node_modules', packageName);\n\n // Load package.json for version and export information\n const packageJsonPath = path.join(packageDir, 'package.json');\n let packageJson: any;\n try {\n const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8');\n packageJson = JSON.parse(packageJsonContent);\n } catch {\n console.warn(\n `[smrt:consumer] Could not read package.json for ${packageName}`,\n );\n continue;\n }\n\n // Try multiple manifest locations\n const manifestCandidates = [\n path.join(packageDir, 'dist', 'manifest', 'static-manifest.js'),\n path.join(packageDir, 'dist', 'manifest.json'),\n path.join(packageDir, 'manifest.json'),\n ];\n\n for (const manifestPath of manifestCandidates) {\n if (fs.existsSync(manifestPath)) {\n // Import or read the manifest\n let manifest: any;\n if (manifestPath.endsWith('.js')) {\n const manifestModule = await import(manifestPath);\n manifest = manifestModule.staticManifest || manifestModule.default;\n } else {\n const manifestContent = fs.readFileSync(manifestPath, 'utf-8');\n manifest = JSON.parse(manifestContent);\n }\n\n if (manifest?.objects) {\n console.log(\n `[smrt:consumer] Loaded manifest from ${packageName} (${Object.keys(manifest.objects).length} objects)`,\n );\n\n // ENHANCED: Preserve package metadata for each object\n for (const [objectName, objectDef] of Object.entries(\n manifest.objects,\n )) {\n const def = objectDef as any;\n\n aggregatedManifest.objects[objectName] = {\n ...def,\n // Ensure package metadata is preserved/set\n packageName:\n def.packageName || manifest.packageName || packageName,\n packageVersion:\n def.packageVersion ||\n manifest.packageVersion ||\n packageJson.version,\n // Add fallback import paths if missing\n importPath: def.importPath || determineImportPath(packageJson),\n exportName: def.exportName || def.className || objectName,\n collectionExportName:\n def.collectionExportName ||\n `${def.className || objectName}Collection`,\n };\n }\n\n break; // Use first found manifest for this package\n }\n }\n }\n } catch (error) {\n console.warn(\n `[smrt:consumer] Error loading manifest from ${packageName}:`,\n error,\n );\n }\n }\n\n return aggregatedManifest;\n}\n\n/**\n * Determine import path from package.json\n */\nfunction determineImportPath(packageJson: any): string {\n const packageName = packageJson.name;\n\n if (!packageName) {\n throw new Error('Package name not found in package.json');\n }\n\n // Strategy 1: Check for specific exports\n if (packageJson.exports) {\n // Check for objects export\n if (packageJson.exports['./objects']) {\n return `${packageName}/objects`;\n }\n\n // Check for main export\n const mainExport = packageJson.exports['.'];\n if (mainExport) {\n // Handle conditional exports\n if (typeof mainExport === 'object') {\n if (mainExport.import) {\n return packageName;\n }\n if (mainExport.default) {\n return packageName;\n }\n }\n return packageName;\n }\n }\n\n // Strategy 2: Check main field\n if (packageJson.main) {\n return packageName;\n }\n\n // Strategy 3: Fallback to package name\n return packageName;\n}\n\n/**\n * Save aggregated manifest to .smrt/manifest.json for CLI discovery\n */\nasync function saveAggregatedManifest(\n manifest: any,\n projectRoot: string,\n): Promise<void> {\n const smrtDir = path.join(projectRoot, '.smrt');\n const manifestPath = path.join(smrtDir, 'manifest.json');\n\n try {\n // Create .smrt directory if it doesn't exist\n if (!fs.existsSync(smrtDir)) {\n fs.mkdirSync(smrtDir, { recursive: true });\n }\n\n // Write manifest\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\n\n console.log(\n `[smrt:consumer] Saved aggregated manifest to .smrt/manifest.json (${Object.keys(manifest.objects).length} objects)`,\n );\n } catch (error) {\n console.warn('[smrt:consumer] Failed to save aggregated manifest:', error);\n }\n}\n\n/**\n * Generate registration file for CLI class loading\n *\n * Creates .smrt/register.js with static imports and registrations\n * for all external SMRT objects discovered during build.\n */\nasync function generateRegistrationFile(\n manifest: any,\n projectRoot: string,\n): Promise<void> {\n const smrtDir = path.join(projectRoot, '.smrt');\n const registerPath = path.join(smrtDir, 'register.js');\n\n // Build import statements and registrations\n const imports: string[] = [];\n const registrations: string[] = [];\n let importedEntryCount = 0;\n let registeredObjectCount = 0;\n\n const manifestObjects = manifest.objects as Record<string, any>;\n const manifestObjectLookup = new Map<string, any>();\n for (const [key, def] of Object.entries(manifestObjects)) {\n const candidate = def as any;\n const lookupKeys = [\n key,\n key.includes(':') ? key.split(':').pop() : undefined,\n candidate.qualifiedName,\n candidate.className,\n candidate.exportName,\n ];\n\n for (const lookupKey of lookupKeys) {\n if (lookupKey && !manifestObjectLookup.has(lookupKey)) {\n manifestObjectLookup.set(lookupKey, candidate);\n }\n }\n }\n\n const collectionClassMemo = new WeakMap<object, boolean>();\n\n const isCollectionClass = (def: any, seen = new Set<string>()): boolean => {\n if (!def || typeof def !== 'object') {\n return false;\n }\n\n const cached = collectionClassMemo.get(def);\n if (cached !== undefined) {\n return cached;\n }\n\n if (\n def?.extends === 'SmrtCollection' ||\n def?.extendsTypeArg !== undefined\n ) {\n collectionClassMemo.set(def, true);\n return true;\n }\n\n const parentName = def?.extendsQualified || def?.extends;\n if (!parentName || seen.has(parentName)) {\n collectionClassMemo.set(def, false);\n return false;\n }\n seen.add(parentName);\n\n const parentDef = manifestObjectLookup.get(parentName);\n const isCollection = parentDef ? isCollectionClass(parentDef, seen) : false;\n collectionClassMemo.set(def, isCollection);\n\n return isCollection;\n };\n\n for (const [objectName, objectDef] of Object.entries(manifestObjects)) {\n const def = objectDef as any;\n\n // Skip local objects (they're imported from local entry point)\n if (!def.packageName || def.packageName === manifest.packageName) {\n continue;\n }\n\n const importPath = def.importPath || def.packageName;\n const exportName = def.exportName || def.className || objectName;\n const collectionExportName = def.collectionExportName;\n const hasCollection = def.hasCollection; // Check if collection class actually exists\n const tableName = def.collection || objectName.toLowerCase();\n\n // Generate import statement\n // Only import collection if it exists (hasCollection is truthy)\n if (hasCollection && collectionExportName) {\n imports.push(\n `import { ${exportName}, ${collectionExportName} } from '${importPath}';`,\n );\n } else {\n imports.push(`import { ${exportName} } from '${importPath}';`);\n }\n importedEntryCount++;\n\n if (isCollectionClass(def)) {\n continue;\n }\n\n // Generate registration calls\n // The import above already triggers the @smrt() decorator which registers the class\n // properly with its simple name and qualified name. We call register() again with\n // an empty config just to ensure the class is registered (in case it lacks a decorator).\n // Do NOT pass { name: qualifiedName } as that creates a separate registry entry.\n registrations.push(\n `ObjectRegistry.register(${exportName}, { name: ${JSON.stringify(exportName)}, packageName: ${JSON.stringify(def.packageName)} });`,\n );\n\n // Only register collection if it exists\n if (hasCollection && collectionExportName) {\n registrations.push(\n `ObjectRegistry.registerCollection('${tableName}', ${collectionExportName});`,\n );\n }\n\n registeredObjectCount++;\n }\n\n // Skip generation if no external entries\n if (importedEntryCount === 0) {\n console.log('[smrt:consumer] No external entries - skipping register.js');\n return;\n }\n\n const registeredObjectLabel =\n registeredObjectCount === 1 ? 'object' : 'objects';\n\n // Generate file content\n const content = `/**\n * Auto-generated by @happyvertical/smrt-core/consumer-plugin\n * DO NOT EDIT - This file is regenerated on every build\n *\n * Registers SMRT objects from external packages for CLI discovery.\n * Generated at: ${new Date().toISOString()}\n */\n\nimport { ObjectRegistry } from '@happyvertical/smrt-core';\n\n${imports.join('\\n')}\n\n// Register all objects (executed during module evaluation)\n${registrations.join('\\n')}\n\nexport function registerAll() {\n // Objects are already registered during module evaluation\n console.log('[smrt:register] Registered ${registeredObjectCount} external ${registeredObjectLabel}');\n}\n`;\n\n // Create .smrt directory if needed\n if (!fs.existsSync(smrtDir)) {\n fs.mkdirSync(smrtDir, { recursive: true });\n }\n\n // Write registration file\n fs.writeFileSync(registerPath, content, 'utf-8');\n\n console.log(\n `[smrt:consumer] Generated .smrt/register.js with ${importedEntryCount} external entries (${registeredObjectCount} registered ${registeredObjectLabel})`,\n );\n}\n\n/**\n * Generate project-specific types\n */\nasync function generateProjectTypes(\n typeManifest: any,\n typesDir: string,\n projectRoot: string,\n): Promise<void> {\n if (!typeManifest || Object.keys(typeManifest.objects).length === 0) {\n console.log(\n '[smrt:consumer] No SMRT objects found, skipping type generation',\n );\n return;\n }\n\n await generateDeclarations({\n manifest: typeManifest,\n outDir: typesDir,\n projectRoot,\n includeVirtualModules: true,\n includeObjectTypes: true,\n });\n\n console.log(\n `[smrt:consumer] Generated types for ${Object.keys(typeManifest.objects).length} objects`,\n );\n}\n\n/**\n * Get type file name for virtual module\n */\nfunction getTypeFileName(virtualModule: string): string {\n const moduleMap: Record<string, string> = {\n '@smrt/routes': 'smrt-routes.d.ts',\n '@smrt/client': 'smrt-client.d.ts',\n '@smrt/mcp': 'smrt-mcp.d.ts',\n '@smrt/types': 'smrt-types.d.ts',\n '@smrt/manifest': 'smrt-manifest.d.ts',\n };\n return moduleMap[virtualModule] || 'smrt-unknown.d.ts';\n}\n\n/**\n * Fallback modules for when types aren't available\n */\nfunction generateFallbackRoutesModule(): string {\n return `\n// Fallback routes module\nexport function setupRoutes(app) {\n console.warn('[smrt:consumer] No routes available - SMRT packages may not be properly configured');\n}\nexport default setupRoutes;\n`;\n}\n\nfunction generateFallbackClientModule(manifest: any): string {\n const objects = Object.entries(manifest?.objects || {});\n if (objects.length === 0) {\n return `\n// Fallback client module\nexport function createClient(basePath = '/api/v1') {\n console.warn('[smrt:consumer] No API client available - SMRT packages may not be properly configured');\n return {};\n}\nexport default createClient;\n`;\n }\n\n // Generate basic client from manifest\n const clientMethods = objects\n .map(([name, obj]: [string, any]) => {\n const { collection } = obj;\n return `\n ${name}: {\n list: () => fetch(basePath + '/${collection}').then(r => r.json()),\n get: (id) => fetch(basePath + '/${collection}/' + id).then(r => r.json()),\n create: (data) => fetch(basePath + '/${collection}', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data)\n }).then(r => r.json()),\n update: (id, data) => fetch(basePath + '/${collection}/' + id, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data)\n }).then(r => r.json()),\n delete: (id) => fetch(basePath + '/${collection}/' + id, {\n method: 'DELETE'\n }).then(r => r.ok)\n }`;\n })\n .join(',');\n\n return `\n// Auto-generated API client from SMRT consumer\nexport function createClient(basePath = '/api/v1') {\n return {${clientMethods}\n };\n}\nexport default createClient;\n`;\n}\n\nfunction generateFallbackMcpModule(): string {\n return `\n// Fallback MCP module\nexport const tools = [];\nexport function createMCPServer() {\n console.warn('[smrt:consumer] No MCP tools available - SMRT packages may not be properly configured');\n return { name: 'smrt-consumer', version: '1.0.0', tools: [] };\n}\nexport default createMCPServer;\n`;\n}\n\nfunction generateFallbackTypesModule(manifest: any): string {\n const objects = Object.entries(manifest?.objects || {});\n if (objects.length === 0) {\n return `// No types available`;\n }\n\n // Generate basic interfaces\n const interfaces = objects.map(([_name, obj]: [string, any]) => {\n return `export interface ${obj.className}Data {\n id?: string;\n created_at?: string;\n updated_at?: string;\n [key: string]: any;\n}`;\n });\n\n return interfaces.join('\\n\\n');\n}\n\nfunction generateFallbackManifestModule(manifest: any): string {\n return `\n// Auto-generated manifest from SMRT consumer\nexport const manifest = ${JSON.stringify(manifest, null, 2)};\nexport default manifest;\n`;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Vite consumer plugin for SMRT packages
3
+ *
4
+ * Re-exports consumer plugin functionality from the consumer-plugin/ directory.
5
+ * This file serves as the entry point for @smrt/core/consumer-plugin exports.
6
+ */
7
+ export * from './consumer-plugin/index.js';
8
+ //# sourceMappingURL=consumer-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer-plugin.d.ts","sourceRoot":"","sources":["../src/consumer-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { smrtConsumer } from "./consumer-plugin/index.js";
2
+ export {
3
+ smrtConsumer
4
+ };
5
+ //# sourceMappingURL=consumer-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer-plugin.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,95 @@
1
+ import { DatabaseInterface } from '@happyvertical/sql';
2
+ /**
3
+ * Unified type for all database configuration formats
4
+ *
5
+ * Supports three formats:
6
+ * - **String**: Connection URL (e.g., 'products.db', ':memory:', 'postgres://...')
7
+ * - **Config object**: Full configuration with type, url, and options
8
+ * - **DatabaseInterface**: Pre-initialized database instance
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // String shortcut
13
+ * const config: DatabaseConfig = 'products.db';
14
+ *
15
+ * // Config object
16
+ * const config: DatabaseConfig = {
17
+ * type: 'sqlite',
18
+ * url: 'products.db',
19
+ * authToken: 'token'
20
+ * };
21
+ *
22
+ * // Pre-initialized instance
23
+ * const db = await getDatabase({ type: 'sqlite', url: ':memory:' });
24
+ * const config: DatabaseConfig = db;
25
+ * ```
26
+ */
27
+ export type DatabaseConfig = string | {
28
+ url?: string;
29
+ type?: 'sqlite' | 'postgres' | 'duckdb' | 'json';
30
+ authToken?: string;
31
+ [key: string]: any;
32
+ } | DatabaseInterface;
33
+ /**
34
+ * Type guard to check if a value is a DatabaseInterface instance
35
+ *
36
+ * @param value - Value to check
37
+ * @returns True if value has query() and close() methods
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * if (isDatabaseInterface(config)) {
42
+ * // config is DatabaseInterface
43
+ * await config.query('SELECT 1');
44
+ * }
45
+ * ```
46
+ */
47
+ export declare function isDatabaseInterface(value: unknown): value is DatabaseInterface;
48
+ /**
49
+ * Options for resolving a database configuration
50
+ */
51
+ export interface ResolveDatabaseOptions {
52
+ /**
53
+ * Cache key for connection pooling.
54
+ * If provided, the same dbid returns the same cached connection.
55
+ */
56
+ dbid?: string;
57
+ /**
58
+ * Optional pre-generated schemas to pass to the database adapter.
59
+ *
60
+ * Intended for explicit tooling and test utilities that bootstrap schema
61
+ * ahead of runtime. Core runtime no longer passes these automatically.
62
+ */
63
+ schemas?: Record<string, any>;
64
+ }
65
+ /**
66
+ * Resolve any DatabaseConfig format to a DatabaseInterface instance
67
+ *
68
+ * This utility function normalizes the three config formats:
69
+ * 1. **String URL**: Passed to getDatabase() with auto-detected type
70
+ * 2. **Config object**: Passed to getDatabase() directly
71
+ * 3. **DatabaseInterface**: Returned as-is
72
+ *
73
+ * @param config - Database configuration in any supported format
74
+ * @param options - Resolution options (dbid for caching, optional explicit schemas)
75
+ * @returns Promise resolving to a DatabaseInterface instance
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * // String URL
80
+ * const db = await resolveDatabase('products.db');
81
+ *
82
+ * // Config object
83
+ * const db = await resolveDatabase({
84
+ * type: 'postgres',
85
+ * url: 'postgres://localhost/mydb'
86
+ * });
87
+ *
88
+ * // Pre-initialized instance (returned as-is)
89
+ * const existingDb = await getDatabase({ url: ':memory:' });
90
+ * const db = await resolveDatabase(existingDb);
91
+ * console.log(db === existingDb); // true
92
+ * ```
93
+ */
94
+ export declare function resolveDatabase(config: DatabaseConfig, options?: ResolveDatabaseOptions): Promise<DatabaseInterface>;
95
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN;IACE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,GACD,iBAAiB,CAAC;AAEtB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAO5B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA8B5B"}
@@ -0,0 +1,32 @@
1
+ import { getDatabase } from "@happyvertical/sql";
2
+ function isDatabaseInterface(value) {
3
+ return value !== null && typeof value === "object" && "query" in value && typeof value.query === "function";
4
+ }
5
+ async function resolveDatabase(config, options = {}) {
6
+ const { dbid, schemas } = options;
7
+ if (isDatabaseInterface(config)) {
8
+ return config;
9
+ }
10
+ if (typeof config === "string") {
11
+ const isMemoryDb2 = config === ":memory:";
12
+ return getDatabase({
13
+ url: config,
14
+ schemas,
15
+ ...isMemoryDb2 ? {} : { dbid: dbid ?? `smrt:${config}` }
16
+ });
17
+ }
18
+ const canUseMemory = !config.type || config.type === "sqlite";
19
+ const dbUrl = config.url || (canUseMemory ? ":memory:" : "");
20
+ const isMemoryDb = dbUrl === ":memory:";
21
+ return getDatabase({
22
+ ...config,
23
+ url: dbUrl,
24
+ schemas,
25
+ ...isMemoryDb ? {} : { dbid: dbid ?? `smrt:${dbUrl}` }
26
+ });
27
+ }
28
+ export {
29
+ isDatabaseInterface,
30
+ resolveDatabase
31
+ };
32
+ //# sourceMappingURL=database.js.map