@tsed/adapters 7.0.0-alpha.1 → 7.0.0-beta.10
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/jest.config.js +14 -0
- package/lib/{adapters → cjs/adapters}/FileSyncAdapter.js +7 -6
- package/lib/cjs/adapters/FileSyncAdapter.js.map +1 -0
- package/lib/{adapters → cjs/adapters}/LowDbAdapter.js +3 -3
- package/lib/cjs/adapters/LowDbAdapter.js.map +1 -0
- package/lib/{adapters → cjs/adapters}/MemoryAdapter.js +5 -4
- package/lib/cjs/adapters/MemoryAdapter.js.map +1 -0
- package/lib/{decorators → cjs/decorators}/indexed.js +1 -1
- package/lib/cjs/decorators/indexed.js.map +1 -0
- package/lib/{decorators → cjs/decorators}/injectAdapter.js +4 -4
- package/lib/cjs/decorators/injectAdapter.js.map +1 -0
- package/lib/{domain → cjs/domain}/Adapter.js +8 -7
- package/lib/cjs/domain/Adapter.js.map +1 -0
- package/lib/{domain → cjs/domain}/AdaptersSettings.js +0 -0
- package/lib/cjs/domain/AdaptersSettings.js.map +1 -0
- package/lib/{index.js → cjs/index.js} +5 -2
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/{services → cjs/services}/Adapters.js +3 -3
- package/lib/cjs/services/Adapters.js.map +1 -0
- package/lib/esm/adapters/FileSyncAdapter.js +35 -0
- package/lib/esm/adapters/FileSyncAdapter.js.map +1 -0
- package/lib/esm/adapters/LowDbAdapter.js +86 -0
- package/lib/esm/adapters/LowDbAdapter.js.map +1 -0
- package/lib/esm/adapters/MemoryAdapter.js +25 -0
- package/lib/esm/adapters/MemoryAdapter.js.map +1 -0
- package/lib/esm/decorators/indexed.js +7 -0
- package/lib/esm/decorators/indexed.js.map +1 -0
- package/lib/esm/decorators/injectAdapter.js +34 -0
- package/lib/esm/decorators/injectAdapter.js.map +1 -0
- package/lib/esm/domain/Adapter.js +79 -0
- package/lib/esm/domain/Adapter.js.map +1 -0
- package/lib/esm/domain/AdaptersSettings.js +2 -0
- package/lib/esm/domain/AdaptersSettings.js.map +1 -0
- package/lib/esm/index.js +12 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/package.json +3 -0
- package/lib/esm/services/Adapters.js +25 -0
- package/lib/esm/services/Adapters.js.map +1 -0
- package/lib/{adapters → types/adapters}/FileSyncAdapter.d.ts +0 -0
- package/lib/{adapters → types/adapters}/LowDbAdapter.d.ts +0 -0
- package/lib/{adapters → types/adapters}/MemoryAdapter.d.ts +0 -0
- package/lib/{decorators → types/decorators}/indexed.d.ts +0 -0
- package/lib/{decorators → types/decorators}/injectAdapter.d.ts +0 -0
- package/lib/{domain → types/domain}/Adapter.d.ts +0 -0
- package/lib/{domain → types/domain}/AdaptersSettings.d.ts +0 -0
- package/lib/{index.d.ts → types/index.d.ts} +5 -2
- package/lib/{services → types/services}/Adapters.d.ts +0 -0
- package/package.json +33 -23
- package/readme.md +0 -58
- package/tsconfig.compile.esm.json +12 -0
- package/.mocharc.js +0 -5
- package/lib/adapters/FileSyncAdapter.js.map +0 -1
- package/lib/adapters/LowDbAdapter.js.map +0 -1
- package/lib/adapters/MemoryAdapter.js.map +0 -1
- package/lib/decorators/indexed.js.map +0 -1
- package/lib/decorators/injectAdapter.js.map +0 -1
- package/lib/domain/Adapter.js.map +0 -1
- package/lib/domain/AdaptersSettings.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/services/Adapters.js.map +0 -1
package/jest.config.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// For a detailed explanation regarding each configuration property, visit:
|
|
2
|
+
// https://jestjs.io/docs/en/configuration.html
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
...require("@tsed/jest-config")(__dirname, "adapters"),
|
|
6
|
+
coverageThreshold: {
|
|
7
|
+
global: {
|
|
8
|
+
branches: 70,
|
|
9
|
+
functions: 70,
|
|
10
|
+
lines: 70,
|
|
11
|
+
statements: 70
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
@@ -12,13 +12,13 @@ const LowDbAdapter_1 = require("./LowDbAdapter");
|
|
|
12
12
|
let FileSyncAdapter = class FileSyncAdapter extends LowDbAdapter_1.LowDbAdapter {
|
|
13
13
|
constructor(options, configuration) {
|
|
14
14
|
super(options, configuration);
|
|
15
|
-
fs_extra_1.ensureDirSync(path_1.dirname(this.dbFilePath));
|
|
15
|
+
(0, fs_extra_1.ensureDirSync)((0, path_1.dirname)(this.dbFilePath));
|
|
16
16
|
const file = new FileSync_1.default(this.dbFilePath);
|
|
17
|
-
this.db = lowdb_1.default(file);
|
|
17
|
+
this.db = (0, lowdb_1.default)(file);
|
|
18
18
|
this.db
|
|
19
19
|
.defaults({
|
|
20
20
|
collectionName: this.collectionName,
|
|
21
|
-
modelName: core_1.nameOf(this.model),
|
|
21
|
+
modelName: (0, core_1.nameOf)(this.model),
|
|
22
22
|
collection: []
|
|
23
23
|
})
|
|
24
24
|
.write();
|
|
@@ -28,9 +28,10 @@ let FileSyncAdapter = class FileSyncAdapter extends LowDbAdapter_1.LowDbAdapter
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
FileSyncAdapter = tslib_1.__decorate([
|
|
31
|
-
di_1.Injectable(),
|
|
32
|
-
di_1.Scope(di_1.ProviderScope.INSTANCE),
|
|
33
|
-
tslib_1.__param(0, di_1.Opts),
|
|
31
|
+
(0, di_1.Injectable)(),
|
|
32
|
+
(0, di_1.Scope)(di_1.ProviderScope.INSTANCE),
|
|
33
|
+
tslib_1.__param(0, di_1.Opts),
|
|
34
|
+
tslib_1.__param(1, (0, di_1.Configuration)()),
|
|
34
35
|
tslib_1.__metadata("design:paramtypes", [Object, Object])
|
|
35
36
|
], FileSyncAdapter);
|
|
36
37
|
exports.FileSyncAdapter = FileSyncAdapter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSyncAdapter.js","sourceRoot":"","sources":["../../../src/adapters/FileSyncAdapter.ts"],"names":[],"mappings":";;;;AAAA,qCAAkC;AAClC,iCAA+E;AAC/E,uCAAuC;AACvC,0DAAwB;AACxB,+EAA+C;AAC/C,+BAA6B;AAE7B,iDAA0D;AAQ1D,IAAa,eAAe,GAA5B,MAAa,eAAwC,SAAQ,2BAAe;IAC1E,YAAkB,OAA0C,EAAmB,aAA4B;QACzG,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAE9B,IAAA,wBAAa,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,IAAI,kBAAQ,CAAoB,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,EAAE,GAAG,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,EAAE;aACJ,QAAQ,CAAC;YACR,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAA,aAAM,EAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,UAAU,EAAE,EAAE;SACf,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;SACvB;IACH,CAAC;CACF,CAAA;AArBY,eAAe;IAF3B,IAAA,eAAU,GAAE;IACZ,IAAA,UAAK,EAAC,kBAAa,CAAC,QAAQ,CAAC;IAEf,mBAAA,SAAI,CAAA;IAA8C,mBAAA,IAAA,kBAAa,GAAE,CAAA;;GADnE,eAAe,CAqB3B;AArBY,0CAAe","sourcesContent":["import {nameOf} from \"@tsed/core\";\nimport {Configuration, Injectable, Opts, ProviderScope, Scope} from \"@tsed/di\";\nimport {ensureDirSync} from \"fs-extra\";\nimport low from \"lowdb\";\nimport FileSync from \"lowdb/adapters/FileSync\";\nimport {dirname} from \"path\";\nimport {AdapterConstructorOptions} from \"../domain/Adapter\";\nimport {AdapterModel, LowDbAdapter} from \"./LowDbAdapter\";\n\nexport interface FileSyncAdapterConstructorOptions extends AdapterConstructorOptions {\n readOnly: true;\n}\n\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class FileSyncAdapter<T extends AdapterModel> extends LowDbAdapter<T> {\n constructor(@Opts options: FileSyncAdapterConstructorOptions, @Configuration() configuration: Configuration) {\n super(options, configuration);\n\n ensureDirSync(dirname(this.dbFilePath));\n\n const file = new FileSync<{collection: T[]}>(this.dbFilePath);\n\n this.db = low(file);\n this.db\n .defaults({\n collectionName: this.collectionName,\n modelName: nameOf(this.model),\n collection: []\n })\n .write();\n\n if (options.readOnly) {\n file.write = () => {};\n }\n }\n}\n"]}
|
|
@@ -17,7 +17,7 @@ class LowDbAdapter extends Adapter_1.Adapter {
|
|
|
17
17
|
if (expiresAt) {
|
|
18
18
|
payload.expires_at = expiresAt;
|
|
19
19
|
}
|
|
20
|
-
payload._id = uuid_1.v4();
|
|
20
|
+
payload._id = (0, uuid_1.v4)();
|
|
21
21
|
await this.validate(payload);
|
|
22
22
|
await this.collection.push(payload).write();
|
|
23
23
|
return this.deserialize(payload);
|
|
@@ -25,7 +25,7 @@ class LowDbAdapter extends Adapter_1.Adapter {
|
|
|
25
25
|
async upsert(id, payload, expiresAt) {
|
|
26
26
|
let item = await this.findById(id);
|
|
27
27
|
if (!item) {
|
|
28
|
-
payload = { ...payload, _id: id || uuid_1.v4(), expires_at: expiresAt };
|
|
28
|
+
payload = { ...payload, _id: id || (0, uuid_1.v4)(), expires_at: expiresAt };
|
|
29
29
|
await this.validate(payload);
|
|
30
30
|
await this.collection.push(payload).write();
|
|
31
31
|
return this.deserialize(payload);
|
|
@@ -77,7 +77,7 @@ class LowDbAdapter extends Adapter_1.Adapter {
|
|
|
77
77
|
let removedItems = [];
|
|
78
78
|
await this.collection
|
|
79
79
|
.remove((item) => {
|
|
80
|
-
if (isMatch_1.default(item, predicate)) {
|
|
80
|
+
if ((0, isMatch_1.default)(item, predicate)) {
|
|
81
81
|
removedItems.push(this.deserialize(item));
|
|
82
82
|
return true;
|
|
83
83
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LowDbAdapter.js","sourceRoot":"","sources":["../../../src/adapters/LowDbAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import isMatch from \"lodash/isMatch\";\nimport low from \"lowdb\";\nimport {v4 as uuid} from \"uuid\";\nimport {Adapter} from \"../domain/Adapter\";\n\nexport interface AdapterModel {\n _id: string;\n expires_at?: Date;\n\n [key: string]: any;\n}\n\nexport class LowDbAdapter<T extends AdapterModel> extends Adapter<T> {\n protected db: low.LowdbSync<{collection: T[]}>;\n\n get collection() {\n return this.db.get(\"collection\");\n }\n\n protected get dbFilePath() {\n const lowdbDir = this.configuration.get(\"adapters.lowdbDir\", \".db\");\n return `${lowdbDir}/${this.collectionName}.json`;\n }\n\n public async create(payload: Partial<T>, expiresAt?: Date): Promise<T> {\n if (expiresAt) {\n payload.expires_at = expiresAt;\n }\n\n payload._id = uuid();\n\n await this.validate(payload as T);\n\n await this.collection.push(payload as T).write();\n\n return this.deserialize(payload);\n }\n\n public async upsert(id: string, payload: T, expiresAt?: Date): Promise<T> {\n let item = await this.findById(id);\n\n if (!item) {\n payload = {...payload, _id: id || uuid(), expires_at: expiresAt};\n\n await this.validate(payload as T);\n await this.collection.push(payload as T).write();\n\n return this.deserialize(payload);\n }\n\n return (await this.update(id, payload, expiresAt)) as T;\n }\n\n public async update(id: string, payload: T, expiresAt?: Date): Promise<T | undefined> {\n return this.updateOne({_id: id}, payload, expiresAt);\n }\n\n public async updateOne(predicate: Partial<T & any>, payload: T, expiresAt?: Date): Promise<T | undefined> {\n let index = this.collection.findIndex(predicate).value();\n\n if (index === -1) {\n return;\n }\n\n let item = this.collection.get(index).value();\n\n item = {\n _id: item._id,\n expires_at: expiresAt || item.expires_at,\n ...this.updateInstance(item, payload)\n };\n\n await this.validate(item as T);\n await this.collection.set(index, item).write();\n\n return this.deserialize(item);\n }\n\n async findOne(predicate: Partial<T & any>): Promise<T | undefined> {\n const item = this.collection.find(predicate).value();\n\n return this.deserialize(item);\n }\n\n async findById(_id: string): Promise<T | undefined> {\n return this.findOne({_id});\n }\n\n public async findAll(predicate: Partial<T & any> = {}): Promise<T[]> {\n return this.collection\n .filter(predicate)\n .value()\n .map((item) => this.deserialize(item));\n }\n\n public async deleteOne(predicate: Partial<T & any>): Promise<T | undefined> {\n const item = this.collection.find(predicate).value();\n\n if (item) {\n this.collection.remove(({_id}) => _id === item._id).write();\n\n return this.deserialize(item);\n }\n }\n\n public async deleteById(_id: string): Promise<T | undefined> {\n return this.deleteOne({_id} as any);\n }\n\n public async deleteMany(predicate: Partial<T>): Promise<T[]> {\n let removedItems: T[] = [];\n\n await this.collection\n .remove((item) => {\n if (isMatch(item, predicate)) {\n removedItems.push(this.deserialize(item));\n return true;\n }\n return false;\n })\n .write();\n\n return removedItems;\n }\n}\n"]}
|
|
@@ -9,7 +9,7 @@ const LowDbAdapter_1 = require("./LowDbAdapter");
|
|
|
9
9
|
let MemoryAdapter = class MemoryAdapter extends LowDbAdapter_1.LowDbAdapter {
|
|
10
10
|
constructor(options, configuration) {
|
|
11
11
|
super(options, configuration);
|
|
12
|
-
this.db = lowdb_1.default(new Memory_1.default(this.dbFilePath));
|
|
12
|
+
this.db = (0, lowdb_1.default)(new Memory_1.default(this.dbFilePath));
|
|
13
13
|
this.db
|
|
14
14
|
.defaults({
|
|
15
15
|
collection: []
|
|
@@ -18,9 +18,10 @@ let MemoryAdapter = class MemoryAdapter extends LowDbAdapter_1.LowDbAdapter {
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
MemoryAdapter = tslib_1.__decorate([
|
|
21
|
-
di_1.Injectable(),
|
|
22
|
-
di_1.Scope(di_1.ProviderScope.INSTANCE),
|
|
23
|
-
tslib_1.__param(0, di_1.Opts),
|
|
21
|
+
(0, di_1.Injectable)(),
|
|
22
|
+
(0, di_1.Scope)(di_1.ProviderScope.INSTANCE),
|
|
23
|
+
tslib_1.__param(0, di_1.Opts),
|
|
24
|
+
tslib_1.__param(1, (0, di_1.Configuration)()),
|
|
24
25
|
tslib_1.__metadata("design:paramtypes", [Object, Object])
|
|
25
26
|
], MemoryAdapter);
|
|
26
27
|
exports.MemoryAdapter = MemoryAdapter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryAdapter.js","sourceRoot":"","sources":["../../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":";;;;AAAA,iCAA+E;AAC/E,0DAAwB;AACxB,2EAA2C;AAC3C,iDAA0D;AAI1D,IAAa,aAAa,GAA1B,MAAa,aAAsC,SAAQ,2BAAe;IACxE,YAAkB,OAAY,EAAmB,aAA4B;QAC3E,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAE9B,IAAI,CAAC,EAAE,GAAG,IAAA,eAAG,EAAC,IAAI,gBAAM,CAAoB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE;aACJ,QAAQ,CAAC;YACR,UAAU,EAAE,EAAE;SACf,CAAC;aACD,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAA;AAXY,aAAa;IAFzB,IAAA,eAAU,GAAE;IACZ,IAAA,UAAK,EAAC,kBAAa,CAAC,QAAQ,CAAC;IAEf,mBAAA,SAAI,CAAA;IAAgB,mBAAA,IAAA,kBAAa,GAAE,CAAA;;GADrC,aAAa,CAWzB;AAXY,sCAAa","sourcesContent":["import {Configuration, Injectable, Opts, ProviderScope, Scope} from \"@tsed/di\";\nimport low from \"lowdb\";\nimport Memory from \"lowdb/adapters/Memory\";\nimport {AdapterModel, LowDbAdapter} from \"./LowDbAdapter\";\n\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class MemoryAdapter<T extends AdapterModel> extends LowDbAdapter<T> {\n constructor(@Opts options: any, @Configuration() configuration: Configuration) {\n super(options, configuration);\n\n this.db = low(new Memory<{collection: T[]}>(this.dbFilePath));\n this.db\n .defaults({\n collection: []\n })\n .write();\n }\n}\n"]}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Indexed = void 0;
|
|
4
4
|
const schema_1 = require("@tsed/schema");
|
|
5
5
|
function Indexed() {
|
|
6
|
-
return schema_1.JsonEntityFn((entity) => {
|
|
6
|
+
return (0, schema_1.JsonEntityFn)((entity) => {
|
|
7
7
|
entity.store.set("adapter:indexed", {});
|
|
8
8
|
});
|
|
9
9
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../../src/decorators/indexed.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAE1C,SAAgB,OAAO;IACrB,OAAO,IAAA,qBAAY,EAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAJD,0BAIC","sourcesContent":["import {JsonEntityFn} from \"@tsed/schema\";\n\nexport function Indexed(): PropertyDecorator {\n return JsonEntityFn((entity) => {\n entity.store.set(\"adapter:indexed\", {});\n });\n}\n"]}
|
|
@@ -6,13 +6,13 @@ const di_1 = require("@tsed/di");
|
|
|
6
6
|
const Adapters_1 = require("../services/Adapters");
|
|
7
7
|
function mapOptions(args) {
|
|
8
8
|
return args.reduce((options, item, index) => {
|
|
9
|
-
if (core_1.isString(item)) {
|
|
9
|
+
if ((0, core_1.isString)(item)) {
|
|
10
10
|
return {
|
|
11
11
|
...options,
|
|
12
12
|
collectionName: item
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
if (core_1.isClass(item) && core_1.classOf(item) !== Object) {
|
|
15
|
+
if ((0, core_1.isClass)(item) && (0, core_1.classOf)(item) !== Object) {
|
|
16
16
|
return {
|
|
17
17
|
...options,
|
|
18
18
|
model: item
|
|
@@ -24,8 +24,8 @@ function mapOptions(args) {
|
|
|
24
24
|
function InjectAdapter(...args) {
|
|
25
25
|
const options = mapOptions(args);
|
|
26
26
|
return (target) => {
|
|
27
|
-
di_1.Inject(Adapters_1.Adapters)(target, "$adapters");
|
|
28
|
-
const descriptor = core_1.descriptorOf(target, "$onInit");
|
|
27
|
+
(0, di_1.Inject)(Adapters_1.Adapters)(target, "$adapters");
|
|
28
|
+
const descriptor = (0, core_1.descriptorOf)(target, "$onInit");
|
|
29
29
|
Reflect.defineProperty(target, "$onInit", {
|
|
30
30
|
value() {
|
|
31
31
|
this.adapter = this.$adapters.invokeAdapter(options);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectAdapter.js","sourceRoot":"","sources":["../../../src/decorators/injectAdapter.ts"],"names":[],"mappings":";;;AAAA,qCAA0E;AAC1E,iCAAgC;AAChC,mDAAoE;AAEpE,SAAS,UAAU,CAAC,IAAW;IAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAA6B,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE;YAClB,OAAO;gBACL,GAAG,OAAO;gBACV,cAAc,EAAE,IAAI;aACrB,CAAC;SACH;QAED,IAAI,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,IAAA,cAAO,EAAC,IAAI,CAAC,KAAK,MAAM,EAAE;YAC7C,OAAO;gBACL,GAAG,OAAO;gBACV,KAAK,EAAE,IAAI;aACZ,CAAC;SACH;QAED,OAAO,EAAC,GAAG,OAAO,EAAE,GAAG,IAAI,EAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAKD,SAAgB,aAAa,CAAC,GAAG,IAAW;IAC1C,MAAM,OAAO,GAAyB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAA,WAAM,EAAC,mBAAQ,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAA,mBAAY,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEnD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;YACxC,KAAK;gBACH,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,SAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAEnE,OAAO,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAfD,sCAeC","sourcesContent":["import {classOf, descriptorOf, isClass, isString, Type} from \"@tsed/core\";\nimport {Inject} from \"@tsed/di\";\nimport {AdapterInvokeOptions, Adapters} from \"../services/Adapters\";\n\nfunction mapOptions(args: any[]): AdapterInvokeOptions {\n return args.reduce((options: AdapterInvokeOptions, item, index) => {\n if (isString(item)) {\n return {\n ...options,\n collectionName: item\n };\n }\n\n if (isClass(item) && classOf(item) !== Object) {\n return {\n ...options,\n model: item\n };\n }\n\n return {...options, ...item};\n }, {});\n}\n\nexport function InjectAdapter(options: AdapterInvokeOptions): PropertyDecorator;\nexport function InjectAdapter(model: Type<any>, options?: Partial<AdapterInvokeOptions>): PropertyDecorator;\nexport function InjectAdapter(collectionName: string, model: Type<any>, options?: Partial<AdapterInvokeOptions>): PropertyDecorator;\nexport function InjectAdapter(...args: any[]): PropertyDecorator {\n const options: AdapterInvokeOptions = mapOptions(args);\n\n return (target) => {\n Inject(Adapters)(target, \"$adapters\");\n const descriptor = descriptorOf(target, \"$onInit\");\n\n Reflect.defineProperty(target, \"$onInit\", {\n value() {\n this.adapter = (this.$adapters as Adapters).invokeAdapter(options);\n\n return descriptor && descriptor.value && descriptor.value.call(this);\n }\n });\n };\n}\n"]}
|
|
@@ -8,7 +8,7 @@ const di_1 = require("@tsed/di");
|
|
|
8
8
|
const json_mapper_1 = require("@tsed/json-mapper");
|
|
9
9
|
const schema_1 = require("@tsed/schema");
|
|
10
10
|
function getIndexes(model) {
|
|
11
|
-
return [...schema_1.getPropertiesStores(model).entries()]
|
|
11
|
+
return [...(0, schema_1.getPropertiesStores)(model).entries()]
|
|
12
12
|
.filter(([, entity]) => entity.store.has("adapter:indexed"))
|
|
13
13
|
.map(([propertyKey, entity]) => {
|
|
14
14
|
return {
|
|
@@ -32,9 +32,9 @@ let Adapter = class Adapter {
|
|
|
32
32
|
constructor(options, configuration) {
|
|
33
33
|
this.configuration = configuration;
|
|
34
34
|
this.model = options.model;
|
|
35
|
-
this.collectionName = options.collectionName || pluralize(core_1.nameOf(options.model));
|
|
35
|
+
this.collectionName = options.collectionName || pluralize((0, core_1.nameOf)(options.model));
|
|
36
36
|
let indexes = options.indexes || configuration.get(`adapters.${this.collectionName}.indexes`) || getIndexes(this.model);
|
|
37
|
-
if (!core_1.isArray(indexes)) {
|
|
37
|
+
if (!(0, core_1.isArray)(indexes)) {
|
|
38
38
|
indexes = mapIndexes(indexes);
|
|
39
39
|
}
|
|
40
40
|
this.indexes = indexes;
|
|
@@ -58,23 +58,24 @@ let Adapter = class Adapter {
|
|
|
58
58
|
return item;
|
|
59
59
|
}
|
|
60
60
|
deserialize(obj) {
|
|
61
|
-
return json_mapper_1.deserialize(obj, {
|
|
61
|
+
return (0, json_mapper_1.deserialize)(obj, {
|
|
62
62
|
type: this.getModel(),
|
|
63
63
|
useAlias: false
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
serialize(obj) {
|
|
67
|
-
return json_mapper_1.serialize(obj, {
|
|
67
|
+
return (0, json_mapper_1.serialize)(obj, {
|
|
68
68
|
useAlias: false
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
72
|
tslib_1.__decorate([
|
|
73
|
-
di_1.Inject(),
|
|
73
|
+
(0, di_1.Inject)(),
|
|
74
74
|
tslib_1.__metadata("design:type", ajv_1.AjvService)
|
|
75
75
|
], Adapter.prototype, "ajvService", void 0);
|
|
76
76
|
Adapter = tslib_1.__decorate([
|
|
77
|
-
tslib_1.__param(0, di_1.Opts),
|
|
77
|
+
tslib_1.__param(0, di_1.Opts),
|
|
78
|
+
tslib_1.__param(1, (0, di_1.Configuration)()),
|
|
78
79
|
tslib_1.__metadata("design:paramtypes", [Object, Object])
|
|
79
80
|
], Adapter);
|
|
80
81
|
exports.Adapter = Adapter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapter.js","sourceRoot":"","sources":["../../../src/domain/Adapter.ts"],"names":[],"mappings":";;;;AAAA,mCAAqC;AACrC,qCAA2D;AAC3D,iCAAqD;AACrD,mDAAyD;AACzD,yCAAiD;AAUjD,SAAS,UAAU,CAAC,KAAU;IAC5B,OAAO,CAAC,GAAG,IAAA,4BAAmB,EAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;SAC3D,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE;QAC7B,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;YAChC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;SAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,OAAmF;IACrG,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAc,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;QAC/E,OAAO,OAAO,CAAC,MAAM,CAAC;YACpB,WAAW;YACX,OAAO;SACR,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AACtF,CAAC;AAED,IAAsB,OAAO,GAA7B,MAAsB,OAAO;IAQ3B,YAAkB,OAAkC,EAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC3G,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,IAAA,aAAM,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjF,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,cAAc,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExH,IAAI,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,EAAE;YACrB,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;SAC/B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAQ;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBACpD,IAAI,EAAE,IAAI,CAAC,KAAK;aACjB,CAAC,CAAC;SACJ;IACH,CAAC;IAsBD,QAAQ;QACN,OAAQ,IAAI,CAAC,KAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IAES,cAAc,CAAC,GAAQ,EAAE,OAAY;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACtB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAEhF,OAAO,IAAI,CAAC;IACd,CAAC;IAES,WAAW,CAAC,GAAQ;QAC5B,OAAO,IAAA,yBAAW,EAAC,GAAG,EAAE;YACtB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;YACrB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IAES,SAAS,CAAC,GAAQ;QAC1B,OAAO,IAAA,uBAAS,EAAC,GAAG,EAAE;YACpB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAtEC;IADC,IAAA,WAAM,GAAE;sCACW,gBAAU;2CAAC;AANX,OAAO;IAQd,mBAAA,SAAI,CAAA;IAAsC,mBAAA,IAAA,kBAAa,GAAE,CAAA;;GARlD,OAAO,CA4E5B;AA5EqB,0BAAO","sourcesContent":["import {AjvService} from \"@tsed/ajv\";\nimport {isArray, isObject, nameOf, Type} from \"@tsed/core\";\nimport {Configuration, Inject, Opts} from \"@tsed/di\";\nimport {deserialize, serialize} from \"@tsed/json-mapper\";\nimport {getPropertiesStores} from \"@tsed/schema\";\n\nexport interface AdapterConstructorOptions<T = any> {\n model: Type<T> | Object;\n collectionName?: string;\n indexes?: {\n [propertyKey: string]: Record<string, any>;\n };\n}\n\nfunction getIndexes(model: any) {\n return [...getPropertiesStores(model).entries()]\n .filter(([, entity]) => entity.store.has(\"adapter:indexed\"))\n .map(([propertyKey, entity]) => {\n return {\n propertyKey: String(propertyKey),\n options: entity.store.get(\"adapter:indexed\")\n };\n });\n}\n\nfunction mapIndexes(indexes: {[p: string]: Record<string, any>} | {propertyKey: string; options: any}[]) {\n return Object.entries(indexes).reduce((indexes: any[], [propertyKey, options]) => {\n return indexes.concat({\n propertyKey,\n options\n });\n }, []);\n}\n\nfunction pluralize(name: string) {\n return name.slice(-1) === \"y\" ? `${name.slice(0, name.length - 1)}ies` : name + \"s\";\n}\n\nexport abstract class Adapter<T = any> {\n readonly model: Type<T> | Object;\n readonly collectionName: string;\n readonly indexes: {propertyKey: string; options: any}[];\n\n @Inject()\n private ajvService: AjvService;\n\n constructor(@Opts options: AdapterConstructorOptions, @Configuration() protected configuration: Configuration) {\n this.model = options.model;\n this.collectionName = options.collectionName || pluralize(nameOf(options.model));\n\n let indexes = options.indexes || configuration.get(`adapters.${this.collectionName}.indexes`) || getIndexes(this.model);\n\n if (!isArray(indexes)) {\n indexes = mapIndexes(indexes);\n }\n\n this.indexes = indexes;\n }\n\n async validate(value: T): Promise<void> {\n if (this.getModel()) {\n await this.ajvService.validate(this.serialize(value), {\n type: this.model\n });\n }\n }\n\n abstract create(value: Partial<Omit<T, \"_id\">>, expiresAt?: Date): Promise<T>;\n\n abstract update(id: string, value: T, expiresAt?: Date): Promise<T | undefined>;\n\n abstract updateOne(predicate: Partial<T>, value: Partial<T>, expiresAt?: Date): Promise<T | undefined>;\n\n abstract upsert(id: string, value: T, expiresAt?: Date): Promise<T>;\n\n abstract findOne(predicate: Partial<T>): Promise<T | undefined>;\n\n abstract findById(id: string): Promise<T | undefined>;\n\n abstract findAll(predicate?: Partial<T>): Promise<T[]>;\n\n abstract deleteOne(predicate: Partial<T>): Promise<T | undefined>;\n\n abstract deleteMany(predicate: Partial<T>): Promise<T[]>;\n\n abstract deleteById(id: string): Promise<T | undefined>;\n\n getModel() {\n return (this.model as unknown) !== Object ? this.model : undefined;\n }\n\n protected updateInstance(src: any, payload: any) {\n const item = Object.assign({\n ...this.serialize(src),\n ...this.serialize(payload)\n });\n\n item.expires_at = item.expires_at ? new Date(item.expires_at) : item.expires_at;\n\n return item;\n }\n\n protected deserialize(obj: any) {\n return deserialize(obj, {\n type: this.getModel(),\n useAlias: false\n });\n }\n\n protected serialize(obj: any) {\n return serialize(obj, {\n useAlias: false\n });\n }\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptersSettings.js","sourceRoot":"","sources":["../../../src/domain/AdaptersSettings.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {Adapter} from \"./Adapter\";\n\nexport interface AdaptersSettings {\n /**\n * Injectable service to manage database connexion\n */\n Adapter?: Type<Adapter>;\n /**\n *\n */\n lowdbDir?: string;\n\n [key: string]: any;\n}\n\ndeclare global {\n namespace TsED {\n interface AdaptersOptions extends AdaptersSettings {}\n\n interface Configuration {\n adapters: AdaptersSettings;\n }\n }\n}\n"]}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file Automatically generated by barrelsby.
|
|
4
|
+
*/
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const tslib_1 = require("tslib");
|
|
4
7
|
tslib_1.__exportStar(require("./adapters/FileSyncAdapter"), exports);
|
|
5
8
|
tslib_1.__exportStar(require("./adapters/LowDbAdapter"), exports);
|
|
6
9
|
tslib_1.__exportStar(require("./adapters/MemoryAdapter"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./decorators/indexed"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./decorators/injectAdapter"), exports);
|
|
7
12
|
tslib_1.__exportStar(require("./domain/Adapter"), exports);
|
|
8
13
|
tslib_1.__exportStar(require("./domain/AdaptersSettings"), exports);
|
|
9
|
-
tslib_1.__exportStar(require("./decorators/injectAdapter"), exports);
|
|
10
|
-
tslib_1.__exportStar(require("./decorators/indexed"), exports);
|
|
11
14
|
tslib_1.__exportStar(require("./services/Adapters"), exports);
|
|
12
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qEAA2C;AAC3C,kEAAwC;AACxC,mEAAyC;AACzC,+DAAqC;AACrC,qEAA2C;AAC3C,2DAAiC;AACjC,oEAA0C;AAC1C,8DAAoC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./adapters/FileSyncAdapter\";\nexport * from \"./adapters/LowDbAdapter\";\nexport * from \"./adapters/MemoryAdapter\";\nexport * from \"./decorators/indexed\";\nexport * from \"./decorators/injectAdapter\";\nexport * from \"./domain/Adapter\";\nexport * from \"./domain/AdaptersSettings\";\nexport * from \"./services/Adapters\";\n"]}
|
|
@@ -14,15 +14,15 @@ let Adapters = class Adapters {
|
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
16
|
tslib_1.__decorate([
|
|
17
|
-
di_1.Inject(),
|
|
17
|
+
(0, di_1.Inject)(),
|
|
18
18
|
tslib_1.__metadata("design:type", di_1.InjectorService)
|
|
19
19
|
], Adapters.prototype, "injector", void 0);
|
|
20
20
|
tslib_1.__decorate([
|
|
21
|
-
di_1.Constant("adapters.Adapter", MemoryAdapter_1.MemoryAdapter),
|
|
21
|
+
(0, di_1.Constant)("adapters.Adapter", MemoryAdapter_1.MemoryAdapter),
|
|
22
22
|
tslib_1.__metadata("design:type", core_1.Type)
|
|
23
23
|
], Adapters.prototype, "adapter", void 0);
|
|
24
24
|
Adapters = tslib_1.__decorate([
|
|
25
|
-
di_1.Injectable()
|
|
25
|
+
(0, di_1.Injectable)()
|
|
26
26
|
], Adapters);
|
|
27
27
|
exports.Adapters = Adapters;
|
|
28
28
|
//# sourceMappingURL=Adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapters.js","sourceRoot":"","sources":["../../../src/services/Adapters.ts"],"names":[],"mappings":";;;;AAAA,qCAAgC;AAChC,iCAAyF;AACzF,6DAAwD;AAUxD,IAAa,QAAQ,GAArB,MAAa,QAAQ;IAOnB,aAAa,CAAU,OAA6B;QAClD,MAAM,EAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,qBAAgB,EAAE,KAAK,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAa,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAZC;IADC,IAAA,WAAM,GAAE;sCACC,oBAAe;0CAAC;AAG1B;IADC,IAAA,aAAQ,EAAC,kBAAkB,EAAE,6BAAa,CAAC;sCACzB,WAAI;yCAAU;AALtB,QAAQ;IADpB,IAAA,eAAU,GAAE;GACA,QAAQ,CAcpB;AAdY,4BAAQ","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {Constant, DI_PARAM_OPTIONS, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {MemoryAdapter} from \"../adapters/MemoryAdapter\";\nimport {Adapter, AdapterConstructorOptions} from \"../domain/Adapter\";\n\nexport interface AdapterInvokeOptions<T = any> extends AdapterConstructorOptions<T> {\n adapter?: Type<Adapter<T>>;\n\n [key: string]: any;\n}\n\n@Injectable()\nexport class Adapters {\n @Inject()\n injector: InjectorService;\n\n @Constant(\"adapters.Adapter\", MemoryAdapter)\n protected adapter: Type<Adapter>;\n\n invokeAdapter<T = any>(options: AdapterInvokeOptions): Adapter<T> {\n const {adapter = this.adapter, ...props} = options;\n const locals = options.locals || new Map();\n locals.set(DI_PARAM_OPTIONS, props);\n\n return this.injector.invoke<Adapter<T>>(adapter, locals);\n }\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { nameOf } from "@tsed/core";
|
|
3
|
+
import { Configuration, Injectable, Opts, ProviderScope, Scope } from "@tsed/di";
|
|
4
|
+
import { ensureDirSync } from "fs-extra";
|
|
5
|
+
import low from "lowdb";
|
|
6
|
+
import FileSync from "lowdb/adapters/FileSync";
|
|
7
|
+
import { dirname } from "path";
|
|
8
|
+
import { LowDbAdapter } from "./LowDbAdapter.js";
|
|
9
|
+
let FileSyncAdapter = class FileSyncAdapter extends LowDbAdapter {
|
|
10
|
+
constructor(options, configuration) {
|
|
11
|
+
super(options, configuration);
|
|
12
|
+
ensureDirSync(dirname(this.dbFilePath));
|
|
13
|
+
const file = new FileSync(this.dbFilePath);
|
|
14
|
+
this.db = low(file);
|
|
15
|
+
this.db
|
|
16
|
+
.defaults({
|
|
17
|
+
collectionName: this.collectionName,
|
|
18
|
+
modelName: nameOf(this.model),
|
|
19
|
+
collection: []
|
|
20
|
+
})
|
|
21
|
+
.write();
|
|
22
|
+
if (options.readOnly) {
|
|
23
|
+
file.write = () => { };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
FileSyncAdapter = __decorate([
|
|
28
|
+
Injectable(),
|
|
29
|
+
Scope(ProviderScope.INSTANCE),
|
|
30
|
+
__param(0, Opts),
|
|
31
|
+
__param(1, Configuration()),
|
|
32
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
33
|
+
], FileSyncAdapter);
|
|
34
|
+
export { FileSyncAdapter };
|
|
35
|
+
//# sourceMappingURL=FileSyncAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSyncAdapter.js","sourceRoot":"","sources":["../../../src/adapters/FileSyncAdapter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,YAAY,CAAC;AAClC,OAAO,EAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAC,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AACvC,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAe,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAQ1D,IAAa,eAAe,GAA5B,MAAa,eAAwC,SAAQ,YAAe;IAC1E,YAAkB,OAA0C,EAAmB,aAA4B;QACzG,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAE9B,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAoB,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,EAAE;aACJ,QAAQ,CAAC;YACR,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,UAAU,EAAE,EAAE;SACf,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;SACvB;IACH,CAAC;CACF,CAAA;AArBY,eAAe;IAF3B,UAAU,EAAE;IACZ,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;IAEf,WAAA,IAAI,CAAA;IAA8C,WAAA,aAAa,EAAE,CAAA;;GADnE,eAAe,CAqB3B;SArBY,eAAe","sourcesContent":["import {nameOf} from \"@tsed/core\";\nimport {Configuration, Injectable, Opts, ProviderScope, Scope} from \"@tsed/di\";\nimport {ensureDirSync} from \"fs-extra\";\nimport low from \"lowdb\";\nimport FileSync from \"lowdb/adapters/FileSync\";\nimport {dirname} from \"path\";\nimport {AdapterConstructorOptions} from \"../domain/Adapter\";\nimport {AdapterModel, LowDbAdapter} from \"./LowDbAdapter\";\n\nexport interface FileSyncAdapterConstructorOptions extends AdapterConstructorOptions {\n readOnly: true;\n}\n\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class FileSyncAdapter<T extends AdapterModel> extends LowDbAdapter<T> {\n constructor(@Opts options: FileSyncAdapterConstructorOptions, @Configuration() configuration: Configuration) {\n super(options, configuration);\n\n ensureDirSync(dirname(this.dbFilePath));\n\n const file = new FileSync<{collection: T[]}>(this.dbFilePath);\n\n this.db = low(file);\n this.db\n .defaults({\n collectionName: this.collectionName,\n modelName: nameOf(this.model),\n collection: []\n })\n .write();\n\n if (options.readOnly) {\n file.write = () => {};\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import isMatch from "lodash/isMatch";
|
|
2
|
+
import { v4 as uuid } from "uuid";
|
|
3
|
+
import { Adapter } from "../domain/Adapter.js";
|
|
4
|
+
export class LowDbAdapter extends Adapter {
|
|
5
|
+
get collection() {
|
|
6
|
+
return this.db.get("collection");
|
|
7
|
+
}
|
|
8
|
+
get dbFilePath() {
|
|
9
|
+
const lowdbDir = this.configuration.get("adapters.lowdbDir", ".db");
|
|
10
|
+
return `${lowdbDir}/${this.collectionName}.json`;
|
|
11
|
+
}
|
|
12
|
+
async create(payload, expiresAt) {
|
|
13
|
+
if (expiresAt) {
|
|
14
|
+
payload.expires_at = expiresAt;
|
|
15
|
+
}
|
|
16
|
+
payload._id = uuid();
|
|
17
|
+
await this.validate(payload);
|
|
18
|
+
await this.collection.push(payload).write();
|
|
19
|
+
return this.deserialize(payload);
|
|
20
|
+
}
|
|
21
|
+
async upsert(id, payload, expiresAt) {
|
|
22
|
+
let item = await this.findById(id);
|
|
23
|
+
if (!item) {
|
|
24
|
+
payload = { ...payload, _id: id || uuid(), expires_at: expiresAt };
|
|
25
|
+
await this.validate(payload);
|
|
26
|
+
await this.collection.push(payload).write();
|
|
27
|
+
return this.deserialize(payload);
|
|
28
|
+
}
|
|
29
|
+
return (await this.update(id, payload, expiresAt));
|
|
30
|
+
}
|
|
31
|
+
async update(id, payload, expiresAt) {
|
|
32
|
+
return this.updateOne({ _id: id }, payload, expiresAt);
|
|
33
|
+
}
|
|
34
|
+
async updateOne(predicate, payload, expiresAt) {
|
|
35
|
+
let index = this.collection.findIndex(predicate).value();
|
|
36
|
+
if (index === -1) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
let item = this.collection.get(index).value();
|
|
40
|
+
item = {
|
|
41
|
+
_id: item._id,
|
|
42
|
+
expires_at: expiresAt || item.expires_at,
|
|
43
|
+
...this.updateInstance(item, payload)
|
|
44
|
+
};
|
|
45
|
+
await this.validate(item);
|
|
46
|
+
await this.collection.set(index, item).write();
|
|
47
|
+
return this.deserialize(item);
|
|
48
|
+
}
|
|
49
|
+
async findOne(predicate) {
|
|
50
|
+
const item = this.collection.find(predicate).value();
|
|
51
|
+
return this.deserialize(item);
|
|
52
|
+
}
|
|
53
|
+
async findById(_id) {
|
|
54
|
+
return this.findOne({ _id });
|
|
55
|
+
}
|
|
56
|
+
async findAll(predicate = {}) {
|
|
57
|
+
return this.collection
|
|
58
|
+
.filter(predicate)
|
|
59
|
+
.value()
|
|
60
|
+
.map((item) => this.deserialize(item));
|
|
61
|
+
}
|
|
62
|
+
async deleteOne(predicate) {
|
|
63
|
+
const item = this.collection.find(predicate).value();
|
|
64
|
+
if (item) {
|
|
65
|
+
this.collection.remove(({ _id }) => _id === item._id).write();
|
|
66
|
+
return this.deserialize(item);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async deleteById(_id) {
|
|
70
|
+
return this.deleteOne({ _id });
|
|
71
|
+
}
|
|
72
|
+
async deleteMany(predicate) {
|
|
73
|
+
let removedItems = [];
|
|
74
|
+
await this.collection
|
|
75
|
+
.remove((item) => {
|
|
76
|
+
if (isMatch(item, predicate)) {
|
|
77
|
+
removedItems.push(this.deserialize(item));
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
})
|
|
82
|
+
.write();
|
|
83
|
+
return removedItems;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=LowDbAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LowDbAdapter.js","sourceRoot":"","sources":["../../../src/adapters/LowDbAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAC,EAAE,IAAI,IAAI,EAAC,MAAM,MAAM,CAAC;AAChC,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAS1C,MAAM,OAAO,YAAqC,SAAQ,OAAU;IAGlE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,IAAc,UAAU;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,OAAO,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAmB,EAAE,SAAgB;QACvD,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;SAChC;QAED,OAAO,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;QAErB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAY,CAAC,CAAC;QAElC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAU,EAAE,SAAgB;QAC1D,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,GAAG,EAAC,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAC,CAAC;YAEjE,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAY,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAY,CAAC,CAAC,KAAK,EAAE,CAAC;YAEjD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAClC;QAED,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAM,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAU,EAAE,SAAgB;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,EAAE,EAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,SAA2B,EAAE,OAAU,EAAE,SAAgB;QAC9E,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAE9C,IAAI,GAAG;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU;YACxC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;SACtC,CAAC;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAS,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAE/C,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAA2B;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAErD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAC,GAAG,EAAC,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,YAA8B,EAAE;QACnD,OAAO,IAAI,CAAC,UAAU;aACnB,MAAM,CAAC,SAAS,CAAC;aACjB,KAAK,EAAE;aACP,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,SAA2B;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAErD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAE5D,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC/B;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAAW;QACjC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAC,GAAG,EAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,SAAqB;QAC3C,IAAI,YAAY,GAAQ,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,UAAU;aAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;gBAC5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,OAAO,YAAY,CAAC;IACtB,CAAC;CACF","sourcesContent":["import isMatch from \"lodash/isMatch\";\nimport low from \"lowdb\";\nimport {v4 as uuid} from \"uuid\";\nimport {Adapter} from \"../domain/Adapter\";\n\nexport interface AdapterModel {\n _id: string;\n expires_at?: Date;\n\n [key: string]: any;\n}\n\nexport class LowDbAdapter<T extends AdapterModel> extends Adapter<T> {\n protected db: low.LowdbSync<{collection: T[]}>;\n\n get collection() {\n return this.db.get(\"collection\");\n }\n\n protected get dbFilePath() {\n const lowdbDir = this.configuration.get(\"adapters.lowdbDir\", \".db\");\n return `${lowdbDir}/${this.collectionName}.json`;\n }\n\n public async create(payload: Partial<T>, expiresAt?: Date): Promise<T> {\n if (expiresAt) {\n payload.expires_at = expiresAt;\n }\n\n payload._id = uuid();\n\n await this.validate(payload as T);\n\n await this.collection.push(payload as T).write();\n\n return this.deserialize(payload);\n }\n\n public async upsert(id: string, payload: T, expiresAt?: Date): Promise<T> {\n let item = await this.findById(id);\n\n if (!item) {\n payload = {...payload, _id: id || uuid(), expires_at: expiresAt};\n\n await this.validate(payload as T);\n await this.collection.push(payload as T).write();\n\n return this.deserialize(payload);\n }\n\n return (await this.update(id, payload, expiresAt)) as T;\n }\n\n public async update(id: string, payload: T, expiresAt?: Date): Promise<T | undefined> {\n return this.updateOne({_id: id}, payload, expiresAt);\n }\n\n public async updateOne(predicate: Partial<T & any>, payload: T, expiresAt?: Date): Promise<T | undefined> {\n let index = this.collection.findIndex(predicate).value();\n\n if (index === -1) {\n return;\n }\n\n let item = this.collection.get(index).value();\n\n item = {\n _id: item._id,\n expires_at: expiresAt || item.expires_at,\n ...this.updateInstance(item, payload)\n };\n\n await this.validate(item as T);\n await this.collection.set(index, item).write();\n\n return this.deserialize(item);\n }\n\n async findOne(predicate: Partial<T & any>): Promise<T | undefined> {\n const item = this.collection.find(predicate).value();\n\n return this.deserialize(item);\n }\n\n async findById(_id: string): Promise<T | undefined> {\n return this.findOne({_id});\n }\n\n public async findAll(predicate: Partial<T & any> = {}): Promise<T[]> {\n return this.collection\n .filter(predicate)\n .value()\n .map((item) => this.deserialize(item));\n }\n\n public async deleteOne(predicate: Partial<T & any>): Promise<T | undefined> {\n const item = this.collection.find(predicate).value();\n\n if (item) {\n this.collection.remove(({_id}) => _id === item._id).write();\n\n return this.deserialize(item);\n }\n }\n\n public async deleteById(_id: string): Promise<T | undefined> {\n return this.deleteOne({_id} as any);\n }\n\n public async deleteMany(predicate: Partial<T>): Promise<T[]> {\n let removedItems: T[] = [];\n\n await this.collection\n .remove((item) => {\n if (isMatch(item, predicate)) {\n removedItems.push(this.deserialize(item));\n return true;\n }\n return false;\n })\n .write();\n\n return removedItems;\n }\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { Configuration, Injectable, Opts, ProviderScope, Scope } from "@tsed/di";
|
|
3
|
+
import low from "lowdb";
|
|
4
|
+
import Memory from "lowdb/adapters/Memory";
|
|
5
|
+
import { LowDbAdapter } from "./LowDbAdapter.js";
|
|
6
|
+
let MemoryAdapter = class MemoryAdapter extends LowDbAdapter {
|
|
7
|
+
constructor(options, configuration) {
|
|
8
|
+
super(options, configuration);
|
|
9
|
+
this.db = low(new Memory(this.dbFilePath));
|
|
10
|
+
this.db
|
|
11
|
+
.defaults({
|
|
12
|
+
collection: []
|
|
13
|
+
})
|
|
14
|
+
.write();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
MemoryAdapter = __decorate([
|
|
18
|
+
Injectable(),
|
|
19
|
+
Scope(ProviderScope.INSTANCE),
|
|
20
|
+
__param(0, Opts),
|
|
21
|
+
__param(1, Configuration()),
|
|
22
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
23
|
+
], MemoryAdapter);
|
|
24
|
+
export { MemoryAdapter };
|
|
25
|
+
//# sourceMappingURL=MemoryAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryAdapter.js","sourceRoot":"","sources":["../../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAC,MAAM,UAAU,CAAC;AAC/E,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAe,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAI1D,IAAa,aAAa,GAA1B,MAAa,aAAsC,SAAQ,YAAe;IACxE,YAAkB,OAAY,EAAmB,aAA4B;QAC3E,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAE9B,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,CAAoB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE;aACJ,QAAQ,CAAC;YACR,UAAU,EAAE,EAAE;SACf,CAAC;aACD,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAA;AAXY,aAAa;IAFzB,UAAU,EAAE;IACZ,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;IAEf,WAAA,IAAI,CAAA;IAAgB,WAAA,aAAa,EAAE,CAAA;;GADrC,aAAa,CAWzB;SAXY,aAAa","sourcesContent":["import {Configuration, Injectable, Opts, ProviderScope, Scope} from \"@tsed/di\";\nimport low from \"lowdb\";\nimport Memory from \"lowdb/adapters/Memory\";\nimport {AdapterModel, LowDbAdapter} from \"./LowDbAdapter\";\n\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class MemoryAdapter<T extends AdapterModel> extends LowDbAdapter<T> {\n constructor(@Opts options: any, @Configuration() configuration: Configuration) {\n super(options, configuration);\n\n this.db = low(new Memory<{collection: T[]}>(this.dbFilePath));\n this.db\n .defaults({\n collection: []\n })\n .write();\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../../src/decorators/indexed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,OAAO;IACrB,OAAO,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {JsonEntityFn} from \"@tsed/schema\";\n\nexport function Indexed(): PropertyDecorator {\n return JsonEntityFn((entity) => {\n entity.store.set(\"adapter:indexed\", {});\n });\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { classOf, descriptorOf, isClass, isString } from "@tsed/core";
|
|
2
|
+
import { Inject } from "@tsed/di";
|
|
3
|
+
import { Adapters } from "../services/Adapters.js";
|
|
4
|
+
function mapOptions(args) {
|
|
5
|
+
return args.reduce((options, item, index) => {
|
|
6
|
+
if (isString(item)) {
|
|
7
|
+
return {
|
|
8
|
+
...options,
|
|
9
|
+
collectionName: item
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (isClass(item) && classOf(item) !== Object) {
|
|
13
|
+
return {
|
|
14
|
+
...options,
|
|
15
|
+
model: item
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return { ...options, ...item };
|
|
19
|
+
}, {});
|
|
20
|
+
}
|
|
21
|
+
export function InjectAdapter(...args) {
|
|
22
|
+
const options = mapOptions(args);
|
|
23
|
+
return (target) => {
|
|
24
|
+
Inject(Adapters)(target, "$adapters");
|
|
25
|
+
const descriptor = descriptorOf(target, "$onInit");
|
|
26
|
+
Reflect.defineProperty(target, "$onInit", {
|
|
27
|
+
value() {
|
|
28
|
+
this.adapter = this.$adapters.invokeAdapter(options);
|
|
29
|
+
return descriptor && descriptor.value && descriptor.value.call(this);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=injectAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectAdapter.js","sourceRoot":"","sources":["../../../src/decorators/injectAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAO,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,EAAuB,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAEpE,SAAS,UAAU,CAAC,IAAW;IAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAA6B,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO;gBACL,GAAG,OAAO;gBACV,cAAc,EAAE,IAAI;aACrB,CAAC;SACH;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE;YAC7C,OAAO;gBACL,GAAG,OAAO;gBACV,KAAK,EAAE,IAAI;aACZ,CAAC;SACH;QAED,OAAO,EAAC,GAAG,OAAO,EAAE,GAAG,IAAI,EAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAKD,MAAM,UAAU,aAAa,CAAC,GAAG,IAAW;IAC1C,MAAM,OAAO,GAAyB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEnD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;YACxC,KAAK;gBACH,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,SAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAEnE,OAAO,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import {classOf, descriptorOf, isClass, isString, Type} from \"@tsed/core\";\nimport {Inject} from \"@tsed/di\";\nimport {AdapterInvokeOptions, Adapters} from \"../services/Adapters\";\n\nfunction mapOptions(args: any[]): AdapterInvokeOptions {\n return args.reduce((options: AdapterInvokeOptions, item, index) => {\n if (isString(item)) {\n return {\n ...options,\n collectionName: item\n };\n }\n\n if (isClass(item) && classOf(item) !== Object) {\n return {\n ...options,\n model: item\n };\n }\n\n return {...options, ...item};\n }, {});\n}\n\nexport function InjectAdapter(options: AdapterInvokeOptions): PropertyDecorator;\nexport function InjectAdapter(model: Type<any>, options?: Partial<AdapterInvokeOptions>): PropertyDecorator;\nexport function InjectAdapter(collectionName: string, model: Type<any>, options?: Partial<AdapterInvokeOptions>): PropertyDecorator;\nexport function InjectAdapter(...args: any[]): PropertyDecorator {\n const options: AdapterInvokeOptions = mapOptions(args);\n\n return (target) => {\n Inject(Adapters)(target, \"$adapters\");\n const descriptor = descriptorOf(target, \"$onInit\");\n\n Reflect.defineProperty(target, \"$onInit\", {\n value() {\n this.adapter = (this.$adapters as Adapters).invokeAdapter(options);\n\n return descriptor && descriptor.value && descriptor.value.call(this);\n }\n });\n };\n}\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { AjvService } from "@tsed/ajv";
|
|
3
|
+
import { isArray, nameOf } from "@tsed/core";
|
|
4
|
+
import { Configuration, Inject, Opts } from "@tsed/di";
|
|
5
|
+
import { deserialize, serialize } from "@tsed/json-mapper";
|
|
6
|
+
import { getPropertiesStores } from "@tsed/schema";
|
|
7
|
+
function getIndexes(model) {
|
|
8
|
+
return [...getPropertiesStores(model).entries()]
|
|
9
|
+
.filter(([, entity]) => entity.store.has("adapter:indexed"))
|
|
10
|
+
.map(([propertyKey, entity]) => {
|
|
11
|
+
return {
|
|
12
|
+
propertyKey: String(propertyKey),
|
|
13
|
+
options: entity.store.get("adapter:indexed")
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function mapIndexes(indexes) {
|
|
18
|
+
return Object.entries(indexes).reduce((indexes, [propertyKey, options]) => {
|
|
19
|
+
return indexes.concat({
|
|
20
|
+
propertyKey,
|
|
21
|
+
options
|
|
22
|
+
});
|
|
23
|
+
}, []);
|
|
24
|
+
}
|
|
25
|
+
function pluralize(name) {
|
|
26
|
+
return name.slice(-1) === "y" ? `${name.slice(0, name.length - 1)}ies` : name + "s";
|
|
27
|
+
}
|
|
28
|
+
let Adapter = class Adapter {
|
|
29
|
+
constructor(options, configuration) {
|
|
30
|
+
this.configuration = configuration;
|
|
31
|
+
this.model = options.model;
|
|
32
|
+
this.collectionName = options.collectionName || pluralize(nameOf(options.model));
|
|
33
|
+
let indexes = options.indexes || configuration.get(`adapters.${this.collectionName}.indexes`) || getIndexes(this.model);
|
|
34
|
+
if (!isArray(indexes)) {
|
|
35
|
+
indexes = mapIndexes(indexes);
|
|
36
|
+
}
|
|
37
|
+
this.indexes = indexes;
|
|
38
|
+
}
|
|
39
|
+
async validate(value) {
|
|
40
|
+
if (this.getModel()) {
|
|
41
|
+
await this.ajvService.validate(this.serialize(value), {
|
|
42
|
+
type: this.model
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
getModel() {
|
|
47
|
+
return this.model !== Object ? this.model : undefined;
|
|
48
|
+
}
|
|
49
|
+
updateInstance(src, payload) {
|
|
50
|
+
const item = Object.assign({
|
|
51
|
+
...this.serialize(src),
|
|
52
|
+
...this.serialize(payload)
|
|
53
|
+
});
|
|
54
|
+
item.expires_at = item.expires_at ? new Date(item.expires_at) : item.expires_at;
|
|
55
|
+
return item;
|
|
56
|
+
}
|
|
57
|
+
deserialize(obj) {
|
|
58
|
+
return deserialize(obj, {
|
|
59
|
+
type: this.getModel(),
|
|
60
|
+
useAlias: false
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
serialize(obj) {
|
|
64
|
+
return serialize(obj, {
|
|
65
|
+
useAlias: false
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
__decorate([
|
|
70
|
+
Inject(),
|
|
71
|
+
__metadata("design:type", AjvService)
|
|
72
|
+
], Adapter.prototype, "ajvService", void 0);
|
|
73
|
+
Adapter = __decorate([
|
|
74
|
+
__param(0, Opts),
|
|
75
|
+
__param(1, Configuration()),
|
|
76
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
77
|
+
], Adapter);
|
|
78
|
+
export { Adapter };
|
|
79
|
+
//# sourceMappingURL=Adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapter.js","sourceRoot":"","sources":["../../../src/domain/Adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {AjvService} from \"@tsed/ajv\";\nimport {isArray, isObject, nameOf, Type} from \"@tsed/core\";\nimport {Configuration, Inject, Opts} from \"@tsed/di\";\nimport {deserialize, serialize} from \"@tsed/json-mapper\";\nimport {getPropertiesStores} from \"@tsed/schema\";\n\nexport interface AdapterConstructorOptions<T = any> {\n model: Type<T> | Object;\n collectionName?: string;\n indexes?: {\n [propertyKey: string]: Record<string, any>;\n };\n}\n\nfunction getIndexes(model: any) {\n return [...getPropertiesStores(model).entries()]\n .filter(([, entity]) => entity.store.has(\"adapter:indexed\"))\n .map(([propertyKey, entity]) => {\n return {\n propertyKey: String(propertyKey),\n options: entity.store.get(\"adapter:indexed\")\n };\n });\n}\n\nfunction mapIndexes(indexes: {[p: string]: Record<string, any>} | {propertyKey: string; options: any}[]) {\n return Object.entries(indexes).reduce((indexes: any[], [propertyKey, options]) => {\n return indexes.concat({\n propertyKey,\n options\n });\n }, []);\n}\n\nfunction pluralize(name: string) {\n return name.slice(-1) === \"y\" ? `${name.slice(0, name.length - 1)}ies` : name + \"s\";\n}\n\nexport abstract class Adapter<T = any> {\n readonly model: Type<T> | Object;\n readonly collectionName: string;\n readonly indexes: {propertyKey: string; options: any}[];\n\n @Inject()\n private ajvService: AjvService;\n\n constructor(@Opts options: AdapterConstructorOptions, @Configuration() protected configuration: Configuration) {\n this.model = options.model;\n this.collectionName = options.collectionName || pluralize(nameOf(options.model));\n\n let indexes = options.indexes || configuration.get(`adapters.${this.collectionName}.indexes`) || getIndexes(this.model);\n\n if (!isArray(indexes)) {\n indexes = mapIndexes(indexes);\n }\n\n this.indexes = indexes;\n }\n\n async validate(value: T): Promise<void> {\n if (this.getModel()) {\n await this.ajvService.validate(this.serialize(value), {\n type: this.model\n });\n }\n }\n\n abstract create(value: Partial<Omit<T, \"_id\">>, expiresAt?: Date): Promise<T>;\n\n abstract update(id: string, value: T, expiresAt?: Date): Promise<T | undefined>;\n\n abstract updateOne(predicate: Partial<T>, value: Partial<T>, expiresAt?: Date): Promise<T | undefined>;\n\n abstract upsert(id: string, value: T, expiresAt?: Date): Promise<T>;\n\n abstract findOne(predicate: Partial<T>): Promise<T | undefined>;\n\n abstract findById(id: string): Promise<T | undefined>;\n\n abstract findAll(predicate?: Partial<T>): Promise<T[]>;\n\n abstract deleteOne(predicate: Partial<T>): Promise<T | undefined>;\n\n abstract deleteMany(predicate: Partial<T>): Promise<T[]>;\n\n abstract deleteById(id: string): Promise<T | undefined>;\n\n getModel() {\n return (this.model as unknown) !== Object ? this.model : undefined;\n }\n\n protected updateInstance(src: any, payload: any) {\n const item = Object.assign({\n ...this.serialize(src),\n ...this.serialize(payload)\n });\n\n item.expires_at = item.expires_at ? new Date(item.expires_at) : item.expires_at;\n\n return item;\n }\n\n protected deserialize(obj: any) {\n return deserialize(obj, {\n type: this.getModel(),\n useAlias: false\n });\n }\n\n protected serialize(obj: any) {\n return serialize(obj, {\n useAlias: false\n });\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptersSettings.js","sourceRoot":"","sources":["../../../src/domain/AdaptersSettings.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {Adapter} from \"./Adapter\";\n\nexport interface AdaptersSettings {\n /**\n * Injectable service to manage database connexion\n */\n Adapter?: Type<Adapter>;\n /**\n *\n */\n lowdbDir?: string;\n\n [key: string]: any;\n}\n\ndeclare global {\n namespace TsED {\n interface AdaptersOptions extends AdaptersSettings {}\n\n interface Configuration {\n adapters: AdaptersSettings;\n }\n }\n}\n"]}
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
4
|
+
export * from "./adapters/FileSyncAdapter.js";
|
|
5
|
+
export * from "./adapters/LowDbAdapter.js";
|
|
6
|
+
export * from "./adapters/MemoryAdapter.js";
|
|
7
|
+
export * from "./decorators/indexed.js";
|
|
8
|
+
export * from "./decorators/injectAdapter.js";
|
|
9
|
+
export * from "./domain/Adapter.js";
|
|
10
|
+
export * from "./domain/AdaptersSettings.js";
|
|
11
|
+
export * from "./services/Adapters.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./adapters/FileSyncAdapter\";\nexport * from \"./adapters/LowDbAdapter\";\nexport * from \"./adapters/MemoryAdapter\";\nexport * from \"./decorators/indexed\";\nexport * from \"./decorators/injectAdapter\";\nexport * from \"./domain/Adapter\";\nexport * from \"./domain/AdaptersSettings\";\nexport * from \"./services/Adapters\";\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Type } from "@tsed/core";
|
|
3
|
+
import { Constant, DI_PARAM_OPTIONS, Inject, Injectable, InjectorService } from "@tsed/di";
|
|
4
|
+
import { MemoryAdapter } from "../adapters/MemoryAdapter.js";
|
|
5
|
+
let Adapters = class Adapters {
|
|
6
|
+
invokeAdapter(options) {
|
|
7
|
+
const { adapter = this.adapter, ...props } = options;
|
|
8
|
+
const locals = options.locals || new Map();
|
|
9
|
+
locals.set(DI_PARAM_OPTIONS, props);
|
|
10
|
+
return this.injector.invoke(adapter, locals);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
__decorate([
|
|
14
|
+
Inject(),
|
|
15
|
+
__metadata("design:type", InjectorService)
|
|
16
|
+
], Adapters.prototype, "injector", void 0);
|
|
17
|
+
__decorate([
|
|
18
|
+
Constant("adapters.Adapter", MemoryAdapter),
|
|
19
|
+
__metadata("design:type", Type)
|
|
20
|
+
], Adapters.prototype, "adapter", void 0);
|
|
21
|
+
Adapters = __decorate([
|
|
22
|
+
Injectable()
|
|
23
|
+
], Adapters);
|
|
24
|
+
export { Adapters };
|
|
25
|
+
//# sourceMappingURL=Adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapters.js","sourceRoot":"","sources":["../../../src/services/Adapters.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAC;AAChC,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,UAAU,CAAC;AACzF,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAUxD,IAAa,QAAQ,GAArB,MAAa,QAAQ;IAOnB,aAAa,CAAU,OAA6B;QAClD,MAAM,EAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAa,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAZC;IADC,MAAM,EAAE;8BACC,eAAe;0CAAC;AAG1B;IADC,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC;8BACzB,IAAI;yCAAU;AALtB,QAAQ;IADpB,UAAU,EAAE;GACA,QAAQ,CAcpB;SAdY,QAAQ","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {Constant, DI_PARAM_OPTIONS, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {MemoryAdapter} from \"../adapters/MemoryAdapter\";\nimport {Adapter, AdapterConstructorOptions} from \"../domain/Adapter\";\n\nexport interface AdapterInvokeOptions<T = any> extends AdapterConstructorOptions<T> {\n adapter?: Type<Adapter<T>>;\n\n [key: string]: any;\n}\n\n@Injectable()\nexport class Adapters {\n @Inject()\n injector: InjectorService;\n\n @Constant(\"adapters.Adapter\", MemoryAdapter)\n protected adapter: Type<Adapter>;\n\n invokeAdapter<T = any>(options: AdapterInvokeOptions): Adapter<T> {\n const {adapter = this.adapter, ...props} = options;\n const locals = options.locals || new Map();\n locals.set(DI_PARAM_OPTIONS, props);\n\n return this.injector.invoke<Adapter<T>>(adapter, locals);\n }\n}\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Automatically generated by barrelsby.
|
|
3
|
+
*/
|
|
1
4
|
export * from "./adapters/FileSyncAdapter";
|
|
2
5
|
export * from "./adapters/LowDbAdapter";
|
|
3
6
|
export * from "./adapters/MemoryAdapter";
|
|
7
|
+
export * from "./decorators/indexed";
|
|
8
|
+
export * from "./decorators/injectAdapter";
|
|
4
9
|
export * from "./domain/Adapter";
|
|
5
10
|
export * from "./domain/AdaptersSettings";
|
|
6
|
-
export * from "./decorators/injectAdapter";
|
|
7
|
-
export * from "./decorators/indexed";
|
|
8
11
|
export * from "./services/Adapters";
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,39 +1,49 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/adapters",
|
|
3
|
-
"version": "7.0.0-
|
|
3
|
+
"version": "7.0.0-beta.10",
|
|
4
4
|
"description": "Database adapters for Ts.ED",
|
|
5
5
|
"private": false,
|
|
6
6
|
"source": "./src/index.ts",
|
|
7
|
-
"main": "./lib/index.js",
|
|
8
|
-
"
|
|
7
|
+
"main": "./lib/cjs/index.js",
|
|
8
|
+
"module": "./lib/esm/index.js",
|
|
9
|
+
"typings": "./lib/types/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
"types": "./lib/types/index.d.ts",
|
|
12
|
+
"import": "./lib/esm/index.js",
|
|
13
|
+
"require": "./lib/cjs/index.js",
|
|
14
|
+
"default": "./lib/esm/index.js"
|
|
15
|
+
},
|
|
9
16
|
"scripts": {
|
|
10
|
-
"build": "
|
|
11
|
-
"
|
|
17
|
+
"build": "yarn barrels && yarn run build:esm && yarn run build:cjs",
|
|
18
|
+
"build:cjs": "tsc --build tsconfig.compile.json",
|
|
19
|
+
"build:esm": "tsc --build tsconfig.compile.esm.json",
|
|
20
|
+
"barrels": "yarn barrelsby --delete -d ./src -e \"\\.spec\\.ts\" -e \"__mock__\" -e \".benchmark.ts\"",
|
|
21
|
+
"test": "cross-env NODE_ENV=test yarn jest"
|
|
12
22
|
},
|
|
13
23
|
"dependencies": {
|
|
14
|
-
"@types/lowdb": "1.0.
|
|
15
|
-
"@types/uuid": "8.3.
|
|
16
|
-
"fs-extra": "
|
|
24
|
+
"@types/lowdb": "1.0.11",
|
|
25
|
+
"@types/uuid": "8.3.4",
|
|
26
|
+
"fs-extra": "10.0.1",
|
|
17
27
|
"lowdb": "1.0.0",
|
|
18
|
-
"tslib": "2.
|
|
28
|
+
"tslib": "2.3.1",
|
|
19
29
|
"uuid": "8.3.2"
|
|
20
30
|
},
|
|
21
31
|
"devDependencies": {
|
|
22
|
-
"@tsed/ajv": "7.0.0-
|
|
23
|
-
"@tsed/common": "7.0.0-
|
|
24
|
-
"@tsed/core": "7.0.0-
|
|
25
|
-
"@tsed/di": "7.0.0-
|
|
26
|
-
"@tsed/json-mapper": "7.0.0-
|
|
27
|
-
"@tsed/schema": "7.0.0-
|
|
28
|
-
"@types/fs-extra": "9.0.
|
|
32
|
+
"@tsed/ajv": "7.0.0-beta.10",
|
|
33
|
+
"@tsed/common": "7.0.0-beta.10",
|
|
34
|
+
"@tsed/core": "7.0.0-beta.10",
|
|
35
|
+
"@tsed/di": "7.0.0-beta.10",
|
|
36
|
+
"@tsed/json-mapper": "7.0.0-beta.10",
|
|
37
|
+
"@tsed/schema": "7.0.0-beta.10",
|
|
38
|
+
"@types/fs-extra": "9.0.13"
|
|
29
39
|
},
|
|
30
40
|
"peerDependencies": {
|
|
31
|
-
"@tsed/ajv": "^7.0.0-
|
|
32
|
-
"@tsed/common": "^7.0.0-
|
|
33
|
-
"@tsed/core": "^7.0.0-
|
|
34
|
-
"@tsed/di": "^7.0.0-
|
|
35
|
-
"@tsed/json-mapper": "^7.0.0-
|
|
36
|
-
"@tsed/schema": "^7.0.0-
|
|
41
|
+
"@tsed/ajv": "^7.0.0-beta.10",
|
|
42
|
+
"@tsed/common": "^7.0.0-beta.10",
|
|
43
|
+
"@tsed/core": "^7.0.0-beta.10",
|
|
44
|
+
"@tsed/di": "^7.0.0-beta.10",
|
|
45
|
+
"@tsed/json-mapper": "^7.0.0-beta.10",
|
|
46
|
+
"@tsed/schema": "^7.0.0-beta.10",
|
|
37
47
|
"change-case": "^4.1.2",
|
|
38
48
|
"lodash": "^4.17.21"
|
|
39
49
|
},
|
|
@@ -41,7 +51,7 @@
|
|
|
41
51
|
"bugs": {
|
|
42
52
|
"url": "https://github.com/tsedio/tsed/issues"
|
|
43
53
|
},
|
|
44
|
-
"homepage": "https://github.com/tsedio/tsed/tree/
|
|
54
|
+
"homepage": "https://github.com/tsedio/tsed/tree/beta/packages/orm/adapters",
|
|
45
55
|
"author": "Romain Lenzotti",
|
|
46
56
|
"license": "MIT"
|
|
47
57
|
}
|
package/readme.md
CHANGED
|
@@ -29,76 +29,18 @@
|
|
|
29
29
|
|
|
30
30
|
A package of Ts.ED framework. See website: https://tsed.io/tutorials/adapters
|
|
31
31
|
|
|
32
|
-
## Feature
|
|
33
|
-
|
|
34
|
-
Currently, `@tsed/adapters` allows you:
|
|
35
|
-
|
|
36
|
-
- Create
|
|
37
|
-
|
|
38
|
-
## Installation
|
|
39
|
-
|
|
40
|
-
To begin, install the TypeORM module for TS.ED:
|
|
41
|
-
```bash
|
|
42
|
-
npm install --save @tsed/oidc-provider
|
|
43
|
-
npm install --save oidc-provider
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Then import `@tsed/oidc-provider` in your Server:
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
|
-
import {Configuration} from "@tsed/common";
|
|
50
|
-
import "@tsed/oidc-provider"; // import typeorm ts.ed module
|
|
51
|
-
import {Accounts} from "../services/Accounts";
|
|
52
|
-
import {MemoryAdapter} from "../adapters/MemoryAdapter";
|
|
53
|
-
|
|
54
|
-
export const rootDir = __dirname;
|
|
55
|
-
|
|
56
|
-
@Configuration({
|
|
57
|
-
oidc: {
|
|
58
|
-
jwksPath: `${rootDir}/../keys/jwks.json`, // don't forget add this path to .gitignore
|
|
59
|
-
Adapter: MemoryAdapter,
|
|
60
|
-
Accounts: Accounts,
|
|
61
|
-
// Clients: Clients,
|
|
62
|
-
clients: [
|
|
63
|
-
{
|
|
64
|
-
client_id: "client_id",
|
|
65
|
-
client_secret: "client_secret",
|
|
66
|
-
redirect_uris: [
|
|
67
|
-
"https://host.fr/"
|
|
68
|
-
]
|
|
69
|
-
}
|
|
70
|
-
],
|
|
71
|
-
options: { // Oidc-provider options See https://github.com/panva/node-oidc-provider/blob/master/docs/README.md
|
|
72
|
-
formats: {
|
|
73
|
-
AccessToken: "jwt"
|
|
74
|
-
},
|
|
75
|
-
features: {
|
|
76
|
-
encryption: {enabled: true},
|
|
77
|
-
introspection: {enabled: true},
|
|
78
|
-
revocation: {enabled: true}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
})
|
|
83
|
-
export class Server {
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
32
|
## Contributors
|
|
89
33
|
|
|
90
34
|
Please read [contributing guidelines here](https://tsed.io/CONTRIBUTING.html)
|
|
91
35
|
|
|
92
36
|
<a href="https://github.com/tsedio/ts-express-decorators/graphs/contributors"><img src="https://opencollective.com/tsed/contributors.svg?width=890" /></a>
|
|
93
37
|
|
|
94
|
-
|
|
95
38
|
## Backers
|
|
96
39
|
|
|
97
40
|
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/tsed#backer)]
|
|
98
41
|
|
|
99
42
|
<a href="https://opencollective.com/tsed#backers" target="_blank"><img src="https://opencollective.com/tsed/backers.svg?width=890"></a>
|
|
100
43
|
|
|
101
|
-
|
|
102
44
|
## Sponsors
|
|
103
45
|
|
|
104
46
|
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/tsed#sponsor)]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.compile.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"module": "ES2020",
|
|
6
|
+
"rootDir": "src",
|
|
7
|
+
"outDir": "./lib/esm",
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"declarationDir": "./lib/types"
|
|
10
|
+
},
|
|
11
|
+
"exclude": ["node_modules", "test", "lib", "benchmark", "coverage", "spec", "**/*.benchmark.ts", "**/*.spec.ts", "keys", "jest.config.js"]
|
|
12
|
+
}
|
package/.mocharc.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileSyncAdapter.js","sourceRoot":"","sources":["../../src/adapters/FileSyncAdapter.ts"],"names":[],"mappings":";;;;AAAA,qCAAkC;AAClC,iCAA+E;AAC/E,uCAAuC;AACvC,0DAAwB;AACxB,+EAA+C;AAC/C,+BAA6B;AAE7B,iDAA0D;AAQ1D,IAAa,eAAe,GAA5B,MAAa,eAAwC,SAAQ,2BAAe;IAC1E,YAAkB,OAA0C,EAAmB,aAA4B;QACzG,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAE9B,wBAAa,CAAC,cAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,IAAI,kBAAQ,CAAoB,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,EAAE,GAAG,eAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,EAAE;aACJ,QAAQ,CAAC;YACR,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,aAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,UAAU,EAAE,EAAE;SACf,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;SACvB;IACH,CAAC;CACF,CAAA;AArBY,eAAe;IAF3B,eAAU,EAAE;IACZ,UAAK,CAAC,kBAAa,CAAC,QAAQ,CAAC;IAEf,mBAAA,SAAI,CAAA,EAA8C,mBAAA,kBAAa,EAAE,CAAA;;GADnE,eAAe,CAqB3B;AArBY,0CAAe","sourcesContent":["import {nameOf} from \"@tsed/core\";\nimport {Configuration, Injectable, Opts, ProviderScope, Scope} from \"@tsed/di\";\nimport {ensureDirSync} from \"fs-extra\";\nimport low from \"lowdb\";\nimport FileSync from \"lowdb/adapters/FileSync\";\nimport {dirname} from \"path\";\nimport {AdapterConstructorOptions} from \"../domain/Adapter\";\nimport {AdapterModel, LowDbAdapter} from \"./LowDbAdapter\";\n\nexport interface FileSyncAdapterConstructorOptions extends AdapterConstructorOptions {\n readOnly: true;\n}\n\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class FileSyncAdapter<T extends AdapterModel> extends LowDbAdapter<T> {\n constructor(@Opts options: FileSyncAdapterConstructorOptions, @Configuration() configuration: Configuration) {\n super(options, configuration);\n\n ensureDirSync(dirname(this.dbFilePath));\n\n const file = new FileSync<{collection: T[]}>(this.dbFilePath);\n\n this.db = low(file);\n this.db\n .defaults({\n collectionName: this.collectionName,\n modelName: nameOf(this.model),\n collection: []\n })\n .write();\n\n if (options.readOnly) {\n file.write = () => {};\n }\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LowDbAdapter.js","sourceRoot":"","sources":["../../src/adapters/LowDbAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {Type} from \"@tsed/core\";\nimport isMatch from \"lodash/isMatch\";\nimport low from \"lowdb\";\nimport {v4 as uuid} from \"uuid\";\nimport {Adapter} from \"../domain/Adapter\";\n\nexport interface AdapterModel {\n _id: string;\n expires_at?: Date;\n\n [key: string]: any;\n}\n\nexport class LowDbAdapter<T extends AdapterModel> extends Adapter<T> {\n protected db: low.LowdbSync<{collection: T[]}>;\n\n get collection() {\n return this.db.get(\"collection\");\n }\n\n protected get dbFilePath() {\n const lowdbDir = this.configuration.get(\"adapters.lowdbDir\", \".db\");\n return `${lowdbDir}/${this.collectionName}.json`;\n }\n\n public async create(payload: Partial<T>, expiresAt?: Date): Promise<T> {\n if (expiresAt) {\n payload.expires_at = expiresAt;\n }\n\n payload._id = uuid();\n\n await this.validate(payload as T);\n\n await this.collection.push(payload as T).write();\n\n return this.deserialize(payload);\n }\n\n public async upsert(id: string, payload: T, expiresAt?: Date): Promise<T> {\n let item = await this.findById(id);\n\n if (!item) {\n payload = {...payload, _id: id || uuid(), expires_at: expiresAt};\n\n await this.validate(payload as T);\n await this.collection.push(payload as T).write();\n\n return this.deserialize(payload);\n }\n\n return (await this.update(id, payload, expiresAt)) as T;\n }\n\n public async update(id: string, payload: T, expiresAt?: Date): Promise<T | undefined> {\n return this.updateOne({_id: id}, payload, expiresAt);\n }\n\n public async updateOne(predicate: Partial<T & any>, payload: T, expiresAt?: Date): Promise<T | undefined> {\n let index = this.collection.findIndex(predicate).value();\n\n if (index === -1) {\n return;\n }\n\n let item = this.collection.get(index).value();\n\n item = {\n _id: item._id,\n expires_at: expiresAt || item.expires_at,\n ...this.updateInstance(item, payload)\n };\n\n await this.validate(item as T);\n await this.collection.set(index, item).write();\n\n return this.deserialize(item);\n }\n\n async findOne(predicate: Partial<T & any>): Promise<T | undefined> {\n const item = this.collection.find(predicate).value();\n\n return this.deserialize(item);\n }\n\n async findById(_id: string): Promise<T | undefined> {\n return this.findOne({_id});\n }\n\n public async findAll(predicate: Partial<T & any> = {}): Promise<T[]> {\n return this.collection\n .filter(predicate)\n .value()\n .map((item) => this.deserialize(item));\n }\n\n public async deleteOne(predicate: Partial<T & any>): Promise<T | undefined> {\n const item = this.collection.find(predicate).value();\n\n if (item) {\n this.collection.remove(({_id}) => _id === item._id).write();\n\n return this.deserialize(item);\n }\n }\n\n public async deleteById(_id: string): Promise<T | undefined> {\n return this.deleteOne({_id} as any);\n }\n\n public async deleteMany(predicate: Partial<T>): Promise<T[]> {\n let removedItems: T[] = [];\n\n await this.collection\n .remove((item) => {\n if (isMatch(item, predicate)) {\n removedItems.push(this.deserialize(item));\n return true;\n }\n return false;\n })\n .write();\n\n return removedItems;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryAdapter.js","sourceRoot":"","sources":["../../src/adapters/MemoryAdapter.ts"],"names":[],"mappings":";;;;AAAA,iCAA+E;AAC/E,0DAAwB;AACxB,2EAA2C;AAC3C,iDAA0D;AAI1D,IAAa,aAAa,GAA1B,MAAa,aAAsC,SAAQ,2BAAe;IACxE,YAAkB,OAAY,EAAmB,aAA4B;QAC3E,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAE9B,IAAI,CAAC,EAAE,GAAG,eAAG,CAAC,IAAI,gBAAM,CAAoB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE;aACJ,QAAQ,CAAC;YACR,UAAU,EAAE,EAAE;SACf,CAAC;aACD,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAA;AAXY,aAAa;IAFzB,eAAU,EAAE;IACZ,UAAK,CAAC,kBAAa,CAAC,QAAQ,CAAC;IAEf,mBAAA,SAAI,CAAA,EAAgB,mBAAA,kBAAa,EAAE,CAAA;;GADrC,aAAa,CAWzB;AAXY,sCAAa","sourcesContent":["import {Configuration, Injectable, Opts, ProviderScope, Scope} from \"@tsed/di\";\nimport low from \"lowdb\";\nimport Memory from \"lowdb/adapters/Memory\";\nimport {AdapterModel, LowDbAdapter} from \"./LowDbAdapter\";\n\n@Injectable()\n@Scope(ProviderScope.INSTANCE)\nexport class MemoryAdapter<T extends AdapterModel> extends LowDbAdapter<T> {\n constructor(@Opts options: any, @Configuration() configuration: Configuration) {\n super(options, configuration);\n\n this.db = low(new Memory<{collection: T[]}>(this.dbFilePath));\n this.db\n .defaults({\n collection: []\n })\n .write();\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../src/decorators/indexed.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAE1C,SAAgB,OAAO;IACrB,OAAO,qBAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAJD,0BAIC","sourcesContent":["import {JsonEntityFn} from \"@tsed/schema\";\n\nexport function Indexed(): PropertyDecorator {\n return JsonEntityFn((entity) => {\n entity.store.set(\"adapter:indexed\", {});\n });\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injectAdapter.js","sourceRoot":"","sources":["../../src/decorators/injectAdapter.ts"],"names":[],"mappings":";;;AAAA,qCAA0E;AAC1E,iCAAgC;AAChC,mDAAoE;AAEpE,SAAS,UAAU,CAAC,IAAW;IAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAA6B,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,eAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO;gBACL,GAAG,OAAO;gBACV,cAAc,EAAE,IAAI;aACrB,CAAC;SACH;QAED,IAAI,cAAO,CAAC,IAAI,CAAC,IAAI,cAAO,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE;YAC7C,OAAO;gBACL,GAAG,OAAO;gBACV,KAAK,EAAE,IAAI;aACZ,CAAC;SACH;QAED,OAAO,EAAC,GAAG,OAAO,EAAE,GAAG,IAAI,EAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAKD,SAAgB,aAAa,CAAC,GAAG,IAAW;IAC1C,MAAM,OAAO,GAAyB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,WAAM,CAAC,mBAAQ,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,mBAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEnD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;YACxC,KAAK;gBACH,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,SAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAEnE,OAAO,UAAU,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAfD,sCAeC","sourcesContent":["import {classOf, descriptorOf, isClass, isString, Type} from \"@tsed/core\";\nimport {Inject} from \"@tsed/di\";\nimport {AdapterInvokeOptions, Adapters} from \"../services/Adapters\";\n\nfunction mapOptions(args: any[]): AdapterInvokeOptions {\n return args.reduce((options: AdapterInvokeOptions, item, index) => {\n if (isString(item)) {\n return {\n ...options,\n collectionName: item\n };\n }\n\n if (isClass(item) && classOf(item) !== Object) {\n return {\n ...options,\n model: item\n };\n }\n\n return {...options, ...item};\n }, {});\n}\n\nexport function InjectAdapter(options: AdapterInvokeOptions): PropertyDecorator;\nexport function InjectAdapter(model: Type<any>, options?: Partial<AdapterInvokeOptions>): PropertyDecorator;\nexport function InjectAdapter(collectionName: string, model: Type<any>, options?: Partial<AdapterInvokeOptions>): PropertyDecorator;\nexport function InjectAdapter(...args: any[]): PropertyDecorator {\n const options: AdapterInvokeOptions = mapOptions(args);\n\n return (target) => {\n Inject(Adapters)(target, \"$adapters\");\n const descriptor = descriptorOf(target, \"$onInit\");\n\n Reflect.defineProperty(target, \"$onInit\", {\n value() {\n this.adapter = (this.$adapters as Adapters).invokeAdapter(options);\n\n return descriptor && descriptor.value && descriptor.value.call(this);\n }\n });\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Adapter.js","sourceRoot":"","sources":["../../src/domain/Adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {AjvService} from \"@tsed/ajv\";\nimport {isArray, isObject, nameOf, Type} from \"@tsed/core\";\nimport {Configuration, Inject, Opts} from \"@tsed/di\";\nimport {deserialize, serialize} from \"@tsed/json-mapper\";\nimport {getPropertiesStores} from \"@tsed/schema\";\n\nexport interface AdapterConstructorOptions<T = any> {\n model: Type<T> | Object;\n collectionName?: string;\n indexes?: {\n [propertyKey: string]: Record<string, any>;\n };\n}\n\nfunction getIndexes(model: any) {\n return [...getPropertiesStores(model).entries()]\n .filter(([, entity]) => entity.store.has(\"adapter:indexed\"))\n .map(([propertyKey, entity]) => {\n return {\n propertyKey: String(propertyKey),\n options: entity.store.get(\"adapter:indexed\")\n };\n });\n}\n\nfunction mapIndexes(indexes: {[p: string]: Record<string, any>} | {propertyKey: string; options: any}[]) {\n return Object.entries(indexes).reduce((indexes: any[], [propertyKey, options]) => {\n return indexes.concat({\n propertyKey,\n options\n });\n }, []);\n}\n\nfunction pluralize(name: string) {\n return name.slice(-1) === \"y\" ? `${name.slice(0, name.length - 1)}ies` : name + \"s\";\n}\n\nexport abstract class Adapter<T = any> {\n readonly model: Type<T> | Object;\n readonly collectionName: string;\n readonly indexes: {propertyKey: string; options: any}[];\n\n @Inject()\n private ajvService: AjvService;\n\n constructor(@Opts options: AdapterConstructorOptions, @Configuration() protected configuration: Configuration) {\n this.model = options.model;\n this.collectionName = options.collectionName || pluralize(nameOf(options.model));\n\n let indexes = options.indexes || configuration.get(`adapters.${this.collectionName}.indexes`) || getIndexes(this.model);\n\n if (!isArray(indexes)) {\n indexes = mapIndexes(indexes);\n }\n\n this.indexes = indexes;\n }\n\n async validate(value: T): Promise<void> {\n if (this.getModel()) {\n await this.ajvService.validate(this.serialize(value), {\n type: this.model\n });\n }\n }\n\n abstract create(value: Partial<Omit<T, \"_id\">>, expiresAt?: Date): Promise<T>;\n\n abstract update(id: string, value: T, expiresAt?: Date): Promise<T | undefined>;\n\n abstract updateOne(predicate: Partial<T>, value: Partial<T>, expiresAt?: Date): Promise<T | undefined>;\n\n abstract upsert(id: string, value: T, expiresAt?: Date): Promise<T>;\n\n abstract findOne(predicate: Partial<T>): Promise<T | undefined>;\n\n abstract findById(id: string): Promise<T | undefined>;\n\n abstract findAll(predicate?: Partial<T>): Promise<T[]>;\n\n abstract deleteOne(predicate: Partial<T>): Promise<T | undefined>;\n\n abstract deleteMany(predicate: Partial<T>): Promise<T[]>;\n\n abstract deleteById(id: string): Promise<T | undefined>;\n\n getModel() {\n return (this.model as unknown) !== Object ? this.model : undefined;\n }\n\n protected updateInstance(src: any, payload: any) {\n const item = Object.assign({\n ...this.serialize(src),\n ...this.serialize(payload)\n });\n\n item.expires_at = item.expires_at ? new Date(item.expires_at) : item.expires_at;\n\n return item;\n }\n\n protected deserialize(obj: any) {\n return deserialize(obj, {\n type: this.getModel(),\n useAlias: false\n });\n }\n\n protected serialize(obj: any) {\n return serialize(obj, {\n useAlias: false\n });\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AdaptersSettings.js","sourceRoot":"","sources":["../../src/domain/AdaptersSettings.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {Adapter} from \"./Adapter\";\n\nexport interface AdaptersSettings {\n /**\n * Injectable service to manage database connexion\n */\n Adapter?: Type<Adapter>;\n /**\n *\n */\n lowdbDir?: string;\n\n [key: string]: any;\n}\n\ndeclare global {\n namespace TsED {\n interface AdaptersOptions extends AdaptersSettings {}\n\n interface Configuration {\n adapters: AdaptersSettings;\n }\n }\n}\n"]}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,kEAAwC;AACxC,mEAAyC;AACzC,2DAAiC;AACjC,oEAA0C;AAC1C,qEAA2C;AAC3C,+DAAqC;AACrC,8DAAoC","sourcesContent":["export * from \"./adapters/FileSyncAdapter\";\nexport * from \"./adapters/LowDbAdapter\";\nexport * from \"./adapters/MemoryAdapter\";\nexport * from \"./domain/Adapter\";\nexport * from \"./domain/AdaptersSettings\";\nexport * from \"./decorators/injectAdapter\";\nexport * from \"./decorators/indexed\";\nexport * from \"./services/Adapters\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Adapters.js","sourceRoot":"","sources":["../../src/services/Adapters.ts"],"names":[],"mappings":";;;;AAAA,qCAAgC;AAChC,iCAAyF;AACzF,6DAAwD;AAUxD,IAAa,QAAQ,GAArB,MAAa,QAAQ;IAOnB,aAAa,CAAU,OAA6B;QAClD,MAAM,EAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,qBAAgB,EAAE,KAAK,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAa,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAZC;IADC,WAAM,EAAE;sCACC,oBAAe;0CAAC;AAG1B;IADC,aAAQ,CAAC,kBAAkB,EAAE,6BAAa,CAAC;sCACzB,WAAI;yCAAU;AALtB,QAAQ;IADpB,eAAU,EAAE;GACA,QAAQ,CAcpB;AAdY,4BAAQ","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {Constant, DI_PARAM_OPTIONS, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {MemoryAdapter} from \"../adapters/MemoryAdapter\";\nimport {Adapter, AdapterConstructorOptions} from \"../domain/Adapter\";\n\nexport interface AdapterInvokeOptions<T = any> extends AdapterConstructorOptions<T> {\n adapter?: Type<Adapter<T>>;\n\n [key: string]: any;\n}\n\n@Injectable()\nexport class Adapters {\n @Inject()\n injector: InjectorService;\n\n @Constant(\"adapters.Adapter\", MemoryAdapter)\n protected adapter: Type<Adapter>;\n\n invokeAdapter<T = any>(options: AdapterInvokeOptions): Adapter<T> {\n const {adapter = this.adapter, ...props} = options;\n const locals = options.locals || new Map();\n locals.set(DI_PARAM_OPTIONS, props);\n\n return this.injector.invoke<Adapter<T>>(adapter, locals);\n }\n}\n"]}
|