Skip to content

Commit 5ef787c

Browse files
authored
Merge pull request #118 from Exabyte-io/chore/SOF-7602
SOF-7602: rewrite entity mixins
2 parents 92f6e79 + 3e19f4c commit 5ef787c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1345
-1541
lines changed

dist/js/context/mixins.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ApplicationSchemaBase, JobSchema, MaterialSchema, WorkflowSchema } from "@mat3ra/esse/dist/js/types";
22
import { InMemoryEntity } from "../entity";
3+
import type { OrderedInMemoryEntityInSet } from "../entity/set/ordered/OrderedInMemoryEntityInSetMixin";
34
type Constructor<T = any> = new (...args: any[]) => T;
45
export declare function ApplicationContextMixin<T extends Constructor>(superclass: T): {
56
new (...args: any): {
@@ -31,7 +32,9 @@ export declare function MaterialsSetContextMixin<T extends Constructor>(supercla
3132
[x: string]: any;
3233
_materialsSet: any;
3334
readonly materialsSet: any;
34-
sortMaterialsByIndexInSet(materials?: never[]): never[];
35+
sortMaterialsByIndexInSet(materials?: OrderedInMemoryEntityInSet[]): {
36+
getIndexByIdInOrderedSet(setId: string): number;
37+
}[];
3538
};
3639
} & T;
3740
export declare function MaterialsContextMixin<T extends Constructor>(superclass: T): {

dist/js/entity/in_memory.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export declare class InMemoryEntity implements BaseInMemoryEntitySchema {
6868
getAsEntityReference(byIdOnly: true): {
6969
_id: string;
7070
};
71-
getAsEntityReference(byIdOnly: false): Required<EntityReferenceSchema>;
71+
getAsEntityReference(byIdOnly?: false): Required<EntityReferenceSchema>;
7272
/**
7373
* @summary Pluck an entity from a collection by name.
7474
* If no name is provided and no entity has prop isDefault, return the first entity
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Constructor } from "../../utils/types";
2+
import { InMemoryEntity } from "../in_memory";
3+
type ClassBase = Constructor<InMemoryEntity> & {
4+
defaultConfig?: object | null;
5+
};
6+
export declare function defaultableMixinProps<T extends InMemoryEntity>(item: T): {
7+
isDefault: boolean;
8+
};
9+
declare const staticProperties: {
10+
createDefault<T extends ClassBase>(this: T): InstanceType<T> & DefaultableInMemoryEntity;
11+
};
12+
export declare function defaultableMixinStaticProps<T extends ClassBase>(Item: T): {
13+
createDefault<T_1 extends ClassBase>(this: T_1): InstanceType<T_1> & DefaultableInMemoryEntity;
14+
};
15+
export type DefaultableInMemoryEntity = ReturnType<typeof defaultableMixinProps>;
16+
export type DefaultableInMemoryEntityConstructor = Constructor<DefaultableInMemoryEntity>;
17+
export type DefaultableConstructor = DefaultableInMemoryEntityConstructor & typeof staticProperties;
18+
export default function DefaultableMixin<S extends ClassBase>(superclass: S): S & DefaultableConstructor;
19+
export {};
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.defaultableMixinProps = defaultableMixinProps;
4+
exports.defaultableMixinStaticProps = defaultableMixinStaticProps;
5+
exports.default = DefaultableMixin;
6+
function defaultableMixinProps(item) {
7+
const properties = {
8+
get isDefault() {
9+
return item.prop("isDefault", false);
10+
},
11+
set isDefault(isDefault) {
12+
item.setProp("isDefault", isDefault);
13+
},
14+
};
15+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
16+
return properties;
17+
}
18+
const staticProperties = {
19+
createDefault() {
20+
return new this(this.defaultConfig);
21+
},
22+
};
23+
function defaultableMixinStaticProps(Item) {
24+
Object.defineProperties(Item, Object.getOwnPropertyDescriptors(staticProperties));
25+
return staticProperties;
26+
}
27+
function DefaultableMixin(superclass) {
28+
class DefaultableMixin extends superclass {
29+
constructor(...args) {
30+
super(...args);
31+
defaultableMixinProps(this);
32+
}
33+
}
34+
defaultableMixinStaticProps(DefaultableMixin);
35+
return DefaultableMixin;
36+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { ConsistencyCheck } from "@mat3ra/esse/dist/js/types";
2+
import type { Constructor } from "../../utils/types";
3+
import { InMemoryEntity, InMemoryEntityConstructor } from "../in_memory";
4+
export declare function hasConsistencyChecksMixin(item: InMemoryEntity): {
5+
addConsistencyChecks(array: ConsistencyCheck[]): void;
6+
consistencyChecks: ConsistencyCheck[];
7+
};
8+
export type HasConsistencyChecksInMemoryEntity = ReturnType<typeof hasConsistencyChecksMixin>;
9+
export type HasConsistencyChecksInMemoryEntityConstructor = Constructor<HasConsistencyChecksInMemoryEntity>;
10+
export default function HasConsistencyChecksMixin<S extends InMemoryEntityConstructor>(superclass: S): S & HasConsistencyChecksInMemoryEntityConstructor;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.hasConsistencyChecksMixin = hasConsistencyChecksMixin;
4+
exports.default = HasConsistencyChecksMixin;
5+
function schemaMixin(item) {
6+
const schema = {
7+
get consistencyChecks() {
8+
return item.prop("consistencyChecks", []);
9+
},
10+
set consistencyChecks(array) {
11+
item.setProp("consistencyChecks", array);
12+
},
13+
};
14+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(schema));
15+
return schema;
16+
}
17+
function propertiesMixin(item) {
18+
const properties = {
19+
addConsistencyChecks(array) {
20+
item.consistencyChecks = [...(item.consistencyChecks || []), ...array];
21+
},
22+
};
23+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
24+
return properties;
25+
}
26+
function hasConsistencyChecksMixin(item) {
27+
return {
28+
...schemaMixin(item),
29+
...propertiesMixin(item),
30+
};
31+
}
32+
function HasConsistencyChecksMixin(superclass) {
33+
class HasConsistencyChecksMixin extends superclass {
34+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
35+
constructor(...args) {
36+
super(...args);
37+
hasConsistencyChecksMixin(this);
38+
}
39+
}
40+
return HasConsistencyChecksMixin;
41+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { DescriptionSchema } from "@mat3ra/esse/dist/js/types";
2+
import type { Constructor } from "../../utils/types";
3+
import { InMemoryEntity, InMemoryEntityConstructor } from "../in_memory";
4+
export declare function hasDescriptionMixin(item: InMemoryEntity): {
5+
description: string;
6+
descriptionObject: DescriptionSchema["descriptionObject"];
7+
};
8+
export type HasDescriptionInMemoryEntity = ReturnType<typeof hasDescriptionMixin>;
9+
export type HasDescriptionInMemoryEntityConstructor = Constructor<HasDescriptionInMemoryEntity>;
10+
export default function HasDescriptionMixin<S extends InMemoryEntityConstructor>(superclass: S): S & HasDescriptionInMemoryEntityConstructor;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.hasDescriptionMixin = hasDescriptionMixin;
4+
exports.default = HasDescriptionMixin;
5+
function schemaMixin(item) {
6+
const schema = {
7+
get description() {
8+
return item.prop("description", "");
9+
},
10+
set description(string) {
11+
item.setProp("description", string);
12+
},
13+
get descriptionObject() {
14+
return item.prop("descriptionObject");
15+
},
16+
set descriptionObject(obj) {
17+
item.setProp("descriptionObject", obj);
18+
},
19+
};
20+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(schema));
21+
return schema;
22+
}
23+
function hasDescriptionMixin(item) {
24+
return schemaMixin(item);
25+
}
26+
function HasDescriptionMixin(superclass) {
27+
class HasDescriptionMixin extends superclass {
28+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
29+
constructor(...args) {
30+
super(...args);
31+
hasDescriptionMixin(this);
32+
}
33+
}
34+
return HasDescriptionMixin;
35+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { Constructor } from "../../utils/types";
2+
import { InMemoryEntity, InMemoryEntityConstructor } from "../in_memory";
3+
export declare function hasMetadataMixin(item: InMemoryEntity): {
4+
updateMetadata(object: object): void;
5+
metadata: object;
6+
};
7+
export type HasMetadataInMemoryEntity = ReturnType<typeof hasMetadataMixin>;
8+
export type HasMetadataInMemoryEntityConstructor = Constructor<HasMetadataInMemoryEntity>;
9+
export default function HasMetadataMixin<S extends InMemoryEntityConstructor>(superclass: S): S & HasMetadataInMemoryEntityConstructor;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.hasMetadataMixin = hasMetadataMixin;
4+
exports.default = HasMetadataMixin;
5+
function schemaMixin(item) {
6+
const schema = {
7+
get metadata() {
8+
return item.prop("metadata", {});
9+
},
10+
set metadata(object) {
11+
item.setProp("metadata", object);
12+
},
13+
};
14+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(schema));
15+
return schema;
16+
}
17+
function propertiesMixin(item) {
18+
const properties = {
19+
updateMetadata(object) {
20+
item.metadata = { ...item.metadata, ...object };
21+
},
22+
};
23+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
24+
return properties;
25+
}
26+
function hasMetadataMixin(item) {
27+
return {
28+
...schemaMixin(item),
29+
...propertiesMixin(item),
30+
};
31+
}
32+
function HasMetadataMixin(superclass) {
33+
class HasMetadataMixin extends superclass {
34+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
35+
constructor(...args) {
36+
super(...args);
37+
hasMetadataMixin(this);
38+
}
39+
}
40+
return HasMetadataMixin;
41+
}

0 commit comments

Comments
 (0)