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,128 @@
1
+ let createDomain = require('../createDomain');
2
+ let newTransaction = require('./newTransaction');
3
+ let begin = require('../table/begin');
4
+ let commit = require('../table/commit');
5
+ let rollback = require('../table/rollback');
6
+ let newPool = require('./newPool');
7
+ let useHook = require('../useHook');
8
+ let promise = require('promise/domains');
9
+ let versionArray = process.version.replace('v', '').split('.');
10
+ let major = parseInt(versionArray[0]);
11
+ let express = require('../hostExpress');
12
+ let hostLocal = require('../hostLocal');
13
+ let doQuery = require('../query');
14
+ let releaseDbClient = require('../table/releaseDbClient');
15
+ let setSessionSingleton = require('../table/setSessionSingleton');
16
+
17
+ function newDatabase(connectionString, poolOptions) {
18
+ if (!connectionString)
19
+ throw new Error('Connection string cannot be empty');
20
+ var pool;
21
+ if (!poolOptions)
22
+ pool = newPool.bind(null,connectionString, poolOptions);
23
+ else
24
+ pool = newPool(connectionString, poolOptions);
25
+
26
+ let c = {poolFactory: pool, hostLocal, express};
27
+
28
+ c.transaction = function(options, fn) {
29
+ if ((arguments.length === 1) && (typeof options === 'function')) {
30
+ fn = options;
31
+ options = undefined;
32
+ }
33
+ let domain = createDomain();
34
+
35
+ if (fn)
36
+ return domain.run(runInTransaction);
37
+ else if ((major >= 12) && useHook()) {
38
+ domain.exitContext = true;
39
+ return domain.start().then(run);
40
+ }
41
+ else
42
+ return domain.run(run);
43
+
44
+ async function runInTransaction() {
45
+ let result;
46
+ let transaction = newTransaction(domain, pool);
47
+ await new Promise(transaction)
48
+ .then(begin)
49
+ .then(fn)
50
+ .then((res) => result = res)
51
+ .then(c.commit)
52
+ .then(null, c.rollback);
53
+ return result;
54
+ }
55
+
56
+ function run() {
57
+ let p;
58
+ let transaction = newTransaction(domain, pool);
59
+ if (useHook())
60
+ p = new Promise(transaction);
61
+ else
62
+ p = new promise(transaction);
63
+
64
+ return p.then(begin);
65
+ }
66
+
67
+ };
68
+
69
+ c.createTransaction = function() {
70
+ let domain = createDomain();
71
+ let transaction = newTransaction(domain, pool);
72
+ let p = domain.run(() => new Promise(transaction).then(begin));
73
+
74
+ function run(fn) {
75
+ return p.then(domain.run.bind(domain, fn));
76
+ }
77
+ return run;
78
+ };
79
+
80
+ c.bindTransaction = function() {
81
+ // @ts-ignore
82
+ var domain = process.domain;
83
+ let p = domain.run(() => true);
84
+
85
+ function run(fn) {
86
+ return p.then(domain.run.bind(domain, fn));
87
+ }
88
+ return run;
89
+ };
90
+
91
+ c.query = function(query) {
92
+ let domain = createDomain();
93
+ let transaction = newTransaction(domain, pool);
94
+ let p = domain.run(() => new Promise(transaction)
95
+ .then(() => setSessionSingleton('changes', []))
96
+ .then(() => doQuery(query).then(onResult, onError)));
97
+ return p;
98
+
99
+ function onResult(result) {
100
+ releaseDbClient();
101
+ return result;
102
+ }
103
+
104
+ function onError(e) {
105
+ releaseDbClient();
106
+ throw e;
107
+ }
108
+ };
109
+
110
+
111
+ c.rollback = rollback;
112
+ c.commit = commit;
113
+
114
+ c.end = function() {
115
+ if (poolOptions)
116
+ return pool.end();
117
+ else
118
+ return Promise.resolve();
119
+ };
120
+
121
+ c.accept = function(caller) {
122
+ caller.visitSqlite();
123
+ };
124
+
125
+ return c;
126
+ }
127
+
128
+ module.exports = newDatabase;
@@ -0,0 +1,19 @@
1
+ var pools = require('../pools');
2
+ var promise = require('../table/promise');
3
+ var end = require('./pool/end');
4
+ var newGenericPool = require('./pool/newGenericPool');
5
+ var newId = require('../newId');
6
+
7
+ function newPool(connectionString, poolOptions) {
8
+ var pool = newGenericPool(connectionString, poolOptions);
9
+ var id = newId();
10
+ var boundEnd = end.bind(null, pool, id);
11
+ var c = {};
12
+
13
+ c.connect = pool.connect;
14
+ c.end = promise.denodeify(boundEnd);
15
+ pools[id] = c;
16
+ return c;
17
+ }
18
+
19
+ module.exports = newPool;
@@ -0,0 +1,58 @@
1
+ const wrapQuery = require('./wrapQuery');
2
+ const encodeBoolean = require('./encodeBoolean');
3
+ const deleteFromSql = require('./deleteFromSql');
4
+ const selectForUpdateSql = require('./selectForUpdateSql');
5
+ const lastInsertedSql = require('./lastInsertedSql');
6
+ const limitAndOffset = require('./limitAndOffset');
7
+ const insertSql = require('./insertSql');
8
+ const insert = require('./insert');
9
+
10
+ function newResolveTransaction(domain, pool) {
11
+ var rdb = {poolFactory: pool};
12
+ if (!pool.connect) {
13
+ pool = pool();
14
+ rdb.pool = pool;
15
+ }
16
+
17
+ return function(onSuccess, onError) {
18
+ pool.connect(onConnected);
19
+
20
+ function onConnected(err, client, done) {
21
+ try {
22
+ if (err) {
23
+ onError(err);
24
+ return;
25
+ }
26
+ client.executeQuery = wrapQuery(client);
27
+ rdb.engine = 'sqlite';
28
+ rdb.dbClient = client;
29
+ rdb.dbClientDone = done;
30
+ rdb.encodeBoolean = encodeBoolean;
31
+ rdb.decodeJSON = decodeJSON;
32
+ rdb.encodeJSON = JSON.stringify;
33
+ rdb.deleteFromSql = deleteFromSql;
34
+ rdb.selectForUpdateSql = selectForUpdateSql;
35
+ rdb.lastInsertedSql = lastInsertedSql;
36
+ rdb.insertSql = insertSql;
37
+ rdb.insert = insert;
38
+ rdb.lastInsertedIsSeparate = true;
39
+ rdb.multipleStatements = false;
40
+ rdb.limitAndOffset = limitAndOffset;
41
+ rdb.accept = function(caller) {
42
+ caller.visitSqlite();
43
+ };
44
+ rdb.aggregateCount = 0;
45
+ domain.rdb = rdb;
46
+ onSuccess();
47
+ } catch (e) {
48
+ onError(e);
49
+ }
50
+ }
51
+ };
52
+ }
53
+
54
+ function decodeJSON(value) {
55
+ return JSON.parse(value);
56
+ }
57
+
58
+ module.exports = newResolveTransaction;
@@ -0,0 +1,45 @@
1
+ module.exports = {
2
+ // database host defaults to localhost
3
+ host: 'localhost',
4
+
5
+ //database user's name
6
+ user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
7
+
8
+ //name of database to connect
9
+ database: process.platform === 'win32' ? process.env.USERNAME : process.env.USER,
10
+
11
+ //database user's password
12
+ password: null,
13
+
14
+ //database port
15
+ port: 5432,
16
+
17
+ //number of rows to return at a time from a prepared statement's
18
+ //portal. 0 will return all rows at once
19
+ rows: 0,
20
+
21
+ // binary result mode
22
+ binary: false,
23
+
24
+ //Connection pool options - see https://github.com/coopernurse/node-pool
25
+ //number of connections to use in connection pool
26
+ //0 will disable connection pooling
27
+ poolSize: 0,
28
+
29
+ //max milliseconds a client can go unused before it is removed
30
+ //from the pool and destroyed
31
+ poolIdleTimeout: 30000,
32
+
33
+ //frequeny to check for idle clients within the client pool
34
+ reapIntervalMillis: 1000,
35
+
36
+ //pool log function / boolean
37
+ poolLog: false,
38
+
39
+ client_encoding: '',
40
+
41
+ ssl: false,
42
+
43
+ application_name : undefined,
44
+ fallback_application_name: undefined
45
+ };
@@ -0,0 +1,13 @@
1
+ var pools = require('../../pools');
2
+
3
+ function endPool(genericPool, id, done) {
4
+ genericPool.drain(onDrained);
5
+
6
+ function onDrained() {
7
+ genericPool.destroyAllNow();
8
+ delete pools[id];
9
+ done();
10
+ }
11
+ }
12
+
13
+ module.exports = endPool;
@@ -0,0 +1,59 @@
1
+ /* eslint-disable no-prototype-builtins */
2
+ var EventEmitter = require('events').EventEmitter;
3
+
4
+ var defaults = require('./defaults');
5
+ var genericPool = require('../../generic-pool');
6
+ var sqlite = require('sqlite3');
7
+
8
+ function newGenericPool(connectionString, poolOptions) {
9
+ poolOptions = poolOptions || {};
10
+ var pool = genericPool.Pool({
11
+ max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
12
+ idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
13
+ reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
14
+ log: poolOptions.log || defaults.poolLog,
15
+ create: function(cb) {
16
+ var client = new sqlite.Database(connectionString, onConnected);
17
+
18
+ function onConnected(err) {
19
+ if(err)
20
+ return cb(err, null);
21
+ client.poolCount = 0;
22
+ return cb(null, client);
23
+ }
24
+ },
25
+
26
+ destroy: function(client) {
27
+ client.poolCount = undefined;
28
+ client.close();
29
+ }
30
+ });
31
+ //mixin EventEmitter to pool
32
+ EventEmitter.call(pool);
33
+ for(var key in EventEmitter.prototype) {
34
+ if(EventEmitter.prototype.hasOwnProperty(key)) {
35
+ pool[key] = EventEmitter.prototype[key];
36
+ }
37
+ }
38
+ //monkey-patch with connect method
39
+ pool.connect = function(cb) {
40
+ var domain = process.domain;
41
+ pool.acquire(function(err, client) {
42
+ if(domain) {
43
+ cb = domain.bind(cb);
44
+ }
45
+ if(err) return cb(err, null, function() {/*NOOP*/});
46
+ client.poolCount++;
47
+ cb(null, client, function(err) {
48
+ if(err) {
49
+ pool.destroy(client);
50
+ } else {
51
+ pool.release(client);
52
+ }
53
+ });
54
+ });
55
+ };
56
+ return pool;
57
+ }
58
+
59
+ module.exports = newGenericPool;
@@ -0,0 +1,3 @@
1
+ module.exports = function(alias) {
2
+ return ' FOR UPDATE OF ' + alias;
3
+ };
@@ -0,0 +1,24 @@
1
+ var log = require('../table/log');
2
+
3
+ function wrapQuery(connection) {
4
+ var runOriginalQuery = connection.all;
5
+ return runQuery;
6
+
7
+ function runQuery(query, onCompleted) {
8
+ var params = query.parameters;
9
+ var sql = query.sql();
10
+ log.emitQuery({sql, parameters: params});
11
+
12
+ runOriginalQuery.call(connection, sql, params, onInnerCompleted);
13
+
14
+ function onInnerCompleted(err, rows) {
15
+ if (err)
16
+ onCompleted(err);
17
+ else
18
+ onCompleted(null, rows);
19
+ }
20
+ }
21
+
22
+ }
23
+
24
+ module.exports = wrapQuery;
@@ -0,0 +1,9 @@
1
+ function newAggregate(table) {
2
+
3
+ function aggregate(fn) {
4
+ return fn(table);
5
+ }
6
+ return aggregate;
7
+ }
8
+
9
+ module.exports = newAggregate;
@@ -0,0 +1,10 @@
1
+ let beginCommand = require('./commands/beginCommand');
2
+ let executeQuery = require('./executeQueries/executeQuery');
3
+ let setSessionSingleton = require('./setSessionSingleton');
4
+
5
+ function begin() {
6
+ setSessionSingleton('changes', []);
7
+ return executeQuery(beginCommand());
8
+ }
9
+
10
+ module.exports = begin;
@@ -0,0 +1,11 @@
1
+ var _delete = require('./delete');
2
+ var newObject = require('../newObject');
3
+ var newCascadeDeleteStrategy = require('./newCascadeDeleteStrategy');
4
+
5
+ function cascadeDelete(table, filter) {
6
+ var empty = newObject();
7
+ var strategy = newCascadeDeleteStrategy(empty, table);
8
+ return _delete(table, filter, strategy);
9
+ }
10
+
11
+ module.exports = cascadeDelete;
@@ -0,0 +1,18 @@
1
+ function cloneStrategy(strategy, target) {
2
+ target = target || {};
3
+ for (var name in strategy) {
4
+ target[name] = mapChild(strategy[name]);
5
+ }
6
+ return target;
7
+ }
8
+
9
+ function mapChild(strategy) {
10
+ if (strategy instanceof Array)
11
+ return cloneStrategy(strategy, []);
12
+ if (strategy instanceof Object) {
13
+ return cloneStrategy(strategy, {});
14
+ }
15
+ return strategy;
16
+ }
17
+
18
+ module.exports = cloneStrategy;
@@ -0,0 +1,15 @@
1
+ var newDecodeCore = require('../newDecodeCore');
2
+
3
+ function _new(column) {
4
+ var decodeCore = newDecodeCore(column);
5
+
6
+ return function(value) {
7
+ value = decodeCore(value);
8
+ if (value === null)
9
+ return value;
10
+ else
11
+ return value.toString('base64');
12
+ };
13
+ }
14
+
15
+ module.exports = _new;
@@ -0,0 +1,23 @@
1
+ var purify = require('./purify');
2
+ var newParam = require('../../query/newParameterized');
3
+
4
+ function _new(_column) {
5
+
6
+
7
+ function encode(value) {
8
+ value = purify(value);
9
+ if (value === null)
10
+ return newParam('null');
11
+ return newParam('?', [Buffer.from(value, 'base64')]);
12
+ }
13
+ encode.unsafe = function(value) {
14
+ value = purify(value);
15
+ if (value === null)
16
+ return 'null';
17
+ return Buffer.from(value, 'base64');
18
+ };
19
+
20
+ return encode;
21
+ }
22
+
23
+ module.exports = _new;
@@ -0,0 +1,12 @@
1
+ function purify(value) {
2
+ if(value == null)
3
+ return null;
4
+ if (Buffer.isBuffer(value))
5
+ return value.toString('base64');
6
+ else if (typeof value === 'string')
7
+ return value;
8
+ else
9
+ throw new Error('\'' + value + '\'' + ' is not a base64');
10
+ }
11
+
12
+ module.exports = purify;
@@ -0,0 +1,12 @@
1
+ var newEncode = require('./binary/newEncode');
2
+ var newDecode = require('./binary/newDecode');
3
+ var purify = require('./binary/purify');
4
+
5
+ function _new(column) {
6
+ column.tsType = 'BinaryColumn';
7
+ column.purify = purify;
8
+ column.encode = newEncode(column);
9
+ column.decode = newDecode(column);
10
+ }
11
+
12
+ module.exports = _new;
@@ -0,0 +1,12 @@
1
+ var purify = require('./purify');
2
+
3
+ function _new(column) {
4
+
5
+ return function(value) {
6
+ if (value == column.dbNull)
7
+ return null;
8
+ return purify(value);
9
+ };
10
+ }
11
+
12
+ module.exports = _new;
@@ -0,0 +1,36 @@
1
+ var purify = require('./purify');
2
+ var newParam = require('../../query/newParameterized');
3
+ var getSessionSingleton = require('../../getSessionSingleton');
4
+
5
+ function _new(column) {
6
+
7
+ function encode(value) {
8
+ value = purify(value);
9
+ if (value === null) {
10
+ if (column.dbNull === null)
11
+ return newParam('null');
12
+ return newParam('\'' + column.dbNull + '\'');
13
+ }
14
+ var encodeCore = getSessionSingleton('encodeBoolean');
15
+
16
+
17
+ return newParam('?', [encodeCore(value)]);
18
+ }
19
+
20
+ encode.unsafe = function(value) {
21
+ value = purify(value);
22
+ if (value === null) {
23
+ if (column.dbNull === null)
24
+ return 'null';
25
+ return '\'' + column.dbNull + '\'';
26
+ }
27
+ var encodeCore = getSessionSingleton('encodeBoolean');
28
+
29
+
30
+ return encodeCore(value);
31
+ };
32
+
33
+ return encode;
34
+ }
35
+
36
+ module.exports = _new;
@@ -0,0 +1,7 @@
1
+ function purify(value) {
2
+ if (value === null || typeof (value) === 'undefined')
3
+ return null;
4
+ return Boolean(value);
5
+ }
6
+
7
+ module.exports = purify;
@@ -0,0 +1,14 @@
1
+ var newEncode = require('./boolean/newEncode');
2
+ var newDecode = require('./boolean/newDecode');
3
+ var purify = require('./boolean/purify');
4
+
5
+ function _new(column) {
6
+ column.tsType = 'BooleanColumn';
7
+ column.purify = purify;
8
+ // column.default = false;
9
+ column.lazyDefault = false;
10
+ column.encode = newEncode(column);
11
+ column.decode = newDecode(column);
12
+ }
13
+
14
+ module.exports = _new;
@@ -0,0 +1,11 @@
1
+ var getSessionSingleton = require('../../getSessionSingleton');
2
+
3
+ function formatOut(column, alias) {
4
+ var formatColumn = getSessionSingleton('formatDateOut');
5
+ if (formatColumn)
6
+ return formatColumn(column, alias);
7
+ else
8
+ return `${alias}.${column._dbName}`;
9
+ }
10
+
11
+ module.exports = formatOut;
@@ -0,0 +1,17 @@
1
+ var newDecodeCore = require('../newDecodeCore');
2
+ var dateToISOString = require('../../../dateToISOString');
3
+
4
+ function _new(column) {
5
+ var decodeCore = newDecodeCore(column);
6
+
7
+ return function(value) {
8
+ value = decodeCore(value);
9
+ if (value === null)
10
+ return value;
11
+ else if (typeof value === 'string')
12
+ return value.replace(' ', 'T').replace(' ', '');
13
+ return dateToISOString(value);
14
+ };
15
+ }
16
+
17
+ module.exports = _new;
@@ -0,0 +1,47 @@
1
+ var newPara = require('../../query/newParameterized');
2
+ var purify = require('./purify');
3
+ var getSessionContext = require('../../getSessionContext');
4
+ var getSessionSingleton = require('../../getSessionSingleton');
5
+
6
+ function _new(column) {
7
+ var encode = function(value) {
8
+ value = purify(value);
9
+ if (value == null) {
10
+ if (column.dbNull === null)
11
+ return newPara('null');
12
+ return newPara('\'' + column.dbNull + '\'');
13
+ }
14
+ var context = getSessionContext();
15
+ var encodeCore = context.encodeDate || encodeDate;
16
+ var formatIn = context.formatDateIn;
17
+ return newPara(formatIn ? formatIn('?') : '?', [encodeCore(value)]);
18
+ };
19
+
20
+ encode.unsafe = function(value) {
21
+ value = purify(value);
22
+ if (value == null) {
23
+ if (column.dbNull === null)
24
+ return newPara('null');
25
+ return newPara('\'' + column.dbNull + '\'');
26
+ }
27
+ var encodeCore = getSessionSingleton('encodeDate') || encodeDate;
28
+ return encodeCore(value);
29
+ };
30
+
31
+ return encode;
32
+
33
+
34
+ }
35
+ function encodeDate(date) {
36
+ date = date.toISOString ? removeTimezone(date.toISOString(date)) : removeTimezone(date);
37
+ return date;
38
+ }
39
+
40
+ function removeTimezone(isoString) {
41
+ let dateTimePattern = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?/;
42
+ let match = isoString.match(dateTimePattern);
43
+ return match ? match[0] : isoString;
44
+ }
45
+
46
+
47
+ module.exports = _new;
@@ -0,0 +1,17 @@
1
+ var tryParseISO = require('./tryParseISO');
2
+ var dateToISOString = require('../../../dateToISOString');
3
+
4
+ function purify(value) {
5
+ if(value == null)
6
+ return null;
7
+ if (value.toISOString)
8
+ return dateToISOString(value);
9
+ if (value.indexOf('Z') > -1)
10
+ return dateToISOString(new Date(value));
11
+ var iso = tryParseISO(value);
12
+ if (iso)
13
+ return iso;
14
+ return value;
15
+ }
16
+
17
+ module.exports = purify;
@@ -0,0 +1,25 @@
1
+ function dateToIsoString(date) {
2
+ let tzo = -date.getTimezoneOffset();
3
+ let dif = tzo >= 0 ? '+' : '-';
4
+
5
+ function pad(num) {
6
+ let norm = Math.floor(Math.abs(num));
7
+ return (norm < 10 ? '0' : '') + norm;
8
+ }
9
+
10
+ function padMilli(d) {
11
+ return (d.getMilliseconds() + '').padStart(3, '0');
12
+ }
13
+
14
+ return date.getFullYear() +
15
+ '-' + pad(date.getMonth() + 1) +
16
+ '-' + pad(date.getDate()) +
17
+ 'T' + pad(date.getHours()) +
18
+ ':' + pad(date.getMinutes()) +
19
+ ':' + pad(date.getSeconds()) +
20
+ '.' + padMilli(date) +
21
+ dif + pad(tzo / 60) +
22
+ ':' + pad(tzo % 60);
23
+ }
24
+
25
+ module.exports = dateToIsoString;