ai-database 2.1.1 → 2.1.3
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.
- package/CHANGELOG.md +13 -1
- package/LICENSE +21 -0
- package/README.md +667 -1
- package/dist/ai-promise-db.d.ts +3 -0
- package/dist/ai-promise-db.d.ts.map +1 -1
- package/dist/ai-promise-db.js +98 -105
- package/dist/ai-promise-db.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/memory-provider.d.ts +1 -0
- package/dist/memory-provider.d.ts.map +1 -1
- package/dist/memory-provider.js.map +1 -1
- package/dist/schema/cascade.d.ts +8 -0
- package/dist/schema/cascade.d.ts.map +1 -1
- package/dist/schema/cascade.js +25 -6
- package/dist/schema/cascade.js.map +1 -1
- package/dist/schema/dependency-graph.d.ts +133 -0
- package/dist/schema/dependency-graph.d.ts.map +1 -0
- package/dist/schema/dependency-graph.js +355 -0
- package/dist/schema/dependency-graph.js.map +1 -0
- package/dist/schema/generation-context.d.ts +202 -0
- package/dist/schema/generation-context.d.ts.map +1 -0
- package/dist/schema/generation-context.js +393 -0
- package/dist/schema/generation-context.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +11 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/parse.d.ts.map +1 -1
- package/dist/schema/parse.js +9 -1
- package/dist/schema/parse.js.map +1 -1
- package/dist/schema/provider.d.ts +1 -0
- package/dist/schema/provider.d.ts.map +1 -1
- package/dist/schema/resolve.d.ts.map +1 -1
- package/dist/schema/resolve.js +103 -28
- package/dist/schema/resolve.js.map +1 -1
- package/dist/schema/semantic.d.ts +1 -0
- package/dist/schema/semantic.d.ts.map +1 -1
- package/dist/schema/semantic.js +144 -56
- package/dist/schema/semantic.js.map +1 -1
- package/dist/schema/union-fallback.d.ts +219 -0
- package/dist/schema/union-fallback.d.ts.map +1 -0
- package/dist/schema/union-fallback.js +325 -0
- package/dist/schema/union-fallback.js.map +1 -0
- package/dist/schema/verb-derivation.d.ts +167 -0
- package/dist/schema/verb-derivation.d.ts.map +1 -0
- package/dist/schema/verb-derivation.js +281 -0
- package/dist/schema/verb-derivation.js.map +1 -0
- package/dist/schema.d.ts +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +4 -0
- package/dist/schema.js.map +1 -1
- package/dist/type-guards.d.ts +167 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +247 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/validation.d.ts +168 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +667 -0
- package/dist/validation.js.map +1 -0
- package/package.json +13 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-fallback.d.ts","sourceRoot":"","sources":["../../src/schema/union-fallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Union Type Fallback Search
|
|
3
|
+
*
|
|
4
|
+
* Implements fallback search behavior for union types in backward fuzzy (<~) operators.
|
|
5
|
+
* When searching `<~Type1|Type2|Type3`, searches types in order and falls back to
|
|
6
|
+
* the next type if no match is found or threshold not met.
|
|
7
|
+
*
|
|
8
|
+
* Supports two search modes:
|
|
9
|
+
* - `ordered`: Search types sequentially, stop on first match (default)
|
|
10
|
+
* - `parallel`: Search all types concurrently, return best match
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Parse union type string into array of individual types
|
|
16
|
+
*
|
|
17
|
+
* Handles various formats:
|
|
18
|
+
* - `Type1|Type2|Type3` - Standard pipe-separated union
|
|
19
|
+
* - `Type1 | Type2 | Type3` - With spaces around pipes
|
|
20
|
+
* - `Type1|Type2(0.8)|Type3` - With threshold syntax (stripped from result)
|
|
21
|
+
*
|
|
22
|
+
* @param typeSpec - The union type specification string
|
|
23
|
+
* @returns Array of individual type names in declaration order
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* parseUnionTypes('Document|Video|Expert')
|
|
28
|
+
* // => ['Document', 'Video', 'Expert']
|
|
29
|
+
*
|
|
30
|
+
* parseUnionTypes('Type1 | Type2(0.8) | Type3')
|
|
31
|
+
* // => ['Type1', 'Type2', 'Type3']
|
|
32
|
+
*
|
|
33
|
+
* parseUnionTypes('SingleType')
|
|
34
|
+
* // => ['SingleType']
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function parseUnionTypes(typeSpec) {
|
|
38
|
+
if (!typeSpec || typeSpec.trim() === '') {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
// Split by pipe and process each type
|
|
42
|
+
const types = typeSpec.split('|').map((t) => {
|
|
43
|
+
let type = t.trim();
|
|
44
|
+
// Strip threshold syntax: Type(0.8) -> Type
|
|
45
|
+
const thresholdMatch = type.match(/^([A-Za-z][A-Za-z0-9_]*)\s*\([^)]*\)$/);
|
|
46
|
+
if (thresholdMatch) {
|
|
47
|
+
type = thresholdMatch[1];
|
|
48
|
+
}
|
|
49
|
+
return type;
|
|
50
|
+
});
|
|
51
|
+
// Filter out empty strings (from cases like "Type1||Type2")
|
|
52
|
+
return types.filter((t) => t.length > 0);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parse per-type thresholds from union type specification
|
|
56
|
+
*
|
|
57
|
+
* Extracts threshold values from syntax like `Type1|Type2(0.8)|Type3(0.6)`
|
|
58
|
+
*
|
|
59
|
+
* @param typeSpec - The union type specification string
|
|
60
|
+
* @returns Record mapping type names to their thresholds
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* parseUnionThresholds('Type1|Type2(0.8)|Type3(0.6)')
|
|
65
|
+
* // => { Type2: 0.8, Type3: 0.6 }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function parseUnionThresholds(typeSpec) {
|
|
69
|
+
const thresholds = {};
|
|
70
|
+
if (!typeSpec)
|
|
71
|
+
return thresholds;
|
|
72
|
+
const parts = typeSpec.split('|');
|
|
73
|
+
for (const part of parts) {
|
|
74
|
+
const match = part.trim().match(/^([A-Za-z][A-Za-z0-9_]*)\s*\(([0-9.]+)\)$/);
|
|
75
|
+
if (match) {
|
|
76
|
+
const [, typeName, thresholdStr] = match;
|
|
77
|
+
const threshold = parseFloat(thresholdStr);
|
|
78
|
+
if (!isNaN(threshold) && threshold >= 0 && threshold <= 1) {
|
|
79
|
+
thresholds[typeName] = threshold;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return thresholds;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the effective threshold for a type
|
|
87
|
+
*
|
|
88
|
+
* @param type - The type name
|
|
89
|
+
* @param options - Search options containing global and per-type thresholds
|
|
90
|
+
* @returns The threshold to use for this type
|
|
91
|
+
*/
|
|
92
|
+
function getThresholdForType(type, options) {
|
|
93
|
+
// Per-type threshold takes precedence
|
|
94
|
+
if (options.thresholds && type in options.thresholds) {
|
|
95
|
+
return options.thresholds[type];
|
|
96
|
+
}
|
|
97
|
+
// Fall back to global threshold, default to 0 (accept all)
|
|
98
|
+
return options.threshold ?? 0;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Filter matches by threshold
|
|
102
|
+
*/
|
|
103
|
+
function filterByThreshold(matches, threshold, includeBelowThreshold) {
|
|
104
|
+
const above = [];
|
|
105
|
+
const below = [];
|
|
106
|
+
for (const match of matches) {
|
|
107
|
+
if (match.$score >= threshold) {
|
|
108
|
+
above.push(match);
|
|
109
|
+
}
|
|
110
|
+
else if (includeBelowThreshold) {
|
|
111
|
+
below.push(match);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { above, below };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Search union types with fallback behavior
|
|
118
|
+
*
|
|
119
|
+
* Searches multiple types either sequentially (ordered) or concurrently (parallel),
|
|
120
|
+
* with support for per-type thresholds and graceful error handling.
|
|
121
|
+
*
|
|
122
|
+
* @param types - Array of type names to search (in priority order)
|
|
123
|
+
* @param query - The search query
|
|
124
|
+
* @param options - Search options including mode, thresholds, and searcher
|
|
125
|
+
* @returns Search result with matches and metadata
|
|
126
|
+
*
|
|
127
|
+
* @example Ordered mode (stops on first match)
|
|
128
|
+
* ```ts
|
|
129
|
+
* const result = await searchUnionTypes(
|
|
130
|
+
* ['Document', 'Video', 'Expert'],
|
|
131
|
+
* 'machine learning tutorial',
|
|
132
|
+
* {
|
|
133
|
+
* mode: 'ordered',
|
|
134
|
+
* threshold: 0.75,
|
|
135
|
+
* searcher: async (type, query) => {
|
|
136
|
+
* return provider.semanticSearch(type, query)
|
|
137
|
+
* }
|
|
138
|
+
* }
|
|
139
|
+
* )
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @example Parallel mode (searches all, returns best)
|
|
143
|
+
* ```ts
|
|
144
|
+
* const result = await searchUnionTypes(
|
|
145
|
+
* ['Document', 'Video', 'Expert'],
|
|
146
|
+
* 'machine learning tutorial',
|
|
147
|
+
* {
|
|
148
|
+
* mode: 'parallel',
|
|
149
|
+
* returnAll: true,
|
|
150
|
+
* searcher: async (type, query) => {
|
|
151
|
+
* return provider.semanticSearch(type, query)
|
|
152
|
+
* }
|
|
153
|
+
* }
|
|
154
|
+
* )
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export async function searchUnionTypes(types, query, options) {
|
|
158
|
+
// Initialize result
|
|
159
|
+
const result = {
|
|
160
|
+
matches: [],
|
|
161
|
+
searchedTypes: [],
|
|
162
|
+
searchOrder: [],
|
|
163
|
+
fallbackTriggered: false,
|
|
164
|
+
allTypesExhausted: false,
|
|
165
|
+
belowThresholdMatches: options.includeBelowThreshold ? [] : undefined,
|
|
166
|
+
errors: [],
|
|
167
|
+
};
|
|
168
|
+
// Handle empty types array
|
|
169
|
+
if (!types || types.length === 0) {
|
|
170
|
+
result.allTypesExhausted = true;
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
if (options.mode === 'parallel') {
|
|
174
|
+
return searchParallel(types, query, options, result);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
return searchOrdered(types, query, options, result);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Search types in order, stopping on first match
|
|
182
|
+
*/
|
|
183
|
+
async function searchOrdered(types, query, options, result) {
|
|
184
|
+
const { searcher, includeBelowThreshold, onError = 'throw' } = options;
|
|
185
|
+
for (let i = 0; i < types.length; i++) {
|
|
186
|
+
const type = types[i];
|
|
187
|
+
const threshold = getThresholdForType(type, options);
|
|
188
|
+
result.searchedTypes.push(type);
|
|
189
|
+
result.searchOrder.push(type);
|
|
190
|
+
if (i > 0) {
|
|
191
|
+
result.fallbackTriggered = true;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
const matches = await searcher(type, query, {
|
|
195
|
+
threshold,
|
|
196
|
+
limit: options.limit,
|
|
197
|
+
});
|
|
198
|
+
// Filter by threshold
|
|
199
|
+
const { above, below } = filterByThreshold(matches, threshold, includeBelowThreshold);
|
|
200
|
+
// Collect below-threshold matches for debugging
|
|
201
|
+
if (includeBelowThreshold && below.length > 0) {
|
|
202
|
+
result.belowThresholdMatches.push(...below);
|
|
203
|
+
}
|
|
204
|
+
// If we found matches above threshold, stop searching
|
|
205
|
+
if (above.length > 0) {
|
|
206
|
+
result.matches = above;
|
|
207
|
+
result.matchedType = type;
|
|
208
|
+
result.confidence = Math.max(...above.map((m) => m.$score));
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
if (onError === 'throw') {
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
// Continue mode: record error and try next type
|
|
217
|
+
result.errors.push({
|
|
218
|
+
type,
|
|
219
|
+
message: error instanceof Error ? error.message : String(error),
|
|
220
|
+
error: error instanceof Error ? error : undefined,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// No matches found in any type
|
|
225
|
+
result.allTypesExhausted = true;
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Search all types in parallel, return best match(es)
|
|
230
|
+
*/
|
|
231
|
+
async function searchParallel(types, query, options, result) {
|
|
232
|
+
const { searcher, returnAll = false, includeBelowThreshold, onError = 'continue' } = options;
|
|
233
|
+
// Mark all types as searched
|
|
234
|
+
result.searchedTypes = [...types];
|
|
235
|
+
result.searchOrder = [...types];
|
|
236
|
+
// Search all types in parallel
|
|
237
|
+
const searchPromises = types.map(async (type) => {
|
|
238
|
+
const threshold = getThresholdForType(type, options);
|
|
239
|
+
try {
|
|
240
|
+
const matches = await searcher(type, query, {
|
|
241
|
+
threshold,
|
|
242
|
+
limit: options.limit,
|
|
243
|
+
});
|
|
244
|
+
return { type, matches, error: null };
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return {
|
|
248
|
+
type,
|
|
249
|
+
matches: [],
|
|
250
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
const results = await Promise.all(searchPromises);
|
|
255
|
+
// Collect all matches and errors
|
|
256
|
+
const allMatches = [];
|
|
257
|
+
const allBelowThreshold = [];
|
|
258
|
+
for (const { type, matches, error } of results) {
|
|
259
|
+
if (error) {
|
|
260
|
+
if (onError === 'throw') {
|
|
261
|
+
throw error;
|
|
262
|
+
}
|
|
263
|
+
result.errors.push({
|
|
264
|
+
type,
|
|
265
|
+
message: error.message,
|
|
266
|
+
error,
|
|
267
|
+
});
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const threshold = getThresholdForType(type, options);
|
|
271
|
+
const { above, below } = filterByThreshold(matches, threshold, includeBelowThreshold);
|
|
272
|
+
allMatches.push(...above);
|
|
273
|
+
if (includeBelowThreshold) {
|
|
274
|
+
allBelowThreshold.push(...below);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Sort by score descending
|
|
278
|
+
allMatches.sort((a, b) => b.$score - a.$score);
|
|
279
|
+
result.belowThresholdMatches = allBelowThreshold;
|
|
280
|
+
if (allMatches.length === 0) {
|
|
281
|
+
result.allTypesExhausted = true;
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
// Return all matches or just the best one
|
|
285
|
+
if (returnAll) {
|
|
286
|
+
result.matches = allMatches;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
result.matches = [allMatches[0]];
|
|
290
|
+
}
|
|
291
|
+
result.matchedType = result.matches[0].$type;
|
|
292
|
+
result.confidence = result.matches[0].$score;
|
|
293
|
+
// Fallback triggered if the best match isn't from the first type
|
|
294
|
+
result.fallbackTriggered = result.matchedType !== types[0];
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Create a searcher function that wraps a semantic search provider
|
|
299
|
+
*
|
|
300
|
+
* @param provider - The database provider with semanticSearch method
|
|
301
|
+
* @returns A searcher function compatible with searchUnionTypes
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* const searcher = createProviderSearcher(provider)
|
|
306
|
+
* const result = await searchUnionTypes(
|
|
307
|
+
* ['Document', 'Video'],
|
|
308
|
+
* 'tutorial',
|
|
309
|
+
* { mode: 'ordered', searcher }
|
|
310
|
+
* )
|
|
311
|
+
* ```
|
|
312
|
+
*/
|
|
313
|
+
export function createProviderSearcher(provider) {
|
|
314
|
+
return async (type, query, options) => {
|
|
315
|
+
const results = await provider.semanticSearch(type, query, {
|
|
316
|
+
minScore: options?.threshold,
|
|
317
|
+
limit: options?.limit ?? 10,
|
|
318
|
+
});
|
|
319
|
+
return results.map((r) => ({
|
|
320
|
+
...r,
|
|
321
|
+
$type: type,
|
|
322
|
+
}));
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=union-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-fallback.js","sourceRoot":"","sources":["../../src/schema/union-fallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verb Derivation for Backward Cascade Resolution
|
|
3
|
+
*
|
|
4
|
+
* Derives reverse verbs for backward relationships:
|
|
5
|
+
* - manages -> managedBy
|
|
6
|
+
* - owns -> ownedBy
|
|
7
|
+
* - creates -> createdBy
|
|
8
|
+
* - parent_of <-> child_of (bidirectional)
|
|
9
|
+
*
|
|
10
|
+
* Used by the cascade resolver to determine the reverse relationship
|
|
11
|
+
* when traversing relationships in the opposite direction.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { deriveReverseVerb, fieldNameToVerb, isPassiveVerb } from './verb-derivation.js'
|
|
16
|
+
*
|
|
17
|
+
* deriveReverseVerb('manages') // 'managedBy'
|
|
18
|
+
* deriveReverseVerb('parent_of') // 'child_of'
|
|
19
|
+
* deriveReverseVerb('managedBy') // 'manages'
|
|
20
|
+
*
|
|
21
|
+
* fieldNameToVerb('manager') // 'manages'
|
|
22
|
+
* fieldNameToVerb('owner') // 'owns'
|
|
23
|
+
*
|
|
24
|
+
* isPassiveVerb('managedBy') // true
|
|
25
|
+
* isPassiveVerb('manages') // false
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @packageDocumentation
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Forward verbs to their reverse forms.
|
|
32
|
+
* Common active verbs mapped to their passive counterparts.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* FORWARD_TO_REVERSE.manages // 'managedBy'
|
|
37
|
+
* FORWARD_TO_REVERSE.owns // 'ownedBy'
|
|
38
|
+
* FORWARD_TO_REVERSE.creates // 'createdBy'
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare const FORWARD_TO_REVERSE: Readonly<Record<string, string>>;
|
|
42
|
+
/**
|
|
43
|
+
* Known verb pairs for bidirectional relationships.
|
|
44
|
+
* These are symmetric - each maps to the other.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* BIDIRECTIONAL_PAIRS.parent_of // 'child_of'
|
|
49
|
+
* BIDIRECTIONAL_PAIRS.child_of // 'parent_of'
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare const BIDIRECTIONAL_PAIRS: Readonly<Record<string, string>>;
|
|
53
|
+
/**
|
|
54
|
+
* Derives the reverse verb for a given forward verb.
|
|
55
|
+
*
|
|
56
|
+
* Resolution order:
|
|
57
|
+
* 1. Check bidirectional pairs first (parent_of <-> child_of)
|
|
58
|
+
* 2. Check known forward verbs (manages -> managedBy)
|
|
59
|
+
* 3. Check if already a reversed verb (managedBy -> manages)
|
|
60
|
+
* 4. Apply standard transformation for verbs ending in 's'
|
|
61
|
+
* 5. Add 'By' suffix for unknown verbs
|
|
62
|
+
*
|
|
63
|
+
* @param verb - The verb to derive the reverse of
|
|
64
|
+
* @returns The reverse verb
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* deriveReverseVerb('manages') // 'managedBy'
|
|
69
|
+
* deriveReverseVerb('owns') // 'ownedBy'
|
|
70
|
+
* deriveReverseVerb('parent_of') // 'child_of'
|
|
71
|
+
* deriveReverseVerb('managedBy') // 'manages' (already reversed)
|
|
72
|
+
* deriveReverseVerb('customAction') // 'customActionBy' (unknown verb)
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function deriveReverseVerb(verb: string): string;
|
|
76
|
+
/**
|
|
77
|
+
* Derives a verb from a field name.
|
|
78
|
+
*
|
|
79
|
+
* Common field names like "manager", "owner", "creator" are mapped
|
|
80
|
+
* to their corresponding verbs. Unknown field names are returned as-is.
|
|
81
|
+
*
|
|
82
|
+
* @param fieldName - The field name to derive a verb from
|
|
83
|
+
* @returns The derived verb or the field name if no mapping exists
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* fieldNameToVerb('manager') // 'manages'
|
|
88
|
+
* fieldNameToVerb('owner') // 'owns'
|
|
89
|
+
* fieldNameToVerb('creator') // 'creates'
|
|
90
|
+
* fieldNameToVerb('customField') // 'customField' (no mapping)
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function fieldNameToVerb(fieldName: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* Checks if a verb is in passive form.
|
|
96
|
+
*
|
|
97
|
+
* A verb is considered passive if it ends with:
|
|
98
|
+
* - 'By' (managedBy, ownedBy, createdBy)
|
|
99
|
+
* - 'To' (relatedTo, linkedTo, connectedTo)
|
|
100
|
+
* - 'Of' (parent_of, child_of, partOf)
|
|
101
|
+
*
|
|
102
|
+
* @param verb - The verb to check
|
|
103
|
+
* @returns True if the verb is passive, false otherwise
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* isPassiveVerb('managedBy') // true
|
|
108
|
+
* isPassiveVerb('relatedTo') // true
|
|
109
|
+
* isPassiveVerb('parent_of') // true
|
|
110
|
+
* isPassiveVerb('manages') // false
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare function isPassiveVerb(verb: string): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Register a custom verb pair for forward/reverse derivation.
|
|
116
|
+
*
|
|
117
|
+
* This allows extending the verb derivation system with domain-specific
|
|
118
|
+
* verb mappings at runtime.
|
|
119
|
+
*
|
|
120
|
+
* @param forward - The forward (active) verb
|
|
121
|
+
* @param reverse - The reverse (passive) verb
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```ts
|
|
125
|
+
* registerVerbPair('sponsors', 'sponsoredBy')
|
|
126
|
+
* deriveReverseVerb('sponsors') // 'sponsoredBy'
|
|
127
|
+
* deriveReverseVerb('sponsoredBy') // 'sponsors'
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
export declare function registerVerbPair(forward: string, reverse: string): void;
|
|
131
|
+
/**
|
|
132
|
+
* Register a bidirectional verb pair.
|
|
133
|
+
*
|
|
134
|
+
* Bidirectional pairs are symmetric relationships where each verb
|
|
135
|
+
* maps to the other. For self-referential relationships, both
|
|
136
|
+
* arguments can be the same verb.
|
|
137
|
+
*
|
|
138
|
+
* @param verbA - The first verb
|
|
139
|
+
* @param verbB - The second verb (can be same as verbA for symmetric)
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* // Asymmetric bidirectional
|
|
144
|
+
* registerBidirectionalPair('mentor_of', 'mentee_of')
|
|
145
|
+
* deriveReverseVerb('mentor_of') // 'mentee_of'
|
|
146
|
+
* deriveReverseVerb('mentee_of') // 'mentor_of'
|
|
147
|
+
*
|
|
148
|
+
* // Symmetric (self-referential)
|
|
149
|
+
* registerBidirectionalPair('relatedTo', 'relatedTo')
|
|
150
|
+
* deriveReverseVerb('relatedTo') // 'relatedTo'
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export declare function registerBidirectionalPair(verbA: string, verbB: string): void;
|
|
154
|
+
/**
|
|
155
|
+
* Register a field name to verb mapping.
|
|
156
|
+
*
|
|
157
|
+
* @param fieldName - The field name
|
|
158
|
+
* @param verb - The verb it derives to
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* registerFieldVerb('coordinator', 'coordinates')
|
|
163
|
+
* fieldNameToVerb('coordinator') // 'coordinates'
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export declare function registerFieldVerb(fieldName: string, verb: string): void;
|
|
167
|
+
//# sourceMappingURL=verb-derivation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verb-derivation.d.ts","sourceRoot":"","sources":["../../src/schema/verb-derivation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAiCH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAqB,CAAA;AAcrF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAuB,CAAA;AAwBxF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwCtD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYnD;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGvE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAG5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvE"}
|