Skip to content

Commit b51e5b1

Browse files
committed
chore: improve materials metadata
1 parent 5803c54 commit b51e5b1

File tree

5 files changed

+32
-44
lines changed

5 files changed

+32
-44
lines changed
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import { type HasMetadataSchemaMixin } from "../../generated/HasMetadataSchemaMixin";
1+
import type { MetadataSchema } from "@mat3ra/esse/dist/js/types";
22
import type { Constructor } from "../../utils/types";
33
import { InMemoryEntity } from "../in_memory";
4-
type HasMetadataProperties = {
5-
updateMetadata: (object: object) => void;
4+
type Metadata = MetadataSchema["metadata"];
5+
export type HasMetadata<T extends Metadata = Metadata> = {
6+
metadata?: T;
7+
updateMetadata: (object: Partial<T>) => void;
68
};
7-
export type HasMetadata = HasMetadataSchemaMixin & HasMetadataProperties;
8-
export type HasMetadataInMemoryEntityConstructor = Constructor<HasMetadata>;
9+
export type HasMetadataInMemoryEntityConstructor<T extends Metadata = Metadata> = Constructor<HasMetadata<T>>;
910
export declare function hasMetadataMixin<T extends InMemoryEntity>(item: T): asserts item is T & HasMetadata;
1011
export {};
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
"use strict";
22
Object.defineProperty(exports, "__esModule", { value: true });
33
exports.hasMetadataMixin = hasMetadataMixin;
4-
const HasMetadataSchemaMixin_1 = require("../../generated/HasMetadataSchemaMixin");
54
function hasMetadataPropertiesMixin(item) {
65
// @ts-expect-error
76
const properties = {
7+
get metadata() {
8+
return this.prop("metadata");
9+
},
10+
set metadata(value) {
11+
this.setProp("metadata", value);
12+
},
813
updateMetadata(object) {
914
this.setProp("metadata", { ...this.metadata, ...object });
1015
},
1116
};
1217
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
1318
}
1419
function hasMetadataMixin(item) {
15-
(0, HasMetadataSchemaMixin_1.hasMetadataSchemaMixin)(item);
1620
hasMetadataPropertiesMixin(item);
1721
}

scripts/generate-mixins.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const OUTPUT_PATHS = {
2727
"system/defaultable": "src/js/generated/DefaultableSchemaMixin.ts",
2828
"system/has-consistency-check": "src/js/generated/HasConsistencyChecksSchemaMixin.ts",
2929
"system/description": "src/js/generated/HasDescriptionSchemaMixin.ts",
30-
"system/metadata": "src/js/generated/HasMetadataSchemaMixin.ts",
30+
// "system/metadata": "src/js/generated/HasMetadataSchemaMixin.ts",
3131
"system/name": "src/js/generated/NamedEntitySchemaMixin.ts",
3232
"system/tags": "src/js/generated/TaggableSchemaMixin.ts",
3333
"system/runtime-items": "src/js/generated/RuntimeItemsSchemaMixin.ts",
Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1-
import {
2-
type HasMetadataSchemaMixin,
3-
hasMetadataSchemaMixin,
4-
} from "../../generated/HasMetadataSchemaMixin";
1+
import type { MetadataSchema } from "@mat3ra/esse/dist/js/types";
2+
53
import type { Constructor } from "../../utils/types";
64
import { InMemoryEntity } from "../in_memory";
75

8-
type HasMetadataProperties = {
9-
updateMetadata: (object: object) => void;
10-
};
6+
type Metadata = MetadataSchema["metadata"];
117

12-
export type HasMetadata = HasMetadataSchemaMixin & HasMetadataProperties;
8+
export type HasMetadata<T extends Metadata = Metadata> = {
9+
metadata?: T;
10+
updateMetadata: (object: Partial<T>) => void;
11+
};
1312

14-
export type HasMetadataInMemoryEntityConstructor = Constructor<HasMetadata>;
13+
export type HasMetadataInMemoryEntityConstructor<T extends Metadata = Metadata> = Constructor<
14+
HasMetadata<T>
15+
>;
1516

16-
function hasMetadataPropertiesMixin<T extends InMemoryEntity>(
17+
function hasMetadataPropertiesMixin<T extends InMemoryEntity, M extends Metadata = Metadata>(
1718
item: T,
1819
): asserts item is T & HasMetadata {
1920
// @ts-expect-error
20-
const properties: InMemoryEntity & HasMetadata = {
21-
updateMetadata(object: object) {
21+
const properties: InMemoryEntity & HasMetadata<M> = {
22+
get metadata() {
23+
return this.prop<M>("metadata");
24+
},
25+
set metadata(value: M | undefined) {
26+
this.setProp("metadata", value);
27+
},
28+
updateMetadata(object: Partial<M>) {
2229
this.setProp("metadata", { ...this.metadata, ...object });
2330
},
2431
};
@@ -28,6 +35,5 @@ function hasMetadataPropertiesMixin<T extends InMemoryEntity>(
2835
export function hasMetadataMixin<T extends InMemoryEntity>(
2936
item: T,
3037
): asserts item is T & HasMetadata {
31-
hasMetadataSchemaMixin(item);
3238
hasMetadataPropertiesMixin(item);
3339
}

src/js/generated/HasMetadataSchemaMixin.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)