@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.
- package/build/.spruce/errors/dataStores/invalidConnectionStringScheme.schema.d.ts +3 -0
- package/build/.spruce/errors/dataStores/invalidConnectionStringScheme.schema.js +18 -0
- package/build/.spruce/errors/errors.types.d.ts +19 -0
- package/build/.spruce/errors/options.types.d.ts +4 -1
- package/build/databases/MongoDatabase.d.ts +2 -6
- package/build/errors/SpruceError.js +3 -0
- package/build/errors/invalidConnectionStringSchema.builder.d.ts +11 -0
- package/build/errors/invalidConnectionStringSchema.builder.js +13 -0
- package/build/esm/.spruce/errors/errors.types.d.ts +19 -0
- package/build/esm/.spruce/errors/options.types.d.ts +4 -1
- package/build/esm/databases/MongoDatabase.d.ts +2 -6
- package/build/esm/errors/SpruceError.js +3 -0
- package/build/esm/errors/invalidConnectionStringSchema.builder.d.ts +11 -0
- package/build/esm/errors/invalidConnectionStringSchema.builder.js +11 -0
- package/build/esm/factories/DatabaseFactory.d.ts +4 -1
- package/build/esm/factories/DatabaseFactory.js +18 -4
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/tests/databaseAssertUtil.d.ts +75 -0
- package/build/esm/tests/databaseAssertUtil.js +1339 -0
- package/build/esm/tests/pluckAssertionMethods.d.ts +2 -0
- package/build/esm/tests/pluckAssertionMethods.js +3 -0
- package/build/esm/types/database.types.d.ts +5 -0
- package/build/factories/DatabaseFactory.d.ts +4 -1
- package/build/factories/DatabaseFactory.js +18 -4
- package/build/index.d.ts +1 -0
- package/build/index.js +3 -1
- package/build/tests/databaseAssertUtil.d.ts +75 -0
- package/build/tests/databaseAssertUtil.js +1199 -0
- package/build/tests/pluckAssertionMethods.d.ts +2 -0
- package/build/tests/pluckAssertionMethods.js +6 -0
- package/build/types/database.types.d.ts +5 -0
- 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")[];
|
|
@@ -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
|
-
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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;
|