@sprucelabs/data-stores 19.1.67 → 19.2.0

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 (33) hide show
  1. package/build/.spruce/errors/dataStores/invalidConnectionStringScheme.schema.d.ts +3 -0
  2. package/build/.spruce/errors/dataStores/invalidConnectionStringScheme.schema.js +18 -0
  3. package/build/.spruce/errors/errors.types.d.ts +19 -0
  4. package/build/.spruce/errors/options.types.d.ts +4 -1
  5. package/build/databases/MongoDatabase.d.ts +2 -6
  6. package/build/errors/SpruceError.js +3 -0
  7. package/build/errors/invalidConnectionStringSchema.builder.d.ts +11 -0
  8. package/build/errors/invalidConnectionStringSchema.builder.js +13 -0
  9. package/build/esm/.spruce/errors/errors.types.d.ts +19 -0
  10. package/build/esm/.spruce/errors/options.types.d.ts +4 -1
  11. package/build/esm/databases/MongoDatabase.d.ts +2 -6
  12. package/build/esm/errors/SpruceError.js +3 -0
  13. package/build/esm/errors/invalidConnectionStringSchema.builder.d.ts +11 -0
  14. package/build/esm/errors/invalidConnectionStringSchema.builder.js +11 -0
  15. package/build/esm/factories/DatabaseFactory.d.ts +4 -1
  16. package/build/esm/factories/DatabaseFactory.js +18 -4
  17. package/build/esm/index.d.ts +1 -0
  18. package/build/esm/index.js +1 -0
  19. package/build/esm/tests/databaseAssertUtil.d.ts +75 -0
  20. package/build/esm/tests/databaseAssertUtil.js +1339 -0
  21. package/build/esm/tests/pluckAssertionMethods.d.ts +2 -0
  22. package/build/esm/tests/pluckAssertionMethods.js +3 -0
  23. package/build/esm/types/database.types.d.ts +5 -0
  24. package/build/factories/DatabaseFactory.d.ts +4 -1
  25. package/build/factories/DatabaseFactory.js +18 -4
  26. package/build/index.d.ts +1 -0
  27. package/build/index.js +3 -1
  28. package/build/tests/databaseAssertUtil.d.ts +75 -0
  29. package/build/tests/databaseAssertUtil.js +1199 -0
  30. package/build/tests/pluckAssertionMethods.d.ts +2 -0
  31. package/build/tests/pluckAssertionMethods.js +6 -0
  32. package/build/types/database.types.d.ts +5 -0
  33. package/package.json +3 -3
@@ -0,0 +1,2 @@
1
+ import databaseAssertUtil from './databaseAssertUtil';
2
+ export default function pluckAssertionMethods(util: typeof databaseAssertUtil): ("collectionName" | "runSuite" | "_getFilteredIndexes" | "_filterIdIndex" | "_assertUpdateUpdatedRightNumberOfRecords" | "assertCanSortDesc" | "assertCanSortAsc" | "assertInsertingGeneratesId" | "assertThrowsWhenUpdatingRecordNotFound" | "shutdown" | "assertCanCreateUniqueIndex" | "assertHasNoUniqueIndexToStart" | "assertCanShutdown" | "assertCanDeleteOne" | "assertCanDeleteRecord" | "assertCanLimitResultsToZero" | "assertCanLimitResults" | "assertFindOneOnEmptyDatabaseReturnsNull" | "assertEmptyDatabaseReturnsEmptyArray" | "assertCanPushOntoArrayValue" | "assertCanCreateMany" | "assertCanUpdateMany" | "assertCanQueryWithOr" | "assertCanUpdate" | "assertCanSortById" | "assertCanCreateMultiFieldUniqueIndex" | "assertSettingUniqueIndexViolationThrowsSpruceError" | "assertDuplicateKeyThrowsOnInsert" | "assertSyncingIndexesDoesNotAddAndRemove" | "assertSyncingUniqueIndexesRemovesExtraIndexes" | "assertSyncingUniqueIndexsSkipsExistingIndexs" | "assertSyncingUniqueIndexsAddsMissingIndexes" | "assertCantDropCompoundUniqueIndexThatDoesntExist" | "assertCantDropIndexWhenNoIndexExists" | "assertCantDropUniqueIndexThatDoesntExist" | "assertCanDropCompoundUniqueIndex" | "assertCanDropUniqueIndex" | "assertCantCreateUniqueIndexTwice" | "assertSyncingUniqueIndexesIsRaceProof" | "assertUniqueIndexBlocksDuplicates" | "assertCanCreateUniqueIndexOnNestedField" | "assertCanPushToArrayOnUpsert" | "assertCanSearchByRegex" | "assertCanReturnOnlySelectFields" | "assertThrowsWithoutDatabaseName" | "assertThrowsWhenCantConnect" | "assertThrowsWithInvalidConnectionString" | "assertKnowsIfConnectionClosed" | "assertCanQueryPathWithDotSyntax" | "assertCanQueryByGtLtGteLte" | "assertCanFindWithNe" | "assertCanFindWithIn" | "assertCanCountOnId" | "assertCanCount" | "assertCanUpsertNull" | "assertCanSaveAndGetNullAndUndefined" | "assertSyncIndexesDoesNotRemoveExisting" | "assertSyncIndexesRemovesExtraIndexes" | "assertSyncIndexesSkipsExisting" | "assertCantDropCompoundIndexThatDoesNotExist" | "assertCanDropCompoundIndex" | "assertCanDropIndex" | "assertCanCreateMultiFieldIndex" | "assertCantCreateSameIndexTwice" | "assertCanCreateIndex" | "assertHasNoIndexToStart" | "assertNestedFieldIndexUpdates" | "assertUpsertWithUniqueIndex" | "assertSyncIndexesHandlesRaceConditions" | "assertDuplicateFieldsWithMultipleUniqueIndexesWorkAsExpected")[];
@@ -0,0 +1,3 @@
1
+ export default function pluckAssertionMethods(util) {
2
+ return Object.keys(util).filter((key) => key.startsWith('assert'));
3
+ }
@@ -1,3 +1,4 @@
1
+ import { Log } from '@sprucelabs/spruce-skill-utils';
1
2
  import { QueryOptions } from './query.types';
2
3
  export type UniqueIndex = string[];
3
4
  export type Index = string[];
@@ -27,3 +28,7 @@ export interface Database {
27
28
  createUniqueIndex(collection: string, fields: UniqueIndex): Promise<void>;
28
29
  createIndex(collection: string, fields: Index): Promise<void>;
29
30
  }
31
+ export interface DatabaseOptions {
32
+ dbName?: string;
33
+ log?: Log;
34
+ }
@@ -1,7 +1,9 @@
1
- import { Database } from '../types/database.types';
1
+ import { Database, DatabaseOptions } from '../types/database.types';
2
2
  export default class DatabaseFactory {
3
3
  private static cache;
4
+ private static Adapters;
4
5
  private constructor();
6
+ static addAdapter(scheme: string, Adapter: DatabaseConstructor): void;
5
7
  static Database(options: {
6
8
  dbName?: string;
7
9
  dbConnectionString: string;
@@ -9,3 +11,4 @@ export default class DatabaseFactory {
9
11
  private static generateCacheKey;
10
12
  static reset(): void;
11
13
  }
14
+ export type DatabaseConstructor = new (connectionString: string, options: DatabaseOptions) => Database;
@@ -6,8 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const schema_1 = require("@sprucelabs/schema");
7
7
  const MongoDatabase_1 = __importDefault(require("../databases/MongoDatabase"));
8
8
  const NeDbDatabase_1 = __importDefault(require("../databases/NeDbDatabase"));
9
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
9
10
  class DatabaseFactory {
10
11
  constructor() { }
12
+ static addAdapter(scheme, Adapter) {
13
+ this.Adapters[scheme] = Adapter;
14
+ }
11
15
  static Database(options) {
12
16
  const { dbName, dbConnectionString } = options;
13
17
  let database;
@@ -20,11 +24,17 @@ class DatabaseFactory {
20
24
  }
21
25
  const cacheKey = this.generateCacheKey(options);
22
26
  if (!this.cache[cacheKey]) {
23
- if (dbConnectionString.startsWith('memory')) {
24
- database = new NeDbDatabase_1.default();
27
+ for (const [key, Adapter] of Object.entries(this.Adapters)) {
28
+ if (dbConnectionString.startsWith(key)) {
29
+ database = new Adapter(dbConnectionString, { dbName });
30
+ break;
31
+ }
25
32
  }
26
- else {
27
- database = new MongoDatabase_1.default(dbConnectionString, { dbName });
33
+ if (!database) {
34
+ throw new SpruceError_1.default({
35
+ code: 'INVALID_CONNECTION_STRING_SCHEME',
36
+ connectionString: dbConnectionString,
37
+ });
28
38
  }
29
39
  this.cache[cacheKey] = database;
30
40
  }
@@ -45,3 +55,7 @@ class DatabaseFactory {
45
55
  }
46
56
  exports.default = DatabaseFactory;
47
57
  DatabaseFactory.cache = {};
58
+ DatabaseFactory.Adapters = {
59
+ 'mongodb://': MongoDatabase_1.default,
60
+ 'memory://': NeDbDatabase_1.default,
61
+ };
package/build/index.d.ts CHANGED
@@ -19,3 +19,4 @@ export { default as CursorPager } from './cursors/CursorPager';
19
19
  export * from './cursors/CursorPager';
20
20
  export { default as CursorPagerFaker } from './cursors/CursorPagerFaker';
21
21
  export * from './cursors/CursorPager';
22
+ export { default as databaseAssertUtil } from './tests/databaseAssertUtil';
package/build/index.js CHANGED
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
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;
20
+ exports.databaseAssertUtil = 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
21
  var AbstractDatabaseTest_1 = require("./tests/AbstractDatabaseTest");
22
22
  Object.defineProperty(exports, "AbstractDatabaseTest", { enumerable: true, get: function () { return __importDefault(AbstractDatabaseTest_1).default; } });
23
23
  var DatabaseFixture_1 = require("./fixtures/DatabaseFixture");
@@ -51,3 +51,5 @@ __exportStar(require("./cursors/CursorPager"), exports);
51
51
  var CursorPagerFaker_1 = require("./cursors/CursorPagerFaker");
52
52
  Object.defineProperty(exports, "CursorPagerFaker", { enumerable: true, get: function () { return __importDefault(CursorPagerFaker_1).default; } });
53
53
  __exportStar(require("./cursors/CursorPager"), exports);
54
+ var databaseAssertUtil_1 = require("./tests/databaseAssertUtil");
55
+ Object.defineProperty(exports, "databaseAssertUtil", { enumerable: true, get: function () { return __importDefault(databaseAssertUtil_1).default; } });
@@ -0,0 +1,75 @@
1
+ import { Connect } from '../__tests__/behavioral/database/Database.test';
2
+ import { Database, Index, UniqueIndex } from '../types/database.types';
3
+ declare const databaseAssertUtil: {
4
+ collectionName: string;
5
+ runSuite(connect: Connect): Promise<void>;
6
+ _getFilteredIndexes(db: Database): Promise<UniqueIndex[] | Index[]>;
7
+ _filterIdIndex(allIndexes: UniqueIndex[] | Index[]): UniqueIndex[] | Index[];
8
+ _assertUpdateUpdatedRightNumberOfRecords(db: Database, search: Record<string, any>, updates: Record<string, any>, expectedUpdateCount: number): Promise<void>;
9
+ assertCanSortDesc(connect: Connect): Promise<void>;
10
+ assertCanSortAsc(connect: Connect): Promise<void>;
11
+ assertInsertingGeneratesId(connect: Connect): Promise<void>;
12
+ assertThrowsWhenUpdatingRecordNotFound(connect: Connect): Promise<void>;
13
+ shutdown(db: Database): Promise<void>;
14
+ assertCanCreateUniqueIndex(connect: Connect): Promise<void>;
15
+ assertHasNoUniqueIndexToStart(connect: Connect): Promise<void>;
16
+ assertCanShutdown(connect: Connect): Promise<void>;
17
+ assertCanDeleteOne(connect: Connect): Promise<void>;
18
+ assertCanDeleteRecord(connect: Connect): Promise<void>;
19
+ assertCanLimitResultsToZero(connect: Connect): Promise<void>;
20
+ assertCanLimitResults(connect: Connect): Promise<void>;
21
+ assertFindOneOnEmptyDatabaseReturnsNull(connect: Connect): Promise<void>;
22
+ assertEmptyDatabaseReturnsEmptyArray(connect: Connect): Promise<void>;
23
+ assertCanPushOntoArrayValue(connect: Connect): Promise<void>;
24
+ assertCanCreateMany(connect: Connect): Promise<void>;
25
+ assertCanUpdateMany(connect: Connect): Promise<void>;
26
+ assertCanQueryWithOr(connect: Connect): Promise<void>;
27
+ assertCanUpdate(connect: Connect): Promise<void>;
28
+ assertCanSortById(connect: Connect): Promise<void>;
29
+ assertCanCreateMultiFieldUniqueIndex(connect: Connect): Promise<void>;
30
+ assertSettingUniqueIndexViolationThrowsSpruceError(connect: Connect): Promise<void>;
31
+ assertDuplicateKeyThrowsOnInsert(connect: Connect): Promise<void>;
32
+ assertSyncingIndexesDoesNotAddAndRemove(connect: Connect): Promise<void>;
33
+ assertSyncingUniqueIndexesRemovesExtraIndexes(connect: Connect): Promise<void>;
34
+ assertSyncingUniqueIndexsSkipsExistingIndexs(connect: Connect): Promise<void>;
35
+ assertSyncingUniqueIndexsAddsMissingIndexes(connect: Connect): Promise<void>;
36
+ assertCantDropCompoundUniqueIndexThatDoesntExist(connect: Connect): Promise<void>;
37
+ assertCantDropIndexWhenNoIndexExists(connect: Connect): Promise<void>;
38
+ assertCantDropUniqueIndexThatDoesntExist(connect: Connect): Promise<void>;
39
+ assertCanDropCompoundUniqueIndex(connect: Connect): Promise<void>;
40
+ assertCanDropUniqueIndex(connect: Connect): Promise<void>;
41
+ assertCantCreateUniqueIndexTwice(connect: Connect): Promise<void>;
42
+ assertSyncingUniqueIndexesIsRaceProof(connect: Connect): Promise<void>;
43
+ assertUniqueIndexBlocksDuplicates(connect: Connect): Promise<void>;
44
+ assertCanCreateUniqueIndexOnNestedField(connect: Connect): Promise<void>;
45
+ assertCanPushToArrayOnUpsert(connect: Connect): Promise<void>;
46
+ assertCanSearchByRegex(connect: Connect): Promise<void>;
47
+ assertCanReturnOnlySelectFields(connect: Connect): Promise<void>;
48
+ assertThrowsWithoutDatabaseName(connect: Connect): Promise<void>;
49
+ assertThrowsWhenCantConnect(connect: Connect): Promise<void>;
50
+ assertThrowsWithInvalidConnectionString(connect: Connect): Promise<void>;
51
+ assertKnowsIfConnectionClosed(connect: Connect): Promise<void>;
52
+ assertCanQueryPathWithDotSyntax(connect: Connect): Promise<void>;
53
+ assertCanQueryByGtLtGteLte(connect: Connect): Promise<void>;
54
+ assertCanFindWithNe(connect: Connect): Promise<void>;
55
+ assertCanFindWithIn(connect: Connect): Promise<void>;
56
+ assertCanCountOnId(connect: Connect): Promise<void>;
57
+ assertCanCount(connect: Connect): Promise<void>;
58
+ assertCanUpsertNull(connect: Connect): Promise<void>;
59
+ assertCanSaveAndGetNullAndUndefined(connect: Connect): Promise<void>;
60
+ assertSyncIndexesDoesNotRemoveExisting(connect: Connect): Promise<void>;
61
+ assertSyncIndexesRemovesExtraIndexes(connect: Connect): Promise<void>;
62
+ assertSyncIndexesSkipsExisting(connect: Connect): Promise<void>;
63
+ assertCantDropCompoundIndexThatDoesNotExist(connect: Connect): Promise<void>;
64
+ assertCanDropCompoundIndex(connect: Connect): Promise<void>;
65
+ assertCanDropIndex(connect: Connect): Promise<void>;
66
+ assertCanCreateMultiFieldIndex(connect: Connect, fields: any): Promise<void>;
67
+ assertCantCreateSameIndexTwice(connect: Connect): Promise<void>;
68
+ assertCanCreateIndex(connect: Connect): Promise<void>;
69
+ assertHasNoIndexToStart(connect: Connect): Promise<void>;
70
+ assertNestedFieldIndexUpdates(connect: Connect): Promise<void>;
71
+ assertUpsertWithUniqueIndex(connect: Connect): Promise<void>;
72
+ assertSyncIndexesHandlesRaceConditions(connect: Connect): Promise<void>;
73
+ assertDuplicateFieldsWithMultipleUniqueIndexesWorkAsExpected(connect: Connect): Promise<void>;
74
+ };
75
+ export default databaseAssertUtil;