@sprucelabs/data-stores 28.3.281 → 28.4.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/esm/factories/StoreFactory.d.ts +9 -6
- package/build/esm/factories/StoreFactory.js +8 -2
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/stores/MockStoreFactory.d.ts +7 -0
- package/build/esm/stores/MockStoreFactory.js +25 -0
- package/build/factories/StoreFactory.d.ts +9 -6
- package/build/factories/StoreFactory.js +8 -2
- package/build/index.d.ts +1 -0
- package/build/index.js +3 -1
- package/build/stores/MockStoreFactory.d.ts +7 -0
- package/build/stores/MockStoreFactory.js +20 -0
- package/package.json +3 -3
@@ -1,14 +1,13 @@
|
|
1
1
|
import { Database } from '../types/database.types';
|
2
2
|
import { DataStore, StoreMap, StoreName, StoreOptions } from '../types/stores.types';
|
3
|
-
interface StoreContructor {
|
4
|
-
Store(o: any): Promise<DataStore> | DataStore;
|
5
|
-
}
|
6
3
|
export default class StoreFactory {
|
7
|
-
|
8
|
-
private db;
|
4
|
+
static Class?: new (db: Database) => StoreFactory;
|
9
5
|
private static initializations;
|
6
|
+
protected storeMap: Record<string, StoreContructor>;
|
7
|
+
protected databasesByStoreName: Record<string, Database>;
|
8
|
+
private db;
|
10
9
|
private stores;
|
11
|
-
|
10
|
+
protected constructor(db: Database);
|
12
11
|
static Factory(db: Database): StoreFactory;
|
13
12
|
Store<Name extends StoreName, Options extends StoreOptions<Name>>(name: Name, options?: Options): Promise<StoreMap[Name]>;
|
14
13
|
getStoreNames(): StoreName[];
|
@@ -16,5 +15,9 @@ export default class StoreFactory {
|
|
16
15
|
setStore(name: StoreName, store: DataStore | null): void;
|
17
16
|
getStore<Name extends StoreName>(name: Name): Promise<StoreMap[Name]>;
|
18
17
|
static reset(): void;
|
18
|
+
setDatabaseForStore<Name extends StoreName>(name: Name, db: Database): void;
|
19
|
+
}
|
20
|
+
interface StoreContructor {
|
21
|
+
Store(o: any): Promise<DataStore> | DataStore;
|
19
22
|
}
|
20
23
|
export {};
|
@@ -12,11 +12,13 @@ import SpruceError from '../errors/SpruceError.js';
|
|
12
12
|
class StoreFactory {
|
13
13
|
constructor(db) {
|
14
14
|
this.storeMap = {};
|
15
|
+
this.databasesByStoreName = {};
|
15
16
|
this.stores = {};
|
16
17
|
this.db = db;
|
17
18
|
}
|
18
19
|
static Factory(db) {
|
19
|
-
|
20
|
+
var _a;
|
21
|
+
return new ((_a = this.Class) !== null && _a !== void 0 ? _a : this)(db);
|
20
22
|
}
|
21
23
|
Store(name, options) {
|
22
24
|
return __awaiter(this, void 0, void 0, function* () {
|
@@ -29,7 +31,8 @@ class StoreFactory {
|
|
29
31
|
friendlyMessage: `You have to have ${namesUtil.toPascal(name)}.Store(options: UniversalStoreOptions) factory method on your store that returns \`new this(...)\`.`,
|
30
32
|
});
|
31
33
|
}
|
32
|
-
const
|
34
|
+
const db = this.databasesByStoreName[name] || this.db;
|
35
|
+
const instance = yield Store.Store(Object.assign({ db, storeFactory: this }, options));
|
33
36
|
if (!StoreFactory.initializations[name]) {
|
34
37
|
StoreFactory.initializations[name] = true;
|
35
38
|
yield ((_a = instance.initialize) === null || _a === void 0 ? void 0 : _a.call(instance));
|
@@ -63,6 +66,9 @@ class StoreFactory {
|
|
63
66
|
static reset() {
|
64
67
|
this.initializations = {};
|
65
68
|
}
|
69
|
+
setDatabaseForStore(name, db) {
|
70
|
+
this.databasesByStoreName[name] = db;
|
71
|
+
}
|
66
72
|
}
|
67
73
|
StoreFactory.initializations = {};
|
68
74
|
export default StoreFactory;
|
package/build/esm/index.d.ts
CHANGED
@@ -4,6 +4,7 @@ export * from './fixtures/DatabaseFixture';
|
|
4
4
|
export { default as AbstractStore } from './stores/AbstractStore';
|
5
5
|
export { default as StoreFactory } from './factories/StoreFactory';
|
6
6
|
export { default as DatabaseFactory } from './factories/DatabaseFactory';
|
7
|
+
export { default as MockStoreFactory } from './stores/MockStoreFactory';
|
7
8
|
export { default as StoreLoader } from './loaders/StoreLoader';
|
8
9
|
export { default as MongoDatabase } from './databases/MongoDatabase';
|
9
10
|
export * from './databases/MongoDatabase';
|
package/build/esm/index.js
CHANGED
@@ -4,6 +4,7 @@ export * from './fixtures/DatabaseFixture.js';
|
|
4
4
|
export { default as AbstractStore } from './stores/AbstractStore.js';
|
5
5
|
export { default as StoreFactory } from './factories/StoreFactory.js';
|
6
6
|
export { default as DatabaseFactory } from './factories/DatabaseFactory.js';
|
7
|
+
export { default as MockStoreFactory } from './stores/MockStoreFactory.js';
|
7
8
|
export { default as StoreLoader } from './loaders/StoreLoader.js';
|
8
9
|
export { default as MongoDatabase } from './databases/MongoDatabase.js';
|
9
10
|
export * from './databases/MongoDatabase.js';
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import StoreFactory from '../factories/StoreFactory';
|
2
|
+
import { Database } from '../types/database.types';
|
3
|
+
import { StoreName } from '../types/stores.types';
|
4
|
+
export default class MockStoreFactory extends StoreFactory {
|
5
|
+
constructor(db: Database);
|
6
|
+
assertDatabaseForStoreInstanceOf<Name extends StoreName>(name: Name, Class: new (...opts: any[]) => Database): Promise<void>;
|
7
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import { assert } from '@sprucelabs/test-utils';
|
11
|
+
import StoreFactory from '../factories/StoreFactory.js';
|
12
|
+
export default class MockStoreFactory extends StoreFactory {
|
13
|
+
constructor(db) {
|
14
|
+
super(db);
|
15
|
+
}
|
16
|
+
assertDatabaseForStoreInstanceOf(name, Class) {
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
18
|
+
if (!this.storeMap[name]) {
|
19
|
+
assert.fail(`I could not find a store named ${name}. Did you create it with 'spruce create.store'?`);
|
20
|
+
}
|
21
|
+
const store = yield this.getStore(name);
|
22
|
+
assert.isInstanceOf(store.getDb(), Class, `Database for '${name}' store is not set correctly. Try 'stores.setDatabaseForStore(...)`);
|
23
|
+
});
|
24
|
+
}
|
25
|
+
}
|
@@ -1,14 +1,13 @@
|
|
1
1
|
import { Database } from '../types/database.types';
|
2
2
|
import { DataStore, StoreMap, StoreName, StoreOptions } from '../types/stores.types';
|
3
|
-
interface StoreContructor {
|
4
|
-
Store(o: any): Promise<DataStore> | DataStore;
|
5
|
-
}
|
6
3
|
export default class StoreFactory {
|
7
|
-
|
8
|
-
private db;
|
4
|
+
static Class?: new (db: Database) => StoreFactory;
|
9
5
|
private static initializations;
|
6
|
+
protected storeMap: Record<string, StoreContructor>;
|
7
|
+
protected databasesByStoreName: Record<string, Database>;
|
8
|
+
private db;
|
10
9
|
private stores;
|
11
|
-
|
10
|
+
protected constructor(db: Database);
|
12
11
|
static Factory(db: Database): StoreFactory;
|
13
12
|
Store<Name extends StoreName, Options extends StoreOptions<Name>>(name: Name, options?: Options): Promise<StoreMap[Name]>;
|
14
13
|
getStoreNames(): StoreName[];
|
@@ -16,5 +15,9 @@ export default class StoreFactory {
|
|
16
15
|
setStore(name: StoreName, store: DataStore | null): void;
|
17
16
|
getStore<Name extends StoreName>(name: Name): Promise<StoreMap[Name]>;
|
18
17
|
static reset(): void;
|
18
|
+
setDatabaseForStore<Name extends StoreName>(name: Name, db: Database): void;
|
19
|
+
}
|
20
|
+
interface StoreContructor {
|
21
|
+
Store(o: any): Promise<DataStore> | DataStore;
|
19
22
|
}
|
20
23
|
export {};
|
@@ -8,11 +8,13 @@ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
|
|
8
8
|
class StoreFactory {
|
9
9
|
constructor(db) {
|
10
10
|
this.storeMap = {};
|
11
|
+
this.databasesByStoreName = {};
|
11
12
|
this.stores = {};
|
12
13
|
this.db = db;
|
13
14
|
}
|
14
15
|
static Factory(db) {
|
15
|
-
|
16
|
+
var _a;
|
17
|
+
return new ((_a = this.Class) !== null && _a !== void 0 ? _a : this)(db);
|
16
18
|
}
|
17
19
|
async Store(name, options) {
|
18
20
|
var _a;
|
@@ -24,7 +26,8 @@ class StoreFactory {
|
|
24
26
|
friendlyMessage: `You have to have ${spruce_skill_utils_1.namesUtil.toPascal(name)}.Store(options: UniversalStoreOptions) factory method on your store that returns \`new this(...)\`.`,
|
25
27
|
});
|
26
28
|
}
|
27
|
-
const
|
29
|
+
const db = this.databasesByStoreName[name] || this.db;
|
30
|
+
const instance = await Store.Store(Object.assign({ db, storeFactory: this }, options));
|
28
31
|
if (!StoreFactory.initializations[name]) {
|
29
32
|
StoreFactory.initializations[name] = true;
|
30
33
|
await ((_a = instance.initialize) === null || _a === void 0 ? void 0 : _a.call(instance));
|
@@ -55,6 +58,9 @@ class StoreFactory {
|
|
55
58
|
static reset() {
|
56
59
|
this.initializations = {};
|
57
60
|
}
|
61
|
+
setDatabaseForStore(name, db) {
|
62
|
+
this.databasesByStoreName[name] = db;
|
63
|
+
}
|
58
64
|
}
|
59
65
|
StoreFactory.initializations = {};
|
60
66
|
exports.default = StoreFactory;
|
package/build/index.d.ts
CHANGED
@@ -4,6 +4,7 @@ export * from './fixtures/DatabaseFixture';
|
|
4
4
|
export { default as AbstractStore } from './stores/AbstractStore';
|
5
5
|
export { default as StoreFactory } from './factories/StoreFactory';
|
6
6
|
export { default as DatabaseFactory } from './factories/DatabaseFactory';
|
7
|
+
export { default as MockStoreFactory } from './stores/MockStoreFactory';
|
7
8
|
export { default as StoreLoader } from './loaders/StoreLoader';
|
8
9
|
export { default as MongoDatabase } from './databases/MongoDatabase';
|
9
10
|
export * from './databases/MongoDatabase';
|
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.BatchArrayCursor = exports.BatchCursorImpl = exports.storePluginAssert = exports.databaseAssert = exports.databaseAssertUtil = exports.DatabaseFieldMapperPlugin = exports.CursorPagerFaker = exports.CursorPager = exports.generateId = exports.DataStoresError = exports.mongoUtil = exports.NeDbDatabase = exports.MongoDatabase = exports.StoreLoader = exports.DatabaseFactory = exports.StoreFactory = exports.AbstractStore = exports.DatabaseFixture = exports.AbstractDatabaseTest = void 0;
|
20
|
+
exports.BatchArrayCursor = exports.BatchCursorImpl = exports.storePluginAssert = exports.databaseAssert = exports.databaseAssertUtil = exports.DatabaseFieldMapperPlugin = exports.CursorPagerFaker = exports.CursorPager = exports.generateId = exports.DataStoresError = exports.mongoUtil = exports.NeDbDatabase = exports.MongoDatabase = exports.StoreLoader = exports.MockStoreFactory = 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");
|
@@ -29,6 +29,8 @@ var StoreFactory_1 = require("./factories/StoreFactory");
|
|
29
29
|
Object.defineProperty(exports, "StoreFactory", { enumerable: true, get: function () { return __importDefault(StoreFactory_1).default; } });
|
30
30
|
var DatabaseFactory_1 = require("./factories/DatabaseFactory");
|
31
31
|
Object.defineProperty(exports, "DatabaseFactory", { enumerable: true, get: function () { return __importDefault(DatabaseFactory_1).default; } });
|
32
|
+
var MockStoreFactory_1 = require("./stores/MockStoreFactory");
|
33
|
+
Object.defineProperty(exports, "MockStoreFactory", { enumerable: true, get: function () { return __importDefault(MockStoreFactory_1).default; } });
|
32
34
|
var StoreLoader_1 = require("./loaders/StoreLoader");
|
33
35
|
Object.defineProperty(exports, "StoreLoader", { enumerable: true, get: function () { return __importDefault(StoreLoader_1).default; } });
|
34
36
|
var MongoDatabase_1 = require("./databases/MongoDatabase");
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import StoreFactory from '../factories/StoreFactory';
|
2
|
+
import { Database } from '../types/database.types';
|
3
|
+
import { StoreName } from '../types/stores.types';
|
4
|
+
export default class MockStoreFactory extends StoreFactory {
|
5
|
+
constructor(db: Database);
|
6
|
+
assertDatabaseForStoreInstanceOf<Name extends StoreName>(name: Name, Class: new (...opts: any[]) => Database): Promise<void>;
|
7
|
+
}
|
@@ -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 test_utils_1 = require("@sprucelabs/test-utils");
|
7
|
+
const StoreFactory_1 = __importDefault(require("../factories/StoreFactory"));
|
8
|
+
class MockStoreFactory extends StoreFactory_1.default {
|
9
|
+
constructor(db) {
|
10
|
+
super(db);
|
11
|
+
}
|
12
|
+
async assertDatabaseForStoreInstanceOf(name, Class) {
|
13
|
+
if (!this.storeMap[name]) {
|
14
|
+
test_utils_1.assert.fail(`I could not find a store named ${name}. Did you create it with 'spruce create.store'?`);
|
15
|
+
}
|
16
|
+
const store = await this.getStore(name);
|
17
|
+
test_utils_1.assert.isInstanceOf(store.getDb(), Class, `Database for '${name}' store is not set correctly. Try 'stores.setDatabaseForStore(...)`);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
exports.default = MockStoreFactory;
|
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"publishConfig": {
|
4
4
|
"access": "public"
|
5
5
|
},
|
6
|
-
"version": "28.
|
6
|
+
"version": "28.4.0",
|
7
7
|
"files": [
|
8
8
|
"build/**/*",
|
9
9
|
"!build/__tests__",
|
@@ -67,8 +67,8 @@
|
|
67
67
|
"@seald-io/nedb": "^4.0.4",
|
68
68
|
"@sprucelabs/error": "^6.0.556",
|
69
69
|
"@sprucelabs/globby": "^2.0.501",
|
70
|
-
"@sprucelabs/schema": "^31.0.
|
71
|
-
"@sprucelabs/spruce-skill-utils": "^31.1.
|
70
|
+
"@sprucelabs/schema": "^31.0.3",
|
71
|
+
"@sprucelabs/spruce-skill-utils": "^31.1.9",
|
72
72
|
"just-clone": "^6.2.0",
|
73
73
|
"lodash": "^4.17.21",
|
74
74
|
"mongodb": "^6.12.0"
|