orange-orm 3.10.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 (459) hide show
  1. package/.dockerignore +1 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.js +45 -0
  4. package/.gitattributes +3 -0
  5. package/CNAME +1 -0
  6. package/CONTRIBUTING.md +43 -0
  7. package/LICENSE +7 -0
  8. package/README.md +1969 -0
  9. package/SECURITY.md +12 -0
  10. package/bin/build.js +127 -0
  11. package/bin/compile.js +26 -0
  12. package/bin/rdb.js +4 -0
  13. package/docs/CODE_OF_CONDUCT.md +18 -0
  14. package/docs/changelog.md +461 -0
  15. package/docs/docs.md +2373 -0
  16. package/docs/orange.svg +32 -0
  17. package/docs/relations.png +0 -0
  18. package/package.json +139 -0
  19. package/src/applyPatch.js +105 -0
  20. package/src/client/axiosInterceptor.js +46 -0
  21. package/src/client/clientMap.js +72 -0
  22. package/src/client/createPatch.js +122 -0
  23. package/src/client/createProviders.js +121 -0
  24. package/src/client/index.js +997 -0
  25. package/src/client/index.mjs +6295 -0
  26. package/src/client/map.js +110 -0
  27. package/src/client/merge.js +9 -0
  28. package/src/client/netAdapter.js +133 -0
  29. package/src/client/rollup.config.js +12 -0
  30. package/src/client/self.js +4 -0
  31. package/src/client/stringify.js +22 -0
  32. package/src/client/toKeyPositionMap.js +30 -0
  33. package/src/clsTest.js +79 -0
  34. package/src/createDomain/negotiateForwardProperty.js +23 -0
  35. package/src/createDomain.js +31 -0
  36. package/src/dateToISOString.js +25 -0
  37. package/src/emitEvent.js +46 -0
  38. package/src/emptyFilter.js +35 -0
  39. package/src/flags.js +6 -0
  40. package/src/fromCompareObject.js +24 -0
  41. package/src/generic-pool.js +641 -0
  42. package/src/getManyDto/newQuery.js +18 -0
  43. package/src/getManyDto/query/newColumnSql.js +8 -0
  44. package/src/getManyDto/query/newSingleQuery.js +19 -0
  45. package/src/getManyDto/query/singleQuery/newJoinedColumnSql.js +25 -0
  46. package/src/getManyDto/query/singleQuery/newShallowColumnSql.js +25 -0
  47. package/src/getManyDto.js +255 -0
  48. package/src/getTSDefinition.js +510 -0
  49. package/src/hostExpress/executePath.js +433 -0
  50. package/src/hostExpress/getMeta.js +49 -0
  51. package/src/hostExpress.js +125 -0
  52. package/src/hostLocal.js +110 -0
  53. package/src/index.d.ts +324 -0
  54. package/src/index.js +116 -0
  55. package/src/jsconfig.json +8 -0
  56. package/src/lock/toIntKey.js +35 -0
  57. package/src/lock.js +26 -0
  58. package/src/map.d.ts +1729 -0
  59. package/src/mssql/encodeBuffer.js +7 -0
  60. package/src/mssql/newDatabase.js +129 -0
  61. package/src/mssql/newPool.js +19 -0
  62. package/src/mssql/newTransaction.js +69 -0
  63. package/src/mssql/pool/defaults.js +45 -0
  64. package/src/mssql/pool/end.js +13 -0
  65. package/src/mssql/pool/newGenericPool.js +62 -0
  66. package/src/mssql/wrapQuery.js +34 -0
  67. package/src/mySql/deleteFromSql.js +8 -0
  68. package/src/mySql/encodeBoolean.js +7 -0
  69. package/src/mySql/insert.js +21 -0
  70. package/src/mySql/insertSql.js +62 -0
  71. package/src/mySql/lastInsertedSql.js +11 -0
  72. package/src/mySql/limitAndOffset.js +18 -0
  73. package/src/mySql/newDatabase.js +127 -0
  74. package/src/mySql/newPool.js +19 -0
  75. package/src/mySql/newTransaction.js +54 -0
  76. package/src/mySql/pool/defaults.js +16 -0
  77. package/src/mySql/pool/end.js +13 -0
  78. package/src/mySql/pool/negotiatePoolOptions.js +12 -0
  79. package/src/mySql/pool/newGenericPool.js +67 -0
  80. package/src/mySql/selectForUpdateSql.js +3 -0
  81. package/src/mySql/wrapQuery.js +16 -0
  82. package/src/mySql/wrapQueryStream.js +9 -0
  83. package/src/newArray.js +3 -0
  84. package/src/newCollection.js +55 -0
  85. package/src/newId.js +1 -0
  86. package/src/newImmutable.js +22 -0
  87. package/src/newObject.js +5 -0
  88. package/src/oracle/deleteFromSql.js +8 -0
  89. package/src/oracle/encodeBoolean.js +7 -0
  90. package/src/oracle/encodeBuffer.js +7 -0
  91. package/src/oracle/encodeDate.js +7 -0
  92. package/src/oracle/formatDateIn.js +5 -0
  93. package/src/oracle/formatDateOut.js +5 -0
  94. package/src/oracle/insert.js +23 -0
  95. package/src/oracle/insertSql.js +73 -0
  96. package/src/oracle/lastInsertedSql.js +14 -0
  97. package/src/oracle/limitAndOffset.js +18 -0
  98. package/src/oracle/mergeSql.js +79 -0
  99. package/src/oracle/newDatabase.js +128 -0
  100. package/src/oracle/newInsertCommandCore.js +27 -0
  101. package/src/oracle/newPool.js +19 -0
  102. package/src/oracle/newTransaction.js +63 -0
  103. package/src/oracle/outputInsertedSql.js +5 -0
  104. package/src/oracle/pool/defaults.js +45 -0
  105. package/src/oracle/pool/end.js +13 -0
  106. package/src/oracle/pool/newGenericPool.js +64 -0
  107. package/src/oracle/replaceParamChar.js +14 -0
  108. package/src/oracle/selectForUpdateSql.js +3 -0
  109. package/src/oracle/wrapQuery.js +38 -0
  110. package/src/patchRow.js +13 -0
  111. package/src/patchTable.js +317 -0
  112. package/src/pg/deleteFromSql.js +8 -0
  113. package/src/pg/encodeBoolean.js +5 -0
  114. package/src/pg/encodeDate.js +7 -0
  115. package/src/pg/encodeJSON.js +15 -0
  116. package/src/pg/formatDateOut.js +5 -0
  117. package/src/pg/insert.js +14 -0
  118. package/src/pg/insertSql.js +70 -0
  119. package/src/pg/lastInsertedSql.js +11 -0
  120. package/src/pg/limitAndOffset.js +18 -0
  121. package/src/pg/newDatabase.js +153 -0
  122. package/src/pg/newPool.js +19 -0
  123. package/src/pg/newStreamableQuery.js +7 -0
  124. package/src/pg/newTransaction.js +58 -0
  125. package/src/pg/pool/defaults.js +45 -0
  126. package/src/pg/pool/end.js +13 -0
  127. package/src/pg/pool/newPgPool.js +82 -0
  128. package/src/pg/replaceParamChar.js +14 -0
  129. package/src/pg/schema.js +11 -0
  130. package/src/pg/selectForUpdateSql.js +3 -0
  131. package/src/pg/wrapQuery.js +33 -0
  132. package/src/pg/wrapQueryStream.js +20 -0
  133. package/src/pools.js +17 -0
  134. package/src/query/negotiateParameters.js +10 -0
  135. package/src/query/negotiateSql.js +14 -0
  136. package/src/query/wrapQuery.js +17 -0
  137. package/src/query.js +13 -0
  138. package/src/sap/deleteFromSql.js +8 -0
  139. package/src/sap/encodeBoolean.js +7 -0
  140. package/src/sap/encodeBuffer.js +7 -0
  141. package/src/sap/formatDateOut.js +5 -0
  142. package/src/sap/insert.js +21 -0
  143. package/src/sap/insertSql.js +64 -0
  144. package/src/sap/lastInsertedSql.js +12 -0
  145. package/src/sap/limitAndOffset.js +16 -0
  146. package/src/sap/mergeSql.js +73 -0
  147. package/src/sap/newDatabase.js +129 -0
  148. package/src/sap/newPool.js +19 -0
  149. package/src/sap/newTransaction.js +69 -0
  150. package/src/sap/pool/end.js +13 -0
  151. package/src/sap/selectForUpdateSql.js +3 -0
  152. package/src/sqlite/deleteFromSql.js +8 -0
  153. package/src/sqlite/encodeBoolean.js +7 -0
  154. package/src/sqlite/encodeBuffer.js +7 -0
  155. package/src/sqlite/insert.js +21 -0
  156. package/src/sqlite/insertSql.js +64 -0
  157. package/src/sqlite/lastInsertedSql.js +12 -0
  158. package/src/sqlite/limitAndOffset.js +18 -0
  159. package/src/sqlite/newDatabase.js +128 -0
  160. package/src/sqlite/newPool.js +19 -0
  161. package/src/sqlite/newTransaction.js +58 -0
  162. package/src/sqlite/pool/defaults.js +45 -0
  163. package/src/sqlite/pool/end.js +13 -0
  164. package/src/sqlite/pool/newGenericPool.js +59 -0
  165. package/src/sqlite/selectForUpdateSql.js +3 -0
  166. package/src/sqlite/wrapQuery.js +24 -0
  167. package/src/table/aggregate.js +9 -0
  168. package/src/table/begin.js +10 -0
  169. package/src/table/cascadeDelete.js +11 -0
  170. package/src/table/cloneStrategy.js +18 -0
  171. package/src/table/column/binary/newDecode.js +15 -0
  172. package/src/table/column/binary/newEncode.js +23 -0
  173. package/src/table/column/binary/purify.js +12 -0
  174. package/src/table/column/binary.js +12 -0
  175. package/src/table/column/boolean/newDecode.js +12 -0
  176. package/src/table/column/boolean/newEncode.js +36 -0
  177. package/src/table/column/boolean/purify.js +7 -0
  178. package/src/table/column/boolean.js +14 -0
  179. package/src/table/column/date/formatOut.js +11 -0
  180. package/src/table/column/date/newDecode.js +17 -0
  181. package/src/table/column/date/newEncode.js +47 -0
  182. package/src/table/column/date/purify.js +17 -0
  183. package/src/table/column/date/toISOString.js +25 -0
  184. package/src/table/column/date/tryParseISO.js +14 -0
  185. package/src/table/column/date.js +14 -0
  186. package/src/table/column/dateWithTimeZone/newEncode.js +41 -0
  187. package/src/table/column/dateWithTimeZone.js +14 -0
  188. package/src/table/column/encodeFilterArg.js +8 -0
  189. package/src/table/column/equal.js +15 -0
  190. package/src/table/column/extractAlias.js +7 -0
  191. package/src/table/column/greaterThan.js +12 -0
  192. package/src/table/column/greaterThanOrEqual.js +12 -0
  193. package/src/table/column/guid/newDecode.js +10 -0
  194. package/src/table/column/guid/newEncode.js +30 -0
  195. package/src/table/column/guid/purify.js +10 -0
  196. package/src/table/column/guid.js +12 -0
  197. package/src/table/column/in.js +24 -0
  198. package/src/table/column/json/formatOut.js +11 -0
  199. package/src/table/column/json/newDecode.js +21 -0
  200. package/src/table/column/json/newEncode.js +41 -0
  201. package/src/table/column/json/purify.js +7 -0
  202. package/src/table/column/json.js +22 -0
  203. package/src/table/column/lessThan.js +12 -0
  204. package/src/table/column/lessThanOrEqual.js +12 -0
  205. package/src/table/column/negotiateNextAndFilter.js +7 -0
  206. package/src/table/column/negotiateNextOrFilter.js +7 -0
  207. package/src/table/column/negotiateRawSqlFilter.js +74 -0
  208. package/src/table/column/newBoolean.js +54 -0
  209. package/src/table/column/newColumn.js +89 -0
  210. package/src/table/column/newDecodeCore.js +10 -0
  211. package/src/table/column/notEqual.js +15 -0
  212. package/src/table/column/numeric/negotiateDefault.js +5 -0
  213. package/src/table/column/numeric/newDecode.js +16 -0
  214. package/src/table/column/numeric/newEncode.js +25 -0
  215. package/src/table/column/numeric/purify.js +12 -0
  216. package/src/table/column/numeric.js +15 -0
  217. package/src/table/column/string/contains.js +3 -0
  218. package/src/table/column/string/containsCore.js +16 -0
  219. package/src/table/column/string/endsWith.js +3 -0
  220. package/src/table/column/string/endsWithCore.js +16 -0
  221. package/src/table/column/string/iContains.js +3 -0
  222. package/src/table/column/string/iEndsWith.js +3 -0
  223. package/src/table/column/string/iEqual.js +15 -0
  224. package/src/table/column/string/iStartsWith.js +3 -0
  225. package/src/table/column/string/newEncode.js +31 -0
  226. package/src/table/column/string/purify.js +7 -0
  227. package/src/table/column/string/startsWith.js +3 -0
  228. package/src/table/column/string/startsWithCore.js +16 -0
  229. package/src/table/column/string.js +55 -0
  230. package/src/table/column.js +154 -0
  231. package/src/table/commands/beginCommand.js +13 -0
  232. package/src/table/commands/commitCommand.js +9 -0
  233. package/src/table/commands/compressChanges.js +25 -0
  234. package/src/table/commands/delete/createAlias.js +6 -0
  235. package/src/table/commands/delete/newSingleCommand.js +17 -0
  236. package/src/table/commands/delete/singleCommand/joinSql.js +26 -0
  237. package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +19 -0
  238. package/src/table/commands/delete/singleCommand/selectSql.js +11 -0
  239. package/src/table/commands/delete/singleCommand/subFilter.js +19 -0
  240. package/src/table/commands/delete/singleCommand/whereSql.js +25 -0
  241. package/src/table/commands/getChangeSet.js +6 -0
  242. package/src/table/commands/insert/getSqlTemplate.js +68 -0
  243. package/src/table/commands/lastCommandMatches.js +11 -0
  244. package/src/table/commands/negotiateEndEdit.js +7 -0
  245. package/src/table/commands/newDeleteCommand.js +23 -0
  246. package/src/table/commands/newGetLastInsertedCommand.js +49 -0
  247. package/src/table/commands/newGetLastInsertedCommandCore.js +42 -0
  248. package/src/table/commands/newInsertAndForgetCommand.js +55 -0
  249. package/src/table/commands/newInsertCommand.js +56 -0
  250. package/src/table/commands/newInsertCommandCore.js +27 -0
  251. package/src/table/commands/newRow.js +51 -0
  252. package/src/table/commands/newUpdateCommand.js +62 -0
  253. package/src/table/commands/newUpdateCommandCore.js +45 -0
  254. package/src/table/commands/pushCommand.js +10 -0
  255. package/src/table/commands/rollbackCommand.js +13 -0
  256. package/src/table/commit.js +30 -0
  257. package/src/table/count.js +29 -0
  258. package/src/table/createJSONReadStream.js +7 -0
  259. package/src/table/createJSONReadStreamDefault.js +33 -0
  260. package/src/table/createJSONReadStreamNative.js +31 -0
  261. package/src/table/createReadStream.js +24 -0
  262. package/src/table/createReadStreamCoreNative.js +40 -0
  263. package/src/table/createReadStreamDefault.js +102 -0
  264. package/src/table/createReadStreamNative.js +17 -0
  265. package/src/table/delete.js +20 -0
  266. package/src/table/deleteSessionContext.js +17 -0
  267. package/src/table/encodeDbSpecific.js +10 -0
  268. package/src/table/executeQueries/executeChanges.js +35 -0
  269. package/src/table/executeQueries/executeQueriesCore.js +12 -0
  270. package/src/table/executeQueries/executeQuery.js +8 -0
  271. package/src/table/executeQueries/resolveExecuteQuery.js +57 -0
  272. package/src/table/executeQueries.js +15 -0
  273. package/src/table/extractDeleteStrategy.js +9 -0
  274. package/src/table/fuzzyPromise.js +18 -0
  275. package/src/table/getById.js +33 -0
  276. package/src/table/getFirstFromDb.js +10 -0
  277. package/src/table/getFromDbById.js +17 -0
  278. package/src/table/getIdArgs.js +14 -0
  279. package/src/table/getMany.js +26 -0
  280. package/src/table/getManyDto/newQuery.js +32 -0
  281. package/src/table/getManyDto/pg/newQuery.js +8 -0
  282. package/src/table/getManyDto.js +10 -0
  283. package/src/table/getManyDtoFast/getSubRows.js +172 -0
  284. package/src/table/getManyDtoFast/newQuery.js +8 -0
  285. package/src/table/getManyDtoFast/newQueryCore.js +18 -0
  286. package/src/table/getManyDtoFast/query/newSingleQuery.js +20 -0
  287. package/src/table/getManyDtoFast/query/newSubQueries/joinLegToQuery.js +18 -0
  288. package/src/table/getManyDtoFast/query/newSubQueries/manyLegToQuery.js +20 -0
  289. package/src/table/getManyDtoFast/query/newSubQueries/oneLegToQuery.js +21 -0
  290. package/src/table/getManyDtoFast/query/newSubQueries.js +47 -0
  291. package/src/table/getManyDtoFast/query/singleQuery/newShallowColumnSql.js +21 -0
  292. package/src/table/getSessionContext.js +10 -0
  293. package/src/table/getSessionSingleton.js +5 -0
  294. package/src/table/groupBy/newQuery.js +25 -0
  295. package/src/table/groupBy.js +65 -0
  296. package/src/table/hasMany.js +33 -0
  297. package/src/table/hasOne.js +33 -0
  298. package/src/table/insert.js +91 -0
  299. package/src/table/insertDefault.js +88 -0
  300. package/src/table/join.js +42 -0
  301. package/src/table/joinRelation/getRelatives.js +64 -0
  302. package/src/table/log.js +39 -0
  303. package/src/table/negotiateAddStrategy.js +20 -0
  304. package/src/table/negotiateExpandInverse.js +13 -0
  305. package/src/table/newCache.js +96 -0
  306. package/src/table/newCascadeDeleteStrategy.js +30 -0
  307. package/src/table/newGetRelated.js +21 -0
  308. package/src/table/newJoinRelation.js +117 -0
  309. package/src/table/newManyRelation.js +61 -0
  310. package/src/table/newOneRelation.js +61 -0
  311. package/src/table/newPrimaryKeyFilter.js +13 -0
  312. package/src/table/newQuery.js +18 -0
  313. package/src/table/newRelatedTable.js +100 -0
  314. package/src/table/newRowCache.js +106 -0
  315. package/src/table/newThrow.js +11 -0
  316. package/src/table/nullPromise.js +1 -0
  317. package/src/table/objectToCallback.js +7 -0
  318. package/src/table/oneRelation/getRelatives.js +45 -0
  319. package/src/table/popChanges.js +19 -0
  320. package/src/table/promise.js +14 -0
  321. package/src/table/purifyStrategy.js +49 -0
  322. package/src/table/query/extractFilter.js +9 -0
  323. package/src/table/query/extractLimit.js +11 -0
  324. package/src/table/query/extractLimitQuery.js +23 -0
  325. package/src/table/query/extractOffset.js +11 -0
  326. package/src/table/query/extractOrderBy.js +57 -0
  327. package/src/table/query/extractSql.js +10 -0
  328. package/src/table/query/newParameterized.js +38 -0
  329. package/src/table/query/newSingleQuery.js +23 -0
  330. package/src/table/query/parameterized/extractParameters.js +8 -0
  331. package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +16 -0
  332. package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +27 -0
  333. package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +37 -0
  334. package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +13 -0
  335. package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +9 -0
  336. package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +11 -0
  337. package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +9 -0
  338. package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +25 -0
  339. package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +13 -0
  340. package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +10 -0
  341. package/src/table/query/singleQuery/negotiateExclusive.js +11 -0
  342. package/src/table/query/singleQuery/negotiateLimit.js +10 -0
  343. package/src/table/query/singleQuery/newColumnSql.js +8 -0
  344. package/src/table/query/singleQuery/newDiscriminatorSql.js +33 -0
  345. package/src/table/query/singleQuery/newJoinSql.js +41 -0
  346. package/src/table/query/singleQuery/newQueryContext.js +20 -0
  347. package/src/table/query/singleQuery/newWhereSql.js +19 -0
  348. package/src/table/readStream/extractLimit.js +7 -0
  349. package/src/table/readStream/extractOrderBy.js +55 -0
  350. package/src/table/readStream/mySql/newQuery.js +16 -0
  351. package/src/table/readStream/mySql/query/newSingleQuery.js +21 -0
  352. package/src/table/readStream/mySql/query/newSubQueries/joinLegToQuery.js +19 -0
  353. package/src/table/readStream/mySql/query/newSubQueries/manyLegToQuery.js +22 -0
  354. package/src/table/readStream/mySql/query/newSubQueries/newQueryCore.js +9 -0
  355. package/src/table/readStream/mySql/query/newSubQueries/newSingleQueryCore.js +18 -0
  356. package/src/table/readStream/mySql/query/newSubQueries/oneLegToQuery.js +22 -0
  357. package/src/table/readStream/mySql/query/newSubQueries.js +47 -0
  358. package/src/table/readStream/mySql/query/singleQuery/newShallowColumnSql.js +17 -0
  359. package/src/table/readStream/newQuery.js +32 -0
  360. package/src/table/readStream/newQueryStream.js +8 -0
  361. package/src/table/readStream/pg/newQuery.js +8 -0
  362. package/src/table/readStream/pg/newQueryCore.js +17 -0
  363. package/src/table/readStream/pg/query/newSingleQuery.js +19 -0
  364. package/src/table/readStream/pg/query/newSubQueries/joinLegToQuery.js +19 -0
  365. package/src/table/readStream/pg/query/newSubQueries/manyLegToQuery.js +22 -0
  366. package/src/table/readStream/pg/query/newSubQueries/oneLegToQuery.js +19 -0
  367. package/src/table/readStream/pg/query/newSubQueries.js +47 -0
  368. package/src/table/readStream/pg/query/singleQuery/newShallowColumnSql.js +19 -0
  369. package/src/table/readStreamDefault/createBatchFilter.js +39 -0
  370. package/src/table/relatedTable/aggregate/aggregateJoinSql.js +37 -0
  371. package/src/table/relatedTable/aggregate/joinSql.js +38 -0
  372. package/src/table/relatedTable/aggregate.js +48 -0
  373. package/src/table/relatedTable/all.js +24 -0
  374. package/src/table/relatedTable/any.js +70 -0
  375. package/src/table/relatedTable/childColumn.js +61 -0
  376. package/src/table/relatedTable/columnAggregate.js +16 -0
  377. package/src/table/relatedTable/columnAggregateGroup.js +59 -0
  378. package/src/table/relatedTable/joinSql.js +40 -0
  379. package/src/table/relatedTable/joinSqlArray.js +32 -0
  380. package/src/table/relatedTable/none.js +22 -0
  381. package/src/table/relatedTable/relatedColumn.js +49 -0
  382. package/src/table/relatedTable/relationFilter.js +16 -0
  383. package/src/table/relatedTable/selectSql.js +11 -0
  384. package/src/table/relatedTable/subFilter.js +16 -0
  385. package/src/table/relatedTable/where.js +50 -0
  386. package/src/table/relatedTable/whereSql.js +41 -0
  387. package/src/table/relation/manyCache/extractParentKey.js +17 -0
  388. package/src/table/relation/manyCache/synchronizeAdded.js +13 -0
  389. package/src/table/relation/manyCache/synchronizeChanged.js +31 -0
  390. package/src/table/relation/manyCache/synchronizeRemoved.js +13 -0
  391. package/src/table/relation/newExpanderCache.js +7 -0
  392. package/src/table/relation/newForeignKeyFilter.js +20 -0
  393. package/src/table/relation/newJoinLeg.js +23 -0
  394. package/src/table/relation/newManyCache.js +57 -0
  395. package/src/table/relation/newManyCacheCore.js +53 -0
  396. package/src/table/relation/newManyLeg.js +15 -0
  397. package/src/table/relation/newOneCache.js +28 -0
  398. package/src/table/relation/newOneLeg.js +25 -0
  399. package/src/table/releaseDbClient.js +15 -0
  400. package/src/table/resultToPromise.js +8 -0
  401. package/src/table/resultToRows/dbRowToRow.js +51 -0
  402. package/src/table/resultToRows/dbRowsToRows.js +13 -0
  403. package/src/table/resultToRows/decodeDbRow.js +25 -0
  404. package/src/table/resultToRows/delete/removeFromCache.js +33 -0
  405. package/src/table/resultToRows/delete.js +31 -0
  406. package/src/table/resultToRows/negotiateQueryContext.js +6 -0
  407. package/src/table/resultToRows/newDecodeDbRow.js +262 -0
  408. package/src/table/resultToRows/toDto/createDto.js +20 -0
  409. package/src/table/resultToRows/toDto/extractStrategy.js +41 -0
  410. package/src/table/resultToRows/toDto.js +92 -0
  411. package/src/table/resultToRows.js +37 -0
  412. package/src/table/rollback.js +31 -0
  413. package/src/table/rowArray/negotiateNextTick.js +11 -0
  414. package/src/table/rowArray/orderBy.js +51 -0
  415. package/src/table/rowArray.js +62 -0
  416. package/src/table/setSessionSingleton.js +5 -0
  417. package/src/table/strategyToSpan.js +49 -0
  418. package/src/table/tryGetById.js +13 -0
  419. package/src/table/tryGetFirstFromDb.js +23 -0
  420. package/src/table/tryGetFromCacheById.js +12 -0
  421. package/src/table/tryGetFromDbById/extractStrategy.js +9 -0
  422. package/src/table/tryGetFromDbById.js +19 -0
  423. package/src/table/tryGetSessionContext.js +16 -0
  424. package/src/table/tryReleaseDbClient.js +14 -0
  425. package/src/table/updateField.js +12 -0
  426. package/src/table/where.js +12 -0
  427. package/src/table.js +174 -0
  428. package/src/tedious/deleteFromSql.js +8 -0
  429. package/src/tedious/encodeBoolean.js +7 -0
  430. package/src/tedious/encodeBuffer.js +7 -0
  431. package/src/tedious/formatDateOut.js +5 -0
  432. package/src/tedious/formatJSONOut.js +5 -0
  433. package/src/tedious/getManyDto/newQuery.js +8 -0
  434. package/src/tedious/getManyDto/newQueryCore.js +18 -0
  435. package/src/tedious/getManyDto/query/newSingleQuery.js +29 -0
  436. package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +16 -0
  437. package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +16 -0
  438. package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +19 -0
  439. package/src/tedious/getManyDto/query/newSubQueries.js +48 -0
  440. package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +34 -0
  441. package/src/tedious/getManyDto.js +27 -0
  442. package/src/tedious/insert.js +13 -0
  443. package/src/tedious/insertSql.js +70 -0
  444. package/src/tedious/limitAndOffset.js +16 -0
  445. package/src/tedious/mergeSql.js +76 -0
  446. package/src/tedious/newDatabase.js +129 -0
  447. package/src/tedious/newPool.js +19 -0
  448. package/src/tedious/newTransaction.js +72 -0
  449. package/src/tedious/outputInsertedSql.js +11 -0
  450. package/src/tedious/pool/defaults.js +45 -0
  451. package/src/tedious/pool/end.js +13 -0
  452. package/src/tedious/pool/newGenericPool.js +71 -0
  453. package/src/tedious/pool/parseConnectionString.js +40 -0
  454. package/src/tedious/selectForUpdateSql.js +3 -0
  455. package/src/tedious/wrapQuery.js +112 -0
  456. package/src/toCompareObject.js +41 -0
  457. package/src/useHook.js +9 -0
  458. package/src/validateDeleteAllowed.js +49 -0
  459. package/src/validateDeleteConflict.js +92 -0
@@ -0,0 +1,433 @@
1
+ let emptyFilter = require('../emptyFilter');
2
+ const negotiateRawSqlFilter = require('../table/column/negotiateRawSqlFilter');
3
+ let getMeta = require('./getMeta');
4
+ let isSafe = Symbol();
5
+ let _ops = {
6
+ and: emptyFilter.and,
7
+ or: emptyFilter.or,
8
+ not: emptyFilter.not,
9
+ AND: emptyFilter.and,
10
+ OR: emptyFilter.or,
11
+ NOT: emptyFilter.not
12
+ };
13
+
14
+ let _allowedOps = {
15
+ and: true,
16
+ or: true,
17
+ not: true,
18
+ AND: true,
19
+ OR: true,
20
+ NOT: true,
21
+ equal: true,
22
+ eq: true,
23
+ EQ: true,
24
+ notEqual: true,
25
+ ne: true,
26
+ NE: true,
27
+ lessThan: true,
28
+ lt: true,
29
+ LT: true,
30
+ lessThanOrEqual: true,
31
+ le: true,
32
+ LE: true,
33
+ greaterThan: true,
34
+ gt: true,
35
+ GT: true,
36
+ greaterThanOrEqual: true,
37
+ ge: true,
38
+ GE: true,
39
+ between: true,
40
+ in: true,
41
+ IN: true,
42
+ startsWith: true,
43
+ iStartsWith: true,
44
+ endsWith: true,
45
+ iEndsWith: true,
46
+ contains: true,
47
+ iContains: true,
48
+ iEqual: true,
49
+ iEq: true,
50
+ ieq: true,
51
+ IEQ: true,
52
+ exists: true,
53
+ all: true,
54
+ any: true,
55
+ none: true,
56
+ where: true,
57
+ sum: true,
58
+ avg: true,
59
+ max: true,
60
+ min: true,
61
+ count: true,
62
+ groupSum: true,
63
+ groupAvg: true,
64
+ groupMax: true,
65
+ groupMin: true,
66
+ groupCount: true,
67
+ _aggregate: true,
68
+ self: true,
69
+ };
70
+
71
+ async function executePath({ table, JSONFilter, baseFilter, customFilters = {}, request, response, readonly, disableBulkDeletes, isHttp, client }) {
72
+ let allowedOps = { ..._allowedOps, insert: !readonly, ...extractRelations(getMeta(table)) };
73
+ let ops = { ..._ops, ...getCustomFilterPaths(customFilters), getManyDto, getMany, aggregate, count, delete: _delete, cascadeDelete };
74
+ let res = await parseFilter(JSONFilter, table);
75
+ if (res === undefined)
76
+ return {};
77
+ else
78
+ return res;
79
+
80
+ function parseFilter(json, table) {
81
+ if (isFilter(json)) {
82
+ let subFilters = [];
83
+
84
+ let anyAllNone = tryGetAnyAllNone(json.path, table);
85
+ if (anyAllNone) {
86
+ if (isHttp)
87
+ validateArgs(json.args[0]);
88
+ const f = anyAllNone(x => parseFilter(json.args[0], x));
89
+ f.isSafe = isSafe;
90
+ return f;
91
+ }
92
+ else {
93
+ for (let i = 0; i < json.args.length; i++) {
94
+ subFilters.push(parseFilter(json.args[i], nextTable(json.path, table)));
95
+ }
96
+ }
97
+ return executePath(json.path, subFilters);
98
+ }
99
+ else if (Array.isArray(json)) {
100
+ const result = [];
101
+ for (let i = 0; i < json.length; i++) {
102
+ result.push(parseFilter(json[i], table));
103
+ }
104
+ return result;
105
+ }
106
+ return json;
107
+
108
+ function tryGetAnyAllNone(path, table) {
109
+ path = path.split('.');
110
+ for (let i = 0; i < path.length; i++) {
111
+ table = table[path[i]];
112
+ }
113
+
114
+ let ops = new Set(['all', 'any', 'none', 'where', '_aggregate']);
115
+ // let ops = new Set(['all', 'any', 'none', 'where']);
116
+ let last = path.slice(-1)[0];
117
+ if (ops.has(last) || (table && (table._primaryColumns || (table.any && table.all))))
118
+ return table;
119
+ }
120
+
121
+ function executePath(path, args) {
122
+ if (path in ops) {
123
+ if (isHttp)
124
+ validateArgs(args);
125
+ let op = ops[path].apply(null, args);
126
+ if (op.then)
127
+ return op.then((o) => {
128
+ setSafe(o);
129
+ return o;
130
+ });
131
+ setSafe(op);
132
+ return op;
133
+ }
134
+ let pathArray = path.split('.');
135
+ let target = table;
136
+ let op = pathArray[pathArray.length - 1];
137
+ if (!allowedOps[op] && isHttp) {
138
+
139
+ let e = new Error('Disallowed operator ' + op);
140
+ // @ts-ignore
141
+ e.status = 403;
142
+ throw e;
143
+
144
+ }
145
+ for (let i = 0; i < pathArray.length; i++) {
146
+ target = target[pathArray[i]];
147
+ }
148
+
149
+ let res = target.apply(null, args);
150
+ setSafe(res);
151
+ return res;
152
+ }
153
+ }
154
+
155
+
156
+
157
+ async function invokeBaseFilter() {
158
+ if (typeof baseFilter === 'function') {
159
+ const res = await baseFilter.apply(null, [bindDb(client), request, response]);
160
+ if (!res)
161
+ return;
162
+ const JSONFilter = JSON.parse(JSON.stringify(res));
163
+ //@ts-ignore
164
+ return executePath({ table, JSONFilter, request, response });
165
+ }
166
+ else
167
+ return;
168
+ }
169
+
170
+ function getCustomFilterPaths(customFilters) {
171
+ return getLeafNames(customFilters);
172
+
173
+ function getLeafNames(obj, result = {}, current = 'customFilters.') {
174
+ for (let p in obj) {
175
+ if (typeof obj[p] === 'object' && obj[p] !== null)
176
+ getLeafNames(obj[p], result, current + p + '.');
177
+ else
178
+ result[current + p] = resolveFilter.bind(null, obj[p]);
179
+ }
180
+ return result;
181
+ }
182
+
183
+ async function resolveFilter(fn, ...args) {
184
+ const context = { db: bindDb(client), request, response };
185
+ let res = fn.apply(null, [context, ...args]);
186
+ if (res.then)
187
+ res = await res;
188
+ const JSONFilter = JSON.parse(JSON.stringify(res));
189
+ //@ts-ignore
190
+ return executePath({ table, JSONFilter, request, response });
191
+ }
192
+ }
193
+
194
+ function nextTable(path, table) {
195
+ path = path.split('.');
196
+ let ops = new Set(['all', 'any', 'none']);
197
+ let last = path.slice(-1)[0];
198
+ if (ops.has(last)) {
199
+ for (let i = 0; i < path.length - 1; i++) {
200
+ table = table[path[i]];
201
+ }
202
+ return table;
203
+ }
204
+ else {
205
+ let lastObj = table;
206
+ for (let i = 0; i < path.length; i++) {
207
+ if (lastObj)
208
+ lastObj = lastObj[path[i]];
209
+ }
210
+ if (lastObj?._shallow)
211
+ return lastObj._shallow;
212
+ else return table;
213
+ }
214
+ }
215
+
216
+ async function _delete(filter) {
217
+ if (readonly || disableBulkDeletes) {
218
+ let e = new Error('Bulk deletes are not allowed. Parameter "disableBulkDeletes" must be true.');
219
+ // @ts-ignore
220
+ e.status = 403;
221
+ throw e;
222
+ }
223
+ filter = negotiateFilter(filter);
224
+ const _baseFilter = await invokeBaseFilter();
225
+ if (_baseFilter)
226
+ filter = filter.and(_baseFilter);
227
+ let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
228
+ return table.delete.apply(null, args);
229
+ }
230
+
231
+ async function cascadeDelete(filter) {
232
+ if (readonly || disableBulkDeletes) {
233
+ const e = new Error('Bulk deletes are not allowed. Parameter "disableBulkDeletes" must be true.');
234
+ // @ts-ignore
235
+ e.status = 403;
236
+ throw e;
237
+
238
+ }
239
+ filter = negotiateFilter(filter);
240
+ const _baseFilter = await invokeBaseFilter();
241
+ if (_baseFilter)
242
+ filter = filter.and(_baseFilter);
243
+ let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
244
+ return table.cascadeDelete.apply(null, args);
245
+ }
246
+
247
+ function negotiateFilter(filter) {
248
+ if (filter)
249
+ return negotiateRawSqlFilter(filter, table, true);
250
+ else
251
+ return emptyFilter;
252
+ }
253
+
254
+ async function count(filter, strategy) {
255
+ validateStrategy(table, strategy);
256
+ filter = negotiateFilter(filter);
257
+ const _baseFilter = await invokeBaseFilter();
258
+ if (_baseFilter)
259
+ filter = filter.and(_baseFilter);
260
+ let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
261
+ return table.count.apply(null, args);
262
+ }
263
+
264
+ async function getManyDto(filter, strategy) {
265
+ validateStrategy(table, strategy);
266
+ filter = negotiateFilter(filter);
267
+ const _baseFilter = await invokeBaseFilter();
268
+ if (_baseFilter)
269
+ filter = filter.and(_baseFilter);
270
+ let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
271
+ await negotiateWhereAndAggregate(strategy);
272
+ return table.getManyDto.apply(null, args);
273
+ }
274
+
275
+ async function aggregate(filter, strategy) {
276
+ validateStrategy(table, strategy);
277
+ filter = negotiateFilter(filter);
278
+ const _baseFilter = await invokeBaseFilter();
279
+ if (_baseFilter)
280
+ filter = filter.and(_baseFilter);
281
+ let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
282
+ await negotiateWhereAndAggregate(strategy);
283
+ return table.aggregate.apply(null, args);
284
+ }
285
+
286
+ async function negotiateWhereAndAggregate(strategy) {
287
+ if (typeof strategy !== 'object')
288
+ return;
289
+
290
+ for(let name in strategy) {
291
+ const target = strategy[name];
292
+ if (isFilter(target))
293
+ strategy[name] = await parseFilter(strategy[name], table);
294
+ else
295
+ await negotiateWhereAndAggregate(strategy[name]);
296
+ }
297
+
298
+ }
299
+
300
+ async function getMany(filter, strategy) {
301
+ validateStrategy(table, strategy);
302
+ filter = negotiateFilter(filter);
303
+ const _baseFilter = await invokeBaseFilter();
304
+ if (_baseFilter)
305
+ filter = filter.and(_baseFilter);
306
+ let args = [filter].concat(Array.prototype.slice.call(arguments).slice(1));
307
+ await negotiateWhereAndAggregate(strategy);
308
+ return table.getMany.apply(null, args);
309
+ }
310
+
311
+ }
312
+
313
+ function validateStrategy(table, strategy) {
314
+ if (!strategy || !table)
315
+ return;
316
+
317
+ for (let p in strategy) {
318
+ validateOffset(strategy);
319
+ validateLimit(strategy);
320
+ validateOrderBy(table, strategy);
321
+ validateStrategy(table[p], strategy[p]);
322
+ }
323
+ }
324
+
325
+ function validateLimit(strategy) {
326
+ if (!('limit' in strategy) || Number.isInteger(strategy.limit))
327
+ return;
328
+ const e = new Error('Invalid limit: ' + strategy.limit);
329
+ // @ts-ignore
330
+ e.status = 400;
331
+ }
332
+
333
+ function validateOffset(strategy) {
334
+ if (!('offset' in strategy) || Number.isInteger(strategy.offset))
335
+ return;
336
+ const e = new Error('Invalid offset: ' + strategy.offset);
337
+ // @ts-ignore
338
+ e.status = 400;
339
+ throw e;
340
+ }
341
+
342
+ function validateOrderBy(table, strategy) {
343
+ if (!('orderBy' in strategy) || !table)
344
+ return;
345
+ let orderBy = strategy.orderBy;
346
+ if (!Array.isArray(orderBy))
347
+ orderBy = [orderBy];
348
+ orderBy.reduce(validate, []);
349
+
350
+ function validate(_, element) {
351
+ let parts = element.split(' ').filter(x => {
352
+ x = x.toLowerCase();
353
+ return (!(x === '' || x === 'asc' || x === 'desc'));
354
+ });
355
+ for (let p of parts) {
356
+ let col = table[p];
357
+ if (!(col && col.equal)) {
358
+ const e = new Error('Unknown column: ' + p);
359
+ // @ts-ignore
360
+ e.status = 400;
361
+ throw e;
362
+ }
363
+ }
364
+ }
365
+ }
366
+
367
+ function validateArgs() {
368
+ for (let i = 0; i < arguments.length; i++) {
369
+ const filter = arguments[i];
370
+ if (!filter)
371
+ continue;
372
+ if (filter && filter.isSafe === isSafe)
373
+ continue;
374
+ if (filter.sql || typeof (filter) === 'string') {
375
+ const e = new Error('Raw filters are disallowed');
376
+ // @ts-ignore
377
+ e.status = 403;
378
+ throw e;
379
+ }
380
+ if (Array.isArray(filter))
381
+ for (let i = 0; i < filter.length; i++) {
382
+
383
+ validateArgs(filter[i]);
384
+ }
385
+ }
386
+
387
+ }
388
+
389
+ function isFilter(json) {
390
+ return json instanceof Object && 'path' in json && 'args' in json;
391
+ }
392
+
393
+ function setSafe(o) {
394
+ if (o instanceof Object)
395
+ Object.defineProperty(o, 'isSafe', {
396
+ value: isSafe,
397
+ enumerable: false
398
+
399
+ });
400
+ }
401
+
402
+ function extractRelations(obj) {
403
+ let flattened = {};
404
+
405
+ function helper(relations) {
406
+ Object.keys(relations).forEach(key => {
407
+
408
+ flattened[key] = true;
409
+
410
+ if (typeof relations[key] === 'object' && Object.keys(relations[key]?.relations)?.length > 0) {
411
+ helper(relations[key].relations);
412
+ }
413
+ });
414
+ }
415
+
416
+ helper(obj.relations);
417
+
418
+ return flattened;
419
+ }
420
+
421
+ function bindDb(client) {
422
+ // @ts-ignore
423
+ var domain = process.domain;
424
+ let p = domain.run(() => true);
425
+
426
+ function run(fn) {
427
+ return p.then(domain.run.bind(domain, fn));
428
+ }
429
+
430
+ return client({ transaction: run });
431
+
432
+ }
433
+ module.exports = executePath;
@@ -0,0 +1,49 @@
1
+ let extractSubStrategy = _extractSubStrategy;
2
+
3
+ function _extractSubStrategy(table, map) {
4
+ extractSubStrategy = require('./getMeta');
5
+ return extractSubStrategy(table, map);
6
+ }
7
+
8
+ function getMeta(table, map = new Map()) {
9
+ if (map.has(table))
10
+ return map.get(table).id;
11
+ let strategy = {
12
+ keys: table._primaryColumns.map(x => ({name: x.alias, type: x.tsType})),
13
+ columns: {},
14
+ relations: {},
15
+ id: map.size
16
+ };
17
+ map.set(table, strategy);
18
+
19
+ for (let i = 0; i < table._columns.length; i++) {
20
+ const column = table._columns[i];
21
+ strategy.columns[column.alias] = {};
22
+ if ('serializable' in column && !column.serializable)
23
+ strategy.columns[column.alias].serializable = false;
24
+ else
25
+ strategy.columns[column.alias].serializable = true;
26
+ }
27
+
28
+ let relations = table._relations;
29
+ let relationName;
30
+
31
+ let visitor = {};
32
+ visitor.visitJoin = function(relation) {
33
+ strategy.relations[relationName] = extractSubStrategy(relation.childTable, map);
34
+ };
35
+
36
+ visitor.visitMany = function(relation) {
37
+ strategy.relations[relationName] = extractSubStrategy(relation.childTable, map);
38
+ };
39
+
40
+ visitor.visitOne = visitor.visitMany;
41
+
42
+ for (relationName in relations) {
43
+ let relation = relations[relationName];
44
+ relation.accept(visitor);
45
+ }
46
+ return strategy;
47
+ }
48
+
49
+ module.exports = getMeta;
@@ -0,0 +1,125 @@
1
+ const getTSDefinition = require('./getTSDefinition');
2
+ let hostLocal = _hostLocal;
3
+ const getMeta = require('./hostExpress/getMeta');
4
+
5
+ function hostExpress(client, options = {}) {
6
+ if ('db' in options && (options.db ?? undefined) === undefined || !client.db)
7
+ throw new Error('No db specified');
8
+ const dbOptions = { db: options.db || client.db };
9
+ let c = {};
10
+ const readonly = { readonly: options.readonly};
11
+ for (let tableName in client.tables) {
12
+ c[tableName] = hostLocal({
13
+ ...dbOptions,
14
+ ...readonly,
15
+ ...options[tableName],
16
+ table: client.tables[tableName],
17
+ isHttp: true, client
18
+
19
+ });
20
+ }
21
+
22
+ async function handler(req, res) {
23
+ if (req.method === 'POST')
24
+ return post.apply(null, arguments);
25
+ if (req.method === 'PATCH')
26
+ return patch.apply(null, arguments);
27
+ if (req.method === 'GET')
28
+ return get.apply(null, arguments);
29
+ if (req.method === 'OPTIONS')
30
+ return handleOptions(req, res); // assuming the second argument is `response`
31
+
32
+ else
33
+ res.status(405).set('Allow', 'GET, POST, PATCH, OPTIONS').send('Method Not Allowed');
34
+ }
35
+
36
+ handler.db = handler;
37
+ handler.dts = get;
38
+
39
+ function get(request, response) {
40
+ try {
41
+ if (request.query.table) {
42
+ if (!(request.query.table in c)) {
43
+ let e = new Error('Table is not exposed or does not exist');
44
+ // @ts-ignore
45
+ e.status = 400;
46
+ throw e;
47
+ }
48
+
49
+ const result = getMeta(client.tables[request.query.table]);
50
+ response.setHeader('content-type', 'text/plain');
51
+ response.status(200).send(result);
52
+ }
53
+ else {
54
+ const isNamespace = request.query.isNamespace === 'true';
55
+ let tsArg = Object.keys(c).map(x => {
56
+ return { table: client.tables[x], customFilters: options?.tables?.[x].customFilters, name: x };
57
+ });
58
+ response.setHeader('content-type', 'text/plain');
59
+ response.status(200).send(getTSDefinition(tsArg, { isNamespace, isHttp: true }));
60
+ }
61
+ }
62
+ catch (e) {
63
+ if (e.status === undefined)
64
+ response.status(500).send(e.message || e);
65
+ else
66
+ response.status(e.status).send(e.message);
67
+ }
68
+ }
69
+
70
+ async function patch(request, response) {
71
+ try {
72
+ response.json(await c[request.query.table].patch(request.body, request, response));
73
+ }
74
+ catch (e) {
75
+ if (e.status === undefined)
76
+ response.status(500).send(e.message || e);
77
+ else
78
+ response.status(e.status).send(e.message);
79
+
80
+ }
81
+ }
82
+
83
+ async function post(request, response) {
84
+ try {
85
+ if (!request.query.table) {
86
+ let e = new Error('Table not defined');
87
+ // @ts-ignore
88
+ e.status = 400;
89
+ throw e;
90
+ }
91
+ else if (!(request.query.table in c)) {
92
+ let e = new Error('Table is not exposed or does not exist');
93
+ // @ts-ignore
94
+ e.status = 400;
95
+ throw e;
96
+ }
97
+
98
+ response.json(await c[request.query.table].post(request.body, request, response));
99
+ }
100
+ catch (e) {
101
+ if (e.status === undefined)
102
+ response.status(500).send(e.message || e);
103
+ else
104
+ response.status(e.status).send(e.message);
105
+ }
106
+
107
+ }
108
+
109
+ function handleOptions(req, response) {
110
+ response.setHeader('Access-Control-Allow-Origin', '*'); // Adjust this as per your CORS needs
111
+ response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, OPTIONS'); // And any other methods you support
112
+ response.setHeader('Access-Control-Allow-Headers', 'Content-Type'); // And any other headers you expect in requests
113
+ response.setHeader('Access-Control-Max-Age', '86400'); // Cache preflight request for a day. Adjust as you see fit
114
+ response.status(204).send(); // 204 No Content response for successful OPTIONS requests
115
+ }
116
+
117
+ return handler;
118
+ }
119
+
120
+ function _hostLocal() {
121
+ hostLocal = require('./hostLocal');
122
+ return hostLocal.apply(null, arguments);
123
+ }
124
+
125
+ module.exports = hostExpress;
@@ -0,0 +1,110 @@
1
+ let executePath = require('./hostExpress/executePath');
2
+ let getMeta = require('./hostExpress/getMeta');
3
+ let setSessionSingleton = require('./table/setSessionSingleton');
4
+ let executeQuery = require('./query');
5
+ let hostExpress = require('./hostExpress');
6
+
7
+ // { db, table, defaultConcurrency,
8
+ // concurrency,
9
+ // customFilters,
10
+ // baseFilter, strategy, transaction,
11
+ // readonly,
12
+ // disableBulkDeletes, isBrowser }
13
+ function hostLocal() {
14
+ const _options = arguments[0];
15
+ let { table, transaction, db, isHttp } = _options;
16
+
17
+ let c = { get, post, patch, query, express };
18
+
19
+ function get() {
20
+ return getMeta(table);
21
+
22
+ }
23
+ async function patch(body,_req, _res) {
24
+ if (!table) {
25
+ const error = new Error('Table is not exposed');
26
+ // @ts-ignore
27
+ error.status = 400;
28
+ throw error;
29
+ }
30
+ body = typeof body === 'string' ? JSON.parse(body) : body;
31
+ let result;
32
+
33
+ if (transaction)
34
+ await transaction(fn);
35
+ else {
36
+ if (typeof db === 'function') {
37
+ let dbPromise = db();
38
+ if (dbPromise.then)
39
+ db = await dbPromise;
40
+ else
41
+ db = dbPromise;
42
+ }
43
+ await db.transaction(fn);
44
+ }
45
+ return result;
46
+
47
+ async function fn() {
48
+ setSessionSingleton('ignoreSerializable', true);
49
+ let patch = body.patch;
50
+ result = await table.patch(patch, { ..._options, ...body.options, isHttp });
51
+ }
52
+ }
53
+
54
+ async function post(body, request, response) {
55
+ body = typeof body === 'string' ? JSON.parse(body) : body;
56
+ let result;
57
+
58
+ if (transaction)
59
+ await transaction(fn);
60
+ else {
61
+ if (typeof db === 'function') {
62
+ let dbPromise = db();
63
+ if (dbPromise.then)
64
+ db = await dbPromise;
65
+ else
66
+ db = dbPromise;
67
+ }
68
+ await db.transaction(fn);
69
+ }
70
+ return result;
71
+
72
+ async function fn() {
73
+ setSessionSingleton('ignoreSerializable', true);
74
+ const options = { ..._options, ...body.options, JSONFilter: body, request, response, isHttp };
75
+ result = await executePath(options);
76
+ }
77
+ }
78
+ async function query() {
79
+ let args = arguments;
80
+ let result;
81
+
82
+ if (transaction)
83
+ await transaction(fn);
84
+ else {
85
+ if (typeof db === 'function') {
86
+ let dbPromise = db();
87
+ if (dbPromise.then)
88
+ db = await dbPromise;
89
+ else
90
+ db = dbPromise;
91
+ }
92
+ result = await db.query.apply(null, arguments);
93
+ }
94
+
95
+ return result;
96
+
97
+ async function fn() {
98
+ result = await executeQuery.apply(null, args);
99
+ }
100
+
101
+ }
102
+
103
+ function express(client, options) {
104
+ return hostExpress(client, options );
105
+ }
106
+
107
+ return c;
108
+ }
109
+
110
+ module.exports = hostLocal;