@sprucelabs/spruce-cli 17.1.11 → 17.1.14

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 (229) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/node_modules/@sprucelabs/data-stores/README.md +24 -0
  3. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/databaseNotConnected.schema.d.ts +3 -0
  4. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/databaseNotConnected.schema.js +23 -0
  5. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/duplicateKey.schema.d.ts +3 -0
  6. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/duplicateKey.schema.js +11 -0
  7. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/duplicateRecord.schema.d.ts +3 -0
  8. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/duplicateRecord.schema.js +40 -0
  9. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/failedToLoadStore.schema.d.ts +3 -0
  10. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/failedToLoadStore.schema.js +18 -0
  11. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/failedToLoadStores.schema.d.ts +3 -0
  12. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/failedToLoadStores.schema.js +19 -0
  13. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/indexExists.schema.d.ts +3 -0
  14. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/indexExists.schema.js +20 -0
  15. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/indexNotFound.schema.d.ts +3 -0
  16. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/indexNotFound.schema.js +20 -0
  17. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidDatabaseName.schema.d.ts +3 -0
  18. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidDatabaseName.schema.js +18 -0
  19. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidDbConnectionString.schema.d.ts +3 -0
  20. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidDbConnectionString.schema.js +11 -0
  21. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidStore.schema copy.d.ts +3 -0
  22. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidStore.schema copy.js +25 -0
  23. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidStore.schema.d.ts +3 -0
  24. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidStore.schema.js +11 -0
  25. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidStoreName.schema.d.ts +3 -0
  26. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/invalidStoreName.schema.js +25 -0
  27. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/mongoIdMappingError.schema.d.ts +3 -0
  28. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/mongoIdMappingError.schema.js +11 -0
  29. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/record-not-found-query.schema.d.ts +3 -0
  30. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/record-not-found-query.schema.js +15 -0
  31. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/recordNotFound.schema.d.ts +3 -0
  32. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/recordNotFound.schema.js +30 -0
  33. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/scrambleNotConfigured.schema.d.ts +3 -0
  34. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/scrambleNotConfigured.schema.js +11 -0
  35. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unableToConnectToDb.schema.d.ts +3 -0
  36. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unableToConnectToDb.schema.js +11 -0
  37. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unknownDatabaseError.schema.d.ts +3 -0
  38. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unknownDatabaseError.schema.js +18 -0
  39. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unknownError.schema.d.ts +3 -0
  40. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unknownError.schema.js +11 -0
  41. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unknownStoreError.schema.d.ts +3 -0
  42. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/dataStores/unknownStoreError.schema.js +27 -0
  43. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/errors.types.d.ts +383 -0
  44. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/errors.types.js +4 -0
  45. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/options.types.d.ts +58 -0
  46. package/node_modules/@sprucelabs/data-stores/build/.spruce/errors/options.types.js +2 -0
  47. package/node_modules/@sprucelabs/data-stores/build/.spruce/schemas/fields/fieldClassMap.d.ts +2 -0
  48. package/node_modules/@sprucelabs/data-stores/build/.spruce/schemas/fields/fieldClassMap.js +4 -0
  49. package/node_modules/@sprucelabs/data-stores/build/.spruce/schemas/fields/fields.types.d.ts +1 -0
  50. package/node_modules/@sprucelabs/data-stores/build/.spruce/schemas/fields/fields.types.js +2 -0
  51. package/node_modules/@sprucelabs/data-stores/build/.spruce/settings.json +22 -0
  52. package/node_modules/@sprucelabs/data-stores/build/constants.d.ts +1 -0
  53. package/node_modules/@sprucelabs/data-stores/build/constants.js +4 -0
  54. package/node_modules/@sprucelabs/data-stores/build/cursors/CursorPager.d.ts +29 -0
  55. package/node_modules/@sprucelabs/data-stores/build/cursors/CursorPager.js +129 -0
  56. package/node_modules/@sprucelabs/data-stores/build/cursors/CursorPagerFaker.d.ts +6 -0
  57. package/node_modules/@sprucelabs/data-stores/build/cursors/CursorPagerFaker.js +25 -0
  58. package/node_modules/@sprucelabs/data-stores/build/databases/MongoDatabase.d.ts +44 -0
  59. package/node_modules/@sprucelabs/data-stores/build/databases/MongoDatabase.js +432 -0
  60. package/node_modules/@sprucelabs/data-stores/build/databases/NeDbDatabase.d.ts +41 -0
  61. package/node_modules/@sprucelabs/data-stores/build/databases/NeDbDatabase.js +447 -0
  62. package/node_modules/@sprucelabs/data-stores/build/databases/mongo.types.d.ts +3163 -0
  63. package/node_modules/@sprucelabs/data-stores/build/databases/mongo.types.js +50 -0
  64. package/node_modules/@sprucelabs/data-stores/build/errors/SpruceError.d.ts +5 -0
  65. package/node_modules/@sprucelabs/data-stores/build/errors/SpruceError.js +103 -0
  66. package/node_modules/@sprucelabs/data-stores/build/errors/databaseNotConnected.builder.d.ts +15 -0
  67. package/node_modules/@sprucelabs/data-stores/build/errors/databaseNotConnected.builder.js +17 -0
  68. package/node_modules/@sprucelabs/data-stores/build/errors/duplicateKey.builder.d.ts +6 -0
  69. package/node_modules/@sprucelabs/data-stores/build/errors/duplicateKey.builder.js +8 -0
  70. package/node_modules/@sprucelabs/data-stores/build/errors/duplicateRecord.builder.d.ts +28 -0
  71. package/node_modules/@sprucelabs/data-stores/build/errors/duplicateRecord.builder.js +30 -0
  72. package/node_modules/@sprucelabs/data-stores/build/errors/failedToLoadStore.builder.d.ts +12 -0
  73. package/node_modules/@sprucelabs/data-stores/build/errors/failedToLoadStore.builder.js +14 -0
  74. package/node_modules/@sprucelabs/data-stores/build/errors/failedToLoadStores.builder.d.ts +16 -0
  75. package/node_modules/@sprucelabs/data-stores/build/errors/failedToLoadStores.builder.js +21 -0
  76. package/node_modules/@sprucelabs/data-stores/build/errors/indexExists.builder.d.ts +14 -0
  77. package/node_modules/@sprucelabs/data-stores/build/errors/indexExists.builder.js +16 -0
  78. package/node_modules/@sprucelabs/data-stores/build/errors/indexNotFound.builder.d.ts +14 -0
  79. package/node_modules/@sprucelabs/data-stores/build/errors/indexNotFound.builder.js +16 -0
  80. package/node_modules/@sprucelabs/data-stores/build/errors/invalidDatabaseName.builder.d.ts +12 -0
  81. package/node_modules/@sprucelabs/data-stores/build/errors/invalidDatabaseName.builder.js +14 -0
  82. package/node_modules/@sprucelabs/data-stores/build/errors/invalidDbConnectionString.builder.d.ts +7 -0
  83. package/node_modules/@sprucelabs/data-stores/build/errors/invalidDbConnectionString.builder.js +9 -0
  84. package/node_modules/@sprucelabs/data-stores/build/errors/invalidStore.builder.d.ts +6 -0
  85. package/node_modules/@sprucelabs/data-stores/build/errors/invalidStore.builder.js +8 -0
  86. package/node_modules/@sprucelabs/data-stores/build/errors/invalidStoreName.builder.d.ts +16 -0
  87. package/node_modules/@sprucelabs/data-stores/build/errors/invalidStoreName.builder.js +18 -0
  88. package/node_modules/@sprucelabs/data-stores/build/errors/mongoIdMappingError.builder.d.ts +7 -0
  89. package/node_modules/@sprucelabs/data-stores/build/errors/mongoIdMappingError.builder.js +12 -0
  90. package/node_modules/@sprucelabs/data-stores/build/errors/recordNotFound.builder.d.ts +31 -0
  91. package/node_modules/@sprucelabs/data-stores/build/errors/recordNotFound.builder.js +33 -0
  92. package/node_modules/@sprucelabs/data-stores/build/errors/scrambleNotConfigured.builder.d.ts +7 -0
  93. package/node_modules/@sprucelabs/data-stores/build/errors/scrambleNotConfigured.builder.js +12 -0
  94. package/node_modules/@sprucelabs/data-stores/build/errors/unableToConnectToDb.builder.d.ts +7 -0
  95. package/node_modules/@sprucelabs/data-stores/build/errors/unableToConnectToDb.builder.js +9 -0
  96. package/node_modules/@sprucelabs/data-stores/build/errors/unknownDatabaseError.builder.d.ts +12 -0
  97. package/node_modules/@sprucelabs/data-stores/build/errors/unknownDatabaseError.builder.js +14 -0
  98. package/node_modules/@sprucelabs/data-stores/build/errors/unknownError.builder.d.ts +6 -0
  99. package/node_modules/@sprucelabs/data-stores/build/errors/unknownError.builder.js +8 -0
  100. package/node_modules/@sprucelabs/data-stores/build/errors/unknownStoreError.builder.d.ts +19 -0
  101. package/node_modules/@sprucelabs/data-stores/build/errors/unknownStoreError.builder.js +21 -0
  102. package/node_modules/@sprucelabs/data-stores/build/esm/.spruce/errors/errors.types.d.ts +383 -0
  103. package/node_modules/@sprucelabs/data-stores/build/esm/.spruce/errors/errors.types.js +3 -0
  104. package/node_modules/@sprucelabs/data-stores/build/esm/.spruce/errors/options.types.d.ts +58 -0
  105. package/node_modules/@sprucelabs/data-stores/build/esm/.spruce/errors/options.types.js +1 -0
  106. package/node_modules/@sprucelabs/data-stores/build/esm/constants.d.ts +1 -0
  107. package/node_modules/@sprucelabs/data-stores/build/esm/constants.js +1 -0
  108. package/node_modules/@sprucelabs/data-stores/build/esm/cursors/CursorPager.d.ts +29 -0
  109. package/node_modules/@sprucelabs/data-stores/build/esm/cursors/CursorPager.js +134 -0
  110. package/node_modules/@sprucelabs/data-stores/build/esm/cursors/CursorPagerFaker.d.ts +6 -0
  111. package/node_modules/@sprucelabs/data-stores/build/esm/cursors/CursorPagerFaker.js +30 -0
  112. package/node_modules/@sprucelabs/data-stores/build/esm/databases/MongoDatabase.d.ts +44 -0
  113. package/node_modules/@sprucelabs/data-stores/build/esm/databases/MongoDatabase.js +476 -0
  114. package/node_modules/@sprucelabs/data-stores/build/esm/databases/NeDbDatabase.d.ts +41 -0
  115. package/node_modules/@sprucelabs/data-stores/build/esm/databases/NeDbDatabase.js +496 -0
  116. package/node_modules/@sprucelabs/data-stores/build/esm/databases/mongo.types.d.ts +3163 -0
  117. package/node_modules/@sprucelabs/data-stores/build/esm/databases/mongo.types.js +36 -0
  118. package/node_modules/@sprucelabs/data-stores/build/esm/errors/SpruceError.d.ts +5 -0
  119. package/node_modules/@sprucelabs/data-stores/build/esm/errors/SpruceError.js +97 -0
  120. package/node_modules/@sprucelabs/data-stores/build/esm/errors/databaseNotConnected.builder.d.ts +15 -0
  121. package/node_modules/@sprucelabs/data-stores/build/esm/errors/databaseNotConnected.builder.js +15 -0
  122. package/node_modules/@sprucelabs/data-stores/build/esm/errors/duplicateKey.builder.d.ts +6 -0
  123. package/node_modules/@sprucelabs/data-stores/build/esm/errors/duplicateKey.builder.js +6 -0
  124. package/node_modules/@sprucelabs/data-stores/build/esm/errors/duplicateRecord.builder.d.ts +28 -0
  125. package/node_modules/@sprucelabs/data-stores/build/esm/errors/duplicateRecord.builder.js +28 -0
  126. package/node_modules/@sprucelabs/data-stores/build/esm/errors/failedToLoadStore.builder.d.ts +12 -0
  127. package/node_modules/@sprucelabs/data-stores/build/esm/errors/failedToLoadStore.builder.js +12 -0
  128. package/node_modules/@sprucelabs/data-stores/build/esm/errors/failedToLoadStores.builder.d.ts +16 -0
  129. package/node_modules/@sprucelabs/data-stores/build/esm/errors/failedToLoadStores.builder.js +19 -0
  130. package/node_modules/@sprucelabs/data-stores/build/esm/errors/indexExists.builder.d.ts +14 -0
  131. package/node_modules/@sprucelabs/data-stores/build/esm/errors/indexExists.builder.js +14 -0
  132. package/node_modules/@sprucelabs/data-stores/build/esm/errors/indexNotFound.builder.d.ts +14 -0
  133. package/node_modules/@sprucelabs/data-stores/build/esm/errors/indexNotFound.builder.js +14 -0
  134. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidDatabaseName.builder.d.ts +12 -0
  135. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidDatabaseName.builder.js +12 -0
  136. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidDbConnectionString.builder.d.ts +7 -0
  137. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidDbConnectionString.builder.js +7 -0
  138. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidStore.builder.d.ts +6 -0
  139. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidStore.builder.js +6 -0
  140. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidStoreName.builder.d.ts +16 -0
  141. package/node_modules/@sprucelabs/data-stores/build/esm/errors/invalidStoreName.builder.js +16 -0
  142. package/node_modules/@sprucelabs/data-stores/build/esm/errors/mongoIdMappingError.builder.d.ts +7 -0
  143. package/node_modules/@sprucelabs/data-stores/build/esm/errors/mongoIdMappingError.builder.js +10 -0
  144. package/node_modules/@sprucelabs/data-stores/build/esm/errors/recordNotFound.builder.d.ts +31 -0
  145. package/node_modules/@sprucelabs/data-stores/build/esm/errors/recordNotFound.builder.js +31 -0
  146. package/node_modules/@sprucelabs/data-stores/build/esm/errors/scrambleNotConfigured.builder.d.ts +7 -0
  147. package/node_modules/@sprucelabs/data-stores/build/esm/errors/scrambleNotConfigured.builder.js +10 -0
  148. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unableToConnectToDb.builder.d.ts +7 -0
  149. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unableToConnectToDb.builder.js +7 -0
  150. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unknownDatabaseError.builder.d.ts +12 -0
  151. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unknownDatabaseError.builder.js +12 -0
  152. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unknownError.builder.d.ts +6 -0
  153. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unknownError.builder.js +6 -0
  154. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unknownStoreError.builder.d.ts +19 -0
  155. package/node_modules/@sprucelabs/data-stores/build/esm/errors/unknownStoreError.builder.js +19 -0
  156. package/node_modules/@sprucelabs/data-stores/build/esm/factories/DatabaseFactory.d.ts +10 -0
  157. package/node_modules/@sprucelabs/data-stores/build/esm/factories/DatabaseFactory.js +32 -0
  158. package/node_modules/@sprucelabs/data-stores/build/esm/factories/StoreFactory.d.ts +25 -0
  159. package/node_modules/@sprucelabs/data-stores/build/esm/factories/StoreFactory.js +72 -0
  160. package/node_modules/@sprucelabs/data-stores/build/esm/fixtures/DatabaseFixture.d.ts +22 -0
  161. package/node_modules/@sprucelabs/data-stores/build/esm/fixtures/DatabaseFixture.js +99 -0
  162. package/node_modules/@sprucelabs/data-stores/build/esm/fixtures/StoreFixture.d.ts +5 -0
  163. package/node_modules/@sprucelabs/data-stores/build/esm/fixtures/StoreFixture.js +25 -0
  164. package/node_modules/@sprucelabs/data-stores/build/esm/index.d.ts +21 -0
  165. package/node_modules/@sprucelabs/data-stores/build/esm/index.js +21 -0
  166. package/node_modules/@sprucelabs/data-stores/build/esm/loaders/StoreLoader.d.ts +25 -0
  167. package/node_modules/@sprucelabs/data-stores/build/esm/loaders/StoreLoader.js +120 -0
  168. package/node_modules/@sprucelabs/data-stores/build/esm/mutexers/AbstractMutexer.d.ts +6 -0
  169. package/node_modules/@sprucelabs/data-stores/build/esm/mutexers/AbstractMutexer.js +56 -0
  170. package/node_modules/@sprucelabs/data-stores/build/esm/stores/AbstractStore.d.ts +48 -0
  171. package/node_modules/@sprucelabs/data-stores/build/esm/stores/AbstractStore.js +293 -0
  172. package/node_modules/@sprucelabs/data-stores/build/esm/tests/AbstractDatabaseTest.d.ts +12 -0
  173. package/node_modules/@sprucelabs/data-stores/build/esm/tests/AbstractDatabaseTest.js +54 -0
  174. package/node_modules/@sprucelabs/data-stores/build/esm/types/database.types.d.ts +29 -0
  175. package/node_modules/@sprucelabs/data-stores/build/esm/types/database.types.js +1 -0
  176. package/node_modules/@sprucelabs/data-stores/build/esm/types/query.types.d.ts +29 -0
  177. package/node_modules/@sprucelabs/data-stores/build/esm/types/query.types.js +2 -0
  178. package/node_modules/@sprucelabs/data-stores/build/esm/types/stores.types.d.ts +24 -0
  179. package/node_modules/@sprucelabs/data-stores/build/esm/types/stores.types.js +10 -0
  180. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/error.utility.d.ts +5 -0
  181. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/error.utility.js +23 -0
  182. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/generateId.d.ts +1 -0
  183. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/generateId.js +4 -0
  184. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/generateIdDeprecated.d.ts +6 -0
  185. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/generateIdDeprecated.js +6 -0
  186. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/mongo.utility.d.ts +12 -0
  187. package/node_modules/@sprucelabs/data-stores/build/esm/utilities/mongo.utility.js +104 -0
  188. package/node_modules/@sprucelabs/data-stores/build/factories/DatabaseFactory.d.ts +10 -0
  189. package/node_modules/@sprucelabs/data-stores/build/factories/DatabaseFactory.js +38 -0
  190. package/node_modules/@sprucelabs/data-stores/build/factories/StoreFactory.d.ts +25 -0
  191. package/node_modules/@sprucelabs/data-stores/build/factories/StoreFactory.js +65 -0
  192. package/node_modules/@sprucelabs/data-stores/build/fixtures/DatabaseFixture.d.ts +22 -0
  193. package/node_modules/@sprucelabs/data-stores/build/fixtures/DatabaseFixture.js +86 -0
  194. package/node_modules/@sprucelabs/data-stores/build/fixtures/StoreFixture.d.ts +5 -0
  195. package/node_modules/@sprucelabs/data-stores/build/fixtures/StoreFixture.js +20 -0
  196. package/node_modules/@sprucelabs/data-stores/build/index.d.ts +21 -0
  197. package/node_modules/@sprucelabs/data-stores/build/index.js +53 -0
  198. package/node_modules/@sprucelabs/data-stores/build/loaders/StoreLoader.d.ts +25 -0
  199. package/node_modules/@sprucelabs/data-stores/build/loaders/StoreLoader.js +107 -0
  200. package/node_modules/@sprucelabs/data-stores/build/mutexers/AbstractMutexer.d.ts +6 -0
  201. package/node_modules/@sprucelabs/data-stores/build/mutexers/AbstractMutexer.js +46 -0
  202. package/node_modules/@sprucelabs/data-stores/build/stores/AbstractStore.d.ts +48 -0
  203. package/node_modules/@sprucelabs/data-stores/build/stores/AbstractStore.js +285 -0
  204. package/node_modules/@sprucelabs/data-stores/build/tests/AbstractDatabaseTest.d.ts +12 -0
  205. package/node_modules/@sprucelabs/data-stores/build/tests/AbstractDatabaseTest.js +37 -0
  206. package/node_modules/@sprucelabs/data-stores/build/types/database.types.d.ts +29 -0
  207. package/node_modules/@sprucelabs/data-stores/build/types/database.types.js +2 -0
  208. package/node_modules/@sprucelabs/data-stores/build/types/query.types.d.ts +29 -0
  209. package/node_modules/@sprucelabs/data-stores/build/types/query.types.js +3 -0
  210. package/node_modules/@sprucelabs/data-stores/build/types/stores.types.d.ts +24 -0
  211. package/node_modules/@sprucelabs/data-stores/build/types/stores.types.js +13 -0
  212. package/node_modules/@sprucelabs/data-stores/build/utilities/error.utility.d.ts +5 -0
  213. package/node_modules/@sprucelabs/data-stores/build/utilities/error.utility.js +28 -0
  214. package/node_modules/@sprucelabs/data-stores/build/utilities/generateId.d.ts +1 -0
  215. package/node_modules/@sprucelabs/data-stores/build/utilities/generateId.js +7 -0
  216. package/node_modules/@sprucelabs/data-stores/build/utilities/generateIdDeprecated.d.ts +6 -0
  217. package/node_modules/@sprucelabs/data-stores/build/utilities/generateIdDeprecated.js +11 -0
  218. package/node_modules/@sprucelabs/data-stores/build/utilities/mongo.utility.d.ts +12 -0
  219. package/node_modules/@sprucelabs/data-stores/build/utilities/mongo.utility.js +109 -0
  220. package/node_modules/@sprucelabs/data-stores/node_modules/globby/gitignore.js +120 -0
  221. package/node_modules/@sprucelabs/data-stores/node_modules/globby/index.d.ts +186 -0
  222. package/node_modules/@sprucelabs/data-stores/node_modules/globby/index.js +181 -0
  223. package/node_modules/@sprucelabs/data-stores/node_modules/globby/license +9 -0
  224. package/node_modules/@sprucelabs/data-stores/node_modules/globby/package.json +82 -0
  225. package/node_modules/@sprucelabs/data-stores/node_modules/globby/readme.md +170 -0
  226. package/node_modules/@sprucelabs/data-stores/node_modules/globby/stream-utils.js +46 -0
  227. package/node_modules/@sprucelabs/data-stores/package.json +144 -0
  228. package/node_modules/@sprucelabs/data-stores/tsconfig.json +39 -0
  229. package/package.json +27 -27
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const schema_1 = __importStar(require("@sprucelabs/schema"));
41
+ const constants_1 = require("../constants");
42
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
43
+ const AbstractMutexer_1 = __importDefault(require("../mutexers/AbstractMutexer"));
44
+ const stores_types_1 = require("../types/stores.types");
45
+ const error_utility_1 = __importDefault(require("../utilities/error.utility"));
46
+ class AbstractStore extends AbstractMutexer_1.default {
47
+ constructor(db, collectionName) {
48
+ super();
49
+ this.db = db;
50
+ if (collectionName) {
51
+ this.setCollectionName(collectionName);
52
+ }
53
+ }
54
+ setCollectionName(name) {
55
+ this.collectionName = name;
56
+ }
57
+ async prepareAndNormalizeRecord(record, options = {}) {
58
+ const preparedRecord = this.prepareRecord
59
+ ? await this.prepareRecord(record, options)
60
+ : record;
61
+ const isScrambled = this.isScrambled(preparedRecord);
62
+ if (isScrambled) {
63
+ return preparedRecord;
64
+ }
65
+ return (0, schema_1.normalizeSchemaValues)(this.fullSchema, preparedRecord, Object.assign(Object.assign({}, options), { fields: options.includeFields, shouldIncludePrivateFields: options.shouldIncludePrivateFields === true, createEntityInstances: false }));
66
+ }
67
+ async create(values, options) {
68
+ try {
69
+ //@ts-ignore
70
+ values.forEach((v) => (0, schema_1.validateSchemaValues)(this.createSchema, v));
71
+ const cleanedValues = await Promise.all(values.map(async (v) => (this.willCreate ? this.willCreate(v) : v)));
72
+ const databaseRecords = cleanedValues.map((v) => {
73
+ var _a;
74
+ return (Object.assign(Object.assign({}, v), {
75
+ //@ts-ignore
76
+ id: (_a = v.id) !== null && _a !== void 0 ? _a : this.db.generateId() }));
77
+ });
78
+ const toSave = databaseRecords.map((r) => (0, schema_1.normalizeSchemaValues)(this.databaseSchema,
79
+ //@ts-ignore
80
+ r, { shouldCreateEntityInstances: false }));
81
+ const records = await this.db.create(this.collectionName, toSave);
82
+ return Promise.all(records.map(async (record) => this.prepareAndNormalizeRecord(record, options)));
83
+ }
84
+ catch (err) {
85
+ const coded = error_utility_1.default.transformToSpruceErrors(err, new SpruceError_1.default({
86
+ code: 'UNKNOWN_STORE_ERROR',
87
+ storeName: this.name,
88
+ action: 'create',
89
+ originalError: err,
90
+ }));
91
+ throw coded[0];
92
+ }
93
+ }
94
+ async createOne(values, options) {
95
+ var _a, _b;
96
+ try {
97
+ //@ts-ignore
98
+ (0, schema_1.validateSchemaValues)(this.createSchema, values);
99
+ const cleanedValues = this.willCreate
100
+ ? await this.willCreate(values)
101
+ : values;
102
+ const databaseRecord = Object.assign(Object.assign({}, cleanedValues), {
103
+ //@ts-ignore
104
+ id: (_a = cleanedValues.id) !== null && _a !== void 0 ? _a : this.db.generateId() });
105
+ const toSave = (0, schema_1.normalizeSchemaValues)(this.databaseSchema,
106
+ //@ts-ignore
107
+ databaseRecord, { shouldCreateEntityInstances: false });
108
+ const record = await this.db.createOne(this.collectionName, toSave);
109
+ await ((_b = this.didCreate) === null || _b === void 0 ? void 0 : _b.call(this, record));
110
+ const normalized = await this.prepareAndNormalizeRecord(record, options);
111
+ return normalized;
112
+ }
113
+ catch (err) {
114
+ const coded = error_utility_1.default.transformToSpruceErrors(err, new SpruceError_1.default({
115
+ code: 'UNKNOWN_STORE_ERROR',
116
+ storeName: this.name,
117
+ action: 'create',
118
+ originalError: err,
119
+ }));
120
+ throw coded[0];
121
+ }
122
+ }
123
+ async findOne(query, options = {}) {
124
+ const results = await this.find(query, { limit: 1 }, options);
125
+ if (results.length > 0) {
126
+ return results[0];
127
+ }
128
+ return null;
129
+ }
130
+ async count(query) {
131
+ const count = await this.db.count(this.collectionName, query);
132
+ return count;
133
+ }
134
+ async find(query, queryOptions, options) {
135
+ const results = await this.db.find(this.collectionName, query, Object.assign(Object.assign({}, queryOptions), { includeFields: options === null || options === void 0 ? void 0 : options.includeFields }));
136
+ if (results) {
137
+ const all = results.map((result) =>
138
+ //@ts-ignore
139
+ this.prepareAndNormalizeRecord(result, options));
140
+ const records = await Promise.all(all);
141
+ return records;
142
+ }
143
+ return [];
144
+ }
145
+ async upsertOne(query, updates, options) {
146
+ const mutexKey = 'upsertOne';
147
+ await this.lock(mutexKey);
148
+ try {
149
+ const notFoundHandler = async () => {
150
+ const created = await this.createOne(updates, Object.assign(Object.assign({}, options), { shouldIncludePrivateFields: true }));
151
+ //@ts-ignore
152
+ return created;
153
+ };
154
+ const entity = new schema_1.default(this.updateSchema, updates);
155
+ const cleanedUpdates = entity.getValues({
156
+ validate: false,
157
+ //@ts-ignore
158
+ fields: Object.keys(updates),
159
+ createEntityInstances: false,
160
+ });
161
+ if (updates.id) {
162
+ //@ts-ignore
163
+ cleanedUpdates.id = updates.id;
164
+ }
165
+ const results = await this.findOneAndUpdate(query,
166
+ //@ts-ignore
167
+ cleanedUpdates, notFoundHandler, options);
168
+ return results;
169
+ }
170
+ finally {
171
+ this.unlock(mutexKey);
172
+ }
173
+ }
174
+ async updateOne(query, updates, options) {
175
+ const notFoundHandler = async () => {
176
+ throw new SpruceError_1.default({
177
+ code: 'RECORD_NOT_FOUND',
178
+ storeName: this.name,
179
+ query,
180
+ });
181
+ };
182
+ return this.findOneAndUpdate(query, updates, notFoundHandler, options);
183
+ }
184
+ async update(query, updates) {
185
+ return this.db.update(this.collectionName, query, updates);
186
+ }
187
+ async findOneAndUpdate(query, updates, notFoundHandler, options = {}) {
188
+ var _a;
189
+ const { ops, updates: initialUpdates } = this.pluckOperations(updates);
190
+ try {
191
+ const isScrambled = this.isScrambled(initialUpdates);
192
+ let current = await this.findOne(query, Object.assign(Object.assign({}, options), { shouldIncludePrivateFields: true }));
193
+ if (!current) {
194
+ current = await notFoundHandler();
195
+ if (current) {
196
+ return current;
197
+ }
198
+ else {
199
+ throw new Error('Make sure your notFoundHandler returns a record or throws');
200
+ }
201
+ }
202
+ if (!isScrambled) {
203
+ //@ts-ignore
204
+ (0, schema_1.validateSchemaValues)(this.updateSchema, initialUpdates);
205
+ }
206
+ const cleanedUpdates = !isScrambled && this.willUpdate
207
+ ? await this.willUpdate(initialUpdates, current)
208
+ : initialUpdates;
209
+ const databaseRecord = Object.assign(Object.assign({}, current), cleanedUpdates);
210
+ const normalizedValues = isScrambled
211
+ ? databaseRecord
212
+ : (0, schema_1.normalizeSchemaValues)(this.databaseSchema, databaseRecord, {
213
+ shouldCreateEntityInstances: false,
214
+ fields: Object.keys(cleanedUpdates),
215
+ });
216
+ for (const { name, value } of ops) {
217
+ normalizedValues[name] = value;
218
+ }
219
+ const results = await this.db.updateOne(this.collectionName, query, normalizedValues);
220
+ await ((_a = this.didUpdate) === null || _a === void 0 ? void 0 : _a.call(this, current, results));
221
+ return this.prepareAndNormalizeRecord(results, options);
222
+ }
223
+ catch (err) {
224
+ const coded = error_utility_1.default.transformToSpruceErrors(err, new SpruceError_1.default({
225
+ code: 'UNKNOWN_STORE_ERROR',
226
+ storeName: this.name,
227
+ action: 'update',
228
+ originalError: err,
229
+ }));
230
+ throw coded[0];
231
+ }
232
+ }
233
+ pluckOperations(updates) {
234
+ const initialUpdates = __rest(updates, []);
235
+ const ops = stores_types_1.saveOperations
236
+ .map((name) => {
237
+ if (name in initialUpdates) {
238
+ //@ts-ignore
239
+ const value = initialUpdates[name];
240
+ //@ts-ignore
241
+ delete initialUpdates[name];
242
+ return {
243
+ name,
244
+ value,
245
+ };
246
+ }
247
+ return false;
248
+ })
249
+ .filter((o) => !!o);
250
+ return { ops, updates: initialUpdates };
251
+ }
252
+ async scramble(id) {
253
+ if (!this.scrambleFields) {
254
+ throw new SpruceError_1.default({ code: 'SCRAMBLE_NOT_CONFIGURED' });
255
+ }
256
+ const values = await this.generateScrambledRecord();
257
+ //@ts-ignore
258
+ return this.updateOne({ id }, values);
259
+ }
260
+ isScrambled(preparedRecord) {
261
+ return !!preparedRecord._isScrambled;
262
+ }
263
+ async generateScrambledRecord() {
264
+ var _a;
265
+ if (!this.scrambleFields) {
266
+ throw new SpruceError_1.default({ code: 'SCRAMBLE_NOT_CONFIGURED' });
267
+ }
268
+ const scrambledFields = (_a = this.scrambleFields) === null || _a === void 0 ? void 0 : _a.reduce((values, name) => {
269
+ values[name] = constants_1.SCRAMBLE_VALUE;
270
+ return values;
271
+ }, {});
272
+ const record = Object.assign(Object.assign({}, scrambledFields), { _isScrambled: true });
273
+ const cleanedValues = this.willScramble
274
+ ? await this.willScramble(record)
275
+ : record;
276
+ return cleanedValues;
277
+ }
278
+ async deleteOne(query) {
279
+ return await this.db.deleteOne(this.collectionName, query);
280
+ }
281
+ async delete(query) {
282
+ return await this.db.delete(this.collectionName, query);
283
+ }
284
+ }
285
+ exports.default = AbstractStore;
@@ -0,0 +1,12 @@
1
+ import AbstractSpruceTest from '@sprucelabs/test';
2
+ import DatabaseFixture, { DatabaseFixtureOptions } from '../fixtures/DatabaseFixture';
3
+ import { Database } from '../types/database.types';
4
+ export default class AbstractDatabaseTest extends AbstractSpruceTest {
5
+ protected static db: Database;
6
+ protected static shouldUseInMemoryDatabase: boolean;
7
+ protected static DB_NAME: string;
8
+ protected static beforeEach(): Promise<void>;
9
+ protected static afterEach(): Promise<void>;
10
+ protected static DatabaseFixture(options?: DatabaseFixtureOptions): Promise<DatabaseFixture>;
11
+ protected static connectToDatabase(): Promise<Database>;
12
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const schema_1 = require("@sprucelabs/schema");
7
+ const test_1 = __importDefault(require("@sprucelabs/test"));
8
+ const DatabaseFixture_1 = __importDefault(require("../fixtures/DatabaseFixture"));
9
+ class AbstractDatabaseTest extends test_1.default {
10
+ static async beforeEach() {
11
+ await super.beforeEach();
12
+ schema_1.SchemaRegistry.getInstance().forgetAllSchemas();
13
+ }
14
+ static async afterEach() {
15
+ await super.afterEach();
16
+ await DatabaseFixture_1.default.destroy();
17
+ //@ts-ignore
18
+ this.db = undefined;
19
+ //@ts-ignore
20
+ this.DB_NAME = undefined;
21
+ }
22
+ static async DatabaseFixture(options) {
23
+ const d = new DatabaseFixture_1.default(Object.assign({}, options));
24
+ return d;
25
+ }
26
+ static async connectToDatabase() {
27
+ if (!this.db) {
28
+ const dbFixture = await this.DatabaseFixture();
29
+ const db = await dbFixture.connectToDatabase();
30
+ this.DB_NAME = this.shouldUseInMemoryDatabase ? '' : dbFixture.getDbName();
31
+ this.db = db;
32
+ }
33
+ return this.db;
34
+ }
35
+ }
36
+ exports.default = AbstractDatabaseTest;
37
+ AbstractDatabaseTest.shouldUseInMemoryDatabase = true;
@@ -0,0 +1,29 @@
1
+ import { QueryOptions } from './query.types';
2
+ export declare type UniqueIndex = string[];
3
+ export declare type Index = string[];
4
+ export interface Database {
5
+ [x: string]: any;
6
+ syncUniqueIndexes(collectionName: string, indexes: UniqueIndex[]): Promise<void>;
7
+ syncIndexes(collectionName: string, indexes: Index[]): Promise<void>;
8
+ dropIndex(collectionName: string, fields: UniqueIndex): Promise<void>;
9
+ getUniqueIndexes(collectionName: string): Promise<UniqueIndex[]>;
10
+ getIndexes(collectionName: string): Promise<Index[] | UniqueIndex[]>;
11
+ isConnected(): boolean;
12
+ generateId(): string;
13
+ connect(): Promise<void>;
14
+ close(): Promise<void>;
15
+ createOne(collection: string, values: Record<string, any>): Promise<Record<string, any>>;
16
+ create(collection: string, values: Record<string, any>[]): Promise<Record<string, any>[]>;
17
+ dropCollection(name: string): Promise<void>;
18
+ dropDatabase(): Promise<void>;
19
+ findOne(collection: string, query?: Record<string, any>, options?: QueryOptions): Promise<Record<string, any> | null>;
20
+ find(collection: string, query?: Record<string, any>, options?: QueryOptions): Promise<Record<string, any>[]>;
21
+ updateOne(collection: string, query: Record<string, any>, updates: Record<string, any>): Promise<Record<string, any>>;
22
+ update(collection: string, query: Record<string, any>, updates: Record<string, any>): Promise<number>;
23
+ upsertOne(collection: string, query: Record<string, any>, updates: Record<string, any>): Promise<Record<string, any>>;
24
+ delete(collection: string, query: Record<string, any>): Promise<number>;
25
+ deleteOne(collection: string, query: Record<string, any>): Promise<number>;
26
+ count(collection: string, query?: Record<string, any>): Promise<number>;
27
+ createUniqueIndex(collection: string, fields: UniqueIndex): Promise<void>;
28
+ createIndex(collection: string, fields: Index): Promise<void>;
29
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,29 @@
1
+ import { QuerySelector } from '../databases/mongo.types';
2
+ declare type QueryPredicate<Query, K extends keyof Query> = Query[K] | QuerySelector<Query[K]> | string;
3
+ declare type Obj = Record<string, any>;
4
+ export declare type QueryBuilder<Query extends Obj> = {
5
+ [K in keyof Query]?: QueryPredicate<Query, K>;
6
+ } & {
7
+ id?: string | QuerySelector<string>;
8
+ };
9
+ export interface QueryOptions {
10
+ skip?: number;
11
+ limit?: number;
12
+ sort?: {
13
+ field: string;
14
+ direction: 'asc' | 'desc';
15
+ }[];
16
+ includeFields?: string[];
17
+ }
18
+ export declare type FlattenAndPathKeys<O extends Obj, T extends Obj = PathKeys<O>> = Flatten<T>;
19
+ export declare type Flatten<T extends Obj> = Pick<T, NonObjectKeysOf<T>> & UnionToIntersection<ObjectValuesOf<T>>;
20
+ export declare type PathKeys<Query extends Obj, prefix extends string = ''> = {
21
+ [K in Extract<keyof Query, string> as `${prefix}${K}`]: Query[K] extends Obj ? PathKeys<Query[K], `${K}.`> : Query[K];
22
+ };
23
+ declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
24
+ declare type ValuesOf<T> = T[keyof T];
25
+ declare type ObjectValuesOf<T> = Exclude<Extract<ValuesOf<T>, object>, Array<any>>;
26
+ declare type NonObjectKeysOf<T> = {
27
+ [K in keyof T]: T[K] extends Array<any> ? K : T[K] extends Obj ? never : K;
28
+ }[keyof T];
29
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/ban-types */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,24 @@
1
+ import { Schema, SchemaFieldNames, SchemaPublicValues, SchemaValues } from '@sprucelabs/schema';
2
+ import StoreFactory from '../factories/StoreFactory';
3
+ import { Database } from './database.types';
4
+ export declare const saveOperations: readonly ["$push", "$inc", "$min", "$max", "$mul", "$push", "$pull", "$pop"];
5
+ export declare type SaveOperation = typeof saveOperations[number];
6
+ export declare type SaveOperations = Partial<Record<SaveOperation, Record<string, any>>>;
7
+ export interface UniversalStoreOptions {
8
+ db: Database;
9
+ storeFactory: StoreFactory;
10
+ }
11
+ export interface Store {
12
+ initialize?(): Promise<void>;
13
+ }
14
+ export interface StoreMap {
15
+ }
16
+ export interface StoreOptionsMap {
17
+ }
18
+ export interface PrepareOptions<IncludePrivateFields extends boolean, S extends Schema, FieldNames extends SchemaFieldNames<S> = SchemaFieldNames<S>> {
19
+ shouldIncludePrivateFields?: IncludePrivateFields;
20
+ includeFields?: FieldNames[];
21
+ }
22
+ export declare type PrepareResults<S extends Schema, IncludePrivateFields extends boolean> = IncludePrivateFields extends true ? SchemaPublicValues<S> : SchemaValues<S>;
23
+ export declare type StoreName = keyof StoreMap;
24
+ export declare type StoreOptions<Name extends StoreName> = Name extends keyof StoreOptionsMap ? StoreOptionsMap[Name] : Record<string, never>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.saveOperations = void 0;
4
+ exports.saveOperations = [
5
+ '$push',
6
+ '$inc',
7
+ '$min',
8
+ '$max',
9
+ '$mul',
10
+ '$push',
11
+ '$pull',
12
+ '$pop',
13
+ ];
@@ -0,0 +1,5 @@
1
+ import SpruceError from '../errors/SpruceError';
2
+ declare const errorUtil: {
3
+ transformToSpruceErrors(err: SpruceError | Error | Record<string, any>, fallbackErrorWhenUnableToMapToSpruceError?: SpruceError): SpruceError[];
4
+ };
5
+ export default errorUtil;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const error_1 = __importDefault(require("@sprucelabs/error"));
7
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
8
+ const errorUtil = {
9
+ transformToSpruceErrors(err, fallbackErrorWhenUnableToMapToSpruceError) {
10
+ if (err instanceof error_1.default) {
11
+ return [err];
12
+ }
13
+ else if (!(err instanceof Error)) {
14
+ const e = error_1.default.parse(err, SpruceError_1.default);
15
+ return [e];
16
+ }
17
+ const fallback = err instanceof error_1.default
18
+ ? [err]
19
+ : [
20
+ fallbackErrorWhenUnableToMapToSpruceError !== null && fallbackErrorWhenUnableToMapToSpruceError !== void 0 ? fallbackErrorWhenUnableToMapToSpruceError : new SpruceError_1.default({
21
+ code: 'UNKNOWN_ERROR',
22
+ originalError: err,
23
+ }),
24
+ ];
25
+ return fallback;
26
+ },
27
+ };
28
+ exports.default = errorUtil;
@@ -0,0 +1 @@
1
+ export default function generateId(): string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mongodb_1 = require("mongodb");
4
+ function generateId() {
5
+ return new mongodb_1.ObjectId().toString();
6
+ }
7
+ exports.default = generateId;
@@ -0,0 +1,6 @@
1
+ import generateId from './generateId';
2
+ /**
3
+ * @deprecated change generateId to use @sprucelabs/spruce-test-utils generateId
4
+ */
5
+ declare const generateIdDeprecated: typeof generateId;
6
+ export default generateIdDeprecated;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const generateId_1 = __importDefault(require("./generateId"));
7
+ /**
8
+ * @deprecated change generateId to use @sprucelabs/spruce-test-utils generateId
9
+ */
10
+ const generateIdDeprecated = generateId_1.default;
11
+ exports.default = generateIdDeprecated;
@@ -0,0 +1,12 @@
1
+ import { FindOneOptions } from '../databases/mongo.types';
2
+ import { QueryOptions } from '../types/query.types';
3
+ declare const mongoUtil: {
4
+ mapQuery(query: Record<string, any>, options?: {
5
+ shouldTransformToObjectId?: boolean;
6
+ }): {
7
+ [x: string]: any;
8
+ };
9
+ prepareUpdates(updates: Record<string, any>): Record<string, any>;
10
+ queryOptionsToMongoFindOptions(options?: QueryOptions): FindOneOptions<any>;
11
+ };
12
+ export default mongoUtil;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const mongodb_1 = require("mongodb");
18
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
19
+ const mongoUtil = {
20
+ mapQuery(query, options = {}) {
21
+ const q = query || {};
22
+ const opts = options;
23
+ if (Object.prototype.hasOwnProperty.call(q, 'id') && q.id === undefined) {
24
+ throw new SpruceError_1.default({
25
+ code: 'MONGO_ID_MAPPING_ERROR',
26
+ friendlyMessage: '`id` cannot be undefined',
27
+ });
28
+ }
29
+ const { id, $or, $and } = q, rest = __rest(q, ["id", "$or", "$and"]);
30
+ let normalizedValues = rest;
31
+ if (Array.isArray($and)) {
32
+ normalizedValues.$and = $and.map((a) => this.mapQuery(a, options));
33
+ }
34
+ if (Array.isArray($or)) {
35
+ normalizedValues.$or = $or.map((o) => this.mapQuery(o, options));
36
+ }
37
+ else if (typeof id === 'string') {
38
+ normalizedValues._id =
39
+ opts.shouldTransformToObjectId === false ? id : new mongodb_1.ObjectId(id);
40
+ }
41
+ else if (id) {
42
+ normalizedValues._id = mapNestedIdValues(id, options);
43
+ }
44
+ return normalizedValues;
45
+ },
46
+ prepareUpdates(updates) {
47
+ let hasDollarSigns = !!Object.keys(updates).find((key) => key[0] === '$');
48
+ const values = hasDollarSigns ? updates : { $set: updates };
49
+ return values;
50
+ },
51
+ queryOptionsToMongoFindOptions(options) {
52
+ const _a = options || {}, { sort, includeFields: fields = [] } = _a, rest = __rest(_a, ["sort", "includeFields"]);
53
+ const mappedOptions = Object.assign({}, rest);
54
+ if (fields.length > 0) {
55
+ mappedOptions.projection = {
56
+ _id: 0,
57
+ };
58
+ for (const field of fields) {
59
+ mappedOptions.projection[field === 'id' ? '_id' : field] = 1;
60
+ }
61
+ }
62
+ if (sort) {
63
+ let mongoSort = {};
64
+ sort.forEach((sort) => (mongoSort[sort.field === 'id' ? '_id' : sort.field] =
65
+ sort.direction === 'asc' ? 1 : -1));
66
+ mappedOptions.sort = mongoSort;
67
+ }
68
+ return mappedOptions;
69
+ },
70
+ };
71
+ function mapNestedIdValues(id, options = {}) {
72
+ const mapped = {};
73
+ Object.keys(id).forEach((key) => {
74
+ if (['$gt', '$lt', '$gte', '$lte', '$ne'].indexOf(key) > -1) {
75
+ mapped[key] =
76
+ options.shouldTransformToObjectId === false
77
+ ? id[key]
78
+ : new mongodb_1.ObjectId(id[key]);
79
+ }
80
+ else {
81
+ if (!id[key] || !id[key].map) {
82
+ throw new SpruceError_1.default({
83
+ code: 'MONGO_ID_MAPPING_ERROR',
84
+ friendlyMessage: `Invalid query, id: { ${key} } must be an array.`,
85
+ });
86
+ }
87
+ mapped[key] = id[key].map((value) => {
88
+ if (typeof value === 'string') {
89
+ try {
90
+ return options.shouldTransformToObjectId === false
91
+ ? value
92
+ : new mongodb_1.ObjectId(value);
93
+ }
94
+ catch (err) {
95
+ throw new SpruceError_1.default({
96
+ code: 'MONGO_ID_MAPPING_ERROR',
97
+ friendlyMessage: `Could not map '${value}' to an id.`,
98
+ });
99
+ }
100
+ }
101
+ else {
102
+ return mapNestedIdValues(value);
103
+ }
104
+ });
105
+ }
106
+ });
107
+ return mapped;
108
+ }
109
+ exports.default = mongoUtil;