ai-database 2.1.3 → 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 (260) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/README.md +880 -669
  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 +49 -23
  8. package/dist/ai-promise-db.d.ts.map +1 -1
  9. package/dist/ai-promise-db.js +91 -63
  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 +35 -8
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +106 -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 +128 -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 +48 -17
  124. package/dist/schema/cascade.d.ts.map +1 -1
  125. package/dist/schema/cascade.js +477 -278
  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 +21 -109
  132. package/dist/schema/dependency-graph.d.ts.map +1 -1
  133. package/dist/schema/dependency-graph.js +25 -333
  134. package/dist/schema/dependency-graph.js.map +1 -1
  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/index.d.ts +28 -34
  144. package/dist/schema/index.d.ts.map +1 -1
  145. package/dist/schema/index.js +454 -521
  146. package/dist/schema/index.js.map +1 -1
  147. package/dist/schema/migration.d.ts +205 -0
  148. package/dist/schema/migration.d.ts.map +1 -0
  149. package/dist/schema/migration.js +327 -0
  150. package/dist/schema/migration.js.map +1 -0
  151. package/dist/schema/nl-query-generator.d.ts +68 -0
  152. package/dist/schema/nl-query-generator.d.ts.map +1 -0
  153. package/dist/schema/nl-query-generator.js +362 -0
  154. package/dist/schema/nl-query-generator.js.map +1 -0
  155. package/dist/schema/nl-query.d.ts +65 -0
  156. package/dist/schema/nl-query.d.ts.map +1 -0
  157. package/dist/schema/nl-query.js +178 -0
  158. package/dist/schema/nl-query.js.map +1 -0
  159. package/dist/schema/parse.d.ts.map +1 -1
  160. package/dist/schema/parse.js +144 -89
  161. package/dist/schema/parse.js.map +1 -1
  162. package/dist/schema/provider.d.ts +37 -0
  163. package/dist/schema/provider.d.ts.map +1 -1
  164. package/dist/schema/provider.js +15 -7
  165. package/dist/schema/provider.js.map +1 -1
  166. package/dist/schema/resolve.d.ts +46 -5
  167. package/dist/schema/resolve.d.ts.map +1 -1
  168. package/dist/schema/resolve.js +237 -95
  169. package/dist/schema/resolve.js.map +1 -1
  170. package/dist/schema/search-utils.d.ts +76 -0
  171. package/dist/schema/search-utils.d.ts.map +1 -0
  172. package/dist/schema/search-utils.js +86 -0
  173. package/dist/schema/search-utils.js.map +1 -0
  174. package/dist/schema/seed.d.ts +53 -0
  175. package/dist/schema/seed.d.ts.map +1 -0
  176. package/dist/schema/seed.js +94 -0
  177. package/dist/schema/seed.js.map +1 -0
  178. package/dist/schema/semantic.d.ts +10 -0
  179. package/dist/schema/semantic.d.ts.map +1 -1
  180. package/dist/schema/semantic.js +192 -86
  181. package/dist/schema/semantic.js.map +1 -1
  182. package/dist/schema/sub-apis.d.ts +52 -0
  183. package/dist/schema/sub-apis.d.ts.map +1 -0
  184. package/dist/schema/sub-apis.js +216 -0
  185. package/dist/schema/sub-apis.js.map +1 -0
  186. package/dist/schema/system-entities.d.ts +42 -0
  187. package/dist/schema/system-entities.d.ts.map +1 -0
  188. package/dist/schema/system-entities.js +101 -0
  189. package/dist/schema/system-entities.js.map +1 -0
  190. package/dist/schema/types.d.ts +91 -9
  191. package/dist/schema/types.d.ts.map +1 -1
  192. package/dist/schema/union-fallback.d.ts.map +1 -1
  193. package/dist/schema/union-fallback.js +21 -15
  194. package/dist/schema/union-fallback.js.map +1 -1
  195. package/dist/schema/value-generators/ai.d.ts +54 -0
  196. package/dist/schema/value-generators/ai.d.ts.map +1 -0
  197. package/dist/schema/value-generators/ai.js +136 -0
  198. package/dist/schema/value-generators/ai.js.map +1 -0
  199. package/dist/schema/value-generators/index.d.ts +126 -0
  200. package/dist/schema/value-generators/index.d.ts.map +1 -0
  201. package/dist/schema/value-generators/index.js +219 -0
  202. package/dist/schema/value-generators/index.js.map +1 -0
  203. package/dist/schema/value-generators/placeholder.d.ts +52 -0
  204. package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
  205. package/dist/schema/value-generators/placeholder.js +328 -0
  206. package/dist/schema/value-generators/placeholder.js.map +1 -0
  207. package/dist/schema/value-generators/types.d.ts +116 -0
  208. package/dist/schema/value-generators/types.d.ts.map +1 -0
  209. package/dist/schema/value-generators/types.js +11 -0
  210. package/dist/schema/value-generators/types.js.map +1 -0
  211. package/dist/schema/version.d.ts +111 -0
  212. package/dist/schema/version.d.ts.map +1 -0
  213. package/dist/schema/version.js +190 -0
  214. package/dist/schema/version.js.map +1 -0
  215. package/dist/schema.d.ts +1095 -24
  216. package/dist/schema.d.ts.map +1 -1
  217. package/dist/schema.js +2852 -40
  218. package/dist/schema.js.map +1 -1
  219. package/dist/semantic-vectors.d.ts +39 -0
  220. package/dist/semantic-vectors.d.ts.map +1 -0
  221. package/dist/semantic-vectors.js +334 -0
  222. package/dist/semantic-vectors.js.map +1 -0
  223. package/dist/semantic.d.ts +29 -1
  224. package/dist/semantic.d.ts.map +1 -1
  225. package/dist/semantic.js +26 -16
  226. package/dist/semantic.js.map +1 -1
  227. package/dist/telemetry.d.ts +128 -0
  228. package/dist/telemetry.d.ts.map +1 -0
  229. package/dist/telemetry.js +305 -0
  230. package/dist/telemetry.js.map +1 -0
  231. package/dist/tests.d.ts.map +1 -1
  232. package/dist/tests.js +30 -22
  233. package/dist/tests.js.map +1 -1
  234. package/dist/type-guards.d.ts +50 -5
  235. package/dist/type-guards.d.ts.map +1 -1
  236. package/dist/type-guards.js +87 -16
  237. package/dist/type-guards.js.map +1 -1
  238. package/dist/types.d.ts +33 -245
  239. package/dist/types.d.ts.map +1 -1
  240. package/dist/types.js +62 -72
  241. package/dist/types.js.map +1 -1
  242. package/dist/validation.d.ts +2 -5
  243. package/dist/validation.d.ts.map +1 -1
  244. package/dist/validation.js +65 -93
  245. package/dist/validation.js.map +1 -1
  246. package/dist/worker/db-provider.d.ts +168 -0
  247. package/dist/worker/db-provider.d.ts.map +1 -0
  248. package/dist/worker/db-provider.js +277 -0
  249. package/dist/worker/db-provider.js.map +1 -0
  250. package/dist/worker/index.d.ts +35 -0
  251. package/dist/worker/index.d.ts.map +1 -0
  252. package/dist/worker/index.js +37 -0
  253. package/dist/worker/index.js.map +1 -0
  254. package/dist/worker.d.ts +779 -0
  255. package/dist/worker.d.ts.map +1 -0
  256. package/dist/worker.js +2786 -0
  257. package/dist/worker.js.map +1 -0
  258. package/package.json +46 -16
  259. package/src/docs-rels/migrations/0001-init.sql +125 -0
  260. package/LICENSE +0 -21
@@ -0,0 +1,291 @@
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
+ /**
41
+ * Normalizes an RDB entity to ai-database format
42
+ *
43
+ * RDB uses: { id: 'xxx', type: 'User', name: 'John' }
44
+ * ai-database uses: { $id: 'xxx', $type: 'User', name: 'John' }
45
+ */
46
+ function normalizeEntity(entity) {
47
+ const { id, type, ...rest } = entity;
48
+ return {
49
+ $id: id,
50
+ $type: type,
51
+ ...rest,
52
+ };
53
+ }
54
+ /**
55
+ * Default fields to search when no specific fields are provided.
56
+ * These are common text fields found in most entity types.
57
+ */
58
+ const DEFAULT_SEARCH_FIELDS = ['title', 'name', 'content', 'description', 'body', 'text'];
59
+ /**
60
+ * Converts a string search query to an RDB Filter object
61
+ *
62
+ * By default, creates a $regex filter that searches across all string fields.
63
+ * If fields option is provided, restricts search to those fields.
64
+ *
65
+ * @param query - The search string
66
+ * @param field - The specific field to search
67
+ * @returns Filter object for RDB search()
68
+ */
69
+ function stringQueryToFilter(query, field) {
70
+ // Escape regex special characters in the query
71
+ const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
72
+ return {
73
+ [field]: { $regex: escapedQuery },
74
+ };
75
+ }
76
+ /**
77
+ * Get the list of fields to search
78
+ *
79
+ * @param options - Search options that may include specific fields
80
+ * @returns Array of field names to search
81
+ */
82
+ function getSearchFields(options) {
83
+ if (options?.fields && options.fields.length > 0) {
84
+ return options.fields;
85
+ }
86
+ return DEFAULT_SEARCH_FIELDS;
87
+ }
88
+ /**
89
+ * RDB Provider Adapter
90
+ *
91
+ * Wraps an RDB DBProvider to make it compatible with ai-database's DBProvider interface.
92
+ * The primary adaptation is converting string search queries to RDB Filter objects.
93
+ */
94
+ export class RDBProviderAdapter {
95
+ rdb;
96
+ /**
97
+ * Create a new RDBProviderAdapter
98
+ *
99
+ * @param rdb - An RDB DBProvider instance (from RDB class or D1Provider/DOProvider)
100
+ */
101
+ constructor(rdb) {
102
+ this.rdb = rdb;
103
+ }
104
+ /**
105
+ * Get an entity by type and ID
106
+ */
107
+ async get(type, id) {
108
+ const entity = await this.rdb.get(type, id);
109
+ return entity ? normalizeEntity(entity) : null;
110
+ }
111
+ /**
112
+ * List entities of a type
113
+ *
114
+ * If a `where` filter is provided, we apply it client-side after fetching
115
+ * since RDB's list() method doesn't support where filters natively.
116
+ */
117
+ async list(type, options) {
118
+ const listOptions = {};
119
+ // If we have where filters, we need to fetch all and filter client-side
120
+ // We apply pagination after filtering
121
+ const hasWhereFilter = options?.where && Object.keys(options.where).length > 0;
122
+ if (!hasWhereFilter) {
123
+ if (options?.limit !== undefined) {
124
+ listOptions.limit = options.limit;
125
+ }
126
+ if (options?.offset !== undefined) {
127
+ listOptions.offset = options.offset;
128
+ }
129
+ }
130
+ if (options?.orderBy !== undefined) {
131
+ listOptions.orderBy = options.orderBy;
132
+ }
133
+ if (options?.order !== undefined) {
134
+ listOptions.order = options.order;
135
+ }
136
+ let entities = await this.rdb.list(type, listOptions);
137
+ // Apply where filter client-side
138
+ if (hasWhereFilter && options?.where) {
139
+ const whereFilter = options.where;
140
+ entities = entities.filter((entity) => {
141
+ for (const [key, value] of Object.entries(whereFilter)) {
142
+ if (entity[key] !== value) {
143
+ return false;
144
+ }
145
+ }
146
+ return true;
147
+ });
148
+ }
149
+ let results = entities.map(normalizeEntity);
150
+ // Apply pagination after client-side filtering
151
+ if (hasWhereFilter) {
152
+ if (options?.offset) {
153
+ results = results.slice(options.offset);
154
+ }
155
+ if (options?.limit) {
156
+ results = results.slice(0, options.limit);
157
+ }
158
+ }
159
+ return results;
160
+ }
161
+ /**
162
+ * Search entities using a string query
163
+ *
164
+ * This is the key adaptation point:
165
+ * - ai-database expects: search(type, query: string)
166
+ * - RDB expects: search(type, filter: Filter)
167
+ *
168
+ * The adapter converts the string query to $regex Filters for text search.
169
+ * Since RDB doesn't support $or at the top level, we search each field
170
+ * separately and deduplicate results.
171
+ */
172
+ async search(type, query, options) {
173
+ const fields = getSearchFields(options);
174
+ const seenIds = new Set();
175
+ const results = [];
176
+ // Search each field and collect unique results
177
+ // This is necessary because RDB doesn't support $or at the top level
178
+ for (const field of fields) {
179
+ const filter = stringQueryToFilter(query, field);
180
+ try {
181
+ const entities = await this.rdb.search(type, filter, {
182
+ // Don't apply limit/offset per-field, we'll apply after deduplication
183
+ });
184
+ for (const entity of entities) {
185
+ if (!seenIds.has(entity.id)) {
186
+ seenIds.add(entity.id);
187
+ results.push(normalizeEntity(entity));
188
+ }
189
+ }
190
+ }
191
+ catch {
192
+ // Field might not exist on this entity type, continue to next field
193
+ }
194
+ }
195
+ // Apply where filter client-side
196
+ let finalResults = results;
197
+ if (options?.where && Object.keys(options.where).length > 0) {
198
+ const whereFilter = options.where;
199
+ finalResults = finalResults.filter((entity) => {
200
+ for (const [key, value] of Object.entries(whereFilter)) {
201
+ if (entity[key] !== value) {
202
+ return false;
203
+ }
204
+ }
205
+ return true;
206
+ });
207
+ }
208
+ // Apply limit and offset after collecting and filtering all results
209
+ if (options?.offset) {
210
+ finalResults = finalResults.slice(options.offset);
211
+ }
212
+ if (options?.limit) {
213
+ finalResults = finalResults.slice(0, options.limit);
214
+ }
215
+ return finalResults;
216
+ }
217
+ /**
218
+ * Create a new entity
219
+ */
220
+ async create(type, id, data) {
221
+ const entity = await this.rdb.create(type, data, id);
222
+ return normalizeEntity(entity);
223
+ }
224
+ /**
225
+ * Update an existing entity
226
+ */
227
+ async update(type, id, data) {
228
+ const entity = await this.rdb.update(type, id, data);
229
+ return normalizeEntity(entity);
230
+ }
231
+ /**
232
+ * Delete an entity
233
+ *
234
+ * @returns true if deleted, false if entity didn't exist
235
+ */
236
+ async delete(type, id) {
237
+ try {
238
+ // Check if entity exists first
239
+ const existing = await this.rdb.get(type, id);
240
+ if (!existing) {
241
+ return false;
242
+ }
243
+ await this.rdb.delete(type, id);
244
+ return true;
245
+ }
246
+ catch {
247
+ return false;
248
+ }
249
+ }
250
+ /**
251
+ * Get related entities
252
+ */
253
+ async related(type, id, relation) {
254
+ const entities = await this.rdb.related(type, id, relation, {
255
+ direction: 'outgoing',
256
+ });
257
+ return entities.map(normalizeEntity);
258
+ }
259
+ /**
260
+ * Create a relationship between entities
261
+ */
262
+ async relate(fromType, fromId, relation, toType, toId, metadata) {
263
+ await this.rdb.relate(fromType, fromId, relation, toType, toId, metadata);
264
+ }
265
+ /**
266
+ * Remove a relationship between entities
267
+ */
268
+ async unrelate(fromType, fromId, relation, toType, toId) {
269
+ await this.rdb.unrelate(fromType, fromId, relation, toType, toId);
270
+ }
271
+ }
272
+ /**
273
+ * Create an RDBProviderAdapter from an RDB instance
274
+ *
275
+ * @param rdb - An RDB DBProvider instance
276
+ * @returns Adapted provider compatible with ai-database
277
+ *
278
+ * @example
279
+ * ```ts
280
+ * import { RDB } from '@dotdo/rdb'
281
+ * import { createRDBAdapter, setProvider } from 'ai-database'
282
+ *
283
+ * const rdb = new RDB(sqlStorage)
284
+ * const adapter = createRDBAdapter(rdb)
285
+ * setProvider(adapter)
286
+ * ```
287
+ */
288
+ export function createRDBAdapter(rdb) {
289
+ return new RDBProviderAdapter(rdb);
290
+ }
291
+ //# sourceMappingURL=rdb-provider-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdb-provider-adapter.js","sourceRoot":"","sources":["../src/rdb-provider-adapter.ts"],"names":[],"mappings":"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"}
@@ -8,24 +8,52 @@
8
8
  */
9
9
  import type { ParsedEntity, ParsedSchema } from '../types.js';
10
10
  import type { DBProvider } from './provider.js';
11
+ import type { AIGenerationConfig } from './types.js';
12
+ import type { ValueGenerator } from './value-generators/types.js';
13
+ export type { AIGenerationConfig, GenerationDetails } from './types.js';
14
+ /**
15
+ * Hard safety limit for cascade/entity generation recursion depth.
16
+ * Applied even when maxDepth is not explicitly configured to prevent
17
+ * infinite recursion with circular schemas.
18
+ */
19
+ export declare const DEFAULT_MAX_DEPTH = 10;
20
+ /**
21
+ * Configure the value generator to use for field generation
22
+ *
23
+ * @param generator - The value generator instance to use
24
+ */
25
+ export declare function setValueGenerator(generator: ValueGenerator): void;
26
+ /**
27
+ * Get the current value generator
28
+ *
29
+ * @returns The current value generator instance
30
+ */
31
+ export declare function getValueGenerator(): ValueGenerator;
32
+ /**
33
+ * Configure AI generation settings
34
+ *
35
+ * @param config - Partial configuration to merge with defaults
36
+ */
37
+ export declare function configureAIGeneration(config: Partial<AIGenerationConfig>): void;
38
+ /**
39
+ * Get current AI generation configuration
40
+ */
41
+ export declare function getAIGenerationConfig(): AIGenerationConfig;
11
42
  /**
12
43
  * Generate a context-aware value for a field
13
44
  *
14
- * Uses hint, instructions, schema context, and parent data to generate
15
- * contextually appropriate values. This is a minimal deterministic implementation
16
- * for testing - real AI generation would integrate with LLMs.
45
+ * **DELEGATED TO VALUE-GENERATORS MODULE**
17
46
  *
18
- * The function uses keyword matching on the context and hint to produce
19
- * contextually relevant values for common field names like 'name', 'description',
20
- * 'headline', 'background', etc.
47
+ * This function now delegates to PlaceholderValueGenerator for backward
48
+ * compatibility. The actual generation logic has been extracted to:
49
+ * `./value-generators/placeholder.ts`
21
50
  *
22
- * **PLACEHOLDER IMPLEMENTATION**: This function contains hardcoded test values
23
- * and keyword-based generation rules. In a production system, this would be
24
- * replaced with actual AI/LLM integration to generate contextually appropriate
25
- * content. The current implementation is designed to:
26
- * - Provide deterministic, predictable outputs for testing
27
- * - Demonstrate the expected behavior and API contract
28
- * - Allow tests to make specific assertions about generated content
51
+ * For new code, prefer using the ValueGenerator interface directly:
52
+ * ```ts
53
+ * import { getValueGenerator } from './value-generators/index.js'
54
+ * const generator = getValueGenerator()
55
+ * const result = await generator.generate({ fieldName, type, fullContext, hint, parentData })
56
+ * ```
29
57
  *
30
58
  * @param fieldName - The name of the field being generated
31
59
  * @param type - The entity type name
@@ -55,25 +83,28 @@ export declare function generateContextAwareValue(fieldName: string, type: strin
55
83
  * @param entityDef - The parsed entity definition
56
84
  * @param schema - The parsed schema
57
85
  * @param provider - The database provider
86
+ * @param injectedConfig - Optional AI config to use instead of module-level config (for DI)
58
87
  * @returns The data with AI-generated fields populated
59
88
  */
60
- export declare function generateAIFields(data: Record<string, unknown>, typeName: string, entityDef: ParsedEntity, schema: ParsedSchema, provider: DBProvider): Promise<Record<string, unknown>>;
89
+ export declare function generateAIFields(data: Record<string, unknown>, typeName: string, entityDef: ParsedEntity, schema: ParsedSchema, provider: DBProvider, injectedConfig?: AIGenerationConfig): Promise<Record<string, unknown>>;
61
90
  /**
62
91
  * Generate an entity based on its type and context
63
92
  *
64
- * For testing, generates deterministic content based on the prompt and type.
65
- * In production, this would integrate with AI generation.
93
+ * Uses AI generation via generateObject from ai-functions when available,
94
+ * falling back to deterministic placeholder values for testing or when AI fails.
66
95
  *
67
96
  * @param type - The type of entity to generate
68
97
  * @param prompt - Optional prompt for generation context
69
98
  * @param context - Parent context information (parent type name, parentData, and optional parentId)
70
99
  * @param schema - The parsed schema
100
+ * @param _depth - Current recursion depth (internal)
101
+ * @param injectedConfig - Optional AI config to use instead of module-level config (for DI)
71
102
  */
72
103
  export declare function generateEntity(type: string, prompt: string | undefined, context: {
73
104
  parent: string;
74
105
  parentData: Record<string, unknown>;
75
106
  parentId?: string;
76
- }, schema: ParsedSchema): Promise<Record<string, unknown>>;
107
+ }, schema: ParsedSchema, _depth?: number, injectedConfig?: AIGenerationConfig): Promise<Record<string, unknown>>;
77
108
  /**
78
109
  * Resolve forward exact (->) fields by auto-generating related entities
79
110
  *
@@ -1 +1 @@
1
- {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../../src/schema/cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAQ/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,MAAM,CAyJR;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAuElC;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACnF,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA8DlC;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,gBAAgB,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwGlI;AAMD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CA4DR"}
1
+ {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../../src/schema/cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAA;AASvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAGjE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEvE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAenC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAYD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAE/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAE1D;AAmKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,MAAM,CA0BR;AAmGD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,UAAU,EACpB,cAAc,CAAC,EAAE,kBAAkB,GAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAuIlC;AAkED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACnF,MAAM,EAAE,YAAY,EACpB,MAAM,GAAE,MAAU,EAClB,cAAc,CAAC,EAAE,kBAAkB,GAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwFlC;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,gBAAgB,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrF,CAAC,CAwHD;AAMD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAkER"}