@aws-amplify/datastore 5.0.1-unstable.cfbde4c.0 → 5.0.1
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/{lib → dist/cjs}/authModeStrategies/defaultAuthStrategy.js +3 -1
- package/dist/cjs/authModeStrategies/defaultAuthStrategy.js.map +1 -0
- package/{lib → dist/cjs}/authModeStrategies/index.js +3 -1
- package/dist/cjs/authModeStrategies/index.js.map +1 -0
- package/{lib → dist/cjs}/authModeStrategies/multiAuthStrategy.js +3 -3
- package/dist/cjs/authModeStrategies/multiAuthStrategy.js.map +1 -0
- package/{lib → dist/cjs}/datastore/datastore.js +5 -3
- package/dist/cjs/datastore/datastore.js.map +1 -0
- package/{lib → dist/cjs}/index.js +5 -16
- package/dist/cjs/index.js.map +1 -0
- package/{lib → dist/cjs}/predicates/index.js +3 -1
- package/dist/cjs/predicates/index.js.map +1 -0
- package/{lib → dist/cjs}/predicates/next.js +3 -1
- package/dist/cjs/predicates/next.js.map +1 -0
- package/{lib → dist/cjs}/predicates/sort.js +4 -3
- package/dist/cjs/predicates/sort.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/AsyncStorageAdapter.js +5 -5
- package/dist/cjs/storage/adapter/AsyncStorageAdapter.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/AsyncStorageDatabase.js +3 -1
- package/dist/cjs/storage/adapter/AsyncStorageDatabase.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/InMemoryStore.js +3 -1
- package/dist/cjs/storage/adapter/InMemoryStore.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/InMemoryStore.native.js +5 -5
- package/dist/cjs/storage/adapter/InMemoryStore.native.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/IndexedDBAdapter.js +5 -25
- package/dist/cjs/storage/adapter/IndexedDBAdapter.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/StorageAdapterBase.js +3 -1
- package/dist/cjs/storage/adapter/StorageAdapterBase.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/getDefaultAdapter/index.js +6 -6
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.js.map +1 -0
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js +10 -0
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/index.js +3 -1
- package/dist/cjs/storage/adapter/index.js.map +1 -0
- package/{lib → dist/cjs}/storage/relationship.js +3 -1
- package/dist/cjs/storage/relationship.js.map +1 -0
- package/{lib → dist/cjs}/storage/storage.js +5 -5
- package/dist/cjs/storage/storage.js.map +1 -0
- package/{lib → dist/cjs}/sync/datastoreConnectivity.js +4 -2
- package/dist/cjs/sync/datastoreConnectivity.js.map +1 -0
- package/{lib → dist/cjs}/sync/datastoreReachability/index.js +3 -1
- package/dist/cjs/sync/datastoreReachability/index.js.map +1 -0
- package/{lib → dist/cjs}/sync/datastoreReachability/index.native.js +3 -1
- package/dist/cjs/sync/datastoreReachability/index.native.js.map +1 -0
- package/{lib → dist/cjs}/sync/index.js +6 -7
- package/dist/cjs/sync/index.js.map +1 -0
- package/{lib → dist/cjs}/sync/merger.js +3 -1
- package/dist/cjs/sync/merger.js.map +1 -0
- package/{lib → dist/cjs}/sync/outbox.js +3 -1
- package/dist/cjs/sync/outbox.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/errorMaps.js +4 -4
- package/dist/cjs/sync/processors/errorMaps.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/mutation.js +3 -1
- package/dist/cjs/sync/processors/mutation.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/subscription.js +4 -4
- package/dist/cjs/sync/processors/subscription.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/sync.js +3 -1
- package/dist/cjs/sync/processors/sync.js.map +1 -0
- package/{lib → dist/cjs}/sync/utils.js +3 -1
- package/dist/cjs/sync/utils.js.map +1 -0
- package/{lib → dist/cjs}/types.js +12 -21
- package/dist/cjs/types.js.map +1 -0
- package/{lib → dist/cjs}/util.js +3 -1
- package/dist/cjs/util.js.map +1 -0
- package/{lib-esm/authModeStrategies/defaultAuthStrategy.js → dist/esm/authModeStrategies/defaultAuthStrategy.mjs} +4 -1
- package/dist/esm/authModeStrategies/defaultAuthStrategy.mjs.map +1 -0
- package/dist/esm/authModeStrategies/index.mjs +3 -0
- package/dist/esm/authModeStrategies/index.mjs.map +1 -0
- package/{lib-esm/authModeStrategies/multiAuthStrategy.js → dist/esm/authModeStrategies/multiAuthStrategy.mjs} +7 -5
- package/dist/esm/authModeStrategies/multiAuthStrategy.mjs.map +1 -0
- package/{lib-esm/datastore/datastore.js → dist/esm/datastore/datastore.mjs} +30 -26
- package/dist/esm/datastore/datastore.mjs.map +1 -0
- package/dist/esm/index.mjs +19 -0
- package/dist/esm/index.mjs.map +1 -0
- package/{lib-esm/predicates/index.js → dist/esm/predicates/index.mjs} +10 -7
- package/dist/esm/predicates/index.mjs.map +1 -0
- package/{lib-esm/predicates/next.js → dist/esm/predicates/next.mjs} +15 -11
- package/dist/esm/predicates/next.mjs.map +1 -0
- package/{lib-esm/predicates/sort.js → dist/esm/predicates/sort.mjs} +3 -2
- package/dist/esm/predicates/sort.mjs.map +1 -0
- package/{lib-esm/storage/adapter/AsyncStorageAdapter.js → dist/esm/storage/adapter/AsyncStorageAdapter.mjs} +10 -6
- package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs.map +1 -0
- package/{lib-esm/storage/adapter/AsyncStorageDatabase.js → dist/esm/storage/adapter/AsyncStorageDatabase.mjs} +7 -4
- package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs.map +1 -0
- package/{lib-esm/storage/adapter/InMemoryStore.js → dist/esm/storage/adapter/InMemoryStore.mjs} +5 -2
- package/dist/esm/storage/adapter/InMemoryStore.mjs.map +1 -0
- package/{lib-esm/storage/adapter/InMemoryStore.native.js → dist/esm/storage/adapter/InMemoryStore.native.mjs} +6 -2
- package/dist/esm/storage/adapter/InMemoryStore.native.mjs.map +1 -0
- package/{lib-esm/storage/adapter/IndexedDBAdapter.js → dist/esm/storage/adapter/IndexedDBAdapter.mjs} +10 -6
- package/dist/esm/storage/adapter/IndexedDBAdapter.mjs.map +1 -0
- package/{lib-esm/storage/adapter/StorageAdapterBase.js → dist/esm/storage/adapter/StorageAdapterBase.mjs} +9 -5
- package/dist/esm/storage/adapter/StorageAdapterBase.mjs.map +1 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs +13 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs.map +1 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs +8 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs.map +1 -0
- package/dist/esm/storage/adapter/index.mjs +2 -0
- package/dist/esm/storage/adapter/index.mjs.map +1 -0
- package/{lib-esm/storage/relationship.js → dist/esm/storage/relationship.mjs} +6 -2
- package/dist/esm/storage/relationship.mjs.map +1 -0
- package/{lib-esm/storage/storage.js → dist/esm/storage/storage.mjs} +11 -8
- package/dist/esm/storage/storage.mjs.map +1 -0
- package/{lib-esm/sync/datastoreConnectivity.js → dist/esm/sync/datastoreConnectivity.mjs} +9 -5
- package/dist/esm/sync/datastoreConnectivity.mjs.map +1 -0
- package/dist/esm/sync/datastoreReachability/index.d.ts +1 -0
- package/{lib-esm/sync/datastoreReachability/index.js → dist/esm/sync/datastoreReachability/index.mjs} +6 -2
- package/dist/esm/sync/datastoreReachability/index.mjs.map +1 -0
- package/dist/esm/sync/datastoreReachability/index.native.d.ts +1 -0
- package/{lib-esm/sync/datastoreReachability/index.native.js → dist/esm/sync/datastoreReachability/index.native.mjs} +7 -3
- package/dist/esm/sync/datastoreReachability/index.native.mjs.map +1 -0
- package/{lib-esm/sync/index.js → dist/esm/sync/index.mjs} +24 -21
- package/dist/esm/sync/index.mjs.map +1 -0
- package/{lib-esm/sync/merger.js → dist/esm/sync/merger.mjs} +5 -2
- package/dist/esm/sync/merger.mjs.map +1 -0
- package/{lib-esm/sync/outbox.js → dist/esm/sync/outbox.mjs} +7 -4
- package/dist/esm/sync/outbox.mjs.map +1 -0
- package/{lib-esm/sync/processors/errorMaps.js → dist/esm/sync/processors/errorMaps.mjs} +13 -11
- package/dist/esm/sync/processors/errorMaps.mjs.map +1 -0
- package/{lib → dist/esm}/sync/processors/mutation.d.ts +1 -1
- package/{lib-esm/sync/processors/mutation.js → dist/esm/sync/processors/mutation.mjs} +10 -7
- package/dist/esm/sync/processors/mutation.mjs.map +1 -0
- package/{lib-esm/sync/processors/subscription.js → dist/esm/sync/processors/subscription.mjs} +18 -17
- package/dist/esm/sync/processors/subscription.mjs.map +1 -0
- package/{lib-esm/sync/processors/sync.js → dist/esm/sync/processors/sync.mjs} +8 -5
- package/dist/esm/sync/processors/sync.mjs.map +1 -0
- package/{lib-esm/sync/utils.js → dist/esm/sync/utils.mjs} +30 -26
- package/dist/esm/sync/utils.mjs.map +1 -0
- package/{lib-esm/types.js → dist/esm/types.mjs} +34 -30
- package/dist/esm/types.mjs.map +1 -0
- package/{lib-esm/util.js → dist/esm/util.mjs} +61 -57
- package/dist/esm/util.mjs.map +1 -0
- package/package.json +133 -137
- package/lib/authModeStrategies/defaultAuthStrategy.d.ts +0 -2
- package/lib/authModeStrategies/index.d.ts +0 -2
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +0 -13
- package/lib/datastore/datastore.d.ts +0 -231
- package/lib/index.d.ts +0 -16
- package/lib/predicates/index.d.ts +0 -100
- package/lib/predicates/next.d.ts +0 -317
- package/lib/predicates/sort.d.ts +0 -8
- package/lib/ssr/index.d.ts +0 -3
- package/lib/ssr/index.js +0 -18
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +0 -40
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +0 -39
- package/lib/storage/adapter/InMemoryStore.d.ts +0 -11
- package/lib/storage/adapter/InMemoryStore.native.d.ts +0 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +0 -70
- package/lib/storage/adapter/StorageAdapterBase.d.ts +0 -134
- package/lib/storage/adapter/getDefaultAdapter/index.d.ts +0 -3
- package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -3
- package/lib/storage/adapter/getDefaultAdapter/index.native.js +0 -10
- package/lib/storage/adapter/index.d.ts +0 -9
- package/lib/storage/relationship.d.ts +0 -149
- package/lib/storage/storage.d.ts +0 -50
- package/lib/sync/datastoreConnectivity.d.ts +0 -16
- package/lib/sync/datastoreReachability/index.d.ts +0 -1
- package/lib/sync/datastoreReachability/index.native.d.ts +0 -1
- package/lib/sync/index.d.ts +0 -103
- package/lib/sync/merger.d.ts +0 -17
- package/lib/sync/outbox.d.ts +0 -27
- package/lib/sync/processors/errorMaps.d.ts +0 -17
- package/lib/sync/processors/subscription.d.ts +0 -42
- package/lib/sync/processors/sync.d.ts +0 -28
- package/lib/sync/utils.d.ts +0 -107
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/lib/types.d.ts +0 -641
- package/lib/util.d.ts +0 -196
- package/lib-esm/authModeStrategies/index.js +0 -4
- package/lib-esm/index.js +0 -14
- package/lib-esm/ssr/index.d.ts +0 -3
- package/lib-esm/ssr/index.js +0 -13
- package/lib-esm/storage/adapter/getDefaultAdapter/index.js +0 -10
- package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js +0 -5
- package/lib-esm/storage/adapter/index.js +0 -1
- package/lib-esm/sync/datastoreReachability/index.d.ts +0 -1
- package/lib-esm/sync/datastoreReachability/index.native.d.ts +0 -1
- package/lib-esm/sync/processors/mutation.d.ts +0 -67
- package/lib-esm/tsconfig.tsbuildinfo +0 -1
- package/src/ssr/index.ts +0 -27
- package/ssr/package.json +0 -8
- /package/{lib-esm → dist/esm}/authModeStrategies/defaultAuthStrategy.d.ts +0 -0
- /package/{lib-esm → dist/esm}/authModeStrategies/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/authModeStrategies/multiAuthStrategy.d.ts +0 -0
- /package/{lib-esm → dist/esm}/datastore/datastore.d.ts +0 -0
- /package/{lib-esm → dist/esm}/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/predicates/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/predicates/next.d.ts +0 -0
- /package/{lib-esm → dist/esm}/predicates/sort.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/AsyncStorageAdapter.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/AsyncStorageDatabase.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/InMemoryStore.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/InMemoryStore.native.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/IndexedDBAdapter.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/StorageAdapterBase.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/getDefaultAdapter/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/relationship.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/storage.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/datastoreConnectivity.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/merger.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/outbox.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/processors/errorMaps.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/processors/subscription.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/processors/sync.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/utils.d.ts +0 -0
- /package/{lib-esm → dist/esm}/types.d.ts +0 -0
- /package/{lib-esm → dist/esm}/util.d.ts +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
1
|
import { monotonicFactory } from 'ulid';
|
|
4
|
-
import { amplifyUuid, AmplifyUrl, WordArray
|
|
2
|
+
import { amplifyUuid, AmplifyUrl, WordArray } from '@aws-amplify/core/internals/utils';
|
|
5
3
|
import { produce, applyPatches } from 'immer';
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
|
|
4
|
+
import { isPredicateObj, isPredicateGroup, SortDirection, LimitTimerRaceResolvedValues, isModelAttributeCompositeKey, isModelAttributeKey, isModelAttributePrimaryKey } from './types.mjs';
|
|
5
|
+
import './predicates/index.mjs';
|
|
6
|
+
import { ModelSortPredicateCreator } from './predicates/sort.mjs';
|
|
7
|
+
|
|
8
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
9
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
10
|
+
const ID = 'id';
|
|
9
11
|
/**
|
|
10
12
|
* Used by the Async Storage Adapter to concatenate key values
|
|
11
13
|
* for a record. For instance, if a model has the following keys:
|
|
@@ -13,20 +15,20 @@ export const ID = 'id';
|
|
|
13
15
|
* we concatenate the `customId` and `createdAt` as:
|
|
14
16
|
* `12-234-5#2022-09-28T00:00:00.000Z`
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
const DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR = '#';
|
|
17
19
|
/**
|
|
18
20
|
* Used for generating spinal-cased index name from an array of
|
|
19
21
|
* key field names.
|
|
20
22
|
* E.g. for keys `[id, title]` => 'id-title'
|
|
21
23
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
const IDENTIFIER_KEY_SEPARATOR = '-';
|
|
25
|
+
const errorMessages = {
|
|
24
26
|
idEmptyString: 'An index field cannot contain an empty string value',
|
|
25
27
|
queryByPkWithCompositeKeyPresent: 'Models with composite primary keys cannot be queried by a single key value. Use object literal syntax for composite keys instead: https://docs.amplify.aws/lib/datastore/advanced-workflows/q/platform/js/#querying-records-with-custom-primary-keys',
|
|
26
28
|
deleteByPkWithCompositeKeyPresent: 'Models with composite primary keys cannot be deleted by a single key value, unless using a predicate. Use object literal syntax for composite keys instead: https://docs.amplify.aws/lib/datastore/advanced-workflows/q/platform/js/#querying-records-with-custom-primary-keys',
|
|
27
29
|
observeWithObjectLiteral: 'Object literal syntax cannot be used with observe. Use a predicate instead: https://docs.amplify.aws/lib/datastore/data-access/q/platform/js/#predicates',
|
|
28
30
|
};
|
|
29
|
-
|
|
31
|
+
var NAMESPACES;
|
|
30
32
|
(function (NAMESPACES) {
|
|
31
33
|
NAMESPACES["DATASTORE"] = "datastore";
|
|
32
34
|
NAMESPACES["USER"] = "user";
|
|
@@ -37,16 +39,15 @@ const DATASTORE = NAMESPACES.DATASTORE;
|
|
|
37
39
|
const USER = NAMESPACES.USER;
|
|
38
40
|
const SYNC = NAMESPACES.SYNC;
|
|
39
41
|
const STORAGE = NAMESPACES.STORAGE;
|
|
40
|
-
|
|
41
|
-
export const exhaustiveCheck = (obj, throwOnError = true) => {
|
|
42
|
+
const exhaustiveCheck = (obj, throwOnError = true) => {
|
|
42
43
|
if (throwOnError) {
|
|
43
44
|
throw new Error(`Invalid ${obj}`);
|
|
44
45
|
}
|
|
45
46
|
};
|
|
46
|
-
|
|
47
|
+
const isNullOrUndefined = (val) => {
|
|
47
48
|
return typeof val === 'undefined' || val === undefined || val === null;
|
|
48
49
|
};
|
|
49
|
-
|
|
50
|
+
const validatePredicate = (model, groupType, predicatesOrGroups) => {
|
|
50
51
|
let filterType;
|
|
51
52
|
let isNegation = false;
|
|
52
53
|
if (predicatesOrGroups.length === 0) {
|
|
@@ -80,7 +81,7 @@ export const validatePredicate = (model, groupType, predicatesOrGroups) => {
|
|
|
80
81
|
});
|
|
81
82
|
return isNegation ? !result : result;
|
|
82
83
|
};
|
|
83
|
-
|
|
84
|
+
const validatePredicateField = (value, operator, operand) => {
|
|
84
85
|
switch (operator) {
|
|
85
86
|
case 'ne':
|
|
86
87
|
return value !== operand;
|
|
@@ -110,18 +111,18 @@ export const validatePredicateField = (value, operator, operand) => {
|
|
|
110
111
|
return false;
|
|
111
112
|
}
|
|
112
113
|
};
|
|
113
|
-
|
|
114
|
+
const isModelConstructor = (obj) => {
|
|
114
115
|
return (obj && typeof obj.copyOf === 'function');
|
|
115
116
|
};
|
|
116
117
|
const nonModelClasses = new WeakSet();
|
|
117
|
-
|
|
118
|
+
function registerNonModelClass(clazz) {
|
|
118
119
|
nonModelClasses.add(clazz);
|
|
119
120
|
}
|
|
120
|
-
|
|
121
|
+
const isNonModelConstructor = (obj) => {
|
|
121
122
|
return nonModelClasses.has(obj);
|
|
122
123
|
};
|
|
123
124
|
const topologicallySortedModels = new WeakMap();
|
|
124
|
-
|
|
125
|
+
const traverseModel = (srcModelName, instance, namespace, modelInstanceCreator, getModelConstructorByModelName) => {
|
|
125
126
|
const modelConstructor = getModelConstructorByModelName(namespace.name, srcModelName);
|
|
126
127
|
const result = [];
|
|
127
128
|
const newInstance = modelConstructor.copyOf(instance, () => { });
|
|
@@ -140,7 +141,7 @@ export const traverseModel = (srcModelName, instance, namespace, modelInstanceCr
|
|
|
140
141
|
return result;
|
|
141
142
|
};
|
|
142
143
|
let privateModeCheckResult;
|
|
143
|
-
|
|
144
|
+
const isPrivateMode = () => {
|
|
144
145
|
return new Promise(resolve => {
|
|
145
146
|
const dbname = amplifyUuid();
|
|
146
147
|
let db;
|
|
@@ -180,7 +181,7 @@ let safariCompatabilityModeResult;
|
|
|
180
181
|
* In all known, modern Safari browsers as of Q4 2022, the query against an index like
|
|
181
182
|
* this will *always* return `undefined`. So, the index needs to be created as a scalar.
|
|
182
183
|
*/
|
|
183
|
-
|
|
184
|
+
const isSafariCompatabilityMode = async () => {
|
|
184
185
|
try {
|
|
185
186
|
const dbName = amplifyUuid();
|
|
186
187
|
const storeName = 'indexedDBFeatureProbeStore';
|
|
@@ -270,7 +271,7 @@ const randomBytes = (nBytes) => {
|
|
|
270
271
|
return getBytesFromHex(str);
|
|
271
272
|
};
|
|
272
273
|
const prng = () => randomBytes(1)[0] / 0xff;
|
|
273
|
-
|
|
274
|
+
function monotonicUlidFactory(seed) {
|
|
274
275
|
const ulid = monotonicFactory(prng);
|
|
275
276
|
return () => {
|
|
276
277
|
return ulid(seed);
|
|
@@ -288,7 +289,7 @@ export function monotonicUlidFactory(seed) {
|
|
|
288
289
|
*
|
|
289
290
|
* See: https://developer.mozilla.org/en-US/docs/Web/API/Performance/now#Example
|
|
290
291
|
*/
|
|
291
|
-
|
|
292
|
+
function getNow() {
|
|
292
293
|
if (typeof performance !== 'undefined' &&
|
|
293
294
|
performance &&
|
|
294
295
|
typeof performance.now === 'function') {
|
|
@@ -298,7 +299,7 @@ export function getNow() {
|
|
|
298
299
|
return Date.now();
|
|
299
300
|
}
|
|
300
301
|
}
|
|
301
|
-
|
|
302
|
+
function sortCompareFunction(sortPredicates) {
|
|
302
303
|
return function compareFunction(a, b) {
|
|
303
304
|
// enable multi-field sort by iterating over predicates until
|
|
304
305
|
// a comparison returns -1 or 1
|
|
@@ -321,7 +322,7 @@ export function sortCompareFunction(sortPredicates) {
|
|
|
321
322
|
// returns true if equal by value
|
|
322
323
|
// if nullish is true, treat undefined and null values as equal
|
|
323
324
|
// to normalize for GQL response values for undefined fields
|
|
324
|
-
|
|
325
|
+
function valuesEqual(valA, valB, nullish = false) {
|
|
325
326
|
let a = valA;
|
|
326
327
|
let b = valB;
|
|
327
328
|
const nullishCompare = (_a, _b) => {
|
|
@@ -378,7 +379,7 @@ export function valuesEqual(valA, valB, nullish = false) {
|
|
|
378
379
|
* @param pagination - A definition of the page to extract.
|
|
379
380
|
* @returns This items from `records` matching the `pagination` definition.
|
|
380
381
|
*/
|
|
381
|
-
|
|
382
|
+
function inMemoryPagination(records, pagination) {
|
|
382
383
|
if (pagination && records.length > 1) {
|
|
383
384
|
if (pagination.sort) {
|
|
384
385
|
const sortPredicates = ModelSortPredicateCreator.getPredicates(pagination.sort);
|
|
@@ -401,7 +402,7 @@ export function inMemoryPagination(records, pagination) {
|
|
|
401
402
|
* return Promise<boolean>: `true` for a matching item, `false` otherwise.
|
|
402
403
|
* @returns A `Promise<boolean>`, `true` if "some" items match; `false` otherwise.
|
|
403
404
|
*/
|
|
404
|
-
|
|
405
|
+
async function asyncSome(items, matches) {
|
|
405
406
|
for (const item of items) {
|
|
406
407
|
if (await matches(item)) {
|
|
407
408
|
return true;
|
|
@@ -416,7 +417,7 @@ export async function asyncSome(items, matches) {
|
|
|
416
417
|
* return Promise<boolean>: `true` for a matching item, `false` otherwise.
|
|
417
418
|
* @returns A `Promise<boolean>`, `true` if every item matches; `false` otherwise.
|
|
418
419
|
*/
|
|
419
|
-
|
|
420
|
+
async function asyncEvery(items, matches) {
|
|
420
421
|
for (const item of items) {
|
|
421
422
|
if (!(await matches(item))) {
|
|
422
423
|
return false;
|
|
@@ -432,7 +433,7 @@ export async function asyncEvery(items, matches) {
|
|
|
432
433
|
* return Promise<boolean>: `true` for a matching item, `false` otherwise.
|
|
433
434
|
* @returns A `Promise<T>` of matching items.
|
|
434
435
|
*/
|
|
435
|
-
|
|
436
|
+
async function asyncFilter(items, matches) {
|
|
436
437
|
const results = [];
|
|
437
438
|
for (const item of items) {
|
|
438
439
|
if (await matches(item)) {
|
|
@@ -441,22 +442,22 @@ export async function asyncFilter(items, matches) {
|
|
|
441
442
|
}
|
|
442
443
|
return results;
|
|
443
444
|
}
|
|
444
|
-
|
|
445
|
+
const isAWSDate = (val) => {
|
|
445
446
|
return !!/^\d{4}-\d{2}-\d{2}(Z|[+-]\d{2}:\d{2}($|:\d{2}))?$/.exec(val);
|
|
446
447
|
};
|
|
447
|
-
|
|
448
|
+
const isAWSTime = (val) => {
|
|
448
449
|
return !!/^\d{2}:\d{2}(:\d{2}(.\d+)?)?(Z|[+-]\d{2}:\d{2}($|:\d{2}))?$/.exec(val);
|
|
449
450
|
};
|
|
450
|
-
|
|
451
|
+
const isAWSDateTime = (val) => {
|
|
451
452
|
return !!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(.\d+)?)?(Z|[+-]\d{2}:\d{2}($|:\d{2}))?$/.exec(val);
|
|
452
453
|
};
|
|
453
|
-
|
|
454
|
+
const isAWSTimestamp = (val) => {
|
|
454
455
|
return !!/^\d+$/.exec(String(val));
|
|
455
456
|
};
|
|
456
|
-
|
|
457
|
+
const isAWSEmail = (val) => {
|
|
457
458
|
return !!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.exec(val);
|
|
458
459
|
};
|
|
459
|
-
|
|
460
|
+
const isAWSJSON = (val) => {
|
|
460
461
|
try {
|
|
461
462
|
JSON.parse(val);
|
|
462
463
|
return true;
|
|
@@ -465,7 +466,7 @@ export const isAWSJSON = (val) => {
|
|
|
465
466
|
return false;
|
|
466
467
|
}
|
|
467
468
|
};
|
|
468
|
-
|
|
469
|
+
const isAWSURL = (val) => {
|
|
469
470
|
try {
|
|
470
471
|
return !!new AmplifyUrl(val);
|
|
471
472
|
}
|
|
@@ -473,13 +474,13 @@ export const isAWSURL = (val) => {
|
|
|
473
474
|
return false;
|
|
474
475
|
}
|
|
475
476
|
};
|
|
476
|
-
|
|
477
|
+
const isAWSPhone = (val) => {
|
|
477
478
|
return !!/^\+?\d[\d\s-]+$/.exec(val);
|
|
478
479
|
};
|
|
479
|
-
|
|
480
|
+
const isAWSIPAddress = (val) => {
|
|
480
481
|
return !!/((^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$)|(^((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?$))$/.exec(val);
|
|
481
482
|
};
|
|
482
|
-
|
|
483
|
+
class DeferredPromise {
|
|
483
484
|
constructor() {
|
|
484
485
|
const self = this;
|
|
485
486
|
this.promise = new Promise((resolve, reject) => {
|
|
@@ -488,7 +489,7 @@ export class DeferredPromise {
|
|
|
488
489
|
});
|
|
489
490
|
}
|
|
490
491
|
}
|
|
491
|
-
|
|
492
|
+
class DeferredCallbackResolver {
|
|
492
493
|
constructor(options) {
|
|
493
494
|
this.limitPromise = new DeferredPromise();
|
|
494
495
|
this.raceInFlight = false;
|
|
@@ -557,7 +558,7 @@ export class DeferredCallbackResolver {
|
|
|
557
558
|
* @param newPatches immer produce patch list (will take precedence)
|
|
558
559
|
* @return merged patches
|
|
559
560
|
*/
|
|
560
|
-
|
|
561
|
+
function mergePatches(originalSource, oldPatches, newPatches) {
|
|
561
562
|
const patchesToMerge = oldPatches.concat(newPatches);
|
|
562
563
|
let patches;
|
|
563
564
|
produce(originalSource, draft => {
|
|
@@ -567,7 +568,7 @@ export function mergePatches(originalSource, oldPatches, newPatches) {
|
|
|
567
568
|
});
|
|
568
569
|
return patches;
|
|
569
570
|
}
|
|
570
|
-
|
|
571
|
+
const getStorename = (namespace, modelName) => {
|
|
571
572
|
const storeName = `${namespace}_${modelName}`;
|
|
572
573
|
return storeName;
|
|
573
574
|
};
|
|
@@ -604,7 +605,7 @@ export const getStorename = (namespace, modelName) => {
|
|
|
604
605
|
|
|
605
606
|
See 'processCompositeKeys' test in util.test.ts for more examples
|
|
606
607
|
*/
|
|
607
|
-
|
|
608
|
+
const processCompositeKeys = (attributes) => {
|
|
608
609
|
const extractCompositeSortKey = ({ properties: {
|
|
609
610
|
// ignore the HK (fields[0]) we only need to include the composite sort key fields[1...n]
|
|
610
611
|
fields: [, ...sortKeyFields], }, }) => sortKeyFields;
|
|
@@ -645,28 +646,28 @@ export const processCompositeKeys = (attributes) => {
|
|
|
645
646
|
const combined = combineIntersecting(initial);
|
|
646
647
|
return combined;
|
|
647
648
|
};
|
|
648
|
-
|
|
649
|
+
const extractKeyIfExists = (modelDefinition) => {
|
|
649
650
|
const keyAttribute = modelDefinition?.attributes?.find(isModelAttributeKey);
|
|
650
651
|
return keyAttribute;
|
|
651
652
|
};
|
|
652
|
-
|
|
653
|
+
const extractPrimaryKeyFieldNames = (modelDefinition) => {
|
|
653
654
|
const keyAttribute = extractKeyIfExists(modelDefinition);
|
|
654
655
|
if (keyAttribute && isModelAttributePrimaryKey(keyAttribute)) {
|
|
655
656
|
return keyAttribute.properties.fields;
|
|
656
657
|
}
|
|
657
658
|
return [ID];
|
|
658
659
|
};
|
|
659
|
-
|
|
660
|
+
const extractPrimaryKeyValues = (model, keyFields) => {
|
|
660
661
|
return keyFields.map(key => model[key]);
|
|
661
662
|
};
|
|
662
|
-
|
|
663
|
+
const extractPrimaryKeysAndValues = (model, keyFields) => {
|
|
663
664
|
const primaryKeysAndValues = {};
|
|
664
665
|
keyFields.forEach(key => (primaryKeysAndValues[key] = model[key]));
|
|
665
666
|
return primaryKeysAndValues;
|
|
666
667
|
};
|
|
667
668
|
// IdentifierFields<ManagedIdentifier>
|
|
668
669
|
// Default behavior without explicit @primaryKey defined
|
|
669
|
-
|
|
670
|
+
const isIdManaged = (modelDefinition) => {
|
|
670
671
|
const keyAttribute = extractKeyIfExists(modelDefinition);
|
|
671
672
|
if (keyAttribute && isModelAttributePrimaryKey(keyAttribute)) {
|
|
672
673
|
return false;
|
|
@@ -675,14 +676,14 @@ export const isIdManaged = (modelDefinition) => {
|
|
|
675
676
|
};
|
|
676
677
|
// IdentifierFields<OptionallyManagedIdentifier>
|
|
677
678
|
// @primaryKey with explicit `id` in the PK. Single key or composite
|
|
678
|
-
|
|
679
|
+
const isIdOptionallyManaged = (modelDefinition) => {
|
|
679
680
|
const keyAttribute = extractKeyIfExists(modelDefinition);
|
|
680
681
|
if (keyAttribute && isModelAttributePrimaryKey(keyAttribute)) {
|
|
681
682
|
return keyAttribute.properties.fields[0] === ID;
|
|
682
683
|
}
|
|
683
684
|
return false;
|
|
684
685
|
};
|
|
685
|
-
|
|
686
|
+
const establishRelationAndKeys = (namespace) => {
|
|
686
687
|
const relationship = {};
|
|
687
688
|
const keys = {};
|
|
688
689
|
Object.keys(namespace.models).forEach((mKey) => {
|
|
@@ -746,7 +747,7 @@ export const establishRelationAndKeys = (namespace) => {
|
|
|
746
747
|
});
|
|
747
748
|
return [relationship, keys];
|
|
748
749
|
};
|
|
749
|
-
|
|
750
|
+
const getIndex = (rel, src) => {
|
|
750
751
|
let indexName;
|
|
751
752
|
rel.some((relItem) => {
|
|
752
753
|
if (relItem.modelName === src) {
|
|
@@ -757,7 +758,7 @@ export const getIndex = (rel, src) => {
|
|
|
757
758
|
});
|
|
758
759
|
return indexName;
|
|
759
760
|
};
|
|
760
|
-
|
|
761
|
+
const getIndexFromAssociation = (indexes, src) => {
|
|
761
762
|
let indexName;
|
|
762
763
|
if (Array.isArray(src)) {
|
|
763
764
|
indexName = indexNameFromKeys(src);
|
|
@@ -775,7 +776,7 @@ the single field `targetName` has been replaced with an array of `targetNames`.
|
|
|
775
776
|
* @param src {RelationType | ModelAssociation | undefined}
|
|
776
777
|
* @returns array of targetNames, or `undefined`
|
|
777
778
|
*/
|
|
778
|
-
|
|
779
|
+
const extractTargetNamesFromSrc = (src) => {
|
|
779
780
|
const targetName = src?.targetName;
|
|
780
781
|
const targetNames = src?.targetNames;
|
|
781
782
|
if (Array.isArray(targetNames)) {
|
|
@@ -790,7 +791,7 @@ export const extractTargetNamesFromSrc = (src) => {
|
|
|
790
791
|
};
|
|
791
792
|
// Generates spinal-cased index name from an array of key field names
|
|
792
793
|
// E.g. for keys `[id, title]` => 'id-title'
|
|
793
|
-
|
|
794
|
+
const indexNameFromKeys = (keys) => {
|
|
794
795
|
return keys.reduce((prev, cur, idx) => {
|
|
795
796
|
if (idx === 0) {
|
|
796
797
|
return cur;
|
|
@@ -798,14 +799,14 @@ export const indexNameFromKeys = (keys) => {
|
|
|
798
799
|
return `${prev}${IDENTIFIER_KEY_SEPARATOR}${cur}`;
|
|
799
800
|
}, '');
|
|
800
801
|
};
|
|
801
|
-
|
|
802
|
+
const keysEqual = (keysA, keysB) => {
|
|
802
803
|
if (keysA.length !== keysB.length) {
|
|
803
804
|
return false;
|
|
804
805
|
}
|
|
805
806
|
return keysA.every((key, idx) => key === keysB[idx]);
|
|
806
807
|
};
|
|
807
808
|
// Returns primary keys for a model
|
|
808
|
-
|
|
809
|
+
const getIndexKeys = (namespace, modelName) => {
|
|
809
810
|
const keyPath = namespace?.keys?.[modelName]?.primaryKey;
|
|
810
811
|
if (keyPath) {
|
|
811
812
|
return keyPath;
|
|
@@ -825,7 +826,7 @@ export const getIndexKeys = (namespace, modelName) => {
|
|
|
825
826
|
* @param definition modelDefinition to inspect.
|
|
826
827
|
* @returns An object mapping `createdAt` and `updatedAt` to their field names.
|
|
827
828
|
*/
|
|
828
|
-
|
|
829
|
+
const getTimestampFields = (definition) => {
|
|
829
830
|
const modelAttributes = definition.attributes?.find(attr => attr.type === 'model');
|
|
830
831
|
const timestampFieldsMap = modelAttributes?.properties?.timestamps;
|
|
831
832
|
const defaultFields = {
|
|
@@ -838,3 +839,6 @@ export const getTimestampFields = (definition) => {
|
|
|
838
839
|
...customFields,
|
|
839
840
|
};
|
|
840
841
|
};
|
|
842
|
+
|
|
843
|
+
export { DATASTORE, DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, DeferredCallbackResolver, DeferredPromise, ID, IDENTIFIER_KEY_SEPARATOR, NAMESPACES, STORAGE, SYNC, USER, asyncEvery, asyncFilter, asyncSome, errorMessages, establishRelationAndKeys, exhaustiveCheck, extractKeyIfExists, extractPrimaryKeyFieldNames, extractPrimaryKeyValues, extractPrimaryKeysAndValues, extractTargetNamesFromSrc, getIndex, getIndexFromAssociation, getIndexKeys, getNow, getStorename, getTimestampFields, inMemoryPagination, indexNameFromKeys, isAWSDate, isAWSDateTime, isAWSEmail, isAWSIPAddress, isAWSJSON, isAWSPhone, isAWSTime, isAWSTimestamp, isAWSURL, isIdManaged, isIdOptionallyManaged, isModelConstructor, isNonModelConstructor, isNullOrUndefined, isPrivateMode, isSafariCompatabilityMode, keysEqual, mergePatches, monotonicUlidFactory, processCompositeKeys, registerNonModelClass, sortCompareFunction, traverseModel, validatePredicate, validatePredicateField, valuesEqual };
|
|
844
|
+
//# sourceMappingURL=util.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.mjs","sources":["../../src/util.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { monotonicFactory } from 'ulid';\nimport { amplifyUuid, AmplifyUrl, WordArray, } from '@aws-amplify/core/internals/utils';\nimport { produce, applyPatches } from 'immer';\nimport { isPredicateGroup, isPredicateObj, SortDirection, isModelAttributeKey, isModelAttributePrimaryKey, isModelAttributeCompositeKey, LimitTimerRaceResolvedValues, } from './types';\nimport { ModelSortPredicateCreator } from './predicates';\nexport const ID = 'id';\n/**\n * Used by the Async Storage Adapter to concatenate key values\n * for a record. For instance, if a model has the following keys:\n * `customId: ID! @primaryKey(sortKeyFields: [\"createdAt\"])`,\n * we concatenate the `customId` and `createdAt` as:\n * `12-234-5#2022-09-28T00:00:00.000Z`\n */\nexport const DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR = '#';\n/**\n * Used for generating spinal-cased index name from an array of\n * key field names.\n * E.g. for keys `[id, title]` => 'id-title'\n */\nexport const IDENTIFIER_KEY_SEPARATOR = '-';\nexport const errorMessages = {\n idEmptyString: 'An index field cannot contain an empty string value',\n queryByPkWithCompositeKeyPresent: 'Models with composite primary keys cannot be queried by a single key value. Use object literal syntax for composite keys instead: https://docs.amplify.aws/lib/datastore/advanced-workflows/q/platform/js/#querying-records-with-custom-primary-keys',\n deleteByPkWithCompositeKeyPresent: 'Models with composite primary keys cannot be deleted by a single key value, unless using a predicate. Use object literal syntax for composite keys instead: https://docs.amplify.aws/lib/datastore/advanced-workflows/q/platform/js/#querying-records-with-custom-primary-keys',\n observeWithObjectLiteral: 'Object literal syntax cannot be used with observe. Use a predicate instead: https://docs.amplify.aws/lib/datastore/data-access/q/platform/js/#predicates',\n};\nexport var NAMESPACES;\n(function (NAMESPACES) {\n NAMESPACES[\"DATASTORE\"] = \"datastore\";\n NAMESPACES[\"USER\"] = \"user\";\n NAMESPACES[\"SYNC\"] = \"sync\";\n NAMESPACES[\"STORAGE\"] = \"storage\";\n})(NAMESPACES || (NAMESPACES = {}));\nconst DATASTORE = NAMESPACES.DATASTORE;\nconst USER = NAMESPACES.USER;\nconst SYNC = NAMESPACES.SYNC;\nconst STORAGE = NAMESPACES.STORAGE;\nexport { USER, SYNC, STORAGE, DATASTORE };\nexport const exhaustiveCheck = (obj, throwOnError = true) => {\n if (throwOnError) {\n throw new Error(`Invalid ${obj}`);\n }\n};\nexport const isNullOrUndefined = (val) => {\n return typeof val === 'undefined' || val === undefined || val === null;\n};\nexport const validatePredicate = (model, groupType, predicatesOrGroups) => {\n let filterType;\n let isNegation = false;\n if (predicatesOrGroups.length === 0) {\n return true;\n }\n switch (groupType) {\n case 'not':\n filterType = 'every';\n isNegation = true;\n break;\n case 'and':\n filterType = 'every';\n break;\n case 'or':\n filterType = 'some';\n break;\n default:\n throw new Error(`Invalid ${groupType}`);\n }\n const result = predicatesOrGroups[filterType](predicateOrGroup => {\n if (isPredicateObj(predicateOrGroup)) {\n const { field, operator, operand } = predicateOrGroup;\n const value = model[field];\n return validatePredicateField(value, operator, operand);\n }\n if (isPredicateGroup(predicateOrGroup)) {\n const { type, predicates } = predicateOrGroup;\n return validatePredicate(model, type, predicates);\n }\n throw new Error('Not a predicate or group');\n });\n return isNegation ? !result : result;\n};\nexport const validatePredicateField = (value, operator, operand) => {\n switch (operator) {\n case 'ne':\n return value !== operand;\n case 'eq':\n return value === operand;\n case 'le':\n return value <= operand;\n case 'lt':\n return value < operand;\n case 'ge':\n return value >= operand;\n case 'gt':\n return value > operand;\n case 'between':\n const [min, max] = operand;\n return value >= min && value <= max;\n case 'beginsWith':\n return (!isNullOrUndefined(value) &&\n value.startsWith(operand));\n case 'contains':\n return (!isNullOrUndefined(value) &&\n value.indexOf(operand) > -1);\n case 'notContains':\n return (isNullOrUndefined(value) ||\n value.indexOf(operand) === -1);\n default:\n return false;\n }\n};\nexport const isModelConstructor = (obj) => {\n return (obj && typeof obj.copyOf === 'function');\n};\nconst nonModelClasses = new WeakSet();\nexport function registerNonModelClass(clazz) {\n nonModelClasses.add(clazz);\n}\nexport const isNonModelConstructor = (obj) => {\n return nonModelClasses.has(obj);\n};\nconst topologicallySortedModels = new WeakMap();\nexport const traverseModel = (srcModelName, instance, namespace, modelInstanceCreator, getModelConstructorByModelName) => {\n const modelConstructor = getModelConstructorByModelName(namespace.name, srcModelName);\n const result = [];\n const newInstance = modelConstructor.copyOf(instance, () => { });\n result.unshift({\n modelName: srcModelName,\n item: newInstance,\n instance: newInstance,\n });\n if (!topologicallySortedModels.has(namespace)) {\n topologicallySortedModels.set(namespace, Array.from(namespace.modelTopologicalOrdering.keys()));\n }\n const sortedModels = topologicallySortedModels.get(namespace);\n result.sort((a, b) => {\n return (sortedModels.indexOf(a.modelName) - sortedModels.indexOf(b.modelName));\n });\n return result;\n};\nlet privateModeCheckResult;\nexport const isPrivateMode = () => {\n return new Promise(resolve => {\n const dbname = amplifyUuid();\n let db;\n const isPrivate = () => {\n privateModeCheckResult = false;\n resolve(true);\n };\n const isNotPrivate = async () => {\n if (db && db.result && typeof db.result.close === 'function') {\n await db.result.close();\n }\n await indexedDB.deleteDatabase(dbname);\n privateModeCheckResult = true;\n return resolve(false);\n };\n if (privateModeCheckResult === true) {\n return isNotPrivate();\n }\n if (privateModeCheckResult === false) {\n return isPrivate();\n }\n if (indexedDB === null)\n return isPrivate();\n db = indexedDB.open(dbname);\n db.onerror = isPrivate;\n db.onsuccess = isNotPrivate;\n });\n};\nlet safariCompatabilityModeResult;\n/**\n * Whether the browser's implementation of IndexedDB breaks on array lookups\n * against composite indexes whose keypath contains a single column.\n *\n * E.g., Whether `store.createIndex(indexName, ['id'])` followed by\n * `store.index(indexName).get([1])` will *ever* return records.\n *\n * In all known, modern Safari browsers as of Q4 2022, the query against an index like\n * this will *always* return `undefined`. So, the index needs to be created as a scalar.\n */\nexport const isSafariCompatabilityMode = async () => {\n try {\n const dbName = amplifyUuid();\n const storeName = 'indexedDBFeatureProbeStore';\n const indexName = 'idx';\n if (indexedDB === null)\n return false;\n if (safariCompatabilityModeResult !== undefined) {\n return safariCompatabilityModeResult;\n }\n const db = await new Promise(resolve => {\n const dbOpenRequest = indexedDB.open(dbName);\n dbOpenRequest.onerror = () => resolve(false);\n dbOpenRequest.onsuccess = () => {\n const db = dbOpenRequest.result;\n resolve(db);\n };\n dbOpenRequest.onupgradeneeded = (event) => {\n const db = event?.target?.result;\n db.onerror = () => resolve(false);\n const store = db.createObjectStore(storeName, {\n autoIncrement: true,\n });\n store.createIndex(indexName, ['id']);\n };\n });\n if (!db) {\n throw new Error('Could not open probe DB');\n }\n const rwTx = db.transaction(storeName, 'readwrite');\n const rwStore = rwTx.objectStore(storeName);\n rwStore.add({\n id: 1,\n });\n rwTx.commit();\n const result = await new Promise(resolve => {\n const tx = db.transaction(storeName, 'readonly');\n const store = tx.objectStore(storeName);\n const index = store.index(indexName);\n const getRequest = index.get([1]);\n getRequest.onerror = () => resolve(false);\n getRequest.onsuccess = (event) => {\n resolve(event?.target?.result);\n };\n });\n if (db && typeof db.close === 'function') {\n await db.close();\n }\n await indexedDB.deleteDatabase(dbName);\n if (result === undefined) {\n safariCompatabilityModeResult = true;\n }\n else {\n safariCompatabilityModeResult = false;\n }\n }\n catch (error) {\n safariCompatabilityModeResult = false;\n }\n return safariCompatabilityModeResult;\n};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n HEX_TO_SHORT[encodedByte] = i;\n}\nconst getBytesFromHex = (encoded) => {\n if (encoded.length % 2 !== 0) {\n throw new Error('Hex encoded strings must have an even number length');\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n};\nconst randomBytes = (nBytes) => {\n const str = new WordArray().random(nBytes).toString();\n return getBytesFromHex(str);\n};\nconst prng = () => randomBytes(1)[0] / 0xff;\nexport function monotonicUlidFactory(seed) {\n const ulid = monotonicFactory(prng);\n return () => {\n return ulid(seed);\n };\n}\n/**\n * Uses performance.now() if available, otherwise, uses Date.now() (e.g. react native without a polyfill)\n *\n * The values returned by performance.now() always increase at a constant rate,\n * independent of the system clock (which might be adjusted manually or skewed\n * by software like NTP).\n *\n * Otherwise, performance.timing.navigationStart + performance.now() will be\n * approximately equal to Date.now()\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Performance/now#Example\n */\nexport function getNow() {\n if (typeof performance !== 'undefined' &&\n performance &&\n typeof performance.now === 'function') {\n return performance.now() | 0; // convert to integer\n }\n else {\n return Date.now();\n }\n}\nexport function sortCompareFunction(sortPredicates) {\n return function compareFunction(a, b) {\n // enable multi-field sort by iterating over predicates until\n // a comparison returns -1 or 1\n for (const predicate of sortPredicates) {\n const { field, sortDirection } = predicate;\n // reverse result when direction is descending\n const sortMultiplier = sortDirection === SortDirection.ASCENDING ? 1 : -1;\n if (a[field] < b[field]) {\n return -1 * sortMultiplier;\n }\n if (a[field] > b[field]) {\n return 1 * sortMultiplier;\n }\n }\n return 0;\n };\n}\n// deep compare any 2 values\n// primitives or object types (including arrays, Sets, and Maps)\n// returns true if equal by value\n// if nullish is true, treat undefined and null values as equal\n// to normalize for GQL response values for undefined fields\nexport function valuesEqual(valA, valB, nullish = false) {\n let a = valA;\n let b = valB;\n const nullishCompare = (_a, _b) => {\n return ((_a === undefined || _a === null) && (_b === undefined || _b === null));\n };\n // if one of the values is a primitive and the other is an object\n if ((a instanceof Object && !(b instanceof Object)) ||\n (!(a instanceof Object) && b instanceof Object)) {\n return false;\n }\n // compare primitive types\n if (!(a instanceof Object)) {\n if (nullish && nullishCompare(a, b)) {\n return true;\n }\n return a === b;\n }\n // make sure object types match\n if ((Array.isArray(a) && !Array.isArray(b)) ||\n (Array.isArray(b) && !Array.isArray(a))) {\n return false;\n }\n if (a instanceof Set && b instanceof Set) {\n a = [...a];\n b = [...b];\n }\n if (a instanceof Map && b instanceof Map) {\n a = Object.fromEntries(a);\n b = Object.fromEntries(b);\n }\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n // last condition is to ensure that [] !== [null] even if nullish. However [undefined] === [null] when nullish\n if (aKeys.length !== bKeys.length && (!nullish || Array.isArray(a))) {\n return false;\n }\n // iterate through the longer set of keys\n // e.g., for a nullish comparison of a={ a: 1 } and b={ a: 1, b: null }\n // we want to iterate through bKeys\n const keys = aKeys.length >= bKeys.length ? aKeys : bKeys;\n for (const key of keys) {\n const aVal = a[key];\n const bVal = b[key];\n if (!valuesEqual(aVal, bVal, nullish)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Statelessly extracts the specified page from an array.\n *\n * @param records - The source array to extract a page from.\n * @param pagination - A definition of the page to extract.\n * @returns This items from `records` matching the `pagination` definition.\n */\nexport function inMemoryPagination(records, pagination) {\n if (pagination && records.length > 1) {\n if (pagination.sort) {\n const sortPredicates = ModelSortPredicateCreator.getPredicates(pagination.sort);\n if (sortPredicates.length) {\n const compareFn = sortCompareFunction(sortPredicates);\n records.sort(compareFn);\n }\n }\n const { page = 0, limit = 0 } = pagination;\n const start = Math.max(0, page * limit) || 0;\n const end = limit > 0 ? start + limit : records.length;\n return records.slice(start, end);\n }\n return records;\n}\n/**\n * An `aysnc` implementation of `Array.some()`. Returns as soon as a match is found.\n * @param items The items to check.\n * @param matches The async matcher function, expected to\n * return Promise<boolean>: `true` for a matching item, `false` otherwise.\n * @returns A `Promise<boolean>`, `true` if \"some\" items match; `false` otherwise.\n */\nexport async function asyncSome(items, matches) {\n for (const item of items) {\n if (await matches(item)) {\n return true;\n }\n }\n return false;\n}\n/**\n * An `aysnc` implementation of `Array.every()`. Returns as soon as a non-match is found.\n * @param items The items to check.\n * @param matches The async matcher function, expected to\n * return Promise<boolean>: `true` for a matching item, `false` otherwise.\n * @returns A `Promise<boolean>`, `true` if every item matches; `false` otherwise.\n */\nexport async function asyncEvery(items, matches) {\n for (const item of items) {\n if (!(await matches(item))) {\n return false;\n }\n }\n return true;\n}\n/**\n * An `async` implementation of `Array.filter()`. Returns after all items have been filtered.\n * TODO: Return AsyncIterable.\n * @param items The items to filter.\n * @param matches The `async` matcher function, expected to\n * return Promise<boolean>: `true` for a matching item, `false` otherwise.\n * @returns A `Promise<T>` of matching items.\n */\nexport async function asyncFilter(items, matches) {\n const results = [];\n for (const item of items) {\n if (await matches(item)) {\n results.push(item);\n }\n }\n return results;\n}\nexport const isAWSDate = (val) => {\n return !!/^\\d{4}-\\d{2}-\\d{2}(Z|[+-]\\d{2}:\\d{2}($|:\\d{2}))?$/.exec(val);\n};\nexport const isAWSTime = (val) => {\n return !!/^\\d{2}:\\d{2}(:\\d{2}(.\\d+)?)?(Z|[+-]\\d{2}:\\d{2}($|:\\d{2}))?$/.exec(val);\n};\nexport const isAWSDateTime = (val) => {\n return !!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(.\\d+)?)?(Z|[+-]\\d{2}:\\d{2}($|:\\d{2}))?$/.exec(val);\n};\nexport const isAWSTimestamp = (val) => {\n return !!/^\\d+$/.exec(String(val));\n};\nexport const isAWSEmail = (val) => {\n return !!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.exec(val);\n};\nexport const isAWSJSON = (val) => {\n try {\n JSON.parse(val);\n return true;\n }\n catch {\n return false;\n }\n};\nexport const isAWSURL = (val) => {\n try {\n return !!new AmplifyUrl(val);\n }\n catch {\n return false;\n }\n};\nexport const isAWSPhone = (val) => {\n return !!/^\\+?\\d[\\d\\s-]+$/.exec(val);\n};\nexport const isAWSIPAddress = (val) => {\n return !!/((^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$)|(^((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?$))$/.exec(val);\n};\nexport class DeferredPromise {\n constructor() {\n const self = this;\n this.promise = new Promise((resolve, reject) => {\n self.resolve = resolve;\n self.reject = reject;\n });\n }\n}\nexport class DeferredCallbackResolver {\n constructor(options) {\n this.limitPromise = new DeferredPromise();\n this.raceInFlight = false;\n this.callback = () => { };\n this.defaultErrorHandler = (msg = 'DeferredCallbackResolver error') => {\n throw new Error(msg);\n };\n this.callback = options.callback;\n this.errorHandler = options.errorHandler || this.defaultErrorHandler;\n this.maxInterval = options.maxInterval || 2000;\n }\n startTimer() {\n this.timerPromise = new Promise((resolve, reject) => {\n this.timer = setTimeout(() => {\n resolve(LimitTimerRaceResolvedValues.TIMER);\n }, this.maxInterval);\n });\n }\n async racePromises() {\n let winner;\n try {\n this.raceInFlight = true;\n this.startTimer();\n winner = await Promise.race([\n this.timerPromise,\n this.limitPromise.promise,\n ]);\n this.callback();\n }\n catch (err) {\n this.errorHandler(err);\n }\n finally {\n // reset for the next race\n this.clear();\n this.raceInFlight = false;\n this.limitPromise = new DeferredPromise();\n return winner;\n }\n }\n start() {\n if (!this.raceInFlight)\n this.racePromises();\n }\n clear() {\n clearTimeout(this.timer);\n }\n resolve() {\n this.limitPromise.resolve(LimitTimerRaceResolvedValues.LIMIT);\n }\n}\n/**\n * merge two sets of patches created by immer produce.\n * newPatches take precedent over oldPatches for patches modifying the same path.\n * In the case many consecutive pathces are merged the original model should\n * always be the root model.\n *\n * Example:\n * A -> B, patches1\n * B -> C, patches2\n *\n * mergePatches(A, patches1, patches2) to get patches for A -> C\n *\n * @param originalSource the original Model the patches should be applied to\n * @param oldPatches immer produce patch list\n * @param newPatches immer produce patch list (will take precedence)\n * @return merged patches\n */\nexport function mergePatches(originalSource, oldPatches, newPatches) {\n const patchesToMerge = oldPatches.concat(newPatches);\n let patches;\n produce(originalSource, draft => {\n applyPatches(draft, patchesToMerge);\n }, p => {\n patches = p;\n });\n return patches;\n}\nexport const getStorename = (namespace, modelName) => {\n const storeName = `${namespace}_${modelName}`;\n return storeName;\n};\n//#region Key Utils\n/*\n When we have GSI(s) with composite sort keys defined on a model\n There are some very particular rules regarding which fields must be included in the update mutation input\n The field selection becomes more complex as the number of GSIs with composite sort keys grows\n\n To summarize: any time we update a field that is part of the composite sort key of a GSI, we must include:\n 1. all of the other fields in that composite sort key\n 2. all of the fields from any other composite sort key that intersect with the fields from 1.\n\n E.g.,\n Model @model\n @key(name: 'key1' fields: ['hk', 'a', 'b', 'c'])\n @key(name: 'key2' fields: ['hk', 'a', 'b', 'd'])\n @key(name: 'key3' fields: ['hk', 'x', 'y', 'z'])\n\n Model.a is updated => include ['a', 'b', 'c', 'd']\n Model.c is updated => include ['a', 'b', 'c', 'd']\n Model.d is updated => include ['a', 'b', 'c', 'd']\n Model.x is updated => include ['x', 'y', 'z']\n\n This function accepts a model's attributes and returns grouped sets of composite key fields\n Using our example Model above, the function will return:\n [\n Set('a', 'b', 'c', 'd'),\n Set('x', 'y', 'z'),\n ]\n\n This gives us the opportunity to correctly include the required fields for composite keys\n When crafting the mutation input in Storage.getUpdateMutationInput\n\n See 'processCompositeKeys' test in util.test.ts for more examples\n*/\nexport const processCompositeKeys = (attributes) => {\n const extractCompositeSortKey = ({ properties: { \n // ignore the HK (fields[0]) we only need to include the composite sort key fields[1...n]\n fields: [, ...sortKeyFields], }, }) => sortKeyFields;\n const compositeKeyFields = attributes\n .filter(isModelAttributeCompositeKey)\n .map(extractCompositeSortKey);\n /*\n if 2 sets of fields have any intersecting fields => combine them into 1 union set\n e.g., ['a', 'b', 'c'] and ['a', 'b', 'd'] => ['a', 'b', 'c', 'd']\n */\n const combineIntersecting = (fields) => fields.reduce((combined, sortKeyFields) => {\n const sortKeyFieldsSet = new Set(sortKeyFields);\n if (combined.length === 0) {\n combined.push(sortKeyFieldsSet);\n return combined;\n }\n // does the current set share values with another set we've already added to `combined`?\n const intersectingSetIdx = combined.findIndex(existingSet => {\n return [...existingSet].some(f => sortKeyFieldsSet.has(f));\n });\n if (intersectingSetIdx > -1) {\n const union = new Set([\n ...combined[intersectingSetIdx],\n ...sortKeyFieldsSet,\n ]);\n // combine the current set with the intersecting set we found above\n combined[intersectingSetIdx] = union;\n }\n else {\n // none of the sets in `combined` have intersecting values with the current set\n combined.push(sortKeyFieldsSet);\n }\n return combined;\n }, []);\n const initial = combineIntersecting(compositeKeyFields);\n // a single pass pay not be enough to correctly combine all the fields\n // call the function once more to get a final merged list of sets\n const combined = combineIntersecting(initial);\n return combined;\n};\nexport const extractKeyIfExists = (modelDefinition) => {\n const keyAttribute = modelDefinition?.attributes?.find(isModelAttributeKey);\n return keyAttribute;\n};\nexport const extractPrimaryKeyFieldNames = (modelDefinition) => {\n const keyAttribute = extractKeyIfExists(modelDefinition);\n if (keyAttribute && isModelAttributePrimaryKey(keyAttribute)) {\n return keyAttribute.properties.fields;\n }\n return [ID];\n};\nexport const extractPrimaryKeyValues = (model, keyFields) => {\n return keyFields.map(key => model[key]);\n};\nexport const extractPrimaryKeysAndValues = (model, keyFields) => {\n const primaryKeysAndValues = {};\n keyFields.forEach(key => (primaryKeysAndValues[key] = model[key]));\n return primaryKeysAndValues;\n};\n// IdentifierFields<ManagedIdentifier>\n// Default behavior without explicit @primaryKey defined\nexport const isIdManaged = (modelDefinition) => {\n const keyAttribute = extractKeyIfExists(modelDefinition);\n if (keyAttribute && isModelAttributePrimaryKey(keyAttribute)) {\n return false;\n }\n return true;\n};\n// IdentifierFields<OptionallyManagedIdentifier>\n// @primaryKey with explicit `id` in the PK. Single key or composite\nexport const isIdOptionallyManaged = (modelDefinition) => {\n const keyAttribute = extractKeyIfExists(modelDefinition);\n if (keyAttribute && isModelAttributePrimaryKey(keyAttribute)) {\n return keyAttribute.properties.fields[0] === ID;\n }\n return false;\n};\nexport const establishRelationAndKeys = (namespace) => {\n const relationship = {};\n const keys = {};\n Object.keys(namespace.models).forEach((mKey) => {\n relationship[mKey] = { indexes: [], relationTypes: [] };\n keys[mKey] = {};\n const model = namespace.models[mKey];\n Object.keys(model.fields).forEach((attr) => {\n const fieldAttribute = model.fields[attr];\n if (typeof fieldAttribute.type === 'object' &&\n 'model' in fieldAttribute.type) {\n const connectionType = fieldAttribute.association.connectionType;\n relationship[mKey].relationTypes.push({\n fieldName: fieldAttribute.name,\n modelName: fieldAttribute.type.model,\n relationType: connectionType,\n targetName: fieldAttribute.association['targetName'],\n targetNames: fieldAttribute.association['targetNames'],\n associatedWith: fieldAttribute.association['associatedWith'],\n });\n if (connectionType === 'BELONGS_TO') {\n const targetNames = extractTargetNamesFromSrc(fieldAttribute.association);\n if (targetNames) {\n const idxName = indexNameFromKeys(targetNames);\n const idxExists = relationship[mKey].indexes.find(([index]) => index === idxName);\n if (!idxExists) {\n relationship[mKey].indexes.push([idxName, targetNames]);\n }\n }\n }\n }\n });\n if (model.attributes) {\n keys[mKey].compositeKeys = processCompositeKeys(model.attributes);\n for (const attribute of model.attributes) {\n if (!isModelAttributeKey(attribute)) {\n continue;\n }\n const { fields } = attribute.properties;\n if (isModelAttributePrimaryKey(attribute)) {\n keys[mKey].primaryKey = fields;\n continue;\n }\n // create indexes for all other keys\n const idxName = indexNameFromKeys(fields);\n const idxExists = relationship[mKey].indexes.find(([index]) => index === idxName);\n if (!idxExists) {\n relationship[mKey].indexes.push([idxName, fields]);\n }\n }\n }\n // set 'id' as the PK for models without a custom PK explicitly defined\n if (!keys[mKey].primaryKey) {\n keys[mKey].primaryKey = [ID];\n }\n // create primary index\n relationship[mKey].indexes.push([\n 'byPk',\n keys[mKey].primaryKey,\n { unique: true },\n ]);\n });\n return [relationship, keys];\n};\nexport const getIndex = (rel, src) => {\n let indexName;\n rel.some((relItem) => {\n if (relItem.modelName === src) {\n const targetNames = extractTargetNamesFromSrc(relItem);\n indexName = targetNames && indexNameFromKeys(targetNames);\n return true;\n }\n });\n return indexName;\n};\nexport const getIndexFromAssociation = (indexes, src) => {\n let indexName;\n if (Array.isArray(src)) {\n indexName = indexNameFromKeys(src);\n }\n else {\n indexName = src;\n }\n const associationIndex = indexes.find(([idxName]) => idxName === indexName);\n return associationIndex && associationIndex[0];\n};\n/**\n * Backwards-compatability for schema generated prior to custom primary key support:\nthe single field `targetName` has been replaced with an array of `targetNames`.\n`targetName` and `targetNames` are exclusive (will never exist on the same schema)\n * @param src {RelationType | ModelAssociation | undefined}\n * @returns array of targetNames, or `undefined`\n */\nexport const extractTargetNamesFromSrc = (src) => {\n const targetName = src?.targetName;\n const targetNames = src?.targetNames;\n if (Array.isArray(targetNames)) {\n return targetNames;\n }\n else if (typeof targetName === 'string') {\n return [targetName];\n }\n else {\n return undefined;\n }\n};\n// Generates spinal-cased index name from an array of key field names\n// E.g. for keys `[id, title]` => 'id-title'\nexport const indexNameFromKeys = (keys) => {\n return keys.reduce((prev, cur, idx) => {\n if (idx === 0) {\n return cur;\n }\n return `${prev}${IDENTIFIER_KEY_SEPARATOR}${cur}`;\n }, '');\n};\nexport const keysEqual = (keysA, keysB) => {\n if (keysA.length !== keysB.length) {\n return false;\n }\n return keysA.every((key, idx) => key === keysB[idx]);\n};\n// Returns primary keys for a model\nexport const getIndexKeys = (namespace, modelName) => {\n const keyPath = namespace?.keys?.[modelName]?.primaryKey;\n if (keyPath) {\n return keyPath;\n }\n return [ID];\n};\n//#endregion\n/**\n * Determine what the managed timestamp field names are for the given model definition\n * and return the mapping.\n *\n * All timestamp fields are included in the mapping, regardless of whether the final field\n * names are the defaults or customized in the `@model` directive.\n *\n * @see https://docs.amplify.aws/cli/graphql/data-modeling/#customize-creation-and-update-timestamps\n *\n * @param definition modelDefinition to inspect.\n * @returns An object mapping `createdAt` and `updatedAt` to their field names.\n */\nexport const getTimestampFields = (definition) => {\n const modelAttributes = definition.attributes?.find(attr => attr.type === 'model');\n const timestampFieldsMap = modelAttributes?.properties?.timestamps;\n const defaultFields = {\n createdAt: 'createdAt',\n updatedAt: 'updatedAt',\n };\n const customFields = timestampFieldsMap || {};\n return {\n ...defaultFields,\n ...customFields,\n };\n};\n"],"names":[],"mappings":";;;;;;;AAAA;AACA;AAMY,MAAC,EAAE,GAAG,KAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,mCAAmC,GAAG,IAAI;AACvD;AACA;AACA;AACA;AACA;AACY,MAAC,wBAAwB,GAAG,IAAI;AAChC,MAAC,aAAa,GAAG;AAC7B,IAAI,aAAa,EAAE,qDAAqD;AACxE,IAAI,gCAAgC,EAAE,sPAAsP;AAC5R,IAAI,iCAAiC,EAAE,gRAAgR;AACvT,IAAI,wBAAwB,EAAE,0JAA0J;AACxL,EAAE;AACQ,IAAC,WAAW;AACtB,CAAC,UAAU,UAAU,EAAE;AACvB,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AAC1C,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAChC,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAChC,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;AACtC,CAAC,EAAE,UAAU,KAAK,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;AAC/B,MAAC,SAAS,GAAG,UAAU,CAAC,UAAU;AAClC,MAAC,IAAI,GAAG,UAAU,CAAC,KAAK;AACxB,MAAC,IAAI,GAAG,UAAU,CAAC,KAAK;AACxB,MAAC,OAAO,GAAG,UAAU,CAAC,QAAQ;AAEvB,MAAC,eAAe,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,KAAK;AAC7D,IAAI,IAAI,YAAY,EAAE;AACtB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,EAAE;AACU,MAAC,iBAAiB,GAAG,CAAC,GAAG,KAAK;AAC1C,IAAI,OAAO,OAAO,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC;AAC3E,EAAE;AACU,MAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,kBAAkB,KAAK;AAC3E,IAAI,IAAI,UAAU,CAAC;AACnB,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC;AAC3B,IAAI,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,QAAQ,SAAS;AACrB,QAAQ,KAAK,KAAK;AAClB,YAAY,UAAU,GAAG,OAAO,CAAC;AACjC,YAAY,UAAU,GAAG,IAAI,CAAC;AAC9B,YAAY,MAAM;AAClB,QAAQ,KAAK,KAAK;AAClB,YAAY,UAAU,GAAG,OAAO,CAAC;AACjC,YAAY,MAAM;AAClB,QAAQ,KAAK,IAAI;AACjB,YAAY,UAAU,GAAG,MAAM,CAAC;AAChC,YAAY,MAAM;AAClB,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACpD,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,gBAAgB,IAAI;AACtE,QAAQ,IAAI,cAAc,CAAC,gBAAgB,CAAC,EAAE;AAC9C,YAAY,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC;AAClE,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACvC,YAAY,OAAO,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpE,SAAS;AACT,QAAQ,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,EAAE;AAChD,YAAY,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC;AAC1D,YAAY,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9D,SAAS;AACT,QAAQ,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACpD,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,UAAU,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;AACzC,EAAE;AACU,MAAC,sBAAsB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,KAAK;AACpE,IAAI,QAAQ,QAAQ;AACpB,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,KAAK,KAAK,OAAO,CAAC;AACrC,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,KAAK,KAAK,OAAO,CAAC;AACrC,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,KAAK,IAAI,OAAO,CAAC;AACpC,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,KAAK,GAAG,OAAO,CAAC;AACnC,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,KAAK,IAAI,OAAO,CAAC;AACpC,QAAQ,KAAK,IAAI;AACjB,YAAY,OAAO,KAAK,GAAG,OAAO,CAAC;AACnC,QAAQ,KAAK,SAAS;AACtB,YAAY,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;AACvC,YAAY,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AAChD,QAAQ,KAAK,YAAY;AACzB,YAAY,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7C,gBAAgB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC3C,QAAQ,KAAK,UAAU;AACvB,YAAY,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7C,gBAAgB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7C,QAAQ,KAAK,aAAa;AAC1B,YAAY,QAAQ,iBAAiB,CAAC,KAAK,CAAC;AAC5C,gBAAgB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AAC/C,QAAQ;AACR,YAAY,OAAO,KAAK,CAAC;AACzB,KAAK;AACL,EAAE;AACU,MAAC,kBAAkB,GAAG,CAAC,GAAG,KAAK;AAC3C,IAAI,QAAQ,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE;AACrD,EAAE;AACF,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,SAAS,qBAAqB,CAAC,KAAK,EAAE;AAC7C,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AACW,MAAC,qBAAqB,GAAG,CAAC,GAAG,KAAK;AAC9C,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,EAAE;AACF,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAAE,CAAC;AACpC,MAAC,aAAa,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,oBAAoB,EAAE,8BAA8B,KAAK;AAC1H,IAAI,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC1F,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;AACrE,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,QAAQ,SAAS,EAAE,YAAY;AAC/B,QAAQ,IAAI,EAAE,WAAW;AACzB,QAAQ,QAAQ,EAAE,WAAW;AAC7B,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACnD,QAAQ,yBAAyB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxG,KAAK;AACL,IAAI,MAAM,YAAY,GAAG,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC1B,QAAQ,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;AACvF,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE;AACF,IAAI,sBAAsB,CAAC;AACf,MAAC,aAAa,GAAG,MAAM;AACnC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;AAClC,QAAQ,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;AACrC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,SAAS,GAAG,MAAM;AAChC,YAAY,sBAAsB,GAAG,KAAK,CAAC;AAC3C,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAS,CAAC;AACV,QAAQ,MAAM,YAAY,GAAG,YAAY;AACzC,YAAY,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;AAC1E,gBAAgB,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACxC,aAAa;AACb,YAAY,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACnD,YAAY,sBAAsB,GAAG,IAAI,CAAC;AAC1C,YAAY,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC,SAAS,CAAC;AACV,QAAQ,IAAI,sBAAsB,KAAK,IAAI,EAAE;AAC7C,YAAY,OAAO,YAAY,EAAE,CAAC;AAClC,SAAS;AACT,QAAQ,IAAI,sBAAsB,KAAK,KAAK,EAAE;AAC9C,YAAY,OAAO,SAAS,EAAE,CAAC;AAC/B,SAAS;AACT,QAAQ,IAAI,SAAS,KAAK,IAAI;AAC9B,YAAY,OAAO,SAAS,EAAE,CAAC;AAC/B,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,QAAQ,EAAE,CAAC,OAAO,GAAG,SAAS,CAAC;AAC/B,QAAQ,EAAE,CAAC,SAAS,GAAG,YAAY,CAAC;AACpC,KAAK,CAAC,CAAC;AACP,EAAE;AACF,IAAI,6BAA6B,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,yBAAyB,GAAG,YAAY;AACrD,IAAI,IAAI;AACR,QAAQ,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;AACrC,QAAQ,MAAM,SAAS,GAAG,4BAA4B,CAAC;AACvD,QAAQ,MAAM,SAAS,GAAG,KAAK,CAAC;AAChC,QAAQ,IAAI,SAAS,KAAK,IAAI;AAC9B,YAAY,OAAO,KAAK,CAAC;AACzB,QAAQ,IAAI,6BAA6B,KAAK,SAAS,EAAE;AACzD,YAAY,OAAO,6BAA6B,CAAC;AACjD,SAAS;AACT,QAAQ,MAAM,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI;AAChD,YAAY,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzD,YAAY,aAAa,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;AACzD,YAAY,aAAa,CAAC,SAAS,GAAG,MAAM;AAC5C,gBAAgB,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC;AAChD,gBAAgB,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5B,aAAa,CAAC;AACd,YAAY,aAAa,CAAC,eAAe,GAAG,CAAC,KAAK,KAAK;AACvD,gBAAgB,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;AACjD,gBAAgB,EAAE,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;AAClD,gBAAgB,MAAM,KAAK,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE;AAC9D,oBAAoB,aAAa,EAAE,IAAI;AACvC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,EAAE,EAAE;AACjB,YAAY,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACvD,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC5D,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACpD,QAAQ,OAAO,CAAC,GAAG,CAAC;AACpB,YAAY,EAAE,EAAE,CAAC;AACjB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;AACtB,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI;AACpD,YAAY,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7D,YAAY,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACpD,YAAY,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjD,YAAY,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAY,UAAU,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;AACtD,YAAY,UAAU,CAAC,SAAS,GAAG,CAAC,KAAK,KAAK;AAC9C,gBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,UAAU,EAAE;AAClD,YAAY,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,MAAM,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;AAClC,YAAY,6BAA6B,GAAG,IAAI,CAAC;AACjD,SAAS;AACT,aAAa;AACb,YAAY,6BAA6B,GAAG,KAAK,CAAC;AAClD,SAAS;AACT,KAAK;AACL,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,6BAA6B,GAAG,KAAK,CAAC;AAC9C,KAAK;AACL,IAAI,OAAO,6BAA6B,CAAC;AACzC,EAAE;AACF,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9B,IAAI,IAAI,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,QAAQ,WAAW,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AACxC,KAAK;AACL,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,OAAO,KAAK;AACrC,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AAClC,QAAQ,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;AAC/E,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAChD,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,QAAQ,IAAI,WAAW,IAAI,YAAY,EAAE;AACzC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AACnD,SAAS;AACT,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,oCAAoC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;AACjG,SAAS;AACT,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,MAAM,KAAK;AAChC,IAAI,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1D,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACrC,SAAS,oBAAoB,CAAC,IAAI,EAAE;AAC3C,IAAI,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,OAAO,MAAM;AACjB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,MAAM,GAAG;AACzB,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW;AAC1C,QAAQ,WAAW;AACnB,QAAQ,OAAO,WAAW,CAAC,GAAG,KAAK,UAAU,EAAE;AAC/C,QAAQ,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACrC,KAAK;AACL,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1B,KAAK;AACL,CAAC;AACM,SAAS,mBAAmB,CAAC,cAAc,EAAE;AACpD,IAAI,OAAO,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;AAC1C;AACA;AACA,QAAQ,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE;AAChD,YAAY,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;AACvD;AACA,YAAY,MAAM,cAAc,GAAG,aAAa,KAAK,aAAa,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACtF,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAgB,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC;AAC3C,aAAa;AACb,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAgB,OAAO,CAAC,GAAG,cAAc,CAAC;AAC1C,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE;AACzD,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACjB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACjB,IAAI,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK;AACvC,QAAQ,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;AACxF,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,CAAC,YAAY,MAAM,IAAI,EAAE,CAAC,YAAY,MAAM,CAAC;AACtD,SAAS,EAAE,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,EAAE;AACzD,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL;AACA,IAAI,IAAI,EAAE,CAAC,YAAY,MAAM,CAAC,EAAE;AAChC,QAAQ,IAAI,OAAO,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC7C,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC;AACvB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,SAAS,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;AACjD,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE;AAC9C,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,KAAK;AACL,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE;AAC9C,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClC,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC;AACA,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;AACzE,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAC9D,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAQ,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAQ,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;AAC/C,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE;AACxD,IAAI,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE;AAC7B,YAAY,MAAM,cAAc,GAAG,yBAAyB,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5F,YAAY,IAAI,cAAc,CAAC,MAAM,EAAE;AACvC,gBAAgB,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;AACtE,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACxC,aAAa;AACb,SAAS;AACT,QAAQ,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC;AACnD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACrD,QAAQ,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AAC/D,QAAQ,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzC,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;AAChD,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE;AACjC,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AACjD,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;AACpC,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS;AACT,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAClD,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE;AACjC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAS;AACT,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACW,MAAC,SAAS,GAAG,CAAC,GAAG,KAAK;AAClC,IAAI,OAAO,CAAC,CAAC,mDAAmD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3E,EAAE;AACU,MAAC,SAAS,GAAG,CAAC,GAAG,KAAK;AAClC,IAAI,OAAO,CAAC,CAAC,6DAA6D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrF,EAAE;AACU,MAAC,aAAa,GAAG,CAAC,GAAG,KAAK;AACtC,IAAI,OAAO,CAAC,CAAC,+EAA+E,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvG,EAAE;AACU,MAAC,cAAc,GAAG,CAAC,GAAG,KAAK;AACvC,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,EAAE;AACU,MAAC,UAAU,GAAG,CAAC,GAAG,KAAK;AACnC,IAAI,OAAO,CAAC,CAAC,sIAAsI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9J,EAAE;AACU,MAAC,SAAS,GAAG,CAAC,GAAG,KAAK;AAClC,IAAI,IAAI;AACR,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxB,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM;AACV,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,EAAE;AACU,MAAC,QAAQ,GAAG,CAAC,GAAG,KAAK;AACjC,IAAI,IAAI;AACR,QAAQ,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,MAAM;AACV,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,EAAE;AACU,MAAC,UAAU,GAAG,CAAC,GAAG,KAAK;AACnC,IAAI,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,EAAE;AACU,MAAC,cAAc,GAAG,CAAC,GAAG,KAAK;AACvC,IAAI,OAAO,CAAC,CAAC,sqCAAsqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9rC,EAAE;AACK,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC;AAC1B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACxD,YAAY,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACnC,YAAY,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,CAAC;AACM,MAAM,wBAAwB,CAAC;AACtC,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;AAClD,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC;AAClC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,GAAG,gCAAgC,KAAK;AAC/E,YAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACzC,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC;AAC7E,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;AACvD,KAAK;AACL,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC7D,YAAY,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM;AAC1C,gBAAgB,OAAO,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;AAC5D,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,IAAI,MAAM,CAAC;AACnB,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACrC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9B,YAAY,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;AACxC,gBAAgB,IAAI,CAAC,YAAY;AACjC,gBAAgB,IAAI,CAAC,YAAY,CAAC,OAAO;AACzC,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5B,SAAS;AACT,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACnC,SAAS;AACT,gBAAgB;AAChB;AACA,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;AACzB,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AACtC,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;AACtD,YAAY,OAAO,MAAM,CAAC;AAC1B,SAAS;AACT,KAAK;AACL,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY;AAC9B,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,KAAK;AACL,IAAI,KAAK,GAAG;AACZ,QAAQ,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;AACtE,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE;AACrE,IAAI,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzD,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI;AACrC,QAAQ,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC5C,KAAK,EAAE,CAAC,IAAI;AACZ,QAAQ,OAAO,GAAG,CAAC,CAAC;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACW,MAAC,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,KAAK;AACtD,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAClD,IAAI,OAAO,SAAS,CAAC;AACrB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,oBAAoB,GAAG,CAAC,UAAU,KAAK;AACpD,IAAI,MAAM,uBAAuB,GAAG,CAAC,EAAE,UAAU,EAAE;AACnD;AACA,IAAI,MAAM,EAAE,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,KAAK,aAAa,CAAC;AACzD,IAAI,MAAM,kBAAkB,GAAG,UAAU;AACzC,SAAS,MAAM,CAAC,4BAA4B,CAAC;AAC7C,SAAS,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,aAAa,KAAK;AACvF,QAAQ,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;AACxD,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAY,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5C,YAAY,OAAO,QAAQ,CAAC;AAC5B,SAAS;AACT;AACA,QAAQ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAAC,WAAW,IAAI;AACrE,YAAY,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE;AACrC,YAAY,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;AAClC,gBAAgB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;AAC/C,gBAAgB,GAAG,gBAAgB;AACnC,aAAa,CAAC,CAAC;AACf;AACA,YAAY,QAAQ,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;AACjD,SAAS;AACT,aAAa;AACb;AACA,YAAY,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5C,SAAS;AACT,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,MAAM,OAAO,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;AAC5D;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAClD,IAAI,OAAO,QAAQ,CAAC;AACpB,EAAE;AACU,MAAC,kBAAkB,GAAG,CAAC,eAAe,KAAK;AACvD,IAAI,MAAM,YAAY,GAAG,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChF,IAAI,OAAO,YAAY,CAAC;AACxB,EAAE;AACU,MAAC,2BAA2B,GAAG,CAAC,eAAe,KAAK;AAChE,IAAI,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC7D,IAAI,IAAI,YAAY,IAAI,0BAA0B,CAAC,YAAY,CAAC,EAAE;AAClE,QAAQ,OAAO,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;AAC9C,KAAK;AACL,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,EAAE;AACU,MAAC,uBAAuB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK;AAC7D,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,EAAE;AACU,MAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK;AACjE,IAAI,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACpC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,KAAK,oBAAoB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,IAAI,OAAO,oBAAoB,CAAC;AAChC,EAAE;AACF;AACA;AACY,MAAC,WAAW,GAAG,CAAC,eAAe,KAAK;AAChD,IAAI,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC7D,IAAI,IAAI,YAAY,IAAI,0BAA0B,CAAC,YAAY,CAAC,EAAE;AAClE,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE;AACF;AACA;AACY,MAAC,qBAAqB,GAAG,CAAC,eAAe,KAAK;AAC1D,IAAI,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC7D,IAAI,IAAI,YAAY,IAAI,0BAA0B,CAAC,YAAY,CAAC,EAAE;AAClE,QAAQ,OAAO,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACxD,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE;AACU,MAAC,wBAAwB,GAAG,CAAC,SAAS,KAAK;AACvD,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC;AAC5B,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACpD,QAAQ,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;AAChE,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACxB,QAAQ,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACpD,YAAY,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtD,YAAY,IAAI,OAAO,cAAc,CAAC,IAAI,KAAK,QAAQ;AACvD,gBAAgB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE;AAChD,gBAAgB,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC;AACjF,gBAAgB,YAAY,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;AACtD,oBAAoB,SAAS,EAAE,cAAc,CAAC,IAAI;AAClD,oBAAoB,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK;AACxD,oBAAoB,YAAY,EAAE,cAAc;AAChD,oBAAoB,UAAU,EAAE,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC;AACxE,oBAAoB,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC;AAC1E,oBAAoB,cAAc,EAAE,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC;AAChF,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,IAAI,cAAc,KAAK,YAAY,EAAE;AACrD,oBAAoB,MAAM,WAAW,GAAG,yBAAyB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC9F,oBAAoB,IAAI,WAAW,EAAE;AACrC,wBAAwB,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACvE,wBAAwB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,OAAO,CAAC,CAAC;AAC1G,wBAAwB,IAAI,CAAC,SAAS,EAAE;AACxC,4BAA4B,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AACpF,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE;AAC9B,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC9E,YAAY,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE;AACtD,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;AACrD,oBAAoB,SAAS;AAC7B,iBAAiB;AACjB,gBAAgB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC;AACxD,gBAAgB,IAAI,0BAA0B,CAAC,SAAS,CAAC,EAAE;AAC3D,oBAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC;AACnD,oBAAoB,SAAS;AAC7B,iBAAiB;AACjB;AACA,gBAAgB,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1D,gBAAgB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,OAAO,CAAC,CAAC;AAClG,gBAAgB,IAAI,CAAC,SAAS,EAAE;AAChC,oBAAoB,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACvE,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;AACpC,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;AACzC,SAAS;AACT;AACA,QAAQ,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,YAAY,MAAM;AAClB,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU;AACjC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE;AAC5B,SAAS,CAAC,CAAC;AACX,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAChC,EAAE;AACU,MAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK;AACtC,IAAI,IAAI,SAAS,CAAC;AAClB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC1B,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,GAAG,EAAE;AACvC,YAAY,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnE,YAAY,SAAS,GAAG,WAAW,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACtE,YAAY,OAAO,IAAI,CAAC;AACxB,SAAS;AACT,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,SAAS,CAAC;AACrB,EAAE;AACU,MAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AACzD,IAAI,IAAI,SAAS,CAAC;AAClB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5B,QAAQ,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC3C,KAAK;AACL,SAAS;AACT,QAAQ,SAAS,GAAG,GAAG,CAAC;AACxB,KAAK;AACL,IAAI,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,KAAK,SAAS,CAAC,CAAC;AAChF,IAAI,OAAO,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,yBAAyB,GAAG,CAAC,GAAG,KAAK;AAClD,IAAI,MAAM,UAAU,GAAG,GAAG,EAAE,UAAU,CAAC;AACvC,IAAI,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,CAAC;AACzC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACpC,QAAQ,OAAO,WAAW,CAAC;AAC3B,KAAK;AACL,SAAS,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAC7C,QAAQ,OAAO,CAAC,UAAU,CAAC,CAAC;AAC5B,KAAK;AACL,SAAS;AACT,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL,EAAE;AACF;AACA;AACY,MAAC,iBAAiB,GAAG,CAAC,IAAI,KAAK;AAC3C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK;AAC3C,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;AACvB,YAAY,OAAO,GAAG,CAAC;AACvB,SAAS;AACT,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,wBAAwB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,EAAE;AACU,MAAC,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AAC3C,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AACvC,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,EAAE;AACF;AACY,MAAC,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,KAAK;AACtD,IAAI,MAAM,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC,EAAE,UAAU,CAAC;AAC7D,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,kBAAkB,GAAG,CAAC,UAAU,KAAK;AAClD,IAAI,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACvF,IAAI,MAAM,kBAAkB,GAAG,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC;AACvE,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,SAAS,EAAE,WAAW;AAC9B,QAAQ,SAAS,EAAE,WAAW;AAC9B,KAAK,CAAC;AACN,IAAI,MAAM,YAAY,GAAG,kBAAkB,IAAI,EAAE,CAAC;AAClD,IAAI,OAAO;AACX,QAAQ,GAAG,aAAa;AACxB,QAAQ,GAAG,YAAY;AACvB,KAAK,CAAC;AACN;;;;"}
|