@expo/entity 0.53.0 → 0.54.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/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/src/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/src/EntityDatabaseAdapter.js.map +1 -1
- package/build/src/EntityFieldDefinition.js.map +1 -1
- package/build/src/EntityLoaderUtils.js +14 -18
- package/build/src/EntityLoaderUtils.js.map +1 -1
- package/build/src/GenericEntityCacheAdapter.js.map +1 -1
- package/build/src/GenericSecondaryEntityCache.js.map +1 -1
- package/build/src/entityUtils.js +7 -2
- package/build/src/entityUtils.js.map +1 -1
- package/build/src/errors/EntityCacheAdapterError.d.ts +2 -2
- package/build/src/errors/EntityCacheAdapterError.js +12 -2
- package/build/src/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/src/errors/EntityDatabaseAdapterError.d.ts +24 -24
- package/build/src/errors/EntityDatabaseAdapterError.js +111 -24
- package/build/src/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/src/errors/EntityError.d.ts +2 -4
- package/build/src/errors/EntityError.js +5 -8
- package/build/src/errors/EntityError.js.map +1 -1
- package/build/src/errors/EntityInvalidFieldValueError.d.ts +2 -2
- package/build/src/errors/EntityInvalidFieldValueError.js +9 -2
- package/build/src/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/src/errors/EntityNotAuthorizedError.d.ts +2 -2
- package/build/src/errors/EntityNotAuthorizedError.js +9 -2
- package/build/src/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/src/errors/EntityNotFoundError.d.ts +2 -2
- package/build/src/errors/EntityNotFoundError.js +9 -2
- package/build/src/errors/EntityNotFoundError.js.map +1 -1
- package/build/src/internal/CompositeFieldHolder.js.map +1 -1
- package/build/src/internal/CompositeFieldValueMap.js.map +1 -1
- package/build/src/internal/SingleFieldHolder.js.map +1 -1
- package/build/src/utils/EntityPrivacyUtils.js +34 -15
- package/build/src/utils/EntityPrivacyUtils.js.map +1 -1
- package/package.json +10 -13
- package/src/ComposedEntityCacheAdapter.ts +1 -2
- package/src/ComposedSecondaryEntityCache.ts +4 -3
- package/src/EntityDatabaseAdapter.ts +3 -2
- package/src/EntityFieldDefinition.ts +1 -2
- package/src/EntityLoaderUtils.ts +17 -20
- package/src/GenericEntityCacheAdapter.ts +1 -2
- package/src/GenericSecondaryEntityCache.ts +1 -2
- package/src/__tests__/ComposedCacheAdapter-test.ts +4 -3
- package/src/__tests__/EntityFields-test.ts +2 -8
- package/src/entityUtils.ts +7 -4
- package/src/errors/EntityCacheAdapterError.ts +16 -3
- package/src/errors/EntityDatabaseAdapterError.ts +137 -25
- package/src/errors/EntityError.ts +7 -8
- package/src/errors/EntityInvalidFieldValueError.ts +11 -2
- package/src/errors/EntityNotAuthorizedError.ts +11 -2
- package/src/errors/EntityNotFoundError.ts +11 -2
- package/src/errors/__tests__/EntityDatabaseAdapterError-test.ts +68 -11
- package/src/errors/__tests__/EntityError-test.ts +36 -0
- package/src/internal/CompositeFieldHolder.ts +7 -10
- package/src/internal/CompositeFieldValueMap.ts +1 -2
- package/src/internal/SingleFieldHolder.ts +10 -6
- package/src/utils/EntityPrivacyUtils.ts +61 -20
- package/src/utils/__testfixtures__/StubCacheAdapter.ts +2 -4
- package/src/utils/__testfixtures__/StubDatabaseAdapter.ts +1 -1
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +295 -0
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.EntityError = exports.EntityErrorCode = exports.EntityErrorState = void 0;
|
|
7
|
-
const es6_error_1 = __importDefault(require("es6-error"));
|
|
8
4
|
/**
|
|
9
5
|
* The state of an entity error, indicating whether it may be transient/retryable.
|
|
10
6
|
*/
|
|
@@ -39,11 +35,12 @@ var EntityErrorCode;
|
|
|
39
35
|
/**
|
|
40
36
|
* Base class for all known errors thrown by the entity system.
|
|
41
37
|
*/
|
|
42
|
-
class EntityError extends
|
|
43
|
-
|
|
38
|
+
class EntityError extends Error {
|
|
39
|
+
static {
|
|
40
|
+
this.prototype.name = 'EntityError';
|
|
41
|
+
}
|
|
44
42
|
constructor(message, cause) {
|
|
45
|
-
super(message);
|
|
46
|
-
this.cause = cause;
|
|
43
|
+
super(message, { cause });
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
46
|
exports.EntityError = EntityError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityError.js","sourceRoot":"","sources":["../../../src/errors/EntityError.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EntityError.js","sourceRoot":"","sources":["../../../src/errors/EntityError.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,6DAAO,CAAA;IACP,iEAAS,CAAA;IACT,iEAAS,CAAA;AACX,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B;AAED;;GAEG;AACH,IAAY,eAiBX;AAjBD,WAAY,eAAe;IACzB,0EAAuD,CAAA;IACvD,gEAA6C,CAAA;IAC7C,oFAAiE,CAAA;IACjE,kGAA+E,CAAA;IAC/E,8FAA2E,CAAA;IAC3E,gHAA6F,CAAA;IAC7F,wHAAqG,CAAA;IACrG,4HAAyG,CAAA;IACzG,sHAAmG,CAAA;IACnG,kHAA+F,CAAA;IAC/F,8HAA2G,CAAA;IAC3G,sHAAmG,CAAA;IACnG,8HAA2G,CAAA;IAC3G,sHAAmG,CAAA;IACnG,8HAA2G,CAAA;IAC3G,4FAAyE,CAAA;AAC3E,CAAC,EAjBW,eAAe,+BAAf,eAAe,QAiB1B;AAED;;GAEG;AACH,MAAsB,WAAY,SAAQ,KAAK;IAC7C;QACE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC;IACtC,CAAC;IAKD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5B,CAAC;CACF;AAXD,kCAWC"}
|
|
@@ -7,7 +7,7 @@ import { EntityError, EntityErrorCode, EntityErrorState } from './EntityError';
|
|
|
7
7
|
* Error thrown when an entity field has an invalid value, either during load or mutation.
|
|
8
8
|
*/
|
|
9
9
|
export declare class EntityInvalidFieldValueError<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, N extends keyof TFields, TSelectedFields extends keyof TFields = keyof TFields> extends EntityError {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
get state(): EntityErrorState.PERMANENT;
|
|
11
|
+
get code(): EntityErrorCode.ERR_ENTITY_INVALID_FIELD_VALUE;
|
|
12
12
|
constructor(entityClass: IEntityClass<TFields, TIDField, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, fieldName: N, fieldValue?: TFields[N]);
|
|
13
13
|
}
|
|
@@ -6,8 +6,15 @@ const EntityError_1 = require("./EntityError");
|
|
|
6
6
|
* Error thrown when an entity field has an invalid value, either during load or mutation.
|
|
7
7
|
*/
|
|
8
8
|
class EntityInvalidFieldValueError extends EntityError_1.EntityError {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
static {
|
|
10
|
+
this.prototype.name = 'EntityInvalidFieldValueError';
|
|
11
|
+
}
|
|
12
|
+
get state() {
|
|
13
|
+
return EntityError_1.EntityErrorState.PERMANENT;
|
|
14
|
+
}
|
|
15
|
+
get code() {
|
|
16
|
+
return EntityError_1.EntityErrorCode.ERR_ENTITY_INVALID_FIELD_VALUE;
|
|
17
|
+
}
|
|
11
18
|
constructor(entityClass, fieldName, fieldValue) {
|
|
12
19
|
super(`Entity field not valid: ${entityClass.name} (${String(fieldName)} = ${fieldValue})`);
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityInvalidFieldValueError.js","sourceRoot":"","sources":["../../../src/errors/EntityInvalidFieldValueError.ts"],"names":[],"mappings":";;;AAIA,+CAA+E;AAE/E;;GAEG;AACH,MAAa,4BAcX,SAAQ,yBAAW;
|
|
1
|
+
{"version":3,"file":"EntityInvalidFieldValueError.js","sourceRoot":"","sources":["../../../src/errors/EntityInvalidFieldValueError.ts"],"names":[],"mappings":";;;AAIA,+CAA+E;AAE/E;;GAEG;AACH,MAAa,4BAcX,SAAQ,yBAAW;IACnB;QACE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,8BAA8B,CAAC;IACvD,CAAC;IAED,IAAI,KAAK;QACP,OAAO,8BAAgB,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,6BAAe,CAAC,8BAA8B,CAAC;IACxD,CAAC;IAED,YACE,WAOC,EACD,SAAY,EACZ,UAAuB;QAEvB,KAAK,CAAC,2BAA2B,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;IAC9F,CAAC;CACF;AAzCD,oEAyCC"}
|
|
@@ -6,8 +6,8 @@ import { EntityError, EntityErrorCode, EntityErrorState } from './EntityError';
|
|
|
6
6
|
* Error thrown when viewer context is not authorized to perform an action on an entity.
|
|
7
7
|
*/
|
|
8
8
|
export declare class EntityNotAuthorizedError<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields> extends EntityError {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
get state(): EntityErrorState.PERMANENT;
|
|
10
|
+
get code(): EntityErrorCode.ERR_ENTITY_NOT_AUTHORIZED;
|
|
11
11
|
readonly entityClassName: string;
|
|
12
12
|
constructor(entity: TEntity, viewerContext: TViewerContext, action: EntityAuthorizationAction, ruleIndex: number);
|
|
13
13
|
}
|
|
@@ -7,8 +7,15 @@ const EntityError_1 = require("./EntityError");
|
|
|
7
7
|
* Error thrown when viewer context is not authorized to perform an action on an entity.
|
|
8
8
|
*/
|
|
9
9
|
class EntityNotAuthorizedError extends EntityError_1.EntityError {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
static {
|
|
11
|
+
this.prototype.name = 'EntityNotAuthorizedError';
|
|
12
|
+
}
|
|
13
|
+
get state() {
|
|
14
|
+
return EntityError_1.EntityErrorState.PERMANENT;
|
|
15
|
+
}
|
|
16
|
+
get code() {
|
|
17
|
+
return EntityError_1.EntityErrorCode.ERR_ENTITY_NOT_AUTHORIZED;
|
|
18
|
+
}
|
|
12
19
|
entityClassName;
|
|
13
20
|
constructor(entity, viewerContext, action, ruleIndex) {
|
|
14
21
|
super(`Entity not authorized: ${entity} (viewer = ${viewerContext}, action = ${EntityPrivacyPolicy_1.EntityAuthorizationAction[action]}, ruleIndex = ${ruleIndex})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityNotAuthorizedError.js","sourceRoot":"","sources":["../../../src/errors/EntityNotAuthorizedError.ts"],"names":[],"mappings":";;;AAAA,gEAAmE;AAGnE,+CAA+E;AAE/E;;GAEG;AACH,MAAa,wBAMX,SAAQ,yBAAW;
|
|
1
|
+
{"version":3,"file":"EntityNotAuthorizedError.js","sourceRoot":"","sources":["../../../src/errors/EntityNotAuthorizedError.ts"],"names":[],"mappings":";;;AAAA,gEAAmE;AAGnE,+CAA+E;AAE/E;;GAEG;AACH,MAAa,wBAMX,SAAQ,yBAAW;IACnB;QACE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACnD,CAAC;IAED,IAAI,KAAK;QACP,OAAO,8BAAgB,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,6BAAe,CAAC,yBAAyB,CAAC;IACnD,CAAC;IAEe,eAAe,CAAS;IAExC,YACE,MAAe,EACf,aAA6B,EAC7B,MAAiC,EACjC,SAAiB;QAEjB,KAAK,CACH,0BAA0B,MAAM,cAAc,aAAa,cAAc,+CAAyB,CAAC,MAAM,CAAC,iBAAiB,SAAS,GAAG,CACxI,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;IACjD,CAAC;CACF;AAhCD,4DAgCC"}
|
|
@@ -12,8 +12,8 @@ type EntityNotFoundOptions<TFields extends Record<string, any>, TIDField extends
|
|
|
12
12
|
* Error thrown when an entity is not found during certain load methods.
|
|
13
13
|
*/
|
|
14
14
|
export declare class EntityNotFoundError<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, N extends keyof TFields, TSelectedFields extends keyof TFields = keyof TFields> extends EntityError {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
get state(): EntityErrorState.PERMANENT;
|
|
16
|
+
get code(): EntityErrorCode.ERR_ENTITY_NOT_FOUND;
|
|
17
17
|
constructor(message: string);
|
|
18
18
|
constructor(options: EntityNotFoundOptions<TFields, TIDField, TViewerContext, TEntity, TPrivacyPolicy, N, TSelectedFields>);
|
|
19
19
|
}
|
|
@@ -6,8 +6,15 @@ const EntityError_1 = require("./EntityError");
|
|
|
6
6
|
* Error thrown when an entity is not found during certain load methods.
|
|
7
7
|
*/
|
|
8
8
|
class EntityNotFoundError extends EntityError_1.EntityError {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
static {
|
|
10
|
+
this.prototype.name = 'EntityNotFoundError';
|
|
11
|
+
}
|
|
12
|
+
get state() {
|
|
13
|
+
return EntityError_1.EntityErrorState.PERMANENT;
|
|
14
|
+
}
|
|
15
|
+
get code() {
|
|
16
|
+
return EntityError_1.EntityErrorCode.ERR_ENTITY_NOT_FOUND;
|
|
17
|
+
}
|
|
11
18
|
constructor(messageOrOptions) {
|
|
12
19
|
if (typeof messageOrOptions === 'string') {
|
|
13
20
|
super(messageOrOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityNotFoundError.js","sourceRoot":"","sources":["../../../src/errors/EntityNotFoundError.ts"],"names":[],"mappings":";;;AAIA,+CAA+E;AA6B/E;;GAEG;AACH,MAAa,mBAcX,SAAQ,yBAAW;
|
|
1
|
+
{"version":3,"file":"EntityNotFoundError.js","sourceRoot":"","sources":["../../../src/errors/EntityNotFoundError.ts"],"names":[],"mappings":";;;AAIA,+CAA+E;AA6B/E;;GAEG;AACH,MAAa,mBAcX,SAAQ,yBAAW;IACnB;QACE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,qBAAqB,CAAC;IAC9C,CAAC;IAED,IAAI,KAAK;QACP,OAAO,8BAAgB,CAAC,SAAS,CAAC;IACpC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,6BAAe,CAAC,oBAAoB,CAAC;IAC9C,CAAC;IAeD,YACE,gBAUK;QAEL,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACzC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,KAAK,CACH,qBAAqB,gBAAgB,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,gBAAgB,CAAC,UAAU,GAAG,CAClI,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA7DD,kDA6DC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeFieldHolder.js","sourceRoot":"","sources":["../../../src/internal/CompositeFieldHolder.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAOlC,gDAAsC;AACtC,qFAAkF;AAClF,2EAK0C;AAW1C;;;;;GAKG;AACH,MAAa,oBAAoB;
|
|
1
|
+
{"version":3,"file":"CompositeFieldHolder.js","sourceRoot":"","sources":["../../../src/internal/CompositeFieldHolder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeFieldValueMap.js","sourceRoot":"","sources":["../../../src/internal/CompositeFieldValueMap.ts"],"names":[],"mappings":";;;AACA,iEAGgC;AAEhC;;GAEG;AACH,MAAa,sBAAsB;
|
|
1
|
+
{"version":3,"file":"CompositeFieldValueMap.js","sourceRoot":"","sources":["../../../src/internal/CompositeFieldValueMap.ts"],"names":[],"mappings":";;;AACA,iEAGgC;AAEhC;;GAEG;AACH,MAAa,sBAAsB;IAKhB,GAAG,CAAoD;IAExE,YAAY,OAA2D;QACrE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgD,CAAC;QACpE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,mBAA0D;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gDAAyB,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,GAAG,CAAC,mBAA0D;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gDAAyB,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,CACL,UAIS,EACT,OAAa;QAEb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC9B,UAAU,CAAC,IAAI,CACb,OAAO,EACP,KAAK,EACL,gDAAyB,CAAC,WAAW,CAAa,GAAG,CAAC,CAAC,mBAAmB,EAC1E,IAAI,CACL,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,CAAC,OAAO;QACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,gDAAyB,CAAC,WAAW,CAAa,GAAG,CAAC,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,CAAC,IAAI;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,gDAAyB,CAAC,WAAW,CAAa,GAAG,CAAC,CAAC,mBAAmB,CAAC;QACnF,CAAC;IACH,CAAC;IAED,CAAC,MAAM;QACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,wBAAwB,CAAC;IAClC,CAAC;CACF;AAtED,wDAsEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingleFieldHolder.js","sourceRoot":"","sources":["../../../src/internal/SingleFieldHolder.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAGlC,qFAAkF;AAClF,iEAKgC;AAEhC;;;;GAIG;AACH,MAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"SingleFieldHolder.js","sourceRoot":"","sources":["../../../src/internal/SingleFieldHolder.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAGlC,qFAAkF;AAClF,iEAKgC;AAEhC;;;;GAIG;AACH,MAAa,iBAAiB;IAUA;IAA5B,YAA4B,SAAY;QAAZ,cAAS,GAAT,SAAS,CAAG;IAAG,CAAC;IAE5C,QAAQ;QACN,OAAO,eAAe,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAClD,CAAC;IAEM,WAAW,CAAC,mBAA2D;QAC5E,OAAO,mBAAmB,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAEM,kBAAkB,CAAC,mBAA2D;QACnF,OAAO,CAAC,IAAA,+DAA8B,EAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,iBAAiB,CAAC,KAAyC;QACzD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB,CAAC,MAAyB;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,+BAA+B,CAC7B,mBAA2D,EAC3D,KAAyC;QAEzC,MAAM,UAAU,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtF,IAAA,mBAAS,EAAC,UAAU,EAAE,sCAAsC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,iBAAiB;QACf,OAAO,2CAAoB,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,2BAA2B;QACzB,OAAO,IAAI,CAAC,SAAmB,CAAC;IAClC,CAAC;IAED,kBAAkB,CAAC,KAAyC;QAC1D,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;IAED,oBAAoB,CAAC,KAA8B;QACjD,OAAO,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,iDAAiD,CAC/C,MAAqD,EACrD,eAAuB;QAEvB,MAAM,yBAAyB,GAAG,MAAM,CAAC,SAAS,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CACvE,CAAC;QACF,IAAI,yBAAyB,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,iBAAiB,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MACzD,MAAM,CAAC,yBAAyB,CAAC,EAAE,UACrC,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mBAAmB;QAKjB,OAAO,IAAI,yBAAyB,EAAE,CAAC;IACzC,CAAC;CACF;AApFD,8CAoFC;AAED;;;;GAIG;AACH,MAAa,sBAAsB;IAIL;IAA5B,YAA4B,UAAmC;QAAnC,eAAU,GAAV,UAAU,CAAyB;IAAG,CAAC;IAEnE,QAAQ;QACN,OAAO,oBAAoB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IACxD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,UAAmC;QAEnC,OAAO,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;CACF;AAnBD,wDAmBC;AAED;;GAEG;AACH,MAAa,yBAIX,SAAQ,mCAA4E;IACjE,cAAc,CAC/B,aAAsC;QAEtC,OAAO,sBAAsB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;CACF;AAVD,8DAUC"}
|
|
@@ -30,8 +30,7 @@ async function canViewerUpdateAsync(entityClass, sourceEntity, queryContext = so
|
|
|
30
30
|
.getViewerScopedEntityCompanionForClass(entityClass)
|
|
31
31
|
.getQueryContextProvider()
|
|
32
32
|
.getQueryContext()) {
|
|
33
|
-
const result = await canViewerUpdateInternalAsync(entityClass, sourceEntity,
|
|
34
|
-
/* cascadingDeleteCause */ null, queryContext);
|
|
33
|
+
const result = await canViewerUpdateInternalAsync(entityClass, sourceEntity, { previousValue: sourceEntity, cascadingDeleteCause: null }, queryContext);
|
|
35
34
|
return result.allowed;
|
|
36
35
|
}
|
|
37
36
|
/**
|
|
@@ -48,15 +47,14 @@ async function getCanViewerUpdateResultAsync(entityClass, sourceEntity, queryCon
|
|
|
48
47
|
.getViewerScopedEntityCompanionForClass(entityClass)
|
|
49
48
|
.getQueryContextProvider()
|
|
50
49
|
.getQueryContext()) {
|
|
51
|
-
return await canViewerUpdateInternalAsync(entityClass, sourceEntity,
|
|
52
|
-
/* cascadingDeleteCause */ null, queryContext);
|
|
50
|
+
return await canViewerUpdateInternalAsync(entityClass, sourceEntity, { previousValue: sourceEntity, cascadingDeleteCause: null }, queryContext);
|
|
53
51
|
}
|
|
54
|
-
async function canViewerUpdateInternalAsync(entityClass, sourceEntity,
|
|
52
|
+
async function canViewerUpdateInternalAsync(entityClass, sourceEntity, evaluationContext, queryContext) {
|
|
55
53
|
const companion = sourceEntity
|
|
56
54
|
.getViewerContext()
|
|
57
55
|
.getViewerScopedEntityCompanionForClass(entityClass);
|
|
58
56
|
const privacyPolicy = companion.entityCompanion.privacyPolicy;
|
|
59
|
-
const evaluationResult = await (0, results_1.asyncResult)(privacyPolicy.authorizeUpdateAsync(sourceEntity.getViewerContext(), queryContext,
|
|
57
|
+
const evaluationResult = await (0, results_1.asyncResult)(privacyPolicy.authorizeUpdateAsync(sourceEntity.getViewerContext(), queryContext, evaluationContext, sourceEntity, companion.getMetricsAdapter()));
|
|
60
58
|
if (!evaluationResult.ok) {
|
|
61
59
|
if (evaluationResult.reason instanceof EntityNotAuthorizedError_1.EntityNotAuthorizedError) {
|
|
62
60
|
return { allowed: false, authorizationErrors: [evaluationResult.reason] };
|
|
@@ -82,8 +80,7 @@ async function canViewerDeleteAsync(entityClass, sourceEntity, queryContext = so
|
|
|
82
80
|
.getViewerScopedEntityCompanionForClass(entityClass)
|
|
83
81
|
.getQueryContextProvider()
|
|
84
82
|
.getQueryContext()) {
|
|
85
|
-
const result = await canViewerDeleteInternalAsync(entityClass, sourceEntity,
|
|
86
|
-
/* cascadingDeleteCause */ null, queryContext);
|
|
83
|
+
const result = await canViewerDeleteInternalAsync(entityClass, sourceEntity, { previousValue: null, cascadingDeleteCause: null }, queryContext);
|
|
87
84
|
return result.allowed;
|
|
88
85
|
}
|
|
89
86
|
/**
|
|
@@ -100,17 +97,16 @@ async function getCanViewerDeleteResultAsync(entityClass, sourceEntity, queryCon
|
|
|
100
97
|
.getViewerScopedEntityCompanionForClass(entityClass)
|
|
101
98
|
.getQueryContextProvider()
|
|
102
99
|
.getQueryContext()) {
|
|
103
|
-
return await canViewerDeleteInternalAsync(entityClass, sourceEntity,
|
|
104
|
-
/* cascadingDeleteCause */ null, queryContext);
|
|
100
|
+
return await canViewerDeleteInternalAsync(entityClass, sourceEntity, { previousValue: null, cascadingDeleteCause: null }, queryContext);
|
|
105
101
|
}
|
|
106
|
-
async function canViewerDeleteInternalAsync(entityClass, sourceEntity,
|
|
102
|
+
async function canViewerDeleteInternalAsync(entityClass, sourceEntity, evaluationContext, queryContext) {
|
|
107
103
|
const viewerContext = sourceEntity.getViewerContext();
|
|
108
104
|
const entityCompanionProvider = viewerContext.entityCompanionProvider;
|
|
109
105
|
const viewerScopedCompanion = sourceEntity
|
|
110
106
|
.getViewerContext()
|
|
111
107
|
.getViewerScopedEntityCompanionForClass(entityClass);
|
|
112
108
|
const privacyPolicy = viewerScopedCompanion.entityCompanion.privacyPolicy;
|
|
113
|
-
const evaluationResult = await (0, results_1.asyncResult)(privacyPolicy.authorizeDeleteAsync(sourceEntity.getViewerContext(), queryContext,
|
|
109
|
+
const evaluationResult = await (0, results_1.asyncResult)(privacyPolicy.authorizeDeleteAsync(sourceEntity.getViewerContext(), queryContext, evaluationContext, sourceEntity, viewerScopedCompanion.getMetricsAdapter()));
|
|
114
110
|
if (!evaluationResult.ok) {
|
|
115
111
|
if (evaluationResult.reason instanceof EntityNotAuthorizedError_1.EntityNotAuthorizedError) {
|
|
116
112
|
return { allowed: false, authorizationErrors: [evaluationResult.reason] };
|
|
@@ -121,7 +117,7 @@ async function canViewerDeleteInternalAsync(entityClass, sourceEntity, cascading
|
|
|
121
117
|
}
|
|
122
118
|
const newCascadingDeleteCause = {
|
|
123
119
|
entity: sourceEntity,
|
|
124
|
-
cascadingDeleteCause,
|
|
120
|
+
cascadingDeleteCause: evaluationContext.cascadingDeleteCause,
|
|
125
121
|
};
|
|
126
122
|
// Take entity X which is proposed to be deleted, look at inbound edges (entities that reference X).
|
|
127
123
|
// These inbound edges are the entities that will either get deleted or have their references
|
|
@@ -188,7 +184,7 @@ async function canViewerDeleteInternalAsync(entityClass, sourceEntity, cascading
|
|
|
188
184
|
switch (association.edgeDeletionBehavior) {
|
|
189
185
|
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE:
|
|
190
186
|
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY: {
|
|
191
|
-
const canDeleteEvaluationResults = await Promise.all(entitiesForInboundEdge.map((entity) => canViewerDeleteInternalAsync(inboundEdge, entity, newCascadingDeleteCause, queryContext)));
|
|
187
|
+
const canDeleteEvaluationResults = await Promise.all(entitiesForInboundEdge.map((entity) => canViewerDeleteInternalAsync(inboundEdge, entity, { previousValue: null, cascadingDeleteCause: newCascadingDeleteCause }, queryContext)));
|
|
192
188
|
const reducedEvaluationResult = reduceEvaluationResults(canDeleteEvaluationResults);
|
|
193
189
|
if (!reducedEvaluationResult.allowed) {
|
|
194
190
|
return reducedEvaluationResult;
|
|
@@ -197,7 +193,30 @@ async function canViewerDeleteInternalAsync(entityClass, sourceEntity, cascading
|
|
|
197
193
|
}
|
|
198
194
|
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL:
|
|
199
195
|
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL_INVALIDATE_CACHE_ONLY: {
|
|
200
|
-
|
|
196
|
+
// create synthetic entities with the reference field set to null to properly evaluate
|
|
197
|
+
// privacy policy as it would be after the cascading SET NULL operation
|
|
198
|
+
const previousAndSyntheticEntitiesForInboundEdge = entitiesForInboundEdge.map((entity) => {
|
|
199
|
+
const entityLoader = viewerContext
|
|
200
|
+
.getViewerScopedEntityCompanionForClass(inboundEdge)
|
|
201
|
+
.getLoaderFactory()
|
|
202
|
+
.forLoad(queryContext, {
|
|
203
|
+
previousValue: entity,
|
|
204
|
+
cascadingDeleteCause: newCascadingDeleteCause,
|
|
205
|
+
});
|
|
206
|
+
const allFields = entity.getAllDatabaseFields();
|
|
207
|
+
const syntheticFields = {
|
|
208
|
+
...allFields,
|
|
209
|
+
[fieldName]: null,
|
|
210
|
+
};
|
|
211
|
+
return {
|
|
212
|
+
previousValue: entity,
|
|
213
|
+
syntheticallyUpdatedValue: entityLoader.utils.constructEntity(syntheticFields),
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
const canUpdateEvaluationResults = await Promise.all(previousAndSyntheticEntitiesForInboundEdge.map(({ previousValue, syntheticallyUpdatedValue }) => canViewerUpdateInternalAsync(inboundEdge, syntheticallyUpdatedValue, {
|
|
217
|
+
previousValue,
|
|
218
|
+
cascadingDeleteCause: newCascadingDeleteCause,
|
|
219
|
+
}, queryContext)));
|
|
201
220
|
const reducedEvaluationResult = reduceEvaluationResults(canUpdateEvaluationResults);
|
|
202
221
|
if (!reducedEvaluationResult.allowed) {
|
|
203
222
|
return reducedEvaluationResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPrivacyUtils.js","sourceRoot":"","sources":["../../../src/utils/EntityPrivacyUtils.ts"],"names":[],"mappings":";;AA4CA,oDAoCC;AAWD,sEAmCC;
|
|
1
|
+
{"version":3,"file":"EntityPrivacyUtils.js","sourceRoot":"","sources":["../../../src/utils/EntityPrivacyUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/entity",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.0",
|
|
4
4
|
"description": "A privacy-first data model",
|
|
5
5
|
"files": [
|
|
6
6
|
"build",
|
|
@@ -29,20 +29,17 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@expo/results": "^1.0.0",
|
|
31
31
|
"dataloader": "^2.2.3",
|
|
32
|
-
"es6-error": "^4.1.1",
|
|
33
32
|
"invariant": "^2.2.4"
|
|
34
33
|
},
|
|
35
34
|
"devDependencies": {
|
|
36
|
-
"@jest/globals": "
|
|
37
|
-
"@types/invariant": "
|
|
38
|
-
"@types/lodash": "
|
|
39
|
-
"@types/node": "
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"uuid": "^8.3.0",
|
|
45
|
-
"uuidv7": "^1.0.0"
|
|
35
|
+
"@jest/globals": "30.2.0",
|
|
36
|
+
"@types/invariant": "2.2.37",
|
|
37
|
+
"@types/lodash": "4.17.23",
|
|
38
|
+
"@types/node": "24.10.9",
|
|
39
|
+
"lodash": "4.17.21",
|
|
40
|
+
"ts-mockito": "2.6.1",
|
|
41
|
+
"typescript": "5.9.3",
|
|
42
|
+
"uuid": "13.0.0"
|
|
46
43
|
},
|
|
47
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "283c02eedbd4f5721afad96f31ada85bf92afb41"
|
|
48
45
|
}
|
|
@@ -10,8 +10,7 @@ import { CacheLoadResult, CacheStatus } from './internal/ReadThroughEntityCache'
|
|
|
10
10
|
export class ComposedEntityCacheAdapter<
|
|
11
11
|
TFields extends Record<string, any>,
|
|
12
12
|
TIDField extends keyof TFields,
|
|
13
|
-
> implements IEntityCacheAdapter<TFields, TIDField>
|
|
14
|
-
{
|
|
13
|
+
> implements IEntityCacheAdapter<TFields, TIDField> {
|
|
15
14
|
/**
|
|
16
15
|
* @param cacheAdapters - list of cache adapters to compose in order of precedence.
|
|
17
16
|
* Earlier cache adapters are read from first and written to (including invalidations) last.
|
|
@@ -5,9 +5,10 @@ import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
|
|
|
5
5
|
/**
|
|
6
6
|
* A ISecondaryEntityCache that composes other ISecondaryEntityCache instances.
|
|
7
7
|
*/
|
|
8
|
-
export class ComposedSecondaryEntityCache<
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
export class ComposedSecondaryEntityCache<
|
|
9
|
+
TLoadParams,
|
|
10
|
+
TFields extends Record<string, any>,
|
|
11
|
+
> implements ISecondaryEntityCache<TFields, TLoadParams> {
|
|
11
12
|
/**
|
|
12
13
|
* @param secondaryEntityCaches - list of caches to compose in order of precedence.
|
|
13
14
|
* Earlier caches are read from first and written to (including invalidations) last.
|
|
@@ -114,8 +114,9 @@ export interface QuerySelectionModifiers<TFields extends Record<string, any>> {
|
|
|
114
114
|
limit?: number;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
export interface QuerySelectionModifiersWithOrderByRaw<
|
|
118
|
-
extends
|
|
117
|
+
export interface QuerySelectionModifiersWithOrderByRaw<
|
|
118
|
+
TFields extends Record<string, any>,
|
|
119
|
+
> extends QuerySelectionModifiers<TFields> {
|
|
119
120
|
/**
|
|
120
121
|
* Order the entities by a raw SQL `ORDER BY` clause.
|
|
121
122
|
*/
|
|
@@ -147,8 +147,7 @@ export interface EntityFieldDefinitionOptionsBase {
|
|
|
147
147
|
association?: EntityAssociationDefinition<any, any, any, any, any, any>;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
export interface EntityFieldDefinitionOptionsExplicitCache
|
|
151
|
-
extends EntityFieldDefinitionOptionsBase {
|
|
150
|
+
export interface EntityFieldDefinitionOptionsExplicitCache extends EntityFieldDefinitionOptionsBase {
|
|
152
151
|
/**
|
|
153
152
|
* Whether or not to cache loaded instances of the entity by this field. The column name is
|
|
154
153
|
* used to derive a cache key for the cache entry. If true, this column must be able uniquely
|
package/src/EntityLoaderUtils.ts
CHANGED
|
@@ -61,29 +61,26 @@ export class EntityLoaderUtils<
|
|
|
61
61
|
objectFields: Readonly<TFields>,
|
|
62
62
|
): readonly LoadPair<TFields, TIDField, any, any, any>[] {
|
|
63
63
|
const keys = Object.keys(objectFields) as (keyof TFields)[];
|
|
64
|
-
const singleFieldKeyValues =
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
return [
|
|
64
|
+
const singleFieldKeyValues: LoadPair<TFields, TIDField, any, any, any>[] = [];
|
|
65
|
+
for (const fieldName of keys) {
|
|
66
|
+
const value = objectFields[fieldName];
|
|
67
|
+
if (value !== undefined && value !== null) {
|
|
68
|
+
singleFieldKeyValues.push([
|
|
71
69
|
new SingleFieldHolder<TFields, TIDField, typeof fieldName>(fieldName),
|
|
72
70
|
new SingleFieldValueHolder(value),
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
|
|
71
|
+
]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const compositeFieldKeyValues: LoadPair<TFields, TIDField, any, any, any>[] = [];
|
|
76
|
+
for (const compositeFieldHolder of this.entityConfiguration.compositeFieldInfo.getAllCompositeFieldHolders()) {
|
|
77
|
+
const compositeFieldValueHolder =
|
|
78
|
+
compositeFieldHolder.extractCompositeFieldValueHolderFromObjectFields(objectFields);
|
|
79
|
+
if (compositeFieldValueHolder) {
|
|
80
|
+
compositeFieldKeyValues.push([compositeFieldHolder, compositeFieldValueHolder]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
76
83
|
|
|
77
|
-
const compositeFieldKeyValues = this.entityConfiguration.compositeFieldInfo
|
|
78
|
-
.getAllCompositeFieldHolders()
|
|
79
|
-
.map((compositeFieldHolder) => {
|
|
80
|
-
const compositeFieldValueHolder =
|
|
81
|
-
compositeFieldHolder.extractCompositeFieldValueHolderFromObjectFields(objectFields);
|
|
82
|
-
return compositeFieldValueHolder
|
|
83
|
-
? ([compositeFieldHolder, compositeFieldValueHolder] as const)
|
|
84
|
-
: null;
|
|
85
|
-
})
|
|
86
|
-
.filter((kv) => kv !== null);
|
|
87
84
|
return [...singleFieldKeyValues, ...compositeFieldKeyValues];
|
|
88
85
|
}
|
|
89
86
|
|
|
@@ -12,8 +12,7 @@ import { mapKeys } from './utils/collections/maps';
|
|
|
12
12
|
export class GenericEntityCacheAdapter<
|
|
13
13
|
TFields extends Record<string, any>,
|
|
14
14
|
TIDField extends keyof TFields,
|
|
15
|
-
> implements IEntityCacheAdapter<TFields, TIDField>
|
|
16
|
-
{
|
|
15
|
+
> implements IEntityCacheAdapter<TFields, TIDField> {
|
|
17
16
|
constructor(private readonly genericCacher: IEntityGenericCacher<TFields, TIDField>) {}
|
|
18
17
|
|
|
19
18
|
public async loadManyAsync<
|
|
@@ -14,8 +14,7 @@ export abstract class GenericSecondaryEntityCache<
|
|
|
14
14
|
TFields extends Record<string, any>,
|
|
15
15
|
TIDField extends keyof TFields,
|
|
16
16
|
TLoadParams,
|
|
17
|
-
> implements ISecondaryEntityCache<TFields, TLoadParams>
|
|
18
|
-
{
|
|
17
|
+
> implements ISecondaryEntityCache<TFields, TLoadParams> {
|
|
19
18
|
constructor(
|
|
20
19
|
protected readonly cacher: IEntityGenericCacher<TFields, TIDField>,
|
|
21
20
|
protected readonly constructCacheKey: (params: Readonly<TLoadParams>) => string,
|
|
@@ -27,9 +27,10 @@ type LocalMemoryCacheValue<TFields extends Record<string, any>> =
|
|
|
27
27
|
| Readonly<TFields>
|
|
28
28
|
| typeof DOES_NOT_EXIST_LOCAL_MEMORY_CACHE;
|
|
29
29
|
|
|
30
|
-
class TestLocalCacheAdapter<
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
class TestLocalCacheAdapter<
|
|
31
|
+
TFields extends Record<string, any>,
|
|
32
|
+
TIDField extends keyof TFields,
|
|
33
|
+
> implements IEntityCacheAdapter<TFields, TIDField> {
|
|
33
34
|
constructor(
|
|
34
35
|
private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
35
36
|
private readonly cache: Map<string, LocalMemoryCacheValue<TFields>>,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it, test } from '@jest/globals';
|
|
2
|
-
import { v1 as uuidv1, v3 as uuidv3, v4 as uuidv4, v5 as uuidv5 } from 'uuid';
|
|
2
|
+
import { v1 as uuidv1, v3 as uuidv3, v4 as uuidv4, v5 as uuidv5, v7 as uuidv7 } from 'uuid';
|
|
3
3
|
|
|
4
4
|
import { EntityFieldDefinition } from '../EntityFieldDefinition';
|
|
5
5
|
import {
|
|
@@ -58,13 +58,7 @@ describe(EntityFieldDefinition, () => {
|
|
|
58
58
|
describeFieldTestCase(new StringField({ columnName: 'wat' }), ['hello', ''], [1, true, {}, [[]]]);
|
|
59
59
|
describeFieldTestCase(
|
|
60
60
|
new UUIDField({ columnName: 'wat' }),
|
|
61
|
-
[
|
|
62
|
-
uuidv1(),
|
|
63
|
-
uuidv3('wat', uuidv3.DNS),
|
|
64
|
-
uuidv4(),
|
|
65
|
-
uuidv5('wat', uuidv5.DNS),
|
|
66
|
-
/* UUIDv7 */ '018ebfda-dc80-782d-a891-22a0aa057d52',
|
|
67
|
-
],
|
|
61
|
+
[uuidv1(), uuidv3('wat', uuidv3.DNS), uuidv4(), uuidv5('wat', uuidv5.DNS), uuidv7()],
|
|
68
62
|
[uuidv4().replace('-', ''), '', 'hello', uuidv4().toUpperCase()],
|
|
69
63
|
);
|
|
70
64
|
describeFieldTestCase(new DateField({ columnName: 'wat' }), [new Date()], [Date.now()]);
|
package/src/entityUtils.ts
CHANGED
|
@@ -115,8 +115,11 @@ export const pick = <T extends object, U extends keyof T>(
|
|
|
115
115
|
object: T,
|
|
116
116
|
props: readonly U[],
|
|
117
117
|
): Pick<T, U> => {
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
const result = {} as Pick<T, U>;
|
|
119
|
+
for (const prop of props) {
|
|
120
|
+
if (object.hasOwnProperty(prop)) {
|
|
121
|
+
result[prop] = object[prop];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return result;
|
|
122
125
|
};
|
|
@@ -3,13 +3,26 @@ import { EntityError, EntityErrorCode, EntityErrorState } from './EntityError';
|
|
|
3
3
|
/**
|
|
4
4
|
* Base class for errors thrown by the entity cache adapter.
|
|
5
5
|
*/
|
|
6
|
-
export abstract class EntityCacheAdapterError extends EntityError {
|
|
6
|
+
export abstract class EntityCacheAdapterError extends EntityError {
|
|
7
|
+
static {
|
|
8
|
+
this.prototype.name = 'EntityCacheAdapterError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
7
11
|
|
|
8
12
|
/**
|
|
9
13
|
* Error thrown when a transient error occurs in the entity cache adapter.
|
|
10
14
|
* Transient errors may succeed if retried.
|
|
11
15
|
*/
|
|
12
16
|
export class EntityCacheAdapterTransientError extends EntityCacheAdapterError {
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
static {
|
|
18
|
+
this.prototype.name = 'EntityCacheAdapterTransientError';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
get state(): EntityErrorState.TRANSIENT {
|
|
22
|
+
return EntityErrorState.TRANSIENT;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get code(): EntityErrorCode.ERR_ENTITY_CACHE_ADAPTER_TRANSIENT {
|
|
26
|
+
return EntityErrorCode.ERR_ENTITY_CACHE_ADAPTER_TRANSIENT;
|
|
27
|
+
}
|
|
15
28
|
}
|