@expo/entity 0.48.0 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/src/EntityDatabaseAdapter.js +12 -5
- package/build/src/EntityDatabaseAdapter.js.map +1 -1
- package/build/src/EntityFields.d.ts +3 -1
- package/build/src/EntityFields.js +4 -2
- package/build/src/EntityFields.js.map +1 -1
- package/build/src/EntityMutationValidator.js +2 -0
- package/build/src/EntityMutationValidator.js.map +1 -1
- package/build/src/IEntityCacheAdapter.js +2 -0
- package/build/src/IEntityCacheAdapter.js.map +1 -1
- package/build/src/IEntityCacheAdapterProvider.js +2 -0
- package/build/src/IEntityCacheAdapterProvider.js.map +1 -1
- package/build/src/IEntityDatabaseAdapterProvider.js +2 -0
- package/build/src/IEntityDatabaseAdapterProvider.js.map +1 -1
- package/build/src/IEntityGenericCacher.js +2 -0
- package/build/src/IEntityGenericCacher.js.map +1 -1
- package/build/src/entityUtils.d.ts +2 -2
- package/build/src/entityUtils.js.map +1 -1
- package/build/src/errors/EntityCacheAdapterError.d.ts +7 -0
- package/build/src/errors/EntityCacheAdapterError.js +7 -0
- package/build/src/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/src/errors/EntityDatabaseAdapterError.d.ts +78 -0
- package/build/src/errors/EntityDatabaseAdapterError.js +84 -1
- package/build/src/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/src/errors/EntityError.d.ts +14 -0
- package/build/src/errors/EntityError.js +14 -0
- package/build/src/errors/EntityError.js.map +1 -1
- package/build/src/errors/EntityInvalidFieldValueError.d.ts +3 -0
- package/build/src/errors/EntityInvalidFieldValueError.js +3 -0
- package/build/src/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/src/errors/EntityNotAuthorizedError.d.ts +3 -0
- package/build/src/errors/EntityNotAuthorizedError.js +3 -0
- package/build/src/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/src/errors/EntityNotFoundError.d.ts +3 -0
- package/build/src/errors/EntityNotFoundError.js +3 -0
- package/build/src/errors/EntityNotFoundError.js.map +1 -1
- package/package.json +2 -2
- package/src/EntityDatabaseAdapter.ts +18 -5
- package/src/EntityFields.ts +4 -2
- package/src/EntityMutationValidator.ts +4 -0
- package/src/IEntityCacheAdapter.ts +4 -0
- package/src/IEntityCacheAdapterProvider.ts +4 -0
- package/src/IEntityDatabaseAdapterProvider.ts +4 -0
- package/src/IEntityGenericCacher.ts +4 -0
- package/src/__tests__/EntityDatabaseAdapter-test.ts +12 -5
- package/src/__tests__/EntityFields-test.ts +1 -1
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +24 -0
- package/src/__tests__/GenericSecondaryEntityCache-test.ts +180 -0
- package/src/entityUtils.ts +5 -3
- package/src/errors/EntityCacheAdapterError.ts +7 -0
- package/src/errors/EntityDatabaseAdapterError.ts +83 -0
- package/src/errors/EntityError.ts +14 -0
- package/src/errors/EntityInvalidFieldValueError.ts +3 -0
- package/src/errors/EntityNotAuthorizedError.ts +3 -0
- package/src/errors/EntityNotFoundError.ts +3 -0
- package/src/utils/__testfixtures__/StubDatabaseAdapter.ts +11 -1
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import ES6Error from 'es6-error';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* The state of an entity error, indicating whether it may be transient/retryable.
|
|
5
|
+
*/
|
|
3
6
|
export enum EntityErrorState {
|
|
4
7
|
UNKNOWN,
|
|
5
8
|
TRANSIENT,
|
|
6
9
|
PERMANENT,
|
|
7
10
|
}
|
|
8
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Error code for an entity error. Each error code should map to a specific class of Entity error.
|
|
14
|
+
*/
|
|
9
15
|
export enum EntityErrorCode {
|
|
10
16
|
ERR_ENTITY_NOT_AUTHORIZED = 'ERR_ENTITY_NOT_AUTHORIZED',
|
|
11
17
|
ERR_ENTITY_NOT_FOUND = 'ERR_ENTITY_NOT_FOUND',
|
|
@@ -17,9 +23,17 @@ export enum EntityErrorCode {
|
|
|
17
23
|
ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT',
|
|
18
24
|
ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT',
|
|
19
25
|
ERR_ENTITY_DATABASE_ADAPTER_UNIQUE_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_UNIQUE_CONSTRAINT',
|
|
26
|
+
ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_INSERT_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_INSERT_RESULT',
|
|
27
|
+
ERR_ENTITY_DATABASE_ADAPTER_EMPTY_INSERT_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EMPTY_INSERT_RESULT',
|
|
28
|
+
ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_UPDATE_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_UPDATE_RESULT',
|
|
29
|
+
ERR_ENTITY_DATABASE_ADAPTER_EMPTY_UPDATE_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EMPTY_UPDATE_RESULT',
|
|
30
|
+
ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_DELETE_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_DELETE_RESULT',
|
|
20
31
|
ERR_ENTITY_CACHE_ADAPTER_TRANSIENT = 'ERR_ENTITY_CACHE_ADAPTER_TRANSIENT',
|
|
21
32
|
}
|
|
22
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Base class for all known errors thrown by the entity system.
|
|
36
|
+
*/
|
|
23
37
|
export abstract class EntityError extends ES6Error {
|
|
24
38
|
public abstract readonly state: EntityErrorState;
|
|
25
39
|
public abstract readonly code: EntityErrorCode;
|
|
@@ -4,6 +4,9 @@ import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
|
4
4
|
import { ViewerContext } from '../ViewerContext';
|
|
5
5
|
import { EntityError, EntityErrorCode, EntityErrorState } from './EntityError';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when an entity field has an invalid value, either during load or mutation.
|
|
9
|
+
*/
|
|
7
10
|
export class EntityInvalidFieldValueError<
|
|
8
11
|
TFields extends Record<string, any>,
|
|
9
12
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
@@ -3,6 +3,9 @@ import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
|
3
3
|
import { ViewerContext } from '../ViewerContext';
|
|
4
4
|
import { EntityError, EntityErrorCode, EntityErrorState } from './EntityError';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when viewer context is not authorized to perform an action on an entity.
|
|
8
|
+
*/
|
|
6
9
|
export class EntityNotAuthorizedError<
|
|
7
10
|
TFields extends Record<string, any>,
|
|
8
11
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
@@ -31,6 +31,9 @@ type EntityNotFoundOptions<
|
|
|
31
31
|
fieldValue: TFields[N];
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Error thrown when an entity is not found during certain load methods.
|
|
36
|
+
*/
|
|
34
37
|
export class EntityNotFoundError<
|
|
35
38
|
TFields extends Record<string, any>,
|
|
36
39
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
@@ -234,7 +234,13 @@ export class StubDatabaseAdapter<
|
|
|
234
234
|
const objectIndex = objectCollection.findIndex((obj) => {
|
|
235
235
|
return obj[tableIdField] === id;
|
|
236
236
|
});
|
|
237
|
-
|
|
237
|
+
|
|
238
|
+
// SQL updates to a nonexistent row succeed but affect 0 rows,
|
|
239
|
+
// mirror that behavior here for better test simulation
|
|
240
|
+
if (objectIndex < 0) {
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
243
|
+
|
|
238
244
|
objectCollection[objectIndex] = {
|
|
239
245
|
...objectCollection[objectIndex],
|
|
240
246
|
...object,
|
|
@@ -253,9 +259,13 @@ export class StubDatabaseAdapter<
|
|
|
253
259
|
const objectIndex = objectCollection.findIndex((obj) => {
|
|
254
260
|
return obj[tableIdField] === id;
|
|
255
261
|
});
|
|
262
|
+
|
|
263
|
+
// SQL deletes to a nonexistent row succeed and affect 0 rows,
|
|
264
|
+
// mirror that behavior here for better test simulation
|
|
256
265
|
if (objectIndex < 0) {
|
|
257
266
|
return 0;
|
|
258
267
|
}
|
|
268
|
+
|
|
259
269
|
objectCollection.splice(objectIndex, 1);
|
|
260
270
|
return 1;
|
|
261
271
|
}
|