Skip to content

Commit 7cea02a

Browse files
committed
feat(memory-storage): move memory storage to a separate package (#63)
1 parent b44f550 commit 7cea02a

File tree

13 files changed

+247
-120
lines changed

13 files changed

+247
-120
lines changed

CONTRIBUTING.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,11 @@ The following is the list of supported scopes:
140140
* **local-storage**: The local storage adapter.
141141
* **indexed-storage**: The indexed db storage adapter.
142142
* **fs-storage**: The file system storage adapter.
143-
* **full-text-search**: The full text search engine.
143+
* **memory-storage**: The in-memory storage adapter.
144+
* **full-text-search**: The full-text search engine.
145+
* **full-text-search-language**: The language analyzer utility package.
146+
* **full-text-search-language-de**: The german language analyzer.
147+
* **full-text-search-language-en**: The english language analyzer.
144148

145149
There are currently a few exceptions to the "use package name" rule:
146150

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Check out our interactive [documentation](https://lokijs-forge.github.io/LokiJS2
3333
|[@loki/fs-storage][fs-storage-npm-url] | A persistence adapter which persists to node fs module storage. |
3434
|[@loki/local-storage][local-storage-npm-url] | A persistence adapter which persists to web browser's indexed db storage. |
3535
|[@loki/indexed-storage][indexed-storage-npm-url] | A persistence adapter which persists to web browser's local storage. |
36+
|[@loki/memory-storage][memory-storage-npm-url] | A persistence adapter which persists to memory. |
3637
|[@loki/partitioning-adapter][partitioning-adapter-npm-url] | An adapter for adapters. Converts a non reference mode adapter into a reference mode adapter which can perform destructuring and partitioning.|
3738

3839
<h3>Full-Text Search</h3>
@@ -61,6 +62,9 @@ Check out our interactive [documentation](https://lokijs-forge.github.io/LokiJS2
6162
[indexed-storage]: https://github.com/LokiJS-Forge/LokiJS2
6263
[indexed-storage-npm-url]: https://www.npmjs.com/package/@lokijs/indexed-storage
6364

65+
[memory-storage]: https://github.com/LokiJS-Forge/LokiJS2
66+
[memory-storage-npm-url]: https://www.npmjs.com/package/@lokijs/memory-storage
67+
6468
[partitioning-adapter]: https://github.com/LokiJS-Forge/LokiJS2
6569
[partitioning-adapter-npm-url]: https://www.npmjs.com/package/@lokijs/partitioning-adapter
6670

config/build.js

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const PACKAGES = [
1313
"local-storage",
1414
"indexed-storage",
1515
"fs-storage",
16+
"memory-storage",
1617
"full-text-search",
1718
"full-text-search-language",
1819
"full-text-search-language-de",

packages/full-text-search/spec/generic/full_text_search.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* global describe, ddescribe, it, expect */
22
import {Loki} from "../../../loki/src/loki";
33
import {QueryBuilder} from "../../src/query_builder";
4-
import {LokiMemoryAdapter} from "../../../loki/src/memory_adapter";
4+
import {MemoryStorage} from "../../../memory-storage/src/memory_storage";
55
import {Collection} from "../../../loki/src/collection";
66
import {FullTextSearch} from "../../src/full_text_search";
77
import {Tokenizer} from "../../src/tokenizer";
@@ -143,7 +143,7 @@ describe("full-text search", () => {
143143
});
144144

145145
it("save/load", (done) => {
146-
const adapter = {adapter: new LokiMemoryAdapter()};
146+
const adapter = {adapter: new MemoryStorage()};
147147
db.initializePersistence(adapter)
148148
.then(() => {
149149
return db.saveDatabase();
@@ -167,7 +167,7 @@ describe("full-text search", () => {
167167
});
168168

169169
it("save/load with tokenizer", (done) => {
170-
const adapter = {adapter: new LokiMemoryAdapter()};
170+
const adapter = {adapter: new MemoryStorage()};
171171
db = new Loki("MyDB");
172172
const tkz = new Tokenizer();
173173
tkz.setSplitter("abc", (a: string) => a.split(" "));

packages/loki/spec/generic/dynamic_view.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* global describe, beforeEach, it, expect */
22
import {Loki} from "../../src/loki";
3-
import {LokiMemoryAdapter} from "../../src/memory_adapter";
3+
import {MemoryStorage} from "../../../memory-storage/src/memory_storage";
44
import {Collection} from "../../src/collection";
55
import {Doc} from "../../../common/types";
66

@@ -299,8 +299,8 @@ describe("dynamicviews", () => {
299299
});
300300

301301
it("works 4", (done) => {
302-
// mock persistence by using memory adapter
303-
const mem = new LokiMemoryAdapter();
302+
// mock persistence by using memory storage
303+
const mem = new MemoryStorage();
304304
const db = new Loki("testCollections");
305305
db.initializePersistence({adapter: mem})
306306
.then(() => {

packages/loki/spec/generic/persistence.spec.ts

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* global describe, beforeEach, it, expect */
22
import {Loki} from "../../src/loki";
3-
import {LokiMemoryAdapter} from "../../src/memory_adapter";
3+
import {MemoryStorage} from "../../../memory-storage/src/memory_storage";
44
import {Collection} from "../../src/collection";
55
import SerializationMethod = Loki.SerializationMethod;
66
import {StorageAdapter} from "../../../common/types";
@@ -245,8 +245,8 @@ describe("testing destructured serialization/deserialization", () => {
245245
});
246246

247247
describe("testing adapter functionality", () => {
248-
it("verify basic memory adapter functionality works", (done) => {
249-
const memAdapter = new LokiMemoryAdapter();
248+
it("verify basic memory storage functionality works", (done) => {
249+
const memAdapter = new MemoryStorage();
250250
const ddb = new Loki("test.db");
251251

252252
ddb.initializePersistence({adapter: memAdapter});
@@ -275,8 +275,8 @@ describe("testing adapter functionality", () => {
275275
dv.data();
276276

277277
const p1 = ddb.saveDatabase().then(() => {
278-
expect(memAdapter["_hashStore"].hasOwnProperty("test.db")).toEqual(true);
279-
expect(memAdapter["_hashStore"]["test.db"].savecount).toEqual(1);
278+
expect(memAdapter.hashStore.hasOwnProperty("test.db")).toEqual(true);
279+
expect(memAdapter.hashStore["test.db"].savecount).toEqual(1);
280280
});
281281

282282
const cdb = new Loki("test.db");
@@ -294,7 +294,7 @@ describe("testing adapter functionality", () => {
294294
});
295295

296296
it("verify loki deleteDatabase works", (done) => {
297-
const memAdapter = new LokiMemoryAdapter();
297+
const memAdapter = new MemoryStorage();
298298
const ddb = new Loki("test.db");
299299
ddb.initializePersistence({adapter: memAdapter});
300300

@@ -313,12 +313,12 @@ describe("testing adapter functionality", () => {
313313
});
314314

315315
ddb.saveDatabase().then(() => {
316-
expect(memAdapter["_hashStore"].hasOwnProperty("test.db")).toEqual(true);
317-
expect(memAdapter["_hashStore"]["test.db"].savecount).toEqual(1);
316+
expect(memAdapter.hashStore.hasOwnProperty("test.db")).toEqual(true);
317+
expect(memAdapter.hashStore["test.db"].savecount).toEqual(1);
318318

319319
return ddb.deleteDatabase();
320320
}).then(() => {
321-
expect(memAdapter["_hashStore"].hasOwnProperty("test.db")).toEqual(false);
321+
expect(memAdapter.hashStore.hasOwnProperty("test.db")).toEqual(false);
322322
}).then(done, done.fail);
323323
});
324324

@@ -398,7 +398,7 @@ describe("testing adapter functionality", () => {
398398

399399
describe("async adapter tests", () => {
400400
it("verify throttled async drain", (done) => {
401-
const mem = new LokiMemoryAdapter({asyncResponses: true, asyncTimeout: 50});
401+
const mem = new MemoryStorage({asyncResponses: true, asyncTimeout: 50});
402402
const db = new Loki("sandbox.db");
403403
db.initializePersistence({adapter: mem, throttledSaves: true});
404404

@@ -436,7 +436,7 @@ describe("async adapter tests", () => {
436436

437437
db2.loadDatabase().then(() => {
438438
// total of 2 saves should have occurred
439-
expect(mem["_hashStore"]["sandbox.db"].savecount).toEqual(2);
439+
expect(mem.hashStore["sandbox.db"].savecount).toEqual(2);
440440

441441
// verify the saved database contains all expected changes
442442
expect(db2.getCollection<AB>("another").findOne({a: 1}).b).toEqual(3);
@@ -448,7 +448,7 @@ describe("async adapter tests", () => {
448448
});
449449

450450
it("verify throttledSaveDrain with duration timeout works", (done) => {
451-
const mem = new LokiMemoryAdapter({asyncResponses: true, asyncTimeout: 200});
451+
const mem = new MemoryStorage({asyncResponses: true, asyncTimeout: 200});
452452
const db = new Loki("sandbox.db");
453453
db.initializePersistence({adapter: mem});
454454

@@ -497,7 +497,7 @@ describe("async adapter tests", () => {
497497
});
498498

499499
it("verify throttled async throttles", (done) => {
500-
const mem = new LokiMemoryAdapter({asyncResponses: true, asyncTimeout: 50});
500+
const mem = new MemoryStorage({asyncResponses: true, asyncTimeout: 50});
501501
const db = new Loki("sandbox.db");
502502
db.initializePersistence({adapter: mem});
503503

@@ -530,7 +530,7 @@ describe("async adapter tests", () => {
530530
// give all async saves time to complete and then verify outcome
531531
setTimeout(() => {
532532
// total of 2 saves should have occurred
533-
expect(mem["_hashStore"]["sandbox.db"].savecount).toEqual(2);
533+
expect(mem.hashStore["sandbox.db"].savecount).toEqual(2);
534534

535535
// verify the saved database contains all expected changes
536536
const db2 = new Loki("sandbox.db");
@@ -545,7 +545,7 @@ describe("async adapter tests", () => {
545545
});
546546

547547
it("verify loadDatabase in the middle of throttled saves will wait for queue to drain first", (done) => {
548-
const mem = new LokiMemoryAdapter({asyncResponses: true, asyncTimeout: 75});
548+
const mem = new MemoryStorage({asyncResponses: true, asyncTimeout: 75});
549549
const db = new Loki("sandbox.db");
550550
db.initializePersistence({adapter: mem});
551551

@@ -599,7 +599,7 @@ describe("async adapter tests", () => {
599599

600600
describe("testing changesAPI", () => {
601601
it("verify pending changes persist across save/load cycle", (done) => {
602-
const mem = new LokiMemoryAdapter();
602+
const mem = new MemoryStorage();
603603
const db = new Loki("sandbox.db");
604604
let db2: Loki;
605605
db.initializePersistence({adapter: mem});
@@ -618,7 +618,7 @@ describe("testing changesAPI", () => {
618618
tyrfing.owner = "arngrim";
619619
items.update(tyrfing);
620620

621-
// memory adapter is synchronous so i will not bother with callbacks
621+
// memory storage is synchronous so i will not bother with callbacks
622622
db.saveDatabase().then(() => {
623623
db2 = new Loki("sandbox.db");
624624
db2.initializePersistence({adapter: mem});

packages/loki/spec/generic/unique.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* global describe, it, expect */
22
import {Loki} from "../../src/loki";
3-
import {LokiMemoryAdapter} from "../../src/memory_adapter";
3+
import {MemoryStorage} from "../../../memory-storage/src/memory_storage";
44

55
describe("Constraints", () => {
66

@@ -170,7 +170,7 @@ describe("Constraints", () => {
170170
name: "Jack"
171171
});
172172

173-
let mem = new LokiMemoryAdapter();
173+
let mem = new MemoryStorage();
174174

175175
expect(() => coll.insert({name: "Jack"})).toThrow();
176176

packages/memory-storage/package.json

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "@lokijs/memory-storage",
3+
"description": "A persistence adapter which persists to memory.",
4+
"author": "Various authors",
5+
"license": "MIT",
6+
"repository": {
7+
"type": "git",
8+
"url": "https://github.com/LokiJS-Forge/LokiJS2.git"
9+
},
10+
"main": "lokijs.memory-storage.js",
11+
"types": "./types/memory-storage/src/index.d.ts",
12+
"dependencies": {
13+
"@lokijs/loki": "0"
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/* global describe, it, expect */
2+
import {Loki} from "../../../loki/src/loki";
3+
import {MemoryStorage} from "../../src/memory_storage";
4+
5+
describe("testing memory storage", function () {
6+
7+
interface Name {
8+
name: string;
9+
}
10+
11+
beforeAll(() => {
12+
MemoryStorage.register();
13+
});
14+
15+
afterAll(() => {
16+
MemoryStorage.deregister();
17+
});
18+
19+
it("LokiMemoryStorage", function (done) {
20+
const db = new Loki("myTestApp");
21+
const adapter = {adapter: new MemoryStorage()};
22+
db.initializePersistence(adapter)
23+
.then(() => {
24+
db.addCollection<Name>("myColl").insert({name: "Hello World"});
25+
return db.saveDatabase();
26+
})
27+
.then(() => {
28+
const db2 = new Loki("myTestApp");
29+
return db2.initializePersistence(adapter)
30+
.then(() => {
31+
return db2.loadDatabase();
32+
}).then(() => {
33+
expect(db2.getCollection<Name>("myColl").find()[0].name).toEqual("Hello World");
34+
});
35+
})
36+
.then(() => {
37+
const db2 = new Loki("myTestApp");
38+
return db2.initializePersistence(adapter)
39+
.then(() => {
40+
return db2.loadDatabase();
41+
}).then(() => {
42+
expect(db2.getCollection<Name>("myColl").find()[0].name).toEqual("Hello World");
43+
});
44+
})
45+
.then(() => {
46+
const db3 = new Loki("other");
47+
return db3.initializePersistence(adapter)
48+
.then(() => {
49+
return db3.loadDatabase();
50+
}).then(() => {
51+
expect(false).toEqual(true);
52+
}, () => {
53+
expect(true).toEqual(true);
54+
});
55+
})
56+
.then(() => {
57+
return db.deleteDatabase();
58+
})
59+
.then(() => {
60+
return db.loadDatabase()
61+
.then(() => {
62+
expect(db.getCollection<Name>("myColl").find()[0].name).toEqual("Hello World");
63+
expect(false).toEqual(true);
64+
done();
65+
}, () => {
66+
expect(true).toEqual(true);
67+
done();
68+
});
69+
});
70+
});
71+
});

packages/memory-storage/src/index.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import {MemoryStorage} from "./memory_storage";
2+
3+
export {MemoryStorage};
4+
export default MemoryStorage;

0 commit comments

Comments
 (0)