@furystack/filesystem-store 3.3.1 → 4.0.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/package.json CHANGED
@@ -1,8 +1,25 @@
1
1
  {
2
2
  "name": "@furystack/filesystem-store",
3
- "version": "3.3.1",
3
+ "version": "4.0.0",
4
4
  "description": "Simple File System store implementation for FuryStack",
5
- "main": "dist/index.js",
5
+ "type": "module",
6
+ "scripts": {
7
+ "build:es6": "tsc --outDir ./esm"
8
+ },
9
+ "exports": {
10
+ ".": {
11
+ "import": "./esm/index.js",
12
+ "types": "./types/index.d.ts"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "typesVersions": {
17
+ "*": {
18
+ "*": [
19
+ "types/*"
20
+ ]
21
+ }
22
+ },
6
23
  "files": [
7
24
  "dist",
8
25
  "types",
@@ -29,15 +46,15 @@
29
46
  },
30
47
  "homepage": "https://github.com/furystack/furystack",
31
48
  "dependencies": {
32
- "@furystack/core": "^11.3.1",
33
- "@furystack/inject": "^7.1.9",
34
- "@furystack/utils": "^3.1.8",
49
+ "@furystack/core": "^12.0.0",
50
+ "@furystack/inject": "^8.0.0",
51
+ "@furystack/utils": "^4.0.0",
35
52
  "semaphore-async-await": "^1.5.1"
36
53
  },
37
54
  "devDependencies": {
38
- "@types/jest": "^29.5.0",
39
- "@types/node": "^18.15.11"
55
+ "@types/node": "^18.15.11",
56
+ "typescript": "^5.0.4",
57
+ "vitest": "^0.30.1"
40
58
  },
41
- "typings": "./types/index.d.ts",
42
59
  "gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
43
60
  }
@@ -1,9 +1,11 @@
1
1
  import { promises } from 'fs'
2
2
  import { FileSystemStore } from './filesystem-store'
3
- import { TestClass, createStoreTest, StoreManager } from '@furystack/core'
3
+ import { TestClass, createStoreTest } from '@furystack/core/create-physical-store-tests'
4
4
  import { sleepAsync } from '@furystack/utils'
5
5
  import type { Injector } from '@furystack/inject'
6
6
  import { useFileSystemStore } from './store-manager-helpers'
7
+ import { describe, it, expect, vi, afterAll } from 'vitest'
8
+ import { StoreManager } from '@furystack/core'
7
9
 
8
10
  let storeCount = 0
9
11
 
@@ -32,7 +34,7 @@ describe('FileSystemStore', () => {
32
34
  const fileName = `filestore-test-${storeCount++}.json`
33
35
  storeNames.push(fileName)
34
36
  const store = new FileSystemStore({ model: TestClass, fileName, primaryKey: 'id', tickMs: 500 })
35
- store.saveChanges = jest.fn(store.saveChanges.bind(store))
37
+ store.saveChanges = vi.fn(store.saveChanges.bind(store))
36
38
 
37
39
  await store.add({
38
40
  id: 1,
@@ -1,7 +1,7 @@
1
1
  import type { FSWatcher } from 'fs'
2
2
  import { promises, watch } from 'fs'
3
3
  import type { Constructable } from '@furystack/inject'
4
- import Semaphore from 'semaphore-async-await'
4
+ import { Lock } from 'semaphore-async-await'
5
5
  import type { PhysicalStore, FindOptions, FilterType } from '@furystack/core'
6
6
  import { InMemoryStore } from '@furystack/core'
7
7
 
@@ -56,7 +56,7 @@ export class FileSystemStore<T, TPrimaryKey extends keyof T> implements Physical
56
56
  })
57
57
  }
58
58
 
59
- private fileLock = new Semaphore(1)
59
+ private fileLock = new Lock()
60
60
  public async saveChanges() {
61
61
  if (!this.hasChanges) {
62
62
  return
@@ -4,6 +4,7 @@ import { useFileSystemStore } from './store-manager-helpers'
4
4
  import { usingAsync } from '@furystack/utils'
5
5
  import { Injector } from '@furystack/inject'
6
6
  import { StoreManager, TestClass } from '@furystack/core'
7
+ import { describe, it, expect, afterAll } from 'vitest'
7
8
 
8
9
  let storeCount = 0
9
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-store.d.ts","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,QAAQ,EAAS,MAAM,IAAI,CAAA;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG7E;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAsGpG,OAAO,CAAC,QAAQ,CAAC,OAAO;IArG1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAW;IAEpC,SAAgB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAE7D,OAAO,KAAK,KAAK,GAEhB;IAEY,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D,IAAI,eAAqE;IACzE,UAAU,UAAQ;IACZ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAMhD,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;IAQnB,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IAMpE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAMzC,OAAO,CAAC,QAAQ,CAAmB;IACtB,WAAW;IAiBX,OAAO;IAMP,UAAU;IAmBV,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IAOxC,QAAQ,2BAAoB;IAC5B,SAAS,4BAAqB;gBAGlB,OAAO,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,WAAW,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;KACxB;CAeJ"}
1
+ {"version":3,"file":"filesystem-store.d.ts","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,QAAQ,EAAS,MAAM,IAAI,CAAA;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG7E;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAsGpG,OAAO,CAAC,QAAQ,CAAC,OAAO;IArG1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAW;IAEpC,SAAgB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAE7D,OAAO,KAAK,KAAK,GAEhB;IAEY,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D,IAAI,eAAqE;IACzE,UAAU,UAAQ;IACZ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAMhD,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE;IAQnB,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IAMpE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAMzC,OAAO,CAAC,QAAQ,CAAa;IAChB,WAAW;IAiBX,OAAO;IAMP,UAAU;IAmBV,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IAOxC,QAAQ,2BAAoB;IAC5B,SAAS,4BAAqB;gBAGlB,OAAO,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,WAAW,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;KACxB;CAeJ"}
@@ -1,115 +0,0 @@
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
- exports.FileSystemStore = void 0;
7
- const fs_1 = require("fs");
8
- const semaphore_async_await_1 = __importDefault(require("semaphore-async-await"));
9
- const core_1 = require("@furystack/core");
10
- /**
11
- * Store implementation that stores info in a simple JSON file
12
- */
13
- class FileSystemStore {
14
- get cache() {
15
- return this.inMemoryStore.cache;
16
- }
17
- async remove(...keys) {
18
- await this.fileLock.execute(async () => {
19
- await this.inMemoryStore.remove(...keys);
20
- });
21
- this.hasChanges = true;
22
- }
23
- async get(key, select) {
24
- return await this.fileLock.execute(async () => {
25
- return await this.inMemoryStore.get(key, select);
26
- });
27
- }
28
- async add(...entries) {
29
- const result = await this.fileLock.execute(async () => {
30
- return await this.inMemoryStore.add(...entries);
31
- });
32
- this.hasChanges = true;
33
- return result;
34
- }
35
- async find(filter) {
36
- return await this.fileLock.execute(async () => {
37
- return this.inMemoryStore.find(filter);
38
- });
39
- }
40
- async count(filter) {
41
- return await this.fileLock.execute(async () => {
42
- return this.inMemoryStore.count(filter);
43
- });
44
- }
45
- async saveChanges() {
46
- if (!this.hasChanges) {
47
- return;
48
- }
49
- try {
50
- await this.fileLock.acquire();
51
- const values = [];
52
- for (const key of this.cache.keys()) {
53
- values.push(this.cache.get(key));
54
- }
55
- await this.writeFile(this.options.fileName, JSON.stringify(values));
56
- this.hasChanges = false;
57
- }
58
- finally {
59
- this.fileLock.release();
60
- }
61
- }
62
- async dispose() {
63
- await this.saveChanges();
64
- this.watcher && this.watcher.close();
65
- clearInterval(this.tick);
66
- }
67
- async reloadData() {
68
- try {
69
- await this.fileLock.acquire();
70
- const data = await this.readFile(this.options.fileName);
71
- const json = (data ? JSON.parse(data.toString()) : []);
72
- this.cache.clear();
73
- for (const entity of json) {
74
- this.cache.set(entity[this.primaryKey], entity);
75
- }
76
- }
77
- catch (err) {
78
- // ignore if file not exists yet
79
- if (err instanceof Error && err.code !== 'ENOENT') {
80
- throw err;
81
- }
82
- }
83
- finally {
84
- this.fileLock.release();
85
- }
86
- }
87
- async update(id, data) {
88
- await this.fileLock.execute(async () => {
89
- return this.inMemoryStore.update(id, data);
90
- });
91
- this.hasChanges = true;
92
- }
93
- constructor(options) {
94
- this.options = options;
95
- this.tick = setInterval(() => this.saveChanges(), this.options.tickMs || 3000);
96
- this.hasChanges = false;
97
- this.fileLock = new semaphore_async_await_1.default(1);
98
- this.readFile = fs_1.promises.readFile;
99
- this.writeFile = fs_1.promises.writeFile;
100
- this.primaryKey = options.primaryKey;
101
- this.model = options.model;
102
- this.inMemoryStore = new core_1.InMemoryStore({ model: this.model, primaryKey: this.primaryKey });
103
- try {
104
- this.reloadData();
105
- this.watcher = (0, fs_1.watch)(this.options.fileName, { encoding: 'buffer' }, () => {
106
- this.reloadData();
107
- });
108
- }
109
- catch (error) {
110
- // Error registering file watcher for store. External updates won't be updated.
111
- }
112
- }
113
- }
114
- exports.FileSystemStore = FileSystemStore;
115
- //# sourceMappingURL=filesystem-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-store.js","sourceRoot":"","sources":["../src/filesystem-store.ts"],"names":[],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs_1 = require("fs");
4
- const filesystem_store_1 = require("./filesystem-store");
5
- const core_1 = require("@furystack/core");
6
- const utils_1 = require("@furystack/utils");
7
- const store_manager_helpers_1 = require("./store-manager-helpers");
8
- let storeCount = 0;
9
- describe('FileSystemStore', () => {
10
- const storeNames = [];
11
- const createStore = (i) => {
12
- const fileName = `filestore-test-${storeCount++}.json`;
13
- storeNames.push(fileName);
14
- (0, store_manager_helpers_1.useFileSystemStore)({
15
- injector: i,
16
- model: core_1.TestClass,
17
- fileName,
18
- primaryKey: 'id',
19
- });
20
- return i.getInstance(core_1.StoreManager).getStoreFor(core_1.TestClass, 'id');
21
- };
22
- (0, core_1.createStoreTest)({
23
- createStore,
24
- typeName: 'FileStore',
25
- });
26
- it('Should save data on tick', async () => {
27
- const fileName = `filestore-test-${storeCount++}.json`;
28
- storeNames.push(fileName);
29
- const store = new filesystem_store_1.FileSystemStore({ model: core_1.TestClass, fileName, primaryKey: 'id', tickMs: 500 });
30
- store.saveChanges = jest.fn(store.saveChanges.bind(store));
31
- await store.add({
32
- id: 1,
33
- dateValue: new Date(),
34
- stringValue1: 'alma',
35
- stringValue2: 'korte',
36
- booleanValue: false,
37
- numberValue1: 1,
38
- numberValue2: 2,
39
- });
40
- await (0, utils_1.sleepAsync)(501);
41
- expect(store.saveChanges).toHaveBeenCalled();
42
- await store.dispose();
43
- });
44
- it('Should reload data from disk', async () => {
45
- const fileName = `filestore-test-${storeCount++}.json`;
46
- storeNames.push(fileName);
47
- const store = new filesystem_store_1.FileSystemStore({ model: core_1.TestClass, fileName, primaryKey: 'id', tickMs: 500 });
48
- await store.add({
49
- id: 1,
50
- dateValue: new Date(),
51
- stringValue1: 'alma',
52
- stringValue2: 'korte',
53
- booleanValue: false,
54
- numberValue1: 1,
55
- numberValue2: 2,
56
- });
57
- await store.saveChanges();
58
- await store.remove(1);
59
- await store.reloadData();
60
- const count = await store.count();
61
- expect(count).toBe(1);
62
- await store.dispose();
63
- });
64
- afterAll(async () => {
65
- for (const fileName of storeNames) {
66
- try {
67
- await fs_1.promises.unlink(fileName);
68
- }
69
- catch (error) {
70
- // Ignore, maybe already deleted
71
- }
72
- }
73
- });
74
- });
75
- //# sourceMappingURL=filesystem-store.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-store.spec.js","sourceRoot":"","sources":["../src/filesystem-store.spec.ts"],"names":[],"mappings":"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"}
package/dist/index.js DELETED
@@ -1,19 +0,0 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./filesystem-store"), exports);
18
- __exportStar(require("./store-manager-helpers"), exports);
19
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAkC;AAClC,0DAAuC"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useFileSystemStore = void 0;
4
- const core_1 = require("@furystack/core");
5
- const filesystem_store_1 = require("./filesystem-store");
6
- /**
7
- *
8
- * @param options The Options for store creation
9
- * @param options.injector The injector to use for creating the store
10
- * @param options.model The model to use for the store
11
- * @param options.primaryKey The primary key of the model
12
- * @param options.fileName The name of the file to use for the store
13
- * @param options.tickMs The time in ms to wait between each save
14
- */
15
- const useFileSystemStore = (options) => {
16
- const store = new filesystem_store_1.FileSystemStore({ ...options });
17
- (0, core_1.addStore)(options.injector, store);
18
- };
19
- exports.useFileSystemStore = useFileSystemStore;
20
- //# sourceMappingURL=store-manager-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-manager-helpers.js","sourceRoot":"","sources":["../src/store-manager-helpers.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAE1C,yDAAoD;AAEpD;;;;;;;;GAQG;AACI,MAAM,kBAAkB,GAAG,CAAI,OAMrC,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,IAAI,kCAAe,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;IACjD,IAAA,eAAQ,EAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACnC,CAAC,CAAA;AATY,QAAA,kBAAkB,sBAS9B"}
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs_1 = require("fs");
4
- const index_1 = require("./index");
5
- const store_manager_helpers_1 = require("./store-manager-helpers");
6
- const utils_1 = require("@furystack/utils");
7
- const inject_1 = require("@furystack/inject");
8
- const core_1 = require("@furystack/core");
9
- let storeCount = 0;
10
- describe('FileSystemStore store manager extensions', () => {
11
- const storeNames = [];
12
- it('Should create a store with an extensions method from Store Manages', async () => {
13
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
14
- const storeManager = i.getInstance(core_1.StoreManager);
15
- const fileName = `filestore-test-${storeCount++}.json`;
16
- storeNames.push(fileName);
17
- (0, store_manager_helpers_1.useFileSystemStore)({
18
- injector: i,
19
- model: core_1.TestClass,
20
- fileName,
21
- primaryKey: 'id',
22
- });
23
- expect(storeManager.getStoreFor(core_1.TestClass, 'id')).toBeInstanceOf(index_1.FileSystemStore);
24
- });
25
- });
26
- afterAll(async () => {
27
- await Promise.all(storeNames.map(async (fileName) => {
28
- if ((0, fs_1.existsSync)(fileName)) {
29
- await fs_1.promises.unlink(fileName);
30
- }
31
- }));
32
- });
33
- });
34
- //# sourceMappingURL=store-manager-helpers.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-manager-helpers.spec.js","sourceRoot":"","sources":["../src/store-manager-helpers.spec.ts"],"names":[],"mappings":";;AAAA,2BAAyC;AACzC,mCAAyC;AACzC,mEAA4D;AAC5D,4CAA6C;AAC7C,8CAA4C;AAC5C,0CAAyD;AAEzD,IAAI,UAAU,GAAG,CAAC,CAAA;AAElB,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,MAAM,UAAU,GAAa,EAAE,CAAA;IAE/B,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,mBAAY,CAAC,CAAA;YAChD,MAAM,QAAQ,GAAG,kBAAkB,UAAU,EAAE,OAAO,CAAA;YACtD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACzB,IAAA,0CAAkB,EAAC;gBACjB,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,gBAAS;gBAChB,QAAQ;gBACR,UAAU,EAAE,IAAI;aACjB,CAAC,CAAA;YACF,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,gBAAS,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,uBAAe,CAAC,CAAA;QACnF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAChC,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE;gBACxB,MAAM,aAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;aAChC;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=filesystem-store.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-store.spec.d.ts","sourceRoot":"","sources":["../src/filesystem-store.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=store-manager-helpers.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-manager-helpers.spec.d.ts","sourceRoot":"","sources":["../src/store-manager-helpers.spec.ts"],"names":[],"mappings":""}