@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,38 @@
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 MongoDatabase_1 = __importDefault(require("../databases/MongoDatabase"));
8
+ const NeDbDatabase_1 = __importDefault(require("../databases/NeDbDatabase"));
9
+ class DatabaseFactory {
10
+ constructor() { }
11
+ static Database(options) {
12
+ const { dbName, dbConnectionString } = options;
13
+ let database;
14
+ if (!dbConnectionString) {
15
+ throw new schema_1.SchemaError({
16
+ code: 'MISSING_PARAMETERS',
17
+ parameters: ['dbConnectionString'],
18
+ friendlyMessage: "DatabaseFactory can't connect to the database! Setting env.DB_CONNECTION_STRING may help!",
19
+ });
20
+ }
21
+ const cacheKey = options.dbName + options.dbConnectionString;
22
+ if (!this.cache[cacheKey]) {
23
+ if (dbConnectionString.startsWith('memory')) {
24
+ database = new NeDbDatabase_1.default();
25
+ }
26
+ else {
27
+ database = new MongoDatabase_1.default(dbConnectionString, { dbName });
28
+ }
29
+ this.cache[cacheKey] = database;
30
+ }
31
+ return this.cache[cacheKey];
32
+ }
33
+ static reset() {
34
+ this.cache = {};
35
+ }
36
+ }
37
+ exports.default = DatabaseFactory;
38
+ DatabaseFactory.cache = {};
@@ -0,0 +1,25 @@
1
+ import { Database } from '../types/database.types';
2
+ import { Store, StoreMap, StoreName, StoreOptions } from '../types/stores.types';
3
+ interface StoreContructor {
4
+ Store(o: any): Promise<Store> | Store;
5
+ }
6
+ export default class StoreFactory {
7
+ private storeMap;
8
+ private db;
9
+ private static initializations;
10
+ private stores;
11
+ private constructor();
12
+ static Factory(db: Database): StoreFactory;
13
+ /**
14
+ * @deprecated stores.Store(..) -> stores.getStore(...)
15
+ * This change has big speed improvements. This factory method
16
+ * will never be removed, but hopefully won't be needed often.
17
+ */
18
+ Store<Name extends StoreName, Options extends StoreOptions<Name>>(name: Name, options?: Options): Promise<StoreMap[Name]>;
19
+ getStoreNames(): StoreName[];
20
+ setStoreClass(name: string, TestStore: StoreContructor): void;
21
+ setStore(name: StoreName, store: Store): void;
22
+ getStore<Name extends StoreName>(name: Name): Promise<StoreMap[Name]>;
23
+ static reset(): void;
24
+ }
25
+ export {};
@@ -0,0 +1,65 @@
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 spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
7
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
8
+ class StoreFactory {
9
+ constructor(db) {
10
+ this.storeMap = {};
11
+ this.stores = {};
12
+ this.db = db;
13
+ }
14
+ static Factory(db) {
15
+ return new this(db);
16
+ }
17
+ /**
18
+ * @deprecated stores.Store(..) -> stores.getStore(...)
19
+ * This change has big speed improvements. This factory method
20
+ * will never be removed, but hopefully won't be needed often.
21
+ */
22
+ async Store(name, options) {
23
+ var _a;
24
+ const Store = this.storeMap[name];
25
+ if (Store) {
26
+ if (!Store.Store) {
27
+ throw new SpruceError_1.default({
28
+ code: 'INVALID_STORE',
29
+ friendlyMessage: `You have to have ${spruce_skill_utils_1.namesUtil.toPascal(name)}.Store(options: UniversalStoreOptions) factory method on your store that returns \`new this(...)\`.`,
30
+ });
31
+ }
32
+ const instance = await Store.Store(Object.assign({ db: this.db, storeFactory: this }, options));
33
+ if (!StoreFactory.initializations[name]) {
34
+ StoreFactory.initializations[name] = true;
35
+ await ((_a = instance.initialize) === null || _a === void 0 ? void 0 : _a.call(instance));
36
+ }
37
+ return instance;
38
+ }
39
+ throw new SpruceError_1.default({
40
+ code: 'INVALID_STORE_NAME',
41
+ suppliedName: name,
42
+ validNames: this.getStoreNames(),
43
+ });
44
+ }
45
+ getStoreNames() {
46
+ return Object.keys(this.storeMap);
47
+ }
48
+ setStoreClass(name, TestStore) {
49
+ this.storeMap[name] = TestStore;
50
+ }
51
+ setStore(name, store) {
52
+ this.stores[name] = store;
53
+ }
54
+ async getStore(name) {
55
+ if (!this.stores[name]) {
56
+ this.stores[name] = await this.Store(name);
57
+ }
58
+ return this.stores[name];
59
+ }
60
+ static reset() {
61
+ this.initializations = {};
62
+ }
63
+ }
64
+ exports.default = StoreFactory;
65
+ StoreFactory.initializations = {};
@@ -0,0 +1,22 @@
1
+ import { Database } from '../types/database.types';
2
+ export interface DatabaseFixtureOptions {
3
+ dbConnectionString?: string;
4
+ dbName?: string;
5
+ }
6
+ export default class DatabaseFixture {
7
+ private static dbCount;
8
+ private dbName?;
9
+ private static activeDatabases;
10
+ private dbConnectionString?;
11
+ private static defaultOptions?;
12
+ constructor(options?: DatabaseFixtureOptions);
13
+ connectToDatabase(): Promise<Database>;
14
+ private static connect;
15
+ static setDefaultConnectOptions(options: DatabaseFixtureOptions): void;
16
+ static generateDbName(): string;
17
+ getDbName(): string;
18
+ static destroy(): Promise<void>;
19
+ static beforeAll(): void;
20
+ static beforeEach(): Promise<void>;
21
+ static afterEach(): Promise<void>;
22
+ }
@@ -0,0 +1,86 @@
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 MongoDatabase_1 = require("../databases/MongoDatabase");
8
+ const DatabaseFactory_1 = __importDefault(require("../factories/DatabaseFactory"));
9
+ const MEMORY = 'memory://';
10
+ class DatabaseFixture {
11
+ constructor(options) {
12
+ const { dbConnectionString = MEMORY, dbName } = Object.assign(Object.assign({}, DatabaseFixture.defaultOptions), options);
13
+ const missing = [];
14
+ if (!dbConnectionString) {
15
+ missing.push('dbConnectionString');
16
+ }
17
+ if (!dbName && dbConnectionString !== MEMORY) {
18
+ missing.push('dbName');
19
+ }
20
+ if (missing.length > 0) {
21
+ throw new schema_1.SchemaError({
22
+ code: 'MISSING_PARAMETERS',
23
+ parameters: missing,
24
+ });
25
+ }
26
+ this.dbName = dbName;
27
+ this.dbConnectionString = dbConnectionString;
28
+ }
29
+ async connectToDatabase() {
30
+ const options = {};
31
+ if (this.dbConnectionString && this.dbName) {
32
+ options.dbConnectionString = this.dbConnectionString;
33
+ options.dbName = this.dbName;
34
+ }
35
+ else if (this.dbConnectionString) {
36
+ options.dbConnectionString = this.dbConnectionString;
37
+ }
38
+ else {
39
+ options.dbName = this.dbName = DatabaseFixture.generateDbName();
40
+ options.dbConnectionString = MongoDatabase_1.MONGO_TEST_URI;
41
+ }
42
+ const database = await DatabaseFixture.connect(options);
43
+ return database;
44
+ }
45
+ static async connect(options) {
46
+ const database = DatabaseFactory_1.default.Database(options);
47
+ await database.connect();
48
+ DatabaseFixture.activeDatabases.push(database);
49
+ return database;
50
+ }
51
+ static setDefaultConnectOptions(options) {
52
+ this.defaultOptions = options;
53
+ }
54
+ static generateDbName() {
55
+ return `mercury_${new Date().getTime()}-${this.dbCount++}`;
56
+ }
57
+ getDbName() {
58
+ if (!this.dbName) {
59
+ throw new Error('You need to connect to the database using `shouldUseInMemoryDatabase=false` before accessing dbName.');
60
+ }
61
+ return this.dbName;
62
+ }
63
+ static async destroy() {
64
+ if (this.defaultOptions && this.activeDatabases.length === 0) {
65
+ await DatabaseFixture.connect(this.defaultOptions);
66
+ }
67
+ for (const db of this.activeDatabases) {
68
+ if (db.isConnected()) {
69
+ await db.dropDatabase();
70
+ await db.close();
71
+ }
72
+ }
73
+ this.activeDatabases = [];
74
+ DatabaseFactory_1.default.reset();
75
+ }
76
+ static beforeAll() { }
77
+ static async beforeEach() {
78
+ await this.destroy();
79
+ }
80
+ static async afterEach() {
81
+ await this.destroy();
82
+ }
83
+ }
84
+ exports.default = DatabaseFixture;
85
+ DatabaseFixture.dbCount = 0;
86
+ DatabaseFixture.activeDatabases = [];
@@ -0,0 +1,5 @@
1
+ export default class StoreFixture {
2
+ private activeDir;
3
+ constructor(activeDir: string);
4
+ Factory(): Promise<import("..").StoreFactory>;
5
+ }
@@ -0,0 +1,20 @@
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 StoreLoader_1 = __importDefault(require("../loaders/StoreLoader"));
7
+ const DatabaseFixture_1 = __importDefault(require("./DatabaseFixture"));
8
+ class StoreFixture {
9
+ constructor(activeDir) {
10
+ this.activeDir = activeDir;
11
+ }
12
+ async Factory() {
13
+ const dbFixture = new DatabaseFixture_1.default();
14
+ const db = await dbFixture.connectToDatabase();
15
+ const loader = await StoreLoader_1.default.Loader(this.activeDir, db);
16
+ const factory = await loader.loadStores();
17
+ return factory;
18
+ }
19
+ }
20
+ exports.default = StoreFixture;
@@ -0,0 +1,21 @@
1
+ export { default as AbstractDatabaseTest } from './tests/AbstractDatabaseTest';
2
+ export { default as DatabaseFixture } from './fixtures/DatabaseFixture';
3
+ export * from './fixtures/DatabaseFixture';
4
+ export { default as AbstractStore } from './stores/AbstractStore';
5
+ export { default as StoreFactory } from './factories/StoreFactory';
6
+ export { default as DatabaseFactory } from './factories/DatabaseFactory';
7
+ export { default as StoreLoader } from './loaders/StoreLoader';
8
+ export { default as MongoDatabase } from './databases/MongoDatabase';
9
+ export * from './databases/MongoDatabase';
10
+ export { default as NeDbDatabase } from './databases/NeDbDatabase';
11
+ export { default as mongoUtil } from './utilities/mongo.utility';
12
+ export * from './databases/NeDbDatabase';
13
+ export * from './types/database.types';
14
+ export * from './types/query.types';
15
+ export * from './types/stores.types';
16
+ export * from './constants';
17
+ export { default as generateId } from './utilities/generateIdDeprecated';
18
+ export { default as CursorPager } from './cursors/CursorPager';
19
+ export * from './cursors/CursorPager';
20
+ export { default as CursorPagerFaker } from './cursors/CursorPagerFaker';
21
+ export * from './cursors/CursorPager';
@@ -0,0 +1,53 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.CursorPagerFaker = exports.CursorPager = exports.generateId = exports.mongoUtil = exports.NeDbDatabase = exports.MongoDatabase = exports.StoreLoader = exports.DatabaseFactory = exports.StoreFactory = exports.AbstractStore = exports.DatabaseFixture = exports.AbstractDatabaseTest = void 0;
21
+ var AbstractDatabaseTest_1 = require("./tests/AbstractDatabaseTest");
22
+ Object.defineProperty(exports, "AbstractDatabaseTest", { enumerable: true, get: function () { return __importDefault(AbstractDatabaseTest_1).default; } });
23
+ var DatabaseFixture_1 = require("./fixtures/DatabaseFixture");
24
+ Object.defineProperty(exports, "DatabaseFixture", { enumerable: true, get: function () { return __importDefault(DatabaseFixture_1).default; } });
25
+ __exportStar(require("./fixtures/DatabaseFixture"), exports);
26
+ var AbstractStore_1 = require("./stores/AbstractStore");
27
+ Object.defineProperty(exports, "AbstractStore", { enumerable: true, get: function () { return __importDefault(AbstractStore_1).default; } });
28
+ var StoreFactory_1 = require("./factories/StoreFactory");
29
+ Object.defineProperty(exports, "StoreFactory", { enumerable: true, get: function () { return __importDefault(StoreFactory_1).default; } });
30
+ var DatabaseFactory_1 = require("./factories/DatabaseFactory");
31
+ Object.defineProperty(exports, "DatabaseFactory", { enumerable: true, get: function () { return __importDefault(DatabaseFactory_1).default; } });
32
+ var StoreLoader_1 = require("./loaders/StoreLoader");
33
+ Object.defineProperty(exports, "StoreLoader", { enumerable: true, get: function () { return __importDefault(StoreLoader_1).default; } });
34
+ var MongoDatabase_1 = require("./databases/MongoDatabase");
35
+ Object.defineProperty(exports, "MongoDatabase", { enumerable: true, get: function () { return __importDefault(MongoDatabase_1).default; } });
36
+ __exportStar(require("./databases/MongoDatabase"), exports);
37
+ var NeDbDatabase_1 = require("./databases/NeDbDatabase");
38
+ Object.defineProperty(exports, "NeDbDatabase", { enumerable: true, get: function () { return __importDefault(NeDbDatabase_1).default; } });
39
+ var mongo_utility_1 = require("./utilities/mongo.utility");
40
+ Object.defineProperty(exports, "mongoUtil", { enumerable: true, get: function () { return __importDefault(mongo_utility_1).default; } });
41
+ __exportStar(require("./databases/NeDbDatabase"), exports);
42
+ __exportStar(require("./types/database.types"), exports);
43
+ __exportStar(require("./types/query.types"), exports);
44
+ __exportStar(require("./types/stores.types"), exports);
45
+ __exportStar(require("./constants"), exports);
46
+ var generateIdDeprecated_1 = require("./utilities/generateIdDeprecated");
47
+ Object.defineProperty(exports, "generateId", { enumerable: true, get: function () { return __importDefault(generateIdDeprecated_1).default; } });
48
+ var CursorPager_1 = require("./cursors/CursorPager");
49
+ Object.defineProperty(exports, "CursorPager", { enumerable: true, get: function () { return __importDefault(CursorPager_1).default; } });
50
+ __exportStar(require("./cursors/CursorPager"), exports);
51
+ var CursorPagerFaker_1 = require("./cursors/CursorPagerFaker");
52
+ Object.defineProperty(exports, "CursorPagerFaker", { enumerable: true, get: function () { return __importDefault(CursorPagerFaker_1).default; } });
53
+ __exportStar(require("./cursors/CursorPager"), exports);
@@ -0,0 +1,25 @@
1
+ import AbstractSpruceError from '@sprucelabs/error';
2
+ import { FailedToLoadStoreErrorOptions } from "./../.spruce/errors/options.types";
3
+ import StoreFactory from '../factories/StoreFactory';
4
+ import { Database } from '../types/database.types';
5
+ declare type StoreLoadError = AbstractSpruceError<FailedToLoadStoreErrorOptions>;
6
+ export default class StoreLoader {
7
+ private activeDir;
8
+ private db;
9
+ private static instance;
10
+ private static defaultStoreDir;
11
+ private static defaultDb;
12
+ private constructor();
13
+ static setStoreDir(dir: string): void;
14
+ static setDatabase(db: Database): void;
15
+ static Loader(activeDir: string, db: Database): Promise<StoreLoader>;
16
+ static getInstance(cwd?: string, database?: Database): Promise<StoreLoader>;
17
+ loadStores(): Promise<StoreFactory>;
18
+ loadStoresAndErrors(): Promise<{
19
+ factory: StoreFactory;
20
+ errors: StoreLoadError[];
21
+ }>;
22
+ private loadStoreClassesWithErrors;
23
+ static clearInstance(): void;
24
+ }
25
+ export {};
@@ -0,0 +1,107 @@
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 path_1 = __importDefault(require("path"));
7
+ const schema_1 = require("@sprucelabs/schema");
8
+ const spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
9
+ const globby_1 = __importDefault(require("globby"));
10
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
11
+ const StoreFactory_1 = __importDefault(require("../factories/StoreFactory"));
12
+ class StoreLoader {
13
+ constructor(activeDir, db) {
14
+ this.activeDir = activeDir;
15
+ this.db = db;
16
+ }
17
+ static setStoreDir(dir) {
18
+ this.defaultStoreDir = dir;
19
+ }
20
+ static setDatabase(db) {
21
+ this.defaultDb = db;
22
+ }
23
+ static async Loader(activeDir, db) {
24
+ return new this(activeDir, db);
25
+ }
26
+ static async getInstance(cwd, database) {
27
+ const dir = cwd !== null && cwd !== void 0 ? cwd : this.defaultStoreDir;
28
+ const db = database !== null && database !== void 0 ? database : this.defaultDb;
29
+ const missing = [];
30
+ if (!dir) {
31
+ missing.push('cwd');
32
+ }
33
+ if (!db) {
34
+ missing.push('database');
35
+ }
36
+ if (missing.length > 0) {
37
+ throw new schema_1.SchemaError({
38
+ code: 'MISSING_PARAMETERS',
39
+ parameters: missing,
40
+ });
41
+ }
42
+ const normalizedDir = dir.replace(/\/$/, '');
43
+ if (!this.instance[normalizedDir]) {
44
+ this.instance[normalizedDir] = this.Loader(normalizedDir, db);
45
+ }
46
+ return this.instance[normalizedDir];
47
+ }
48
+ async loadStores() {
49
+ const { factory, errors } = await this.loadStoresAndErrors();
50
+ if (errors.length > 0) {
51
+ throw new SpruceError_1.default({ code: 'FAILED_TO_LOAD_STORES', errors });
52
+ }
53
+ return factory;
54
+ }
55
+ async loadStoresAndErrors() {
56
+ const { stores, errors } = await this.loadStoreClassesWithErrors();
57
+ const factory = StoreFactory_1.default.Factory(this.db);
58
+ for (const store of stores) {
59
+ factory.setStoreClass(spruce_skill_utils_1.namesUtil.toCamel(store.namePascal), store.Class);
60
+ }
61
+ return { factory, errors };
62
+ }
63
+ async loadStoreClassesWithErrors() {
64
+ var _a, _b;
65
+ const combinedFile = spruce_skill_utils_1.diskUtil.resolveFile(this.activeDir, spruce_skill_utils_1.HASH_SPRUCE_DIR_NAME, 'stores', 'stores');
66
+ if (!combinedFile) {
67
+ return { stores: [], errors: [] };
68
+ }
69
+ const errors = [];
70
+ const Stores = [];
71
+ try {
72
+ const map = require(combinedFile).default;
73
+ Object.keys(map).forEach((k) => {
74
+ Stores.push({
75
+ Class: map[k],
76
+ namePascal: k,
77
+ });
78
+ });
79
+ }
80
+ catch (_c) {
81
+ const pattern = spruce_skill_utils_1.diskUtil.resolvePath(this.activeDir, '**', '*.store.[j|t]s');
82
+ const matches = await (0, globby_1.default)(pattern);
83
+ for (const match of matches) {
84
+ const namePascal = (_b = (_a = match.split(path_1.default.sep).pop()) === null || _a === void 0 ? void 0 : _a.split('.store').shift()) !== null && _b !== void 0 ? _b : 'MISSING';
85
+ try {
86
+ const Class = require(match).default;
87
+ Stores.push({ namePascal, Class });
88
+ }
89
+ catch (err) {
90
+ const spruceError = new SpruceError_1.default({
91
+ code: 'FAILED_TO_LOAD_STORE',
92
+ originalError: err,
93
+ name: namePascal,
94
+ });
95
+ //@ts-ignore
96
+ errors.push(spruceError);
97
+ }
98
+ }
99
+ }
100
+ return { stores: Stores, errors };
101
+ }
102
+ static clearInstance() {
103
+ this.instance = {};
104
+ }
105
+ }
106
+ exports.default = StoreLoader;
107
+ StoreLoader.instance = {};
@@ -0,0 +1,6 @@
1
+ export default abstract class AbstractMutexer {
2
+ private mutexesByKey;
3
+ lock(key: string): Promise<void>;
4
+ unlock(key: string): void;
5
+ isLocked(key: string): Promise<boolean>;
6
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class AbstractMutexer {
4
+ constructor() {
5
+ this.mutexesByKey = {};
6
+ }
7
+ async lock(key) {
8
+ if (!this.mutexesByKey[key]) {
9
+ this.mutexesByKey[key] = {
10
+ promises: [],
11
+ resolvers: [],
12
+ count: 0,
13
+ };
14
+ }
15
+ this.mutexesByKey[key].count++;
16
+ if (this.mutexesByKey[key].count === 1) {
17
+ this.mutexesByKey[key].promises.push(new Promise((resolve) => resolve(undefined)));
18
+ this.mutexesByKey[key].resolvers.push(() => { });
19
+ }
20
+ else {
21
+ const resolver = (resolve) => {
22
+ this.mutexesByKey[key].resolvers.push(resolve);
23
+ };
24
+ const promise = new Promise(resolver);
25
+ this.mutexesByKey[key].promises.push(promise);
26
+ }
27
+ return this.mutexesByKey[key].promises[this.mutexesByKey[key].count - 1];
28
+ }
29
+ unlock(key) {
30
+ if (this.mutexesByKey[key]) {
31
+ this.mutexesByKey[key].promises.shift();
32
+ this.mutexesByKey[key].resolvers.shift();
33
+ this.mutexesByKey[key].count--;
34
+ if (this.mutexesByKey[key].count === 0) {
35
+ delete this.mutexesByKey[key];
36
+ }
37
+ else {
38
+ this.mutexesByKey[key].resolvers[0]();
39
+ }
40
+ }
41
+ }
42
+ async isLocked(key) {
43
+ return !!this.mutexesByKey[key];
44
+ }
45
+ }
46
+ exports.default = AbstractMutexer;
@@ -0,0 +1,48 @@
1
+ import { DynamicSchemaAllValues, Schema, IsDynamicSchema, SchemaAllValues, SchemaFieldNames, SchemaPartialValues, SchemaPublicFieldNames, SchemaPublicValues, SchemaValues } from '@sprucelabs/schema';
2
+ import AbstractMutexer from '../mutexers/AbstractMutexer';
3
+ import { Database } from '../types/database.types';
4
+ import { QueryBuilder, QueryOptions } from '../types/query.types';
5
+ import { PrepareOptions, PrepareResults, SaveOperations } from '../types/stores.types';
6
+ declare type Response<FullSchema extends Schema, CreateEntityInstances extends boolean, IncludePrivateFields extends boolean, PF extends SchemaPublicFieldNames<FullSchema>, F extends SchemaFieldNames<FullSchema>> = IsDynamicSchema<FullSchema> extends true ? DynamicSchemaAllValues<FullSchema, CreateEntityInstances> : IncludePrivateFields extends false ? Pick<SchemaPublicValues<FullSchema, CreateEntityInstances>, PF> : Pick<SchemaAllValues<FullSchema, CreateEntityInstances>, F>;
7
+ export default abstract class AbstractStore<FullSchema extends Schema, CreateSchema extends Schema = FullSchema, UpdateSchema extends Schema = CreateSchema, DatabaseSchema extends Schema = FullSchema, DatabaseRecord = SchemaValues<DatabaseSchema> & {
8
+ id: string;
9
+ }, QueryRecord = SchemaPartialValues<FullSchema>, FullRecord = SchemaValues<FullSchema>, CreateRecord = SchemaValues<CreateSchema>, UpdateRecord = SchemaValues<UpdateSchema> & SaveOperations> extends AbstractMutexer {
10
+ abstract readonly name: string;
11
+ protected abstract collectionName: string;
12
+ protected abstract createSchema: CreateSchema;
13
+ protected abstract updateSchema: UpdateSchema;
14
+ protected abstract fullSchema: FullSchema;
15
+ protected abstract databaseSchema: DatabaseSchema;
16
+ protected scrambleFields?: string[];
17
+ protected db: Database;
18
+ initialize?(): Promise<void>;
19
+ protected prepareRecord?<IncludePrivateFields extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(record: DatabaseRecord, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<PrepareResults<FullSchema, IncludePrivateFields>>;
20
+ protected willCreate?(values: CreateRecord): Promise<Omit<DatabaseRecord, 'id'>>;
21
+ protected didCreate?(values: CreateRecord): Promise<void>;
22
+ protected willUpdate?(updates: UpdateRecord, values: DatabaseRecord): Promise<Partial<DatabaseRecord>>;
23
+ protected didUpdate?(old: DatabaseRecord, updated: DatabaseRecord): Promise<void>;
24
+ protected willScramble?(values: Partial<DatabaseRecord> & {
25
+ _isScrambled: true;
26
+ }): Promise<Partial<DatabaseRecord>>;
27
+ protected constructor(db: Database, collectionName?: string);
28
+ private setCollectionName;
29
+ protected prepareAndNormalizeRecord<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(record: any, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
30
+ create<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(values: CreateRecord[], options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>[]>;
31
+ createOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(values: CreateRecord, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Response<FullSchema, false, CreateEntityInstances, SchemaPublicFieldNames<FullSchema>, F>>;
32
+ findOne<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Response<FullSchema, false, CreateEntityInstances, SchemaPublicFieldNames<FullSchema>, F> | null>;
33
+ count(query?: QueryBuilder<QueryRecord>): Promise<number>;
34
+ find<CreateEntityInstances extends boolean, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, queryOptions?: Omit<QueryOptions, 'includeFields'>, options?: PrepareOptions<CreateEntityInstances, FullSchema, F>): Promise<Awaited<Response<FullSchema, false, CreateEntityInstances, SchemaPublicFieldNames<FullSchema>, F>>[]>;
35
+ upsertOne<IncludePrivateFields extends boolean = true, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, updates: UpdateRecord & CreateRecord & {
36
+ id?: string;
37
+ }, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
38
+ updateOne<IncludePrivateFields extends boolean = false, CreateEntityInstances extends boolean = false, F extends SchemaFieldNames<FullSchema> = SchemaFieldNames<FullSchema>, PF extends SchemaPublicFieldNames<FullSchema> = SchemaPublicFieldNames<FullSchema>>(query: QueryBuilder<QueryRecord>, updates: UpdateRecord, options?: PrepareOptions<IncludePrivateFields, FullSchema, F>): Promise<Response<FullSchema, CreateEntityInstances, IncludePrivateFields, PF, F>>;
39
+ update(query: QueryBuilder<QueryRecord>, updates: UpdateRecord): Promise<number>;
40
+ private findOneAndUpdate;
41
+ private pluckOperations;
42
+ scramble(id: string): Promise<Response<FullSchema, false, false, SchemaPublicFieldNames<FullSchema>, Extract<keyof FullSchema["fields"], string>>>;
43
+ private isScrambled;
44
+ private generateScrambledRecord;
45
+ deleteOne(query: QueryBuilder<QueryRecord>): Promise<number>;
46
+ delete(query: QueryBuilder<QueryRecord>): Promise<number>;
47
+ }
48
+ export {};