@sentio/sdk 2.39.3 → 2.39.4-rc.10

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.
Files changed (47) hide show
  1. package/lib/eth/provider.d.ts.map +1 -1
  2. package/lib/eth/provider.js +3 -3
  3. package/lib/eth/provider.js.map +1 -1
  4. package/lib/store/codegen.d.ts +0 -2
  5. package/lib/store/codegen.d.ts.map +1 -1
  6. package/lib/store/codegen.js +147 -158
  7. package/lib/store/codegen.js.map +1 -1
  8. package/lib/store/convert.d.ts +32 -0
  9. package/lib/store/convert.d.ts.map +1 -0
  10. package/lib/store/convert.js +293 -0
  11. package/lib/store/convert.js.map +1 -0
  12. package/lib/store/convert.test.d.ts +2 -0
  13. package/lib/store/convert.test.d.ts.map +1 -0
  14. package/lib/store/convert.test.js.map +1 -0
  15. package/lib/store/decorators.d.ts +24 -7
  16. package/lib/store/decorators.d.ts.map +1 -1
  17. package/lib/store/decorators.js +160 -16
  18. package/lib/store/decorators.js.map +1 -1
  19. package/lib/store/index.d.ts +1 -1
  20. package/lib/store/index.d.ts.map +1 -1
  21. package/lib/store/index.js +1 -1
  22. package/lib/store/index.js.map +1 -1
  23. package/lib/store/schema.d.ts.map +1 -1
  24. package/lib/store/schema.js +39 -1
  25. package/lib/store/schema.js.map +1 -1
  26. package/lib/store/store.d.ts +23 -4
  27. package/lib/store/store.d.ts.map +1 -1
  28. package/lib/store/store.js +119 -59
  29. package/lib/store/store.js.map +1 -1
  30. package/lib/store/types.d.ts +22 -5
  31. package/lib/store/types.d.ts.map +1 -1
  32. package/lib/store/types.js +14 -1
  33. package/lib/store/types.js.map +1 -1
  34. package/package.json +4 -3
  35. package/src/eth/provider.ts +8 -3
  36. package/src/store/codegen.ts +183 -185
  37. package/src/store/convert.ts +321 -0
  38. package/src/store/decorators.ts +185 -16
  39. package/src/store/index.ts +1 -1
  40. package/src/store/schema.ts +41 -1
  41. package/src/store/store.ts +157 -56
  42. package/src/store/types.ts +25 -6
  43. package/lib/store/entity.d.ts +0 -17
  44. package/lib/store/entity.d.ts.map +0 -1
  45. package/lib/store/entity.js +0 -61
  46. package/lib/store/entity.js.map +0 -1
  47. package/src/store/entity.ts +0 -71
@@ -0,0 +1,293 @@
1
+ import { RichValue_NullValue } from '@sentio/protos';
2
+ import { BigDecimal } from '@sentio/bigdecimal';
3
+ export const ValueRequiredError = new Error('Value is required but received null or undefined');
4
+ export function required_(converter) {
5
+ const { from, to, ...rest } = converter;
6
+ return {
7
+ from: (value) => {
8
+ if (value == null) {
9
+ throw ValueRequiredError;
10
+ }
11
+ return from(value);
12
+ },
13
+ to: (value) => {
14
+ if (value == null || value.nullValue) {
15
+ throw ValueRequiredError;
16
+ }
17
+ return to(value);
18
+ },
19
+ ...rest,
20
+ required: true
21
+ };
22
+ }
23
+ export function array_(converter) {
24
+ return {
25
+ from: (value) => {
26
+ return {
27
+ listValue: {
28
+ values: value.map(converter.from)
29
+ }
30
+ };
31
+ },
32
+ to: (value) => {
33
+ return value.listValue?.values.map(converter.to) || [];
34
+ },
35
+ isArray: true,
36
+ isRelation: converter.isRelation,
37
+ relationName: converter.relationName
38
+ };
39
+ }
40
+ export function enumerate_(values) {
41
+ return {
42
+ from: (value) => {
43
+ if (value == null) {
44
+ return {
45
+ nullValue: RichValue_NullValue.NULL_VALUE
46
+ };
47
+ }
48
+ return {
49
+ stringValue: values[value]
50
+ };
51
+ },
52
+ to(v) {
53
+ return v.stringValue;
54
+ }
55
+ };
56
+ }
57
+ export function objectId_(entityName) {
58
+ return {
59
+ from: (value) => {
60
+ if (typeof value == 'string') {
61
+ return {
62
+ stringValue: value
63
+ };
64
+ }
65
+ if (value instanceof Uint8Array) {
66
+ return {
67
+ stringValue: `0x${Buffer.from(value).toString('hex')}`
68
+ };
69
+ }
70
+ if (typeof value == 'object') {
71
+ const entity = value;
72
+ return {
73
+ stringValue: entity.id.toString()
74
+ };
75
+ }
76
+ return {
77
+ nullValue: RichValue_NullValue.NULL_VALUE
78
+ };
79
+ },
80
+ to(v) {
81
+ return v.stringValue;
82
+ },
83
+ isRelation: true,
84
+ relationName: entityName
85
+ };
86
+ }
87
+ /* eslint-disable */
88
+ export const StringConverter = {
89
+ from: (value) => {
90
+ if (value == null) {
91
+ return {
92
+ nullValue: RichValue_NullValue.NULL_VALUE
93
+ };
94
+ }
95
+ return {
96
+ stringValue: value
97
+ };
98
+ },
99
+ to(v) {
100
+ return v.stringValue;
101
+ }
102
+ };
103
+ export const IntConverter = {
104
+ from: (value) => {
105
+ if (value == null) {
106
+ return {
107
+ nullValue: RichValue_NullValue.NULL_VALUE
108
+ };
109
+ }
110
+ return {
111
+ intValue: value
112
+ };
113
+ },
114
+ to(v) {
115
+ return v.intValue;
116
+ }
117
+ };
118
+ export const FloatConverter = {
119
+ from: (value) => {
120
+ if (value == null) {
121
+ return {
122
+ nullValue: RichValue_NullValue.NULL_VALUE
123
+ };
124
+ }
125
+ return {
126
+ floatValue: value
127
+ };
128
+ },
129
+ to(v) {
130
+ return v.floatValue;
131
+ }
132
+ };
133
+ export const BooleanConverter = {
134
+ from: (value) => {
135
+ if (value == null) {
136
+ return {
137
+ nullValue: RichValue_NullValue.NULL_VALUE
138
+ };
139
+ }
140
+ return {
141
+ boolValue: value
142
+ };
143
+ },
144
+ to(v) {
145
+ return v.boolValue;
146
+ }
147
+ };
148
+ export const TimestampConverter = {
149
+ from: (value) => {
150
+ if (value == null) {
151
+ return {
152
+ nullValue: RichValue_NullValue.NULL_VALUE
153
+ };
154
+ }
155
+ return {
156
+ timestampValue: value
157
+ };
158
+ },
159
+ to(v) {
160
+ return v.timestampValue;
161
+ }
162
+ };
163
+ export const BytesConverter = {
164
+ from: (value) => {
165
+ if (value == null) {
166
+ return {
167
+ nullValue: RichValue_NullValue.NULL_VALUE
168
+ };
169
+ }
170
+ return {
171
+ bytesValue: value
172
+ };
173
+ },
174
+ to(v) {
175
+ return v.bytesValue;
176
+ }
177
+ };
178
+ export const IDConverter = {
179
+ from(value) {
180
+ if (typeof value == 'string') {
181
+ return {
182
+ stringValue: value
183
+ };
184
+ }
185
+ if (value instanceof Uint8Array) {
186
+ return {
187
+ stringValue: `0x${Buffer.from(value).toString('hex')}`
188
+ };
189
+ }
190
+ return {
191
+ nullValue: RichValue_NullValue.NULL_VALUE
192
+ };
193
+ },
194
+ to(value) {
195
+ if (value.stringValue) {
196
+ return value.stringValue;
197
+ }
198
+ if (value.bytesValue) {
199
+ const v = `0x${Buffer.from(value.bytesValue).toString('hex')}`;
200
+ return v;
201
+ }
202
+ return undefined;
203
+ }
204
+ };
205
+ export const BigDecimalConverter = {
206
+ from: (value) => {
207
+ if (value == null) {
208
+ return {
209
+ nullValue: RichValue_NullValue.NULL_VALUE
210
+ };
211
+ }
212
+ const s = (value.c || []).join('');
213
+ const exp = -(s.length - (value.e ?? 0) - 1);
214
+ return {
215
+ bigdecimalValue: {
216
+ value: toBigInteger(BigInt(s)),
217
+ exp: exp
218
+ }
219
+ };
220
+ },
221
+ to(v) {
222
+ const d = v.bigdecimalValue;
223
+ if (d) {
224
+ const i = bytesToBigInt(d.value.data);
225
+ let ret = new BigDecimal(i.toString());
226
+ if (d.exp < 0) {
227
+ ret = ret.dividedBy(new BigDecimal(10).pow(-d.exp));
228
+ }
229
+ else {
230
+ ret = ret.multipliedBy(new BigDecimal(10).pow(d.exp));
231
+ }
232
+ return ret.multipliedBy(d.value?.negative ? -1 : 1);
233
+ }
234
+ return undefined;
235
+ }
236
+ };
237
+ export const BigIntConverter = {
238
+ from: (value) => {
239
+ if (value == null) {
240
+ return {
241
+ nullValue: RichValue_NullValue.NULL_VALUE
242
+ };
243
+ }
244
+ return {
245
+ bigintValue: toBigInteger(value)
246
+ };
247
+ },
248
+ to(v) {
249
+ if (v.bigintValue) {
250
+ let res = bytesToBigInt(v.bigintValue?.data);
251
+ if (v.bigintValue.negative) {
252
+ res = -res;
253
+ }
254
+ return res;
255
+ }
256
+ return undefined;
257
+ }
258
+ };
259
+ export function bytesToBigInt(bytes) {
260
+ let intValue = BigInt(0);
261
+ for (let i = 0; i < bytes.length; i++) {
262
+ intValue = intValue * BigInt(256) + BigInt(bytes[i]);
263
+ }
264
+ return intValue;
265
+ }
266
+ export function toBigInteger(a) {
267
+ const negative = a < 0;
268
+ if (negative) {
269
+ a = -a;
270
+ }
271
+ let hex = a.toString(16);
272
+ if (hex.length % 2 === 1) {
273
+ hex = '0' + hex;
274
+ }
275
+ const buffer = Buffer.from(hex, 'hex');
276
+ return {
277
+ negative: negative,
278
+ data: new Uint8Array(buffer)
279
+ };
280
+ }
281
+ export const TypeConverters = {
282
+ BigDecimal: BigDecimalConverter,
283
+ BigInt: BigIntConverter,
284
+ String: StringConverter,
285
+ Boolean: BooleanConverter,
286
+ Uint8Array: BytesConverter,
287
+ ID: IDConverter,
288
+ Bytes: BytesConverter,
289
+ Int: IntConverter,
290
+ Float: FloatConverter,
291
+ Timestamp: TimestampConverter
292
+ };
293
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/store/convert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=convert.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.test.d.ts","sourceRoot":"","sources":["../../src/store/convert.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.test.js","sourceRoot":"","sources":["../../src/store/convert.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,cAAc,CAAA;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAA;QAChB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,6DAA6D,CAAA;QACvE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;QACnC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACxC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAA;QAC1C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,aAAa,CACX,IAAI,UAAU,CAAC,kEAAkE,CAAC,EAClF,mBAAmB,CACpB,CAAA;QACD,aAAa,CAAC,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,SAAS,aAAa,CAAI,KAAQ,EAAE,SAA4B;QAC9D,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/B,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -1,12 +1,29 @@
1
+ import 'reflect-metadata';
2
+ import { ValueConverter } from './convert.js';
3
+ import { RichStruct } from '@sentio/protos';
1
4
  type Constructor = {
2
5
  new (...args: any[]): any;
3
6
  };
4
- export declare function entity(name: string): <T extends Constructor>(constructor: T, context: any) => T;
5
- export declare function derivedFrom(field: string): (target: any, context: any) => void;
6
- export declare function unique(field: string): (target: any, context: any) => void;
7
- export declare function index(field: string[]): (target: any, context: any) => void;
8
- export declare function fulltext(query: string): (target: any, context: any) => void;
9
- export declare function cardinality(value: number): (target: any, context: any) => void;
10
- export declare function byteWeight(value: number): (target: any, context: any) => void;
7
+ export declare function Entity(name: string): <T extends Constructor>(BaseClass: T) => {
8
+ new (...args: any[]): {
9
+ [x: string]: any;
10
+ readonly _data: RichStruct;
11
+ };
12
+ } & T;
13
+ export declare function Column(type: string): (target: any, propertyKey: string) => void;
14
+ export declare function ListColumn(type?: string): (target: any, propertyKey: string) => void;
15
+ export declare function column(type?: ValueConverter<any>): (target: any, propertyKey: string) => void;
16
+ export declare const IDColumn: (target: any, propertyKey: string) => void;
17
+ export declare const IntColumn: (target: any, propertyKey: string) => void;
18
+ export declare const FloatColumn: (target: any, propertyKey: string) => void;
19
+ export declare const BigDecimalColumn: (target: any, propertyKey: string) => void;
20
+ export declare const BigIntColumn: (target: any, propertyKey: string) => void;
21
+ export declare const StringColumn: (target: any, propertyKey: string) => void;
22
+ export declare const BooleanColumn: (target: any, propertyKey: string) => void;
23
+ export declare const TimestampColumn: (target: any, propertyKey: string) => void;
24
+ export declare const BytesColumn: (target: any, propertyKey: string) => void;
25
+ export declare function Required(target: any, propertyKey: string): void;
26
+ export declare function One(entity: string): (target: any, propertyKey: string) => void;
27
+ export declare function Many(entity: string): (target: any, propertyKey: string) => void;
11
28
  export {};
12
29
  //# sourceMappingURL=decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,CAAA;AAEhD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,wCACoB,CAAC,WAAW,GAAG,OAIrE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,YACd,GAAG,WAAW,GAAG,UAC3C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,YACT,GAAG,WAAW,GAAG,UAC3C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,YACV,GAAG,WAAW,GAAG,UAC3C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,YACX,GAAG,WAAW,GAAG,UAC3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,YACd,GAAG,WAAW,GAAG,UAC3C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,YACb,GAAG,WAAW,GAAG,UAC3C"}
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"}
@@ -1,25 +1,169 @@
1
- export function entity(name) {
2
- return function (constructor, context) {
3
- constructor.prototype.entityName = name;
4
- return constructor;
1
+ import 'reflect-metadata';
2
+ import { array_, BigDecimalConverter, BigIntConverter, BooleanConverter, BytesConverter, FloatConverter, IDConverter, IntConverter, objectId_, required_, StringConverter, TimestampConverter, TypeConverters } from './convert.js';
3
+ import { getStore } from './store.js';
4
+ function handleError(entity, key, fn) {
5
+ try {
6
+ return fn();
7
+ }
8
+ catch (e) {
9
+ throw new Error(`Get property "${key}" from Entity "${entity}" failed: ${e.message}`);
10
+ }
11
+ }
12
+ export function Entity(name) {
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
+ }
69
+ return class extends BaseClass {
70
+ _data = { fields: {} };
71
+ constructor(...args) {
72
+ super();
73
+ for (const key of Object.getOwnPropertyNames(this)) {
74
+ if (BaseClass.prototype.hasOwnProperty(key)) {
75
+ delete this[key];
76
+ }
77
+ }
78
+ if (args[0]) {
79
+ Object.assign(this, args[0]);
80
+ }
81
+ }
82
+ };
5
83
  };
6
84
  }
7
- export function derivedFrom(field) {
8
- return function (target, context) { };
85
+ export function Column(type) {
86
+ return function (target, propertyKey) {
87
+ let required = false;
88
+ if (type.endsWith('!')) {
89
+ required = true;
90
+ type = type.slice(0, -1);
91
+ }
92
+ let typeConverter = TypeConverters[type];
93
+ if (!typeConverter) {
94
+ throw new Error(`Unsupported type ${type}`);
95
+ }
96
+ if (required) {
97
+ typeConverter = required_(typeConverter);
98
+ }
99
+ column(typeConverter)(target, propertyKey);
100
+ };
9
101
  }
10
- export function unique(field) {
11
- return function (target, context) { };
102
+ export function ListColumn(type = '') {
103
+ return function (target, propertyKey) {
104
+ let required = false;
105
+ if (type.endsWith('!')) {
106
+ required = true;
107
+ type = type.slice(0, -1);
108
+ }
109
+ let typeConverter = TypeConverters[type];
110
+ if (!typeConverter) {
111
+ // support list of list
112
+ const meta = target.constructor.meta || {};
113
+ const type = meta[propertyKey];
114
+ if (type) {
115
+ typeConverter = type;
116
+ }
117
+ else {
118
+ throw new Error(`Can't find inner type convert`);
119
+ }
120
+ }
121
+ if (required) {
122
+ typeConverter = required_(typeConverter);
123
+ }
124
+ column(array_(typeConverter))(target, propertyKey);
125
+ };
12
126
  }
13
- export function index(field) {
14
- return function (target, context) { };
127
+ export function column(type) {
128
+ return function (target, propertyKey) {
129
+ const reflectType = Reflect.getMetadata('design:type', target, propertyKey);
130
+ if (!type) {
131
+ const typeName = reflectType.name;
132
+ type = TypeConverters[typeName];
133
+ if (!type) {
134
+ throw new Error(`Unsupported type ${typeName}`);
135
+ }
136
+ }
137
+ const meta = target.constructor.meta || {};
138
+ meta[propertyKey] = type;
139
+ target.constructor.meta = meta;
140
+ };
15
141
  }
16
- export function fulltext(query) {
17
- return function (target, context) { };
142
+ export const IDColumn = column(IDConverter);
143
+ export const IntColumn = column(IntConverter);
144
+ export const FloatColumn = column(FloatConverter);
145
+ export const BigDecimalColumn = column(BigDecimalConverter);
146
+ export const BigIntColumn = column(BigIntConverter);
147
+ export const StringColumn = column(StringConverter);
148
+ export const BooleanColumn = column(BooleanConverter);
149
+ export const TimestampColumn = column(TimestampConverter);
150
+ export const BytesColumn = column(BytesConverter);
151
+ export function Required(target, propertyKey) {
152
+ const meta = target.constructor.meta || {};
153
+ const type = meta[propertyKey];
154
+ if (type) {
155
+ meta[propertyKey] = required_(type);
156
+ }
157
+ target.constructor.meta = meta;
18
158
  }
19
- export function cardinality(value) {
20
- return function (target, context) { };
159
+ export function One(entity) {
160
+ return function (target, propertyKey) {
161
+ column(objectId_(entity))(target, propertyKey);
162
+ };
21
163
  }
22
- export function byteWeight(value) {
23
- return function (target, context) { };
164
+ export function Many(entity) {
165
+ return function (target, propertyKey) {
166
+ column(array_(objectId_(entity)))(target, propertyKey);
167
+ };
24
168
  }
25
169
  //# sourceMappingURL=decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,UAAiC,WAAc,EAAE,OAAY;QAClE,WAAW,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAA;QACvC,OAAO,WAAW,CAAA;IACpB,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,MAAW,EAAE,OAAY,IAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,UAAU,MAAW,EAAE,OAAY,IAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAe;IACnC,OAAO,UAAU,MAAW,EAAE,OAAY,IAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,UAAU,MAAW,EAAE,OAAY,IAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,MAAW,EAAE,OAAY,IAAG,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,UAAU,MAAW,EAAE,OAAY,IAAG,CAAC,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export * from './decorators.js';
2
2
  export * from './types.js';
3
- export * from './entity.js';
4
3
  export * from './store.js';
5
4
  export * from './context.js';
5
+ export * from './convert.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA"}
@@ -1,6 +1,6 @@
1
1
  export * from './decorators.js';
2
2
  export * from './types.js';
3
- export * from './entity.js';
4
3
  export * from './store.js';
5
4
  export * from './context.js';
5
+ export * from './convert.js';
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA"}
@@ -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;AAqBnH,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAO5D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;EAI9C"}
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"}
@@ -1,6 +1,7 @@
1
1
  import { buildASTSchema, extendSchema, parse, validateSchema } from 'graphql/index.js';
2
2
  import * as fs from 'node:fs';
3
- const customScalars = ['BigInt', 'BigDecimal', 'DateTime', 'JSON', 'Bytes', 'ID'];
3
+ import { GraphQLObjectType, isListType, isNonNullType } from 'graphql';
4
+ const customScalars = ['BigInt', 'BigDecimal', 'Timestamp', 'JSON', 'Bytes', 'ID'];
4
5
  const baseSchema = buildASTSchema(parse(`
5
6
  directive @entity on OBJECT
6
7
  directive @query on INTERFACE
@@ -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) {