ai-database 2.1.1 → 2.3.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 (268) hide show
  1. package/CHANGELOG.md +47 -1
  2. package/README.md +1063 -186
  3. package/dist/actions.d.ts +2 -2
  4. package/dist/actions.d.ts.map +1 -1
  5. package/dist/actions.js +1 -1
  6. package/dist/actions.js.map +1 -1
  7. package/dist/ai-promise-db.d.ts +52 -23
  8. package/dist/ai-promise-db.d.ts.map +1 -1
  9. package/dist/ai-promise-db.js +185 -164
  10. package/dist/ai-promise-db.js.map +1 -1
  11. package/dist/authorization.d.ts.map +1 -1
  12. package/dist/authorization.js +38 -30
  13. package/dist/authorization.js.map +1 -1
  14. package/dist/cascade-orchestrator.d.ts +404 -0
  15. package/dist/cascade-orchestrator.d.ts.map +1 -0
  16. package/dist/cascade-orchestrator.js +828 -0
  17. package/dist/cascade-orchestrator.js.map +1 -0
  18. package/dist/cascade-write-strategy.d.ts +584 -0
  19. package/dist/cascade-write-strategy.d.ts.map +1 -0
  20. package/dist/cascade-write-strategy.js +590 -0
  21. package/dist/cascade-write-strategy.js.map +1 -0
  22. package/dist/ch-adapter.d.ts +358 -0
  23. package/dist/ch-adapter.d.ts.map +1 -0
  24. package/dist/ch-adapter.js +929 -0
  25. package/dist/ch-adapter.js.map +1 -0
  26. package/dist/client/index.d.ts +42 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +43 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client.d.ts +266 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +81 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/constants.d.ts +64 -1
  35. package/dist/constants.d.ts.map +1 -1
  36. package/dist/constants.js +52 -2
  37. package/dist/constants.js.map +1 -1
  38. package/dist/dataloader.d.ts +99 -0
  39. package/dist/dataloader.d.ts.map +1 -0
  40. package/dist/dataloader.js +225 -0
  41. package/dist/dataloader.js.map +1 -0
  42. package/dist/db-provider-port.d.ts +501 -0
  43. package/dist/db-provider-port.d.ts.map +1 -0
  44. package/dist/db-provider-port.js +113 -0
  45. package/dist/db-provider-port.js.map +1 -0
  46. package/dist/digital-objects-provider.d.ts +49 -0
  47. package/dist/digital-objects-provider.d.ts.map +1 -0
  48. package/dist/digital-objects-provider.js +55 -0
  49. package/dist/digital-objects-provider.js.map +1 -0
  50. package/dist/do-sqlite-adapter.d.ts +402 -0
  51. package/dist/do-sqlite-adapter.d.ts.map +1 -0
  52. package/dist/do-sqlite-adapter.js +745 -0
  53. package/dist/do-sqlite-adapter.js.map +1 -0
  54. package/dist/docs-rels/custom-types.d.ts +134 -0
  55. package/dist/docs-rels/custom-types.d.ts.map +1 -0
  56. package/dist/docs-rels/custom-types.js +70 -0
  57. package/dist/docs-rels/custom-types.js.map +1 -0
  58. package/dist/docs-rels/index.d.ts +16 -0
  59. package/dist/docs-rels/index.d.ts.map +1 -0
  60. package/dist/docs-rels/index.js +16 -0
  61. package/dist/docs-rels/index.js.map +1 -0
  62. package/dist/docs-rels/migrations/index.d.ts +30 -0
  63. package/dist/docs-rels/migrations/index.d.ts.map +1 -0
  64. package/dist/docs-rels/migrations/index.js +128 -0
  65. package/dist/docs-rels/migrations/index.js.map +1 -0
  66. package/dist/docs-rels/schema.d.ts +2961 -0
  67. package/dist/docs-rels/schema.d.ts.map +1 -0
  68. package/dist/docs-rels/schema.js +244 -0
  69. package/dist/docs-rels/schema.js.map +1 -0
  70. package/dist/durable-clickhouse.d.ts.map +1 -1
  71. package/dist/durable-clickhouse.js +16 -13
  72. package/dist/durable-clickhouse.js.map +1 -1
  73. package/dist/durable-promise.d.ts.map +1 -1
  74. package/dist/durable-promise.js +34 -15
  75. package/dist/durable-promise.js.map +1 -1
  76. package/dist/errors.d.ts +127 -0
  77. package/dist/errors.d.ts.map +1 -0
  78. package/dist/errors.js +210 -0
  79. package/dist/errors.js.map +1 -0
  80. package/dist/eventbridge.d.ts +117 -0
  81. package/dist/eventbridge.d.ts.map +1 -0
  82. package/dist/eventbridge.js +238 -0
  83. package/dist/eventbridge.js.map +1 -0
  84. package/dist/events.d.ts +2 -2
  85. package/dist/events.d.ts.map +1 -1
  86. package/dist/events.js +1 -1
  87. package/dist/events.js.map +1 -1
  88. package/dist/execution-queue.d.ts.map +1 -1
  89. package/dist/execution-queue.js +4 -5
  90. package/dist/execution-queue.js.map +1 -1
  91. package/dist/index.d.ts +37 -8
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +112 -6
  94. package/dist/index.js.map +1 -1
  95. package/dist/linguistic.d.ts +3 -108
  96. package/dist/linguistic.d.ts.map +1 -1
  97. package/dist/linguistic.js +3 -372
  98. package/dist/linguistic.js.map +1 -1
  99. package/dist/logger.d.ts +132 -0
  100. package/dist/logger.d.ts.map +1 -0
  101. package/dist/logger.js +137 -0
  102. package/dist/logger.js.map +1 -0
  103. package/dist/memory-provider.d.ts +129 -0
  104. package/dist/memory-provider.d.ts.map +1 -1
  105. package/dist/memory-provider.js +592 -257
  106. package/dist/memory-provider.js.map +1 -1
  107. package/dist/pg-adapter.d.ts +424 -0
  108. package/dist/pg-adapter.d.ts.map +1 -0
  109. package/dist/pg-adapter.js +921 -0
  110. package/dist/pg-adapter.js.map +1 -0
  111. package/dist/pipelines-iceberg-emitter.d.ts +327 -0
  112. package/dist/pipelines-iceberg-emitter.d.ts.map +1 -0
  113. package/dist/pipelines-iceberg-emitter.js +351 -0
  114. package/dist/pipelines-iceberg-emitter.js.map +1 -0
  115. package/dist/provider-capabilities.d.ts +146 -0
  116. package/dist/provider-capabilities.d.ts.map +1 -0
  117. package/dist/provider-capabilities.js +214 -0
  118. package/dist/provider-capabilities.js.map +1 -0
  119. package/dist/rdb-provider-adapter.d.ts +195 -0
  120. package/dist/rdb-provider-adapter.d.ts.map +1 -0
  121. package/dist/rdb-provider-adapter.js +291 -0
  122. package/dist/rdb-provider-adapter.js.map +1 -0
  123. package/dist/schema/cascade.d.ts +49 -10
  124. package/dist/schema/cascade.d.ts.map +1 -1
  125. package/dist/schema/cascade.js +491 -273
  126. package/dist/schema/cascade.js.map +1 -1
  127. package/dist/schema/definition-caches.d.ts +24 -0
  128. package/dist/schema/definition-caches.d.ts.map +1 -0
  129. package/dist/schema/definition-caches.js +26 -0
  130. package/dist/schema/definition-caches.js.map +1 -0
  131. package/dist/schema/dependency-graph.d.ts +45 -0
  132. package/dist/schema/dependency-graph.d.ts.map +1 -0
  133. package/dist/schema/dependency-graph.js +47 -0
  134. package/dist/schema/dependency-graph.js.map +1 -0
  135. package/dist/schema/diff.d.ts +103 -0
  136. package/dist/schema/diff.d.ts.map +1 -0
  137. package/dist/schema/diff.js +329 -0
  138. package/dist/schema/diff.js.map +1 -0
  139. package/dist/schema/entity-operations.d.ts +99 -0
  140. package/dist/schema/entity-operations.d.ts.map +1 -0
  141. package/dist/schema/entity-operations.js +818 -0
  142. package/dist/schema/entity-operations.js.map +1 -0
  143. package/dist/schema/generation-context.d.ts +202 -0
  144. package/dist/schema/generation-context.d.ts.map +1 -0
  145. package/dist/schema/generation-context.js +393 -0
  146. package/dist/schema/generation-context.js.map +1 -0
  147. package/dist/schema/index.d.ts +32 -34
  148. package/dist/schema/index.d.ts.map +1 -1
  149. package/dist/schema/index.js +462 -519
  150. package/dist/schema/index.js.map +1 -1
  151. package/dist/schema/migration.d.ts +205 -0
  152. package/dist/schema/migration.d.ts.map +1 -0
  153. package/dist/schema/migration.js +327 -0
  154. package/dist/schema/migration.js.map +1 -0
  155. package/dist/schema/nl-query-generator.d.ts +68 -0
  156. package/dist/schema/nl-query-generator.d.ts.map +1 -0
  157. package/dist/schema/nl-query-generator.js +362 -0
  158. package/dist/schema/nl-query-generator.js.map +1 -0
  159. package/dist/schema/nl-query.d.ts +65 -0
  160. package/dist/schema/nl-query.d.ts.map +1 -0
  161. package/dist/schema/nl-query.js +178 -0
  162. package/dist/schema/nl-query.js.map +1 -0
  163. package/dist/schema/parse.d.ts.map +1 -1
  164. package/dist/schema/parse.js +152 -89
  165. package/dist/schema/parse.js.map +1 -1
  166. package/dist/schema/provider.d.ts +38 -0
  167. package/dist/schema/provider.d.ts.map +1 -1
  168. package/dist/schema/provider.js +15 -7
  169. package/dist/schema/provider.js.map +1 -1
  170. package/dist/schema/resolve.d.ts +46 -5
  171. package/dist/schema/resolve.d.ts.map +1 -1
  172. package/dist/schema/resolve.js +334 -117
  173. package/dist/schema/resolve.js.map +1 -1
  174. package/dist/schema/search-utils.d.ts +76 -0
  175. package/dist/schema/search-utils.d.ts.map +1 -0
  176. package/dist/schema/search-utils.js +86 -0
  177. package/dist/schema/search-utils.js.map +1 -0
  178. package/dist/schema/seed.d.ts +53 -0
  179. package/dist/schema/seed.d.ts.map +1 -0
  180. package/dist/schema/seed.js +94 -0
  181. package/dist/schema/seed.js.map +1 -0
  182. package/dist/schema/semantic.d.ts +11 -0
  183. package/dist/schema/semantic.d.ts.map +1 -1
  184. package/dist/schema/semantic.js +262 -68
  185. package/dist/schema/semantic.js.map +1 -1
  186. package/dist/schema/sub-apis.d.ts +52 -0
  187. package/dist/schema/sub-apis.d.ts.map +1 -0
  188. package/dist/schema/sub-apis.js +216 -0
  189. package/dist/schema/sub-apis.js.map +1 -0
  190. package/dist/schema/system-entities.d.ts +42 -0
  191. package/dist/schema/system-entities.d.ts.map +1 -0
  192. package/dist/schema/system-entities.js +101 -0
  193. package/dist/schema/system-entities.js.map +1 -0
  194. package/dist/schema/types.d.ts +91 -9
  195. package/dist/schema/types.d.ts.map +1 -1
  196. package/dist/schema/union-fallback.d.ts +219 -0
  197. package/dist/schema/union-fallback.d.ts.map +1 -0
  198. package/dist/schema/union-fallback.js +331 -0
  199. package/dist/schema/union-fallback.js.map +1 -0
  200. package/dist/schema/value-generators/ai.d.ts +54 -0
  201. package/dist/schema/value-generators/ai.d.ts.map +1 -0
  202. package/dist/schema/value-generators/ai.js +136 -0
  203. package/dist/schema/value-generators/ai.js.map +1 -0
  204. package/dist/schema/value-generators/index.d.ts +126 -0
  205. package/dist/schema/value-generators/index.d.ts.map +1 -0
  206. package/dist/schema/value-generators/index.js +219 -0
  207. package/dist/schema/value-generators/index.js.map +1 -0
  208. package/dist/schema/value-generators/placeholder.d.ts +52 -0
  209. package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
  210. package/dist/schema/value-generators/placeholder.js +328 -0
  211. package/dist/schema/value-generators/placeholder.js.map +1 -0
  212. package/dist/schema/value-generators/types.d.ts +116 -0
  213. package/dist/schema/value-generators/types.d.ts.map +1 -0
  214. package/dist/schema/value-generators/types.js +11 -0
  215. package/dist/schema/value-generators/types.js.map +1 -0
  216. package/dist/schema/verb-derivation.d.ts +167 -0
  217. package/dist/schema/verb-derivation.d.ts.map +1 -0
  218. package/dist/schema/verb-derivation.js +281 -0
  219. package/dist/schema/verb-derivation.js.map +1 -0
  220. package/dist/schema/version.d.ts +111 -0
  221. package/dist/schema/version.d.ts.map +1 -0
  222. package/dist/schema/version.js +190 -0
  223. package/dist/schema/version.js.map +1 -0
  224. package/dist/schema.d.ts +1095 -23
  225. package/dist/schema.d.ts.map +1 -1
  226. package/dist/schema.js +2854 -38
  227. package/dist/schema.js.map +1 -1
  228. package/dist/semantic-vectors.d.ts +39 -0
  229. package/dist/semantic-vectors.d.ts.map +1 -0
  230. package/dist/semantic-vectors.js +334 -0
  231. package/dist/semantic-vectors.js.map +1 -0
  232. package/dist/semantic.d.ts +29 -1
  233. package/dist/semantic.d.ts.map +1 -1
  234. package/dist/semantic.js +26 -16
  235. package/dist/semantic.js.map +1 -1
  236. package/dist/telemetry.d.ts +128 -0
  237. package/dist/telemetry.d.ts.map +1 -0
  238. package/dist/telemetry.js +305 -0
  239. package/dist/telemetry.js.map +1 -0
  240. package/dist/tests.d.ts.map +1 -1
  241. package/dist/tests.js +30 -22
  242. package/dist/tests.js.map +1 -1
  243. package/dist/type-guards.d.ts +212 -0
  244. package/dist/type-guards.d.ts.map +1 -0
  245. package/dist/type-guards.js +318 -0
  246. package/dist/type-guards.js.map +1 -0
  247. package/dist/types.d.ts +33 -245
  248. package/dist/types.d.ts.map +1 -1
  249. package/dist/types.js +62 -72
  250. package/dist/types.js.map +1 -1
  251. package/dist/validation.d.ts +165 -0
  252. package/dist/validation.d.ts.map +1 -0
  253. package/dist/validation.js +639 -0
  254. package/dist/validation.js.map +1 -0
  255. package/dist/worker/db-provider.d.ts +168 -0
  256. package/dist/worker/db-provider.d.ts.map +1 -0
  257. package/dist/worker/db-provider.js +277 -0
  258. package/dist/worker/db-provider.js.map +1 -0
  259. package/dist/worker/index.d.ts +35 -0
  260. package/dist/worker/index.d.ts.map +1 -0
  261. package/dist/worker/index.js +37 -0
  262. package/dist/worker/index.js.map +1 -0
  263. package/dist/worker.d.ts +779 -0
  264. package/dist/worker.d.ts.map +1 -0
  265. package/dist/worker.js +2786 -0
  266. package/dist/worker.js.map +1 -0
  267. package/package.json +38 -8
  268. package/src/docs-rels/migrations/0001-init.sql +125 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Provider Capability Detection and Management
3
+ *
4
+ * This module provides runtime detection of provider capabilities,
5
+ * enabling graceful degradation when advanced features are unavailable.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { logWarn } from './logger.js';
10
+ // =============================================================================
11
+ // Capability Detection
12
+ // =============================================================================
13
+ /**
14
+ * Cache for detected capabilities to avoid repeated introspection
15
+ */
16
+ const capabilityCache = new WeakMap();
17
+ /**
18
+ * Detect which capabilities a provider supports by examining its methods
19
+ *
20
+ * Probes the provider for the presence of advanced methods to determine
21
+ * which features are available. Results are cached per-provider.
22
+ *
23
+ * @param provider - The database provider to inspect
24
+ * @returns Detected capabilities
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const provider = createMemoryProvider()
29
+ * const capabilities = await detectCapabilities(provider)
30
+ *
31
+ * if (capabilities.hasSemanticSearch) {
32
+ * const results = await provider.semanticSearch('Post', 'machine learning')
33
+ * } else {
34
+ * const results = await provider.search('Post', 'machine learning')
35
+ * }
36
+ * ```
37
+ */
38
+ export async function detectCapabilities(provider) {
39
+ // Check cache first
40
+ const cached = capabilityCache.get(provider);
41
+ if (cached) {
42
+ return cached;
43
+ }
44
+ // Cast to unknown first, then to Record for method inspection
45
+ const p = provider;
46
+ const capabilities = {
47
+ // Semantic search: requires semanticSearch and setEmbeddingsConfig methods
48
+ hasSemanticSearch: typeof p['semanticSearch'] === 'function' && typeof p['setEmbeddingsConfig'] === 'function',
49
+ // Events: requires on, emit, and listEvents methods
50
+ hasEvents: typeof p['on'] === 'function' &&
51
+ typeof p['emit'] === 'function' &&
52
+ typeof p['listEvents'] === 'function',
53
+ // Actions: requires createAction, getAction, and updateAction methods
54
+ hasActions: typeof p['createAction'] === 'function' &&
55
+ typeof p['getAction'] === 'function' &&
56
+ typeof p['updateAction'] === 'function',
57
+ // Artifacts: requires getArtifact and setArtifact methods
58
+ hasArtifacts: typeof p['getArtifact'] === 'function' && typeof p['setArtifact'] === 'function',
59
+ // Batch operations: requires withConcurrency or mapWithConcurrency methods
60
+ hasBatchOperations: typeof p['withConcurrency'] === 'function' || typeof p['mapWithConcurrency'] === 'function',
61
+ };
62
+ // Cache the result
63
+ capabilityCache.set(provider, capabilities);
64
+ return capabilities;
65
+ }
66
+ /**
67
+ * Clear the capability cache for a specific provider
68
+ *
69
+ * Useful when a provider's capabilities change dynamically.
70
+ *
71
+ * @param provider - The provider to clear from cache
72
+ */
73
+ export function clearCapabilityCache(provider) {
74
+ capabilityCache.delete(provider);
75
+ }
76
+ // =============================================================================
77
+ // CapabilityNotSupportedError
78
+ // =============================================================================
79
+ /**
80
+ * Error thrown when attempting to use a feature that the provider doesn't support
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * try {
85
+ * await provider.semanticSearch('Post', 'query')
86
+ * } catch (e) {
87
+ * if (isCapabilityNotSupportedError(e)) {
88
+ * console.log(`${e.capability} is not supported, using fallback...`)
89
+ * }
90
+ * throw e
91
+ * }
92
+ * ```
93
+ */
94
+ export class CapabilityNotSupportedError extends Error {
95
+ capability;
96
+ alternative;
97
+ code = 'CAPABILITY_NOT_SUPPORTED';
98
+ name = 'CapabilityNotSupportedError';
99
+ constructor(
100
+ /** The capability that was requested but not supported */
101
+ capability,
102
+ /** Optional custom error message */
103
+ message,
104
+ /** Optional suggested alternative */
105
+ alternative) {
106
+ const defaultMessage = `Capability '${capability}' is not supported by this provider`;
107
+ super(message ?? defaultMessage);
108
+ this.capability = capability;
109
+ this.alternative = alternative;
110
+ }
111
+ }
112
+ /**
113
+ * Type guard to check if an error is a CapabilityNotSupportedError
114
+ *
115
+ * @param error - The error to check
116
+ * @returns True if the error is a CapabilityNotSupportedError
117
+ */
118
+ export function isCapabilityNotSupportedError(error) {
119
+ return (error instanceof CapabilityNotSupportedError ||
120
+ (error !== null &&
121
+ typeof error === 'object' &&
122
+ 'code' in error &&
123
+ error.code === 'CAPABILITY_NOT_SUPPORTED'));
124
+ }
125
+ // =============================================================================
126
+ // Capability Enforcement
127
+ // =============================================================================
128
+ /**
129
+ * Require a capability to be available, throwing if not
130
+ *
131
+ * Use this before calling methods that require specific capabilities.
132
+ *
133
+ * @param capabilities - The detected capabilities
134
+ * @param capability - The capability key to require
135
+ * @param message - Optional custom error message
136
+ * @throws CapabilityNotSupportedError if the capability is not available
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * const capabilities = await detectCapabilities(provider)
141
+ * requireCapability(capabilities, 'hasSemanticSearch')
142
+ * // Safe to call semanticSearch now
143
+ * ```
144
+ */
145
+ export function requireCapability(capabilities, capability, message) {
146
+ if (!capabilities[capability]) {
147
+ throw new CapabilityNotSupportedError(capability, message);
148
+ }
149
+ }
150
+ // =============================================================================
151
+ // Runtime Warnings
152
+ // =============================================================================
153
+ /**
154
+ * Track which warnings have already been shown to avoid spam
155
+ */
156
+ const shownWarnings = new Set();
157
+ /**
158
+ * Log a warning if a capability is unavailable (only once per capability)
159
+ *
160
+ * @param capabilities - The detected capabilities
161
+ * @param capability - The capability key to check
162
+ * @param featureName - Human-readable name for the warning message
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * warnIfUnavailable(capabilities, 'hasSemanticSearch', 'semanticSearch')
167
+ * // Logs: "Warning: semanticSearch is not available with this provider"
168
+ * ```
169
+ */
170
+ export function warnIfUnavailable(capabilities, capability, featureName) {
171
+ if (!capabilities[capability] && !shownWarnings.has(featureName)) {
172
+ logWarn(`${featureName} is not available with this provider`);
173
+ shownWarnings.add(featureName);
174
+ }
175
+ }
176
+ /**
177
+ * Clear warning suppression (useful for testing)
178
+ */
179
+ export function clearWarningHistory() {
180
+ shownWarnings.clear();
181
+ }
182
+ // =============================================================================
183
+ // Capability Matrix (Documentation)
184
+ // =============================================================================
185
+ /**
186
+ * Standard capability matrix for known providers
187
+ *
188
+ * This is a reference for documentation purposes. Actual capabilities
189
+ * are detected at runtime using detectCapabilities().
190
+ */
191
+ export const PROVIDER_CAPABILITY_MATRIX = {
192
+ MemoryProvider: {
193
+ hasSemanticSearch: true,
194
+ hasEvents: true,
195
+ hasActions: true,
196
+ hasArtifacts: true,
197
+ hasBatchOperations: true,
198
+ },
199
+ RDBProvider: {
200
+ hasSemanticSearch: false,
201
+ hasEvents: false,
202
+ hasActions: false,
203
+ hasArtifacts: false,
204
+ hasBatchOperations: false,
205
+ },
206
+ DigitalObjectsProvider: {
207
+ hasSemanticSearch: false,
208
+ hasEvents: false,
209
+ hasActions: false,
210
+ hasArtifacts: false,
211
+ hasBatchOperations: false,
212
+ },
213
+ };
214
+ //# sourceMappingURL=provider-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-capabilities.js","sourceRoot":"","sources":["../src/provider-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * RDB Provider Adapter
3
+ *
4
+ * Adapts RDB's DBProvider interface to ai-database's DBProvider interface.
5
+ *
6
+ * The key interface mismatch addressed:
7
+ * - ai-database search(): (type: string, query: string, options?: SearchOptions) => Promise<Record[]>
8
+ * - RDB search(): (type: string, filter: Filter, options?: SearchOptions) => Promise<Entity[]>
9
+ *
10
+ * This adapter:
11
+ * 1. Converts ai-database's string query to RDB's Filter object (using $regex for text search)
12
+ * 2. Normalizes RDB entities (id/type) to ai-database format ($id/$type)
13
+ * 3. Maintains full compatibility with ai-database's DBProvider interface
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { RDB } from '@dotdo/rdb'
18
+ * import { RDBProviderAdapter } from 'ai-database'
19
+ * import { DB, setProvider } from 'ai-database'
20
+ *
21
+ * // Create RDB instance (Cloudflare D1/DO SQLite)
22
+ * const rdb = new RDB(sqlStorage)
23
+ *
24
+ * // Wrap with adapter for ai-database compatibility
25
+ * const adapter = new RDBProviderAdapter(rdb)
26
+ * setProvider(adapter)
27
+ *
28
+ * // Now use ai-database's schema-first API
29
+ * const { db } = DB({
30
+ * User: { name: 'string', email: 'string' },
31
+ * Post: { title: 'string', author: '->User' }
32
+ * })
33
+ *
34
+ * // search() works with string queries (adapter converts to Filter)
35
+ * const results = await db.Post.search('TypeScript')
36
+ * ```
37
+ *
38
+ * @packageDocumentation
39
+ */
40
+ import type { DBProvider } from './schema/provider.js';
41
+ import type { ListOptions, SearchOptions } from './schema/types.js';
42
+ /**
43
+ * RDB Entity interface (from @dotdo/rdb)
44
+ *
45
+ * This is a simplified version of the interface for adapter use.
46
+ * The actual RDB Entity uses id/type at the top level.
47
+ */
48
+ interface RDBEntity {
49
+ id: string;
50
+ type: string;
51
+ [key: string]: unknown;
52
+ }
53
+ /**
54
+ * RDB Filter type (from @dotdo/rdb)
55
+ *
56
+ * MongoDB-style filter operators for search operations.
57
+ */
58
+ type FilterOperator = {
59
+ $eq: unknown;
60
+ } | {
61
+ $ne: unknown;
62
+ } | {
63
+ $gt: number | string;
64
+ } | {
65
+ $gte: number | string;
66
+ } | {
67
+ $lt: number | string;
68
+ } | {
69
+ $lte: number | string;
70
+ } | {
71
+ $in: unknown[];
72
+ } | {
73
+ $nin: unknown[];
74
+ } | {
75
+ $regex: string;
76
+ } | {
77
+ $exists: boolean;
78
+ };
79
+ type FilterValue = unknown | FilterOperator;
80
+ type Filter = Record<string, FilterValue>;
81
+ /**
82
+ * RDB DBProvider interface (from @dotdo/rdb)
83
+ *
84
+ * Simplified interface for adapter compatibility.
85
+ */
86
+ interface RDBProvider {
87
+ get(type: string, id: string): Promise<RDBEntity | null>;
88
+ list(type: string, options?: {
89
+ limit?: number;
90
+ offset?: number;
91
+ orderBy?: string;
92
+ order?: 'asc' | 'desc';
93
+ }): Promise<RDBEntity[]>;
94
+ search(type: string, filter: Filter, options?: {
95
+ limit?: number;
96
+ offset?: number;
97
+ }): Promise<RDBEntity[]>;
98
+ create(type: string, data: Record<string, unknown>, id?: string): Promise<RDBEntity>;
99
+ update(type: string, id: string, data: Record<string, unknown>): Promise<RDBEntity>;
100
+ delete(type: string, id: string): Promise<void>;
101
+ relate(fromType: string, fromId: string, relation: string, toType: string, toId: string, metadata?: Record<string, unknown>): Promise<void>;
102
+ unrelate(fromType: string, fromId: string, relation: string, toType: string, toId: string): Promise<void>;
103
+ related(type: string, id: string, relation: string, options?: {
104
+ direction?: 'outgoing' | 'incoming' | 'both';
105
+ limit?: number;
106
+ offset?: number;
107
+ }): Promise<RDBEntity[]>;
108
+ }
109
+ /**
110
+ * RDB Provider Adapter
111
+ *
112
+ * Wraps an RDB DBProvider to make it compatible with ai-database's DBProvider interface.
113
+ * The primary adaptation is converting string search queries to RDB Filter objects.
114
+ */
115
+ export declare class RDBProviderAdapter implements DBProvider {
116
+ private rdb;
117
+ /**
118
+ * Create a new RDBProviderAdapter
119
+ *
120
+ * @param rdb - An RDB DBProvider instance (from RDB class or D1Provider/DOProvider)
121
+ */
122
+ constructor(rdb: RDBProvider);
123
+ /**
124
+ * Get an entity by type and ID
125
+ */
126
+ get(type: string, id: string): Promise<Record<string, unknown> | null>;
127
+ /**
128
+ * List entities of a type
129
+ *
130
+ * If a `where` filter is provided, we apply it client-side after fetching
131
+ * since RDB's list() method doesn't support where filters natively.
132
+ */
133
+ list(type: string, options?: ListOptions): Promise<Record<string, unknown>[]>;
134
+ /**
135
+ * Search entities using a string query
136
+ *
137
+ * This is the key adaptation point:
138
+ * - ai-database expects: search(type, query: string)
139
+ * - RDB expects: search(type, filter: Filter)
140
+ *
141
+ * The adapter converts the string query to $regex Filters for text search.
142
+ * Since RDB doesn't support $or at the top level, we search each field
143
+ * separately and deduplicate results.
144
+ */
145
+ search(type: string, query: string, options?: SearchOptions): Promise<Record<string, unknown>[]>;
146
+ /**
147
+ * Create a new entity
148
+ */
149
+ create(type: string, id: string | undefined, data: Record<string, unknown>): Promise<Record<string, unknown>>;
150
+ /**
151
+ * Update an existing entity
152
+ */
153
+ update(type: string, id: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
154
+ /**
155
+ * Delete an entity
156
+ *
157
+ * @returns true if deleted, false if entity didn't exist
158
+ */
159
+ delete(type: string, id: string): Promise<boolean>;
160
+ /**
161
+ * Get related entities
162
+ */
163
+ related(type: string, id: string, relation: string): Promise<Record<string, unknown>[]>;
164
+ /**
165
+ * Create a relationship between entities
166
+ */
167
+ relate(fromType: string, fromId: string, relation: string, toType: string, toId: string, metadata?: {
168
+ matchMode?: 'exact' | 'fuzzy';
169
+ similarity?: number;
170
+ matchedType?: string;
171
+ }): Promise<void>;
172
+ /**
173
+ * Remove a relationship between entities
174
+ */
175
+ unrelate(fromType: string, fromId: string, relation: string, toType: string, toId: string): Promise<void>;
176
+ }
177
+ /**
178
+ * Create an RDBProviderAdapter from an RDB instance
179
+ *
180
+ * @param rdb - An RDB DBProvider instance
181
+ * @returns Adapted provider compatible with ai-database
182
+ *
183
+ * @example
184
+ * ```ts
185
+ * import { RDB } from '@dotdo/rdb'
186
+ * import { createRDBAdapter, setProvider } from 'ai-database'
187
+ *
188
+ * const rdb = new RDB(sqlStorage)
189
+ * const adapter = createRDBAdapter(rdb)
190
+ * setProvider(adapter)
191
+ * ```
192
+ */
193
+ export declare function createRDBAdapter(rdb: RDBProvider): DBProvider;
194
+ export {};
195
+ //# sourceMappingURL=rdb-provider-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdb-provider-adapter.d.ts","sourceRoot":"","sources":["../src/rdb-provider-adapter.ts"],"names":[],"mappings":"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"}