@sentio/sdk 2.39.4-rc.8 → 2.39.4-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/store/decorators.d.ts +0 -1
- package/lib/store/decorators.d.ts.map +1 -1
- package/lib/store/decorators.js +62 -59
- package/lib/store/decorators.js.map +1 -1
- package/lib/store/schema.d.ts.map +1 -1
- package/lib/store/schema.js +38 -0
- package/lib/store/schema.js.map +1 -1
- package/lib/store/store.js +5 -5
- package/lib/store/store.js.map +1 -1
- package/package.json +3 -3
- package/src/store/decorators.ts +68 -61
- package/src/store/schema.ts +40 -0
- package/src/store/store.ts +7 -7
@@ -9,7 +9,6 @@ export declare function Entity(name: string): <T extends Constructor>(BaseClass:
|
|
9
9
|
[x: string]: any;
|
10
10
|
readonly _data: RichStruct;
|
11
11
|
};
|
12
|
-
entityName: string;
|
13
12
|
} & T;
|
14
13
|
export declare function Column(type: string): (target: any, propertyKey: string) => void;
|
15
14
|
export declare function ListColumn(type?: string): (target: any, propertyKey: string) => void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAcL,cAAc,EACf,MAAM,cAAc,CAAA;
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAcL,cAAc,EACf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3C,KAAK,WAAW,GAAG;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,CAAA;AAUhD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,sCACkB,CAAC;kBAgE3B,GAAG,EAAE;;wBADV,UAAU;;MAc/B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,YACR,GAAG,eAAe,MAAM,UAelD;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAW,YACjB,GAAG,eAAe,MAAM,UAuBlD;AAED,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,YACtB,GAAG,eAAe,MAAM,UAclD;AAED,eAAO,MAAM,QAAQ,WAhBM,GAAG,eAAe,MAAM,SAgBR,CAAA;AAC3C,eAAO,MAAM,SAAS,WAjBK,GAAG,eAAe,MAAM,SAiBN,CAAA;AAC7C,eAAO,MAAM,WAAW,WAlBG,GAAG,eAAe,MAAM,SAkBF,CAAA;AACjD,eAAO,MAAM,gBAAgB,WAnBF,GAAG,eAAe,MAAM,SAmBQ,CAAA;AAC3D,eAAO,MAAM,YAAY,WApBE,GAAG,eAAe,MAAM,SAoBA,CAAA;AACnD,eAAO,MAAM,YAAY,WArBE,GAAG,eAAe,MAAM,SAqBA,CAAA;AACnD,eAAO,MAAM,aAAa,WAtBC,GAAG,eAAe,MAAM,SAsBE,CAAA;AACrD,eAAO,MAAM,eAAe,WAvBD,GAAG,eAAe,MAAM,SAuBM,CAAA;AACzD,eAAO,MAAM,WAAW,WAxBG,GAAG,eAAe,MAAM,SAwBF,CAAA;AAEjD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,QAOxD;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,YACP,GAAG,eAAe,MAAM,UAGlD;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,YACR,GAAG,eAAe,MAAM,UAGlD"}
|
package/lib/store/decorators.js
CHANGED
@@ -11,70 +11,73 @@ function handleError(entity, key, fn) {
|
|
11
11
|
}
|
12
12
|
export function Entity(name) {
|
13
13
|
return function (BaseClass) {
|
14
|
+
Object.defineProperty(BaseClass, 'entityName', {
|
15
|
+
value: name
|
16
|
+
});
|
17
|
+
const meta = BaseClass.meta || {};
|
18
|
+
const target = BaseClass.prototype;
|
19
|
+
for (const [propertyKey, type] of Object.entries(meta)) {
|
20
|
+
if (type.isRelation && type.relationName) {
|
21
|
+
const relationName = type.relationName;
|
22
|
+
const idGetter = function () {
|
23
|
+
return handleError(this.constructor.entityName, propertyKey, () => type.to(this._data.fields[propertyKey]));
|
24
|
+
};
|
25
|
+
const idSetter = function (value) {
|
26
|
+
this._data.fields[propertyKey] = handleError(this.constructor.entityName, propertyKey, () => type.from(value));
|
27
|
+
};
|
28
|
+
const idKey = type.isArray ? propertyKey + 'IDs' : propertyKey + 'ID';
|
29
|
+
Reflect.defineProperty(target, idKey, {
|
30
|
+
get: idGetter,
|
31
|
+
set: idSetter
|
32
|
+
});
|
33
|
+
Reflect.defineProperty(target, propertyKey, {
|
34
|
+
get: function () {
|
35
|
+
const ids = idGetter.call(this);
|
36
|
+
if (Array.isArray(ids)) {
|
37
|
+
return Promise.all(ids.map((id) => {
|
38
|
+
return getStore()?.get(relationName, id);
|
39
|
+
}));
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
return getStore()?.get(relationName, ids);
|
43
|
+
}
|
44
|
+
},
|
45
|
+
set: function (value) {
|
46
|
+
if (value instanceof Promise) {
|
47
|
+
value.then((v) => {
|
48
|
+
idSetter.call(this, v);
|
49
|
+
});
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
idSetter.call(this, value);
|
53
|
+
}
|
54
|
+
}
|
55
|
+
});
|
56
|
+
}
|
57
|
+
else {
|
58
|
+
Reflect.defineProperty(target, propertyKey, {
|
59
|
+
configurable: true,
|
60
|
+
get: function () {
|
61
|
+
return handleError(this.constructor.entityName, propertyKey, () => type.to(this._data.fields[propertyKey]));
|
62
|
+
},
|
63
|
+
set: function (value) {
|
64
|
+
this._data.fields[propertyKey] = handleError(this.constructor.entityName, propertyKey, () => type.from(value));
|
65
|
+
}
|
66
|
+
});
|
67
|
+
}
|
68
|
+
}
|
14
69
|
return class extends BaseClass {
|
15
|
-
|
16
|
-
_data = { fields: {}, entityName: name };
|
70
|
+
_data = { fields: {} };
|
17
71
|
constructor(...args) {
|
18
72
|
super();
|
19
|
-
const
|
20
|
-
|
21
|
-
|
22
|
-
if (converter.isRelation && converter.relationName) {
|
23
|
-
const relationName = converter.relationName;
|
24
|
-
const idGetter = () => {
|
25
|
-
return handleError(name, propertyKey, () => converter.to(this._data.fields[propertyKey]));
|
26
|
-
};
|
27
|
-
const idSetter = (value) => {
|
28
|
-
this._data.fields[propertyKey] = handleError(name, propertyKey, () => converter.from(value));
|
29
|
-
};
|
30
|
-
const idKey = converter.isArray ? propertyKey + 'IDs' : propertyKey + 'ID';
|
31
|
-
Object.defineProperty(this, idKey, {
|
32
|
-
get: idGetter,
|
33
|
-
set: idSetter
|
34
|
-
});
|
35
|
-
Object.defineProperty(this, propertyKey, {
|
36
|
-
get: () => {
|
37
|
-
const ids = idGetter();
|
38
|
-
if (Array.isArray(ids)) {
|
39
|
-
return Promise.all(ids.map((id) => {
|
40
|
-
return getStore()?.get(relationName, id);
|
41
|
-
}));
|
42
|
-
}
|
43
|
-
else {
|
44
|
-
return getStore()?.get(relationName, ids);
|
45
|
-
}
|
46
|
-
},
|
47
|
-
set: (value) => {
|
48
|
-
if (value instanceof Promise) {
|
49
|
-
value.then((v) => {
|
50
|
-
idSetter(v);
|
51
|
-
});
|
52
|
-
}
|
53
|
-
else {
|
54
|
-
idSetter(value);
|
55
|
-
}
|
56
|
-
}
|
57
|
-
});
|
58
|
-
}
|
59
|
-
else {
|
60
|
-
Object.defineProperty(this, propertyKey, {
|
61
|
-
get: () => {
|
62
|
-
return handleError(name, propertyKey, () => converter.to(this._data.fields[propertyKey]));
|
63
|
-
},
|
64
|
-
set: (value) => {
|
65
|
-
this._data.fields[propertyKey] = handleError(name, propertyKey, () => converter.from(value));
|
66
|
-
}
|
67
|
-
});
|
68
|
-
}
|
69
|
-
const initData = args[0];
|
70
|
-
if (initData) {
|
71
|
-
for (const [key, value] of Object.entries(initData)) {
|
72
|
-
if (this.hasOwnProperty(key)) {
|
73
|
-
this[key] = value;
|
74
|
-
}
|
75
|
-
}
|
73
|
+
for (const key of Object.getOwnPropertyNames(this)) {
|
74
|
+
if (BaseClass.prototype.hasOwnProperty(key)) {
|
75
|
+
delete this[key];
|
76
76
|
}
|
77
77
|
}
|
78
|
+
if (args[0]) {
|
79
|
+
Object.assign(this, args[0]);
|
80
|
+
}
|
78
81
|
}
|
79
82
|
};
|
80
83
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EACL,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EAEf,MAAM,cAAc,CAAA;
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAgB,aAAa,EAAyB,MAAM,kBAAkB,CAAA;
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAgB,aAAa,EAAyB,MAAM,kBAAkB,CAAA;AA4DnH,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAQ5D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;EAI9C"}
|
package/lib/store/schema.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { buildASTSchema, extendSchema, parse, validateSchema } from 'graphql/index.js';
|
2
2
|
import * as fs from 'node:fs';
|
3
|
+
import { GraphQLObjectType, isListType, isNonNullType } from 'graphql';
|
3
4
|
const customScalars = ['BigInt', 'BigDecimal', 'Timestamp', 'JSON', 'Bytes', 'ID'];
|
4
5
|
const baseSchema = buildASTSchema(parse(`
|
5
6
|
directive @entity on OBJECT
|
@@ -14,12 +15,49 @@ const baseSchema = buildASTSchema(parse(`
|
|
14
15
|
directive @jsonField on OBJECT # legacy
|
15
16
|
${customScalars.map((name) => 'scalar ' + name).join('\n')}
|
16
17
|
`));
|
18
|
+
function getElemType(type) {
|
19
|
+
if (isNonNullType(type)) {
|
20
|
+
return getElemType(type.ofType);
|
21
|
+
}
|
22
|
+
if (isListType(type)) {
|
23
|
+
return getElemType(type.ofType);
|
24
|
+
}
|
25
|
+
return type;
|
26
|
+
}
|
27
|
+
function checkRelations(schema) {
|
28
|
+
for (const t of Object.values(schema.getTypeMap())) {
|
29
|
+
if (t.name.startsWith('__')) {
|
30
|
+
continue;
|
31
|
+
}
|
32
|
+
if (t instanceof GraphQLObjectType) {
|
33
|
+
for (const f of Object.values(t.getFields())) {
|
34
|
+
if (f.astNode) {
|
35
|
+
for (const d of f.astNode.directives ?? []) {
|
36
|
+
if (d.name.value === 'derivedFrom') {
|
37
|
+
const arg = (d.arguments ?? []).find((a) => a.name.value === 'field');
|
38
|
+
if (!arg || !arg.value || arg.value.kind !== 'StringValue') {
|
39
|
+
throw new Error(`@derivedFrom directive must have a 'field' argument`);
|
40
|
+
}
|
41
|
+
const fieldName = arg.value.value;
|
42
|
+
const targetType = getElemType(f.type);
|
43
|
+
// Check if the target type has a field with the same name
|
44
|
+
if (!targetType.getFields()[fieldName]) {
|
45
|
+
throw new Error(`Field '${fieldName}' not found in type '${targetType.name}'`);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
17
54
|
export function buildSchema(doc) {
|
18
55
|
const schema = extendSchema(baseSchema, doc);
|
19
56
|
const errors = validateSchema(schema).filter((err) => !/query root/i.test(err.message));
|
20
57
|
if (errors.length > 0) {
|
21
58
|
throw errors[0];
|
22
59
|
}
|
60
|
+
checkRelations(schema);
|
23
61
|
return schema;
|
24
62
|
}
|
25
63
|
export function schemaFromFile(filePath) {
|
package/lib/store/schema.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,YAAY,EAAiB,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACnH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"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"}
|
package/lib/store/store.js
CHANGED
@@ -16,8 +16,8 @@ export class Store {
|
|
16
16
|
}
|
17
17
|
});
|
18
18
|
const data = (await promise);
|
19
|
-
if (data.
|
20
|
-
const entityData = data.entities
|
19
|
+
if (data.entityList?.entities[0]) {
|
20
|
+
const entityData = data.entityList?.entities[0];
|
21
21
|
return this.newEntity(entity, entityData);
|
22
22
|
}
|
23
23
|
return undefined;
|
@@ -78,7 +78,7 @@ export class Store {
|
|
78
78
|
}
|
79
79
|
});
|
80
80
|
const response = (await promise);
|
81
|
-
for (const data of response.
|
81
|
+
for (const data of response.entityList?.entities || []) {
|
82
82
|
yield this.newEntity(entity, data);
|
83
83
|
}
|
84
84
|
if (!response.nextCursor) {
|
@@ -92,7 +92,7 @@ export class Store {
|
|
92
92
|
let en = DatabaseSchema.findEntity(entity);
|
93
93
|
if (!en) {
|
94
94
|
// it is an interface
|
95
|
-
en = DatabaseSchema.findEntity(data.
|
95
|
+
en = DatabaseSchema.findEntity(data.entity);
|
96
96
|
if (!en) {
|
97
97
|
throw new Error(`Entity ${entity} not found`);
|
98
98
|
}
|
@@ -100,7 +100,7 @@ export class Store {
|
|
100
100
|
entity = en;
|
101
101
|
}
|
102
102
|
const res = new entity({});
|
103
|
-
res._data = data;
|
103
|
+
res._data = data.data;
|
104
104
|
return res;
|
105
105
|
}
|
106
106
|
}
|
package/lib/store/store.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,EAAE,oBAAoB,EAAc,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAY/C,MAAM,OAAO,KAAK;IACa;IAA7B,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAEtD,KAAK,CAAC,GAAG,CAAmB,MAA+B,EAAE,EAAM;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACvC,GAAG,EAAE;gBACH,MAAM,EAAE,OAAO,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU;gBACxE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;aAClB;SACF,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAe,CAAA;QAC1C,IAAI,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/sdk",
|
3
|
-
"version": "2.39.4-rc.
|
3
|
+
"version": "2.39.4-rc.9",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"type": "module",
|
6
6
|
"exports": {
|
@@ -83,8 +83,8 @@
|
|
83
83
|
"typedoc": "^0.25.7",
|
84
84
|
"utility-types": "^3.11.0",
|
85
85
|
"yaml": "^2.3.4",
|
86
|
-
"@sentio/
|
87
|
-
"@sentio/
|
86
|
+
"@sentio/protos": "2.39.4-rc.9",
|
87
|
+
"@sentio/runtime": "^2.39.4-rc.9"
|
88
88
|
},
|
89
89
|
"peerDependencies": {
|
90
90
|
"tsup": "npm:@sentio/tsup@^6.7.2"
|
package/src/store/decorators.ts
CHANGED
@@ -15,8 +15,8 @@ import {
|
|
15
15
|
TypeConverters,
|
16
16
|
ValueConverter
|
17
17
|
} from './convert.js'
|
18
|
-
import { getStore } from './store.js'
|
19
18
|
import { RichStruct } from '@sentio/protos'
|
19
|
+
import { getStore } from './store.js'
|
20
20
|
|
21
21
|
type Constructor = { new (...args: any[]): any }
|
22
22
|
|
@@ -30,72 +30,79 @@ function handleError(entity: string, key: string, fn: () => any) {
|
|
30
30
|
|
31
31
|
export function Entity(name: string) {
|
32
32
|
return function <T extends Constructor>(BaseClass: T) {
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
Object.defineProperty(BaseClass, 'entityName', {
|
34
|
+
value: name
|
35
|
+
})
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
const meta: Record<string, ValueConverter<any>> = (BaseClass as any).meta || {}
|
38
|
+
const target = BaseClass.prototype
|
39
|
+
for (const [propertyKey, type] of Object.entries(meta)) {
|
40
|
+
if (type.isRelation && type.relationName) {
|
41
|
+
const relationName = type.relationName
|
42
|
+
const idGetter = function (this: any) {
|
43
|
+
return handleError(this.constructor.entityName, propertyKey, () => type!.to(this._data.fields[propertyKey]))
|
44
|
+
}
|
45
|
+
const idSetter = function (this: any, value: any) {
|
46
|
+
this._data.fields[propertyKey] = handleError(this.constructor.entityName, propertyKey, () =>
|
47
|
+
type!.from(value)
|
48
|
+
)
|
49
|
+
}
|
50
|
+
const idKey = type.isArray ? propertyKey + 'IDs' : propertyKey + 'ID'
|
51
|
+
|
52
|
+
Reflect.defineProperty(target, idKey, {
|
53
|
+
get: idGetter,
|
54
|
+
set: idSetter
|
55
|
+
})
|
56
|
+
Reflect.defineProperty(target, propertyKey, {
|
57
|
+
get: function () {
|
58
|
+
const ids = idGetter.call(this)
|
59
|
+
if (Array.isArray(ids)) {
|
60
|
+
return Promise.all(
|
61
|
+
ids.map((id) => {
|
62
|
+
return getStore()?.get(relationName, id)
|
63
|
+
})
|
64
|
+
)
|
65
|
+
} else {
|
66
|
+
return getStore()?.get(relationName, ids)
|
46
67
|
}
|
47
|
-
|
48
|
-
|
68
|
+
},
|
69
|
+
set: function (value) {
|
70
|
+
if (value instanceof Promise) {
|
71
|
+
value.then((v) => {
|
72
|
+
idSetter.call(this, v)
|
73
|
+
})
|
74
|
+
} else {
|
75
|
+
idSetter.call(this, value)
|
49
76
|
}
|
50
|
-
const idKey = converter.isArray ? propertyKey + 'IDs' : propertyKey + 'ID'
|
51
|
-
|
52
|
-
Object.defineProperty(this, idKey, {
|
53
|
-
get: idGetter,
|
54
|
-
set: idSetter
|
55
|
-
})
|
56
|
-
|
57
|
-
Object.defineProperty(this, propertyKey, {
|
58
|
-
get: () => {
|
59
|
-
const ids = idGetter()
|
60
|
-
if (Array.isArray(ids)) {
|
61
|
-
return Promise.all(
|
62
|
-
ids.map((id) => {
|
63
|
-
return getStore()?.get(relationName, id)
|
64
|
-
})
|
65
|
-
)
|
66
|
-
} else {
|
67
|
-
return getStore()?.get(relationName, ids)
|
68
|
-
}
|
69
|
-
},
|
70
|
-
set: (value) => {
|
71
|
-
if (value instanceof Promise) {
|
72
|
-
value.then((v) => {
|
73
|
-
idSetter(v)
|
74
|
-
})
|
75
|
-
} else {
|
76
|
-
idSetter(value)
|
77
|
-
}
|
78
|
-
}
|
79
|
-
})
|
80
|
-
} else {
|
81
|
-
Object.defineProperty(this, propertyKey, {
|
82
|
-
get: () => {
|
83
|
-
return handleError(name, propertyKey, () => converter.to(this._data.fields[propertyKey]))
|
84
|
-
},
|
85
|
-
set: (value) => {
|
86
|
-
this._data.fields[propertyKey] = handleError(name, propertyKey, () => converter.from(value))
|
87
|
-
}
|
88
|
-
})
|
89
77
|
}
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
78
|
+
})
|
79
|
+
} else {
|
80
|
+
Reflect.defineProperty(target, propertyKey, {
|
81
|
+
configurable: true,
|
82
|
+
get: function () {
|
83
|
+
return handleError(this.constructor.entityName, propertyKey, () => type!.to(this._data.fields[propertyKey]))
|
84
|
+
},
|
85
|
+
set: function (value) {
|
86
|
+
this._data.fields[propertyKey] = handleError(this.constructor.entityName, propertyKey, () =>
|
87
|
+
type!.from(value)
|
88
|
+
)
|
89
|
+
}
|
90
|
+
})
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
return class extends BaseClass {
|
95
|
+
readonly _data: RichStruct = { fields: {} }
|
96
|
+
constructor(...args: any[]) {
|
97
|
+
super()
|
98
|
+
for (const key of Object.getOwnPropertyNames(this)) {
|
99
|
+
if (BaseClass.prototype.hasOwnProperty(key)) {
|
100
|
+
delete this[key]
|
97
101
|
}
|
98
102
|
}
|
103
|
+
if (args[0]) {
|
104
|
+
Object.assign(this, args[0])
|
105
|
+
}
|
99
106
|
}
|
100
107
|
}
|
101
108
|
}
|
package/src/store/schema.ts
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { buildASTSchema, DocumentNode, extendSchema, GraphQLSchema, parse, validateSchema } from 'graphql/index.js'
|
2
2
|
import * as fs from 'node:fs'
|
3
|
+
import { GraphQLObjectType, GraphQLOutputType, isListType, isNonNullType } from 'graphql'
|
3
4
|
|
4
5
|
const customScalars = ['BigInt', 'BigDecimal', 'Timestamp', 'JSON', 'Bytes', 'ID']
|
5
6
|
|
@@ -19,12 +20,51 @@ const baseSchema = buildASTSchema(
|
|
19
20
|
`)
|
20
21
|
)
|
21
22
|
|
23
|
+
function getElemType(type: GraphQLOutputType) {
|
24
|
+
if (isNonNullType(type)) {
|
25
|
+
return getElemType(type.ofType)
|
26
|
+
}
|
27
|
+
if (isListType(type)) {
|
28
|
+
return getElemType(type.ofType)
|
29
|
+
}
|
30
|
+
return type
|
31
|
+
}
|
32
|
+
|
33
|
+
function checkRelations(schema: GraphQLSchema) {
|
34
|
+
for (const t of Object.values(schema.getTypeMap())) {
|
35
|
+
if (t.name.startsWith('__')) {
|
36
|
+
continue
|
37
|
+
}
|
38
|
+
if (t instanceof GraphQLObjectType) {
|
39
|
+
for (const f of Object.values(t.getFields())) {
|
40
|
+
if (f.astNode) {
|
41
|
+
for (const d of f.astNode.directives ?? []) {
|
42
|
+
if (d.name.value === 'derivedFrom') {
|
43
|
+
const arg = (d.arguments ?? []).find((a) => a.name.value === 'field')
|
44
|
+
if (!arg || !arg.value || arg.value.kind !== 'StringValue') {
|
45
|
+
throw new Error(`@derivedFrom directive must have a 'field' argument`)
|
46
|
+
}
|
47
|
+
const fieldName = arg.value.value
|
48
|
+
const targetType = getElemType(f.type) as GraphQLObjectType
|
49
|
+
// Check if the target type has a field with the same name
|
50
|
+
if (!targetType.getFields()[fieldName]) {
|
51
|
+
throw new Error(`Field '${fieldName}' not found in type '${targetType.name}'`)
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
22
61
|
export function buildSchema(doc: DocumentNode): GraphQLSchema {
|
23
62
|
const schema = extendSchema(baseSchema, doc)
|
24
63
|
const errors = validateSchema(schema).filter((err) => !/query root/i.test(err.message))
|
25
64
|
if (errors.length > 0) {
|
26
65
|
throw errors[0]
|
27
66
|
}
|
67
|
+
checkRelations(schema)
|
28
68
|
return schema
|
29
69
|
}
|
30
70
|
|
package/src/store/store.ts
CHANGED
@@ -2,7 +2,7 @@ import { StoreContext } from './context.js'
|
|
2
2
|
import { DatabaseSchema } from '../core/index.js'
|
3
3
|
import { BigDecimal } from '@sentio/bigdecimal'
|
4
4
|
import { Bytes, Float, ID, Int, Timestamp } from './types.js'
|
5
|
-
import type {
|
5
|
+
import type { Entity as EntityStruct, RichValue } from '@sentio/protos'
|
6
6
|
import { DBRequest_DBOperator, DBResponse } from '@sentio/protos'
|
7
7
|
import { toBigInteger } from './convert.js'
|
8
8
|
import { PluginManager } from '@sentio/runtime'
|
@@ -29,8 +29,8 @@ export class Store {
|
|
29
29
|
})
|
30
30
|
|
31
31
|
const data = (await promise) as DBResponse
|
32
|
-
if (data.
|
33
|
-
const entityData = data.entities
|
32
|
+
if (data.entityList?.entities[0]) {
|
33
|
+
const entityData = data.entityList?.entities[0]
|
34
34
|
return this.newEntity(entity, entityData)
|
35
35
|
}
|
36
36
|
|
@@ -97,7 +97,7 @@ export class Store {
|
|
97
97
|
}
|
98
98
|
})
|
99
99
|
const response = (await promise) as DBResponse
|
100
|
-
for (const data of response.
|
100
|
+
for (const data of response.entityList?.entities || []) {
|
101
101
|
yield this.newEntity(entity, data)
|
102
102
|
}
|
103
103
|
if (!response.nextCursor) {
|
@@ -107,12 +107,12 @@ export class Store {
|
|
107
107
|
}
|
108
108
|
}
|
109
109
|
|
110
|
-
private newEntity<T extends Entity>(entity: EntityClass<T> | string, data:
|
110
|
+
private newEntity<T extends Entity>(entity: EntityClass<T> | string, data: EntityStruct) {
|
111
111
|
if (typeof entity == 'string') {
|
112
112
|
let en = DatabaseSchema.findEntity(entity)
|
113
113
|
if (!en) {
|
114
114
|
// it is an interface
|
115
|
-
en = DatabaseSchema.findEntity(data.
|
115
|
+
en = DatabaseSchema.findEntity(data.entity)
|
116
116
|
if (!en) {
|
117
117
|
throw new Error(`Entity ${entity} not found`)
|
118
118
|
}
|
@@ -121,7 +121,7 @@ export class Store {
|
|
121
121
|
}
|
122
122
|
|
123
123
|
const res = new (entity as EntityClass<T>)({}) as T
|
124
|
-
;(res as any)._data = data
|
124
|
+
;(res as any)._data = data.data
|
125
125
|
return res
|
126
126
|
}
|
127
127
|
}
|