@spinajs/orm-http 2.0.343 → 2.0.345
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/cjs/decorators.d.ts +1 -1
- package/lib/cjs/decorators.d.ts.map +1 -1
- package/lib/cjs/decorators.js +26 -4
- package/lib/cjs/decorators.js.map +1 -1
- package/lib/cjs/dto.d.ts +2 -1
- package/lib/cjs/dto.d.ts.map +1 -1
- package/lib/cjs/dto.js.map +1 -1
- package/lib/cjs/extension.d.ts +2 -2
- package/lib/cjs/extension.d.ts.map +1 -1
- package/lib/cjs/model.d.ts +3 -3
- package/lib/cjs/model.d.ts.map +1 -1
- package/lib/cjs/model.js +6 -6
- package/lib/cjs/model.js.map +1 -1
- package/lib/mjs/decorators.d.ts +1 -1
- package/lib/mjs/decorators.d.ts.map +1 -1
- package/lib/mjs/decorators.js +27 -5
- package/lib/mjs/decorators.js.map +1 -1
- package/lib/mjs/dto.d.ts +2 -1
- package/lib/mjs/dto.d.ts.map +1 -1
- package/lib/mjs/dto.js.map +1 -1
- package/lib/mjs/extension.d.ts +2 -2
- package/lib/mjs/extension.d.ts.map +1 -1
- package/lib/mjs/model.d.ts +3 -3
- package/lib/mjs/model.d.ts.map +1 -1
- package/lib/mjs/model.js +6 -6
- package/lib/mjs/model.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +11 -11
package/lib/cjs/decorators.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ModelBase } from '@spinajs/orm';
|
|
2
2
|
import { FilterableOperators } from './interfaces.js';
|
|
3
3
|
import { Constructor } from '@spinajs/di';
|
|
4
|
-
export declare function Filterable(
|
|
4
|
+
export declare function Filterable(operatorsOrClass: FilterableOperators[] | Constructor<ModelBase>, isAggregate?: boolean): any;
|
|
5
5
|
export type CustomFilterSchema = {
|
|
6
6
|
Column: string;
|
|
7
7
|
Operators: FilterableOperators[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAkF,MAAM,cAAc,CAAC;AAC3I,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAGzD,wBAAgB,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,EAAG,WAAW,CAAC,EAAG,OAAO,OAiCnH;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC;AAEtF,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,kBAAkB,EAAE,yGAE1E"}
|
package/lib/cjs/decorators.js
CHANGED
|
@@ -2,22 +2,44 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Filter = exports.Filterable = void 0;
|
|
4
4
|
const orm_1 = require("@spinajs/orm");
|
|
5
|
+
const di_1 = require("@spinajs/di");
|
|
5
6
|
const http_1 = require("@spinajs/http");
|
|
6
|
-
function Filterable(
|
|
7
|
+
function Filterable(operatorsOrClass, isAggregate) {
|
|
7
8
|
return (0, orm_1.extractDecoratorPropertyDescriptor)((model, _target, propertyKey) => {
|
|
9
|
+
if (model.FilterableColumns === undefined) {
|
|
10
|
+
model.FilterableColumns = new Map();
|
|
11
|
+
}
|
|
12
|
+
if ((0, di_1.isConstructor)(operatorsOrClass)) {
|
|
13
|
+
// if we have @belonsgTo relation we add to this filter schema all avaible filters
|
|
14
|
+
// from the related model
|
|
15
|
+
const descriptor = (0, orm_1.extractModelDescriptor)(operatorsOrClass);
|
|
16
|
+
if (descriptor.FilterableColumns) {
|
|
17
|
+
const keys = [...descriptor.FilterableColumns.keys()];
|
|
18
|
+
const ops = keys.map((k) => {
|
|
19
|
+
return [`${propertyKey}.${k}`, descriptor.FilterableColumns.get(k)];
|
|
20
|
+
});
|
|
21
|
+
model.FilterableColumns = new Map([...model.FilterableColumns.entries(), ...ops]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
if (!operatorsOrClass) {
|
|
26
|
+
throw new Error(`Filterable decorator on ${model.Name} model, property ${propertyKey} must have operators defined`);
|
|
27
|
+
}
|
|
28
|
+
model.FilterableColumns.set(propertyKey, operatorsOrClass);
|
|
29
|
+
}
|
|
8
30
|
const columnDesc = model.Columns.find((c) => c.Name === propertyKey);
|
|
9
31
|
if (!columnDesc) {
|
|
10
32
|
// we dont want to fill all props, they will be loaded from db and mergeg with this
|
|
11
|
-
model.Columns.push({ Name: propertyKey,
|
|
33
|
+
model.Columns.push((0, orm_1._prepareColumnDesc)({ Name: propertyKey, Aggregate: isAggregate ?? false }));
|
|
12
34
|
}
|
|
13
35
|
else {
|
|
14
|
-
columnDesc.
|
|
36
|
+
columnDesc.Aggregate = isAggregate ?? false;
|
|
15
37
|
}
|
|
16
38
|
});
|
|
17
39
|
}
|
|
18
40
|
exports.Filterable = Filterable;
|
|
19
41
|
function Filter(model) {
|
|
20
|
-
return (0, http_1.Route)((0, http_1.Parameter)(
|
|
42
|
+
return (0, http_1.Route)((0, http_1.Parameter)('FilterModelRouteArg', null, model));
|
|
21
43
|
}
|
|
22
44
|
exports.Filter = Filter;
|
|
23
45
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":";;;AAAA,sCAA2I;AAE3I,oCAAyD;AACzD,wCAAiD;AAEjD,SAAgB,UAAU,CAAC,gBAAgE,EAAG,WAAsB;IAClH,OAAO,IAAA,wCAAkC,EAAC,CAAC,KAAuB,EAAE,OAAY,EAAE,WAAmB,EAAE,EAAE;QACvG,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACzC,KAAK,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAiC,CAAC;SACpE;QAED,IAAI,IAAA,kBAAa,EAAC,gBAAgB,CAAC,EAAE;YACnC,kFAAkF;YAClF,yBAAyB;YACzB,MAAM,UAAU,GAAG,IAAA,4BAAsB,EAAC,gBAAgB,CAAC,CAAC;YAC5D,IAAI,UAAU,CAAC,iBAAiB,EAAE;gBAChC,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACzB,OAAO,CAAC,GAAG,WAAW,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC,CAAC,CAAC;gBAEH,KAAK,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAAgC,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,GAAG,GAAU,CAAC,CAAC,CAAC;aACzH;SACF;aAAM;YACL,IAAI,CAAC,gBAAgB,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,IAAI,oBAAoB,WAAW,8BAA8B,CAAC,CAAC;aACrH;YACD,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;SAC5D;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE;YACf,mFAAmF;YACnF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAA,wBAAkB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;SAChG;aAAM;YACL,UAAU,CAAC,SAAS,GAAG,WAAW,IAAI,KAAK,CAAC;SAC7C;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAjCD,gCAiCC;AAID,SAAgB,MAAM,CAAC,KAAoD;IACzE,OAAO,IAAA,YAAK,EAAC,IAAA,gBAAS,EAAC,qBAAqB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAFD,wBAEC"}
|
package/lib/cjs/dto.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { SortOrder } from '@spinajs/orm';
|
|
1
2
|
export declare class PaginationDTO {
|
|
2
3
|
limit: number;
|
|
3
4
|
page: number;
|
|
4
5
|
constructor(data: Partial<PaginationDTO>);
|
|
5
6
|
}
|
|
6
7
|
export declare class OrderDTO {
|
|
7
|
-
order:
|
|
8
|
+
order: SortOrder;
|
|
8
9
|
column: string;
|
|
9
10
|
constructor(data: Partial<OrderDTO>);
|
|
10
11
|
}
|
package/lib/cjs/dto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,qBASa,aAAa;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC;CAGzC;AAED,qBAQa,QAAQ;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;CAGpC"}
|
package/lib/cjs/dto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,oDAA6C;AAWtC,IAAM,aAAa,GAAnB,MAAM,aAAa;IAIxB,YAAY,IAA4B;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAPY,sCAAa;wBAAb,aAAa;IATzB,IAAA,mBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,4BAA4B;QACjC,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;YACrC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;YACtC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;SACrC;KACF,CAAC;;GACW,aAAa,CAOzB;AAUM,IAAM,QAAQ,GAAd,MAAM,QAAQ;IAInB,YAAY,IAAuB;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAPY,4BAAQ;mBAAR,QAAQ;IARpB,IAAA,mBAAM,EAAC;QACN,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,uBAAuB;QAC5B,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAC,KAAK,EAAC,MAAM,CAAC,EAAE;YAC7D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC3B;KACF,CAAC;;GACW,QAAQ,CAOpB"}
|
package/lib/cjs/extension.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { FilterableOperators, IColumnFilter, IFilter } from './interfaces.js';
|
|
2
2
|
declare module '@spinajs/orm' {
|
|
3
|
-
interface
|
|
3
|
+
interface IModelDescriptor {
|
|
4
4
|
/**
|
|
5
5
|
* If set column is fitlerable by this operators
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
FilterableColumns?: Map<string, FilterableOperators[]>;
|
|
8
8
|
}
|
|
9
9
|
interface ISelectQueryBuilder {
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAiB,
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAiB,gBAAgB;QAC/B;;WAEG;QACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAC,mBAAmB,EAAE,CAAC,CAAC;KACvD;IAED,UAAiB,mBAAmB;QAClC;;;;;WAKG;QACH,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;KACjC;IAED,UAAU,SAAS,CAAC;QAElB;;WAEG;QACH,SAAgB,YAAY,IAAI,GAAG,CAAC;QAEpC,SAAgB,aAAa,IAAI,aAAa,EAAE,CAAC;QAEjD;;;;;;;WAOG;QACH,SAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7F;CACF"}
|
package/lib/cjs/model.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import './builders.js';
|
|
2
|
-
import { IFilter } from './interfaces.js';
|
|
2
|
+
import { FilterableOperators, IFilter } from './interfaces.js';
|
|
3
3
|
export declare const MODEL_STATIC_MIXINS: {
|
|
4
4
|
filter(filters: IFilter[]): Promise<any>;
|
|
5
5
|
filterColumns(): {
|
|
6
6
|
column: string;
|
|
7
|
-
operators:
|
|
7
|
+
operators: FilterableOperators[];
|
|
8
8
|
}[];
|
|
9
9
|
filterSchema(): {
|
|
10
10
|
type: string;
|
|
@@ -22,7 +22,7 @@ export declare const MODEL_STATIC_MIXINS: {
|
|
|
22
22
|
};
|
|
23
23
|
Operator: {
|
|
24
24
|
type: string;
|
|
25
|
-
enum:
|
|
25
|
+
enum: FilterableOperators[];
|
|
26
26
|
};
|
|
27
27
|
};
|
|
28
28
|
}[];
|
package/lib/cjs/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/D,eAAO,MAAM,mBAAmB;oBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ChC,CAAC"}
|
package/lib/cjs/model.js
CHANGED
|
@@ -13,10 +13,10 @@ exports.MODEL_STATIC_MIXINS = {
|
|
|
13
13
|
if (!modelDescriptor) {
|
|
14
14
|
throw new orm_1.OrmException(`Model ${this.constructor.name} has no descriptor`);
|
|
15
15
|
}
|
|
16
|
-
return modelDescriptor.
|
|
16
|
+
return [...modelDescriptor.FilterableColumns.entries()].map(([key, val]) => {
|
|
17
17
|
return {
|
|
18
|
-
column:
|
|
19
|
-
operators:
|
|
18
|
+
column: key,
|
|
19
|
+
operators: val,
|
|
20
20
|
};
|
|
21
21
|
});
|
|
22
22
|
},
|
|
@@ -29,14 +29,14 @@ exports.MODEL_STATIC_MIXINS = {
|
|
|
29
29
|
type: 'array',
|
|
30
30
|
items: {
|
|
31
31
|
type: 'object',
|
|
32
|
-
anyOf: modelDescriptor.
|
|
32
|
+
anyOf: [...modelDescriptor.FilterableColumns.entries()].map(([key, val]) => {
|
|
33
33
|
return {
|
|
34
34
|
type: 'object',
|
|
35
35
|
required: ['Column', 'Value', 'Operator'],
|
|
36
36
|
properties: {
|
|
37
|
-
Column: { const:
|
|
37
|
+
Column: { const: key },
|
|
38
38
|
Value: { type: ['string', 'integer', 'array'] },
|
|
39
|
-
Operator: { type: 'string', enum:
|
|
39
|
+
Operator: { type: 'string', enum: val },
|
|
40
40
|
},
|
|
41
41
|
};
|
|
42
42
|
}),
|
package/lib/cjs/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":";;;AAAA,sCAA+F;AAC/F,yBAAuB;AAGV,QAAA,mBAAmB,GAAG;IACjC,KAAK,CAAC,MAAM,CAAC,OAAkB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,iBAAW,EAAC,IAAI,EAAE,wBAAkB,CAAC,CAAC;QACxD,OAAQ,KAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;QACX,MAAM,eAAe,GAAI,IAAY,CAAC,kBAAkB,EAAsB,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,kBAAY,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;SAC5E;QAED,OAAO,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":";;;AAAA,sCAA+F;AAC/F,yBAAuB;AAGV,QAAA,mBAAmB,GAAG;IACjC,KAAK,CAAC,MAAM,CAAC,OAAkB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,iBAAW,EAAC,IAAI,EAAE,wBAAkB,CAAC,CAAC;QACxD,OAAQ,KAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;QACX,MAAM,eAAe,GAAI,IAAY,CAAC,kBAAkB,EAAsB,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,kBAAY,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;SAC5E;QAED,OAAO,CAAC,GAAG,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAmC,EAAE,EAAE;YAC3G,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,MAAM,eAAe,GAAI,IAAY,CAAC,kBAAkB,EAAsB,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,kBAAY,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;SAC5E;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAkC,EAAE,EAAE;oBAC1G,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;wBACzC,UAAU,EAAE;4BACV,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;4BACtB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;4BAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;yBACxC;qBACF,CAAC;gBACJ,CAAC,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/lib/mjs/decorators.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ModelBase } from '@spinajs/orm';
|
|
2
2
|
import { FilterableOperators } from './interfaces.js';
|
|
3
3
|
import { Constructor } from '@spinajs/di';
|
|
4
|
-
export declare function Filterable(
|
|
4
|
+
export declare function Filterable(operatorsOrClass: FilterableOperators[] | Constructor<ModelBase>, isAggregate?: boolean): any;
|
|
5
5
|
export type CustomFilterSchema = {
|
|
6
6
|
Column: string;
|
|
7
7
|
Operators: FilterableOperators[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAkF,MAAM,cAAc,CAAC;AAC3I,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAGzD,wBAAgB,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,EAAG,WAAW,CAAC,EAAG,OAAO,OAiCnH;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC;AAEtF,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,kBAAkB,EAAE,yGAE1E"}
|
package/lib/mjs/decorators.js
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
|
-
import { extractDecoratorPropertyDescriptor } from '@spinajs/orm';
|
|
1
|
+
import { _prepareColumnDesc, extractDecoratorPropertyDescriptor, extractModelDescriptor } from '@spinajs/orm';
|
|
2
|
+
import { isConstructor } from '@spinajs/di';
|
|
2
3
|
import { Parameter, Route } from '@spinajs/http';
|
|
3
|
-
export function Filterable(
|
|
4
|
+
export function Filterable(operatorsOrClass, isAggregate) {
|
|
4
5
|
return extractDecoratorPropertyDescriptor((model, _target, propertyKey) => {
|
|
6
|
+
if (model.FilterableColumns === undefined) {
|
|
7
|
+
model.FilterableColumns = new Map();
|
|
8
|
+
}
|
|
9
|
+
if (isConstructor(operatorsOrClass)) {
|
|
10
|
+
// if we have @belonsgTo relation we add to this filter schema all avaible filters
|
|
11
|
+
// from the related model
|
|
12
|
+
const descriptor = extractModelDescriptor(operatorsOrClass);
|
|
13
|
+
if (descriptor.FilterableColumns) {
|
|
14
|
+
const keys = [...descriptor.FilterableColumns.keys()];
|
|
15
|
+
const ops = keys.map((k) => {
|
|
16
|
+
return [`${propertyKey}.${k}`, descriptor.FilterableColumns.get(k)];
|
|
17
|
+
});
|
|
18
|
+
model.FilterableColumns = new Map([...model.FilterableColumns.entries(), ...ops]);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
if (!operatorsOrClass) {
|
|
23
|
+
throw new Error(`Filterable decorator on ${model.Name} model, property ${propertyKey} must have operators defined`);
|
|
24
|
+
}
|
|
25
|
+
model.FilterableColumns.set(propertyKey, operatorsOrClass);
|
|
26
|
+
}
|
|
5
27
|
const columnDesc = model.Columns.find((c) => c.Name === propertyKey);
|
|
6
28
|
if (!columnDesc) {
|
|
7
29
|
// we dont want to fill all props, they will be loaded from db and mergeg with this
|
|
8
|
-
model.Columns.push({ Name: propertyKey,
|
|
30
|
+
model.Columns.push(_prepareColumnDesc({ Name: propertyKey, Aggregate: isAggregate ?? false }));
|
|
9
31
|
}
|
|
10
32
|
else {
|
|
11
|
-
columnDesc.
|
|
33
|
+
columnDesc.Aggregate = isAggregate ?? false;
|
|
12
34
|
}
|
|
13
35
|
});
|
|
14
36
|
}
|
|
15
37
|
export function Filter(model) {
|
|
16
|
-
return Route(Parameter(
|
|
38
|
+
return Route(Parameter('FilterModelRouteArg', null, model));
|
|
17
39
|
}
|
|
18
40
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,kCAAkC,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,kBAAkB,EAAE,kCAAkC,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3I,OAAO,EAAe,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,UAAU,CAAC,gBAAgE,EAAG,WAAsB;IAClH,OAAO,kCAAkC,CAAC,CAAC,KAAuB,EAAE,OAAY,EAAE,WAAmB,EAAE,EAAE;QACvG,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACzC,KAAK,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAiC,CAAC;SACpE;QAED,IAAI,aAAa,CAAC,gBAAgB,CAAC,EAAE;YACnC,kFAAkF;YAClF,yBAAyB;YACzB,MAAM,UAAU,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YAC5D,IAAI,UAAU,CAAC,iBAAiB,EAAE;gBAChC,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACzB,OAAO,CAAC,GAAG,WAAW,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC,CAAC,CAAC;gBAEH,KAAK,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAAgC,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,GAAG,GAAU,CAAC,CAAC,CAAC;aACzH;SACF;aAAM;YACL,IAAI,CAAC,gBAAgB,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,IAAI,oBAAoB,WAAW,8BAA8B,CAAC,CAAC;aACrH;YACD,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;SAC5D;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE;YACf,mFAAmF;YACnF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;SAChG;aAAM;YACL,UAAU,CAAC,SAAS,GAAG,WAAW,IAAI,KAAK,CAAC;SAC7C;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAID,MAAM,UAAU,MAAM,CAAC,KAAoD;IACzE,OAAO,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC"}
|
package/lib/mjs/dto.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { SortOrder } from '@spinajs/orm';
|
|
1
2
|
export declare class PaginationDTO {
|
|
2
3
|
limit: number;
|
|
3
4
|
page: number;
|
|
4
5
|
constructor(data: Partial<PaginationDTO>);
|
|
5
6
|
}
|
|
6
7
|
export declare class OrderDTO {
|
|
7
|
-
order:
|
|
8
|
+
order: SortOrder;
|
|
8
9
|
column: string;
|
|
9
10
|
constructor(data: Partial<OrderDTO>);
|
|
10
11
|
}
|
package/lib/mjs/dto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,qBASa,aAAa;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;gBAER,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC;CAGzC;AAED,qBAQa,QAAQ;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;CAGpC"}
|
package/lib/mjs/dto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/dto.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAWtC,IAAM,aAAa,GAAnB,MAAM,aAAa;IAIxB,YAAY,IAA4B;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAPY,aAAa;IATzB,MAAM,CAAC;QACN,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,4BAA4B;QACjC,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;YACrC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;YACtC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;SACrC;KACF,CAAC;;GACW,aAAa,CAOzB;;AAUM,IAAM,QAAQ,GAAd,MAAM,QAAQ;IAInB,YAAY,IAAuB;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAA;AAPY,QAAQ;IARpB,MAAM,CAAC;QACN,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,uBAAuB;QAC5B,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAC,KAAK,EAAC,MAAM,CAAC,EAAE;YAC7D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC3B;KACF,CAAC;;GACW,QAAQ,CAOpB"}
|
package/lib/mjs/extension.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { FilterableOperators, IColumnFilter, IFilter } from './interfaces.js';
|
|
2
2
|
declare module '@spinajs/orm' {
|
|
3
|
-
interface
|
|
3
|
+
interface IModelDescriptor {
|
|
4
4
|
/**
|
|
5
5
|
* If set column is fitlerable by this operators
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
FilterableColumns?: Map<string, FilterableOperators[]>;
|
|
8
8
|
}
|
|
9
9
|
interface ISelectQueryBuilder {
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAiB,
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAiB,gBAAgB;QAC/B;;WAEG;QACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAC,mBAAmB,EAAE,CAAC,CAAC;KACvD;IAED,UAAiB,mBAAmB;QAClC;;;;;WAKG;QACH,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;KACjC;IAED,UAAU,SAAS,CAAC;QAElB;;WAEG;QACH,SAAgB,YAAY,IAAI,GAAG,CAAC;QAEpC,SAAgB,aAAa,IAAI,aAAa,EAAE,CAAC;QAEjD;;;;;;;WAOG;QACH,SAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7F;CACF"}
|
package/lib/mjs/model.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import './builders.js';
|
|
2
|
-
import { IFilter } from './interfaces.js';
|
|
2
|
+
import { FilterableOperators, IFilter } from './interfaces.js';
|
|
3
3
|
export declare const MODEL_STATIC_MIXINS: {
|
|
4
4
|
filter(filters: IFilter[]): Promise<any>;
|
|
5
5
|
filterColumns(): {
|
|
6
6
|
column: string;
|
|
7
|
-
operators:
|
|
7
|
+
operators: FilterableOperators[];
|
|
8
8
|
}[];
|
|
9
9
|
filterSchema(): {
|
|
10
10
|
type: string;
|
|
@@ -22,7 +22,7 @@ export declare const MODEL_STATIC_MIXINS: {
|
|
|
22
22
|
};
|
|
23
23
|
Operator: {
|
|
24
24
|
type: string;
|
|
25
|
-
enum:
|
|
25
|
+
enum: FilterableOperators[];
|
|
26
26
|
};
|
|
27
27
|
};
|
|
28
28
|
}[];
|
package/lib/mjs/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/D,eAAO,MAAM,mBAAmB;oBACR,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ChC,CAAC"}
|
package/lib/mjs/model.js
CHANGED
|
@@ -10,10 +10,10 @@ export const MODEL_STATIC_MIXINS = {
|
|
|
10
10
|
if (!modelDescriptor) {
|
|
11
11
|
throw new OrmException(`Model ${this.constructor.name} has no descriptor`);
|
|
12
12
|
}
|
|
13
|
-
return modelDescriptor.
|
|
13
|
+
return [...modelDescriptor.FilterableColumns.entries()].map(([key, val]) => {
|
|
14
14
|
return {
|
|
15
|
-
column:
|
|
16
|
-
operators:
|
|
15
|
+
column: key,
|
|
16
|
+
operators: val,
|
|
17
17
|
};
|
|
18
18
|
});
|
|
19
19
|
},
|
|
@@ -26,14 +26,14 @@ export const MODEL_STATIC_MIXINS = {
|
|
|
26
26
|
type: 'array',
|
|
27
27
|
items: {
|
|
28
28
|
type: 'object',
|
|
29
|
-
anyOf: modelDescriptor.
|
|
29
|
+
anyOf: [...modelDescriptor.FilterableColumns.entries()].map(([key, val]) => {
|
|
30
30
|
return {
|
|
31
31
|
type: 'object',
|
|
32
32
|
required: ['Column', 'Value', 'Operator'],
|
|
33
33
|
properties: {
|
|
34
|
-
Column: { const:
|
|
34
|
+
Column: { const: key },
|
|
35
35
|
Value: { type: ['string', 'integer', 'array'] },
|
|
36
|
-
Operator: { type: 'string', enum:
|
|
36
|
+
Operator: { type: 'string', enum: val },
|
|
37
37
|
},
|
|
38
38
|
};
|
|
39
39
|
}),
|
package/lib/mjs/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,eAAe,CAAC;AAGvB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,CAAC,MAAM,CAAC,OAAkB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAQ,KAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;QACX,MAAM,eAAe,GAAI,IAAY,CAAC,kBAAkB,EAAsB,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,YAAY,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;SAC5E;QAED,OAAO,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,eAAe,CAAC;AAGvB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,CAAC,MAAM,CAAC,OAAkB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAQ,KAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;QACX,MAAM,eAAe,GAAI,IAAY,CAAC,kBAAkB,EAAsB,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,YAAY,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;SAC5E;QAED,OAAO,CAAC,GAAG,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAmC,EAAE,EAAE;YAC3G,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,SAAS,EAAE,GAAG;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,MAAM,eAAe,GAAI,IAAY,CAAC,kBAAkB,EAAsB,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,YAAY,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;SAC5E;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAkC,EAAE,EAAE;oBAC1G,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;wBACzC,UAAU,EAAE;4BACV,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;4BACtB,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;4BAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;yBACxC;qBACF,CAAC;gBACJ,CAAC,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|