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