Skip to content

Commit 7a3ec7b

Browse files
authored
Merge pull request #126 from Exabyte-io/chore/SOF-7687
SOF-7687: in_memory requiredProp method
2 parents 55dea8d + 792f892 commit 7a3ec7b

16 files changed

+108
-108
lines changed

dist/js/entity/in_memory.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils";
33
import { BaseInMemoryEntitySchema, EntityReferenceSchema } from "@mat3ra/esse/dist/js/types";
44
export declare enum ValidationErrorCode {
55
IN_MEMORY_ENTITY_DATA_INVALID = "IN_MEMORY_ENTITY_DATA_INVALID",
6-
ENTITY_REFERENCE_ERROR = "ENTITY_REFERENCE_ERROR"
6+
ENTITY_REFERENCE_ERROR = "ENTITY_REFERENCE_ERROR",
7+
REQUIRED_PROPERTY_MISSING = "REQUIRED_PROPERTY_MISSING"
78
}
89
interface ErrorDetails {
910
error?: object | null;
@@ -27,6 +28,10 @@ export declare class InMemoryEntity implements BaseInMemoryEntitySchema {
2728
constructor(config?: {});
2829
prop<T = undefined>(name: string, defaultValue: T): T;
2930
prop<T = undefined>(name: string): T | undefined;
31+
/**
32+
* @summary Return a required prop, throwing an error if it doesn't exist or is undefined/null
33+
*/
34+
requiredProp<T>(name: string): T;
3035
/**
3136
* @summary Set a prop
3237
*/

dist/js/entity/in_memory.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ var ValidationErrorCode;
4646
(function (ValidationErrorCode) {
4747
ValidationErrorCode["IN_MEMORY_ENTITY_DATA_INVALID"] = "IN_MEMORY_ENTITY_DATA_INVALID";
4848
ValidationErrorCode["ENTITY_REFERENCE_ERROR"] = "ENTITY_REFERENCE_ERROR";
49+
ValidationErrorCode["REQUIRED_PROPERTY_MISSING"] = "REQUIRED_PROPERTY_MISSING";
4950
})(ValidationErrorCode || (exports.ValidationErrorCode = ValidationErrorCode = {}));
5051
class EntityError extends Error {
5152
constructor({ code, details }) {
@@ -72,6 +73,23 @@ class InMemoryEntity {
7273
// `lodash.get` gets `null` when the value is `null`, but we still want a default value in this case, hence `||`
7374
return (0, get_1.default)(this._json, name, defaultValue) || defaultValue;
7475
}
76+
/**
77+
* @summary Return a required prop, throwing an error if it doesn't exist or is undefined/null
78+
*/
79+
requiredProp(name) {
80+
const value = this.prop(name);
81+
if (value === undefined || value === null) {
82+
throw new EntityError({
83+
code: ValidationErrorCode.REQUIRED_PROPERTY_MISSING,
84+
details: {
85+
error: null,
86+
json: this._json,
87+
schema: this.constructor.jsonSchema || {},
88+
},
89+
});
90+
}
91+
return value;
92+
}
7593
/**
7694
* @summary Set a prop
7795
*/

dist/js/entity/mixins/context.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export declare function ContextAndRenderFieldsMixin<T extends InMemoryEntityCons
1515
_json: AnyObject;
1616
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
1717
prop<T_1 = undefined>(name: string): T_1 | undefined;
18+
requiredProp<T_1>(name: string): T_1;
1819
setProp(name: string, value: unknown): void;
1920
unsetProp(name: string): void;
2021
setProps(json?: AnyObject): /*elided*/ any;
@@ -50,6 +51,7 @@ export declare function DomainContextProviderMixin<T extends InMemoryEntityConst
5051
_json: AnyObject;
5152
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
5253
prop<T_1 = undefined>(name: string): T_1 | undefined;
54+
requiredProp<T_1>(name: string): T_1;
5355
setProp(name: string, value: unknown): void;
5456
unsetProp(name: string): void;
5557
setProps(json?: AnyObject): /*elided*/ any;
@@ -86,6 +88,7 @@ export declare function ImportantSettingsProviderMixin<T extends InMemoryEntityC
8688
_json: AnyObject;
8789
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
8890
prop<T_1 = undefined>(name: string): T_1 | undefined;
91+
requiredProp<T_1>(name: string): T_1;
8992
setProp(name: string, value: unknown): void;
9093
unsetProp(name: string): void;
9194
setProps(json?: AnyObject): /*elided*/ any;

dist/js/entity/mixins/context_runtime.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export declare function RuntimeContextFieldMixin<T extends InMemoryEntityConstru
1212
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
1313
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
1414
prop<T_1 = undefined>(name: string): T_1 | undefined;
15+
requiredProp<T_1>(name: string): T_1;
1516
setProp(name: string, value: unknown): void;
1617
unsetProp(name: string): void;
1718
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;

dist/js/entity/mixins/flowchart.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export declare function FlowchartItemMixin<T extends InMemoryEntityConstructor>(
88
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
99
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
1010
prop<T_1 = undefined>(name: string): T_1 | undefined;
11+
requiredProp<T_1>(name: string): T_1;
1112
setProp(name: string, value: unknown): void;
1213
unsetProp(name: string): void;
1314
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -46,6 +47,7 @@ export declare function FlowchartEntityMixin<T extends InMemoryEntityConstructor
4647
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
4748
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
4849
prop<T_1 = undefined>(name: string): T_1 | undefined;
50+
requiredProp<T_1>(name: string): T_1;
4951
setProp(name: string, value: unknown): void;
5052
unsetProp(name: string): void;
5153
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;

dist/js/entity/mixins/hash.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export declare function HashedEntityMixin<T extends InMemoryEntityConstructor>(s
1111
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
1212
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
1313
prop<T_1 = undefined>(name: string): T_1 | undefined;
14+
requiredProp<T_1>(name: string): T_1;
1415
setProp(name: string, value: unknown): void;
1516
unsetProp(name: string): void;
1617
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;

dist/js/entity/mixins/repetition.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export declare function HasRepetitionMixin<T extends InMemoryEntityConstructor>(
1919
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
2020
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
2121
prop<T_1 = undefined>(name: string): T_1 | undefined;
22+
requiredProp<T_1>(name: string): T_1;
2223
setProp(name: string, value: unknown): void;
2324
unsetProp(name: string): void;
2425
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;

dist/js/entity/mixins/runtime_items.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export declare function RuntimeItemsUILogicMixin<T extends Constructor<BaseRunti
3535
getResultByName(name: string): NameResultSchema | undefined;
3636
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
3737
prop<T_1 = undefined>(name: string): T_1 | undefined;
38+
requiredProp<T_1>(name: string): T_1;
3839
setProp(name: string, value: unknown): void;
3940
unsetProp(name: string): void;
4041
setProps(json?: AnyObject): /*elided*/ any;
@@ -81,6 +82,7 @@ export declare function RuntimeItemsUIAllowedMixin<T extends InMemoryEntityConst
8182
_json: AnyObject;
8283
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
8384
prop<T_1 = undefined>(name: string): T_1 | undefined;
85+
requiredProp<T_1>(name: string): T_1;
8486
setProp(name: string, value: unknown): void;
8587
unsetProp(name: string): void;
8688
setProps(json?: AnyObject): /*elided*/ any;

dist/js/entity/other.d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export declare const NamedDefaultableRepetitionImportantSettingsInMemoryEntity:
3434
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
3535
prop<T = undefined>(name: string, defaultValue: T): T;
3636
prop<T = undefined>(name: string): T | undefined;
37+
requiredProp<T>(name: string): T;
3738
setProp(name: string, value: unknown): void;
3839
unsetProp(name: string): void;
3940
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -72,6 +73,7 @@ export declare const NamedDefaultableRepetitionImportantSettingsInMemoryEntity:
7273
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
7374
prop<T = undefined>(name: string, defaultValue: T): T;
7475
prop<T = undefined>(name: string): T | undefined;
76+
requiredProp<T>(name: string): T;
7577
setProp(name: string, value: unknown): void;
7678
unsetProp(name: string): void;
7779
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -111,6 +113,7 @@ export declare const NamedDefaultableRepetitionContextAndRenderInMemoryEntity: {
111113
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
112114
prop<T = undefined>(name: string, defaultValue: T): T;
113115
prop<T = undefined>(name: string): T | undefined;
116+
requiredProp<T>(name: string): T;
114117
setProp(name: string, value: unknown): void;
115118
unsetProp(name: string): void;
116119
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -149,6 +152,7 @@ export declare const NamedDefaultableRepetitionContextAndRenderInMemoryEntity: {
149152
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
150153
prop<T = undefined>(name: string, defaultValue: T): T;
151154
prop<T = undefined>(name: string): T | undefined;
155+
requiredProp<T>(name: string): T;
152156
setProp(name: string, value: unknown): void;
153157
unsetProp(name: string): void;
154158
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -181,6 +185,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
181185
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
182186
prop<T = undefined>(name: string, defaultValue: T): T;
183187
prop<T = undefined>(name: string): T | undefined;
188+
requiredProp<T>(name: string): T;
184189
setProp(name: string, value: unknown): void;
185190
unsetProp(name: string): void;
186191
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -219,6 +224,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
219224
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
220225
prop<T = undefined>(name: string, defaultValue: T): T;
221226
prop<T = undefined>(name: string): T | undefined;
227+
requiredProp<T>(name: string): T;
222228
setProp(name: string, value: unknown): void;
223229
unsetProp(name: string): void;
224230
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -254,6 +260,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
254260
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
255261
prop<T = undefined>(name: string, defaultValue: T): T;
256262
prop<T = undefined>(name: string): T | undefined;
263+
requiredProp<T>(name: string): T;
257264
setProp(name: string, value: unknown): void;
258265
unsetProp(name: string): void;
259266
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -286,6 +293,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
286293
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
287294
prop<T = undefined>(name: string, defaultValue: T): T;
288295
prop<T = undefined>(name: string): T | undefined;
296+
requiredProp<T>(name: string): T;
289297
setProp(name: string, value: unknown): void;
290298
unsetProp(name: string): void;
291299
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -331,6 +339,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
331339
getResultByName(name: string): import("@mat3ra/esse/dist/js/types").NameResultSchema | undefined;
332340
prop<T = undefined>(name: string, defaultValue: T): T;
333341
prop<T = undefined>(name: string): T | undefined;
342+
requiredProp<T>(name: string): T;
334343
setProp(name: string, value: unknown): void;
335344
unsetProp(name: string): void;
336345
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
@@ -382,6 +391,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
382391
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
383392
prop<T = undefined>(name: string, defaultValue: T): T;
384393
prop<T = undefined>(name: string): T | undefined;
394+
requiredProp<T>(name: string): T;
385395
setProp(name: string, value: unknown): void;
386396
unsetProp(name: string): void;
387397
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;

dist/js/entity/set/InMemoryEntityInSetMixin.d.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,12 @@ import type { Constructor } from "../../utils/types";
33
import { type InMemoryEntity } from "../in_memory";
44
export type SystemInSet = Required<SystemInSetSchema>;
55
export type InSet = SystemInSet["inSet"][0];
6-
export declare function inMemoryEntityInSetMixin<E extends InMemoryEntity>(item: E): {
7-
getInSetFilteredByCls(cls: string): {
8-
_id: string;
9-
cls?: string;
10-
slug?: string;
11-
type?: string;
12-
index?: number;
13-
}[];
14-
parentEntitySetReference: {
15-
_id: string;
16-
cls?: string;
17-
slug?: string;
18-
type?: string;
19-
index?: number;
20-
} | undefined;
21-
inSet: InSet[];
6+
export declare function inMemoryEntityInSetMixin<E extends InMemoryEntity>(item: E): void;
7+
export type InSetPropertiesInMemoryEntity = {
8+
getInSetFilteredByCls: (cls: string) => InSet[];
9+
parentEntitySetReference: InSet | undefined;
2210
};
23-
export type InMemoryEntityInSet = ReturnType<typeof inMemoryEntityInSetMixin>;
11+
export type InMemoryEntityInSet = SystemInSet & InSetPropertiesInMemoryEntity;
2412
export type InMemoryEntityInSetConstructor = Constructor<InMemoryEntityInSet>;
2513
type Base = Constructor<InMemoryEntity>;
2614
export default function InMemoryEntityInSetMixin<S extends Base = Base>(superclass: S): S & InMemoryEntityInSetConstructor;

0 commit comments

Comments
 (0)