ai-database 2.0.2 → 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.
Files changed (114) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/LICENSE +21 -0
  3. package/README.md +667 -1
  4. package/dist/actions.d.ts +247 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +260 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/ai-promise-db.d.ts +37 -2
  9. package/dist/ai-promise-db.d.ts.map +1 -1
  10. package/dist/ai-promise-db.js +530 -92
  11. package/dist/ai-promise-db.js.map +1 -1
  12. package/dist/constants.d.ts +16 -0
  13. package/dist/constants.d.ts.map +1 -0
  14. package/dist/constants.js +16 -0
  15. package/dist/constants.js.map +1 -0
  16. package/dist/events.d.ts +153 -0
  17. package/dist/events.d.ts.map +1 -0
  18. package/dist/events.js +154 -0
  19. package/dist/events.js.map +1 -0
  20. package/dist/index.d.ts +11 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +20 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/memory-provider.d.ts +145 -2
  25. package/dist/memory-provider.d.ts.map +1 -1
  26. package/dist/memory-provider.js +569 -13
  27. package/dist/memory-provider.js.map +1 -1
  28. package/dist/schema/cascade.d.ts +104 -0
  29. package/dist/schema/cascade.d.ts.map +1 -0
  30. package/dist/schema/cascade.js +547 -0
  31. package/dist/schema/cascade.js.map +1 -0
  32. package/dist/schema/dependency-graph.d.ts +133 -0
  33. package/dist/schema/dependency-graph.d.ts.map +1 -0
  34. package/dist/schema/dependency-graph.js +355 -0
  35. package/dist/schema/dependency-graph.js.map +1 -0
  36. package/dist/schema/generation-context.d.ts +202 -0
  37. package/dist/schema/generation-context.d.ts.map +1 -0
  38. package/dist/schema/generation-context.js +393 -0
  39. package/dist/schema/generation-context.js.map +1 -0
  40. package/dist/schema/index.d.ts +201 -0
  41. package/dist/schema/index.d.ts.map +1 -0
  42. package/dist/schema/index.js +1221 -0
  43. package/dist/schema/index.js.map +1 -0
  44. package/dist/schema/parse.d.ts +225 -0
  45. package/dist/schema/parse.d.ts.map +1 -0
  46. package/dist/schema/parse.js +740 -0
  47. package/dist/schema/parse.js.map +1 -0
  48. package/dist/schema/provider.d.ts +177 -0
  49. package/dist/schema/provider.d.ts.map +1 -0
  50. package/dist/schema/provider.js +258 -0
  51. package/dist/schema/provider.js.map +1 -0
  52. package/dist/schema/resolve.d.ts +87 -0
  53. package/dist/schema/resolve.d.ts.map +1 -0
  54. package/dist/schema/resolve.js +549 -0
  55. package/dist/schema/resolve.js.map +1 -0
  56. package/dist/schema/semantic.d.ts +54 -0
  57. package/dist/schema/semantic.d.ts.map +1 -0
  58. package/dist/schema/semantic.js +335 -0
  59. package/dist/schema/semantic.js.map +1 -0
  60. package/dist/schema/types.d.ts +528 -0
  61. package/dist/schema/types.d.ts.map +1 -0
  62. package/dist/schema/types.js +9 -0
  63. package/dist/schema/types.js.map +1 -0
  64. package/dist/schema/union-fallback.d.ts +219 -0
  65. package/dist/schema/union-fallback.d.ts.map +1 -0
  66. package/dist/schema/union-fallback.js +325 -0
  67. package/dist/schema/union-fallback.js.map +1 -0
  68. package/dist/schema/verb-derivation.d.ts +167 -0
  69. package/dist/schema/verb-derivation.d.ts.map +1 -0
  70. package/dist/schema/verb-derivation.js +281 -0
  71. package/dist/schema/verb-derivation.js.map +1 -0
  72. package/dist/schema.d.ts +25 -867
  73. package/dist/schema.d.ts.map +1 -1
  74. package/dist/schema.js +45 -1124
  75. package/dist/schema.js.map +1 -1
  76. package/dist/semantic.d.ts +175 -0
  77. package/dist/semantic.d.ts.map +1 -0
  78. package/dist/semantic.js +338 -0
  79. package/dist/semantic.js.map +1 -0
  80. package/dist/type-guards.d.ts +167 -0
  81. package/dist/type-guards.d.ts.map +1 -0
  82. package/dist/type-guards.js +247 -0
  83. package/dist/type-guards.js.map +1 -0
  84. package/dist/types.d.ts +14 -0
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/types.js.map +1 -1
  87. package/dist/validation.d.ts +168 -0
  88. package/dist/validation.d.ts.map +1 -0
  89. package/dist/validation.js +667 -0
  90. package/dist/validation.js.map +1 -0
  91. package/package.json +21 -12
  92. package/.turbo/turbo-build.log +0 -5
  93. package/TESTING.md +0 -410
  94. package/TEST_SUMMARY.md +0 -250
  95. package/TODO.md +0 -128
  96. package/src/ai-promise-db.ts +0 -1243
  97. package/src/authorization.ts +0 -1102
  98. package/src/durable-clickhouse.ts +0 -596
  99. package/src/durable-promise.ts +0 -582
  100. package/src/execution-queue.ts +0 -608
  101. package/src/index.test.ts +0 -868
  102. package/src/index.ts +0 -337
  103. package/src/linguistic.ts +0 -404
  104. package/src/memory-provider.test.ts +0 -1036
  105. package/src/memory-provider.ts +0 -1119
  106. package/src/schema.test.ts +0 -1254
  107. package/src/schema.ts +0 -2296
  108. package/src/tests.ts +0 -725
  109. package/src/types.ts +0 -1177
  110. package/test/README.md +0 -153
  111. package/test/edge-cases.test.ts +0 -646
  112. package/test/provider-resolution.test.ts +0 -402
  113. package/tsconfig.json +0 -9
  114. package/vitest.config.ts +0 -19
@@ -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"}
@@ -0,0 +1,281 @@
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 to Reverse Verb Mapping
32
+ // =============================================================================
33
+ /**
34
+ * Mutable copy for runtime registration of custom verb pairs.
35
+ * Initialized from INITIAL_FORWARD_TO_REVERSE.
36
+ */
37
+ const _forwardToReverse = {
38
+ manages: 'managedBy',
39
+ owns: 'ownedBy',
40
+ creates: 'createdBy',
41
+ reviews: 'reviewedBy',
42
+ employs: 'employedBy',
43
+ contains: 'containedBy',
44
+ assigns: 'assignedBy',
45
+ };
46
+ /**
47
+ * Mutable copy for runtime registration of reverse to forward mappings.
48
+ */
49
+ const _reverseToForward = {
50
+ managedBy: 'manages',
51
+ ownedBy: 'owns',
52
+ createdBy: 'creates',
53
+ reviewedBy: 'reviews',
54
+ employedBy: 'employs',
55
+ containedBy: 'contains',
56
+ assignedBy: 'assigns',
57
+ };
58
+ /**
59
+ * Forward verbs to their reverse forms.
60
+ * Common active verbs mapped to their passive counterparts.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * FORWARD_TO_REVERSE.manages // 'managedBy'
65
+ * FORWARD_TO_REVERSE.owns // 'ownedBy'
66
+ * FORWARD_TO_REVERSE.creates // 'createdBy'
67
+ * ```
68
+ */
69
+ export const FORWARD_TO_REVERSE = _forwardToReverse;
70
+ // =============================================================================
71
+ // Bidirectional Pairs
72
+ // =============================================================================
73
+ /**
74
+ * Mutable copy for runtime registration of bidirectional pairs.
75
+ */
76
+ const _bidirectionalPairs = {
77
+ parent_of: 'child_of',
78
+ child_of: 'parent_of',
79
+ };
80
+ /**
81
+ * Known verb pairs for bidirectional relationships.
82
+ * These are symmetric - each maps to the other.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * BIDIRECTIONAL_PAIRS.parent_of // 'child_of'
87
+ * BIDIRECTIONAL_PAIRS.child_of // 'parent_of'
88
+ * ```
89
+ */
90
+ export const BIDIRECTIONAL_PAIRS = _bidirectionalPairs;
91
+ // =============================================================================
92
+ // Field Name to Verb Mapping
93
+ // =============================================================================
94
+ /**
95
+ * Mutable copy for runtime registration of field to verb mappings.
96
+ */
97
+ const _fieldToVerb = {
98
+ manager: 'manages',
99
+ owner: 'owns',
100
+ creator: 'creates',
101
+ reviewer: 'reviews',
102
+ employer: 'employs',
103
+ parent: 'parent_of',
104
+ child: 'child_of',
105
+ assignee: 'assigns',
106
+ };
107
+ // =============================================================================
108
+ // Core Functions
109
+ // =============================================================================
110
+ /**
111
+ * Derives the reverse verb for a given forward verb.
112
+ *
113
+ * Resolution order:
114
+ * 1. Check bidirectional pairs first (parent_of <-> child_of)
115
+ * 2. Check known forward verbs (manages -> managedBy)
116
+ * 3. Check if already a reversed verb (managedBy -> manages)
117
+ * 4. Apply standard transformation for verbs ending in 's'
118
+ * 5. Add 'By' suffix for unknown verbs
119
+ *
120
+ * @param verb - The verb to derive the reverse of
121
+ * @returns The reverse verb
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * deriveReverseVerb('manages') // 'managedBy'
126
+ * deriveReverseVerb('owns') // 'ownedBy'
127
+ * deriveReverseVerb('parent_of') // 'child_of'
128
+ * deriveReverseVerb('managedBy') // 'manages' (already reversed)
129
+ * deriveReverseVerb('customAction') // 'customActionBy' (unknown verb)
130
+ * ```
131
+ */
132
+ export function deriveReverseVerb(verb) {
133
+ // Check bidirectional pairs first
134
+ if (verb in _bidirectionalPairs) {
135
+ return _bidirectionalPairs[verb];
136
+ }
137
+ // Check known forward verbs
138
+ if (verb in _forwardToReverse) {
139
+ return _forwardToReverse[verb];
140
+ }
141
+ // Check if this is already a reversed verb (ends with 'By')
142
+ if (verb in _reverseToForward) {
143
+ return _reverseToForward[verb];
144
+ }
145
+ // Check if verb ends with 'By' - try to find its forward form
146
+ if (verb.endsWith('By')) {
147
+ // Check if there's a known forward form
148
+ const forwardVerb = _reverseToForward[verb];
149
+ if (forwardVerb) {
150
+ return forwardVerb;
151
+ }
152
+ // Otherwise just return the base (customActionBy -> customAction)
153
+ return verb.slice(0, -2);
154
+ }
155
+ // Apply standard verb transformation for third person singular verbs
156
+ // (verbs ending in 's' like manages, owns, creates, reviews, employs, contains)
157
+ if (verb.endsWith('s') && verb.length > 2) {
158
+ // Remove trailing 's' to get base form, then add 'edBy'
159
+ // manages -> manage -> managedBy
160
+ // owns -> own -> ownedBy
161
+ // creates -> create -> createdBy
162
+ const base = verb.slice(0, -1);
163
+ return base + 'dBy';
164
+ }
165
+ // For other verbs, just add 'By' suffix
166
+ return verb + 'By';
167
+ }
168
+ /**
169
+ * Derives a verb from a field name.
170
+ *
171
+ * Common field names like "manager", "owner", "creator" are mapped
172
+ * to their corresponding verbs. Unknown field names are returned as-is.
173
+ *
174
+ * @param fieldName - The field name to derive a verb from
175
+ * @returns The derived verb or the field name if no mapping exists
176
+ *
177
+ * @example
178
+ * ```ts
179
+ * fieldNameToVerb('manager') // 'manages'
180
+ * fieldNameToVerb('owner') // 'owns'
181
+ * fieldNameToVerb('creator') // 'creates'
182
+ * fieldNameToVerb('customField') // 'customField' (no mapping)
183
+ * ```
184
+ */
185
+ export function fieldNameToVerb(fieldName) {
186
+ return _fieldToVerb[fieldName] ?? fieldName;
187
+ }
188
+ /**
189
+ * Checks if a verb is in passive form.
190
+ *
191
+ * A verb is considered passive if it ends with:
192
+ * - 'By' (managedBy, ownedBy, createdBy)
193
+ * - 'To' (relatedTo, linkedTo, connectedTo)
194
+ * - 'Of' (parent_of, child_of, partOf)
195
+ *
196
+ * @param verb - The verb to check
197
+ * @returns True if the verb is passive, false otherwise
198
+ *
199
+ * @example
200
+ * ```ts
201
+ * isPassiveVerb('managedBy') // true
202
+ * isPassiveVerb('relatedTo') // true
203
+ * isPassiveVerb('parent_of') // true
204
+ * isPassiveVerb('manages') // false
205
+ * ```
206
+ */
207
+ export function isPassiveVerb(verb) {
208
+ if (verb.length === 0) {
209
+ return false;
210
+ }
211
+ // Check for common passive suffixes
212
+ return (verb.endsWith('By') ||
213
+ verb.endsWith('To') ||
214
+ verb.endsWith('Of') ||
215
+ verb.endsWith('_of'));
216
+ }
217
+ // =============================================================================
218
+ // Extensibility Functions
219
+ // =============================================================================
220
+ /**
221
+ * Register a custom verb pair for forward/reverse derivation.
222
+ *
223
+ * This allows extending the verb derivation system with domain-specific
224
+ * verb mappings at runtime.
225
+ *
226
+ * @param forward - The forward (active) verb
227
+ * @param reverse - The reverse (passive) verb
228
+ *
229
+ * @example
230
+ * ```ts
231
+ * registerVerbPair('sponsors', 'sponsoredBy')
232
+ * deriveReverseVerb('sponsors') // 'sponsoredBy'
233
+ * deriveReverseVerb('sponsoredBy') // 'sponsors'
234
+ * ```
235
+ */
236
+ export function registerVerbPair(forward, reverse) {
237
+ _forwardToReverse[forward] = reverse;
238
+ _reverseToForward[reverse] = forward;
239
+ }
240
+ /**
241
+ * Register a bidirectional verb pair.
242
+ *
243
+ * Bidirectional pairs are symmetric relationships where each verb
244
+ * maps to the other. For self-referential relationships, both
245
+ * arguments can be the same verb.
246
+ *
247
+ * @param verbA - The first verb
248
+ * @param verbB - The second verb (can be same as verbA for symmetric)
249
+ *
250
+ * @example
251
+ * ```ts
252
+ * // Asymmetric bidirectional
253
+ * registerBidirectionalPair('mentor_of', 'mentee_of')
254
+ * deriveReverseVerb('mentor_of') // 'mentee_of'
255
+ * deriveReverseVerb('mentee_of') // 'mentor_of'
256
+ *
257
+ * // Symmetric (self-referential)
258
+ * registerBidirectionalPair('relatedTo', 'relatedTo')
259
+ * deriveReverseVerb('relatedTo') // 'relatedTo'
260
+ * ```
261
+ */
262
+ export function registerBidirectionalPair(verbA, verbB) {
263
+ _bidirectionalPairs[verbA] = verbB;
264
+ _bidirectionalPairs[verbB] = verbA;
265
+ }
266
+ /**
267
+ * Register a field name to verb mapping.
268
+ *
269
+ * @param fieldName - The field name
270
+ * @param verb - The verb it derives to
271
+ *
272
+ * @example
273
+ * ```ts
274
+ * registerFieldVerb('coordinator', 'coordinates')
275
+ * fieldNameToVerb('coordinator') // 'coordinates'
276
+ * ```
277
+ */
278
+ export function registerFieldVerb(fieldName, verb) {
279
+ _fieldToVerb[fieldName] = verb;
280
+ }
281
+ //# sourceMappingURL=verb-derivation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verb-derivation.js","sourceRoot":"","sources":["../../src/schema/verb-derivation.ts"],"names":[],"mappings":"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"}