@resistdesign/voltra 3.0.0-alpha.32 → 3.0.0-alpha.34

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 (54) hide show
  1. package/README.md +72 -2
  2. package/api/Indexing/fulltext/FullTextDdbBackend.d.ts +5 -3
  3. package/api/Indexing/index.d.ts +3 -3
  4. package/api/Indexing/rel/Handlers.d.ts +3 -2
  5. package/api/ORM/drivers/index.d.ts +1 -1
  6. package/api/ORM/index.d.ts +2 -11
  7. package/api/index.js +114 -99
  8. package/app/forms/Engine.d.ts +3 -0
  9. package/app/forms/UI.d.ts +7 -1
  10. package/app/forms/core/createAutoField.d.ts +11 -3
  11. package/app/forms/core/createFormRenderer.d.ts +3 -2
  12. package/app/forms/core/mergeSuites.d.ts +3 -2
  13. package/app/forms/core/resolveSuite.d.ts +2 -1
  14. package/app/forms/core/types.d.ts +20 -9
  15. package/app/forms/index.d.ts +1 -2
  16. package/app/forms/types.d.ts +36 -55
  17. package/app/index.js +22 -14
  18. package/app/utils/ApplicationState.d.ts +1 -1
  19. package/app/utils/Route.d.ts +3 -3
  20. package/build/index.js +4 -4
  21. package/chunk-4PV5LPTT.js +1144 -0
  22. package/chunk-7AMEFPPP.js +78 -0
  23. package/{chunk-FQMZMCXU.js → chunk-RUVFOXCR.js} +1 -1
  24. package/chunk-TJFTWPXQ.js +39 -0
  25. package/{chunk-LGM75I6P.js → chunk-WTD5BBJP.js} +223 -38
  26. package/common/ItemRelationships/ItemRelationshipValidation.d.ts +1 -1
  27. package/common/ItemRelationships/index.d.ts +1 -5
  28. package/common/Logging/Utils.d.ts +0 -9
  29. package/common/TypeInfoORM/index.d.ts +2 -10
  30. package/common/TypeParsing/TypeInfo.d.ts +20 -0
  31. package/common/TypeParsing/Validation.d.ts +152 -22
  32. package/common/index.d.ts +2 -12
  33. package/common/index.js +21 -9
  34. package/iac/packs/auth.d.ts +10 -4
  35. package/iac-packs/index.d.ts +1 -0
  36. package/native/forms/UI.d.ts +8 -2
  37. package/native/forms/createNativeFormRenderer.d.ts +1 -1
  38. package/native/forms/index.d.ts +16 -0
  39. package/native/forms/suite.d.ts +1 -1
  40. package/native/index.js +71 -40
  41. package/native/testing/react-native.d.ts +33 -15
  42. package/native/utils/index.d.ts +13 -1
  43. package/package.json +1 -1
  44. package/web/forms/UI.d.ts +8 -2
  45. package/web/forms/createWebFormRenderer.d.ts +1 -1
  46. package/web/forms/suite.d.ts +1 -1
  47. package/web/index.js +234 -113
  48. package/web/utils/Route.d.ts +9 -3
  49. package/web/utils/index.d.ts +1 -0
  50. package/chunk-G5CLUK4Y.js +0 -621
  51. package/chunk-HVY7POTD.js +0 -22
  52. package/chunk-IWRHGGGH.js +0 -10
  53. package/chunk-MUCSL3UR.js +0 -1
  54. package/chunk-WELZGQDJ.js +0 -456
package/README.md CHANGED
@@ -131,8 +131,10 @@ EasyLayout now has:
131
131
  - Client routing: `examples/routing/app-routing.ts`
132
132
  - Backend API routing: `examples/api/backend-routing.ts`
133
133
  - Forms: `examples/forms/`
134
+ - `examples/forms/auto-form-validation-customization.tsx`
134
135
  - Layout: `examples/layout/`
135
136
  - Common types: `examples/common/types.ts`
137
+ - `examples/common/typeinfo-validation.ts`
136
138
  - Build-time parsing: `examples/build/type-parsing.ts`
137
139
 
138
140
  ### Template syntax
@@ -191,12 +193,13 @@ const coords = layout.computeNativeCoords({
191
193
 
192
194
  ## Routing (Web + Native)
193
195
 
194
- Voltra routing is unified under `@resistdesign/voltra/app`.
196
+ Voltra routing uses the same `Route` API across app/web/native.
197
+ Use the platform barrel for root `Route` so runtime mechanics are auto-wired.
195
198
 
196
199
  Reference example: `examples/routing/app-routing.ts`
197
200
 
198
201
  ```tsx
199
- import { Route } from "@resistdesign/voltra/app";
202
+ import { Route } from "@resistdesign/voltra/web";
200
203
 
201
204
  <Route>
202
205
  <Route path="/" exact>
@@ -211,6 +214,16 @@ import { Route } from "@resistdesign/voltra/app";
211
214
  </Route>;
212
215
  ```
213
216
 
217
+ ```tsx
218
+ import { Route } from "@resistdesign/voltra/native";
219
+
220
+ <Route>
221
+ <Route path="/" exact>
222
+ <HomeScreen />
223
+ </Route>
224
+ </Route>;
225
+ ```
226
+
214
227
  How it works:
215
228
 
216
229
  - Root `<Route>` (no `path`) is provider mode.
@@ -311,6 +324,63 @@ Renderers emit actions via:
311
324
 
312
325
  Use these to wire modals, selectors, or editors without baking UI into the core engine.
313
326
 
327
+ ### Centralized Validation
328
+
329
+ All TypeInfo data-item validation can be run directly from `@resistdesign/voltra/common`:
330
+
331
+ ```ts
332
+ import { validateTypeInfoDataItem } from "@resistdesign/voltra/common";
333
+ ```
334
+
335
+ `validateTypeInfoDataItem` supports:
336
+
337
+ - field-level `customValidatorMap` callbacks that return `ErrorDescriptor`
338
+ - `tags.validation` field options:
339
+ - `validateHidden`
340
+ - `validateReadonly`
341
+ - `emptyArrayIsValid`
342
+
343
+ AutoForm passes validation through the same centralized logic and supports:
344
+
345
+ - `customValidatorMap` for app-specific rules
346
+ - `translateValidationErrorCode` for UI-facing messages
347
+ - multiple value-level errors per field
348
+ - per-index array item errors for array fields
349
+
350
+ Validation error maps can include both value-level errors and array item errors:
351
+
352
+ ```ts
353
+ {
354
+ errorMap: {
355
+ title: [
356
+ { code: "MISSING_FIELD_VALUE" },
357
+ { code: "VALUE_DOES_NOT_MATCH_PATTERN" }
358
+ ],
359
+ tags: [
360
+ { code: "INVALID_TYPE" },
361
+ {
362
+ itemErrorMap: {
363
+ 0: [{ code: "NOT_A_STRING" }],
364
+ 2: [
365
+ { code: "NOT_A_STRING" },
366
+ { code: "INVALID_CUSTOM_TYPE" }
367
+ ]
368
+ }
369
+ }
370
+ ]
371
+ }
372
+ }
373
+ ```
374
+
375
+ - Field-level multiple errors are represented by multiple `ErrorDescriptor` entries in the field array.
376
+ - Array item errors are represented by `itemErrorMap[index] = ErrorDescriptor[]`.
377
+
378
+ Error-code constants are split by purpose:
379
+
380
+ - `PRIMITIVE_ERROR_MESSAGE_CONSTANTS` keys follow `typeof` (`string`, `number`, `boolean`)
381
+ - `DENIED_TYPE_OPERATIONS` keys follow `TypeOperation` (`CREATE`, `READ`, `UPDATE`, `DELETE`)
382
+ - `ERROR_MESSAGE_CONSTANTS` exposes canonical code-keyed entries (for example `NOT_A_STRING`, `DENIED_TYPE_OPERATION_CREATE`)
383
+
314
384
  ## Docs Site
315
385
 
316
386
  The docs site is both reference documentation and a canonical usage example.
@@ -1,7 +1,7 @@
1
1
  import type { DocId, DocTokenKey, DocumentRecord, TokenStats } from "../Types";
2
2
  import type { SearchTrace } from "../Trace";
3
3
  import type { DynamoBatchWriter, DynamoQueryClient, WriteRequest } from "../ddb/Types";
4
- export type { BatchGetItemInput, BatchGetItemOutput, BatchWriteItemInput, BatchWriteItemOutput, DynamoBatchWriter, DynamoQueryClient, GetItemInput, GetItemOutput, KeysAndAttributes, QueryInput, QueryOutput, WriteRequest, } from "../ddb/Types";
4
+ export * from "../ddb/Types";
5
5
  /**
6
6
  * Deployment-specific DynamoDB table names required for fulltext storage.
7
7
  */
@@ -82,7 +82,7 @@ export type FullTextDdbBackendConfig = FullTextDdbWriterConfig & {
82
82
  /**
83
83
  * Page of lossy postings results.
84
84
  */
85
- export type LossyPostingsPage = {
85
+ type LossyPostingsPage = {
86
86
  /**
87
87
  * Document ids in the page.
88
88
  */
@@ -95,7 +95,7 @@ export type LossyPostingsPage = {
95
95
  /**
96
96
  * Paging options for lossy postings queries.
97
97
  */
98
- export type LossyPostingsPageOptions = {
98
+ type LossyPostingsPageOptions = {
99
99
  /**
100
100
  * Exclusive starting doc id for paging.
101
101
  */
@@ -208,3 +208,5 @@ export declare class FullTextDdbBackend extends FullTextDdbWriter {
208
208
  */
209
209
  loadTokenStats(token: string, indexField: string): Promise<TokenStats | undefined>;
210
210
  }
211
+ export type FullTextLossyPostingsPage = LossyPostingsPage;
212
+ export type FullTextLossyPostingsPageOptions = LossyPostingsPageOptions;
@@ -28,7 +28,7 @@ export * from "./exact/ExactDdb";
28
28
  export * from "./exact/ExactIndex";
29
29
  export * from "./exact/ExactS3";
30
30
  export * from "./fulltext/FullTextMemoryBackend";
31
- export { FullTextDdbBackend, FullTextDdbWriter, type FullTextTableNames, } from "./fulltext/FullTextDdbBackend";
31
+ export * from "./fulltext/FullTextDdbBackend";
32
32
  export * from "./fulltext/Schema";
33
33
  export * from "./lossy/LossyDdb";
34
34
  export * from "./lossy/LossyIndex";
@@ -36,10 +36,10 @@ export * from "./lossy/LossyS3";
36
36
  export * from "./rel/RelationalInMemoryBackend";
37
37
  export * from "./rel/RelationalDdb";
38
38
  export * from "./rel/Cursor";
39
- export { handler as relHandler, setRelationalHandlerDependencies, type EdgePutEvent, type EdgeRemoveEvent, type EdgeQueryEvent, type RelationalHandlerDependencies, type RelationalHandlerEvent, type LambdaResponse as RelLambdaResponse, } from "./rel/Handlers";
39
+ export * from "./rel/Handlers";
40
40
  export * from "./rel/Types";
41
41
  export * from "./structured/index";
42
42
  export * from "./tokenize";
43
43
  export * from "./Types";
44
44
  export * from "./Trace";
45
- export type { ResolvedSearchLimits } from "./Handler/Config";
45
+ export * from "./Handler/Config";
@@ -107,7 +107,7 @@ export type RelationalHandlerDependencies<TMetadata extends EdgeMetadata = EdgeM
107
107
  /**
108
108
  * Lambda-style response payload.
109
109
  */
110
- export type LambdaResponse = {
110
+ export type RelLambdaResponse = {
111
111
  /**
112
112
  * HTTP status code for the response.
113
113
  */
@@ -139,5 +139,6 @@ value: RelationalHandlerDependencies): void;
139
139
  * @param event Handler event describing the operation to execute.
140
140
  * @returns Lambda response with status and body payload.
141
141
  */
142
- export declare function handler(event: RelationalHandlerEvent): Promise<LambdaResponse>;
142
+ export declare function handler(event: RelationalHandlerEvent): Promise<RelLambdaResponse>;
143
+ export declare const relHandler: typeof handler;
143
144
  export {};
@@ -5,4 +5,4 @@ export * from "./InMemoryItemRelationshipDBDriver";
5
5
  export * from "./InMemoryFileItemDBDriver";
6
6
  export * from "./IndexingRelationshipDriver";
7
7
  export * from "./common";
8
- export type { S3SpecificConfig } from "./S3FileItemDBDriver/ConfigTypes";
8
+ export * from "./S3FileItemDBDriver/ConfigTypes";
@@ -5,14 +5,5 @@ export * from "./drivers";
5
5
  export * from "./TypeInfoORMService";
6
6
  export * from "./DACUtils";
7
7
  export * from "./ORMRouteMap";
8
- /**
9
- * @category api
10
- * @group Type Dependencies
11
- */
12
- export type { BaseDACRole, DACAccessResult, DACConstraint, DACDataItemResourceAccessResultMap, DACRole, } from "../DataAccessControl";
13
- export { DACConstraintType } from "../DataAccessControl";
14
- /**
15
- * @category api
16
- * @group Type Dependencies
17
- */
18
- export type { AuthInfo, NormalizedCloudFunctionEventData, Route, RouteAuthConfig, RouteHandler, RouteMap, } from "../Router/Types";
8
+ export * from "../DataAccessControl";
9
+ export * from "../Router/Types";
package/api/index.js CHANGED
@@ -1,7 +1,5 @@
1
- import '../chunk-MUCSL3UR.js';
2
- import { ERROR_MESSAGE_CONSTANTS, validateTypeOperationAllowed, getValidityValue, validateTypeInfoValue, validateTypeInfoFieldValue } from '../chunk-LGM75I6P.js';
3
- import { ITEM_RELATIONSHIP_DAC_RESOURCE_NAME } from '../chunk-HVY7POTD.js';
4
- import '../chunk-IWRHGGGH.js';
1
+ import { ITEM_RELATIONSHIP_DAC_RESOURCE_NAME, ComparisonOperators } from '../chunk-7AMEFPPP.js';
2
+ import { getNoErrorDescriptor, getErrorDescriptor, ERROR_MESSAGE_CONSTANTS, validateTypeOperationAllowed, getValidityValue, validateTypeInfoValue, validateTypeInfoFieldValue } from '../chunk-WTD5BBJP.js';
5
3
  import { mergeStringPaths, getPathString, getPathArray } from '../chunk-GYWRAW3Y.js';
6
4
  import '../chunk-I2KLQ2HA.js';
7
5
  import { QueryCommand, GetItemCommand, BatchGetItemCommand, BatchWriteItemCommand, DynamoDBClient, PutItemCommand, UpdateItemCommand, DeleteItemCommand, ScanCommand } from '@aws-sdk/client-dynamodb';
@@ -9,8 +7,6 @@ import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';
9
7
  import { S3, PutObjectCommand, HeadObjectCommand, CopyObjectCommand, GetObjectCommand, DeleteObjectCommand, ListObjectsV2Command } from '@aws-sdk/client-s3';
10
8
  import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
11
9
  import { v4 } from 'uuid';
12
- import Path from 'path';
13
- import { fileURLToPath } from 'url';
14
10
 
15
11
  // src/api/Indexing/Cursor.ts
16
12
  var textEncoder = new TextEncoder();
@@ -212,6 +208,44 @@ var SEARCH_DEFAULTS = {
212
208
  maxCandidatesVerified: 200,
213
209
  softTimeBudgetMs: 150
214
210
  };
211
+ var SEARCH_CAPS = {
212
+ maxTokens: Number.POSITIVE_INFINITY,
213
+ maxPostingsPages: Number.POSITIVE_INFINITY,
214
+ maxCandidatesVerified: Number.POSITIVE_INFINITY,
215
+ softTimeBudgetMs: Number.POSITIVE_INFINITY
216
+ };
217
+ function clampLimit(value, fallback, cap) {
218
+ if (!Number.isFinite(value)) {
219
+ return Math.min(fallback, cap);
220
+ }
221
+ const safeValue = Math.max(0, value);
222
+ return Math.min(safeValue, cap);
223
+ }
224
+ function resolveSearchLimits(limits) {
225
+ const requested = { ...SEARCH_DEFAULTS, ...limits };
226
+ return {
227
+ maxTokens: clampLimit(
228
+ requested.maxTokens,
229
+ SEARCH_DEFAULTS.maxTokens,
230
+ SEARCH_CAPS.maxTokens
231
+ ),
232
+ maxPostingsPages: clampLimit(
233
+ requested.maxPostingsPages,
234
+ SEARCH_DEFAULTS.maxPostingsPages,
235
+ SEARCH_CAPS.maxPostingsPages
236
+ ),
237
+ maxCandidatesVerified: clampLimit(
238
+ requested.maxCandidatesVerified,
239
+ SEARCH_DEFAULTS.maxCandidatesVerified,
240
+ SEARCH_CAPS.maxCandidatesVerified
241
+ ),
242
+ softTimeBudgetMs: clampLimit(
243
+ requested.softTimeBudgetMs,
244
+ SEARCH_DEFAULTS.softTimeBudgetMs,
245
+ SEARCH_CAPS.softTimeBudgetMs
246
+ )
247
+ };
248
+ }
215
249
 
216
250
  // src/api/Indexing/hashUniversal.ts
217
251
  var textEncoder2 = new TextEncoder();
@@ -800,7 +834,7 @@ async function searchLossy({
800
834
  setBackendTrace(reader, void 0);
801
835
  }
802
836
  }
803
- async function hasExactPhrase(reader, docId, indexField, phraseTokens, docTokenChecker, positionsLoader) {
837
+ async function hasExactPhrase(docId, phraseTokens, docTokenChecker, positionsLoader) {
804
838
  if (phraseTokens.length === 0) {
805
839
  return false;
806
840
  }
@@ -902,9 +936,7 @@ async function searchExact({
902
936
  continue;
903
937
  }
904
938
  if (await hasExactPhrase(
905
- reader,
906
939
  docId,
907
- indexField,
908
940
  exactTokens,
909
941
  docTokenChecker,
910
942
  positionsLoader
@@ -943,9 +975,7 @@ async function searchExact({
943
975
  const verifyCandidate = async (docId) => {
944
976
  lastProcessedDocId = docId;
945
977
  return hasExactPhrase(
946
- reader,
947
978
  docId,
948
- indexField,
949
979
  exactTokens,
950
980
  docTokenChecker,
951
981
  positionsLoader
@@ -2989,6 +3019,7 @@ async function handler(event) {
2989
3019
  };
2990
3020
  }
2991
3021
  }
3022
+ var relHandler = handler;
2992
3023
 
2993
3024
  // src/api/Indexing/structured/Cursor.ts
2994
3025
  function encodeBase64Url2(value) {
@@ -4275,57 +4306,30 @@ var S3FileDriver = class {
4275
4306
  };
4276
4307
  };
4277
4308
 
4278
- // src/common/SearchTypes.ts
4279
- var ComparisonOperators = /* @__PURE__ */ ((ComparisonOperators2) => {
4280
- ComparisonOperators2["EQUALS"] = "EQUALS";
4281
- ComparisonOperators2["NOT_EQUALS"] = "NOT_EQUALS";
4282
- ComparisonOperators2["GREATER_THAN"] = "GREATER_THAN";
4283
- ComparisonOperators2["GREATER_THAN_OR_EQUAL"] = "GREATER_THAN_OR_EQUAL";
4284
- ComparisonOperators2["LESS_THAN"] = "LESS_THAN";
4285
- ComparisonOperators2["LESS_THAN_OR_EQUAL"] = "LESS_THAN_OR_EQUAL";
4286
- ComparisonOperators2["IN"] = "IN";
4287
- ComparisonOperators2["NOT_IN"] = "NOT_IN";
4288
- ComparisonOperators2["LIKE"] = "LIKE";
4289
- ComparisonOperators2["NOT_LIKE"] = "NOT_LIKE";
4290
- ComparisonOperators2["EXISTS"] = "EXISTS";
4291
- ComparisonOperators2["NOT_EXISTS"] = "NOT_EXISTS";
4292
- ComparisonOperators2["IS_NOT_EMPTY"] = "IS_NOT_EMPTY";
4293
- ComparisonOperators2["IS_EMPTY"] = "IS_EMPTY";
4294
- ComparisonOperators2["BETWEEN"] = "BETWEEN";
4295
- ComparisonOperators2["NOT_BETWEEN"] = "NOT_BETWEEN";
4296
- ComparisonOperators2["CONTAINS"] = "CONTAINS";
4297
- ComparisonOperators2["NOT_CONTAINS"] = "NOT_CONTAINS";
4298
- ComparisonOperators2["STARTS_WITH"] = "STARTS_WITH";
4299
- ComparisonOperators2["ENDS_WITH"] = "ENDS_WITH";
4300
- ComparisonOperators2["DOES_NOT_START_WITH"] = "DOES_NOT_START_WITH";
4301
- ComparisonOperators2["DOES_NOT_END_WITH"] = "DOES_NOT_END_WITH";
4302
- return ComparisonOperators2;
4303
- })(ComparisonOperators || {});
4304
-
4305
4309
  // src/common/SearchUtils.ts
4306
4310
  var COMPARATORS = {
4307
- ["EQUALS" /* EQUALS */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue === criterionValue,
4308
- ["NOT_EQUALS" /* NOT_EQUALS */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue !== criterionValue,
4309
- ["GREATER_THAN" /* GREATER_THAN */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue > criterionValue,
4310
- ["GREATER_THAN_OR_EQUAL" /* GREATER_THAN_OR_EQUAL */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue >= criterionValue,
4311
- ["LESS_THAN" /* LESS_THAN */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue < criterionValue,
4312
- ["LESS_THAN_OR_EQUAL" /* LESS_THAN_OR_EQUAL */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue <= criterionValue,
4313
- ["IN" /* IN */]: (criterionValue, criterionValueOptions, fieldValue) => Array.isArray(criterionValueOptions) && criterionValueOptions.includes(fieldValue),
4314
- ["NOT_IN" /* NOT_IN */]: (criterionValue, criterionValueOptions, fieldValue) => !Array.isArray(criterionValueOptions) || !criterionValueOptions.includes(fieldValue),
4315
- ["LIKE" /* LIKE */]: (criterionValue, criterionValueOptions, fieldValue) => `${fieldValue}`.includes(`${criterionValue}`),
4316
- ["NOT_LIKE" /* NOT_LIKE */]: (criterionValue, criterionValueOptions, fieldValue) => !`${fieldValue}`.includes(`${criterionValue}`),
4317
- ["EXISTS" /* EXISTS */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue !== void 0 && fieldValue !== null,
4318
- ["NOT_EXISTS" /* NOT_EXISTS */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue === void 0 || fieldValue === null,
4319
- ["IS_NOT_EMPTY" /* IS_NOT_EMPTY */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue !== void 0 && fieldValue !== null && fieldValue !== "",
4320
- ["IS_EMPTY" /* IS_EMPTY */]: (criterionValue, criterionValueOptions, fieldValue) => fieldValue === void 0 || fieldValue === null || fieldValue === "",
4321
- ["BETWEEN" /* BETWEEN */]: (criterionValue, criterionValueOptions, fieldValue) => Array.isArray(criterionValueOptions) && fieldValue >= criterionValueOptions[0] && fieldValue <= criterionValueOptions[1],
4322
- ["NOT_BETWEEN" /* NOT_BETWEEN */]: (criterionValue, criterionValueOptions, fieldValue) => !Array.isArray(criterionValueOptions) || fieldValue < criterionValueOptions[0] || fieldValue > criterionValueOptions[1],
4323
- ["CONTAINS" /* CONTAINS */]: (criterionValue, criterionValueOptions, fieldValue) => Array.isArray(fieldValue) && fieldValue.includes(criterionValue),
4324
- ["NOT_CONTAINS" /* NOT_CONTAINS */]: (criterionValue, criterionValueOptions, fieldValue) => !Array.isArray(fieldValue) || !fieldValue.includes(criterionValue),
4325
- ["STARTS_WITH" /* STARTS_WITH */]: (criterionValue, criterionValueOptions, fieldValue) => `${fieldValue}`.startsWith(`${criterionValue}`),
4326
- ["ENDS_WITH" /* ENDS_WITH */]: (criterionValue, criterionValueOptions, fieldValue) => `${fieldValue}`.endsWith(`${criterionValue}`),
4327
- ["DOES_NOT_START_WITH" /* DOES_NOT_START_WITH */]: (criterionValue, criterionValueOptions, fieldValue) => !`${fieldValue}`.startsWith(`${criterionValue}`),
4328
- ["DOES_NOT_END_WITH" /* DOES_NOT_END_WITH */]: (criterionValue, criterionValueOptions, fieldValue) => !`${fieldValue}`.endsWith(`${criterionValue}`)
4311
+ ["EQUALS" /* EQUALS */]: (criterionValue, _criterionValueOptions, fieldValue) => fieldValue === criterionValue,
4312
+ ["NOT_EQUALS" /* NOT_EQUALS */]: (criterionValue, _criterionValueOptions, fieldValue) => fieldValue !== criterionValue,
4313
+ ["GREATER_THAN" /* GREATER_THAN */]: (criterionValue, _criterionValueOptions, fieldValue) => fieldValue > criterionValue,
4314
+ ["GREATER_THAN_OR_EQUAL" /* GREATER_THAN_OR_EQUAL */]: (criterionValue, _criterionValueOptions, fieldValue) => fieldValue >= criterionValue,
4315
+ ["LESS_THAN" /* LESS_THAN */]: (criterionValue, _criterionValueOptions, fieldValue) => fieldValue < criterionValue,
4316
+ ["LESS_THAN_OR_EQUAL" /* LESS_THAN_OR_EQUAL */]: (criterionValue, _criterionValueOptions, fieldValue) => fieldValue <= criterionValue,
4317
+ ["IN" /* IN */]: (_criterionValue, criterionValueOptions, fieldValue) => Array.isArray(criterionValueOptions) && criterionValueOptions.includes(fieldValue),
4318
+ ["NOT_IN" /* NOT_IN */]: (_criterionValue, criterionValueOptions, fieldValue) => !Array.isArray(criterionValueOptions) || !criterionValueOptions.includes(fieldValue),
4319
+ ["LIKE" /* LIKE */]: (criterionValue, _criterionValueOptions, fieldValue) => `${fieldValue}`.includes(`${criterionValue}`),
4320
+ ["NOT_LIKE" /* NOT_LIKE */]: (criterionValue, _criterionValueOptions, fieldValue) => !`${fieldValue}`.includes(`${criterionValue}`),
4321
+ ["EXISTS" /* EXISTS */]: (_criterionValue, _criterionValueOptions, fieldValue) => fieldValue !== void 0 && fieldValue !== null,
4322
+ ["NOT_EXISTS" /* NOT_EXISTS */]: (_criterionValue, _criterionValueOptions, fieldValue) => fieldValue === void 0 || fieldValue === null,
4323
+ ["IS_NOT_EMPTY" /* IS_NOT_EMPTY */]: (_criterionValue, _criterionValueOptions, fieldValue) => fieldValue !== void 0 && fieldValue !== null && fieldValue !== "",
4324
+ ["IS_EMPTY" /* IS_EMPTY */]: (_criterionValue, _criterionValueOptions, fieldValue) => fieldValue === void 0 || fieldValue === null || fieldValue === "",
4325
+ ["BETWEEN" /* BETWEEN */]: (_criterionValue, criterionValueOptions, fieldValue) => Array.isArray(criterionValueOptions) && fieldValue >= criterionValueOptions[0] && fieldValue <= criterionValueOptions[1],
4326
+ ["NOT_BETWEEN" /* NOT_BETWEEN */]: (_criterionValue, criterionValueOptions, fieldValue) => !Array.isArray(criterionValueOptions) || fieldValue < criterionValueOptions[0] || fieldValue > criterionValueOptions[1],
4327
+ ["CONTAINS" /* CONTAINS */]: (criterionValue, _criterionValueOptions, fieldValue) => Array.isArray(fieldValue) && fieldValue.includes(criterionValue),
4328
+ ["NOT_CONTAINS" /* NOT_CONTAINS */]: (criterionValue, _criterionValueOptions, fieldValue) => !Array.isArray(fieldValue) || !fieldValue.includes(criterionValue),
4329
+ ["STARTS_WITH" /* STARTS_WITH */]: (criterionValue, _criterionValueOptions, fieldValue) => `${fieldValue}`.startsWith(`${criterionValue}`),
4330
+ ["ENDS_WITH" /* ENDS_WITH */]: (criterionValue, _criterionValueOptions, fieldValue) => `${fieldValue}`.endsWith(`${criterionValue}`),
4331
+ ["DOES_NOT_START_WITH" /* DOES_NOT_START_WITH */]: (criterionValue, _criterionValueOptions, fieldValue) => !`${fieldValue}`.startsWith(`${criterionValue}`),
4332
+ ["DOES_NOT_END_WITH" /* DOES_NOT_END_WITH */]: (criterionValue, _criterionValueOptions, fieldValue) => !`${fieldValue}`.endsWith(`${criterionValue}`)
4329
4333
  };
4330
4334
  var compare = (fieldCriterion, fieldValue) => {
4331
4335
  const {
@@ -4356,6 +4360,9 @@ var getFilterTypeInfoDataItemsBySearchCriteria = (searchCriteria, items, typeInf
4356
4360
  for (const currentItem of items) {
4357
4361
  if (typeof currentItem === "object" && currentItem !== null) {
4358
4362
  let meetsCriteria = true;
4363
+ if (logicalOperator === "OR" /* OR */ && fieldCriteria.length > 0) {
4364
+ meetsCriteria = false;
4365
+ }
4359
4366
  for (const fieldCriterion of fieldCriteria) {
4360
4367
  const { fieldName } = fieldCriterion;
4361
4368
  const { array: isArrayType, typeReference } = fields[fieldName] || {};
@@ -5600,7 +5607,6 @@ var ConfigTypeInfoMap_default2 = {
5600
5607
  };
5601
5608
 
5602
5609
  // src/api/ORM/drivers/DynamoDBDataItemDBDriver.ts
5603
- typeof __dirname === "string" ? __dirname : Path.dirname(fileURLToPath(import.meta.url));
5604
5610
  var DynamoDBOperatorMappings = {
5605
5611
  ["EQUALS" /* EQUALS */]: (fieldName) => `#${fieldName} = :${fieldName}`,
5606
5612
  ["NOT_EQUALS" /* NOT_EQUALS */]: (fieldName) => `#${fieldName} <> :${fieldName}`,
@@ -5889,7 +5895,6 @@ var ConfigTypeInfoMap_default3 = {
5889
5895
  };
5890
5896
 
5891
5897
  // src/api/ORM/drivers/InMemoryDataItemDBDriver.ts
5892
- typeof __dirname === "string" ? __dirname : Path.dirname(fileURLToPath(import.meta.url));
5893
5898
  var decodeCursor2 = (cursor) => {
5894
5899
  if (!cursor) {
5895
5900
  return 0;
@@ -6100,7 +6105,6 @@ var ConfigTypeInfoMap_default4 = {
6100
6105
  };
6101
6106
 
6102
6107
  // src/api/ORM/drivers/InMemoryFileItemDBDriver.ts
6103
- typeof __dirname === "string" ? __dirname : Path.dirname(fileURLToPath(import.meta.url));
6104
6108
  var decodeCursor3 = (cursor) => {
6105
6109
  if (!cursor) {
6106
6110
  return 0;
@@ -6475,7 +6479,7 @@ var validateSearchFields = (typeInfoName, typeInfoMap, searchFields = [], disall
6475
6479
  const results = {
6476
6480
  typeName: typeInfoName,
6477
6481
  valid: true,
6478
- error: "",
6482
+ error: getNoErrorDescriptor(),
6479
6483
  errorMap: {}
6480
6484
  };
6481
6485
  if (typeInfo) {
@@ -6485,7 +6489,7 @@ var validateSearchFields = (typeInfoName, typeInfoMap, searchFields = [], disall
6485
6489
  if (!customOperator && (!operator || !Object.values(ComparisonOperators).includes(operator))) {
6486
6490
  results.valid = false;
6487
6491
  results.errorMap[fieldName] = [
6488
- SEARCH_VALIDATION_ERRORS.INVALID_OPERATOR
6492
+ getErrorDescriptor(SEARCH_VALIDATION_ERRORS.INVALID_OPERATOR)
6489
6493
  ];
6490
6494
  } else {
6491
6495
  const tIF = fields[fieldName];
@@ -6495,12 +6499,14 @@ var validateSearchFields = (typeInfoName, typeInfoMap, searchFields = [], disall
6495
6499
  if (denyRead) {
6496
6500
  results.valid = false;
6497
6501
  results.errorMap[fieldName] = [
6498
- SEARCH_VALIDATION_ERRORS.INVALID_FIELD
6502
+ getErrorDescriptor(SEARCH_VALIDATION_ERRORS.INVALID_FIELD)
6499
6503
  ];
6500
6504
  } else if (typeReference) {
6501
6505
  results.valid = false;
6502
6506
  results.errorMap[fieldName] = [
6503
- SEARCH_VALIDATION_ERRORS.RELATIONAL_FIELDS_NOT_ALLOWED
6507
+ getErrorDescriptor(
6508
+ SEARCH_VALIDATION_ERRORS.RELATIONAL_FIELDS_NOT_ALLOWED
6509
+ )
6504
6510
  ];
6505
6511
  } else {
6506
6512
  if (operator && OPERATORS_WITHOUT_VALUES.has(operator)) {
@@ -6512,7 +6518,7 @@ var validateSearchFields = (typeInfoName, typeInfoMap, searchFields = [], disall
6512
6518
  tVO,
6513
6519
  tIF,
6514
6520
  typeInfoMap,
6515
- false,
6521
+ true,
6516
6522
  true,
6517
6523
  customValidators,
6518
6524
  "READ" /* READ */,
@@ -6530,14 +6536,14 @@ var validateSearchFields = (typeInfoName, typeInfoMap, searchFields = [], disall
6530
6536
  } else {
6531
6537
  results.valid = false;
6532
6538
  results.errorMap[fieldName] = [
6533
- SEARCH_VALIDATION_ERRORS.INVALID_FIELD
6539
+ getErrorDescriptor(SEARCH_VALIDATION_ERRORS.INVALID_FIELD)
6534
6540
  ];
6535
6541
  }
6536
6542
  }
6537
6543
  }
6538
6544
  } else {
6539
6545
  results.valid = false;
6540
- results.error = SEARCH_VALIDATION_ERRORS.INVALID_TYPE_INFO;
6546
+ results.error = getErrorDescriptor(SEARCH_VALIDATION_ERRORS.INVALID_TYPE_INFO);
6541
6547
  }
6542
6548
  return results;
6543
6549
  };
@@ -6553,7 +6559,7 @@ var validateRelationshipItem = (relationshipItem, omitFields) => {
6553
6559
  const results = {
6554
6560
  typeName: fromTypeName,
6555
6561
  valid: true,
6556
- error: "",
6562
+ error: getNoErrorDescriptor(),
6557
6563
  errorMap: {}
6558
6564
  };
6559
6565
  if (typeof relationshipItem === "object" && relationshipItem !== null) {
@@ -6566,24 +6572,34 @@ var validateRelationshipItem = (relationshipItem, omitFields) => {
6566
6572
  universalRKV in relationshipItem && typeof relationshipItem[universalRKV] !== "string" || omitRKV && universalRKV in relationshipItem
6567
6573
  ) {
6568
6574
  results.valid = false;
6569
- results.error = TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM;
6575
+ results.error = getErrorDescriptor(
6576
+ TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM
6577
+ );
6570
6578
  results.errorMap[rKV] = [
6571
- TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM_FIELD
6579
+ getErrorDescriptor(
6580
+ TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM_FIELD
6581
+ )
6572
6582
  ];
6573
6583
  } else if (
6574
6584
  // Missing Field
6575
6585
  !omitRKV && (!(universalRKV in relationshipItem) || !relationshipItem[universalRKV])
6576
6586
  ) {
6577
6587
  results.valid = false;
6578
- results.error = TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM;
6588
+ results.error = getErrorDescriptor(
6589
+ TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM
6590
+ );
6579
6591
  results.errorMap[rKV] = [
6580
- TYPE_INFO_ORM_RELATIONSHIP_ERRORS.MISSING_RELATIONSHIP_ITEM_FIELD
6592
+ getErrorDescriptor(
6593
+ TYPE_INFO_ORM_RELATIONSHIP_ERRORS.MISSING_RELATIONSHIP_ITEM_FIELD
6594
+ )
6581
6595
  ];
6582
6596
  }
6583
6597
  }
6584
6598
  } else {
6585
6599
  results.valid = false;
6586
- results.error = TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM;
6600
+ results.error = getErrorDescriptor(
6601
+ TYPE_INFO_ORM_RELATIONSHIP_ERRORS.INVALID_RELATIONSHIP_ITEM
6602
+ );
6587
6603
  }
6588
6604
  return results;
6589
6605
  };
@@ -6592,13 +6608,7 @@ var validateRelationshipItem = (relationshipItem, omitFields) => {
6592
6608
  var removeNonexistentFieldsFromSelectedFields = (typeInfo = {}, selectedFields) => {
6593
6609
  if (Array.isArray(selectedFields)) {
6594
6610
  const { fields = {} } = typeInfo;
6595
- const cleanSelectFields = [];
6596
- for (const tIF in fields) {
6597
- if (selectedFields.includes(tIF)) {
6598
- cleanSelectFields.push(tIF);
6599
- }
6600
- }
6601
- return cleanSelectFields;
6611
+ return selectedFields.filter((field) => Boolean(fields[field]));
6602
6612
  } else {
6603
6613
  return selectedFields;
6604
6614
  }
@@ -6606,14 +6616,10 @@ var removeNonexistentFieldsFromSelectedFields = (typeInfo = {}, selectedFields)
6606
6616
  var removeTypeReferenceFieldsFromSelectedFields = (typeInfo = {}, selectedFields) => {
6607
6617
  if (Array.isArray(selectedFields)) {
6608
6618
  const { fields = {} } = typeInfo;
6609
- const cleanSelectFields = [];
6610
- for (const tIF in fields) {
6611
- const { typeReference } = fields[tIF];
6612
- if (typeof typeReference === "undefined" && selectedFields.includes(tIF)) {
6613
- cleanSelectFields.push(tIF);
6614
- }
6615
- }
6616
- return cleanSelectFields;
6619
+ return selectedFields.filter((field) => {
6620
+ const typeInfoField = fields[field];
6621
+ return typeInfoField && typeof typeInfoField.typeReference === "undefined";
6622
+ });
6617
6623
  } else {
6618
6624
  return selectedFields;
6619
6625
  }
@@ -7581,7 +7587,7 @@ var TypeInfoORMService = class {
7581
7587
  const results = {
7582
7588
  typeName,
7583
7589
  valid: !!typeInfo,
7584
- error: !!typeInfo ? "" : ERROR_MESSAGE_CONSTANTS.TYPE_DOES_NOT_EXIST,
7590
+ error: !!typeInfo ? getNoErrorDescriptor() : getErrorDescriptor(ERROR_MESSAGE_CONSTANTS.TYPE_DOES_NOT_EXIST),
7585
7591
  errorMap: {}
7586
7592
  };
7587
7593
  const {
@@ -7600,7 +7606,7 @@ var TypeInfoORMService = class {
7600
7606
  const existingError = results.errorMap[oE] ?? [];
7601
7607
  results.errorMap[oE] = existingError ? [...existingError, ...operationErrorMap[oE]] : operationErrorMap[oE];
7602
7608
  }
7603
- if (!operationValid && operationError) {
7609
+ if (!operationValid && operationError.code !== ERROR_MESSAGE_CONSTANTS.NONE) {
7604
7610
  results.error = operationError;
7605
7611
  }
7606
7612
  if (!results.valid) {
@@ -7699,7 +7705,7 @@ var TypeInfoORMService = class {
7699
7705
  const relationshipValidationResults = {
7700
7706
  typeName: fromTypeName,
7701
7707
  valid: false,
7702
- error: "INVALID_RELATIONSHIP" /* INVALID_RELATIONSHIP */,
7708
+ error: getErrorDescriptor("INVALID_RELATIONSHIP" /* INVALID_RELATIONSHIP */),
7703
7709
  errorMap: {}
7704
7710
  };
7705
7711
  throw relationshipValidationResults;
@@ -8109,7 +8115,9 @@ var TypeInfoORMService = class {
8109
8115
  const validationResults = {
8110
8116
  typeName,
8111
8117
  valid: false,
8112
- error: "NO_PRIMARY_FIELD_VALUE_SUPPLIED" /* NO_PRIMARY_FIELD_VALUE_SUPPLIED */,
8118
+ error: getErrorDescriptor(
8119
+ "NO_PRIMARY_FIELD_VALUE_SUPPLIED" /* NO_PRIMARY_FIELD_VALUE_SUPPLIED */
8120
+ ),
8113
8121
  errorMap: {}
8114
8122
  };
8115
8123
  throw validationResults;
@@ -8458,6 +8466,13 @@ var getHeadersWithCORS = (origin = "", corsPatterns = []) => {
8458
8466
  };
8459
8467
 
8460
8468
  // src/common/Logging/Utils.ts
8469
+ var stringifyForLog = (value) => {
8470
+ try {
8471
+ return JSON.stringify(value, null, 2);
8472
+ } catch (error) {
8473
+ return "[Unserializable]";
8474
+ }
8475
+ };
8461
8476
  var logFunctionCall = async (label, args, functionRef, enabled) => {
8462
8477
  if (enabled) {
8463
8478
  console.log(
@@ -8465,7 +8480,7 @@ var logFunctionCall = async (label, args, functionRef, enabled) => {
8465
8480
  "INPUT" /* INPUT */,
8466
8481
  label,
8467
8482
  ":",
8468
- JSON.stringify(args, null, 2)
8483
+ stringifyForLog(args)
8469
8484
  );
8470
8485
  }
8471
8486
  try {
@@ -8476,7 +8491,7 @@ var logFunctionCall = async (label, args, functionRef, enabled) => {
8476
8491
  "OUTPUT" /* OUTPUT */,
8477
8492
  label,
8478
8493
  ":",
8479
- JSON.stringify(result, null, 2)
8494
+ stringifyForLog(result)
8480
8495
  );
8481
8496
  }
8482
8497
  return result;
@@ -8722,7 +8737,7 @@ var getTypeInfoORMRouteMap = (config, dacConfig, getAccessingRoleId, authConfig)
8722
8737
  authConfig: defaultAuthConfig,
8723
8738
  handlerFactory
8724
8739
  });
8725
- const createHandlerFactory = (eventData) => orm.create;
8740
+ const createHandlerFactory = (_eventData) => orm.create;
8726
8741
  const createHandlerFactoryWithDAC = (eventData) => {
8727
8742
  resolveContext(eventData);
8728
8743
  return orm.create;
@@ -8824,4 +8839,4 @@ var getContextFromEventData = (eventData, dacConfig, getAccessingRoleId) => {
8824
8839
  return { accessingRoleId };
8825
8840
  };
8826
8841
 
8827
- export { AWS, DACConstraintType, DATA_ITEM_DB_DRIVER_ERRORS, DynamoDBDataItemDBDriver, DynamoDBSupportedDataItemDBDriverEntry, ExactIndex, FullTextDdbBackend, FullTextDdbWriter, FullTextMemoryBackend, InMemoryDataItemDBDriver, InMemoryFileItemDBDriver, InMemoryFileSupportedDataItemDBDriverEntry, InMemoryItemRelationshipDBDriver, InMemorySupportedDataItemDBDriverEntry, IndexingRelationshipDriver, LossyIndex, RelationalDdbBackend, RelationalInMemoryBackend, S3FileItemDBDriver, S3SupportedFileItemDBDriverEntry, SUPPORTED_TYPE_INFO_ORM_DB_DRIVERS, StructuredDdbBackend, StructuredDdbReader, StructuredDdbWriter, StructuredInMemoryBackend, StructuredInMemoryIndex, SupportedTypeInfoORMDBDriverNames, TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP, TYPE_INFO_ORM_ROUTE_MAP_ERRORS, TypeInfoORMService, WILDCARD_SIGNIFIER_PROTOTYPE, addRouteMapToRouteMap, addRouteToRouteMap, addRoutesToRouteMap, batchWriteWithRetry, buildExactDdbItem, buildExactDdbKey, buildExactS3Key, buildLossyDdbKey, buildLossyS3Key, buildRelationEdgeDdbItem, buildRelationEdgeDdbKey, buildStructuredDocFieldsItem, buildStructuredRangeItem, buildStructuredRangeKey, buildStructuredTermItem, buildStructuredTermKey, cleanRelationshipItem, createAwsSdkV3DynamoClient, createRelationEdgesDdbDependencies, createSearchTrace, decodeExactCursor, decodeLossyCursor, decodeRelationalCursor, decodeStructuredCursor, docTokenPositionsSchema, docTokensSchema, encodeDocKey, encodeDocMirrorKey, encodeDocTokenPositionSortKey, encodeDocTokenSortKey, encodeExactCursor, encodeLossyCursor, encodeRelationEdgePartitionKey, encodeRelationalCursor, encodeStructuredCursor, encodeTokenDocSortKey, encodeTokenKey, exactDdbSchema, exactPostingsSchema, fullTextDocMirrorSchema, fullTextKeyPrefixes, fullTextTokenStatsSchema, getDACPathsMatch, getDACRoleHasAccessToDataItem, getDataItemDACResourcePath, getDataItemFieldValueDACResourcePath, getDriverMethodWithModifiedError, getFlattenedDACConstraints, getFullORMDACRole, getItemRelationshipDACResourcePath, getItemRelationshipOriginDACConstraint, getItemRelationshipOriginDACResourcePath, getItemRelationshipOriginDACRole, getItemTypeDACConstraint, getItemTypeDACResourcePath, getItemTypeDACRole, getORMDACResourcePath, getResourceAccessByDACRole, getTypeInfoORMRouteMap, getValueIsWildcardSignifier, handleCloudFunctionEvent, indexDocument, loadExactPositions, loadLossyIndex, lossyDdbSchema, lossyPostingsSchema, mergeDACAccessResults, mergeDACDataItemResourceAccessResultMaps, qualifyIndexField, handler as relHandler, relationEdgesSchema, removeDocument, replaceFullTextDocument, searchExact, searchLossy, searchStructured, serializeStructuredValue, setIndexBackend, setRelationalHandlerDependencies, setStructuredHandlerDependencies, storeExactPositions, storeLossyIndex, structuredDocFieldsSchema, structuredHandler, structuredRangeIndexSchema, structuredTermIndexSchema, tokenize, tokenizeLossyTrigrams };
8842
+ export { AWS, DACConstraintType, DATA_ITEM_DB_DRIVER_ERRORS, DynamoDBDataItemDBDriver, DynamoDBSupportedDataItemDBDriverEntry, ExactIndex, FullTextDdbBackend, FullTextDdbWriter, FullTextMemoryBackend, InMemoryDataItemDBDriver, InMemoryFileItemDBDriver, InMemoryFileSupportedDataItemDBDriverEntry, InMemoryItemRelationshipDBDriver, InMemorySupportedDataItemDBDriverEntry, IndexingRelationshipDriver, LossyIndex, RelationalDdbBackend, RelationalInMemoryBackend, S3FileItemDBDriver, S3SupportedFileItemDBDriverEntry, SEARCH_CAPS, SEARCH_DEFAULTS, SUPPORTED_TYPE_INFO_ORM_DB_DRIVERS, StructuredDdbBackend, StructuredDdbReader, StructuredDdbWriter, StructuredInMemoryBackend, StructuredInMemoryIndex, SupportedTypeInfoORMDBDriverNames, TYPE_INFO_ORM_API_PATH_METHOD_NAME_MAP, TYPE_INFO_ORM_ROUTE_MAP_ERRORS, TypeInfoORMService, WILDCARD_SIGNIFIER_PROTOTYPE, addRouteMapToRouteMap, addRouteToRouteMap, addRoutesToRouteMap, batchWriteWithRetry, buildExactDdbItem, buildExactDdbKey, buildExactS3Key, buildLossyDdbKey, buildLossyS3Key, buildRelationEdgeDdbItem, buildRelationEdgeDdbKey, buildStructuredDocFieldsItem, buildStructuredRangeItem, buildStructuredRangeKey, buildStructuredTermItem, buildStructuredTermKey, cleanRelationshipItem, createAwsSdkV3DynamoClient, createRelationEdgesDdbDependencies, createSearchTrace, decodeExactCursor, decodeLossyCursor, decodeRelationalCursor, decodeStructuredCursor, docTokenPositionsSchema, docTokensSchema, encodeDocKey, encodeDocMirrorKey, encodeDocTokenPositionSortKey, encodeDocTokenSortKey, encodeExactCursor, encodeLossyCursor, encodeRelationEdgePartitionKey, encodeRelationalCursor, encodeStructuredCursor, encodeTokenDocSortKey, encodeTokenKey, exactDdbSchema, exactPostingsSchema, fullTextDocMirrorSchema, fullTextKeyPrefixes, fullTextTokenStatsSchema, getDACPathsMatch, getDACRoleHasAccessToDataItem, getDataItemDACResourcePath, getDataItemFieldValueDACResourcePath, getDriverMethodWithModifiedError, getFlattenedDACConstraints, getFullORMDACRole, getItemRelationshipDACResourcePath, getItemRelationshipOriginDACConstraint, getItemRelationshipOriginDACResourcePath, getItemRelationshipOriginDACRole, getItemTypeDACConstraint, getItemTypeDACResourcePath, getItemTypeDACRole, getORMDACResourcePath, getResourceAccessByDACRole, getTypeInfoORMRouteMap, getValueIsWildcardSignifier, handleCloudFunctionEvent, handler, indexDocument, loadExactPositions, loadLossyIndex, lossyDdbSchema, lossyPostingsSchema, mergeDACAccessResults, mergeDACDataItemResourceAccessResultMaps, qualifyIndexField, relHandler, relationEdgesSchema, removeDocument, replaceFullTextDocument, resolveSearchLimits, searchExact, searchLossy, searchStructured, serializeStructuredValue, setIndexBackend, setRelationalHandlerDependencies, setStructuredHandlerDependencies, storeExactPositions, storeLossyIndex, structuredDocFieldsSchema, structuredHandler, structuredRangeIndexSchema, structuredTermIndexSchema, tokenize, tokenizeLossyTrigrams };