pogi 3.0.0-beta → 3.0.0-beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/lib/bin/generateInterface.js +1 -1
  2. package/lib/connectionOptions.d.ts +10 -0
  3. package/lib/index.d.ts +1 -1
  4. package/lib/pgConverters.d.ts +9 -10
  5. package/lib/pgConverters.js +44 -39
  6. package/lib/pgConverters.js.map +1 -1
  7. package/lib/{src/pgConverters.test.d.ts → pgConverters.test.d.ts} +0 -0
  8. package/lib/{src/pgConverters.test.js → pgConverters.test.js} +0 -0
  9. package/lib/pgConverters.test.js.map +1 -0
  10. package/lib/pgDb.d.ts +18 -27
  11. package/lib/pgDb.js +59 -62
  12. package/lib/pgDb.js.map +1 -1
  13. package/lib/{src/pgDb.test.d.ts → pgDb.test.d.ts} +0 -0
  14. package/lib/{src/pgDb.test.js → pgDb.test.js} +0 -0
  15. package/lib/pgDb.test.js.map +1 -0
  16. package/lib/pgDbInterface.d.ts +53 -0
  17. package/lib/{src/pgDbInterface.js → pgDbInterface.js} +0 -0
  18. package/lib/pgDbInterface.js.map +1 -0
  19. package/lib/pgDbOperators.d.ts +3 -3
  20. package/lib/pgDbOperators.js +4 -7
  21. package/lib/pgDbOperators.js.map +1 -1
  22. package/lib/{src/pgDbOperators.test.d.ts → pgDbOperators.test.d.ts} +0 -0
  23. package/lib/{src/pgDbOperators.test.js → pgDbOperators.test.js} +0 -0
  24. package/lib/pgDbOperators.test.js.map +1 -0
  25. package/lib/pgSchema.d.ts +10 -9
  26. package/lib/pgSchema.js.map +1 -1
  27. package/lib/{src/pgSchemaInterface.d.ts → pgSchemaInterface.d.ts} +0 -0
  28. package/lib/{src/pgSchemaInterface.js → pgSchemaInterface.js} +0 -0
  29. package/lib/pgSchemaInterface.js.map +1 -0
  30. package/lib/pgTable.d.ts +15 -40
  31. package/lib/pgTable.js +54 -54
  32. package/lib/pgTable.js.map +1 -1
  33. package/lib/{src/pgTableInterface.d.ts → pgTableInterface.d.ts} +3 -3
  34. package/lib/{src/pgTableInterface.js → pgTableInterface.js} +0 -0
  35. package/lib/pgTableInterface.js.map +1 -0
  36. package/lib/pgUtils.d.ts +13 -5
  37. package/lib/pgUtils.js +116 -23
  38. package/lib/pgUtils.js.map +1 -1
  39. package/lib/queryAble.d.ts +16 -64
  40. package/lib/queryAble.js +43 -42
  41. package/lib/queryAble.js.map +1 -1
  42. package/lib/{src/queryAbleInterface.d.ts → queryAbleInterface.d.ts} +2 -6
  43. package/lib/{src/queryAbleInterface.js → queryAbleInterface.js} +0 -0
  44. package/lib/queryAbleInterface.js.map +1 -0
  45. package/lib/queryWhere.d.ts +2 -2
  46. package/lib/queryWhere.js +19 -23
  47. package/lib/queryWhere.js.map +1 -1
  48. package/package.json +2 -1
  49. package/src/connectionOptions.ts +9 -7
  50. package/src/index.ts +1 -1
  51. package/src/pgDb.ts +3 -3
  52. package/src/pgDbInterface.ts +2 -2
  53. package/src/pgTable.ts +6 -6
  54. package/src/pgTableInterface.ts +20 -20
  55. package/src/pgUtils.ts +16 -6
  56. package/src/queryAbleInterface.ts +2 -6
  57. package/tsconfig.json +3 -5
  58. package/lib/src/bin/generateInterface.d.ts +0 -1
  59. package/lib/src/bin/generateInterface.js +0 -53
  60. package/lib/src/bin/generateInterface.js.map +0 -1
  61. package/lib/src/connectionOptions.d.ts +0 -34
  62. package/lib/src/connectionOptions.js +0 -3
  63. package/lib/src/connectionOptions.js.map +0 -1
  64. package/lib/src/index.d.ts +0 -6
  65. package/lib/src/index.js +0 -12
  66. package/lib/src/index.js.map +0 -1
  67. package/lib/src/pgConverters.d.ts +0 -9
  68. package/lib/src/pgConverters.js +0 -71
  69. package/lib/src/pgConverters.js.map +0 -1
  70. package/lib/src/pgConverters.test.js.map +0 -1
  71. package/lib/src/pgDb.d.ts +0 -79
  72. package/lib/src/pgDb.js +0 -764
  73. package/lib/src/pgDb.js.map +0 -1
  74. package/lib/src/pgDb.test.js.map +0 -1
  75. package/lib/src/pgDbInterface.js.map +0 -1
  76. package/lib/src/pgDbLogger.d.ts +0 -5
  77. package/lib/src/pgDbLogger.js +0 -3
  78. package/lib/src/pgDbLogger.js.map +0 -1
  79. package/lib/src/pgDbOperators.d.ts +0 -113
  80. package/lib/src/pgDbOperators.js +0 -41
  81. package/lib/src/pgDbOperators.js.map +0 -1
  82. package/lib/src/pgDbOperators.test.js.map +0 -1
  83. package/lib/src/pgSchema.d.ts +0 -17
  84. package/lib/src/pgSchema.js +0 -16
  85. package/lib/src/pgSchema.js.map +0 -1
  86. package/lib/src/pgSchemaInterface.js.map +0 -1
  87. package/lib/src/pgTable.d.ts +0 -105
  88. package/lib/src/pgTable.js +0 -322
  89. package/lib/src/pgTable.js.map +0 -1
  90. package/lib/src/pgTableInterface.js.map +0 -1
  91. package/lib/src/pgUtils.d.ts +0 -41
  92. package/lib/src/pgUtils.js +0 -282
  93. package/lib/src/pgUtils.js.map +0 -1
  94. package/lib/src/queryAble.d.ts +0 -40
  95. package/lib/src/queryAble.js +0 -338
  96. package/lib/src/queryAble.js.map +0 -1
  97. package/lib/src/queryAbleInterface.js.map +0 -1
  98. package/lib/src/queryWhere.d.ts +0 -8
  99. package/lib/src/queryWhere.js +0 -245
  100. package/lib/src/queryWhere.js.map +0 -1
@@ -1,338 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryAble = void 0;
4
- const tslib_1 = require("tslib");
5
- const pgUtils_1 = require("./pgUtils");
6
- const util = require("util");
7
- const QueryStream = require("pg-query-stream");
8
- const through = require("through");
9
- let defaultLogger = {
10
- log: () => { },
11
- error: () => { }
12
- };
13
- class QueryAble {
14
- setLogger(logger) {
15
- this.logger = logger;
16
- }
17
- getLogger(useConsoleAsDefault = false) {
18
- return this.logger || this.schema && this.schema.logger || this.db.logger || (useConsoleAsDefault ? console : defaultLogger);
19
- }
20
- run(sql, params, options) {
21
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
22
- return this.query(sql, params, options);
23
- });
24
- }
25
- query(sql, params, options) {
26
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
27
- let connection = this.db.connection;
28
- let logger = (options && options.logger || this.getLogger(false));
29
- return this.internalQuery({ connection, sql, params, logger });
30
- });
31
- }
32
- internalQuery(options) {
33
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
34
- if (this.db.needToFixConnectionForListen()) {
35
- yield this.db.runRestartConnectionForListen();
36
- }
37
- let { connection, sql, params, logger } = options;
38
- logger = logger || this.getLogger(false);
39
- try {
40
- if (params && !Array.isArray(params)) {
41
- let p = pgUtils_1.pgUtils.processNamedParams(sql, params);
42
- sql = p.sql;
43
- params = p.params;
44
- }
45
- let query = (options === null || options === void 0 ? void 0 : options.rowMode) ? { text: sql, values: params, rowMode: 'array' } : { text: sql, values: params };
46
- let res;
47
- if (connection) {
48
- logger.log('reused connection', sql, util.inspect(params, false, null), connection.processID);
49
- res = yield connection.query(query);
50
- yield this.checkAndFixOids(connection, res.fields);
51
- }
52
- else {
53
- connection = yield this.db.pool.connect();
54
- logger.log('new connection', sql, util.inspect(params, false, null), connection.processID);
55
- connection.on('error', QueryAble.connectionErrorListener);
56
- res = yield connection.query(query);
57
- yield this.checkAndFixOids(connection, res.fields);
58
- connection.off('error', QueryAble.connectionErrorListener);
59
- connection.release();
60
- connection = null;
61
- }
62
- this.postProcessFields(res.rows, res.fields, logger);
63
- return (options === null || options === void 0 ? void 0 : options.rowMode) ? { columns: (res.fields || []).map(f => f.name), rows: res.rows || [] } : res.rows;
64
- }
65
- catch (e) {
66
- pgUtils_1.pgUtils.logError(logger, { error: e, sql, params, connection });
67
- if (connection) {
68
- try {
69
- connection.release();
70
- }
71
- catch (e) {
72
- logger.error('connection error', e.message);
73
- }
74
- }
75
- throw e;
76
- }
77
- });
78
- }
79
- queryAsRows(sql, params, options) {
80
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
81
- let connection = this.db.connection;
82
- let logger = (options && options.logger || this.getLogger(false));
83
- return this.internalQuery({ connection, sql, params, logger, rowMode: true });
84
- });
85
- }
86
- queryWithOnCursorCallback(sql, params, options, callback) {
87
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
88
- if (this.db.needToFixConnectionForListen()) {
89
- yield this.db.runRestartConnectionForListen();
90
- }
91
- let connection = this.db.connection;
92
- let logger = this.getLogger(true);
93
- let positionedParams;
94
- try {
95
- if (params && !Array.isArray(params)) {
96
- let p = pgUtils_1.pgUtils.processNamedParams(sql, params);
97
- sql = p.sql;
98
- params = p.params;
99
- }
100
- else {
101
- positionedParams = params;
102
- }
103
- let queryInternal = () => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
104
- this.getLogger(false).log(sql, util.inspect(positionedParams, false, null), connection.processID);
105
- let fieldsToFix;
106
- let isFirst = true;
107
- let query = new QueryStream(sql, positionedParams);
108
- let stream = connection.query(query);
109
- yield new Promise((resolve, reject) => {
110
- query.handleError = reject;
111
- stream.on('data', (res) => {
112
- try {
113
- let fields = stream._result && stream._result.fields || stream.cursor._result && stream.cursor._result.fields;
114
- if (isFirst) {
115
- if (this.hasUnknownOids(fields)) {
116
- fieldsToFix = fields;
117
- stream.destroy();
118
- return;
119
- }
120
- isFirst = false;
121
- }
122
- this.postProcessFields([res], fields, this.getLogger(false));
123
- if (callback(res)) {
124
- stream.destroy();
125
- }
126
- }
127
- catch (e) {
128
- reject(e);
129
- }
130
- });
131
- stream.on('close', resolve);
132
- stream.on('error', reject);
133
- });
134
- if (fieldsToFix) {
135
- yield this.checkAndFixOids(connection, fieldsToFix);
136
- query = new QueryStream(sql, positionedParams);
137
- stream = connection.query(query);
138
- yield new Promise((resolve, reject) => {
139
- query.handleError = reject;
140
- stream.on('data', (res) => {
141
- try {
142
- let fields = stream._result && stream._result.fields || stream.cursor._result && stream.cursor._result.fields;
143
- this.postProcessFields([res], fields, this.getLogger(false));
144
- if (callback(res)) {
145
- stream.destroy();
146
- }
147
- }
148
- catch (e) {
149
- reject(e);
150
- }
151
- });
152
- stream.on('close', resolve);
153
- stream.on('error', reject);
154
- });
155
- }
156
- });
157
- if (connection) {
158
- yield queryInternal();
159
- }
160
- else {
161
- connection = yield this.db.pool.connect();
162
- logger.log('new connection', sql, util.inspect(positionedParams, false, null), connection.processID);
163
- connection.on('error', QueryAble.connectionErrorListener);
164
- yield queryInternal();
165
- connection.off('error', QueryAble.connectionErrorListener);
166
- connection.release();
167
- }
168
- }
169
- catch (e) {
170
- pgUtils_1.pgUtils.logError(logger, { error: e, sql, params, connection });
171
- if (connection) {
172
- try {
173
- connection.release();
174
- }
175
- catch (e) {
176
- logger.error('connection error', e.message);
177
- }
178
- }
179
- throw e;
180
- }
181
- });
182
- }
183
- queryAsStream(sql, params, options) {
184
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
185
- if (this.db.needToFixConnectionForListen()) {
186
- yield this.db.runRestartConnectionForListen();
187
- }
188
- let connection = this.db.connection;
189
- let logger = (options && options.logger || this.getLogger(false));
190
- let pgStream;
191
- let queriable = this;
192
- let isFirst = true;
193
- let convertTypeFilter = through(function (data) {
194
- try {
195
- let fields = pgStream._result && pgStream._result.fields || pgStream.cursor._result && pgStream.cursor._result.fields;
196
- if (isFirst) {
197
- if (queriable.hasUnknownOids(fields)) {
198
- throw new Error('[337] Query returns fields with unknown oid.');
199
- }
200
- isFirst = false;
201
- }
202
- queriable.postProcessFields([data], fields, queriable.db.pgdbTypeParsers);
203
- this.emit('data', data);
204
- }
205
- catch (err) {
206
- this.emit('error', err);
207
- }
208
- });
209
- convertTypeFilter.on('error', (e) => {
210
- if (connection) {
211
- try {
212
- connection.release();
213
- }
214
- catch (e) {
215
- logger.error('connection error', e.message);
216
- }
217
- }
218
- connection = null;
219
- pgUtils_1.pgUtils.logError(logger, { error: e, sql, params, connection });
220
- });
221
- let positionedParams;
222
- try {
223
- if (params && !Array.isArray(params)) {
224
- let p = pgUtils_1.pgUtils.processNamedParams(sql, params);
225
- sql = p.sql;
226
- params = p.params;
227
- }
228
- else {
229
- positionedParams = params;
230
- }
231
- if (connection) {
232
- logger.log(sql, util.inspect(positionedParams, false, null), connection.processID);
233
- let query = new QueryStream(sql, positionedParams);
234
- query.handleError = (err) => {
235
- convertTypeFilter.emit('error', err);
236
- };
237
- pgStream = connection.query(query);
238
- return pgStream.pipe(convertTypeFilter);
239
- }
240
- else {
241
- connection = yield this.db.pool.connect();
242
- logger.log('new connection', sql, util.inspect(positionedParams, false, null), connection.processID);
243
- connection.on('error', QueryAble.connectionErrorListener);
244
- let query = new QueryStream(sql, positionedParams);
245
- query.handleError = (err, _connection) => {
246
- convertTypeFilter.emit('error', err);
247
- };
248
- pgStream = connection.query(query);
249
- pgStream.on('close', () => {
250
- if (connection) {
251
- connection.off('error', QueryAble.connectionErrorListener);
252
- connection.release();
253
- }
254
- connection = null;
255
- });
256
- pgStream.on('error', (e) => {
257
- pgUtils_1.pgUtils.logError(logger, { error: e, sql, params: positionedParams, connection });
258
- if (connection) {
259
- connection.off('error', QueryAble.connectionErrorListener);
260
- connection.release();
261
- }
262
- connection = null;
263
- });
264
- return pgStream.pipe(convertTypeFilter);
265
- }
266
- }
267
- catch (e) {
268
- pgUtils_1.pgUtils.logError(logger, { error: e, sql, params: positionedParams, connection });
269
- throw e;
270
- }
271
- });
272
- }
273
- queryOne(sql, params, options) {
274
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
275
- let res = yield this.query(sql, params, options);
276
- if (res.length > 1) {
277
- let logger = (options && options.logger || this.getLogger(false));
278
- let error = Error('More then one rows exists');
279
- pgUtils_1.pgUtils.logError(logger, { error, sql, params, connection: this.db.connection });
280
- throw error;
281
- }
282
- return res[0];
283
- });
284
- }
285
- queryFirst(sql, params, options) {
286
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
287
- let res = yield this.query(sql, params, options);
288
- return res[0];
289
- });
290
- }
291
- queryOneField(sql, params, options) {
292
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
293
- let res = yield this.query(sql, params, options);
294
- if (!res.length) {
295
- return null;
296
- }
297
- let fieldName = Object.keys(res[0])[0];
298
- if (res.length > 1) {
299
- let logger = (options && options.logger || this.getLogger(false));
300
- let error = Error('More then one field exists!');
301
- pgUtils_1.pgUtils.logError(logger, { error, sql, params, connection: this.db.connection });
302
- throw error;
303
- }
304
- return res.length == 1 ? res[0][fieldName] : null;
305
- });
306
- }
307
- queryOneColumn(sql, params, options) {
308
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
309
- let res = yield this.query(sql, params, options);
310
- if (!res.length) {
311
- return [];
312
- }
313
- let fieldName = Object.keys(res[0])[0];
314
- return res.map(r => r[fieldName]);
315
- });
316
- }
317
- postProcessFields(rows, fields, logger) {
318
- pgUtils_1.pgUtils.postProcessResult(rows, fields, this.db.pgdbTypeParsers);
319
- if (this.db.postProcessResult)
320
- this.db.postProcessResult(rows, fields, logger);
321
- }
322
- checkAndFixOids(connection, fields) {
323
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
324
- if (fields) {
325
- let oidList = fields.map(field => field.dataTypeID);
326
- return this.db.resetMissingParsers(connection, oidList);
327
- }
328
- });
329
- }
330
- hasUnknownOids(fields) {
331
- let oidList = fields.map(field => field.dataTypeID);
332
- let unknownOids = oidList.filter(oid => !this.db.knownOids[oid]);
333
- return !!unknownOids.length;
334
- }
335
- }
336
- exports.QueryAble = QueryAble;
337
- QueryAble.connectionErrorListener = () => { };
338
- //# sourceMappingURL=queryAble.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryAble.js","sourceRoot":"","sources":["../../src/queryAble.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryAbleInterface.js","sourceRoot":"","sources":["../../src/queryAbleInterface.ts"],"names":[],"mappings":";;AAoDA,IAAI,aAAa,GAAG;IAChB,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;CACnB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { FieldType } from "./pgDb";
2
- declare function generateWhere(conditions: Record<string, any>, fieldTypes: {
3
- [index: string]: FieldType;
4
- }, tableName: string, placeholderOffset?: number, skipUndefined?: boolean): {
5
- where: string;
6
- params: Array<any>;
7
- };
8
- export default generateWhere;
@@ -1,245 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pgDbOperators_1 = require("./pgDbOperators");
4
- const pgDb_1 = require("./pgDb");
5
- const _ = require("lodash");
6
- const util = require("util");
7
- const pgUtils_1 = require("./pgUtils");
8
- function generateWhere(conditions, fieldTypes, tableName, placeholderOffset = 0, skipUndefined) {
9
- let result = generate({
10
- params: [],
11
- predicates: [],
12
- offset: placeholderOffset,
13
- }, conditions, fieldTypes, tableName, skipUndefined);
14
- return {
15
- where: result.predicates.length > 0 ? ' WHERE ' + result.predicates.join(' AND ') : '',
16
- params: result.params
17
- };
18
- }
19
- function generate(result, conditions, fieldTypes, tableName, skipUndefined) {
20
- _.each(conditions, (value, key) => {
21
- let fieldAndOperator = parseKey(key);
22
- if (value === undefined) {
23
- if (skipUndefined === true)
24
- return;
25
- throw new Error('Invalid conditions! Field value undefined: "' + fieldAndOperator.field + '". Either delete the field, set it to null or use the options.skipUndefined parameter.');
26
- }
27
- else if (fieldAndOperator.field === 'or' || fieldAndOperator.field === 'and') {
28
- result = handleOrAnd(result, fieldAndOperator, value, fieldTypes, tableName, skipUndefined);
29
- }
30
- else if (value === null) {
31
- result = handleNullValue(result, fieldAndOperator, value);
32
- }
33
- else if (Array.isArray(value)) {
34
- result = handleArrayValue(result, fieldAndOperator, value, fieldTypes);
35
- }
36
- else {
37
- result = handleSingleValue(result, fieldAndOperator, value, fieldTypes, tableName);
38
- }
39
- });
40
- return result;
41
- }
42
- function handleOrAnd(result, fieldAndOperator, value, fieldTypes, tableName, skipUndefined) {
43
- if (!Array.isArray(value)) {
44
- value = [value];
45
- }
46
- let groupResult = _.reduce(value, (acc, v) => {
47
- let subResult = generate({
48
- params: [],
49
- predicates: [],
50
- offset: result.params.length + acc.offset
51
- }, v, fieldTypes, tableName, skipUndefined);
52
- acc.predicates.push('(' + subResult.predicates.join(' AND ') + ')');
53
- acc.params = acc.params.concat(subResult.params);
54
- acc.offset += subResult.params.length;
55
- return acc;
56
- }, {
57
- params: [],
58
- predicates: [],
59
- offset: result.offset
60
- });
61
- result.params = result.params.concat(groupResult.params);
62
- if (groupResult.predicates.length) {
63
- if (fieldAndOperator.field === 'and') {
64
- result.predicates.push(util.format('(%s)', groupResult.predicates.join(' AND ')));
65
- }
66
- else {
67
- result.predicates.push(util.format('(%s)', groupResult.predicates.join(' OR ')));
68
- }
69
- }
70
- return result;
71
- }
72
- function handleNullValue(result, fieldAndOperator, value) {
73
- fieldAndOperator.operator = fieldAndOperator.operator === '=' ? 'IS' : 'IS NOT';
74
- result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, value));
75
- return result;
76
- }
77
- function handleArrayValue(result, fieldAndOperator, value, fieldTypes) {
78
- if (fieldAndOperator.mutator) {
79
- value = value.map((v) => fieldAndOperator.mutator(v));
80
- }
81
- let fieldType = fieldTypes[fieldAndOperator.field];
82
- let position = '$' + (result.params.length + 1 + result.offset);
83
- if (fieldType == pgDb_1.FieldType.JSON &&
84
- ['?|', '?&'].indexOf(fieldAndOperator.operator) != -1) {
85
- result.params.push(value);
86
- result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
87
- return result;
88
- }
89
- else if (fieldType == pgDb_1.FieldType.JSON &&
90
- ['@>', '<@', '&&'].indexOf(fieldAndOperator.operator) != -1) {
91
- result.params.push(JSON.stringify(value));
92
- result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
93
- return result;
94
- }
95
- else if ((!fieldType || fieldType == pgDb_1.FieldType.TIME) &&
96
- ['=', '<>', 'IN', 'NOT IN'].includes(fieldAndOperator.operator)) {
97
- if (fieldAndOperator.operator === '=' || fieldAndOperator.operator === 'IN') {
98
- fieldAndOperator.operator = '= ANY';
99
- }
100
- else {
101
- fieldAndOperator.operator = '<> ALL';
102
- }
103
- if (value.length === 0) {
104
- throw new Error('Invalid conditions! empty array for field:"' + fieldAndOperator.field + '" and operator:"' + fieldAndOperator.operator + '"');
105
- }
106
- result.params.push(value
107
- .map(v => (fieldType == pgDb_1.FieldType.TIME && !(v instanceof Date)) ? new Date(v) : v));
108
- result.predicates.push(util.format('%s %s (%s)', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
109
- return result;
110
- }
111
- else if (!fieldType && ['LIKE', 'ILIKE', 'SIMILAR TO', '~', '~*'].indexOf(fieldAndOperator.operator) != -1) {
112
- result.params.push(value);
113
- result.predicates.push(util.format('%s %s ANY(%s)', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
114
- return result;
115
- }
116
- else if (!fieldType && ['NOT LIKE', 'NOT ILIKE', 'NOT SIMILAR TO', '!~', '!~*'].indexOf(fieldAndOperator.operator) != -1) {
117
- result.params.push(value);
118
- result.predicates.push(util.format('%s %s ALL(%s)', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
119
- return result;
120
- }
121
- else if (fieldType == pgDb_1.FieldType.ARRAY &&
122
- ['=', '<>', '<', '>', '<=', '>=', '@>', '<@', '&&'].indexOf(fieldAndOperator.operator) != -1) {
123
- result.params.push(value);
124
- result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
125
- return result;
126
- }
127
- throw new Error('[325] Not implemented operator: "' + fieldAndOperator.operator + '" for field ' + fieldAndOperator.field + ' with type ' + fieldType);
128
- }
129
- function handleSingleValue(result, fieldAndOperator, value, fieldTypes, tableName) {
130
- if (fieldAndOperator.mutator) {
131
- value = fieldAndOperator.mutator(value);
132
- }
133
- let fieldType = fieldTypes[fieldAndOperator.field];
134
- if (fieldAndOperator.operator === '@@') {
135
- if (typeof value == 'object') {
136
- if (!(value.lang || value.language) || !(value.query || value.plainquery)) {
137
- throw new Error('[499] only "lang"/"language" and "query/plainquery" properties are supported!');
138
- }
139
- if (fieldType == pgDb_1.FieldType.TSVECTOR) {
140
- result.params.push(value.lang || value.language);
141
- result.params.push(value.query || value.plainquery);
142
- let template = value.query ? "%s %s to_tsquery($%s, $%s)" : "%s %s plainto_tsquery($%s, $%s)";
143
- result.predicates.push(util.format(template, fieldAndOperator.quotedField, fieldAndOperator.operator, result.params.length - 1 + result.offset, result.params.length + result.offset));
144
- }
145
- else {
146
- result.params.push(value.lang || value.language);
147
- result.params.push(value.lang || value.language);
148
- result.params.push(value.query || value.plainquery);
149
- let template = value.query ? "to_tsvector($%s, %s) %s to_tsquery($%s, $%s)" : "to_tsvector($%s, %s) %s plainto_tsquery($%s, $%s)";
150
- result.predicates.push(util.format(template, result.params.length - 2 + result.offset, fieldAndOperator.quotedField, fieldAndOperator.operator, result.params.length - 1 + result.offset, result.params.length + result.offset));
151
- }
152
- }
153
- else {
154
- result.params.push(value);
155
- let template = fieldType == pgDb_1.FieldType.TSVECTOR ? "%s %s plainto_tsquery($%s)" : "to_tsvector(%s) %s plainto_tsquery($%s)";
156
- result.predicates.push(util.format(template, fieldAndOperator.quotedField, fieldAndOperator.operator, result.params.length + result.offset));
157
- }
158
- }
159
- else if (fieldType == pgDb_1.FieldType.ARRAY) {
160
- if (['=', '<>'].indexOf(fieldAndOperator.operator) != -1) {
161
- if (fieldAndOperator.originalOp == '=*') {
162
- result.params.push([value]);
163
- value = util.format("$%s", result.params.length + result.offset);
164
- result.predicates.push(util.format('%s && %s', fieldAndOperator.quotedField, value));
165
- }
166
- else {
167
- result.params.push(value);
168
- value = util.format("$%s", result.params.length + result.offset);
169
- result.predicates.push(util.format('%s %s ANY(%s)', value, fieldAndOperator.operator, fieldAndOperator.quotedField));
170
- }
171
- }
172
- else if (['LIKE', 'ILIKE', 'NOT LIKE', 'NOT ILIKE', 'SIMILAR TO', 'NOT SIMILAR TO'].indexOf(fieldAndOperator.operator) != -1) {
173
- result.params.push(value);
174
- value = util.format("$%s", result.params.length + result.offset);
175
- let q = 'EXISTS (SELECT * FROM (SELECT UNNEST(' + tableName + '.%s) _el) _arr WHERE _arr._el %s %s)';
176
- result.predicates.push(util.format(q, fieldAndOperator.quotedField, fieldAndOperator.operator, value));
177
- }
178
- else {
179
- throw new Error('[326] Not implemented operator: "' + fieldAndOperator.operator + '" for type ' + fieldType);
180
- }
181
- }
182
- else {
183
- result.params.push((fieldType == pgDb_1.FieldType.TIME && !(value instanceof Date)) ? new Date(value) : value);
184
- value = util.format("$%s", result.params.length + result.offset);
185
- result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, value));
186
- }
187
- return result;
188
- }
189
- function strip(arr) {
190
- return arr.map((s) => s.trim()).filter(v => v != '');
191
- }
192
- function getOp(str) {
193
- for (let i = 0; i < str.length; i++) {
194
- if (pgDbOperators_1.default[str.substr(i)]) {
195
- return str.substr(i);
196
- }
197
- }
198
- return '';
199
- }
200
- function parseKey(key) {
201
- var _a;
202
- key = key.trim();
203
- let userOp = getOp(key);
204
- if (userOp) {
205
- key = key.substr(0, key.length - userOp.length);
206
- }
207
- let operation = pgDbOperators_1.default[userOp] || {};
208
- let jsonRegexp = /(->[^>]|->>|#>[^>]|#>>)/;
209
- let field;
210
- let quotedField;
211
- let quotedByUser = key.indexOf('"') > -1;
212
- if (quotedByUser) {
213
- quotedField = key;
214
- field = (_a = /[^"]*"([^"]*)".*/.exec(key)) === null || _a === void 0 ? void 0 : _a[1];
215
- if (!quotedField || !field) {
216
- throw new Error('Invalid field:' + key);
217
- }
218
- }
219
- else {
220
- let parts = strip(key.split(jsonRegexp));
221
- field = parts.shift();
222
- if (!field) {
223
- throw new Error('Invalid field:' + key);
224
- }
225
- quotedField = pgUtils_1.pgUtils.quoteFieldName(field);
226
- if (parts.length > 1) {
227
- let jsonOp = parts.shift();
228
- let jsonKey = parts.shift();
229
- jsonKey = pgUtils_1.pgUtils.quoteFieldNameJsonbOrPosition(jsonKey);
230
- quotedField = util.format('%s%s%s', quotedField, jsonOp, jsonKey);
231
- }
232
- }
233
- if (operation.fieldMutator) {
234
- quotedField = operation.fieldMutator(field, quotedField);
235
- }
236
- return {
237
- field: field,
238
- quotedField: quotedField,
239
- operator: (operation.operator || '=').toUpperCase(),
240
- mutator: operation.mutator,
241
- originalOp: userOp
242
- };
243
- }
244
- exports.default = generateWhere;
245
- //# sourceMappingURL=queryWhere.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryWhere.js","sourceRoot":"","sources":["../../src/queryWhere.ts"],"names":[],"mappings":";;AAAA,mDAA4C;AAC5C,iCAAmC;AACnC,4BAA6B;AAC7B,6BAA8B;AAC9B,uCAAoC;AAiBpC,SAAS,aAAa,CAAC,UAA+B,EAAE,UAA0C,EAAE,SAAiB,EAAE,iBAAiB,GAAG,CAAC,EAAE,aAAuB;IACjK,IAAI,MAAM,GAAG,QAAQ,CAAC;QAClB,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,iBAAiB;KAC5B,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAErD,OAAO;QACH,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACtF,MAAM,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC;AACN,CAAC;AAGD,SAAS,QAAQ,CAAC,MAAc,EAAE,UAA+B,EAAE,UAA0C,EAAE,SAAiB,EAAE,aAAuB;IACrJ,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAE9B,IAAI,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,IAAI,aAAa,KAAK,IAAI;gBAAE,OAAO;YACnC,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAG,gBAAgB,CAAC,KAAK,GAAG,wFAAwF,CAAC,CAAC;SACvL;aACI,IAAI,gBAAgB,CAAC,KAAK,KAAK,IAAI,IAAI,gBAAgB,CAAC,KAAK,KAAK,KAAK,EAAE;YAC1E,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;SAC/F;aACI,IAAI,KAAK,KAAK,IAAI,EAAE;YACrB,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;SAC7D;aACI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC3B,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;SAC1E;aACI;YACD,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;SACtF;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,gBAAkC,EAAE,KAAU,EAAE,UAA0C,EAAE,SAAiB,EAAE,aAAuB;IACvK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACvB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;KACnB;IAED,IAAI,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAEzC,IAAI,SAAS,GAAG,QAAQ,CAAC;YACrB,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;SAC5C,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAG5C,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QACpE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjD,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAEtC,OAAO,GAAG,CAAC;IACf,CAAC,EAAU;QACP,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC,CAAC;IAIH,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;QAC/B,IAAI,gBAAgB,CAAC,KAAK,KAAK,KAAK,EAAE;YAClC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACrF;aAAM;YACH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACpF;KACJ;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,gBAAkC,EAAE,KAAU;IACnF,gBAAgB,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAChH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,gBAAkC,EAAE,KAAY,EAAE,UAA0C;IAClI,IAAI,gBAAgB,CAAC,OAAO,EAAE;QAC1B,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/D;IACD,IAAI,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEnD,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,SAAS,IAAI,gBAAS,CAAC,IAAI;QAC3B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnH,OAAO,MAAM,CAAC;KACjB;SACI,IAAI,SAAS,IAAI,gBAAS,CAAC,IAAI;QAChC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnH,OAAO,MAAM,CAAC;KACjB;SACI,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,IAAI,gBAAS,CAAC,IAAI,CAAC;QAChD,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;QACjE,IAAI,gBAAgB,CAAC,QAAQ,KAAK,GAAG,IAAI,gBAAgB,CAAC,QAAQ,KAAK,IAAI,EAAE;YACzE,gBAAgB,CAAC,QAAQ,GAAG,OAAO,CAAC;SACvC;aAAM;YACH,gBAAgB,CAAC,QAAQ,GAAG,QAAQ,CAAC;SACxC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,gBAAgB,CAAC,KAAK,GAAG,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;SAElJ;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,gBAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACrF,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrH,OAAO,MAAM,CAAC;KACjB;SACI,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QAExG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxH,OAAO,MAAM,CAAC;KACjB;SACI,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QAEtH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxH,OAAO,MAAM,CAAC;KACjB;SACI,IAAI,SAAS,IAAI,gBAAS,CAAC,KAAK;QACjC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QAC9F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnH,OAAO,MAAM,CAAC;KACjB;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,gBAAgB,CAAC,QAAQ,GAAG,cAAc,GAAG,gBAAgB,CAAC,KAAK,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;AAC3J,CAAC;AAGD,SAAS,iBAAiB,CAAC,MAAc,EAAE,gBAAkC,EAAE,KAAU,EAAE,UAA0C,EAAE,SAAiB;IACpJ,IAAI,gBAAgB,CAAC,OAAO,EAAE;QAC1B,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC3C;IACD,IAAI,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,gBAAgB,CAAC,QAAQ,KAAK,IAAI,EAAE;QAKpC,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YAC1B,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;gBACvE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;aACpG;YACD,IAAI,SAAS,IAAI,gBAAS,CAAC,QAAQ,EAAE;gBAEjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;gBACpD,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,iCAAiC,CAAC;gBAC9F,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EACvC,gBAAgB,CAAC,WAAW,EAC5B,gBAAgB,CAAC,QAAQ,EACzB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EACxC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CACvC,CAAC,CAAC;aACN;iBAAM;gBACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;gBACpD,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,mDAAmD,CAAC;gBAClI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EACvC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EACxC,gBAAgB,CAAC,WAAW,EAC5B,gBAAgB,CAAC,QAAQ,EACzB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EACxC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CACvC,CAAC,CAAC;aACN;SACJ;aAAM;YACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,QAAQ,GAAG,SAAS,IAAI,gBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,yCAAyC,CAAC;YAC1H,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SAChJ;KACJ;SACI,IAAI,SAAS,IAAI,gBAAS,CAAC,KAAK,EAAE;QACnC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;YACtD,IAAI,gBAAgB,CAAC,UAAU,IAAI,IAAI,EAAE;gBACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5B,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;aACxF;iBAAM;gBACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;aACxH;SACJ;aACI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;YAC1H,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAEjE,IAAI,CAAC,GAAG,uCAAuC,GAAG,SAAS,GAAG,sCAAsC,CAAC;YACrG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;SAC1G;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,gBAAgB,CAAC,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;SAChH;KACJ;SAAM;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,gBAAS,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;KACnH;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAGD,SAAS,KAAK,CAAC,GAAa;IACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,KAAK,CAAC,GAAW;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,IAAI,uBAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACxB;KACJ;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAkBD,SAAS,QAAQ,CAAC,GAAW;;IACzB,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAEjB,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,EAAE;QACR,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;KAClD;IACD,IAAI,SAAS,GAAG,uBAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,UAAU,GAAG,yBAAyB,CAAC;IAE3C,IAAI,KAAyB,CAAC;IAC9B,IAAI,WAAmB,CAAC;IAExB,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,YAAY,EAAE;QACd,WAAW,GAAG,GAAG,CAAC;QAElB,KAAK,GAAG,MAAA,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,0CAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;SAC3C;KACJ;SAAM;QACH,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACzC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;SAC3C;QACD,WAAW,GAAG,iBAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC5B,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAE7B,OAAO,GAAG,iBAAO,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;YACzD,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SACrE;KACJ;IAGD,IAAI,SAAS,CAAC,YAAY,EAAE;QACxB,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;KAC5D;IAGD,OAAO;QACH,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,WAAW;QACxB,QAAQ,EAAE,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE;QACnD,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,UAAU,EAAE,MAAM;KACrB,CAAC;AACN,CAAC;AAGD,kBAAe,aAAa,CAAC"}