Skip to content

SOF-7602: rewrite entity mixins #118

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
5 changes: 4 additions & 1 deletion dist/js/context/mixins.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { ApplicationSchemaBase, JobSchema, MaterialSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types";
import { InMemoryEntity } from "../entity";
import type { OrderedInMemoryEntityInSet } from "../entity/set/ordered/OrderedInMemoryEntityInSetMixin";
type Constructor<T = any> = new (...args: any[]) => T;
export declare function ApplicationContextMixin<T extends Constructor>(superclass: T): {
new (...args: any): {
Expand Down Expand Up @@ -31,7 +32,9 @@ export declare function MaterialsSetContextMixin<T extends Constructor>(supercla
[x: string]: any;
_materialsSet: any;
readonly materialsSet: any;
sortMaterialsByIndexInSet(materials?: never[]): never[];
sortMaterialsByIndexInSet(materials?: OrderedInMemoryEntityInSet[]): {
getIndexByIdInOrderedSet(setId: string): number;
}[];
};
} & T;
export declare function MaterialsContextMixin<T extends Constructor>(superclass: T): {
Expand Down
2 changes: 1 addition & 1 deletion dist/js/entity/in_memory.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export declare class InMemoryEntity implements BaseInMemoryEntitySchema {
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<EntityReferenceSchema>;
/**
* @summary Pluck an entity from a collection by name.
* If no name is provided and no entity has prop isDefault, return the first entity
Expand Down
18 changes: 18 additions & 0 deletions dist/js/entity/mixins/DefaultableMixin.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { Constructor } from "../../utils/types";
import { InMemoryEntity } from "../in_memory";
type ClassBase = Constructor<InMemoryEntity> & {
defaultConfig?: object | null;
};
export declare function defaultableMixinProps<T extends InMemoryEntity>(item: T): {
isDefault: boolean;
};
declare const staticProperties: {
createDefault<T extends ClassBase>(this: T): InstanceType<T> & DefaultableProps;
};
export declare function defaultableMixinStaticProps<T extends ClassBase>(Item: T): {
createDefault<T_1 extends ClassBase>(this: T_1): InstanceType<T_1> & DefaultableProps;
};
type DefaultableProps = ReturnType<typeof defaultableMixinProps>;
export type DefaultableConstructor = Constructor<DefaultableProps> & typeof staticProperties;
export default function DefaultableMixin<S extends ClassBase>(superclass: S): S & DefaultableConstructor;
export {};
36 changes: 36 additions & 0 deletions dist/js/entity/mixins/DefaultableMixin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultableMixinProps = defaultableMixinProps;
exports.defaultableMixinStaticProps = defaultableMixinStaticProps;
exports.default = DefaultableMixin;
function defaultableMixinProps(item) {
const properties = {
get isDefault() {
return item.prop("isDefault", false);
},
set isDefault(isDefault) {
item.setProp("isDefault", isDefault);
},
};
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
return properties;
}
const staticProperties = {
createDefault() {
return new this(this.defaultConfig);
},
};
function defaultableMixinStaticProps(Item) {
Object.defineProperties(Item, Object.getOwnPropertyDescriptors(staticProperties));
return staticProperties;
}
function DefaultableMixin(superclass) {
class DefaultableMixin extends superclass {
constructor(...args) {
super(...args);
defaultableMixinProps(this);
}
}
defaultableMixinStaticProps(DefaultableMixin);
return DefaultableMixin;
}
14 changes: 14 additions & 0 deletions dist/js/entity/mixins/NamedEntityMixin.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import type { Constructor } from "../../utils/types";
import { InMemoryEntity, InMemoryEntityConstructor } from "../in_memory";
export declare function namedEntityMixin(item: InMemoryEntity): {
name: string;
};
export declare function namedEntityMethodsMixin(item: InMemoryEntity): {
setName(name: string): void;
};
type NamedEntityProps = ReturnType<typeof namedEntityMixin>;
type NamedEntityMethods = ReturnType<typeof namedEntityMethodsMixin>;
export type NamedEntity = NamedEntityProps & NamedEntityMethods;
export type NamedEntityConstructor = Constructor<NamedEntity>;
export default function NamedEntityMixin<S extends InMemoryEntityConstructor>(superclass: S): S & NamedEntityConstructor;
export {};
36 changes: 36 additions & 0 deletions dist/js/entity/mixins/NamedEntityMixin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.namedEntityMixin = namedEntityMixin;
exports.namedEntityMethodsMixin = namedEntityMethodsMixin;
exports.default = NamedEntityMixin;
function namedEntityMixin(item) {
const properties = {
get name() {
return item.prop("name", "");
},
set name(name) {
item.setProp("name", name);
},
};
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
return properties;
}
function namedEntityMethodsMixin(item) {
const methods = {
setName(name) {
item.setProp("name", name);
},
};
Object.defineProperties(item, Object.getOwnPropertyDescriptors(methods));
return methods;
}
function NamedEntityMixin(superclass) {
class NamedEntityMixin extends superclass {
constructor(...args) {
super(...args);
namedEntityMixin(this);
namedEntityMethodsMixin(this);
}
}
return NamedEntityMixin;
}
6 changes: 3 additions & 3 deletions dist/js/entity/mixins/context.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export declare function ContextAndRenderFieldsMixin<T extends InMemoryEntityCons
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down Expand Up @@ -65,7 +65,7 @@ export declare function DomainContextProviderMixin<T extends InMemoryEntityConst
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down Expand Up @@ -101,7 +101,7 @@ export declare function ImportantSettingsProviderMixin<T extends InMemoryEntityC
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down
2 changes: 1 addition & 1 deletion dist/js/entity/mixins/context_runtime.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export declare function RuntimeContextFieldMixin<T extends InMemoryEntityConstru
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down
4 changes: 2 additions & 2 deletions dist/js/entity/mixins/flowchart.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export declare function FlowchartItemMixin<T extends InMemoryEntityConstructor>(
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down Expand Up @@ -61,7 +61,7 @@ export declare function FlowchartEntityMixin<T extends InMemoryEntityConstructor
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down
4 changes: 2 additions & 2 deletions dist/js/entity/mixins/hash.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export declare function HashedEntityMixin<T extends InMemoryEntityConstructor>(s
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down Expand Up @@ -59,7 +59,7 @@ export declare function HashedInputArrayMixin<T extends InMemoryEntityConstructo
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
Expand Down
91 changes: 14 additions & 77 deletions dist/js/entity/mixins/props.d.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,8 @@
import { type ConsistencyCheck } from "@mat3ra/esse/dist/js/types";
import type { Constructor } from "../../utils/types";
import { type InMemoryEntity, InMemoryEntityConstructor } from "../in_memory";
export declare function DefaultableMixin<T extends Constructor<InMemoryEntity> = Constructor<InMemoryEntity>>(superclass: T): {
new (...args: any[]): {
readonly isDefault: boolean;
_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;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
clone(extraContext?: object): /*elided*/ any;
validate(): void;
clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
isValid(): boolean;
readonly cls: string;
getClsName(): string;
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
systemName: string;
readonly slug: string;
readonly isSystemEntity: boolean;
};
readonly defaultConfig: object | null;
createDefault(): any;
} & T;
import { InMemoryEntityConstructor } from "../in_memory";
import DefaultableMixin from "./DefaultableMixin";
import NamedEntityMixin from "./NamedEntityMixin";
export { DefaultableMixin, NamedEntityMixin };
export declare function TaggableMixin<T extends InMemoryEntityConstructor>(superclass: T): {
new (...args: any[]): {
tags: string[];
Expand All @@ -56,8 +25,8 @@ export declare function TaggableMixin<T extends InMemoryEntityConstructor>(super
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
Expand Down Expand Up @@ -87,8 +56,8 @@ export declare function HasScopeTrackMixin<T extends InMemoryEntityConstructor>(
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
Expand Down Expand Up @@ -119,8 +88,8 @@ export declare function HasMetadataMixin<T extends InMemoryEntityConstructor>(su
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
Expand Down Expand Up @@ -151,40 +120,8 @@ export declare function HasDescriptionMixin<T extends InMemoryEntityConstructor>
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
systemName: string;
readonly slug: string;
readonly isSystemEntity: boolean;
};
} & T;
export declare function NamedEntityMixin<T extends InMemoryEntityConstructor>(superclass: T): {
new (...args: any[]): {
name: string;
setName(name: string): void;
_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;
setProp(name: string, value: unknown): void;
unsetProp(name: string): void;
setProps(json?: import("@mat3ra/esse/dist/js/esse/types").AnyObject): /*elided*/ any;
toJSON(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
toJSONSafe(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
toJSONQuick(exclude?: string[]): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
clone(extraContext?: object): /*elided*/ any;
validate(): void;
clean(config: import("@mat3ra/esse/dist/js/esse/types").AnyObject): import("@mat3ra/esse/dist/js/esse/types").AnyObject;
isValid(): boolean;
readonly cls: string;
getClsName(): string;
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
Expand Down Expand Up @@ -215,8 +152,8 @@ export declare function HasConsistencyChecksMixin<T extends InMemoryEntityConstr
getAsEntityReference(byIdOnly: true): {
_id: string;
};
getAsEntityReference(byIdOnly: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: InMemoryEntity[], entity: string, name: string): InMemoryEntity;
getAsEntityReference(byIdOnly?: false): Required<import("@mat3ra/esse/dist/js/types").EntityReferenceSchema>;
getEntityByName(entities: import("../in_memory").InMemoryEntity[], entity: string, name: string): import("../in_memory").InMemoryEntity;
id: string;
_id: string;
schemaVersion: string;
Expand Down
36 changes: 8 additions & 28 deletions dist/js/entity/mixins/props.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultableMixin = DefaultableMixin;
exports.NamedEntityMixin = exports.DefaultableMixin = void 0;
exports.TaggableMixin = TaggableMixin;
exports.HasScopeTrackMixin = HasScopeTrackMixin;
exports.HasMetadataMixin = HasMetadataMixin;
exports.HasDescriptionMixin = HasDescriptionMixin;
exports.NamedEntityMixin = NamedEntityMixin;
exports.HasConsistencyChecksMixin = HasConsistencyChecksMixin;
function DefaultableMixin(superclass) {
class DefaultableMixin extends superclass {
get isDefault() {
return this.prop("isDefault", false);
}
static createDefault() {
// @ts-ignore
return new this.prototype.constructor(this.defaultConfig);
}
}
return DefaultableMixin;
}
const DefaultableMixin_1 = __importDefault(require("./DefaultableMixin"));
exports.DefaultableMixin = DefaultableMixin_1.default;
const NamedEntityMixin_1 = __importDefault(require("./NamedEntityMixin"));
exports.NamedEntityMixin = NamedEntityMixin_1.default;
function TaggableMixin(superclass) {
return class extends superclass {
get tags() {
Expand Down Expand Up @@ -72,20 +66,6 @@ function HasDescriptionMixin(superclass) {
}
};
}
function NamedEntityMixin(superclass) {
return class extends superclass {
get name() {
return this.prop("name", "");
}
set name(name) {
this.setProp("name", name);
}
// to be used when getter is overriden
setName(name) {
this.setProp("name", name);
}
};
}
function HasConsistencyChecksMixin(superclass) {
return class HasConsistencyChecksMixin extends superclass {
get consistencyChecks() {
Expand Down
Loading
Loading