orange-orm 4.5.0-beta.0 → 4.5.0-beta.2
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 +6 -1
- package/docs/changelog.md +4 -0
- package/package.json +10 -6
- package/src/applyPatch.js +5 -2
- package/src/client/index.js +3 -2
- package/src/client/index.mjs +13552 -6381
- package/src/client/rollup.config.js +24 -4
- package/src/client/stringify.js +2 -9
- package/src/createDomain.js +7 -28
- package/src/d1/newDatabase.js +23 -37
- package/src/d1/newPool.js +6 -6
- package/src/d1/newTransaction.js +1 -0
- package/src/d1/pool/newGenericPool.js +2 -14
- package/src/emitEvent.js +6 -4
- package/src/emptyFilter.js +12 -12
- package/src/format.js +9 -0
- package/src/generic-pool.js +274 -313
- package/src/getManyDto/newQuery.js +5 -5
- package/src/getManyDto/query/newSingleQuery.js +5 -5
- package/src/getManyDto.js +73 -41
- package/src/hostExpress/cycle.ts +211 -0
- package/src/hostExpress/executePath.js +361 -357
- package/src/hostExpress.js +2 -7
- package/src/hostLocal.js +9 -9
- package/src/index.js +13 -17
- package/src/indexBrowser.js +39 -0
- package/src/mssql/newDatabase.js +19 -31
- package/src/mssql/newPool.js +2 -2
- package/src/mssql/newTransaction.js +4 -3
- package/src/mssql/pool/newGenericPool.js +1 -13
- package/src/mySql/deleteFromSql.js +5 -5
- package/src/mySql/insert.js +5 -5
- package/src/mySql/insertSql.js +2 -3
- package/src/mySql/lastInsertedSql.js +3 -4
- package/src/mySql/newDatabase.js +20 -34
- package/src/mySql/newPool.js +10 -10
- package/src/mySql/newTransaction.js +2 -2
- package/src/mySql/pool/newGenericPool.js +2 -15
- package/src/mySql/quote.js +1 -0
- package/src/newId.js +2 -1
- package/src/newImmutable.js +1 -2
- package/src/oracle/deleteFromSql.js +5 -5
- package/src/oracle/formatDateOut.js +1 -1
- package/src/oracle/insert.js +6 -6
- package/src/oracle/insertSql.js +6 -14
- package/src/oracle/lastInsertedSql.js +3 -3
- package/src/oracle/mergeSql.js +3 -6
- package/src/oracle/newDatabase.js +18 -33
- package/src/oracle/newInsertCommandCore.js +5 -5
- package/src/oracle/newPool.js +10 -10
- package/src/oracle/newTransaction.js +2 -1
- package/src/oracle/pool/newGenericPool.js +2 -14
- package/src/oracle/quote.js +1 -0
- package/src/oracle/wrapQuery.js +0 -3
- package/src/package.json +5 -0
- package/src/patchRow.js +2 -2
- package/src/patchTable.js +6 -5
- package/src/pg/deleteFromSql.js +5 -5
- package/src/pg/formatDateOut.js +1 -2
- package/src/pg/insert.js +3 -3
- package/src/pg/insertSql.js +2 -7
- package/src/pg/lastInsertedSql.js +1 -2
- package/src/pg/newDatabase.js +20 -37
- package/src/pg/newPool.js +10 -10
- package/src/pg/newTransaction.js +2 -1
- package/src/pg/pool/newPgPool.js +23 -16
- package/src/pg/pool/parseSearchPathParam.js +10 -0
- package/src/pg/quote.js +2 -0
- package/src/pg/schema.js +2 -2
- package/src/{mySql/pool/defaults.js → poolDefaults.js} +0 -2
- package/src/promisify.js +24 -0
- package/src/query.js +2 -2
- package/src/sap/deleteFromSql.js +3 -3
- package/src/sap/formatDateOut.js +1 -1
- package/src/sap/insert.js +5 -5
- package/src/sap/insertSql.js +4 -5
- package/src/sap/lastInsertedSql.js +3 -3
- package/src/sap/mergeSql.js +1 -2
- package/src/sap/newDatabase.js +23 -34
- package/src/sap/newPool.js +2 -2
- package/src/sap/newTransaction.js +2 -1
- package/src/sap/quote.js +1 -0
- package/src/sqlite/deleteFromSql.js +5 -5
- package/src/sqlite/insert.js +5 -5
- package/src/sqlite/insertSql.js +2 -2
- package/src/sqlite/lastInsertedSql.js +2 -2
- package/src/sqlite/newDatabase.js +16 -32
- package/src/sqlite/newPool.js +10 -10
- package/src/sqlite/newTransaction.js +2 -1
- package/src/sqlite/pool/newGenericPool.js +1 -13
- package/src/sqlite/quote.js +1 -0
- package/src/table/aggregate.js +1 -1
- package/src/table/begin.js +5 -5
- package/src/table/cascadeDelete.js +2 -2
- package/src/table/column/binary/newDecode.js +2 -2
- package/src/table/column/binary/newEncode.js +3 -4
- package/src/table/column/boolean/newDecode.js +1 -1
- package/src/table/column/boolean/newEncode.js +6 -6
- package/src/table/column/date/formatOut.js +3 -5
- package/src/table/column/date/newDecode.js +2 -2
- package/src/table/column/date/newEncode.js +8 -8
- package/src/table/column/date/tryParseISO.js +6 -8
- package/src/table/column/date.js +1 -1
- package/src/table/column/dateWithTimeZone/newEncode.js +3 -4
- package/src/table/column/dateWithTimeZone.js +1 -1
- package/src/table/column/encodeFilterArg.js +3 -3
- package/src/table/column/equal.js +3 -3
- package/src/table/column/extractAlias.js +0 -2
- package/src/table/column/greaterThan.js +3 -3
- package/src/table/column/greaterThanOrEqual.js +3 -3
- package/src/table/column/guid/newDecode.js +1 -1
- package/src/table/column/guid/newEncode.js +3 -3
- package/src/table/column/in.js +3 -3
- package/src/table/column/json/formatOut.js +3 -3
- package/src/table/column/json/newDecode.js +3 -3
- package/src/table/column/json/newEncode.js +6 -6
- package/src/table/column/json.js +2 -1
- package/src/table/column/lessThan.js +3 -3
- package/src/table/column/lessThanOrEqual.js +4 -4
- package/src/table/column/negotiateRawSqlFilter.js +1 -72
- package/src/table/column/newBoolean.js +2 -53
- package/src/table/column/newColumn.js +21 -21
- package/src/table/column/newDecodeCore.js +1 -1
- package/src/table/column/notEqual.js +3 -3
- package/src/table/column/numeric/newDecode.js +2 -2
- package/src/table/column/numeric/newEncode.js +3 -3
- package/src/table/column/string/contains.js +2 -1
- package/src/table/column/string/containsCore.js +5 -5
- package/src/table/column/string/endsWith.js +1 -1
- package/src/table/column/string/endsWithCore.js +4 -4
- package/src/table/column/string/iContains.js +2 -1
- package/src/table/column/string/iEndsWith.js +1 -1
- package/src/table/column/string/iEqual.js +3 -3
- package/src/table/column/string/iStartsWith.js +1 -1
- package/src/table/column/string/newEncode.js +3 -3
- package/src/table/column/string/startsWith.js +1 -1
- package/src/table/column/string/startsWithCore.js +4 -4
- package/src/table/column/string.js +14 -14
- package/src/table/column/utils.js +113 -0
- package/src/table/column.js +6 -2
- package/src/table/commands/beginCommand.js +2 -2
- package/src/table/commands/compressChanges.js +2 -2
- package/src/table/commands/delete/newSingleCommand.js +5 -5
- package/src/table/commands/delete/singleCommand/joinSql.js +12 -12
- package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +2 -2
- package/src/table/commands/delete/singleCommand/selectSql.js +6 -6
- package/src/table/commands/delete/singleCommand/subFilter.js +11 -11
- package/src/table/commands/delete/singleCommand/whereSql.js +2 -2
- package/src/table/commands/getChangeSet.js +2 -2
- package/src/table/commands/insert/getSqlTemplate.js +16 -16
- package/src/table/commands/lastCommandMatches.js +2 -2
- package/src/table/commands/newDeleteCommand.js +5 -10
- package/src/table/commands/newGetLastInsertedCommand.js +4 -4
- package/src/table/commands/newGetLastInsertedCommandCore.js +5 -5
- package/src/table/commands/newInsertCommand.js +5 -3
- package/src/table/commands/newInsertCommandCore.js +12 -12
- package/src/table/commands/newRow.js +4 -4
- package/src/table/commands/newUpdateCommand.js +4 -4
- package/src/table/commands/newUpdateCommandCore.js +4 -4
- package/src/table/commands/pushCommand.js +2 -2
- package/src/table/commit.js +13 -11
- package/src/table/count.js +8 -8
- package/src/table/delete.js +4 -4
- package/src/table/deleteSessionContext.js +2 -14
- package/src/table/executeQueries/executeChanges.js +3 -3
- package/src/table/executeQueries/executeQueriesCore.js +2 -2
- package/src/table/executeQueries/executeQuery.js +2 -2
- package/src/table/executeQueries/resolveExecuteQuery.js +3 -10
- package/src/table/executeQueries.js +4 -4
- package/src/table/getFromDbById.js +1 -1
- package/src/table/getMany.js +7 -7
- package/src/table/getManyDto.js +3 -4
- package/src/table/getSessionContext.js +4 -4
- package/src/table/getSessionSingleton.js +3 -2
- package/src/table/groupBy/newQuery.js +4 -4
- package/src/table/groupBy.js +9 -9
- package/src/table/insert.js +10 -13
- package/src/table/joinRelation/getRelatives.js +6 -6
- package/src/table/newCascadeDeleteStrategy.js +1 -7
- package/src/table/newGetRelated.js +3 -3
- package/src/table/newManyRelation.js +9 -9
- package/src/table/newOneRelation.js +9 -9
- package/src/table/newPrimaryKeyFilter.js +6 -6
- package/src/table/newQuery.js +5 -5
- package/src/table/newRelatedTable.js +6 -12
- package/src/table/newRowCache.js +17 -17
- package/src/table/newThrow.js +2 -2
- package/src/table/oneRelation/getRelatives.js +5 -5
- package/src/table/popChanges.js +3 -3
- package/src/table/promise.js +2 -8
- package/src/table/query/extractLimit.js +2 -2
- package/src/table/query/extractOffset.js +2 -2
- package/src/table/query/extractOrderBy.js +2 -2
- package/src/table/query/newParameterized.js +8 -11
- package/src/table/query/newSingleQuery.js +7 -7
- package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +2 -15
- package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +2 -25
- package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +4 -4
- package/src/table/query/singleQuery/columnSql/sharedJoinUtils.js +37 -0
- package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +2 -7
- package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +2 -2
- package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +2 -2
- package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +5 -5
- package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +6 -5
- package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +2 -8
- package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +2 -2
- package/src/table/query/singleQuery/negotiateExclusive.js +2 -2
- package/src/table/query/singleQuery/newColumnSql.js +3 -3
- package/src/table/query/singleQuery/newDiscriminatorSql.js +2 -2
- package/src/table/query/singleQuery/newJoinSql.js +7 -7
- package/src/table/query/singleQuery/newWhereSql.js +3 -3
- package/src/table/quote.js +4 -4
- package/src/table/relatedTable/aggregate.js +2 -8
- package/src/table/relatedTable/all.js +6 -12
- package/src/table/relatedTable/any.js +4 -11
- package/src/table/relatedTable/childColumn.js +12 -12
- package/src/table/relatedTable/columnAggregate.js +3 -3
- package/src/table/relatedTable/columnAggregateGroup.js +11 -11
- package/src/table/relatedTable/joinSql.js +5 -5
- package/src/table/relatedTable/joinSqlArray.js +3 -3
- package/src/table/relatedTable/none.js +4 -10
- package/src/table/relatedTable/relatedColumn.js +13 -13
- package/src/table/relatedTable/selectSql.js +2 -2
- package/src/table/relatedTable/subFilter.js +4 -4
- package/src/table/relatedTable/where.js +3 -9
- package/src/table/relatedTable/whereSql.js +2 -2
- package/src/table/relation/manyCache/synchronizeAdded.js +2 -2
- package/src/table/relation/manyCache/synchronizeChanged.js +3 -3
- package/src/table/relation/manyCache/synchronizeRemoved.js +2 -2
- package/src/table/relation/newForeignKeyFilter.js +2 -2
- package/src/table/relation/newManyCache.js +25 -17
- package/src/table/relation/newOneCache.js +6 -6
- package/src/table/releaseDbClient.js +4 -4
- package/src/table/resultToPromise.js +1 -3
- package/src/table/resultToRows/dbRowToRow.js +6 -13
- package/src/table/resultToRows/dbRowsToRows.js +2 -2
- package/src/table/resultToRows/decodeDbRow.js +2 -2
- package/src/table/resultToRows/delete/removeFromCache.js +4 -11
- package/src/table/resultToRows/delete.js +6 -6
- package/src/table/resultToRows/newDecodeDbRow.js +19 -25
- package/src/table/resultToRows/toDto/extractStrategy.js +1 -7
- package/src/table/resultToRows/toDto.js +3 -3
- package/src/table/resultToRows.js +3 -3
- package/src/table/rollback.js +21 -11
- package/src/table/rowArray/negotiateNextTick.js +1 -2
- package/src/table/setSessionSingleton.js +6 -3
- package/src/table/tryGetFirstFromDb.js +4 -4
- package/src/table/tryGetFromCacheById.js +3 -3
- package/src/table/tryGetFromDbById/extractStrategy.js +2 -2
- package/src/table/tryGetFromDbById.js +8 -6
- package/src/table/tryGetSessionContext.js +3 -13
- package/src/table/tryReleaseDbClient.js +2 -2
- package/src/table/updateField.js +4 -4
- package/src/table/where.js +2 -2
- package/src/table.js +56 -53
- package/src/tedious/deleteFromSql.js +5 -5
- package/src/tedious/formatDateOut.js +1 -1
- package/src/tedious/getManyDto/newQueryCore.js +5 -5
- package/src/tedious/getManyDto/query/newSingleQuery.js +5 -5
- package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +4 -5
- package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +4 -5
- package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +13 -14
- package/src/tedious/getManyDto/query/newSubQueries.js +9 -26
- package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +5 -6
- package/src/tedious/getManyDto.js +6 -6
- package/src/tedious/insert.js +3 -3
- package/src/tedious/insertSql.js +3 -3
- package/src/tedious/newDatabase.js +17 -30
- package/src/tedious/newPool.js +10 -10
- package/src/tedious/newTransaction.js +3 -4
- package/src/tedious/pool/newGenericPool.js +1 -13
- package/src/tedious/quote.js +1 -0
- package/src/validateDeleteConflict.js +4 -2
- package/src/createDomain/negotiateForwardProperty.js +0 -23
- package/src/d1/pool/defaults.js +0 -45
- package/src/mssql/pool/defaults.js +0 -45
- package/src/oracle/pool/defaults.js +0 -45
- package/src/pg/pool/defaults.js +0 -45
- package/src/sqlite/pool/defaults.js +0 -45
- package/src/table/createJSONReadStream.js +0 -7
- package/src/table/createJSONReadStreamDefault.js +0 -33
- package/src/table/createJSONReadStreamNative.js +0 -31
- package/src/table/createReadStream.js +0 -24
- package/src/table/createReadStreamCoreNative.js +0 -40
- package/src/table/createReadStreamDefault.js +0 -102
- package/src/table/createReadStreamNative.js +0 -17
- package/src/table/readStream/extractLimit.js +0 -7
- package/src/table/readStream/extractOrderBy.js +0 -59
- package/src/table/readStream/mySql/newQuery.js +0 -16
- package/src/table/readStream/mySql/query/newSingleQuery.js +0 -21
- package/src/table/readStream/mySql/query/newSubQueries/joinLegToQuery.js +0 -20
- package/src/table/readStream/mySql/query/newSubQueries/manyLegToQuery.js +0 -22
- package/src/table/readStream/mySql/query/newSubQueries/newQueryCore.js +0 -9
- package/src/table/readStream/mySql/query/newSubQueries/newSingleQueryCore.js +0 -18
- package/src/table/readStream/mySql/query/newSubQueries/oneLegToQuery.js +0 -22
- package/src/table/readStream/mySql/query/newSubQueries.js +0 -47
- package/src/table/readStream/mySql/query/singleQuery/newShallowColumnSql.js +0 -18
- package/src/table/readStream/newQuery.js +0 -32
- package/src/table/readStream/newQueryStream.js +0 -8
- package/src/table/readStream/pg/newQuery.js +0 -8
- package/src/table/readStream/pg/newQueryCore.js +0 -17
- package/src/table/readStream/pg/query/newSingleQuery.js +0 -19
- package/src/table/readStream/pg/query/newSubQueries/joinLegToQuery.js +0 -19
- package/src/table/readStream/pg/query/newSubQueries/manyLegToQuery.js +0 -22
- package/src/table/readStream/pg/query/newSubQueries/oneLegToQuery.js +0 -19
- package/src/table/readStream/pg/query/newSubQueries.js +0 -47
- package/src/table/readStream/pg/query/singleQuery/newShallowColumnSql.js +0 -20
- package/src/table/readStreamDefault/createBatchFilter.js +0 -39
- package/src/tedious/pool/defaults.js +0 -45
- package/src/useHook.js +0 -9
|
@@ -3,14 +3,6 @@ const emptyFilter = require('../emptyFilter');
|
|
|
3
3
|
const negotiateRawSqlFilter = require('../table/column/negotiateRawSqlFilter');
|
|
4
4
|
let getMeta = require('./getMeta');
|
|
5
5
|
let isSafe = Symbol();
|
|
6
|
-
let _ops = {
|
|
7
|
-
and: emptyFilter.and,
|
|
8
|
-
or: emptyFilter.or,
|
|
9
|
-
not: emptyFilter.not,
|
|
10
|
-
AND: emptyFilter.and,
|
|
11
|
-
OR: emptyFilter.or,
|
|
12
|
-
NOT: emptyFilter.not
|
|
13
|
-
};
|
|
14
6
|
|
|
15
7
|
let _allowedOps = {
|
|
16
8
|
and: true,
|
|
@@ -69,431 +61,443 @@ let _allowedOps = {
|
|
|
69
61
|
self: true,
|
|
70
62
|
};
|
|
71
63
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
64
|
+
function _executePath(context, ...rest) {
|
|
65
|
+
|
|
66
|
+
const _ops = {
|
|
67
|
+
and: emptyFilter.and.bind(null, context),
|
|
68
|
+
or: emptyFilter.or.bind(null, context),
|
|
69
|
+
not: emptyFilter.not.bind(null, context),
|
|
70
|
+
AND: emptyFilter.and.bind(null, context),
|
|
71
|
+
OR: emptyFilter.or.bind(null, context),
|
|
72
|
+
NOT: emptyFilter.not.bind(null, context),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
return executePath(...rest);
|
|
76
|
+
|
|
77
|
+
async function executePath({ table, JSONFilter, baseFilter, customFilters = {}, request, response, readonly, disableBulkDeletes, isHttp, client }) {
|
|
78
|
+
let allowedOps = { ..._allowedOps, insert: !readonly, ...extractRelations(getMeta(table)) };
|
|
79
|
+
let ops = { ..._ops, ...getCustomFilterPaths(customFilters), getManyDto, getMany, aggregate, count, delete: _delete, cascadeDelete, update, replace };
|
|
80
|
+
|
|
81
|
+
let res = await parseFilter(JSONFilter, table);
|
|
82
|
+
if (res === undefined)
|
|
83
|
+
return {};
|
|
84
|
+
else
|
|
85
|
+
return res;
|
|
86
|
+
|
|
87
|
+
function parseFilter(json, table) {
|
|
88
|
+
if (isFilter(json)) {
|
|
89
|
+
let subFilters = [];
|
|
90
|
+
|
|
91
|
+
let anyAllNone = tryGetAnyAllNone(json.path, table);
|
|
92
|
+
if (anyAllNone) {
|
|
93
|
+
if (isHttp)
|
|
94
|
+
validateArgs(json.args[0]);
|
|
95
|
+
const f = anyAllNone(context, x => parseFilter(json.args[0], x));
|
|
96
|
+
if(!('isSafe' in f))
|
|
97
|
+
f.isSafe = isSafe;
|
|
98
|
+
return f;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
for (let i = 0; i < json.args.length; i++) {
|
|
102
|
+
subFilters.push(parseFilter(json.args[i], nextTable(json.path, table)));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return executePath(json.path, subFilters);
|
|
93
106
|
}
|
|
94
|
-
else {
|
|
95
|
-
|
|
96
|
-
|
|
107
|
+
else if (Array.isArray(json)) {
|
|
108
|
+
const result = [];
|
|
109
|
+
for (let i = 0; i < json.length; i++) {
|
|
110
|
+
result.push(parseFilter(json[i], table));
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
return json;
|
|
115
|
+
|
|
116
|
+
function tryGetAnyAllNone(path, table) {
|
|
117
|
+
path = path.split('.');
|
|
118
|
+
for (let i = 0; i < path.length; i++) {
|
|
119
|
+
table = table[path[i]];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
let ops = new Set(['all', 'any', 'none', 'where', '_aggregate']);
|
|
123
|
+
// let ops = new Set(['all', 'any', 'none', 'where']);
|
|
124
|
+
let last = path.slice(-1)[0];
|
|
125
|
+
if (ops.has(last) || (table && (table._primaryColumns || (table.any && table.all))))
|
|
126
|
+
return table;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function executePath(path, args) {
|
|
130
|
+
if (path in ops) {
|
|
131
|
+
if (isHttp)
|
|
132
|
+
validateArgs(args);
|
|
133
|
+
let op = ops[path].apply(null, args);
|
|
134
|
+
if (op.then)
|
|
135
|
+
return op.then((o) => {
|
|
136
|
+
setSafe(o);
|
|
137
|
+
return o;
|
|
138
|
+
});
|
|
139
|
+
setSafe(op);
|
|
140
|
+
return op;
|
|
141
|
+
}
|
|
142
|
+
let pathArray = path.split('.');
|
|
143
|
+
let target = table;
|
|
144
|
+
let op = pathArray[pathArray.length - 1];
|
|
145
|
+
if (!allowedOps[op] && isHttp) {
|
|
146
|
+
|
|
147
|
+
let e = new Error('Disallowed operator ' + op);
|
|
148
|
+
// @ts-ignore
|
|
149
|
+
e.status = 403;
|
|
150
|
+
throw e;
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
for (let i = 0; i < pathArray.length; i++) {
|
|
154
|
+
target = target[pathArray[i]];
|
|
97
155
|
}
|
|
156
|
+
|
|
157
|
+
if (!target)
|
|
158
|
+
throw new Error(`Method '${path}' does not exist`);
|
|
159
|
+
let res = target.apply(null, [context, ...args]);
|
|
160
|
+
setSafe(res);
|
|
161
|
+
return res;
|
|
98
162
|
}
|
|
99
|
-
return executePath(json.path, subFilters);
|
|
100
163
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
164
|
+
|
|
165
|
+
async function invokeBaseFilter() {
|
|
166
|
+
if (typeof baseFilter === 'function') {
|
|
167
|
+
const res = await baseFilter.apply(null, [bindDb(client), request, response]);
|
|
168
|
+
if (!res)
|
|
169
|
+
return;
|
|
170
|
+
const JSONFilter = JSON.parse(JSON.stringify(res));
|
|
171
|
+
//@ts-ignore
|
|
172
|
+
return executePath({ table, JSONFilter, request, response });
|
|
105
173
|
}
|
|
106
|
-
|
|
174
|
+
else
|
|
175
|
+
return;
|
|
107
176
|
}
|
|
108
|
-
return json;
|
|
109
177
|
|
|
110
|
-
function
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
178
|
+
function getCustomFilterPaths(customFilters) {
|
|
179
|
+
return getLeafNames(customFilters);
|
|
180
|
+
|
|
181
|
+
function getLeafNames(obj, result = {}, current = 'customFilters.') {
|
|
182
|
+
for (let p in obj) {
|
|
183
|
+
if (typeof obj[p] === 'object' && obj[p] !== null)
|
|
184
|
+
getLeafNames(obj[p], result, current + p + '.');
|
|
185
|
+
else
|
|
186
|
+
result[current + p] = resolveFilter.bind(null, obj[p]);
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async function resolveFilter(fn, ...args) {
|
|
192
|
+
const context = { db: bindDb(client), request, response };
|
|
193
|
+
let res = fn.apply(null, [context, ...args]);
|
|
194
|
+
if (res.then)
|
|
195
|
+
res = await res;
|
|
196
|
+
const JSONFilter = JSON.parse(JSON.stringify(res));
|
|
197
|
+
//@ts-ignore
|
|
198
|
+
return executePath({ table, JSONFilter, request, response });
|
|
114
199
|
}
|
|
200
|
+
}
|
|
115
201
|
|
|
116
|
-
|
|
117
|
-
|
|
202
|
+
function nextTable(path, table) {
|
|
203
|
+
path = path.split('.');
|
|
204
|
+
let ops = new Set(['all', 'any', 'none']);
|
|
118
205
|
let last = path.slice(-1)[0];
|
|
119
|
-
if (ops.has(last)
|
|
206
|
+
if (ops.has(last)) {
|
|
207
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
208
|
+
table = table[path[i]];
|
|
209
|
+
}
|
|
120
210
|
return table;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
let lastObj = table;
|
|
214
|
+
for (let i = 0; i < path.length; i++) {
|
|
215
|
+
if (lastObj)
|
|
216
|
+
lastObj = lastObj[path[i]];
|
|
217
|
+
}
|
|
218
|
+
if (lastObj?._shallow)
|
|
219
|
+
return lastObj._shallow;
|
|
220
|
+
else return table;
|
|
221
|
+
}
|
|
121
222
|
}
|
|
122
223
|
|
|
123
|
-
function
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return op.then((o) => {
|
|
130
|
-
setSafe(o);
|
|
131
|
-
return o;
|
|
132
|
-
});
|
|
133
|
-
setSafe(op);
|
|
134
|
-
return op;
|
|
224
|
+
async function _delete(filter) {
|
|
225
|
+
if (readonly || disableBulkDeletes) {
|
|
226
|
+
let e = new Error('Bulk deletes are not allowed. Parameter "disableBulkDeletes" must be true.');
|
|
227
|
+
// @ts-ignore
|
|
228
|
+
e.status = 403;
|
|
229
|
+
throw e;
|
|
135
230
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
231
|
+
filter = negotiateFilter(filter);
|
|
232
|
+
const _baseFilter = await invokeBaseFilter();
|
|
233
|
+
if (_baseFilter)
|
|
234
|
+
filter = filter.and(context, _baseFilter);
|
|
235
|
+
let args = [context, filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
236
|
+
return table.delete.apply(null, args);
|
|
237
|
+
}
|
|
140
238
|
|
|
141
|
-
|
|
239
|
+
async function cascadeDelete(filter) {
|
|
240
|
+
if (readonly || disableBulkDeletes) {
|
|
241
|
+
const e = new Error('Bulk deletes are not allowed. Parameter "disableBulkDeletes" must be true.');
|
|
142
242
|
// @ts-ignore
|
|
143
243
|
e.status = 403;
|
|
144
244
|
throw e;
|
|
145
245
|
|
|
146
246
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
let res = target.apply(null, args);
|
|
154
|
-
setSafe(res);
|
|
155
|
-
return res;
|
|
247
|
+
filter = negotiateFilter(filter);
|
|
248
|
+
const _baseFilter = await invokeBaseFilter();
|
|
249
|
+
if (_baseFilter)
|
|
250
|
+
filter = filter.and(context, _baseFilter);
|
|
251
|
+
let args = [context, filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
252
|
+
return table.cascadeDelete.apply(null, args);
|
|
156
253
|
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
254
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return;
|
|
166
|
-
const JSONFilter = JSON.parse(JSON.stringify(res));
|
|
167
|
-
//@ts-ignore
|
|
168
|
-
return executePath({ table, JSONFilter, request, response });
|
|
255
|
+
function negotiateFilter(filter) {
|
|
256
|
+
if (filter)
|
|
257
|
+
return negotiateRawSqlFilter(context, filter, table, true);
|
|
258
|
+
else
|
|
259
|
+
return emptyFilter;
|
|
169
260
|
}
|
|
170
|
-
else
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function getCustomFilterPaths(customFilters) {
|
|
175
|
-
return getLeafNames(customFilters);
|
|
176
261
|
|
|
177
|
-
function
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
return
|
|
262
|
+
async function count(filter, strategy) {
|
|
263
|
+
validateStrategy(table, strategy);
|
|
264
|
+
filter = negotiateFilter(filter);
|
|
265
|
+
const _baseFilter = await invokeBaseFilter();
|
|
266
|
+
if (_baseFilter)
|
|
267
|
+
filter = filter.and(context, _baseFilter);
|
|
268
|
+
let args = [context, filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
269
|
+
return table.count.apply(null, args);
|
|
185
270
|
}
|
|
186
271
|
|
|
187
|
-
async function
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
272
|
+
async function getManyDto(filter, strategy) {
|
|
273
|
+
validateStrategy(table, strategy);
|
|
274
|
+
filter = negotiateFilter(filter);
|
|
275
|
+
const _baseFilter = await invokeBaseFilter();
|
|
276
|
+
if (_baseFilter)
|
|
277
|
+
filter = filter.and(context, _baseFilter);
|
|
278
|
+
let args = [context, filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
279
|
+
await negotiateWhereAndAggregate(strategy);
|
|
280
|
+
return table.getManyDto.apply(null, args);
|
|
195
281
|
}
|
|
196
|
-
}
|
|
197
282
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
283
|
+
async function replace(subject, strategy = { insertAndForget: true }) {
|
|
284
|
+
validateStrategy(table, strategy);
|
|
285
|
+
const refinedStrategy = objectToStrategy(subject, {}, table);
|
|
286
|
+
const JSONFilter2 = {
|
|
287
|
+
path: 'getManyDto',
|
|
288
|
+
args: [subject, refinedStrategy]
|
|
289
|
+
};
|
|
290
|
+
const originals = await executePath({ table, JSONFilter: JSONFilter2, baseFilter, customFilters, request, response, readonly, disableBulkDeletes, isHttp, client });
|
|
291
|
+
const meta = getMeta(table);
|
|
292
|
+
const patch = createPatch(originals, Array.isArray(subject) ? subject : [subject], meta);
|
|
293
|
+
const { changed } = await table.patch(context, patch, { strategy });
|
|
294
|
+
if (Array.isArray(subject))
|
|
295
|
+
return changed;
|
|
296
|
+
else
|
|
297
|
+
return changed[0];
|
|
207
298
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
299
|
+
|
|
300
|
+
async function update(subject, whereStrategy, strategy = { insertAndForget: true }) {
|
|
301
|
+
validateStrategy(table, strategy);
|
|
302
|
+
const refinedWhereStrategy = objectToStrategy(subject, whereStrategy, table);
|
|
303
|
+
const JSONFilter2 = {
|
|
304
|
+
path: 'getManyDto',
|
|
305
|
+
args: [null, refinedWhereStrategy]
|
|
306
|
+
};
|
|
307
|
+
const rows = await executePath({ table, JSONFilter: JSONFilter2, baseFilter, customFilters, request, response, readonly, disableBulkDeletes, isHttp, client });
|
|
308
|
+
const originals = new Array(rows.length);
|
|
309
|
+
for (let i = 0; i < rows.length; i++) {
|
|
310
|
+
const row = rows[i];
|
|
311
|
+
originals[i] = { ...row };
|
|
312
|
+
for (let p in subject) {
|
|
313
|
+
row[p] = subject[p];
|
|
314
|
+
}
|
|
213
315
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
316
|
+
const meta = getMeta(table);
|
|
317
|
+
const patch = createPatch(originals, rows, meta);
|
|
318
|
+
const { changed } = await table.patch(context, patch, { strategy });
|
|
319
|
+
return changed;
|
|
217
320
|
}
|
|
218
|
-
}
|
|
219
321
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
322
|
+
function objectToStrategy(object, whereStrategy, table, strategy = {}) {
|
|
323
|
+
strategy = { ...whereStrategy, ...strategy };
|
|
324
|
+
if (Array.isArray(object)) {
|
|
325
|
+
for (let i = 0; i < object.length; i++) {
|
|
326
|
+
objectToStrategy(object[i], table, strategy);
|
|
327
|
+
}
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
for (let name in object) {
|
|
331
|
+
const relation = table[name]?._relation;
|
|
332
|
+
if (relation && !relation.columns) {//notJoin, that is one or many
|
|
333
|
+
strategy[name] = {};
|
|
334
|
+
objectToStrategy(object[name], whereStrategy?.[name], table[name], strategy[name]);
|
|
335
|
+
}
|
|
336
|
+
else
|
|
337
|
+
strategy[name] = true;
|
|
338
|
+
}
|
|
339
|
+
return strategy;
|
|
226
340
|
}
|
|
227
|
-
filter = negotiateFilter(filter);
|
|
228
|
-
const _baseFilter = await invokeBaseFilter();
|
|
229
|
-
if (_baseFilter)
|
|
230
|
-
filter = filter.and(_baseFilter);
|
|
231
|
-
let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
232
|
-
return table.delete.apply(null, args);
|
|
233
|
-
}
|
|
234
341
|
|
|
235
|
-
async function cascadeDelete(filter) {
|
|
236
|
-
if (readonly || disableBulkDeletes) {
|
|
237
|
-
const e = new Error('Bulk deletes are not allowed. Parameter "disableBulkDeletes" must be true.');
|
|
238
|
-
// @ts-ignore
|
|
239
|
-
e.status = 403;
|
|
240
|
-
throw e;
|
|
241
342
|
|
|
343
|
+
async function aggregate(filter, strategy) {
|
|
344
|
+
validateStrategy(table, strategy);
|
|
345
|
+
filter = negotiateFilter(filter);
|
|
346
|
+
const _baseFilter = await invokeBaseFilter();
|
|
347
|
+
if (_baseFilter)
|
|
348
|
+
filter = filter.and(context, _baseFilter);
|
|
349
|
+
let args = [context, filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
350
|
+
await negotiateWhereAndAggregate(strategy);
|
|
351
|
+
return table.aggregate.apply(null, args);
|
|
242
352
|
}
|
|
243
|
-
filter = negotiateFilter(filter);
|
|
244
|
-
const _baseFilter = await invokeBaseFilter();
|
|
245
|
-
if (_baseFilter)
|
|
246
|
-
filter = filter.and(_baseFilter);
|
|
247
|
-
let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
248
|
-
return table.cascadeDelete.apply(null, args);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function negotiateFilter(filter) {
|
|
252
|
-
if (filter)
|
|
253
|
-
return negotiateRawSqlFilter(filter, table, true);
|
|
254
|
-
else
|
|
255
|
-
return emptyFilter;
|
|
256
|
-
}
|
|
257
353
|
|
|
258
|
-
async function count(filter, strategy) {
|
|
259
|
-
validateStrategy(table, strategy);
|
|
260
|
-
filter = negotiateFilter(filter);
|
|
261
|
-
const _baseFilter = await invokeBaseFilter();
|
|
262
|
-
if (_baseFilter)
|
|
263
|
-
filter = filter.and(_baseFilter);
|
|
264
|
-
let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
265
|
-
return table.count.apply(null, args);
|
|
266
|
-
}
|
|
267
354
|
|
|
268
|
-
async function getManyDto(filter, strategy) {
|
|
269
|
-
validateStrategy(table, strategy);
|
|
270
|
-
filter = negotiateFilter(filter);
|
|
271
|
-
const _baseFilter = await invokeBaseFilter();
|
|
272
|
-
if (_baseFilter)
|
|
273
|
-
filter = filter.and(_baseFilter);
|
|
274
|
-
let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
275
|
-
await negotiateWhereAndAggregate(strategy);
|
|
276
|
-
return table.getManyDto.apply(null, args);
|
|
277
|
-
}
|
|
278
355
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const JSONFilter2 = {
|
|
283
|
-
path: 'getManyDto',
|
|
284
|
-
args: [subject, refinedStrategy]
|
|
285
|
-
};
|
|
286
|
-
const originals = await executePath({ table, JSONFilter: JSONFilter2, baseFilter, customFilters, request, response, readonly, disableBulkDeletes, isHttp, client });
|
|
287
|
-
const meta = getMeta(table);
|
|
288
|
-
const patch = createPatch(originals, Array.isArray(subject) ? subject : [subject], meta);
|
|
289
|
-
const { changed } = await table.patch(patch, { strategy });
|
|
290
|
-
if (Array.isArray(subject))
|
|
291
|
-
return changed;
|
|
292
|
-
else
|
|
293
|
-
return changed[0];
|
|
294
|
-
}
|
|
356
|
+
async function negotiateWhereAndAggregate(strategy) {
|
|
357
|
+
if (typeof strategy !== 'object')
|
|
358
|
+
return;
|
|
295
359
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
};
|
|
303
|
-
const rows = await executePath({ table, JSONFilter: JSONFilter2, baseFilter, customFilters, request, response, readonly, disableBulkDeletes, isHttp, client });
|
|
304
|
-
const originals = new Array(rows.length);
|
|
305
|
-
for (let i = 0; i < rows.length; i++) {
|
|
306
|
-
const row = rows[i];
|
|
307
|
-
originals[i] = { ...row };
|
|
308
|
-
for (let p in subject) {
|
|
309
|
-
row[p] = subject[p];
|
|
360
|
+
for (let name in strategy) {
|
|
361
|
+
const target = strategy[name];
|
|
362
|
+
if (isFilter(target))
|
|
363
|
+
strategy[name] = await parseFilter(strategy[name], table);
|
|
364
|
+
else
|
|
365
|
+
await negotiateWhereAndAggregate(strategy[name]);
|
|
310
366
|
}
|
|
311
|
-
}
|
|
312
|
-
const meta = getMeta(table);
|
|
313
|
-
const patch = createPatch(originals, rows, meta);
|
|
314
|
-
const { changed } = await table.patch(patch, { strategy });
|
|
315
|
-
return changed;
|
|
316
|
-
}
|
|
317
367
|
|
|
318
|
-
function objectToStrategy(object, whereStrategy, table, strategy = {}) {
|
|
319
|
-
strategy = {...whereStrategy, ...strategy};
|
|
320
|
-
if (Array.isArray(object)) {
|
|
321
|
-
for (let i = 0; i < object.length; i++) {
|
|
322
|
-
objectToStrategy(object[i], table, strategy);
|
|
323
|
-
}
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
for (let name in object) {
|
|
327
|
-
const relation = table[name]?._relation;
|
|
328
|
-
if (relation && !relation.columns) {//notJoin, that is one or many
|
|
329
|
-
strategy[name] = {};
|
|
330
|
-
objectToStrategy(object[name], whereStrategy?.[name], table[name], strategy[name]);
|
|
331
|
-
}
|
|
332
|
-
else
|
|
333
|
-
strategy[name] = true;
|
|
334
368
|
}
|
|
335
|
-
return strategy;
|
|
336
|
-
}
|
|
337
369
|
|
|
370
|
+
async function getMany(filter, strategy) {
|
|
371
|
+
validateStrategy(table, strategy);
|
|
372
|
+
filter = negotiateFilter(filter);
|
|
373
|
+
const _baseFilter = await invokeBaseFilter();
|
|
374
|
+
if (_baseFilter)
|
|
375
|
+
filter = filter.and(context, _baseFilter);
|
|
376
|
+
let args = [context, filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
377
|
+
await negotiateWhereAndAggregate(strategy);
|
|
378
|
+
return table.getMany.apply(null, args);
|
|
379
|
+
}
|
|
338
380
|
|
|
339
|
-
async function aggregate(filter, strategy) {
|
|
340
|
-
validateStrategy(table, strategy);
|
|
341
|
-
filter = negotiateFilter(filter);
|
|
342
|
-
const _baseFilter = await invokeBaseFilter();
|
|
343
|
-
if (_baseFilter)
|
|
344
|
-
filter = filter.and(_baseFilter);
|
|
345
|
-
let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
346
|
-
await negotiateWhereAndAggregate(strategy);
|
|
347
|
-
return table.aggregate.apply(null, args);
|
|
348
381
|
}
|
|
349
382
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
async function negotiateWhereAndAggregate(strategy) {
|
|
353
|
-
if (typeof strategy !== 'object')
|
|
383
|
+
function validateStrategy(table, strategy) {
|
|
384
|
+
if (!strategy || !table)
|
|
354
385
|
return;
|
|
355
386
|
|
|
356
|
-
for (let
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
await negotiateWhereAndAggregate(strategy[name]);
|
|
387
|
+
for (let p in strategy) {
|
|
388
|
+
validateOffset(strategy);
|
|
389
|
+
validateLimit(strategy);
|
|
390
|
+
validateOrderBy(table, strategy);
|
|
391
|
+
validateStrategy(table[p], strategy[p]);
|
|
362
392
|
}
|
|
363
|
-
|
|
364
393
|
}
|
|
365
394
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
const
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
|
|
373
|
-
await negotiateWhereAndAggregate(strategy);
|
|
374
|
-
return table.getMany.apply(null, args);
|
|
395
|
+
function validateLimit(strategy) {
|
|
396
|
+
if (!('limit' in strategy) || Number.isInteger(strategy.limit))
|
|
397
|
+
return;
|
|
398
|
+
const e = new Error('Invalid limit: ' + strategy.limit);
|
|
399
|
+
// @ts-ignore
|
|
400
|
+
e.status = 400;
|
|
375
401
|
}
|
|
376
402
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
validateOffset(strategy);
|
|
385
|
-
validateLimit(strategy);
|
|
386
|
-
validateOrderBy(table, strategy);
|
|
387
|
-
validateStrategy(table[p], strategy[p]);
|
|
403
|
+
function validateOffset(strategy) {
|
|
404
|
+
if (!('offset' in strategy) || Number.isInteger(strategy.offset))
|
|
405
|
+
return;
|
|
406
|
+
const e = new Error('Invalid offset: ' + strategy.offset);
|
|
407
|
+
// @ts-ignore
|
|
408
|
+
e.status = 400;
|
|
409
|
+
throw e;
|
|
388
410
|
}
|
|
389
|
-
}
|
|
390
411
|
|
|
391
|
-
function
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
function
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
412
|
+
function validateOrderBy(table, strategy) {
|
|
413
|
+
if (!('orderBy' in strategy) || !table)
|
|
414
|
+
return;
|
|
415
|
+
let orderBy = strategy.orderBy;
|
|
416
|
+
if (!Array.isArray(orderBy))
|
|
417
|
+
orderBy = [orderBy];
|
|
418
|
+
orderBy.reduce(validate, []);
|
|
419
|
+
|
|
420
|
+
function validate(_, element) {
|
|
421
|
+
let parts = element.split(' ').filter(x => {
|
|
422
|
+
x = x.toLowerCase();
|
|
423
|
+
return (!(x === '' || x === 'asc' || x === 'desc'));
|
|
424
|
+
});
|
|
425
|
+
for (let p of parts) {
|
|
426
|
+
let col = table[p];
|
|
427
|
+
if (!(col && col.equal)) {
|
|
428
|
+
const e = new Error('Unknown column: ' + p);
|
|
429
|
+
// @ts-ignore
|
|
430
|
+
e.status = 400;
|
|
431
|
+
throw e;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
407
436
|
|
|
408
|
-
function
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
let parts = element.split(' ').filter(x => {
|
|
418
|
-
x = x.toLowerCase();
|
|
419
|
-
return (!(x === '' || x === 'asc' || x === 'desc'));
|
|
420
|
-
});
|
|
421
|
-
for (let p of parts) {
|
|
422
|
-
let col = table[p];
|
|
423
|
-
if (!(col && col.equal)) {
|
|
424
|
-
const e = new Error('Unknown column: ' + p);
|
|
437
|
+
function validateArgs() {
|
|
438
|
+
for (let i = 0; i < arguments.length; i++) {
|
|
439
|
+
const filter = arguments[i];
|
|
440
|
+
if (!filter)
|
|
441
|
+
continue;
|
|
442
|
+
if (filter && filter.isSafe === isSafe)
|
|
443
|
+
continue;
|
|
444
|
+
if (filter.sql || typeof (filter) === 'string') {
|
|
445
|
+
const e = new Error('Raw filters are disallowed');
|
|
425
446
|
// @ts-ignore
|
|
426
|
-
e.status =
|
|
447
|
+
e.status = 403;
|
|
427
448
|
throw e;
|
|
428
449
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}
|
|
450
|
+
if (Array.isArray(filter))
|
|
451
|
+
for (let i = 0; i < filter.length; i++) {
|
|
432
452
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
const filter = arguments[i];
|
|
436
|
-
if (!filter)
|
|
437
|
-
continue;
|
|
438
|
-
if (filter && filter.isSafe === isSafe)
|
|
439
|
-
continue;
|
|
440
|
-
if (filter.sql || typeof (filter) === 'string') {
|
|
441
|
-
const e = new Error('Raw filters are disallowed');
|
|
442
|
-
// @ts-ignore
|
|
443
|
-
e.status = 403;
|
|
444
|
-
throw e;
|
|
453
|
+
validateArgs(filter[i]);
|
|
454
|
+
}
|
|
445
455
|
}
|
|
446
|
-
if (Array.isArray(filter))
|
|
447
|
-
for (let i = 0; i < filter.length; i++) {
|
|
448
456
|
|
|
449
|
-
validateArgs(filter[i]);
|
|
450
|
-
}
|
|
451
457
|
}
|
|
452
458
|
|
|
453
|
-
|
|
459
|
+
function isFilter(json) {
|
|
460
|
+
return json instanceof Object && 'path' in json && 'args' in json;
|
|
461
|
+
}
|
|
454
462
|
|
|
455
|
-
function
|
|
456
|
-
|
|
457
|
-
|
|
463
|
+
function setSafe(o) {
|
|
464
|
+
if (o instanceof Object)
|
|
465
|
+
Object.defineProperty(o, 'isSafe', {
|
|
466
|
+
value: isSafe,
|
|
467
|
+
enumerable: false
|
|
458
468
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
Object.defineProperty(o, 'isSafe', {
|
|
462
|
-
value: isSafe,
|
|
463
|
-
enumerable: false
|
|
469
|
+
});
|
|
470
|
+
}
|
|
464
471
|
|
|
465
|
-
|
|
466
|
-
}
|
|
472
|
+
function extractRelations(obj) {
|
|
473
|
+
let flattened = {};
|
|
467
474
|
|
|
468
|
-
function
|
|
469
|
-
|
|
475
|
+
function helper(relations) {
|
|
476
|
+
Object.keys(relations).forEach(key => {
|
|
470
477
|
|
|
471
|
-
|
|
472
|
-
Object.keys(relations).forEach(key => {
|
|
478
|
+
flattened[key] = true;
|
|
473
479
|
|
|
474
|
-
|
|
480
|
+
if (typeof relations[key] === 'object' && Object.keys(relations[key]?.relations)?.length > 0) {
|
|
481
|
+
helper(relations[key].relations);
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
}
|
|
475
485
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
});
|
|
486
|
+
helper(obj.relations);
|
|
487
|
+
|
|
488
|
+
return flattened;
|
|
480
489
|
}
|
|
481
490
|
|
|
482
|
-
|
|
491
|
+
function bindDb(client) {
|
|
492
|
+
var domain = context;
|
|
493
|
+
let p = domain.run(() => true);
|
|
483
494
|
|
|
484
|
-
|
|
485
|
-
|
|
495
|
+
function run(fn) {
|
|
496
|
+
return p.then(domain.run.bind(domain, fn));
|
|
497
|
+
}
|
|
486
498
|
|
|
487
|
-
|
|
488
|
-
// @ts-ignore
|
|
489
|
-
var domain = process.domain;
|
|
490
|
-
let p = domain.run(() => true);
|
|
499
|
+
return client({ transaction: run });
|
|
491
500
|
|
|
492
|
-
function run(fn) {
|
|
493
|
-
return p.then(domain.run.bind(domain, fn));
|
|
494
501
|
}
|
|
495
|
-
|
|
496
|
-
return client({ transaction: run });
|
|
497
|
-
|
|
498
502
|
}
|
|
499
|
-
module.exports =
|
|
503
|
+
module.exports = _executePath;
|