@opra/sqb 1.20.0 → 1.22.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/package.json +10 -27
- package/{types/sqb-collection-service.d.ts → sqb-collection-service.d.ts} +1 -1
- package/{esm/sqb-collection-service.js → sqb-collection-service.js} +4 -0
- package/{esm/sqb-entity-service.js → sqb-entity-service.js} +29 -2
- package/{esm/sqb-service-base.js → sqb-service-base.js} +4 -0
- package/{types/sqb-singleton-service.d.ts → sqb-singleton-service.d.ts} +1 -1
- package/{esm/sqb-singleton-service.js → sqb-singleton-service.js} +5 -0
- package/cjs/adapter-utils/prepare-filter.js +0 -108
- package/cjs/augmentation/datatype-factory.augmentation.js +0 -90
- package/cjs/augmentation/mapped-type.augmentation.js +0 -14
- package/cjs/augmentation/mixin-type.augmentation.js +0 -11
- package/cjs/index.js +0 -11
- package/cjs/package.json +0 -3
- package/cjs/sqb-adapter.js +0 -130
- package/cjs/sqb-collection-service.js +0 -355
- package/cjs/sqb-entity-service.js +0 -642
- package/cjs/sqb-service-base.js +0 -88
- package/cjs/sqb-singleton-service.js +0 -172
- package/esm/package.json +0 -3
- package/types/index.d.cts +0 -8
- /package/{types/adapter-utils → adapter-utils}/prepare-filter.d.ts +0 -0
- /package/{esm/adapter-utils → adapter-utils}/prepare-filter.js +0 -0
- /package/{types/augmentation → augmentation}/datatype-factory.augmentation.d.ts +0 -0
- /package/{esm/augmentation → augmentation}/datatype-factory.augmentation.js +0 -0
- /package/{types/augmentation → augmentation}/mapped-type.augmentation.d.ts +0 -0
- /package/{esm/augmentation → augmentation}/mapped-type.augmentation.js +0 -0
- /package/{types/augmentation → augmentation}/mixin-type.augmentation.d.ts +0 -0
- /package/{esm/augmentation → augmentation}/mixin-type.augmentation.js +0 -0
- /package/{types/index.d.ts → index.d.ts} +0 -0
- /package/{esm/index.js → index.js} +0 -0
- /package/{types/sqb-adapter.d.ts → sqb-adapter.d.ts} +0 -0
- /package/{esm/sqb-adapter.js → sqb-adapter.js} +0 -0
- /package/{types/sqb-entity-service.d.ts → sqb-entity-service.d.ts} +0 -0
- /package/{types/sqb-service-base.d.ts → sqb-service-base.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opra/sqb",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
4
4
|
"description": "Opra SQB adapter package",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,45 +10,28 @@
|
|
|
10
10
|
"valgen": "^5.18.2"
|
|
11
11
|
},
|
|
12
12
|
"peerDependencies": {
|
|
13
|
-
"@opra/core": "^1.
|
|
14
|
-
"@opra/http": "^1.
|
|
13
|
+
"@opra/core": "^1.22.0",
|
|
14
|
+
"@opra/http": "^1.22.0",
|
|
15
15
|
"@sqb/connect": "^4.20.4"
|
|
16
16
|
},
|
|
17
17
|
"type": "module",
|
|
18
|
+
"module": "./index.js",
|
|
19
|
+
"types": "./index.d.ts",
|
|
18
20
|
"exports": {
|
|
19
21
|
".": {
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
"default": "./esm/index.js"
|
|
23
|
-
},
|
|
24
|
-
"require": {
|
|
25
|
-
"types": "./types/index.d.cts",
|
|
26
|
-
"default": "./cjs/index.js"
|
|
27
|
-
},
|
|
28
|
-
"default": "./esm/index.js"
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"default": "./index.js"
|
|
29
24
|
},
|
|
30
25
|
"./package.json": "./package.json"
|
|
31
26
|
},
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20.0"
|
|
29
|
+
},
|
|
35
30
|
"repository": {
|
|
36
31
|
"type": "git",
|
|
37
32
|
"url": "git+https://github.com/panates/opra.git",
|
|
38
33
|
"directory": "packages/sqb"
|
|
39
34
|
},
|
|
40
|
-
"engines": {
|
|
41
|
-
"node": ">=16.0",
|
|
42
|
-
"npm": ">=7.0.0"
|
|
43
|
-
},
|
|
44
|
-
"files": [
|
|
45
|
-
"bin/",
|
|
46
|
-
"cjs/",
|
|
47
|
-
"esm/",
|
|
48
|
-
"types/",
|
|
49
|
-
"LICENSE",
|
|
50
|
-
"README.md"
|
|
51
|
-
],
|
|
52
35
|
"keywords": [
|
|
53
36
|
"opra",
|
|
54
37
|
"sqb",
|
|
@@ -91,7 +91,7 @@ export declare namespace SqbCollectionService {
|
|
|
91
91
|
* @class SqbCollectionService
|
|
92
92
|
* @template T - The data type class type of the resource
|
|
93
93
|
*/
|
|
94
|
-
export declare class SqbCollectionService<T extends object = object> extends SqbEntityService {
|
|
94
|
+
export declare class SqbCollectionService<T extends object = object> extends SqbEntityService<T> {
|
|
95
95
|
/**
|
|
96
96
|
* Represents default limit for findMany operation
|
|
97
97
|
*/
|
|
@@ -6,6 +6,10 @@ import { SqbEntityService } from './sqb-entity-service.js';
|
|
|
6
6
|
* @template T - The data type class type of the resource
|
|
7
7
|
*/
|
|
8
8
|
export class SqbCollectionService extends SqbEntityService {
|
|
9
|
+
/**
|
|
10
|
+
* Represents default limit for findMany operation
|
|
11
|
+
*/
|
|
12
|
+
defaultLimit;
|
|
9
13
|
/**
|
|
10
14
|
* Constructs a new instance
|
|
11
15
|
*
|
|
@@ -9,6 +9,35 @@ import { SqbServiceBase } from './sqb-service-base.js';
|
|
|
9
9
|
* @template T - The data type class type of the resource
|
|
10
10
|
*/
|
|
11
11
|
export class SqbEntityService extends SqbServiceBase {
|
|
12
|
+
_dataTypeScope;
|
|
13
|
+
_dataType_;
|
|
14
|
+
_dataType;
|
|
15
|
+
_dataTypeClass;
|
|
16
|
+
_entityMetadata;
|
|
17
|
+
_inputCodecs = {};
|
|
18
|
+
_outputCodecs = {};
|
|
19
|
+
/**
|
|
20
|
+
* Defines comma delimited scopes for api document
|
|
21
|
+
*/
|
|
22
|
+
scope;
|
|
23
|
+
/**
|
|
24
|
+
* Represents the name of a resource.
|
|
25
|
+
* @type {string}
|
|
26
|
+
*/
|
|
27
|
+
resourceName;
|
|
28
|
+
/**
|
|
29
|
+
* Represents a common filter function for a service.
|
|
30
|
+
*
|
|
31
|
+
* @type {SqbEntityService.Filter | Function}
|
|
32
|
+
*/
|
|
33
|
+
commonFilter;
|
|
34
|
+
/**
|
|
35
|
+
* Callback function for handling errors.
|
|
36
|
+
*
|
|
37
|
+
* @param {unknown} error - The error object.
|
|
38
|
+
* @param {SqbEntityService} _this - The context object.
|
|
39
|
+
*/
|
|
40
|
+
onError;
|
|
12
41
|
/**
|
|
13
42
|
* Constructs a new instance
|
|
14
43
|
*
|
|
@@ -18,8 +47,6 @@ export class SqbEntityService extends SqbServiceBase {
|
|
|
18
47
|
*/
|
|
19
48
|
constructor(dataType, options) {
|
|
20
49
|
super(options);
|
|
21
|
-
this._inputCodecs = {};
|
|
22
|
-
this._outputCodecs = {};
|
|
23
50
|
this._dataType_ = dataType;
|
|
24
51
|
this.resourceName = options?.resourceName;
|
|
25
52
|
this.commonFilter = options?.commonFilter;
|
|
@@ -6,6 +6,10 @@ const transactionKey = Symbol.for('transaction');
|
|
|
6
6
|
* @template T - The data type class type of the resource
|
|
7
7
|
*/
|
|
8
8
|
export class SqbServiceBase extends ServiceBase {
|
|
9
|
+
/**
|
|
10
|
+
* Represents a SqbClient or SqbConnection object
|
|
11
|
+
*/
|
|
12
|
+
db;
|
|
9
13
|
/**
|
|
10
14
|
* Constructs a new instance
|
|
11
15
|
*
|
|
@@ -55,7 +55,7 @@ export declare namespace SqbSingletonService {
|
|
|
55
55
|
* @class SqbSingletonService
|
|
56
56
|
* @template T - The data type class type of the resource
|
|
57
57
|
*/
|
|
58
|
-
export declare class SqbSingletonService<T extends object = object> extends SqbEntityService {
|
|
58
|
+
export declare class SqbSingletonService<T extends object = object> extends SqbEntityService<T> {
|
|
59
59
|
/**
|
|
60
60
|
* Represents a unique identifier for singleton record
|
|
61
61
|
* @property {SQBAdapter.IdOrIds}
|
|
@@ -7,6 +7,11 @@ import { SqbEntityService } from './sqb-entity-service.js';
|
|
|
7
7
|
* @template T - The data type class type of the resource
|
|
8
8
|
*/
|
|
9
9
|
export class SqbSingletonService extends SqbEntityService {
|
|
10
|
+
/**
|
|
11
|
+
* Represents a unique identifier for singleton record
|
|
12
|
+
* @property {SQBAdapter.IdOrIds}
|
|
13
|
+
*/
|
|
14
|
+
id;
|
|
10
15
|
/**
|
|
11
16
|
* Constructs a new instance
|
|
12
17
|
*
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = prepareFilter;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
require("@opra/core");
|
|
6
|
-
const common_1 = require("@opra/common");
|
|
7
|
-
const sqb = tslib_1.__importStar(require("@sqb/builder"));
|
|
8
|
-
const valgen_1 = require("valgen");
|
|
9
|
-
/**
|
|
10
|
-
* Prepare the SQB filter based on the provided filters and options.
|
|
11
|
-
*
|
|
12
|
-
* @param {SQBAdapter.FilterInput|SQBAdapter.FilterInput[]} filters - The filter(s) to be applied.
|
|
13
|
-
*
|
|
14
|
-
* @returns {Expression} - The prepared SQB Expression.
|
|
15
|
-
*/
|
|
16
|
-
function prepareFilter(filters) {
|
|
17
|
-
const filtersArray = Array.isArray(filters) ? filters : [filters];
|
|
18
|
-
if (!filtersArray.length)
|
|
19
|
-
return undefined;
|
|
20
|
-
const arr = [];
|
|
21
|
-
for (const filter of filtersArray) {
|
|
22
|
-
if (!filter)
|
|
23
|
-
continue;
|
|
24
|
-
let ast;
|
|
25
|
-
if (typeof filter === 'string')
|
|
26
|
-
ast = prepareFilterAst(common_1.OpraFilter.parse(filter));
|
|
27
|
-
else if (filter instanceof common_1.OpraFilter.Expression)
|
|
28
|
-
ast = prepareFilterAst(filter);
|
|
29
|
-
else
|
|
30
|
-
ast = filter;
|
|
31
|
-
if (ast)
|
|
32
|
-
arr.push(ast);
|
|
33
|
-
}
|
|
34
|
-
return arr.length > 1 ? sqb.And(...arr) : arr[0];
|
|
35
|
-
}
|
|
36
|
-
const _isDate = valgen_1.vg.isDate({ trim: 'day' });
|
|
37
|
-
const _isDateTime = valgen_1.vg.isDate();
|
|
38
|
-
function prepareFilterAst(ast) {
|
|
39
|
-
if (!ast)
|
|
40
|
-
return;
|
|
41
|
-
if (ast instanceof common_1.OpraFilter.DateLiteral) {
|
|
42
|
-
return _isDate(ast.value, { coerce: true });
|
|
43
|
-
}
|
|
44
|
-
if (ast instanceof common_1.OpraFilter.DateTimeLiteral) {
|
|
45
|
-
return _isDateTime(ast.value, { coerce: true });
|
|
46
|
-
}
|
|
47
|
-
if (ast instanceof common_1.OpraFilter.ArrayExpression) {
|
|
48
|
-
return ast.items.map(prepareFilterAst);
|
|
49
|
-
}
|
|
50
|
-
if (ast instanceof common_1.OpraFilter.NegativeExpression) {
|
|
51
|
-
return sqb.Not(prepareFilterAst(ast.expression));
|
|
52
|
-
}
|
|
53
|
-
if (ast instanceof common_1.OpraFilter.LogicalExpression) {
|
|
54
|
-
if (ast.op === 'or')
|
|
55
|
-
return sqb.Or(...ast.items.map(prepareFilterAst));
|
|
56
|
-
return sqb.And(...ast.items.map(prepareFilterAst));
|
|
57
|
-
}
|
|
58
|
-
if (ast instanceof common_1.OpraFilter.ParenthesizedExpression) {
|
|
59
|
-
return prepareFilterAst(ast.expression);
|
|
60
|
-
}
|
|
61
|
-
if (ast instanceof common_1.OpraFilter.ComparisonExpression) {
|
|
62
|
-
const left = String(ast.left);
|
|
63
|
-
const right = prepareFilterAst(ast.right);
|
|
64
|
-
if (ast.prepare) {
|
|
65
|
-
const x = ast.prepare({
|
|
66
|
-
left,
|
|
67
|
-
right,
|
|
68
|
-
op: ast.op,
|
|
69
|
-
adapter: 'sqb',
|
|
70
|
-
});
|
|
71
|
-
if (x)
|
|
72
|
-
return x;
|
|
73
|
-
}
|
|
74
|
-
switch (ast.op) {
|
|
75
|
-
case '=':
|
|
76
|
-
return sqb.Eq(left, right);
|
|
77
|
-
case '!=':
|
|
78
|
-
return sqb.Ne(left, right);
|
|
79
|
-
case '>':
|
|
80
|
-
return sqb.Gt(left, right);
|
|
81
|
-
case '>=':
|
|
82
|
-
return sqb.Gte(left, right);
|
|
83
|
-
case '<':
|
|
84
|
-
return sqb.Lt(left, right);
|
|
85
|
-
case '<=':
|
|
86
|
-
return sqb.Lte(left, right);
|
|
87
|
-
case 'in':
|
|
88
|
-
return sqb.In(left, right);
|
|
89
|
-
case '!in':
|
|
90
|
-
return sqb.Nin(left, right);
|
|
91
|
-
case 'like':
|
|
92
|
-
return sqb.Like(left, String(right).replace(/\*/g, '%'));
|
|
93
|
-
case 'ilike':
|
|
94
|
-
return sqb.Ilike(left, String(right).replace(/\*/g, '%'));
|
|
95
|
-
case '!like':
|
|
96
|
-
return sqb.NotLike(left, String(right).replace(/\*/g, '%'));
|
|
97
|
-
case '!ilike':
|
|
98
|
-
return sqb.NotILike(left, String(right).replace(/\*/g, '%'));
|
|
99
|
-
default:
|
|
100
|
-
throw new Error(`ComparisonExpression operator (${ast.op}) not implemented yet`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (ast instanceof common_1.OpraFilter.QualifiedIdentifier ||
|
|
104
|
-
ast instanceof common_1.OpraFilter.Literal) {
|
|
105
|
-
return ast.value;
|
|
106
|
-
}
|
|
107
|
-
throw new Error(`${ast.kind} is not implemented yet`);
|
|
108
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
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
|
-
var DataTypeFactory = common_1.classes.DataTypeFactory;
|
|
6
|
-
const _prepareComplexTypeArgs = DataTypeFactory
|
|
7
|
-
._prepareComplexTypeArgs;
|
|
8
|
-
DataTypeFactory._prepareComplexTypeArgs = async function (context, owner, initArgs, metadata) {
|
|
9
|
-
let sqbMeta;
|
|
10
|
-
if (initArgs.ctor &&
|
|
11
|
-
metadata.fields &&
|
|
12
|
-
(sqbMeta = connect_1.EntityMetadata.get(initArgs.ctor))) {
|
|
13
|
-
metadata = (0, common_1.cloneObject)(metadata);
|
|
14
|
-
for (const [fieldName, fieldSchema] of Object.entries(metadata.fields)) {
|
|
15
|
-
const sqbField = sqbMeta && connect_1.EntityMetadata.getField(sqbMeta, fieldName);
|
|
16
|
-
if (!sqbField)
|
|
17
|
-
continue;
|
|
18
|
-
/** Copy type information from sqb metadata to opra */
|
|
19
|
-
if (!fieldSchema.type || fieldSchema.type === Object) {
|
|
20
|
-
if ((0, connect_1.isAssociationField)(sqbField)) {
|
|
21
|
-
if (!fieldSchema.type) {
|
|
22
|
-
const trg = await sqbField.association.resolveTarget();
|
|
23
|
-
if (trg?.ctor)
|
|
24
|
-
fieldSchema.type = trg.ctor;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else if ((0, connect_1.isColumnField)(sqbField)) {
|
|
28
|
-
fieldSchema.type = sqbField.enum || sqbField.type;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if ((0, connect_1.isColumnField)(sqbField)) {
|
|
32
|
-
const hasNoType = !fieldSchema.type || fieldSchema.type === Object;
|
|
33
|
-
switch (sqbField.dataType) {
|
|
34
|
-
case connect_1.DataType.INTEGER:
|
|
35
|
-
case connect_1.DataType.SMALLINT:
|
|
36
|
-
if (hasNoType || fieldSchema.type === Number)
|
|
37
|
-
fieldSchema.type = 'integer';
|
|
38
|
-
break;
|
|
39
|
-
case connect_1.DataType.GUID:
|
|
40
|
-
if (hasNoType || fieldSchema.type === String)
|
|
41
|
-
fieldSchema.type = 'uuid';
|
|
42
|
-
break;
|
|
43
|
-
case connect_1.DataType.DATE:
|
|
44
|
-
if (hasNoType ||
|
|
45
|
-
fieldSchema.type === String ||
|
|
46
|
-
fieldSchema.type === Date) {
|
|
47
|
-
fieldSchema.type = 'date';
|
|
48
|
-
}
|
|
49
|
-
break;
|
|
50
|
-
case connect_1.DataType.TIMESTAMP:
|
|
51
|
-
if (hasNoType ||
|
|
52
|
-
fieldSchema.type === String ||
|
|
53
|
-
fieldSchema.type === Date) {
|
|
54
|
-
fieldSchema.type = 'datetime';
|
|
55
|
-
}
|
|
56
|
-
break;
|
|
57
|
-
case connect_1.DataType.TIMESTAMPTZ:
|
|
58
|
-
if (hasNoType ||
|
|
59
|
-
fieldSchema.type === String ||
|
|
60
|
-
fieldSchema.type === Date) {
|
|
61
|
-
fieldSchema.type = 'datetimetz';
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
case connect_1.DataType.TIME:
|
|
65
|
-
if (hasNoType || fieldSchema.type === String)
|
|
66
|
-
fieldSchema.type = 'time';
|
|
67
|
-
break;
|
|
68
|
-
default:
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if ((0, connect_1.isAssociationField)(sqbField)) {
|
|
73
|
-
if (sqbField.association.returnsMany())
|
|
74
|
-
fieldSchema.isArray = true;
|
|
75
|
-
if (!Object.prototype.hasOwnProperty.call(fieldSchema, 'exclusive'))
|
|
76
|
-
fieldSchema.exclusive = true;
|
|
77
|
-
}
|
|
78
|
-
if (!Object.prototype.hasOwnProperty.call(fieldSchema, 'exclusive') &&
|
|
79
|
-
Object.prototype.hasOwnProperty.call(sqbField, 'exclusive')) {
|
|
80
|
-
fieldSchema.exclusive = sqbField.exclusive;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return _prepareComplexTypeArgs.apply(DataTypeFactory, [
|
|
85
|
-
context,
|
|
86
|
-
owner,
|
|
87
|
-
initArgs,
|
|
88
|
-
metadata,
|
|
89
|
-
]);
|
|
90
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
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 (targetType, sourceType, options) {
|
|
7
|
-
_applyMixin.call(null, targetType, sourceType, options);
|
|
8
|
-
const srcMeta = connect_1.Entity.getMetadata(sourceType);
|
|
9
|
-
if (srcMeta) {
|
|
10
|
-
const trgMeta = connect_1.EntityMetadata.define(targetType);
|
|
11
|
-
const { isInheritedPredicate } = options;
|
|
12
|
-
connect_1.EntityMetadata.mixin(trgMeta, srcMeta, k => isInheritedPredicate(k));
|
|
13
|
-
}
|
|
14
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
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 oldDecorator = common_1.MixinType[common_1.DECORATOR];
|
|
6
|
-
common_1.MixinType[common_1.DECORATOR] = function (...args) {
|
|
7
|
-
const filteredSources = args[0].filter(x => typeof x === 'function');
|
|
8
|
-
const target = oldDecorator(...args);
|
|
9
|
-
connect_1.Entity.mixin(target, ...filteredSources);
|
|
10
|
-
return target;
|
|
11
|
-
};
|
package/cjs/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
require("./augmentation/datatype-factory.augmentation.js");
|
|
5
|
-
require("./augmentation/mapped-type.augmentation.js");
|
|
6
|
-
require("./augmentation/mixin-type.augmentation.js");
|
|
7
|
-
tslib_1.__exportStar(require("./sqb-adapter.js"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./sqb-collection-service.js"), exports);
|
|
9
|
-
tslib_1.__exportStar(require("./sqb-entity-service.js"), exports);
|
|
10
|
-
tslib_1.__exportStar(require("./sqb-service-base.js"), exports);
|
|
11
|
-
tslib_1.__exportStar(require("./sqb-singleton-service.js"), exports);
|
package/cjs/package.json
DELETED
package/cjs/sqb-adapter.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SQBAdapter = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const connect_1 = require("@sqb/connect");
|
|
6
|
-
const prepare_filter_js_1 = tslib_1.__importDefault(require("./adapter-utils/prepare-filter.js"));
|
|
7
|
-
var SQBAdapter;
|
|
8
|
-
(function (SQBAdapter) {
|
|
9
|
-
/**
|
|
10
|
-
* @deprecated Use prepareFilter instead
|
|
11
|
-
*/
|
|
12
|
-
SQBAdapter.parseFilter = prepare_filter_js_1.default;
|
|
13
|
-
SQBAdapter.prepareFilter = prepare_filter_js_1.default;
|
|
14
|
-
async function parseRequest(context) {
|
|
15
|
-
if (context.transport !== 'http') {
|
|
16
|
-
throw new TypeError('SQBAdapter can parse only HttpContext');
|
|
17
|
-
}
|
|
18
|
-
const ctx = context;
|
|
19
|
-
const { __oprDef } = ctx;
|
|
20
|
-
if (__oprDef?.composition?.startsWith('Entity.') &&
|
|
21
|
-
__oprDef.compositionOptions?.type) {
|
|
22
|
-
const dataType = ctx.__docNode.getComplexType(__oprDef.compositionOptions?.type);
|
|
23
|
-
const entityMetadata = connect_1.EntityMetadata.get(dataType.ctor);
|
|
24
|
-
if (!entityMetadata)
|
|
25
|
-
throw new Error(`Type class "${dataType.ctor}" is not an SQB entity`);
|
|
26
|
-
const controller = __oprDef.owner;
|
|
27
|
-
switch (__oprDef.composition) {
|
|
28
|
-
case 'Entity.Create': {
|
|
29
|
-
const data = await ctx.getBody();
|
|
30
|
-
const options = {
|
|
31
|
-
projection: ctx.queryParams.projection,
|
|
32
|
-
};
|
|
33
|
-
return {
|
|
34
|
-
method: 'create',
|
|
35
|
-
data,
|
|
36
|
-
options,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
case 'Entity.Delete': {
|
|
40
|
-
const keyParam = __oprDef.parameters.find(p => p.keyParam) ||
|
|
41
|
-
controller.parameters.find(p => p.keyParam);
|
|
42
|
-
const key = keyParam && ctx.pathParams[String(keyParam.name)];
|
|
43
|
-
const options = {
|
|
44
|
-
filter: SQBAdapter.parseFilter(ctx.queryParams.filter),
|
|
45
|
-
};
|
|
46
|
-
return {
|
|
47
|
-
method: 'delete',
|
|
48
|
-
key,
|
|
49
|
-
options,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
case 'Entity.DeleteMany': {
|
|
53
|
-
const options = {
|
|
54
|
-
filter: SQBAdapter.parseFilter(ctx.queryParams.filter),
|
|
55
|
-
};
|
|
56
|
-
return { method: 'deleteMany', options };
|
|
57
|
-
}
|
|
58
|
-
case 'Entity.FindMany': {
|
|
59
|
-
const options = {
|
|
60
|
-
count: ctx.queryParams.count,
|
|
61
|
-
filter: SQBAdapter.parseFilter(ctx.queryParams.filter),
|
|
62
|
-
projection: ctx.queryParams.projection ||
|
|
63
|
-
__oprDef.compositionOptions.defaultProjection,
|
|
64
|
-
limit: ctx.queryParams.limit || __oprDef.compositionOptions.defaultLimit,
|
|
65
|
-
skip: ctx.queryParams.skip,
|
|
66
|
-
sort: ctx.queryParams.sort || __oprDef.compositionOptions.defaultSort,
|
|
67
|
-
};
|
|
68
|
-
return { method: 'findMany', options };
|
|
69
|
-
}
|
|
70
|
-
case 'Entity.Get': {
|
|
71
|
-
const keyParam = __oprDef.parameters.find(p => p.keyParam) ||
|
|
72
|
-
controller.parameters.find(p => p.keyParam);
|
|
73
|
-
const key = keyParam && ctx.pathParams[String(keyParam.name)];
|
|
74
|
-
const options = {
|
|
75
|
-
projection: ctx.queryParams.projection,
|
|
76
|
-
filter: SQBAdapter.parseFilter(ctx.queryParams.filter),
|
|
77
|
-
};
|
|
78
|
-
return { method: 'get', key, options };
|
|
79
|
-
}
|
|
80
|
-
case 'Entity.Replace': {
|
|
81
|
-
const data = await ctx.getBody();
|
|
82
|
-
const keyParam = __oprDef.parameters.find(p => p.keyParam) ||
|
|
83
|
-
controller.parameters.find(p => p.keyParam);
|
|
84
|
-
const key = keyParam && ctx.pathParams[String(keyParam.name)];
|
|
85
|
-
const options = {
|
|
86
|
-
projection: ctx.queryParams.projection,
|
|
87
|
-
filter: ctx.queryParams.filter,
|
|
88
|
-
};
|
|
89
|
-
return {
|
|
90
|
-
method: 'replace',
|
|
91
|
-
key,
|
|
92
|
-
data,
|
|
93
|
-
options,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
case 'Entity.Update': {
|
|
97
|
-
const data = await ctx.getBody();
|
|
98
|
-
const keyParam = __oprDef.parameters.find(p => p.keyParam) ||
|
|
99
|
-
controller.parameters.find(p => p.keyParam);
|
|
100
|
-
const key = keyParam && ctx.pathParams[String(keyParam.name)];
|
|
101
|
-
const options = {
|
|
102
|
-
projection: ctx.queryParams.projection,
|
|
103
|
-
filter: SQBAdapter.parseFilter(ctx.queryParams.filter),
|
|
104
|
-
};
|
|
105
|
-
return {
|
|
106
|
-
method: 'update',
|
|
107
|
-
key,
|
|
108
|
-
data,
|
|
109
|
-
options,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
case 'Entity.UpdateMany': {
|
|
113
|
-
const data = await ctx.getBody();
|
|
114
|
-
const options = {
|
|
115
|
-
filter: SQBAdapter.parseFilter(ctx.queryParams.filter),
|
|
116
|
-
};
|
|
117
|
-
return {
|
|
118
|
-
method: 'updateMany',
|
|
119
|
-
data,
|
|
120
|
-
options,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
default:
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
throw new Error(`This operation is not compatible to SQB Adapter`);
|
|
128
|
-
}
|
|
129
|
-
SQBAdapter.parseRequest = parseRequest;
|
|
130
|
-
})(SQBAdapter || (exports.SQBAdapter = SQBAdapter = {}));
|