@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,43 @@
1
+ import { JSONFactory } from "@happyvertical/json";
2
+ let adapter = null;
3
+ function getAdapter() {
4
+ if (!adapter) {
5
+ adapter = JSONFactory.create({
6
+ adapter: "auto",
7
+ // Use SIMD when available, fallback to native
8
+ fallback: true
9
+ });
10
+ }
11
+ return adapter;
12
+ }
13
+ function parse(text) {
14
+ return getAdapter().parse(text);
15
+ }
16
+ function stringify(value, replacer, space) {
17
+ return getAdapter().stringify(value, replacer, space);
18
+ }
19
+ function clone(value) {
20
+ return getAdapter().clone(value);
21
+ }
22
+ function safeParse(text) {
23
+ return getAdapter().safeParse(text);
24
+ }
25
+ function safeStringify(value) {
26
+ return getAdapter().safeStringify(value);
27
+ }
28
+ function isValid(text) {
29
+ return getAdapter().isValid(text);
30
+ }
31
+ function getAdapterInfo() {
32
+ return getAdapter().getInfo();
33
+ }
34
+ export {
35
+ clone,
36
+ getAdapterInfo,
37
+ isValid,
38
+ parse,
39
+ safeParse,
40
+ safeStringify,
41
+ stringify
42
+ };
43
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sources":["../../src/utils/json.ts"],"sourcesContent":["/**\n * JSON utilities with optional SIMD acceleration\n *\n * Uses @happyvertical/json for faster parsing when available,\n * with automatic fallback to native JSON.\n *\n * Performance: 2-3x faster parsing on large JSON files (680KB manifests)\n */\n\nimport {\n type JSONAdapter,\n JSONFactory,\n type ParseError,\n type Result,\n type StringifyError,\n} from '@happyvertical/json';\n\n// Singleton adapter instance\nlet adapter: JSONAdapter | null = null;\n\n/**\n * Get or create the JSON adapter instance\n */\nfunction getAdapter(): JSONAdapter {\n if (!adapter) {\n adapter = JSONFactory.create({\n adapter: 'auto', // Use SIMD when available, fallback to native\n fallback: true,\n });\n }\n return adapter;\n}\n\n/**\n * Parse JSON string with optional SIMD acceleration\n *\n * @example\n * ```typescript\n * import { parse } from '@happyvertical/smrt-core/utils/json';\n *\n * const data = parse<MyType>('{\"key\": \"value\"}');\n * ```\n */\nexport function parse<T = unknown>(text: string): T {\n return getAdapter().parse<T>(text);\n}\n\n/**\n * Stringify value to JSON with optional SIMD acceleration\n *\n * @example\n * ```typescript\n * import { stringify } from '@happyvertical/smrt-core/utils/json';\n *\n * const json = stringify({ key: 'value' });\n * const pretty = stringify({ key: 'value' }, null, 2);\n * ```\n */\nexport function stringify(\n value: unknown,\n replacer?:\n | ((key: string, value: unknown) => unknown)\n | (string | number)[]\n | null,\n space?: number | string,\n): string {\n return getAdapter().stringify(value, replacer as any, space as any);\n}\n\n/**\n * Deep clone via JSON round-trip with optional SIMD acceleration\n *\n * @example\n * ```typescript\n * import { clone } from '@happyvertical/smrt-core/utils/json';\n *\n * const copy = clone(original);\n * ```\n */\nexport function clone<T>(value: T): T {\n return getAdapter().clone(value);\n}\n\n/**\n * Parse JSON without throwing - returns Result type\n *\n * @example\n * ```typescript\n * import { safeParse } from '@happyvertical/smrt-core/utils/json';\n *\n * const result = safeParse<Config>(configJson);\n * if (result.success) {\n * console.log(result.value);\n * } else {\n * console.error(result.error.message);\n * }\n * ```\n */\nexport function safeParse<T = unknown>(text: string): Result<T, ParseError> {\n return getAdapter().safeParse<T>(text);\n}\n\n/**\n * Stringify without throwing - returns Result type\n *\n * @example\n * ```typescript\n * import { safeStringify } from '@happyvertical/smrt-core/utils/json';\n *\n * const result = safeStringify(data);\n * if (result.success) {\n * console.log(result.value);\n * } else {\n * console.error(result.error.message);\n * }\n * ```\n */\nexport function safeStringify(value: unknown): Result<string, StringifyError> {\n return getAdapter().safeStringify(value);\n}\n\n/**\n * Check if a string is valid JSON\n *\n * @example\n * ```typescript\n * import { isValid } from '@happyvertical/smrt-core/utils/json';\n *\n * if (isValid(userInput)) {\n * // Safe to parse\n * }\n * ```\n */\nexport function isValid(text: string): boolean {\n return getAdapter().isValid(text);\n}\n\n/**\n * Get information about the active JSON adapter\n *\n * @example\n * ```typescript\n * import { getAdapterInfo } from '@happyvertical/smrt-core/utils/json';\n *\n * const info = getAdapterInfo();\n * console.log(`Using ${info.name} adapter, SIMD: ${info.simdEnabled}`);\n * ```\n */\nexport function getAdapterInfo(): {\n name: string;\n isNative: boolean;\n version?: string;\n simdEnabled?: boolean;\n} {\n return getAdapter().getInfo();\n}\n\n/**\n * Re-export types for convenience\n */\nexport type { JSONAdapter, ParseError, Result, StringifyError };\n"],"names":[],"mappings":";AAkBA,IAAI,UAA8B;AAKlC,SAAS,aAA0B;AACjC,MAAI,CAAC,SAAS;AACZ,cAAU,YAAY,OAAO;AAAA,MAC3B,SAAS;AAAA;AAAA,MACT,UAAU;AAAA,IAAA,CACX;AAAA,EACH;AACA,SAAO;AACT;AAYO,SAAS,MAAmB,MAAiB;AAClD,SAAO,WAAA,EAAa,MAAS,IAAI;AACnC;AAaO,SAAS,UACd,OACA,UAIA,OACQ;AACR,SAAO,WAAA,EAAa,UAAU,OAAO,UAAiB,KAAY;AACpE;AAYO,SAAS,MAAS,OAAa;AACpC,SAAO,WAAA,EAAa,MAAM,KAAK;AACjC;AAiBO,SAAS,UAAuB,MAAqC;AAC1E,SAAO,WAAA,EAAa,UAAa,IAAI;AACvC;AAiBO,SAAS,cAAc,OAAgD;AAC5E,SAAO,WAAA,EAAa,cAAc,KAAK;AACzC;AAcO,SAAS,QAAQ,MAAuB;AAC7C,SAAO,WAAA,EAAa,QAAQ,IAAI;AAClC;AAaO,SAAS,iBAKd;AACA,SAAO,WAAA,EAAa,QAAA;AACtB;"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Simple LRU (Least Recently Used) Cache implementation
3
+ *
4
+ * Automatically evicts least recently used entries when size limit is reached.
5
+ * Useful for preventing memory leaks in long-running applications.
6
+ */
7
+ export declare class LRUCache<K, V> {
8
+ private cache;
9
+ private readonly maxSize;
10
+ /**
11
+ * Create an LRU cache with a maximum size
12
+ *
13
+ * @param maxSize - Maximum number of entries to store (default: 100)
14
+ */
15
+ constructor(maxSize?: number);
16
+ /**
17
+ * Get a value from the cache
18
+ * Marks the entry as recently used (moves to end of Map)
19
+ *
20
+ * @param key - Cache key
21
+ * @returns Value if found, undefined otherwise
22
+ */
23
+ get(key: K): V | undefined;
24
+ /**
25
+ * Set a value in the cache
26
+ * Evicts least recently used entry if cache is full
27
+ *
28
+ * @param key - Cache key
29
+ * @param value - Value to store
30
+ */
31
+ set(key: K, value: V): void;
32
+ /**
33
+ * Check if key exists in cache
34
+ *
35
+ * @param key - Cache key
36
+ * @returns True if key exists
37
+ */
38
+ has(key: K): boolean;
39
+ /**
40
+ * Remove an entry from the cache
41
+ *
42
+ * @param key - Cache key
43
+ * @returns True if entry was removed, false if not found
44
+ */
45
+ delete(key: K): boolean;
46
+ /**
47
+ * Clear all entries from the cache
48
+ */
49
+ clear(): void;
50
+ /**
51
+ * Get current cache size
52
+ *
53
+ * @returns Number of entries in cache
54
+ */
55
+ get size(): number;
56
+ /**
57
+ * Get all keys in the cache (least to most recently used)
58
+ *
59
+ * @returns Array of keys
60
+ */
61
+ keys(): K[];
62
+ /**
63
+ * Get all values in the cache (least to most recently used)
64
+ *
65
+ * @returns Array of values
66
+ */
67
+ values(): V[];
68
+ }
69
+ //# sourceMappingURL=lru-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../src/utils/lru-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;;OAIG;gBACS,OAAO,SAAM;IAKzB;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAa1B;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAmB3B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,IAAI,IAAI,CAAC,EAAE;IAIX;;;;OAIG;IACH,MAAM,IAAI,CAAC,EAAE;CAGd"}
@@ -0,0 +1,100 @@
1
+ class LRUCache {
2
+ cache;
3
+ maxSize;
4
+ /**
5
+ * Create an LRU cache with a maximum size
6
+ *
7
+ * @param maxSize - Maximum number of entries to store (default: 100)
8
+ */
9
+ constructor(maxSize = 100) {
10
+ this.cache = /* @__PURE__ */ new Map();
11
+ this.maxSize = maxSize;
12
+ }
13
+ /**
14
+ * Get a value from the cache
15
+ * Marks the entry as recently used (moves to end of Map)
16
+ *
17
+ * @param key - Cache key
18
+ * @returns Value if found, undefined otherwise
19
+ */
20
+ get(key) {
21
+ if (!this.cache.has(key)) {
22
+ return void 0;
23
+ }
24
+ const value = this.cache.get(key);
25
+ this.cache.delete(key);
26
+ this.cache.set(key, value);
27
+ return value;
28
+ }
29
+ /**
30
+ * Set a value in the cache
31
+ * Evicts least recently used entry if cache is full
32
+ *
33
+ * @param key - Cache key
34
+ * @param value - Value to store
35
+ */
36
+ set(key, value) {
37
+ if (this.cache.has(key)) {
38
+ this.cache.delete(key);
39
+ }
40
+ if (this.cache.size >= this.maxSize) {
41
+ const firstKey = this.cache.keys().next().value;
42
+ if (firstKey !== void 0) {
43
+ this.cache.delete(firstKey);
44
+ }
45
+ }
46
+ this.cache.set(key, value);
47
+ }
48
+ /**
49
+ * Check if key exists in cache
50
+ *
51
+ * @param key - Cache key
52
+ * @returns True if key exists
53
+ */
54
+ has(key) {
55
+ return this.cache.has(key);
56
+ }
57
+ /**
58
+ * Remove an entry from the cache
59
+ *
60
+ * @param key - Cache key
61
+ * @returns True if entry was removed, false if not found
62
+ */
63
+ delete(key) {
64
+ return this.cache.delete(key);
65
+ }
66
+ /**
67
+ * Clear all entries from the cache
68
+ */
69
+ clear() {
70
+ this.cache.clear();
71
+ }
72
+ /**
73
+ * Get current cache size
74
+ *
75
+ * @returns Number of entries in cache
76
+ */
77
+ get size() {
78
+ return this.cache.size;
79
+ }
80
+ /**
81
+ * Get all keys in the cache (least to most recently used)
82
+ *
83
+ * @returns Array of keys
84
+ */
85
+ keys() {
86
+ return Array.from(this.cache.keys());
87
+ }
88
+ /**
89
+ * Get all values in the cache (least to most recently used)
90
+ *
91
+ * @returns Array of values
92
+ */
93
+ values() {
94
+ return Array.from(this.cache.values());
95
+ }
96
+ }
97
+ export {
98
+ LRUCache
99
+ };
100
+ //# sourceMappingURL=lru-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru-cache.js","sources":["../../src/utils/lru-cache.ts"],"sourcesContent":["/**\n * Simple LRU (Least Recently Used) Cache implementation\n *\n * Automatically evicts least recently used entries when size limit is reached.\n * Useful for preventing memory leaks in long-running applications.\n */\nexport class LRUCache<K, V> {\n private cache: Map<K, V>;\n private readonly maxSize: number;\n\n /**\n * Create an LRU cache with a maximum size\n *\n * @param maxSize - Maximum number of entries to store (default: 100)\n */\n constructor(maxSize = 100) {\n this.cache = new Map();\n this.maxSize = maxSize;\n }\n\n /**\n * Get a value from the cache\n * Marks the entry as recently used (moves to end of Map)\n *\n * @param key - Cache key\n * @returns Value if found, undefined otherwise\n */\n get(key: K): V | undefined {\n if (!this.cache.has(key)) {\n return undefined;\n }\n\n // Move to end (most recently used)\n const value = this.cache.get(key)!;\n this.cache.delete(key);\n this.cache.set(key, value);\n\n return value;\n }\n\n /**\n * Set a value in the cache\n * Evicts least recently used entry if cache is full\n *\n * @param key - Cache key\n * @param value - Value to store\n */\n set(key: K, value: V): void {\n // Remove if exists (will re-add at end)\n if (this.cache.has(key)) {\n this.cache.delete(key);\n }\n\n // Evict least recently used entry if at capacity\n if (this.cache.size >= this.maxSize) {\n // First entry is least recently used (Map maintains insertion order)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n\n // Add as most recently used (at end)\n this.cache.set(key, value);\n }\n\n /**\n * Check if key exists in cache\n *\n * @param key - Cache key\n * @returns True if key exists\n */\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n /**\n * Remove an entry from the cache\n *\n * @param key - Cache key\n * @returns True if entry was removed, false if not found\n */\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n /**\n * Clear all entries from the cache\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Get current cache size\n *\n * @returns Number of entries in cache\n */\n get size(): number {\n return this.cache.size;\n }\n\n /**\n * Get all keys in the cache (least to most recently used)\n *\n * @returns Array of keys\n */\n keys(): K[] {\n return Array.from(this.cache.keys());\n }\n\n /**\n * Get all values in the cache (least to most recently used)\n *\n * @returns Array of values\n */\n values(): V[] {\n return Array.from(this.cache.values());\n }\n}\n"],"names":[],"mappings":"AAMO,MAAM,SAAe;AAAA,EAClB;AAAA,EACS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,YAAY,UAAU,KAAK;AACzB,SAAK,4BAAY,IAAA;AACjB,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,KAAuB;AACzB,QAAI,CAAC,KAAK,MAAM,IAAI,GAAG,GAAG;AACxB,aAAO;AAAA,IACT;AAGA,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,MAAM,IAAI,KAAK,KAAK;AAEzB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,KAAQ,OAAgB;AAE1B,QAAI,KAAK,MAAM,IAAI,GAAG,GAAG;AACvB,WAAK,MAAM,OAAO,GAAG;AAAA,IACvB;AAGA,QAAI,KAAK,MAAM,QAAQ,KAAK,SAAS;AAEnC,YAAM,WAAW,KAAK,MAAM,KAAA,EAAO,OAAO;AAC1C,UAAI,aAAa,QAAW;AAC1B,aAAK,MAAM,OAAO,QAAQ;AAAA,MAC5B;AAAA,IACF;AAGA,SAAK,MAAM,IAAI,KAAK,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,KAAiB;AACnB,WAAO,KAAK,MAAM,IAAI,GAAG;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAiB;AACtB,WAAO,KAAK,MAAM,OAAO,GAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,MAAM,MAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAe;AACjB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAY;AACV,WAAO,MAAM,KAAK,KAAK,MAAM,MAAM;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAc;AACZ,WAAO,MAAM,KAAK,KAAK,MAAM,QAAQ;AAAA,EACvC;AACF;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Converts a camelCase string to snake_case.
3
+ */
4
+ export declare function toSnakeCase(str: string): string;
5
+ /**
6
+ * Pluralizes an English word using the pluralize library.
7
+ *
8
+ * For snake_case table names with multiple words, only the last word is
9
+ * pluralized: `journal_entry` -> `journal_entries`.
10
+ */
11
+ export declare function pluralize(word: string): string;
12
+ /**
13
+ * Converts a class name to a pluralized snake_case table name.
14
+ */
15
+ export declare function classnameToTablename(className: string): string;
16
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI9D"}
@@ -0,0 +1,23 @@
1
+ import pluralizeLib from "pluralize";
2
+ function toSnakeCase(str) {
3
+ return str.replace(/([A-Z])/g, "_$1").toLowerCase().replace(/^_/, "");
4
+ }
5
+ function pluralize(word) {
6
+ if (word.includes("_")) {
7
+ const parts = word.split("_");
8
+ const lastWord = parts.pop();
9
+ if (!lastWord) return word;
10
+ return [...parts, pluralizeLib(lastWord)].join("_");
11
+ }
12
+ return pluralizeLib(word);
13
+ }
14
+ function classnameToTablename(className) {
15
+ const snakeCase = className.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
16
+ return pluralize(snakeCase);
17
+ }
18
+ export {
19
+ classnameToTablename,
20
+ pluralize,
21
+ toSnakeCase
22
+ };
23
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sources":["../../src/utils/naming.ts"],"sourcesContent":["import pluralizeLib from 'pluralize';\n\n/**\n * Converts a camelCase string to snake_case.\n */\nexport function toSnakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/^_/, '');\n}\n\n/**\n * Pluralizes an English word using the pluralize library.\n *\n * For snake_case table names with multiple words, only the last word is\n * pluralized: `journal_entry` -> `journal_entries`.\n */\nexport function pluralize(word: string): string {\n if (word.includes('_')) {\n const parts = word.split('_');\n const lastWord = parts.pop();\n if (!lastWord) return word;\n return [...parts, pluralizeLib(lastWord)].join('_');\n }\n\n return pluralizeLib(word);\n}\n\n/**\n * Converts a class name to a pluralized snake_case table name.\n */\nexport function classnameToTablename(className: string): string {\n const snakeCase = className.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();\n\n return pluralize(snakeCase);\n}\n"],"names":[],"mappings":";AAKO,SAAS,YAAY,KAAqB;AAC/C,SAAO,IACJ,QAAQ,YAAY,KAAK,EACzB,cACA,QAAQ,MAAM,EAAE;AACrB;AAQO,SAAS,UAAU,MAAsB;AAC9C,MAAI,KAAK,SAAS,GAAG,GAAG;AACtB,UAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,UAAM,WAAW,MAAM,IAAA;AACvB,QAAI,CAAC,SAAU,QAAO;AACtB,WAAO,CAAC,GAAG,OAAO,aAAa,QAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,EACpD;AAEA,SAAO,aAAa,IAAI;AAC1B;AAKO,SAAS,qBAAqB,WAA2B;AAC9D,QAAM,YAAY,UAAU,QAAQ,mBAAmB,OAAO,EAAE,YAAA;AAEhE,SAAO,UAAU,SAAS;AAC5B;"}
@@ -0,0 +1,122 @@
1
+ import { QualifiedClassName } from '../scanner/types.js';
2
+ /**
3
+ * Creates a qualified class name from package name and class name.
4
+ *
5
+ * @param packageName - The npm package name (e.g., "@happyvertical/smrt-core")
6
+ * @param className - The class name (e.g., "Product")
7
+ * @returns Qualified name in format "@package/name:ClassName"
8
+ *
9
+ * @example
10
+ * createQualifiedName('@happyvertical/smrt-core', 'Product')
11
+ * // Returns: "@happyvertical/smrt-core:Product"
12
+ */
13
+ export declare function createQualifiedName(packageName: string, className: string): QualifiedClassName;
14
+ /**
15
+ * Result of parsing a qualified class name.
16
+ */
17
+ export interface ParsedQualifiedName {
18
+ /** The package name (e.g., "@happyvertical/smrt-core") */
19
+ packageName: string;
20
+ /** The class name (e.g., "Product") */
21
+ className: string;
22
+ }
23
+ /**
24
+ * Parses a qualified class name into its components.
25
+ *
26
+ * @param qualifiedName - The qualified name to parse
27
+ * @returns Object with packageName and className
28
+ * @throws Error if the name is not a valid qualified name
29
+ *
30
+ * @example
31
+ * parseQualifiedName('@happyvertical/smrt-core:Product')
32
+ * // Returns: { packageName: '@happyvertical/smrt-core', className: 'Product' }
33
+ */
34
+ export declare function parseQualifiedName(qualifiedName: string): ParsedQualifiedName;
35
+ /**
36
+ * Checks if a name is a valid qualified class name.
37
+ *
38
+ * A valid qualified name:
39
+ * - Contains a colon (:) separating package and class
40
+ * - Has a package name with a forward slash (scoped npm package)
41
+ * - Has a non-empty class name after the colon
42
+ *
43
+ * @param name - The name to check
44
+ * @returns true if the name is a valid qualified class name
45
+ *
46
+ * @example
47
+ * isQualifiedName('@happyvertical/smrt-core:Product') // true
48
+ * isQualifiedName('Product') // false
49
+ * isQualifiedName('smrt-core:Product') // false (no @ scope)
50
+ */
51
+ export declare function isQualifiedName(name: string): name is QualifiedClassName;
52
+ /**
53
+ * Extracts just the class name from a qualified name or simple name.
54
+ * Useful when you need the class name regardless of whether
55
+ * the input is qualified or not.
56
+ *
57
+ * @param name - Qualified name or simple class name
58
+ * @returns The simple class name
59
+ *
60
+ * @example
61
+ * getClassName('@happyvertical/smrt-core:Product') // 'Product'
62
+ * getClassName('Product') // 'Product'
63
+ */
64
+ export declare function getClassName(name: string): string;
65
+ /**
66
+ * Extracts the package name from a qualified name.
67
+ * Returns undefined if the name is not qualified.
68
+ *
69
+ * @param name - Qualified name or simple class name
70
+ * @returns The package name, or undefined if not qualified
71
+ *
72
+ * @example
73
+ * getPackageFromQualifiedName('@happyvertical/smrt-core:Product')
74
+ * // Returns: '@happyvertical/smrt-core'
75
+ *
76
+ * getPackageFromQualifiedName('Product')
77
+ * // Returns: undefined
78
+ */
79
+ export declare function getPackageFromQualifiedName(name: string): string | undefined;
80
+ /**
81
+ * Compares two qualified names for equality.
82
+ * Case-sensitive comparison.
83
+ *
84
+ * @param a - First qualified name
85
+ * @param b - Second qualified name
86
+ * @returns true if the qualified names are equal
87
+ */
88
+ export declare function qualifiedNamesEqual(a: string, b: string): boolean;
89
+ /**
90
+ * Checks if a qualified name belongs to a specific package.
91
+ *
92
+ * @param qualifiedName - The qualified name to check
93
+ * @param packageName - The package name to match against
94
+ * @returns true if the qualified name is from the specified package
95
+ *
96
+ * @example
97
+ * isFromPackage('@happyvertical/smrt-core:Product', '@happyvertical/smrt-core')
98
+ * // Returns: true
99
+ */
100
+ export declare function isFromPackage(qualifiedName: string, packageName: string): boolean;
101
+ /**
102
+ * Checks if a qualified name (like `_meta_type`) matches a short class name.
103
+ * This is useful for STI filtering where the database stores qualified names
104
+ * but code often uses short names for comparisons.
105
+ *
106
+ * @param qualifiedName - The qualified name or simple name to check (e.g., from `_meta_type`)
107
+ * @param shortName - The short class name to match against
108
+ * @returns true if the class name portion matches
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // Filtering STI records by type
113
+ * const meetings = events.filter(e => isType(e._meta_type, 'Meeting'));
114
+ *
115
+ * // Works with both qualified and simple names
116
+ * isType('@happyvertical/praeco:MeetingRecap', 'MeetingRecap') // true
117
+ * isType('@happyvertical/praeco:MeetingRecap', 'Article') // false
118
+ * isType('MeetingRecap', 'MeetingRecap') // true (simple name passthrough)
119
+ * ```
120
+ */
121
+ export declare function isType(qualifiedName: string | null | undefined, shortName: string): boolean;
122
+ //# sourceMappingURL=qualified-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualified-names.d.ts","sourceRoot":"","sources":["../../src/utils/qualified-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,kBAAkB,CAcpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,CAgB7E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAyBxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CACpB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAKT"}
@@ -0,0 +1,82 @@
1
+ function createQualifiedName(packageName, className) {
2
+ if (!packageName) {
3
+ throw new Error(
4
+ `Cannot create qualified name: packageName is required. Got className="${className}" but no packageName.`
5
+ );
6
+ }
7
+ if (!className) {
8
+ throw new Error(
9
+ `Cannot create qualified name: className is required. Got packageName="${packageName}" but no className.`
10
+ );
11
+ }
12
+ return `${packageName}:${className}`;
13
+ }
14
+ function parseQualifiedName(qualifiedName) {
15
+ if (!isQualifiedName(qualifiedName)) {
16
+ throw new Error(
17
+ `Invalid qualified name: "${qualifiedName}". Expected format: "@package/name:ClassName"`
18
+ );
19
+ }
20
+ const colonIndex = qualifiedName.lastIndexOf(":");
21
+ return {
22
+ packageName: qualifiedName.slice(0, colonIndex),
23
+ className: qualifiedName.slice(colonIndex + 1)
24
+ };
25
+ }
26
+ function isQualifiedName(name) {
27
+ if (!name || typeof name !== "string") {
28
+ return false;
29
+ }
30
+ const colonIndex = name.lastIndexOf(":");
31
+ if (colonIndex === -1) {
32
+ return false;
33
+ }
34
+ const packageName = name.slice(0, colonIndex);
35
+ const className = name.slice(colonIndex + 1);
36
+ if (!packageName.startsWith("@") || !packageName.includes("/")) {
37
+ return false;
38
+ }
39
+ if (!className) {
40
+ return false;
41
+ }
42
+ return true;
43
+ }
44
+ function getClassName(name) {
45
+ if (isQualifiedName(name)) {
46
+ return parseQualifiedName(name).className;
47
+ }
48
+ return name;
49
+ }
50
+ function getPackageFromQualifiedName(name) {
51
+ if (isQualifiedName(name)) {
52
+ return parseQualifiedName(name).packageName;
53
+ }
54
+ return void 0;
55
+ }
56
+ function qualifiedNamesEqual(a, b) {
57
+ return a === b;
58
+ }
59
+ function isFromPackage(qualifiedName, packageName) {
60
+ if (!isQualifiedName(qualifiedName)) {
61
+ return false;
62
+ }
63
+ const parsed = parseQualifiedName(qualifiedName);
64
+ return parsed.packageName === packageName;
65
+ }
66
+ function isType(qualifiedName, shortName) {
67
+ if (!qualifiedName) {
68
+ return false;
69
+ }
70
+ return getClassName(qualifiedName) === shortName;
71
+ }
72
+ export {
73
+ createQualifiedName,
74
+ getClassName,
75
+ getPackageFromQualifiedName,
76
+ isFromPackage,
77
+ isQualifiedName,
78
+ isType,
79
+ parseQualifiedName,
80
+ qualifiedNamesEqual
81
+ };
82
+ //# sourceMappingURL=qualified-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualified-names.js","sources":["../../src/utils/qualified-names.ts"],"sourcesContent":["/**\n * Utilities for working with qualified class names in the SMRT framework.\n *\n * Qualified names follow the format: \"@package/name:ClassName\"\n * Example: \"@happyvertical/smrt-core:Product\"\n *\n * This format uniquely identifies classes across packages, eliminating\n * name collisions when multiple packages define classes with the same name.\n */\n\nimport type { QualifiedClassName } from '../scanner/types.js';\n\n/**\n * Creates a qualified class name from package name and class name.\n *\n * @param packageName - The npm package name (e.g., \"@happyvertical/smrt-core\")\n * @param className - The class name (e.g., \"Product\")\n * @returns Qualified name in format \"@package/name:ClassName\"\n *\n * @example\n * createQualifiedName('@happyvertical/smrt-core', 'Product')\n * // Returns: \"@happyvertical/smrt-core:Product\"\n */\nexport function createQualifiedName(\n packageName: string,\n className: string,\n): QualifiedClassName {\n if (!packageName) {\n throw new Error(\n `Cannot create qualified name: packageName is required. ` +\n `Got className=\"${className}\" but no packageName.`,\n );\n }\n if (!className) {\n throw new Error(\n `Cannot create qualified name: className is required. ` +\n `Got packageName=\"${packageName}\" but no className.`,\n );\n }\n return `${packageName}:${className}` as QualifiedClassName;\n}\n\n/**\n * Result of parsing a qualified class name.\n */\nexport interface ParsedQualifiedName {\n /** The package name (e.g., \"@happyvertical/smrt-core\") */\n packageName: string;\n /** The class name (e.g., \"Product\") */\n className: string;\n}\n\n/**\n * Parses a qualified class name into its components.\n *\n * @param qualifiedName - The qualified name to parse\n * @returns Object with packageName and className\n * @throws Error if the name is not a valid qualified name\n *\n * @example\n * parseQualifiedName('@happyvertical/smrt-core:Product')\n * // Returns: { packageName: '@happyvertical/smrt-core', className: 'Product' }\n */\nexport function parseQualifiedName(qualifiedName: string): ParsedQualifiedName {\n if (!isQualifiedName(qualifiedName)) {\n throw new Error(\n `Invalid qualified name: \"${qualifiedName}\". ` +\n `Expected format: \"@package/name:ClassName\"`,\n );\n }\n\n // Use lastIndexOf to handle edge cases like \"@scope/pkg:Nested:Class\"\n // (though class names shouldn't have colons, this is defensive)\n const colonIndex = qualifiedName.lastIndexOf(':');\n\n return {\n packageName: qualifiedName.slice(0, colonIndex),\n className: qualifiedName.slice(colonIndex + 1),\n };\n}\n\n/**\n * Checks if a name is a valid qualified class name.\n *\n * A valid qualified name:\n * - Contains a colon (:) separating package and class\n * - Has a package name with a forward slash (scoped npm package)\n * - Has a non-empty class name after the colon\n *\n * @param name - The name to check\n * @returns true if the name is a valid qualified class name\n *\n * @example\n * isQualifiedName('@happyvertical/smrt-core:Product') // true\n * isQualifiedName('Product') // false\n * isQualifiedName('smrt-core:Product') // false (no @ scope)\n */\nexport function isQualifiedName(name: string): name is QualifiedClassName {\n if (!name || typeof name !== 'string') {\n return false;\n }\n\n const colonIndex = name.lastIndexOf(':');\n if (colonIndex === -1) {\n return false;\n }\n\n const packageName = name.slice(0, colonIndex);\n const className = name.slice(colonIndex + 1);\n\n // Package name must be a scoped npm package (contains @)\n // and have a path (contains /)\n if (!packageName.startsWith('@') || !packageName.includes('/')) {\n return false;\n }\n\n // Class name must be non-empty\n if (!className) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Extracts just the class name from a qualified name or simple name.\n * Useful when you need the class name regardless of whether\n * the input is qualified or not.\n *\n * @param name - Qualified name or simple class name\n * @returns The simple class name\n *\n * @example\n * getClassName('@happyvertical/smrt-core:Product') // 'Product'\n * getClassName('Product') // 'Product'\n */\nexport function getClassName(name: string): string {\n if (isQualifiedName(name)) {\n return parseQualifiedName(name).className;\n }\n return name;\n}\n\n/**\n * Extracts the package name from a qualified name.\n * Returns undefined if the name is not qualified.\n *\n * @param name - Qualified name or simple class name\n * @returns The package name, or undefined if not qualified\n *\n * @example\n * getPackageFromQualifiedName('@happyvertical/smrt-core:Product')\n * // Returns: '@happyvertical/smrt-core'\n *\n * getPackageFromQualifiedName('Product')\n * // Returns: undefined\n */\nexport function getPackageFromQualifiedName(name: string): string | undefined {\n if (isQualifiedName(name)) {\n return parseQualifiedName(name).packageName;\n }\n return undefined;\n}\n\n/**\n * Compares two qualified names for equality.\n * Case-sensitive comparison.\n *\n * @param a - First qualified name\n * @param b - Second qualified name\n * @returns true if the qualified names are equal\n */\nexport function qualifiedNamesEqual(a: string, b: string): boolean {\n return a === b;\n}\n\n/**\n * Checks if a qualified name belongs to a specific package.\n *\n * @param qualifiedName - The qualified name to check\n * @param packageName - The package name to match against\n * @returns true if the qualified name is from the specified package\n *\n * @example\n * isFromPackage('@happyvertical/smrt-core:Product', '@happyvertical/smrt-core')\n * // Returns: true\n */\nexport function isFromPackage(\n qualifiedName: string,\n packageName: string,\n): boolean {\n if (!isQualifiedName(qualifiedName)) {\n return false;\n }\n const parsed = parseQualifiedName(qualifiedName);\n return parsed.packageName === packageName;\n}\n\n/**\n * Checks if a qualified name (like `_meta_type`) matches a short class name.\n * This is useful for STI filtering where the database stores qualified names\n * but code often uses short names for comparisons.\n *\n * @param qualifiedName - The qualified name or simple name to check (e.g., from `_meta_type`)\n * @param shortName - The short class name to match against\n * @returns true if the class name portion matches\n *\n * @example\n * ```typescript\n * // Filtering STI records by type\n * const meetings = events.filter(e => isType(e._meta_type, 'Meeting'));\n *\n * // Works with both qualified and simple names\n * isType('@happyvertical/praeco:MeetingRecap', 'MeetingRecap') // true\n * isType('@happyvertical/praeco:MeetingRecap', 'Article') // false\n * isType('MeetingRecap', 'MeetingRecap') // true (simple name passthrough)\n * ```\n */\nexport function isType(\n qualifiedName: string | null | undefined,\n shortName: string,\n): boolean {\n if (!qualifiedName) {\n return false;\n }\n return getClassName(qualifiedName) === shortName;\n}\n"],"names":[],"mappings":"AAuBO,SAAS,oBACd,aACA,WACoB;AACpB,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,yEACoB,SAAS;AAAA,IAAA;AAAA,EAEjC;AACA,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR,yEACsB,WAAW;AAAA,IAAA;AAAA,EAErC;AACA,SAAO,GAAG,WAAW,IAAI,SAAS;AACpC;AAuBO,SAAS,mBAAmB,eAA4C;AAC7E,MAAI,CAAC,gBAAgB,aAAa,GAAG;AACnC,UAAM,IAAI;AAAA,MACR,4BAA4B,aAAa;AAAA,IAAA;AAAA,EAG7C;AAIA,QAAM,aAAa,cAAc,YAAY,GAAG;AAEhD,SAAO;AAAA,IACL,aAAa,cAAc,MAAM,GAAG,UAAU;AAAA,IAC9C,WAAW,cAAc,MAAM,aAAa,CAAC;AAAA,EAAA;AAEjD;AAkBO,SAAS,gBAAgB,MAA0C;AACxE,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,KAAK,YAAY,GAAG;AACvC,MAAI,eAAe,IAAI;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,KAAK,MAAM,GAAG,UAAU;AAC5C,QAAM,YAAY,KAAK,MAAM,aAAa,CAAC;AAI3C,MAAI,CAAC,YAAY,WAAW,GAAG,KAAK,CAAC,YAAY,SAAS,GAAG,GAAG;AAC9D,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAcO,SAAS,aAAa,MAAsB;AACjD,MAAI,gBAAgB,IAAI,GAAG;AACzB,WAAO,mBAAmB,IAAI,EAAE;AAAA,EAClC;AACA,SAAO;AACT;AAgBO,SAAS,4BAA4B,MAAkC;AAC5E,MAAI,gBAAgB,IAAI,GAAG;AACzB,WAAO,mBAAmB,IAAI,EAAE;AAAA,EAClC;AACA,SAAO;AACT;AAUO,SAAS,oBAAoB,GAAW,GAAoB;AACjE,SAAO,MAAM;AACf;AAaO,SAAS,cACd,eACA,aACS;AACT,MAAI,CAAC,gBAAgB,aAAa,GAAG;AACnC,WAAO;AAAA,EACT;AACA,QAAM,SAAS,mBAAmB,aAAa;AAC/C,SAAO,OAAO,gBAAgB;AAChC;AAsBO,SAAS,OACd,eACA,WACS;AACT,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AACA,SAAO,aAAa,aAAa,MAAM;AACzC;"}
@@ -0,0 +1,37 @@
1
+ import { SmartObjectManifest } from '../scanner/types.js';
2
+ export interface OxcScannerLike {
3
+ scanAndResolve(): Promise<{
4
+ results: {
5
+ typeAliases: Record<string, string>;
6
+ errors: Array<{
7
+ filePath: string;
8
+ message: string;
9
+ line?: number;
10
+ }>;
11
+ };
12
+ resolved: unknown[];
13
+ }>;
14
+ }
15
+ export interface OxcScannerConstructor {
16
+ new (options: {
17
+ cwd: string;
18
+ include?: string[];
19
+ exclude?: string[];
20
+ baseClasses?: string[];
21
+ includePrivateMethods?: boolean;
22
+ includeStaticMethods?: boolean;
23
+ followImports?: boolean;
24
+ }): OxcScannerLike;
25
+ }
26
+ export interface ManifestAdapterLike {
27
+ toManifest(resolved: unknown[], options: {
28
+ packageName?: string;
29
+ packageVersion?: string;
30
+ typeAliases: Record<string, string>;
31
+ }): SmartObjectManifest;
32
+ }
33
+ export interface ScannerModule {
34
+ OxcScanner: OxcScannerConstructor;
35
+ ManifestAdapter: new () => ManifestAdapterLike;
36
+ }
37
+ //# sourceMappingURL=scanner-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner-module.d.ts","sourceRoot":"","sources":["../../src/utils/scanner-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,cAAc,IAAI,OAAO,CAAC;QACxB,OAAO,EAAE;YACP,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpC,MAAM,EAAE,KAAK,CAAC;gBACZ,QAAQ,EAAE,MAAM,CAAC;gBACjB,OAAO,EAAE,MAAM,CAAC;gBAChB,IAAI,CAAC,EAAE,MAAM,CAAC;aACf,CAAC,CAAC;SACJ,CAAC;QACF,QAAQ,EAAE,OAAO,EAAE,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,OAAO,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,cAAc,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CACR,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,GACA,mBAAmB,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,qBAAqB,CAAC;IAClC,eAAe,EAAE,UAAU,mBAAmB,CAAC;CAChD"}