@oino-ts/db 0.0.11
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/README.md +222 -0
- package/dist/cjs/OINODb.js +27 -0
- package/dist/cjs/OINODbApi.js +270 -0
- package/dist/cjs/OINODbConfig.js +86 -0
- package/dist/cjs/OINODbDataField.js +354 -0
- package/dist/cjs/OINODbDataModel.js +279 -0
- package/dist/cjs/OINODbDataSet.js +139 -0
- package/dist/cjs/OINODbFactory.js +563 -0
- package/dist/cjs/OINODbModelSet.js +267 -0
- package/dist/cjs/OINODbParams.js +280 -0
- package/dist/cjs/OINODbRequestParams.js +280 -0
- package/dist/cjs/OINODbSwagger.js +201 -0
- package/dist/cjs/index.js +51 -0
- package/dist/esm/OINODb.js +23 -0
- package/dist/esm/OINODbApi.js +265 -0
- package/dist/esm/OINODbConfig.js +82 -0
- package/dist/esm/OINODbDataField.js +345 -0
- package/dist/esm/OINODbDataModel.js +275 -0
- package/dist/esm/OINODbDataSet.js +134 -0
- package/dist/esm/OINODbFactory.js +559 -0
- package/dist/esm/OINODbModelSet.js +263 -0
- package/dist/esm/OINODbRequestParams.js +274 -0
- package/dist/esm/OINODbSwagger.js +197 -0
- package/dist/esm/index.js +17 -0
- package/dist/types/OINODb.d.ts +75 -0
- package/dist/types/OINODbApi.d.ts +57 -0
- package/dist/types/OINODbConfig.d.ts +52 -0
- package/dist/types/OINODbDataField.d.ts +202 -0
- package/dist/types/OINODbDataModel.d.ts +108 -0
- package/dist/types/OINODbDataSet.d.ts +95 -0
- package/dist/types/OINODbFactory.d.ts +99 -0
- package/dist/types/OINODbModelSet.d.ts +50 -0
- package/dist/types/OINODbRequestParams.d.ts +130 -0
- package/dist/types/OINODbSwagger.d.ts +25 -0
- package/dist/types/index.d.ts +103 -0
- package/package.json +35 -0
- package/src/OINODb.ts +98 -0
- package/src/OINODbApi.test.ts +243 -0
- package/src/OINODbApi.ts +270 -0
- package/src/OINODbConfig.ts +92 -0
- package/src/OINODbDataField.ts +372 -0
- package/src/OINODbDataModel.ts +290 -0
- package/src/OINODbDataSet.ts +170 -0
- package/src/OINODbFactory.ts +570 -0
- package/src/OINODbModelSet.ts +286 -0
- package/src/OINODbRequestParams.ts +281 -0
- package/src/OINODbSwagger.ts +209 -0
- package/src/index.ts +116 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.OINODbSqlLimit = exports.OINODbSqlOrder = exports.OINODbSqlFilter = exports.OINODbSqlComparison = exports.OINODbSqlBooleanOperation = void 0;
|
|
9
|
+
const index_js_1 = require("./index.js");
|
|
10
|
+
/**
|
|
11
|
+
* Supported logical conjunctions in filter predicates.
|
|
12
|
+
* @enum
|
|
13
|
+
*/
|
|
14
|
+
var OINODbSqlBooleanOperation;
|
|
15
|
+
(function (OINODbSqlBooleanOperation) {
|
|
16
|
+
OINODbSqlBooleanOperation["and"] = "and";
|
|
17
|
+
OINODbSqlBooleanOperation["or"] = "or";
|
|
18
|
+
OINODbSqlBooleanOperation["not"] = "not";
|
|
19
|
+
})(OINODbSqlBooleanOperation || (exports.OINODbSqlBooleanOperation = OINODbSqlBooleanOperation = {}));
|
|
20
|
+
/**
|
|
21
|
+
* Supported logical conjunctions in filter predicates.
|
|
22
|
+
* @enum
|
|
23
|
+
*/
|
|
24
|
+
var OINODbSqlComparison;
|
|
25
|
+
(function (OINODbSqlComparison) {
|
|
26
|
+
OINODbSqlComparison["lt"] = "lt";
|
|
27
|
+
OINODbSqlComparison["le"] = "le";
|
|
28
|
+
OINODbSqlComparison["eq"] = "eq";
|
|
29
|
+
OINODbSqlComparison["ge"] = "ge";
|
|
30
|
+
OINODbSqlComparison["gt"] = "gt";
|
|
31
|
+
OINODbSqlComparison["like"] = "like";
|
|
32
|
+
})(OINODbSqlComparison || (exports.OINODbSqlComparison = OINODbSqlComparison = {}));
|
|
33
|
+
/**
|
|
34
|
+
* Class for recursively parsing of filters and printing them as SQL conditions.
|
|
35
|
+
* Supports three types of statements
|
|
36
|
+
* - comparison: (field)-lt|le|eq|ge|gt|like(value)
|
|
37
|
+
* - negation: -not(filter)
|
|
38
|
+
* - conjunction/disjunction: (filter)-and|or(filter)
|
|
39
|
+
* Supported conditions are comparisons (<, <=, =, >=, >) and substring match (LIKE).
|
|
40
|
+
*
|
|
41
|
+
*/
|
|
42
|
+
class OINODbSqlFilter {
|
|
43
|
+
static _booleanOperationRegex = /^\s?\-(and|or)\s?$/i;
|
|
44
|
+
static _negationRegex = /^-(not|)\((.+)\)$/i;
|
|
45
|
+
static _filterComparisonRegex = /^\(([^'"\(\)]+)\)\s?\-(lt|le|eq|ge|gt|like)\s?\(([^'"\(\)]+)\)$/i;
|
|
46
|
+
_leftSide;
|
|
47
|
+
_rightSide;
|
|
48
|
+
_operator;
|
|
49
|
+
/**
|
|
50
|
+
* Constructor of `OINODbSqlFilter`
|
|
51
|
+
* @param leftSide left side of the filter, either another filter or a column name
|
|
52
|
+
* @param operation operation of the filter, either `OINODbSqlComparison` or `OINODbSqlBooleanOperation`
|
|
53
|
+
* @param rightSide right side of the filter, either another filter or a value
|
|
54
|
+
*/
|
|
55
|
+
constructor(leftSide, operation, rightSide) {
|
|
56
|
+
if (!(((operation === null) && (leftSide == "") && (rightSide == "")) ||
|
|
57
|
+
((operation !== null) && (Object.values(OINODbSqlComparison).includes(operation)) && (typeof (leftSide) == "string") && (leftSide != "") && (typeof (rightSide) == "string") && (rightSide != "")) ||
|
|
58
|
+
((operation == OINODbSqlBooleanOperation.not) && (leftSide == "") && (rightSide instanceof OINODbSqlFilter)) ||
|
|
59
|
+
(((operation == OINODbSqlBooleanOperation.and) || (operation == OINODbSqlBooleanOperation.or)) && (leftSide instanceof OINODbSqlFilter) && (rightSide instanceof OINODbSqlFilter)))) {
|
|
60
|
+
index_js_1.OINOLog.debug("Unsupported OINODbSqlFilter format!", { leftSide: leftSide, operation: operation, rightSide: rightSide });
|
|
61
|
+
throw new Error(index_js_1.OINO_ERROR_PREFIX + ": Unsupported OINODbSqlFilter format!");
|
|
62
|
+
}
|
|
63
|
+
this._leftSide = leftSide;
|
|
64
|
+
this._operator = operation;
|
|
65
|
+
this._rightSide = rightSide;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Constructor for `OINOFilter` as parser of http parameter.
|
|
69
|
+
*
|
|
70
|
+
* @param filterString string representation of filter from HTTP-request
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
static parse(filterString) {
|
|
74
|
+
// OINOLog_debug("OINOFilter.constructor", {filterString:filterString})
|
|
75
|
+
if (!filterString) {
|
|
76
|
+
return new OINODbSqlFilter("", null, "");
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
let match = OINODbSqlFilter._filterComparisonRegex.exec(filterString);
|
|
80
|
+
if (match != null) {
|
|
81
|
+
return new OINODbSqlFilter(match[1], match[2].toLowerCase(), match[3]);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
let match = OINODbSqlFilter._negationRegex.exec(filterString);
|
|
85
|
+
if (match != null) {
|
|
86
|
+
return new OINODbSqlFilter("", OINODbSqlBooleanOperation.not, OINODbSqlFilter.parse(match[3]));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
let boolean_parts = index_js_1.OINOStr.splitByBrackets(filterString, true, false, '(', ')');
|
|
90
|
+
// OINOLog_debug("OINOFilter.constructor", {boolean_parts:boolean_parts})
|
|
91
|
+
if (boolean_parts.length == 3 && (boolean_parts[1].match(OINODbSqlFilter._booleanOperationRegex))) {
|
|
92
|
+
return new OINODbSqlFilter(OINODbSqlFilter.parse(boolean_parts[0]), boolean_parts[1].trim().toLowerCase().substring(1), OINODbSqlFilter.parse(boolean_parts[2]));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw new Error(index_js_1.OINO_ERROR_PREFIX + ": Invalid filter '" + filterString + "'");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Construct a new `OINOFilter` as combination of (boolean and/or) of two filters.
|
|
103
|
+
*
|
|
104
|
+
* @param leftSide left side to combine
|
|
105
|
+
* @param operation boolean operation to use in combination
|
|
106
|
+
* @param rightSide right side to combine
|
|
107
|
+
*
|
|
108
|
+
*/
|
|
109
|
+
static combine(leftSide, operation, rightSide) {
|
|
110
|
+
if ((leftSide) && (!leftSide.isEmpty()) && (rightSide) && (!rightSide.isEmpty())) {
|
|
111
|
+
return new OINODbSqlFilter(leftSide, operation, rightSide);
|
|
112
|
+
}
|
|
113
|
+
else if ((leftSide) && (!leftSide.isEmpty())) {
|
|
114
|
+
return leftSide;
|
|
115
|
+
}
|
|
116
|
+
else if ((rightSide) && (!rightSide.isEmpty())) {
|
|
117
|
+
return rightSide;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
_operatorToSql() {
|
|
124
|
+
switch (this._operator) {
|
|
125
|
+
case "and": return " AND ";
|
|
126
|
+
case "or": return " OR ";
|
|
127
|
+
case "not": return "NOT ";
|
|
128
|
+
case "lt": return " < ";
|
|
129
|
+
case "le": return " <= ";
|
|
130
|
+
case "eq": return " = ";
|
|
131
|
+
case "ge": return " >= ";
|
|
132
|
+
case "gt": return " > ";
|
|
133
|
+
case "like": return " LIKE ";
|
|
134
|
+
}
|
|
135
|
+
return " ";
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Does filter contain any valid conditions.
|
|
139
|
+
*
|
|
140
|
+
*/
|
|
141
|
+
isEmpty() {
|
|
142
|
+
return (this._leftSide == "") && (this._operator == null) && (this._rightSide == "");
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Print filter as SQL condition based on the datamodel of the API.
|
|
146
|
+
*
|
|
147
|
+
* @param dataModel data model (and database) to use for formatting of values
|
|
148
|
+
*
|
|
149
|
+
*/
|
|
150
|
+
toSql(dataModel) {
|
|
151
|
+
// OINOLog.debug("OINOFilter.toSql", {_leftSide:this._leftSide, _operator:this._operator, _rightSide:this._rightSide})
|
|
152
|
+
if (this.isEmpty()) {
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
let result = "";
|
|
156
|
+
let field = null;
|
|
157
|
+
if (this._leftSide instanceof OINODbSqlFilter) {
|
|
158
|
+
result += this._leftSide.toSql(dataModel);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
result += dataModel.api.db.printSqlColumnname(this._leftSide);
|
|
162
|
+
field = dataModel.findFieldByName(this._leftSide);
|
|
163
|
+
}
|
|
164
|
+
result += this._operatorToSql();
|
|
165
|
+
if (this._rightSide instanceof OINODbSqlFilter) {
|
|
166
|
+
result += this._rightSide.toSql(dataModel);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
if (field) {
|
|
170
|
+
result += field.printCellAsSqlValue(this._rightSide);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
result += this._rightSide;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
index_js_1.OINOLog.debug("OINOFilter.toSql", { result: result });
|
|
177
|
+
return "(" + result + ")";
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.OINODbSqlFilter = OINODbSqlFilter;
|
|
181
|
+
/**
|
|
182
|
+
* Class for ordering select results on a number of columns.
|
|
183
|
+
*
|
|
184
|
+
*/
|
|
185
|
+
class OINODbSqlOrder {
|
|
186
|
+
static _orderColumnRegex = /^\s*(\w+)\s?(ASC|DESC)?\s*?$/i;
|
|
187
|
+
_columns;
|
|
188
|
+
_directions;
|
|
189
|
+
/**
|
|
190
|
+
* Constructor for `OINODbSqlOrder`.
|
|
191
|
+
*
|
|
192
|
+
* @param orderString string representation of filter from HTTP-request
|
|
193
|
+
*
|
|
194
|
+
*/
|
|
195
|
+
constructor(orderString) {
|
|
196
|
+
// OINOLog.debug("OINODbSqlOrder.constructor", {orderString:orderString})
|
|
197
|
+
this._columns = [];
|
|
198
|
+
this._directions = [];
|
|
199
|
+
const column_strings = orderString.split(',');
|
|
200
|
+
for (let i = 0; i < column_strings.length; i++) {
|
|
201
|
+
let match = OINODbSqlOrder._orderColumnRegex.exec(column_strings[i]);
|
|
202
|
+
if (match != null) {
|
|
203
|
+
this._columns.push(match[1]);
|
|
204
|
+
this._directions.push((match[2] || "ASC").toUpperCase());
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// OINOLog.debug("OINODbSqlOrder.constructor", {columns:this._columns, directions:this._directions})
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Does filter contain any valid conditions.
|
|
211
|
+
*
|
|
212
|
+
*/
|
|
213
|
+
isEmpty() {
|
|
214
|
+
return (this._columns.length == 0);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Print order as SQL condition based on the datamodel of the API.
|
|
218
|
+
*
|
|
219
|
+
* @param dataModel data model (and database) to use for formatting of values
|
|
220
|
+
*
|
|
221
|
+
*/
|
|
222
|
+
toSql(dataModel) {
|
|
223
|
+
if (this.isEmpty()) {
|
|
224
|
+
return "";
|
|
225
|
+
}
|
|
226
|
+
// OINOLog.debug("OINODbSqlOrder.toSql", {columns:this._columns, directions:this._directions})
|
|
227
|
+
let result = "";
|
|
228
|
+
for (let i = 0; i < this._columns.length; i++) {
|
|
229
|
+
const field = dataModel.findFieldByName(this._columns[i]);
|
|
230
|
+
if (field) {
|
|
231
|
+
if (result) {
|
|
232
|
+
result += ",";
|
|
233
|
+
}
|
|
234
|
+
result += dataModel.api.db.printSqlColumnname(field.name) + " " + this._directions[i];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// OINOLog.debug("OINODbSqlOrder.toSql", {result:result})
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
exports.OINODbSqlOrder = OINODbSqlOrder;
|
|
242
|
+
/**
|
|
243
|
+
* Class for limiting the number of results.
|
|
244
|
+
*
|
|
245
|
+
*/
|
|
246
|
+
class OINODbSqlLimit {
|
|
247
|
+
static _orderColumnRegex = /^(\d+)?$/i;
|
|
248
|
+
_limit;
|
|
249
|
+
/**
|
|
250
|
+
* Constructor for `OINODbSqlLimit`.
|
|
251
|
+
*
|
|
252
|
+
* @param limitString string representation of filter from HTTP-request
|
|
253
|
+
*
|
|
254
|
+
*/
|
|
255
|
+
constructor(limitString) {
|
|
256
|
+
this._limit = 0;
|
|
257
|
+
this._limit = Number.parseInt(limitString);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Does filter contain any valid conditions.
|
|
261
|
+
*
|
|
262
|
+
*/
|
|
263
|
+
isEmpty() {
|
|
264
|
+
return (this._limit <= 0);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Print order as SQL condition based on the datamodel of the API.
|
|
268
|
+
*
|
|
269
|
+
* @param dataModel data model (and database) to use for formatting of values
|
|
270
|
+
*
|
|
271
|
+
*/
|
|
272
|
+
toSql(dataModel) {
|
|
273
|
+
if (this.isEmpty()) {
|
|
274
|
+
return "";
|
|
275
|
+
}
|
|
276
|
+
let result = this._limit.toString();
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.OINODbSqlLimit = OINODbSqlLimit;
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.OINODbSwagger = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Static class for Swagger utilities
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
class OINODbSwagger {
|
|
14
|
+
static _getSchemaApiMethodParamsQueryId() {
|
|
15
|
+
return {
|
|
16
|
+
"schema": {
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
"in": "path",
|
|
20
|
+
"name": "id",
|
|
21
|
+
"required": true
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static _getSchemaApiMethodParamsBody(tableName) {
|
|
25
|
+
return {
|
|
26
|
+
"schema": {
|
|
27
|
+
"$ref": "#/components/schemas/" + tableName
|
|
28
|
+
},
|
|
29
|
+
"in": "body",
|
|
30
|
+
"required": true
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
static _getSchemaApiMethodDescription(method, tableName, hasQueryIdParam) {
|
|
34
|
+
if (hasQueryIdParam) {
|
|
35
|
+
return method.toUpperCase() + " " + tableName + " object";
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return method.toUpperCase() + " " + tableName + " object array";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
static _getSchemaApiMethodOperationId(method, tableName, hasQueryIdParam) {
|
|
42
|
+
if (hasQueryIdParam) {
|
|
43
|
+
return method + tableName;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return method + tableName + "All";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
static _getSchemaOinoResponse() {
|
|
50
|
+
return {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"properties": {
|
|
53
|
+
"success": {
|
|
54
|
+
"type": "boolean"
|
|
55
|
+
},
|
|
56
|
+
"statusCode": {
|
|
57
|
+
"type": "number"
|
|
58
|
+
},
|
|
59
|
+
"statusMessage": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
},
|
|
62
|
+
"messages": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "string"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"required": [
|
|
70
|
+
"success",
|
|
71
|
+
"statusCode",
|
|
72
|
+
"statusMessage",
|
|
73
|
+
"messages"
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
static _getSchemaFieldType(field) {
|
|
78
|
+
let type_string;
|
|
79
|
+
if (field.type == "boolean") {
|
|
80
|
+
type_string = "boolean";
|
|
81
|
+
}
|
|
82
|
+
else if (field.type == "integer" || field.type == "number") {
|
|
83
|
+
type_string = "number";
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
type_string = "string";
|
|
87
|
+
}
|
|
88
|
+
if (!field.fieldParams.isNotNull) {
|
|
89
|
+
return {
|
|
90
|
+
"anyOf": [
|
|
91
|
+
{
|
|
92
|
+
"type": type_string
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"type": "null"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return { type: type_string };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
static _getSwaggerApiType(api) {
|
|
105
|
+
let result = {
|
|
106
|
+
type: "object",
|
|
107
|
+
properties: {},
|
|
108
|
+
required: []
|
|
109
|
+
};
|
|
110
|
+
let field;
|
|
111
|
+
for (field of api.datamodel.fields) {
|
|
112
|
+
result.properties[field.name] = this._getSchemaFieldType(field);
|
|
113
|
+
if (field.fieldParams.isPrimaryKey) {
|
|
114
|
+
result.required.push(field.name);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
static _getSchemaType(tableName, hasQueryIdParam, hasResultData) {
|
|
120
|
+
if (hasResultData && hasQueryIdParam) {
|
|
121
|
+
return { "$ref": "#/components/schemas/" + tableName };
|
|
122
|
+
}
|
|
123
|
+
else if (hasResultData) {
|
|
124
|
+
return { type: "array", items: { "$ref": "#/components/schemas/" + tableName } };
|
|
125
|
+
}
|
|
126
|
+
else if (hasQueryIdParam) {
|
|
127
|
+
return { "$ref": "#/components/schemas/OINOResponse" };
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
return { "$ref": "#/components/schemas/OINOResponse" };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
static _getSchemaApiMethodParams(tableName, hasQueryIdParam, hasResultData) {
|
|
134
|
+
if (hasResultData && hasQueryIdParam) {
|
|
135
|
+
return [this._getSchemaApiMethodParamsQueryId()];
|
|
136
|
+
}
|
|
137
|
+
else if (hasResultData) {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
else if (hasQueryIdParam) {
|
|
141
|
+
return [this._getSchemaApiMethodParamsQueryId(), this._getSchemaApiMethodParamsBody(tableName)];
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
return [this._getSchemaApiMethodParamsBody(tableName)];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
static _getSchemaApiMethod(method, tableName, hasQueryIdParam, hasBody, hasResultData) {
|
|
148
|
+
return {
|
|
149
|
+
responses: {
|
|
150
|
+
200: { description: this._getSchemaApiMethodDescription(method, tableName, hasQueryIdParam), content: { "application/json": { schema: this._getSchemaType(tableName, hasQueryIdParam, hasResultData) } } }
|
|
151
|
+
},
|
|
152
|
+
"operationId": this._getSchemaApiMethodOperationId(method, tableName, hasQueryIdParam),
|
|
153
|
+
"parameters": this._getSchemaApiMethodParams(tableName, hasQueryIdParam, hasResultData)
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
static _getSwaggerApiPath(tableName, hasQueryIdParam) {
|
|
157
|
+
if (hasQueryIdParam) {
|
|
158
|
+
return {
|
|
159
|
+
get: this._getSchemaApiMethod("get", tableName, hasQueryIdParam, false, true),
|
|
160
|
+
put: this._getSchemaApiMethod("put", tableName, hasQueryIdParam, true, false),
|
|
161
|
+
delete: this._getSchemaApiMethod("delete", tableName, hasQueryIdParam, false, false)
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
return {
|
|
166
|
+
get: this._getSchemaApiMethod("get", tableName, hasQueryIdParam, false, true),
|
|
167
|
+
post: this._getSchemaApiMethod("post", tableName, hasQueryIdParam, true, false)
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns swagger.json as object of the given API's.
|
|
173
|
+
*
|
|
174
|
+
* @param apis array of API's use for Swagger definition
|
|
175
|
+
*
|
|
176
|
+
*/
|
|
177
|
+
static getApiDefinition(apis) {
|
|
178
|
+
let result = {
|
|
179
|
+
"openapi": "3.1.0",
|
|
180
|
+
"info": {
|
|
181
|
+
"title": "",
|
|
182
|
+
"description": "",
|
|
183
|
+
"version": ""
|
|
184
|
+
},
|
|
185
|
+
"paths": {},
|
|
186
|
+
"components": {
|
|
187
|
+
"schemas": {
|
|
188
|
+
OINOResponse: this._getSchemaOinoResponse()
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
for (let i = 0; i < apis.length; i++) {
|
|
193
|
+
const table_name = apis[i].params.tableName;
|
|
194
|
+
result.paths["/" + table_name] = this._getSwaggerApiPath(table_name, false);
|
|
195
|
+
result.paths["/" + table_name + "/{id}"] = this._getSwaggerApiPath(table_name, true);
|
|
196
|
+
result.components.schemas[table_name] = this._getSwaggerApiType(apis[i]);
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.OINODbSwagger = OINODbSwagger;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OINODB_EMPTY_ROWS = exports.OINODB_EMPTY_ROW = exports.OINODbSwagger = exports.OINODbFactory = exports.OINODbConfig = exports.OINODbSqlBooleanOperation = exports.OINODbSqlLimit = exports.OINODbSqlComparison = exports.OINODbSqlOrder = exports.OINODbSqlFilter = exports.OINODbMemoryDataSet = exports.OINODbDataSet = exports.OINODb = exports.OINODatetimeDataField = exports.OINOBlobDataField = exports.OINOStringDataField = exports.OINONumberDataField = exports.OINOBooleanDataField = exports.OINODbDataField = exports.OINODbModelSet = exports.OINODbDataModel = exports.OINODbApi = exports.OINODbApiResult = exports.OINOResult = exports.OINOConsoleLog = exports.OINOLogLevel = exports.OINOLog = exports.OINOBenchmark = exports.OINOStr = exports.OINO_DEBUG_PREFIX = exports.OINO_INFO_PREFIX = exports.OINO_WARNING_PREFIX = exports.OINO_ERROR_PREFIX = exports.OINOContentType = void 0;
|
|
4
|
+
const types_1 = require("@oino-ts/types");
|
|
5
|
+
Object.defineProperty(exports, "OINOContentType", { enumerable: true, get: function () { return types_1.OINOContentType; } });
|
|
6
|
+
var types_2 = require("@oino-ts/types");
|
|
7
|
+
Object.defineProperty(exports, "OINO_ERROR_PREFIX", { enumerable: true, get: function () { return types_2.OINO_ERROR_PREFIX; } });
|
|
8
|
+
Object.defineProperty(exports, "OINO_WARNING_PREFIX", { enumerable: true, get: function () { return types_2.OINO_WARNING_PREFIX; } });
|
|
9
|
+
Object.defineProperty(exports, "OINO_INFO_PREFIX", { enumerable: true, get: function () { return types_2.OINO_INFO_PREFIX; } });
|
|
10
|
+
Object.defineProperty(exports, "OINO_DEBUG_PREFIX", { enumerable: true, get: function () { return types_2.OINO_DEBUG_PREFIX; } });
|
|
11
|
+
Object.defineProperty(exports, "OINOStr", { enumerable: true, get: function () { return types_2.OINOStr; } });
|
|
12
|
+
Object.defineProperty(exports, "OINOBenchmark", { enumerable: true, get: function () { return types_2.OINOBenchmark; } });
|
|
13
|
+
Object.defineProperty(exports, "OINOLog", { enumerable: true, get: function () { return types_2.OINOLog; } });
|
|
14
|
+
Object.defineProperty(exports, "OINOLogLevel", { enumerable: true, get: function () { return types_2.OINOLogLevel; } });
|
|
15
|
+
Object.defineProperty(exports, "OINOConsoleLog", { enumerable: true, get: function () { return types_2.OINOConsoleLog; } });
|
|
16
|
+
Object.defineProperty(exports, "OINOResult", { enumerable: true, get: function () { return types_2.OINOResult; } });
|
|
17
|
+
var OINODbApi_js_1 = require("./OINODbApi.js");
|
|
18
|
+
Object.defineProperty(exports, "OINODbApiResult", { enumerable: true, get: function () { return OINODbApi_js_1.OINODbApiResult; } });
|
|
19
|
+
Object.defineProperty(exports, "OINODbApi", { enumerable: true, get: function () { return OINODbApi_js_1.OINODbApi; } });
|
|
20
|
+
var OINODbDataModel_js_1 = require("./OINODbDataModel.js");
|
|
21
|
+
Object.defineProperty(exports, "OINODbDataModel", { enumerable: true, get: function () { return OINODbDataModel_js_1.OINODbDataModel; } });
|
|
22
|
+
var OINODbModelSet_js_1 = require("./OINODbModelSet.js");
|
|
23
|
+
Object.defineProperty(exports, "OINODbModelSet", { enumerable: true, get: function () { return OINODbModelSet_js_1.OINODbModelSet; } });
|
|
24
|
+
var OINODbDataField_js_1 = require("./OINODbDataField.js");
|
|
25
|
+
Object.defineProperty(exports, "OINODbDataField", { enumerable: true, get: function () { return OINODbDataField_js_1.OINODbDataField; } });
|
|
26
|
+
Object.defineProperty(exports, "OINOBooleanDataField", { enumerable: true, get: function () { return OINODbDataField_js_1.OINOBooleanDataField; } });
|
|
27
|
+
Object.defineProperty(exports, "OINONumberDataField", { enumerable: true, get: function () { return OINODbDataField_js_1.OINONumberDataField; } });
|
|
28
|
+
Object.defineProperty(exports, "OINOStringDataField", { enumerable: true, get: function () { return OINODbDataField_js_1.OINOStringDataField; } });
|
|
29
|
+
Object.defineProperty(exports, "OINOBlobDataField", { enumerable: true, get: function () { return OINODbDataField_js_1.OINOBlobDataField; } });
|
|
30
|
+
Object.defineProperty(exports, "OINODatetimeDataField", { enumerable: true, get: function () { return OINODbDataField_js_1.OINODatetimeDataField; } });
|
|
31
|
+
var OINODb_js_1 = require("./OINODb.js");
|
|
32
|
+
Object.defineProperty(exports, "OINODb", { enumerable: true, get: function () { return OINODb_js_1.OINODb; } });
|
|
33
|
+
var OINODbDataSet_js_1 = require("./OINODbDataSet.js");
|
|
34
|
+
Object.defineProperty(exports, "OINODbDataSet", { enumerable: true, get: function () { return OINODbDataSet_js_1.OINODbDataSet; } });
|
|
35
|
+
Object.defineProperty(exports, "OINODbMemoryDataSet", { enumerable: true, get: function () { return OINODbDataSet_js_1.OINODbMemoryDataSet; } });
|
|
36
|
+
var OINODbRequestParams_js_1 = require("./OINODbRequestParams.js");
|
|
37
|
+
Object.defineProperty(exports, "OINODbSqlFilter", { enumerable: true, get: function () { return OINODbRequestParams_js_1.OINODbSqlFilter; } });
|
|
38
|
+
Object.defineProperty(exports, "OINODbSqlOrder", { enumerable: true, get: function () { return OINODbRequestParams_js_1.OINODbSqlOrder; } });
|
|
39
|
+
Object.defineProperty(exports, "OINODbSqlComparison", { enumerable: true, get: function () { return OINODbRequestParams_js_1.OINODbSqlComparison; } });
|
|
40
|
+
Object.defineProperty(exports, "OINODbSqlLimit", { enumerable: true, get: function () { return OINODbRequestParams_js_1.OINODbSqlLimit; } });
|
|
41
|
+
Object.defineProperty(exports, "OINODbSqlBooleanOperation", { enumerable: true, get: function () { return OINODbRequestParams_js_1.OINODbSqlBooleanOperation; } });
|
|
42
|
+
var OINODbConfig_js_1 = require("./OINODbConfig.js");
|
|
43
|
+
Object.defineProperty(exports, "OINODbConfig", { enumerable: true, get: function () { return OINODbConfig_js_1.OINODbConfig; } });
|
|
44
|
+
var OINODbFactory_js_1 = require("./OINODbFactory.js");
|
|
45
|
+
Object.defineProperty(exports, "OINODbFactory", { enumerable: true, get: function () { return OINODbFactory_js_1.OINODbFactory; } });
|
|
46
|
+
var OINODbSwagger_js_1 = require("./OINODbSwagger.js");
|
|
47
|
+
Object.defineProperty(exports, "OINODbSwagger", { enumerable: true, get: function () { return OINODbSwagger_js_1.OINODbSwagger; } });
|
|
48
|
+
/** Empty row instance */
|
|
49
|
+
exports.OINODB_EMPTY_ROW = [];
|
|
50
|
+
/** Empty row array instance */
|
|
51
|
+
exports.OINODB_EMPTY_ROWS = [exports.OINODB_EMPTY_ROW];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Base class for database abstraction, implementing methods for connecting, making queries and parsing/formatting data
|
|
8
|
+
* between SQL and serialization formats.
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export class OINODb {
|
|
12
|
+
_params;
|
|
13
|
+
/** Name of the database */
|
|
14
|
+
name;
|
|
15
|
+
/**
|
|
16
|
+
* Constructor for `OINODb`.
|
|
17
|
+
* @param params database parameters
|
|
18
|
+
*/
|
|
19
|
+
constructor(params) {
|
|
20
|
+
this._params = params;
|
|
21
|
+
this.name = params.database;
|
|
22
|
+
}
|
|
23
|
+
}
|