Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion dist/js/entity/in_memory.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { JSONSchema } from "@mat3ra/esse/dist/js/esse/utils";
import { BaseInMemoryEntitySchema, EntityReferenceSchema } from "@mat3ra/esse/dist/js/types";
export declare enum ValidationErrorCode {
IN_MEMORY_ENTITY_DATA_INVALID = "IN_MEMORY_ENTITY_DATA_INVALID",
ENTITY_REFERENCE_ERROR = "ENTITY_REFERENCE_ERROR"
ENTITY_REFERENCE_ERROR = "ENTITY_REFERENCE_ERROR",
REQUIRED_PROPERTY_MISSING = "REQUIRED_PROPERTY_MISSING"
}
interface ErrorDetails {
error?: object | null;
Expand All @@ -27,6 +28,10 @@ export declare class InMemoryEntity implements BaseInMemoryEntitySchema {
constructor(config?: {});
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
/**
* @summary Return a required prop, throwing an error if it doesn't exist or is undefined/null
*/
requiredProp<T>(name: string): T;
/**
* @summary Set a prop
*/
Expand Down
18 changes: 18 additions & 0 deletions dist/js/entity/in_memory.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ var ValidationErrorCode;
(function (ValidationErrorCode) {
ValidationErrorCode["IN_MEMORY_ENTITY_DATA_INVALID"] = "IN_MEMORY_ENTITY_DATA_INVALID";
ValidationErrorCode["ENTITY_REFERENCE_ERROR"] = "ENTITY_REFERENCE_ERROR";
ValidationErrorCode["REQUIRED_PROPERTY_MISSING"] = "REQUIRED_PROPERTY_MISSING";
})(ValidationErrorCode || (exports.ValidationErrorCode = ValidationErrorCode = {}));
class EntityError extends Error {
constructor({ code, details }) {
Expand All @@ -72,6 +73,23 @@ class InMemoryEntity {
// `lodash.get` gets `null` when the value is `null`, but we still want a default value in this case, hence `||`
return (0, get_1.default)(this._json, name, defaultValue) || defaultValue;
}
/**
* @summary Return a required prop, throwing an error if it doesn't exist or is undefined/null
*/
requiredProp(name) {
const value = this.prop(name);
if (value === undefined || value === null) {
throw new EntityError({
code: ValidationErrorCode.REQUIRED_PROPERTY_MISSING,
details: {
error: null,
json: this._json,
schema: this.constructor.jsonSchema || {},
},
});
}
return value;
}
/**
* @summary Set a prop
*/
Expand Down
3 changes: 3 additions & 0 deletions dist/js/entity/mixins/context.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export declare function ContextAndRenderFieldsMixin<T extends InMemoryEntityCons
_json: AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -50,6 +51,7 @@ export declare function DomainContextProviderMixin<T extends InMemoryEntityConst
_json: AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -86,6 +88,7 @@ export declare function ImportantSettingsProviderMixin<T extends InMemoryEntityC
_json: AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: AnyObject): /*elided*/ any;
Expand Down
1 change: 1 addition & 0 deletions dist/js/entity/mixins/context_runtime.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export declare function RuntimeContextFieldMixin<T extends InMemoryEntityConstru
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down
2 changes: 2 additions & 0 deletions dist/js/entity/mixins/flowchart.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export declare function FlowchartItemMixin<T extends InMemoryEntityConstructor>(
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -46,6 +47,7 @@ export declare function FlowchartEntityMixin<T extends InMemoryEntityConstructor
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down
1 change: 1 addition & 0 deletions dist/js/entity/mixins/hash.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export declare function HashedEntityMixin<T extends InMemoryEntityConstructor>(s
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down
1 change: 1 addition & 0 deletions dist/js/entity/mixins/repetition.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export declare function HasRepetitionMixin<T extends InMemoryEntityConstructor>(
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down
2 changes: 2 additions & 0 deletions dist/js/entity/mixins/runtime_items.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export declare function RuntimeItemsUILogicMixin<T extends Constructor<BaseRunti
getResultByName(name: string): NameResultSchema | undefined;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -81,6 +82,7 @@ export declare function RuntimeItemsUIAllowedMixin<T extends InMemoryEntityConst
_json: AnyObject;
prop<T_1 = undefined>(name: string, defaultValue: T_1): T_1;
prop<T_1 = undefined>(name: string): T_1 | undefined;
requiredProp<T_1>(name: string): T_1;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: AnyObject): /*elided*/ any;
Expand Down
10 changes: 10 additions & 0 deletions dist/js/entity/other.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export declare const NamedDefaultableRepetitionImportantSettingsInMemoryEntity:
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -72,6 +73,7 @@ export declare const NamedDefaultableRepetitionImportantSettingsInMemoryEntity:
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -111,6 +113,7 @@ export declare const NamedDefaultableRepetitionContextAndRenderInMemoryEntity: {
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -149,6 +152,7 @@ export declare const NamedDefaultableRepetitionContextAndRenderInMemoryEntity: {
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -181,6 +185,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -219,6 +224,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -254,6 +260,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -286,6 +293,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -331,6 +339,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
getResultByName(name: string): import("@mat3ra/esse/dist/js/types").NameResultSchema | undefined;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down Expand Up @@ -382,6 +391,7 @@ export declare const NamedDefaultableRepetitionRuntimeItemsImportantSettingsCont
_json: import("@mat3ra/esse/dist/js/esse/types").AnyObject;
prop<T = undefined>(name: string, defaultValue: T): T;
prop<T = undefined>(name: string): T | undefined;
requiredProp<T>(name: string): T;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
Expand Down
22 changes: 5 additions & 17 deletions dist/js/entity/set/InMemoryEntityInSetMixin.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,12 @@ import type { Constructor } from "../../utils/types";
import { type InMemoryEntity } from "../in_memory";
export type SystemInSet = Required<SystemInSetSchema>;
export type InSet = SystemInSet["inSet"][0];
export declare function inMemoryEntityInSetMixin<E extends InMemoryEntity>(item: E): {
getInSetFilteredByCls(cls: string): {
_id: string;
cls?: string;
slug?: string;
type?: string;
index?: number;
}[];
parentEntitySetReference: {
_id: string;
cls?: string;
slug?: string;
type?: string;
index?: number;
} | undefined;
inSet: InSet[];
export declare function inMemoryEntityInSetMixin<E extends InMemoryEntity>(item: E): void;
export type InSetPropertiesInMemoryEntity = {
getInSetFilteredByCls: (cls: string) => InSet[];
parentEntitySetReference: InSet | undefined;
};
export type InMemoryEntityInSet = ReturnType<typeof inMemoryEntityInSetMixin>;
export type InMemoryEntityInSet = SystemInSet & InSetPropertiesInMemoryEntity;
export type InMemoryEntityInSetConstructor = Constructor<InMemoryEntityInSet>;
type Base = Constructor<InMemoryEntity>;
export default function InMemoryEntityInSetMixin<S extends Base = Base>(superclass: S): S & InMemoryEntityInSetConstructor;
Expand Down
31 changes: 8 additions & 23 deletions dist/js/entity/set/InMemoryEntityInSetMixin.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,29 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.inMemoryEntityInSetMixin = inMemoryEntityInSetMixin;
exports.default = InMemoryEntityInSetMixin;
function schemaMixin(item) {
const schema = {
function inMemoryEntityInSetMixin(item) {
// @ts-expect-error
const properties = {
get inSet() {
return item.prop("inSet", []);
return this.prop("inSet", []);
},
set inSet(inSet) {
item.setProp("inSet", inSet);
this.setProp("inSet", inSet);
},
};
Object.defineProperties(item, Object.getOwnPropertyDescriptors(schema));
return schema;
}
function propertiesMixin(item) {
const properties = {
getInSetFilteredByCls(cls) {
return item.inSet.filter((ref) => ref.cls === cls);
return this.inSet.filter((ref) => ref.cls === cls);
},
// finds a parent entity set of the same cls (hence `cls` field is absent)
// NOTE: assumes that only one entry of this kind is present => gets the first one
get parentEntitySetReference() {
return item.inSet.find((item) => item._id && !item.cls);
return this.inSet.find((inSetItem) => inSetItem._id && !inSetItem.cls);
},
};
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
return properties;
}
function inMemoryEntityInSetMixin(item) {
return {
...schemaMixin(item),
...propertiesMixin(item),
};
}
function InMemoryEntityInSetMixin(superclass) {
class InMemoryEntityInSetMixin extends superclass {
constructor(...args) {
super(...args);
inMemoryEntityInSetMixin(this);
}
}
inMemoryEntityInSetMixin(InMemoryEntityInSetMixin.prototype);
return InMemoryEntityInSetMixin;
}
20 changes: 7 additions & 13 deletions dist/js/utils/object.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,28 @@ export declare function getOneMatchFromObject(obj: object, attribute: string, va
*/
export declare function convertKeysToCamelCaseForObject(obj: object): import("lodash").Dictionary<any>;
export declare function renameKeysForObject<T>(o: T, keysOriginal: string[], keysRenamed: string[]): T;
export interface NameValueObject {
export type NameValueObject = {
name: string;
value: unknown;
[key: string]: unknown;
}
units?: string;
};
export type NameValueObjectExtended = NameValueObject & {
[key: string]: NameValueObject | string | number | undefined;
};
/**
* @summary Converts object into string. Recursive. Required properties for object: "name", "value".
* "units" property is ignored. Only one extra property is allowed. Function is called recursively on extraProperty.
* E.g. {name: "propName", value: 1} -> 'propName=1'
* {name: "propName", value: 1, extraProp: {name: "extraPropName", value: "2"}} -> "propName=1:extraPropName=2"
* @param {Object} obj Object to stringify.
* @param {String} [levelSeparator] ':' by default.
* @param {String} [keyValueSeparator] '=' by default.
* @param {String} [prefix] Empty by default.
*/
export declare function stringifyObject(obj: NameValueObject, levelSeparator?: string, keyValueSeparator?: string, prefix?: string): string;
/**
* @summary Flattens complex object into object with single key-value pair. Required properties for object: "name", "value".
* "units" property is ignored. Only one extra property is allowed. E.g.
* {name: 'propName', value: 1} -> {propName: 1}
* {name: "propName", value: 1, extraProp: {name: "extraPropName", value: "2"}} -> {"propName:extraPropName=2": 1}
* @param {Object} obj Object to stringify.
* @param {String} [levelSeparator] ':' by default.
* @param {String} [keyValueSeparator] '=' by default.
* @param {String} [suffix]
* @return {Object}
*/
export declare function flattenObject(obj: NameValueObject, levelSeparator?: string, keyValueSeparator?: string, suffix?: string | undefined): {
export declare function flattenObject(obj: NameValueObjectExtended, levelSeparator?: string, keyValueSeparator?: string, suffix?: string | undefined): {
[x: string]: unknown;
};
/**
Expand Down
9 changes: 0 additions & 9 deletions dist/js/utils/object.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,6 @@ o, keysOriginal = [], keysRenamed = []) {
* "units" property is ignored. Only one extra property is allowed. Function is called recursively on extraProperty.
* E.g. {name: "propName", value: 1} -> 'propName=1'
* {name: "propName", value: 1, extraProp: {name: "extraPropName", value: "2"}} -> "propName=1:extraPropName=2"
* @param {Object} obj Object to stringify.
* @param {String} [levelSeparator] ':' by default.
* @param {String} [keyValueSeparator] '=' by default.
* @param {String} [prefix] Empty by default.
*/
function stringifyObject(obj, levelSeparator = ":", keyValueSeparator = "=", prefix = "") {
const requiredKeys = ["name", "value"];
Expand Down Expand Up @@ -118,11 +114,6 @@ function stringifyObject(obj, levelSeparator = ":", keyValueSeparator = "=", pre
* "units" property is ignored. Only one extra property is allowed. E.g.
* {name: 'propName', value: 1} -> {propName: 1}
* {name: "propName", value: 1, extraProp: {name: "extraPropName", value: "2"}} -> {"propName:extraPropName=2": 1}
* @param {Object} obj Object to stringify.
* @param {String} [levelSeparator] ':' by default.
* @param {String} [keyValueSeparator] '=' by default.
* @param {String} [suffix]
* @return {Object}
*/
// eslint-disable-next-line default-param-last
function flattenObject(obj, levelSeparator = ":", keyValueSeparator = "=", suffix = undefined) {
Expand Down
Loading
Loading