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,362 @@
1
+ /**
2
+ * Default Natural Language Query Generator
3
+ *
4
+ * Uses generateObject from ai-functions to convert natural language
5
+ * queries into structured query plans that can be executed against the database.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { getAIGenerationConfig } from './cascade.js';
10
+ /**
11
+ * Schema definition for the query plan that LLM generates
12
+ */
13
+ const QUERY_PLAN_SCHEMA = {
14
+ types: 'string[] - The entity types to query (e.g., ["Lead", "Order"])',
15
+ filters: 'object? - Filter conditions to apply. Use MongoDB-style operators like $gt, $lt, $eq, $in. Example: { status: "active", score: { $gt: 70 } }',
16
+ search: 'string? - Optional text search query to apply',
17
+ timeRange: 'object? - Time range filter with "since" and/or "until" ISO date strings. Example: { since: "2024-01-01T00:00:00Z" }',
18
+ include: 'string[]? - Related entity fields to include in the results. Example: ["company", "orders"]',
19
+ interpretation: 'string - Human-readable interpretation of what the query means',
20
+ confidence: 'number - Confidence score from 0 to 1 indicating how confident the interpretation is',
21
+ };
22
+ /**
23
+ * Build a prompt for the LLM that includes schema context
24
+ *
25
+ * @param query - The natural language query from the user
26
+ * @param context - Schema context including available types and their fields
27
+ * @returns A formatted prompt string for the LLM
28
+ */
29
+ function buildQueryPrompt(query, context) {
30
+ const schemaDescription = context.types
31
+ .map((type) => {
32
+ const fieldsStr = type.fields.join(', ');
33
+ const relationsStr = type.relationships.length > 0
34
+ ? ` | Relations: ${type.relationships
35
+ .map((r) => `${r.name} -> ${r.to} (${r.cardinality})`)
36
+ .join(', ')}`
37
+ : '';
38
+ return `- ${type.name} (${type.singular}/${type.plural}): Fields: [${fieldsStr}]${relationsStr}`;
39
+ })
40
+ .join('\n');
41
+ const targetTypeHint = context.targetType
42
+ ? `\nNote: The query is specifically targeting the "${context.targetType}" type.`
43
+ : '';
44
+ return `Convert this natural language query into a structured query plan.
45
+
46
+ Available entity types and their schemas:
47
+ ${schemaDescription}
48
+ ${targetTypeHint}
49
+
50
+ Query: "${query}"
51
+
52
+ Guidelines:
53
+ - For filter conditions, use MongoDB-style operators: $gt, $lt, $gte, $lte, $eq, $ne, $in, $nin
54
+ - For temporal queries like "this week", "this year", "last month", calculate the appropriate date range
55
+ - If the query mentions a specific entity type, include it in the types array
56
+ - If no specific type is mentioned and targetType is provided, use the targetType
57
+ - Set confidence based on how clearly the query maps to the schema (0.9+ for clear queries, 0.7-0.9 for ambiguous)
58
+ - The interpretation should clearly explain what the query plan will do`;
59
+ }
60
+ /**
61
+ * Create a default NL query generator that uses generateObject from ai-functions
62
+ *
63
+ * This generator converts natural language queries into structured query plans
64
+ * using the LLM configured via configureAIGeneration().
65
+ *
66
+ * @returns An NLQueryGenerator function
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import { setNLQueryGenerator } from 'ai-database'
71
+ * import { createDefaultNLQueryGenerator } from 'ai-database/schema/nl-query-generator'
72
+ *
73
+ * // Configure the default generator
74
+ * const generator = createDefaultNLQueryGenerator()
75
+ * setNLQueryGenerator(generator)
76
+ *
77
+ * // Now NL queries will use the LLM
78
+ * const results = await db.Lead`find high scoring leads`
79
+ * ```
80
+ */
81
+ export function createDefaultNLQueryGenerator() {
82
+ return async (query, context) => {
83
+ const config = getAIGenerationConfig();
84
+ if (!config.enabled) {
85
+ // If AI is disabled, return a basic plan with low confidence
86
+ return {
87
+ types: context.targetType ? [context.targetType] : context.types.map((t) => t.name),
88
+ search: query,
89
+ interpretation: `Search for "${query}"`,
90
+ confidence: 0.5,
91
+ };
92
+ }
93
+ // Dynamically import generateObject to avoid circular dependencies
94
+ let result;
95
+ try {
96
+ const { generateObject } = await import('ai-functions');
97
+ const prompt = buildQueryPrompt(query, context);
98
+ result = await generateObject({
99
+ model: config.model,
100
+ schema: QUERY_PLAN_SCHEMA,
101
+ prompt,
102
+ });
103
+ }
104
+ catch (error) {
105
+ // If API key is missing or AI service unavailable, fall back to basic plan
106
+ const errorMessage = error instanceof Error ? error.message : String(error);
107
+ const isApiKeyError = errorMessage.includes('API key') ||
108
+ errorMessage.includes('apiKey') ||
109
+ errorMessage.includes('OPENAI_API_KEY') ||
110
+ errorMessage.includes('ANTHROPIC_API_KEY');
111
+ if (isApiKeyError) {
112
+ return {
113
+ types: context.targetType ? [context.targetType] : context.types.map((t) => t.name),
114
+ search: query,
115
+ interpretation: `Search for "${query}"`,
116
+ confidence: 0.5,
117
+ };
118
+ }
119
+ throw error;
120
+ }
121
+ // Raw object has string dates from LLM output
122
+ const rawPlan = result.object;
123
+ // Build a lookup map for type name normalization (case-insensitive)
124
+ const typeNameMap = new Map();
125
+ for (const type of context.types) {
126
+ typeNameMap.set(type.name.toLowerCase(), type.name);
127
+ typeNameMap.set(type.singular.toLowerCase(), type.name);
128
+ typeNameMap.set(type.plural.toLowerCase(), type.name);
129
+ }
130
+ // Normalize type names from AI response to match schema type names
131
+ const normalizedTypes = [];
132
+ if (rawPlan.types && rawPlan.types.length > 0) {
133
+ for (const rawType of rawPlan.types) {
134
+ if (typeof rawType === 'string' && rawType.trim()) {
135
+ const normalized = typeNameMap.get(rawType.toLowerCase().trim());
136
+ if (normalized && !normalizedTypes.includes(normalized)) {
137
+ normalizedTypes.push(normalized);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Parse confidence as number (AI may return it as string)
143
+ let confidence = 0.5;
144
+ if (rawPlan.confidence !== undefined && rawPlan.confidence !== null) {
145
+ const parsed = typeof rawPlan.confidence === 'number'
146
+ ? rawPlan.confidence
147
+ : parseFloat(String(rawPlan.confidence));
148
+ if (!isNaN(parsed) && parsed >= 0 && parsed <= 1) {
149
+ confidence = parsed;
150
+ }
151
+ }
152
+ // Convert to NLQueryPlan with proper Date objects
153
+ const plan = {
154
+ types: normalizedTypes,
155
+ interpretation: rawPlan.interpretation ?? `Query: "${query}"`,
156
+ confidence,
157
+ };
158
+ if (rawPlan.filters !== undefined) {
159
+ plan.filters = rawPlan.filters;
160
+ }
161
+ if (rawPlan.search !== undefined) {
162
+ plan.search = rawPlan.search;
163
+ }
164
+ if (rawPlan.include !== undefined) {
165
+ plan.include = rawPlan.include;
166
+ }
167
+ // Convert ISO date strings to Date objects if present
168
+ if (rawPlan.timeRange) {
169
+ const timeRange = {};
170
+ if (rawPlan.timeRange.since) {
171
+ timeRange.since = new Date(rawPlan.timeRange.since);
172
+ }
173
+ if (rawPlan.timeRange.until) {
174
+ timeRange.until = new Date(rawPlan.timeRange.until);
175
+ }
176
+ plan.timeRange = timeRange;
177
+ }
178
+ // Ensure types array is populated (fallback if AI didn't return valid types)
179
+ if (!plan.types || plan.types.length === 0) {
180
+ plan.types = context.targetType ? [context.targetType] : context.types.map((t) => t.name);
181
+ }
182
+ return plan;
183
+ };
184
+ }
185
+ /**
186
+ * Convert a value to a number for comparison
187
+ * Handles Date objects, numbers, and numeric strings
188
+ *
189
+ * @param value - The value to convert
190
+ * @returns The numeric value, or NaN if conversion fails
191
+ */
192
+ function toComparableNumber(value) {
193
+ if (typeof value === 'number') {
194
+ return value;
195
+ }
196
+ if (value instanceof Date) {
197
+ return value.getTime();
198
+ }
199
+ if (typeof value === 'string') {
200
+ // Try to parse as date first
201
+ const dateValue = Date.parse(value);
202
+ if (!isNaN(dateValue)) {
203
+ return dateValue;
204
+ }
205
+ // Try to parse as number
206
+ const numValue = parseFloat(value);
207
+ if (!isNaN(numValue)) {
208
+ return numValue;
209
+ }
210
+ }
211
+ return NaN;
212
+ }
213
+ /**
214
+ * Check if a value matches a MongoDB-style filter condition
215
+ *
216
+ * Supports the following operators:
217
+ * - `$eq` - Equal to
218
+ * - `$ne` - Not equal to
219
+ * - `$gt` - Greater than (works with numbers and dates)
220
+ * - `$gte` - Greater than or equal to
221
+ * - `$lt` - Less than
222
+ * - `$lte` - Less than or equal to
223
+ * - `$in` - Value is in array
224
+ * - `$nin` - Value is not in array
225
+ * - `$exists` - Field exists (or doesn't exist if false)
226
+ * - `$regex` - Regular expression match (string values only)
227
+ *
228
+ * @param value - The value to check
229
+ * @param condition - The filter condition (can be a value or operator object)
230
+ * @returns Whether the value matches the condition
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * matchesFilter(75, { $gt: 70 }) // true
235
+ * matchesFilter('active', 'active') // true
236
+ * matchesFilter(new Date('2024-01-15'), { $gt: new Date('2024-01-01') }) // true
237
+ * matchesFilter('enterprise', { $regex: 'enter' }) // true
238
+ * ```
239
+ */
240
+ export function matchesFilter(value, condition) {
241
+ if (condition === null || condition === undefined) {
242
+ return value === condition;
243
+ }
244
+ // Simple equality check
245
+ if (typeof condition !== 'object') {
246
+ return value === condition;
247
+ }
248
+ // MongoDB-style operators
249
+ const operators = condition;
250
+ for (const [op, target] of Object.entries(operators)) {
251
+ switch (op) {
252
+ case '$eq':
253
+ if (value !== target)
254
+ return false;
255
+ break;
256
+ case '$ne':
257
+ if (value === target)
258
+ return false;
259
+ break;
260
+ case '$gt': {
261
+ const numValue = toComparableNumber(value);
262
+ const numTarget = toComparableNumber(target);
263
+ if (isNaN(numValue) || isNaN(numTarget))
264
+ return false;
265
+ if (numValue <= numTarget)
266
+ return false;
267
+ break;
268
+ }
269
+ case '$gte': {
270
+ const numValue = toComparableNumber(value);
271
+ const numTarget = toComparableNumber(target);
272
+ if (isNaN(numValue) || isNaN(numTarget))
273
+ return false;
274
+ if (numValue < numTarget)
275
+ return false;
276
+ break;
277
+ }
278
+ case '$lt': {
279
+ const numValue = toComparableNumber(value);
280
+ const numTarget = toComparableNumber(target);
281
+ if (isNaN(numValue) || isNaN(numTarget))
282
+ return false;
283
+ if (numValue >= numTarget)
284
+ return false;
285
+ break;
286
+ }
287
+ case '$lte': {
288
+ const numValue = toComparableNumber(value);
289
+ const numTarget = toComparableNumber(target);
290
+ if (isNaN(numValue) || isNaN(numTarget))
291
+ return false;
292
+ if (numValue > numTarget)
293
+ return false;
294
+ break;
295
+ }
296
+ case '$in':
297
+ if (!Array.isArray(target))
298
+ return false;
299
+ if (!target.includes(value))
300
+ return false;
301
+ break;
302
+ case '$nin':
303
+ if (!Array.isArray(target))
304
+ return false;
305
+ if (target.includes(value))
306
+ return false;
307
+ break;
308
+ case '$exists':
309
+ if (target === true && value === undefined)
310
+ return false;
311
+ if (target === false && value !== undefined)
312
+ return false;
313
+ break;
314
+ case '$regex': {
315
+ if (typeof value !== 'string' || typeof target !== 'string')
316
+ return false;
317
+ try {
318
+ const regex = new RegExp(target, 'i');
319
+ if (!regex.test(value))
320
+ return false;
321
+ }
322
+ catch {
323
+ return false;
324
+ }
325
+ break;
326
+ }
327
+ default:
328
+ // Unknown operator - treat as nested filter
329
+ if (typeof value === 'object' && value !== null) {
330
+ const nestedValue = value[op];
331
+ if (!matchesFilter(nestedValue, target))
332
+ return false;
333
+ }
334
+ else {
335
+ return false;
336
+ }
337
+ }
338
+ }
339
+ return true;
340
+ }
341
+ /**
342
+ * Apply filters to a list of entities
343
+ *
344
+ * @param entities - The entities to filter
345
+ * @param filters - The filter conditions to apply
346
+ * @returns The filtered entities
347
+ */
348
+ export function applyFilters(entities, filters) {
349
+ if (!filters || Object.keys(filters).length === 0) {
350
+ return entities;
351
+ }
352
+ return entities.filter((entity) => {
353
+ for (const [field, condition] of Object.entries(filters)) {
354
+ const value = entity[field];
355
+ if (!matchesFilter(value, condition)) {
356
+ return false;
357
+ }
358
+ }
359
+ return true;
360
+ });
361
+ }
362
+ //# sourceMappingURL=nl-query-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nl-query-generator.js","sourceRoot":"","sources":["../../src/schema/nl-query-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Natural Language Query Implementation
3
+ *
4
+ * Contains the NL query execution system that allows users to query the database
5
+ * using natural language. This module provides:
6
+ * - buildNLQueryContext() - Build context for AI query generation
7
+ * - executeNLQuery() - Execute an NL query against the database
8
+ * - createNLQueryFn() - Create a tagged template literal query function
9
+ * - setNLQueryGenerator/getNLQueryGenerator - Configure the AI generator
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import type { ParsedSchema } from '../types.js';
14
+ import type { NLQueryResult, NLQueryFn, NLQueryContext, NLQueryGenerator } from './types.js';
15
+ /**
16
+ * Set the AI generator for natural language queries
17
+ *
18
+ * The generator is a function that takes a natural language question and
19
+ * schema context, then returns a structured query plan that can be executed
20
+ * against the database.
21
+ *
22
+ * @param generator - The NL query generator function
23
+ */
24
+ export declare function setNLQueryGenerator(generator: NLQueryGenerator): void;
25
+ /**
26
+ * Get the currently configured NL query generator
27
+ *
28
+ * @returns The current generator or null if not configured
29
+ */
30
+ export declare function getNLQueryGenerator(): NLQueryGenerator | null;
31
+ /**
32
+ * Build context for AI query generation
33
+ *
34
+ * This creates a structured representation of the database schema that can be
35
+ * provided to an AI model to help it generate accurate query plans.
36
+ *
37
+ * @param schema - The parsed database schema
38
+ * @param targetType - Optional specific type being queried
39
+ * @returns NLQueryContext with type information for the AI
40
+ */
41
+ export declare function buildNLQueryContext(schema: ParsedSchema, targetType?: string): NLQueryContext;
42
+ /**
43
+ * Execute a natural language query against the database
44
+ *
45
+ * This function takes a natural language question and converts it to database
46
+ * operations. If an AI generator is configured, it will use that to create a
47
+ * structured query plan. Otherwise, it falls back to keyword search.
48
+ *
49
+ * @param question - The natural language question
50
+ * @param schema - The parsed database schema
51
+ * @param targetType - Optional specific type to query
52
+ * @returns NLQueryResult with interpretation and results
53
+ */
54
+ export declare function executeNLQuery<T>(question: string, schema: ParsedSchema, targetType?: string): Promise<NLQueryResult<T>>;
55
+ /**
56
+ * Create a tagged template literal function for natural language queries
57
+ *
58
+ * This enables the intuitive syntax: db.Post`show recent posts about AI`
59
+ *
60
+ * @param schema - The parsed database schema
61
+ * @param typeName - Optional specific type to constrain queries to
62
+ * @returns A tagged template function that executes NL queries
63
+ */
64
+ export declare function createNLQueryFn<T>(schema: ParsedSchema, typeName?: string): NLQueryFn<T>;
65
+ //# sourceMappingURL=nl-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nl-query.d.ts","sourceRoot":"","sources":["../../src/schema/nl-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,cAAc,EAEd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAWnB;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAErE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAkC7F;AAgCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAkD3B;AAMD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAQxF"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Natural Language Query Implementation
3
+ *
4
+ * Contains the NL query execution system that allows users to query the database
5
+ * using natural language. This module provides:
6
+ * - buildNLQueryContext() - Build context for AI query generation
7
+ * - executeNLQuery() - Execute an NL query against the database
8
+ * - createNLQueryFn() - Create a tagged template literal query function
9
+ * - setNLQueryGenerator/getNLQueryGenerator - Configure the AI generator
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { getTypeMeta } from '../linguistic.js';
14
+ import { resolveProvider } from './provider.js';
15
+ // =============================================================================
16
+ // NL Query Generator State
17
+ // =============================================================================
18
+ let nlQueryGenerator = null;
19
+ /**
20
+ * Set the AI generator for natural language queries
21
+ *
22
+ * The generator is a function that takes a natural language question and
23
+ * schema context, then returns a structured query plan that can be executed
24
+ * against the database.
25
+ *
26
+ * @param generator - The NL query generator function
27
+ */
28
+ export function setNLQueryGenerator(generator) {
29
+ nlQueryGenerator = generator;
30
+ }
31
+ /**
32
+ * Get the currently configured NL query generator
33
+ *
34
+ * @returns The current generator or null if not configured
35
+ */
36
+ export function getNLQueryGenerator() {
37
+ return nlQueryGenerator;
38
+ }
39
+ // =============================================================================
40
+ // NL Query Context Builder
41
+ // =============================================================================
42
+ /**
43
+ * Build context for AI query generation
44
+ *
45
+ * This creates a structured representation of the database schema that can be
46
+ * provided to an AI model to help it generate accurate query plans.
47
+ *
48
+ * @param schema - The parsed database schema
49
+ * @param targetType - Optional specific type being queried
50
+ * @returns NLQueryContext with type information for the AI
51
+ */
52
+ export function buildNLQueryContext(schema, targetType) {
53
+ const types = [];
54
+ for (const [name, entity] of schema.entities) {
55
+ const fields = [];
56
+ const relationships = [];
57
+ for (const [fieldName, field] of entity.fields) {
58
+ if (field.isRelation && field.relatedType) {
59
+ relationships.push({
60
+ name: fieldName,
61
+ to: field.relatedType,
62
+ cardinality: field.isArray ? 'many' : 'one',
63
+ });
64
+ }
65
+ else {
66
+ fields.push(fieldName);
67
+ }
68
+ }
69
+ const meta = getTypeMeta(name);
70
+ types.push({
71
+ name,
72
+ singular: meta.singular,
73
+ plural: meta.plural,
74
+ fields,
75
+ relationships,
76
+ });
77
+ }
78
+ const result = { types };
79
+ if (targetType !== undefined) {
80
+ result.targetType = targetType;
81
+ }
82
+ return result;
83
+ }
84
+ // =============================================================================
85
+ // NL Query Execution
86
+ // =============================================================================
87
+ /** Regex pattern to detect "list all" style queries */
88
+ const LIST_ALL_PATTERN = /^(show|list|get|find|display)\s+(all|every|the)?\s*/i;
89
+ /**
90
+ * Check if a query is requesting to list all items
91
+ */
92
+ function isListAllQuery(question) {
93
+ const normalized = question.toLowerCase().trim();
94
+ return LIST_ALL_PATTERN.test(normalized) || normalized === '' || /\ball\b/i.test(normalized);
95
+ }
96
+ /**
97
+ * Fetch results from provider for a single type
98
+ */
99
+ async function fetchTypeResults(provider, typeName, question, listAll) {
100
+ if (listAll) {
101
+ return (await provider.list(typeName));
102
+ }
103
+ return (await provider.search(typeName, question));
104
+ }
105
+ /**
106
+ * Execute a natural language query against the database
107
+ *
108
+ * This function takes a natural language question and converts it to database
109
+ * operations. If an AI generator is configured, it will use that to create a
110
+ * structured query plan. Otherwise, it falls back to keyword search.
111
+ *
112
+ * @param question - The natural language question
113
+ * @param schema - The parsed database schema
114
+ * @param targetType - Optional specific type to query
115
+ * @returns NLQueryResult with interpretation and results
116
+ */
117
+ export async function executeNLQuery(question, schema, targetType) {
118
+ const { applyFilters } = await import('./nl-query-generator.js');
119
+ // Fallback mode when no AI generator is configured
120
+ if (!nlQueryGenerator) {
121
+ const provider = await resolveProvider();
122
+ const listAll = isListAllQuery(question);
123
+ const results = [];
124
+ const typesToQuery = targetType ? [targetType] : [...schema.entities.keys()];
125
+ for (const typeName of typesToQuery) {
126
+ const typeResults = await fetchTypeResults(provider, typeName, question, listAll);
127
+ results.push(...typeResults);
128
+ }
129
+ return {
130
+ interpretation: `Search for "${question}"`,
131
+ confidence: 0.5,
132
+ results,
133
+ explanation: 'Fallback to keyword search (no AI generator configured)',
134
+ };
135
+ }
136
+ // AI-powered query execution
137
+ const context = buildNLQueryContext(schema, targetType);
138
+ const plan = await nlQueryGenerator(question, context);
139
+ const provider = await resolveProvider();
140
+ const results = [];
141
+ const hasFilters = plan.filters && Object.keys(plan.filters).length > 0;
142
+ for (const typeName of plan.types) {
143
+ let typeResults = plan.search
144
+ ? await provider.search(typeName, plan.search)
145
+ : await provider.list(typeName);
146
+ if (hasFilters) {
147
+ typeResults = applyFilters(typeResults, plan.filters);
148
+ }
149
+ results.push(...typeResults);
150
+ }
151
+ return {
152
+ interpretation: plan.interpretation,
153
+ confidence: plan.confidence,
154
+ results,
155
+ query: JSON.stringify({ types: plan.types, filters: plan.filters, search: plan.search }),
156
+ };
157
+ }
158
+ // =============================================================================
159
+ // NL Query Function Factory
160
+ // =============================================================================
161
+ /**
162
+ * Create a tagged template literal function for natural language queries
163
+ *
164
+ * This enables the intuitive syntax: db.Post`show recent posts about AI`
165
+ *
166
+ * @param schema - The parsed database schema
167
+ * @param typeName - Optional specific type to constrain queries to
168
+ * @returns A tagged template function that executes NL queries
169
+ */
170
+ export function createNLQueryFn(schema, typeName) {
171
+ return async (strings, ...values) => {
172
+ const question = strings.reduce((acc, str, i) => {
173
+ return acc + str + (values[i] !== undefined ? String(values[i]) : '');
174
+ }, '');
175
+ return executeNLQuery(question, schema, typeName);
176
+ };
177
+ }
178
+ //# sourceMappingURL=nl-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nl-query.js","sourceRoot":"","sources":["../../src/schema/nl-query.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/schema/parse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EAEf,cAAc,EACd,WAAW,EAEX,YAAY,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAMrD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;gBAEJ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAO3E;AAkCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA+DrD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAsCxE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAoG9F;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAsC1G;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAoHpG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CASlF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAiF5E;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,WAAW,CAoGjF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAuGhE"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/schema/parse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EAEf,cAAc,EACd,WAAW,EAEX,YAAY,EAEb,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AASrD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;gBAEJ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAO3E;AAkCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA+DrD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAsCxE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA4I9F;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,OAAO,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,IAAI,CAsCN;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,IAAI,CAoHN;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA6BlF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAgB5E;AAkCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,WAAW,CAqHjF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAiJhE"}