@opra/sqb 0.15.0 → 0.16.0
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/cjs/augmentation/document-factory.augmentation.js +2 -0
- package/cjs/sqb-adapter.js +102 -199
- package/cjs/sqb-collection-resource.js +20 -20
- package/cjs/sqb-entity-service.js +86 -54
- package/cjs/sqb-singleton-resource.js +10 -10
- package/cjs/{convert-filter.js → transform-filter.js} +8 -12
- package/cjs/transform-key-values.js +14 -0
- package/esm/augmentation/document-factory.augmentation.js +32 -28
- package/esm/augmentation/mapped-type.augmentation.js +9 -7
- package/esm/augmentation/union-type.augmentation.js +7 -5
- package/esm/index.js +10 -7
- package/esm/sqb-adapter.js +110 -203
- package/esm/sqb-collection-resource.js +56 -52
- package/esm/sqb-entity-service.js +92 -56
- package/esm/sqb-singleton-resource.js +34 -30
- package/esm/transform-filter.js +68 -0
- package/esm/transform-key-values.js +14 -0
- package/package.json +8 -7
- package/types/sqb-adapter.d.ts +14 -0
- package/{esm → types}/sqb-collection-resource.d.ts +1 -1
- package/types/sqb-entity-service.d.ts +31 -0
- package/types/transform-filter.d.ts +2 -0
- package/types/transform-key-values.d.ts +3 -0
- package/esm/convert-filter.d.ts +0 -2
- package/esm/convert-filter.js +0 -67
- package/esm/sqb-adapter.d.ts +0 -64
- package/esm/sqb-entity-service.d.ts +0 -21
- /package/{esm → types}/augmentation/document-factory.augmentation.d.ts +0 -0
- /package/{esm → types}/augmentation/mapped-type.augmentation.d.ts +0 -0
- /package/{esm → types}/augmentation/union-type.augmentation.d.ts +0 -0
- /package/{esm → types}/index.d.ts +0 -0
- /package/{esm → types}/sqb-singleton-resource.d.ts +0 -0
|
@@ -6,47 +6,47 @@ const common_1 = require("@opra/common");
|
|
|
6
6
|
const sqb_adapter_js_1 = require("./sqb-adapter.js");
|
|
7
7
|
class SqbSingletonResource {
|
|
8
8
|
async create(ctx) {
|
|
9
|
-
const prepared = sqb_adapter_js_1.SQBAdapter.
|
|
9
|
+
const prepared = sqb_adapter_js_1.SQBAdapter.transformRequest(ctx.request);
|
|
10
10
|
const service = await this.getService(ctx);
|
|
11
11
|
return service.create(ctx, prepared.data, prepared.options);
|
|
12
12
|
}
|
|
13
13
|
async delete(ctx) {
|
|
14
|
-
const prepared = sqb_adapter_js_1.SQBAdapter.
|
|
14
|
+
const prepared = sqb_adapter_js_1.SQBAdapter.transformRequest(ctx.request);
|
|
15
15
|
const service = await this.getService(ctx);
|
|
16
|
-
return !!(await service.
|
|
16
|
+
return !!(await service.deleteMany(ctx, prepared.options));
|
|
17
17
|
}
|
|
18
18
|
async get(ctx) {
|
|
19
|
-
const prepared = sqb_adapter_js_1.SQBAdapter.
|
|
19
|
+
const prepared = sqb_adapter_js_1.SQBAdapter.transformRequest(ctx.request);
|
|
20
20
|
const service = await this.getService(ctx);
|
|
21
21
|
return service.findOne(ctx, prepared.options);
|
|
22
22
|
}
|
|
23
23
|
async update(ctx) {
|
|
24
|
-
const prepared = sqb_adapter_js_1.SQBAdapter.
|
|
24
|
+
const prepared = sqb_adapter_js_1.SQBAdapter.transformRequest(ctx.request);
|
|
25
25
|
const service = await this.getService(ctx);
|
|
26
|
-
await service.
|
|
26
|
+
await service.updateMany(ctx, prepared.data, prepared.options);
|
|
27
27
|
return service.findOne(ctx, prepared.options);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
tslib_1.__decorate([
|
|
31
|
-
common_1.Singleton.
|
|
31
|
+
common_1.Singleton.Create(),
|
|
32
32
|
tslib_1.__metadata("design:type", Function),
|
|
33
33
|
tslib_1.__metadata("design:paramtypes", [Object]),
|
|
34
34
|
tslib_1.__metadata("design:returntype", Promise)
|
|
35
35
|
], SqbSingletonResource.prototype, "create", null);
|
|
36
36
|
tslib_1.__decorate([
|
|
37
|
-
common_1.Singleton.
|
|
37
|
+
common_1.Singleton.Delete(),
|
|
38
38
|
tslib_1.__metadata("design:type", Function),
|
|
39
39
|
tslib_1.__metadata("design:paramtypes", [Object]),
|
|
40
40
|
tslib_1.__metadata("design:returntype", Promise)
|
|
41
41
|
], SqbSingletonResource.prototype, "delete", null);
|
|
42
42
|
tslib_1.__decorate([
|
|
43
|
-
common_1.Singleton.
|
|
43
|
+
common_1.Singleton.Get(),
|
|
44
44
|
tslib_1.__metadata("design:type", Function),
|
|
45
45
|
tslib_1.__metadata("design:paramtypes", [Object]),
|
|
46
46
|
tslib_1.__metadata("design:returntype", Promise)
|
|
47
47
|
], SqbSingletonResource.prototype, "get", null);
|
|
48
48
|
tslib_1.__decorate([
|
|
49
|
-
common_1.Singleton.
|
|
49
|
+
common_1.Singleton.Update(),
|
|
50
50
|
tslib_1.__metadata("design:type", Function),
|
|
51
51
|
tslib_1.__metadata("design:paramtypes", [Object]),
|
|
52
52
|
tslib_1.__metadata("design:returntype", Promise)
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertFilter = void 0;
|
|
4
3
|
const tslib_1 = require("tslib");
|
|
5
4
|
const common_1 = require("@opra/common");
|
|
6
5
|
const sqb = tslib_1.__importStar(require("@sqb/builder"));
|
|
7
|
-
function
|
|
6
|
+
function transformFilter(str) {
|
|
8
7
|
const ast = typeof str === 'string' ? (0, common_1.parseFilter)(str) : str;
|
|
9
8
|
if (!ast)
|
|
10
9
|
return;
|
|
11
10
|
if (ast instanceof common_1.ComparisonExpression) {
|
|
12
11
|
const left = ast.left instanceof common_1.QualifiedIdentifier
|
|
13
12
|
? sqb.Field(ast.left.value)
|
|
14
|
-
:
|
|
15
|
-
const right =
|
|
13
|
+
: transformFilter(ast.left);
|
|
14
|
+
const right = transformFilter(ast.right);
|
|
16
15
|
switch (ast.op) {
|
|
17
16
|
case '=':
|
|
18
17
|
return sqb.Eq(left, right);
|
|
@@ -54,19 +53,16 @@ function convertFilter(str) {
|
|
|
54
53
|
return ast.value;
|
|
55
54
|
}
|
|
56
55
|
if (ast instanceof common_1.ArrayExpression) {
|
|
57
|
-
return ast.items.map(
|
|
56
|
+
return ast.items.map(transformFilter);
|
|
58
57
|
}
|
|
59
58
|
if (ast instanceof common_1.LogicalExpression) {
|
|
60
59
|
if (ast.op === 'or')
|
|
61
|
-
return sqb.Or(...ast.items.map(
|
|
62
|
-
return sqb.And(...ast.items.map(
|
|
63
|
-
}
|
|
64
|
-
if (ast instanceof common_1.ArrayExpression) {
|
|
65
|
-
return ast.items.map(convertFilter);
|
|
60
|
+
return sqb.Or(...ast.items.map(transformFilter));
|
|
61
|
+
return sqb.And(...ast.items.map(transformFilter));
|
|
66
62
|
}
|
|
67
63
|
if (ast instanceof common_1.ParenthesesExpression) {
|
|
68
|
-
return
|
|
64
|
+
return transformFilter(ast.expression);
|
|
69
65
|
}
|
|
70
66
|
throw new Error(`${ast.type} is not implemented yet`);
|
|
71
67
|
}
|
|
72
|
-
exports.
|
|
68
|
+
exports.default = transformFilter;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function transformKeyValues(resource, keyValues) {
|
|
4
|
+
const { primaryKey } = resource;
|
|
5
|
+
if (primaryKey.length > 1) {
|
|
6
|
+
const query = {};
|
|
7
|
+
primaryKey.forEach((k, i) => {
|
|
8
|
+
query[k] = typeof keyValues === 'object' ? keyValues[k] : keyValues[i];
|
|
9
|
+
});
|
|
10
|
+
return query;
|
|
11
|
+
}
|
|
12
|
+
return { [primaryKey[0]]: keyValues };
|
|
13
|
+
}
|
|
14
|
+
exports.default = transformKeyValues;
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const common_1 = require("@opra/common");
|
|
4
|
+
const connect_1 = require("@sqb/connect");
|
|
3
5
|
// @ts-ignore
|
|
4
|
-
const _extractFieldSchema = DocumentFactory.prototype.extractFieldSchema;
|
|
6
|
+
const _extractFieldSchema = common_1.DocumentFactory.prototype.extractFieldSchema;
|
|
5
7
|
// @ts-ignore
|
|
6
|
-
DocumentFactory.prototype.extractFieldSchema = async function (target, ctor, metadata, name) {
|
|
8
|
+
common_1.DocumentFactory.prototype.extractFieldSchema = async function (target, ctor, metadata, name) {
|
|
7
9
|
await _extractFieldSchema.call(this, target, ctor, metadata, name);
|
|
8
|
-
const sqbMeta = EntityMetadata.get(ctor);
|
|
9
|
-
const sqbField = sqbMeta && EntityMetadata.getField(sqbMeta, name);
|
|
10
|
+
const sqbMeta = connect_1.EntityMetadata.get(ctor);
|
|
11
|
+
const sqbField = sqbMeta && connect_1.EntityMetadata.getField(sqbMeta, name);
|
|
10
12
|
if (!sqbField)
|
|
11
13
|
return;
|
|
12
14
|
const detectType = !metadata.type;
|
|
13
|
-
if (isAssociationField(sqbField)) {
|
|
15
|
+
if ((0, connect_1.isAssociationField)(sqbField)) {
|
|
14
16
|
if (!sqbField.association.returnsMany())
|
|
15
17
|
delete target.isArray;
|
|
16
18
|
if (!target.type) {
|
|
@@ -22,60 +24,62 @@ DocumentFactory.prototype.extractFieldSchema = async function (target, ctor, met
|
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
else if (sqbField.kind === 'column') {
|
|
25
|
-
if (sqbField.
|
|
27
|
+
if (typeof sqbField.enum === 'object')
|
|
28
|
+
metadata.enum = sqbField.enum;
|
|
29
|
+
if (sqbField.type && Reflect.hasMetadata(common_1.METADATA_KEY, sqbField.type)) {
|
|
26
30
|
target.type = sqbField.type;
|
|
27
31
|
}
|
|
28
32
|
switch (sqbField.dataType) {
|
|
29
|
-
case
|
|
33
|
+
case connect_1.DataType.GUID:
|
|
30
34
|
if (!target.type || (detectType && target.type === 'string'))
|
|
31
35
|
target.type = 'guid';
|
|
32
36
|
break;
|
|
33
|
-
case
|
|
37
|
+
case connect_1.DataType.JSON:
|
|
34
38
|
if (!target.type || (detectType && target.type === 'any'))
|
|
35
39
|
target.type = 'object';
|
|
36
40
|
break;
|
|
37
|
-
case
|
|
38
|
-
case
|
|
41
|
+
case connect_1.DataType.INTEGER:
|
|
42
|
+
case connect_1.DataType.SMALLINT:
|
|
39
43
|
if (!target.type || (detectType && target.type === 'number'))
|
|
40
44
|
target.type = 'integer';
|
|
41
45
|
break;
|
|
42
|
-
case
|
|
46
|
+
case connect_1.DataType.BIGINT:
|
|
43
47
|
if (!target.type || (detectType && target.type === 'number'))
|
|
44
48
|
target.type = 'bigint';
|
|
45
49
|
break;
|
|
46
|
-
case
|
|
50
|
+
case connect_1.DataType.DATE:
|
|
47
51
|
if (!target.type || (detectType && (target.type === 'timestamp' || target.type === 'string')))
|
|
48
52
|
target.type = 'date';
|
|
49
53
|
break;
|
|
50
|
-
case
|
|
54
|
+
case connect_1.DataType.TIMESTAMPTZ:
|
|
51
55
|
if (!target.type || (detectType && (target.type === 'timestamp' || target.type === 'string')))
|
|
52
56
|
target.type = 'timestamptz';
|
|
53
57
|
break;
|
|
54
|
-
case
|
|
58
|
+
case connect_1.DataType.TIME:
|
|
55
59
|
if (!target.type || (detectType && (target.type === 'timestamp' || target.type === 'string')))
|
|
56
60
|
target.type = 'time';
|
|
57
61
|
break;
|
|
58
|
-
case
|
|
62
|
+
case connect_1.DataType.BINARY:
|
|
59
63
|
if (!target.type || (detectType && target.type === 'string'))
|
|
60
64
|
target.type = 'base64';
|
|
61
65
|
break;
|
|
62
66
|
}
|
|
63
67
|
if (!target.type) {
|
|
64
68
|
switch (sqbField.dataType) {
|
|
65
|
-
case
|
|
69
|
+
case connect_1.DataType.BOOL:
|
|
66
70
|
target.type = 'boolean';
|
|
67
71
|
break;
|
|
68
|
-
case
|
|
69
|
-
case
|
|
70
|
-
case
|
|
72
|
+
case connect_1.DataType.CHAR:
|
|
73
|
+
case connect_1.DataType.VARCHAR:
|
|
74
|
+
case connect_1.DataType.TEXT:
|
|
71
75
|
target.type = 'string';
|
|
72
76
|
break;
|
|
73
|
-
case
|
|
74
|
-
case
|
|
75
|
-
case
|
|
77
|
+
case connect_1.DataType.FLOAT:
|
|
78
|
+
case connect_1.DataType.DOUBLE:
|
|
79
|
+
case connect_1.DataType.NUMBER:
|
|
76
80
|
target.type = 'number';
|
|
77
81
|
break;
|
|
78
|
-
case
|
|
82
|
+
case connect_1.DataType.TIMESTAMP:
|
|
79
83
|
target.type = 'timestamp';
|
|
80
84
|
break;
|
|
81
85
|
}
|
|
@@ -91,14 +95,14 @@ DocumentFactory.prototype.extractFieldSchema = async function (target, ctor, met
|
|
|
91
95
|
target.exclusive = sqbField.exclusive;
|
|
92
96
|
};
|
|
93
97
|
// @ts-ignore
|
|
94
|
-
const _createCollection = DocumentFactory.prototype.createCollection;
|
|
98
|
+
const _createCollection = common_1.DocumentFactory.prototype.createCollection;
|
|
95
99
|
// @ts-ignore
|
|
96
|
-
DocumentFactory.prototype.createCollection = async function (name, schema) {
|
|
100
|
+
common_1.DocumentFactory.prototype.createCollection = async function (name, schema) {
|
|
97
101
|
const { document } = this;
|
|
98
102
|
const dataType = document.getComplexType(schema.type);
|
|
99
103
|
// Determine primaryKey if not defined
|
|
100
104
|
if (!schema.primaryKey && dataType.ctor) {
|
|
101
|
-
const entityMetadata = EntityMetadata.get(dataType.ctor);
|
|
105
|
+
const entityMetadata = connect_1.EntityMetadata.get(dataType.ctor);
|
|
102
106
|
if (entityMetadata?.indexes) {
|
|
103
107
|
const primaryIndex = entityMetadata.indexes.find(x => x.primary);
|
|
104
108
|
if (primaryIndex) {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const common_1 = require("@opra/common");
|
|
4
|
+
const connect_1 = require("@sqb/connect");
|
|
5
|
+
const _applyMixin = common_1.MappedType._applyMixin;
|
|
6
|
+
common_1.MappedType._applyMixin = function (target, source, options) {
|
|
5
7
|
_applyMixin.call(null, target, source, options);
|
|
6
|
-
const srcMeta = Entity.getMetadata(source);
|
|
8
|
+
const srcMeta = connect_1.Entity.getMetadata(source);
|
|
7
9
|
if (srcMeta) {
|
|
8
|
-
const trgMeta = EntityMetadata.define(target);
|
|
10
|
+
const trgMeta = connect_1.EntityMetadata.define(target);
|
|
9
11
|
const { isInheritedPredicate } = options;
|
|
10
|
-
EntityMetadata.mixin(trgMeta, srcMeta, k => isInheritedPredicate(k));
|
|
12
|
+
connect_1.EntityMetadata.mixin(trgMeta, srcMeta, k => isInheritedPredicate(k));
|
|
11
13
|
}
|
|
12
14
|
};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const common_1 = require("@opra/common");
|
|
4
|
+
const connect_1 = require("@sqb/connect");
|
|
5
|
+
const _applyMixin = common_1.UnionType._applyMixin;
|
|
6
|
+
common_1.UnionType._applyMixin = function (target, ...sources) {
|
|
5
7
|
_applyMixin.call(null, target, ...sources);
|
|
6
|
-
Entity.mixin(target, ...sources);
|
|
8
|
+
connect_1.Entity.mixin(target, ...sources);
|
|
7
9
|
};
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
require("./augmentation/document-factory.augmentation.js");
|
|
5
|
+
require("./augmentation/mapped-type.augmentation.js");
|
|
6
|
+
require("./augmentation/union-type.augmentation.js");
|
|
7
|
+
tslib_1.__exportStar(require("./sqb-adapter.js"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./sqb-collection-resource.js"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./sqb-entity-service.js"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./sqb-singleton-resource.js"), exports);
|
package/esm/sqb-adapter.js
CHANGED
|
@@ -1,208 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQBAdapter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const lodash_isnil_1 = tslib_1.__importDefault(require("lodash.isnil"));
|
|
6
|
+
const lodash_omitby_1 = tslib_1.__importDefault(require("lodash.omitby"));
|
|
7
|
+
const common_1 = require("@opra/common");
|
|
8
|
+
const connect_1 = require("@sqb/connect");
|
|
9
|
+
const transform_filter_js_1 = tslib_1.__importDefault(require("./transform-filter.js"));
|
|
10
|
+
const transform_key_values_js_1 = tslib_1.__importDefault(require("./transform-key-values.js"));
|
|
11
|
+
var SQBAdapter;
|
|
5
12
|
(function (SQBAdapter) {
|
|
6
|
-
SQBAdapter.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
SQBAdapter.parseCollectionCreateRequest = parseCollectionCreateRequest;
|
|
23
|
-
function parseCollectionDeleteRequest(request) {
|
|
24
|
-
/* istanbul ignore next */
|
|
25
|
-
if (!(request.resourceKind === 'Collection' && request.operation === 'delete'))
|
|
26
|
-
throw new TypeError('"Request" is not a "CollectionDeleteRequest"');
|
|
27
|
-
const { args } = request;
|
|
28
|
-
return {
|
|
29
|
-
method: 'destroy',
|
|
30
|
-
key: args.key,
|
|
31
|
-
options: {}
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
SQBAdapter.parseCollectionDeleteRequest = parseCollectionDeleteRequest;
|
|
35
|
-
function parseCollectionDeleteManyRequest(request) {
|
|
36
|
-
/* istanbul ignore next */
|
|
37
|
-
if (!(request.resourceKind === 'Collection' && request.operation === 'deleteMany'))
|
|
38
|
-
throw new TypeError('"Request" is not a "CollectionDeleteManyRequest"');
|
|
39
|
-
const { args } = request;
|
|
40
|
-
return {
|
|
41
|
-
method: 'destroyAll',
|
|
42
|
-
options: omitBy({
|
|
43
|
-
filter: SQBAdapter.parseFilter(args.filter)
|
|
44
|
-
}, isNil)
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
SQBAdapter.parseCollectionDeleteManyRequest = parseCollectionDeleteManyRequest;
|
|
48
|
-
function parseCollectionGetRequest(request) {
|
|
49
|
-
/* istanbul ignore next */
|
|
50
|
-
if (!(request.resourceKind === 'Collection' && request.operation === 'get'))
|
|
51
|
-
throw new TypeError('"Request" is not a "CollectionGetRequest"');
|
|
52
|
-
const { args } = request;
|
|
53
|
-
return {
|
|
54
|
-
method: 'findByPk',
|
|
55
|
-
key: args.key,
|
|
56
|
-
options: omitBy({
|
|
57
|
-
pick: args.pick?.length ? args.pick : undefined,
|
|
58
|
-
omit: args.omit?.length ? args.omit : undefined,
|
|
59
|
-
include: args.include?.length ? args.include : undefined,
|
|
60
|
-
}, isNil)
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
SQBAdapter.parseCollectionGetRequest = parseCollectionGetRequest;
|
|
64
|
-
function parseCollectionUpdateRequest(request) {
|
|
65
|
-
/* istanbul ignore next */
|
|
66
|
-
if (!(request.resourceKind === 'Collection' && request.operation === 'update'))
|
|
67
|
-
throw new TypeError('"Request" is not a "CollectionUpdateRequest"');
|
|
68
|
-
const { args } = request;
|
|
69
|
-
return {
|
|
70
|
-
method: 'update',
|
|
71
|
-
key: args.key,
|
|
72
|
-
data: args.data,
|
|
73
|
-
options: omitBy({
|
|
74
|
-
pick: args.pick?.length ? args.pick : undefined,
|
|
75
|
-
omit: args.omit?.length ? args.omit : undefined,
|
|
76
|
-
include: args.include?.length ? args.include : undefined,
|
|
77
|
-
}, isNil)
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
SQBAdapter.parseCollectionUpdateRequest = parseCollectionUpdateRequest;
|
|
81
|
-
function parseCollectionUpdateManyRequest(request) {
|
|
82
|
-
/* istanbul ignore next */
|
|
83
|
-
if (!(request.resourceKind === 'Collection' && request.operation === 'updateMany'))
|
|
84
|
-
throw new TypeError('"Request" is not a "CollectionUpdateManyRequest"');
|
|
85
|
-
const { args } = request;
|
|
86
|
-
return {
|
|
87
|
-
method: 'updateAll',
|
|
88
|
-
data: args.data,
|
|
89
|
-
options: omitBy({
|
|
90
|
-
filter: SQBAdapter.parseFilter(args.filter)
|
|
91
|
-
}, isNil)
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
SQBAdapter.parseCollectionUpdateManyRequest = parseCollectionUpdateManyRequest;
|
|
95
|
-
function parseCollectionSearchRequest(request) {
|
|
96
|
-
/* istanbul ignore next */
|
|
97
|
-
if (!(request.resourceKind === 'Collection' && request.operation === 'search'))
|
|
98
|
-
throw new TypeError('"Request" is not a "CollectionSearchRequest"');
|
|
99
|
-
const { args } = request;
|
|
100
|
-
return {
|
|
101
|
-
method: 'findAll',
|
|
102
|
-
options: omitBy({
|
|
103
|
-
pick: args.pick?.length ? args.pick : undefined,
|
|
104
|
-
omit: args.omit?.length ? args.omit : undefined,
|
|
105
|
-
include: args.include?.length ? args.include : undefined,
|
|
106
|
-
sort: args.sort?.length ? args.sort : undefined,
|
|
107
|
-
limit: args.limit,
|
|
108
|
-
offset: args.skip,
|
|
109
|
-
distinct: args.distinct,
|
|
110
|
-
count: args.count,
|
|
111
|
-
filter: SQBAdapter.parseFilter(args.filter)
|
|
112
|
-
}, isNil)
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
SQBAdapter.parseCollectionSearchRequest = parseCollectionSearchRequest;
|
|
116
|
-
function parseSingletonGetRequest(request) {
|
|
117
|
-
/* istanbul ignore next */
|
|
118
|
-
if (!(request.resourceKind === 'Singleton' && request.operation === 'get'))
|
|
119
|
-
throw new TypeError('"Request" is not a "SingletonGetRequest"');
|
|
120
|
-
const { args } = request;
|
|
121
|
-
return {
|
|
122
|
-
method: 'findOne',
|
|
123
|
-
options: omitBy({
|
|
124
|
-
pick: args.pick?.length ? args.pick : undefined,
|
|
125
|
-
omit: args.omit?.length ? args.omit : undefined,
|
|
126
|
-
include: args.include?.length ? args.include : undefined,
|
|
127
|
-
}, isNil)
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
SQBAdapter.parseSingletonGetRequest = parseSingletonGetRequest;
|
|
131
|
-
function parseSingletonCreateRequest(request) {
|
|
132
|
-
/* istanbul ignore next */
|
|
133
|
-
if (!(request.resourceKind === 'Singleton' && request.operation === 'create'))
|
|
134
|
-
throw new TypeError('"Request" is not a "SingletonCreateRequest"');
|
|
135
|
-
const { args } = request;
|
|
136
|
-
return {
|
|
137
|
-
method: 'create',
|
|
138
|
-
data: args.data,
|
|
139
|
-
options: omitBy({
|
|
140
|
-
pick: args.pick?.length ? args.pick : undefined,
|
|
141
|
-
omit: args.omit?.length ? args.omit : undefined,
|
|
142
|
-
include: args.include?.length ? args.include : undefined,
|
|
143
|
-
}, isNil)
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
SQBAdapter.parseSingletonCreateRequest = parseSingletonCreateRequest;
|
|
147
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
148
|
-
function parseSingletonDeleteRequest(request) {
|
|
149
|
-
/* istanbul ignore next */
|
|
150
|
-
if (!(request.resourceKind === 'Singleton' && request.operation === 'delete'))
|
|
151
|
-
throw new TypeError('"Request" is not a "SingletonDeleteRequest"');
|
|
152
|
-
return {
|
|
153
|
-
method: 'destroyAll',
|
|
154
|
-
options: {},
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
SQBAdapter.parseSingletonDeleteRequest = parseSingletonDeleteRequest;
|
|
158
|
-
function parseSingletonUpdateRequest(request) {
|
|
159
|
-
/* istanbul ignore next */
|
|
160
|
-
if (!(request.resourceKind === 'Singleton' && request.operation === 'update'))
|
|
161
|
-
throw new TypeError('"Request" is not a "SingletonUpdateRequest"');
|
|
162
|
-
const { args } = request;
|
|
163
|
-
return {
|
|
164
|
-
method: 'updateAll',
|
|
165
|
-
data: args.data,
|
|
166
|
-
options: omitBy({
|
|
167
|
-
pick: args.pick?.length ? args.pick : undefined,
|
|
168
|
-
omit: args.omit?.length ? args.omit : undefined,
|
|
169
|
-
include: args.include?.length ? args.include : undefined,
|
|
170
|
-
}, isNil)
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
SQBAdapter.parseSingletonUpdateRequest = parseSingletonUpdateRequest;
|
|
174
|
-
function parseRequest(request) {
|
|
175
|
-
if (request.resourceKind === 'Collection') {
|
|
176
|
-
switch (request.operation) {
|
|
177
|
-
case 'create':
|
|
178
|
-
return parseCollectionCreateRequest(request);
|
|
179
|
-
case 'get':
|
|
180
|
-
return parseCollectionGetRequest(request);
|
|
181
|
-
case 'delete':
|
|
182
|
-
return parseCollectionDeleteRequest(request);
|
|
183
|
-
case 'deleteMany':
|
|
184
|
-
return parseCollectionDeleteManyRequest(request);
|
|
185
|
-
case 'update':
|
|
186
|
-
return parseCollectionUpdateRequest(request);
|
|
187
|
-
case 'updateMany':
|
|
188
|
-
return parseCollectionUpdateManyRequest(request);
|
|
189
|
-
case 'search':
|
|
190
|
-
return parseCollectionSearchRequest(request);
|
|
13
|
+
SQBAdapter.transformFilter = transform_filter_js_1.default;
|
|
14
|
+
SQBAdapter.transformKeyValues = transform_key_values_js_1.default;
|
|
15
|
+
function transformRequest(request) {
|
|
16
|
+
const { resource } = request;
|
|
17
|
+
if (resource instanceof common_1.Collection || resource instanceof common_1.Singleton) {
|
|
18
|
+
const { args, operation } = request;
|
|
19
|
+
let options = {};
|
|
20
|
+
const entityMetadata = connect_1.EntityMetadata.get(resource.type.ctor);
|
|
21
|
+
if (!entityMetadata)
|
|
22
|
+
throw new Error(`Type class "${resource.type.ctor}" is not an SQB entity`);
|
|
23
|
+
if (resource instanceof common_1.Collection) {
|
|
24
|
+
const primaryIndex = entityMetadata.indexes.find(x => x.primary);
|
|
25
|
+
// Check if resource primary keys are same with entity
|
|
26
|
+
const primaryKeys = [...(primaryIndex && primaryIndex.columns) || []];
|
|
27
|
+
if (primaryKeys.sort().join() !== [...resource.primaryKey].sort().join())
|
|
28
|
+
throw new Error('Resource primaryKey definition differs from SQB Entity primaryKey definition');
|
|
191
29
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
30
|
+
if (operation === 'create' || operation === 'update' ||
|
|
31
|
+
operation === 'get' || operation === 'findMany') {
|
|
32
|
+
options.pick = args.pick?.length ? args.pick : undefined;
|
|
33
|
+
options.omit = args.omit?.length ? args.omit : undefined;
|
|
34
|
+
options.include = args.include?.length ? args.include : undefined;
|
|
35
|
+
}
|
|
36
|
+
if (args.filter) {
|
|
37
|
+
options.filter = SQBAdapter.transformFilter(args.filter);
|
|
38
|
+
}
|
|
39
|
+
if (operation === 'findMany') {
|
|
40
|
+
options.sort = args.sort?.length ? args.sort : undefined;
|
|
41
|
+
options.limit = args.limit;
|
|
42
|
+
options.offset = args.skip;
|
|
43
|
+
options.distinct = args.distinct;
|
|
44
|
+
options.count = args.count;
|
|
45
|
+
}
|
|
46
|
+
options = (0, lodash_omitby_1.default)(options, lodash_isnil_1.default);
|
|
47
|
+
if (operation === 'create') {
|
|
48
|
+
return {
|
|
49
|
+
method: 'create',
|
|
50
|
+
data: args.data,
|
|
51
|
+
options,
|
|
52
|
+
args: [args.data, options]
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (operation === 'deleteMany' || (operation === 'delete' && resource instanceof common_1.Singleton)) {
|
|
56
|
+
return {
|
|
57
|
+
method: 'deleteMany',
|
|
58
|
+
options,
|
|
59
|
+
args: [options]
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (operation === 'delete') {
|
|
63
|
+
return {
|
|
64
|
+
method: 'delete',
|
|
65
|
+
key: args.key,
|
|
66
|
+
options,
|
|
67
|
+
args: [args.key, options]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (operation === 'get') {
|
|
71
|
+
if (resource instanceof common_1.Singleton)
|
|
72
|
+
return {
|
|
73
|
+
method: 'findOne',
|
|
74
|
+
options,
|
|
75
|
+
args: [options]
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
method: 'find',
|
|
79
|
+
key: args.key,
|
|
80
|
+
options,
|
|
81
|
+
args: [args.key, options]
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (operation === 'findMany') {
|
|
85
|
+
const out = {
|
|
86
|
+
method: 'findMany',
|
|
87
|
+
options,
|
|
88
|
+
args: [options]
|
|
89
|
+
};
|
|
90
|
+
if (args.count)
|
|
91
|
+
out.count = args.count;
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
if (operation === 'updateMany' || (operation === 'update' && resource instanceof common_1.Singleton)) {
|
|
95
|
+
return {
|
|
96
|
+
method: 'updateMany',
|
|
97
|
+
data: args.data,
|
|
98
|
+
options,
|
|
99
|
+
args: [args.data, options]
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (operation === 'update') {
|
|
103
|
+
return {
|
|
104
|
+
method: 'update',
|
|
105
|
+
key: args.key,
|
|
106
|
+
data: args.data,
|
|
107
|
+
options,
|
|
108
|
+
args: [args.key, args.data, options]
|
|
109
|
+
};
|
|
203
110
|
}
|
|
204
111
|
}
|
|
205
|
-
throw new Error(`Unimplemented request method "${request.
|
|
112
|
+
throw new Error(`Unimplemented request method "${request.operation}"`);
|
|
206
113
|
}
|
|
207
|
-
SQBAdapter.
|
|
208
|
-
})(SQBAdapter || (SQBAdapter = {}));
|
|
114
|
+
SQBAdapter.transformRequest = transformRequest;
|
|
115
|
+
})(SQBAdapter = exports.SQBAdapter || (exports.SQBAdapter = {}));
|