@atls/nestjs-dataloader 0.0.3 → 0.0.5
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/README.md +51 -0
- package/dist/decorators/index.d.ts +2 -2
- package/dist/decorators/index.js +2 -2
- package/dist/decorators/{Loader.js → loader.decorator.js} +4 -3
- package/dist/decorators/order-result-by-key.decorator.js +17 -0
- package/dist/interceptors/{DataLoaderInterceptor.d.ts → data-loader.interceptor.d.ts} +3 -1
- package/dist/interceptors/{DataLoaderInterceptor.js → data-loader.interceptor.js} +3 -2
- package/dist/interceptors/index.d.ts +1 -1
- package/dist/interceptors/index.js +1 -1
- package/dist/interfaces/index.d.ts +1 -1
- package/dist/interfaces/index.js +1 -1
- package/package.json +34 -27
- package/dist/decorators/OrderResultByKey.js +0 -19
- /package/dist/decorators/{Loader.d.ts → loader.decorator.d.ts} +0 -0
- /package/dist/decorators/{OrderResultByKey.d.ts → order-result-by-key.decorator.d.ts} +0 -0
- /package/dist/interfaces/{NestDataLoader.d.ts → nest-dataloader.interfaces.d.ts} +0 -0
- /package/dist/interfaces/{NestDataLoader.js → nest-dataloader.interfaces.js} +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Установка
|
|
2
|
+
```bash
|
|
3
|
+
yarn add @atls/nestjs-dataloader
|
|
4
|
+
```
|
|
5
|
+
|
|
6
|
+
# Использование
|
|
7
|
+
1. Импортируйте DataLoaderModule в ваш модуль:
|
|
8
|
+
```typescript
|
|
9
|
+
import { DataLoaderModule } from '@atls/nestjs-dataloader';
|
|
10
|
+
|
|
11
|
+
@Module({
|
|
12
|
+
imports: [DataLoaderModule],
|
|
13
|
+
})
|
|
14
|
+
export class AppModule {}
|
|
15
|
+
```
|
|
16
|
+
2. Создайте свой кастомный DataLoader:
|
|
17
|
+
```typescript
|
|
18
|
+
import * as DataLoader from 'dataloader';
|
|
19
|
+
import { Injectable } from '@nestjs/common';
|
|
20
|
+
|
|
21
|
+
@Injectable()
|
|
22
|
+
export class MyDataLoader extends DataLoader<string, string> {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(async (keys: string[]) => {
|
|
25
|
+
// Ваш код для загрузки данных пачками
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
3. Зарегистрируйте ваш DataLoader в провайдерах:
|
|
31
|
+
```typescript
|
|
32
|
+
import { MyDataLoader } from './my-dataloader';
|
|
33
|
+
|
|
34
|
+
@Module({
|
|
35
|
+
providers: [MyDataLoader],
|
|
36
|
+
})
|
|
37
|
+
export class AppModule {}
|
|
38
|
+
```
|
|
39
|
+
4. Инжектируйте DataLoader в резолверы и сервисы:
|
|
40
|
+
```typescript
|
|
41
|
+
import { MyDataLoader } from './my-dataloader';
|
|
42
|
+
|
|
43
|
+
@Injectable()
|
|
44
|
+
export class MyService {
|
|
45
|
+
constructor(private readonly dataLoader: MyDataLoader) {}
|
|
46
|
+
|
|
47
|
+
async getData(key: string) {
|
|
48
|
+
return this.dataLoader.load(key);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
1
|
+
export * from './order-result-by-key.decorator';
|
|
2
|
+
export * from './loader.decorator';
|
package/dist/decorators/index.js
CHANGED
|
@@ -10,5 +10,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
14
|
-
__exportStar(require("./
|
|
13
|
+
__exportStar(require("./order-result-by-key.decorator"), exports);
|
|
14
|
+
__exportStar(require("./loader.decorator"), exports);
|
|
@@ -4,14 +4,15 @@ exports.Loader = void 0;
|
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const core_1 = require("@nestjs/core");
|
|
6
6
|
const graphql_1 = require("@nestjs/graphql");
|
|
7
|
+
const common_2 = require("@nestjs/common");
|
|
7
8
|
const constants_1 = require("../constants");
|
|
8
|
-
const
|
|
9
|
-
exports.Loader =
|
|
9
|
+
const data_loader_interceptor_1 = require("../interceptors/data-loader.interceptor");
|
|
10
|
+
exports.Loader = (0, common_2.createParamDecorator)((type, context) => {
|
|
10
11
|
const graphqlExecutionContext = graphql_1.GqlExecutionContext.create(context);
|
|
11
12
|
const ctx = graphqlExecutionContext.getContext();
|
|
12
13
|
if (ctx[constants_1.GET_LOADER_CONTEXT_KEY] === undefined) {
|
|
13
14
|
throw new common_1.InternalServerErrorException(`
|
|
14
|
-
You should provide interceptor ${
|
|
15
|
+
You should provide interceptor ${data_loader_interceptor_1.DataLoaderInterceptor.name} globaly with ${core_1.APP_INTERCEPTOR}
|
|
15
16
|
`);
|
|
16
17
|
}
|
|
17
18
|
return ctx[constants_1.GET_LOADER_CONTEXT_KEY](type);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderResultByKey = void 0;
|
|
4
|
+
const OrderResultByKey = (key = 'id', defaultValue = undefined) => (target, propertyKey, descriptor) => {
|
|
5
|
+
const original = descriptor.value;
|
|
6
|
+
descriptor.value = async function (keys, ...args) {
|
|
7
|
+
const method = original.bind(this);
|
|
8
|
+
const result = await method(keys, ...args);
|
|
9
|
+
const resultByKey = result.reduce((res, item) => ({
|
|
10
|
+
...res,
|
|
11
|
+
[item[key]]: item,
|
|
12
|
+
}), {});
|
|
13
|
+
return keys.map((itemKey) => resultByKey[itemKey] || defaultValue);
|
|
14
|
+
};
|
|
15
|
+
return descriptor;
|
|
16
|
+
};
|
|
17
|
+
exports.OrderResultByKey = OrderResultByKey;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { CallHandler
|
|
1
|
+
import { CallHandler } from '@nestjs/common';
|
|
2
|
+
import { ExecutionContext } from '@nestjs/common';
|
|
3
|
+
import { NestInterceptor } from '@nestjs/common';
|
|
2
4
|
import { ModuleRef } from '@nestjs/core';
|
|
3
5
|
import { Observable } from 'rxjs';
|
|
4
6
|
export declare class DataLoaderInterceptor implements NestInterceptor {
|
|
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.DataLoaderInterceptor = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
|
+
const common_2 = require("@nestjs/common");
|
|
14
15
|
const core_1 = require("@nestjs/core");
|
|
15
16
|
const graphql_1 = require("@nestjs/graphql");
|
|
16
17
|
const constants_1 = require("../constants");
|
|
@@ -30,7 +31,7 @@ let DataLoaderInterceptor = class DataLoaderInterceptor {
|
|
|
30
31
|
.generateDataLoader();
|
|
31
32
|
}
|
|
32
33
|
catch (e) {
|
|
33
|
-
throw new
|
|
34
|
+
throw new common_2.InternalServerErrorException(`The loader ${type} is not provided`);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
return ctx[type];
|
|
@@ -40,7 +41,7 @@ let DataLoaderInterceptor = class DataLoaderInterceptor {
|
|
|
40
41
|
}
|
|
41
42
|
};
|
|
42
43
|
DataLoaderInterceptor = __decorate([
|
|
43
|
-
common_1.Injectable(),
|
|
44
|
+
(0, common_1.Injectable)(),
|
|
44
45
|
__metadata("design:paramtypes", [core_1.ModuleRef])
|
|
45
46
|
], DataLoaderInterceptor);
|
|
46
47
|
exports.DataLoaderInterceptor = DataLoaderInterceptor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './data-loader.interceptor';
|
|
@@ -10,4 +10,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
13
|
+
__exportStar(require("./data-loader.interceptor"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './nest-dataloader.interfaces';
|
package/dist/interfaces/index.js
CHANGED
|
@@ -10,4 +10,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
13
|
+
__exportStar(require("./nest-dataloader.interfaces"), exports);
|
package/package.json
CHANGED
|
@@ -1,39 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atls/nestjs-dataloader",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"license": "BSD-3 Clause",
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"license": "BSD-3-Clause",
|
|
6
5
|
"main": "dist/index.js",
|
|
7
|
-
"source": "src/index.ts",
|
|
8
|
-
"typings": "dist/types/index.d.ts",
|
|
9
6
|
"files": [
|
|
10
7
|
"dist"
|
|
11
8
|
],
|
|
12
|
-
"publishConfig": {
|
|
13
|
-
"access": "public"
|
|
14
|
-
},
|
|
15
9
|
"scripts": {
|
|
16
|
-
"build": "yarn
|
|
17
|
-
"
|
|
18
|
-
"
|
|
10
|
+
"build": "yarn library build",
|
|
11
|
+
"prepack": "yarn run build",
|
|
12
|
+
"postpack": "rm -rf dist"
|
|
19
13
|
},
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"@nestjs/core": "^8.0.4",
|
|
23
|
-
"@nestjs/graphql": "^7.0.0",
|
|
24
|
-
"dataloader": "^2.0.0",
|
|
25
|
-
"rxjs": "^7.2.0"
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"dataloader": "^2.1.0"
|
|
26
16
|
},
|
|
27
17
|
"devDependencies": {
|
|
28
|
-
"@nestjs/common": "^8.0.
|
|
29
|
-
"@nestjs/core": "^8.0.
|
|
30
|
-
"@nestjs/graphql": "^
|
|
31
|
-
"@
|
|
32
|
-
"
|
|
33
|
-
"
|
|
18
|
+
"@nestjs/common": "^8.0.5",
|
|
19
|
+
"@nestjs/core": "^8.0.5",
|
|
20
|
+
"@nestjs/graphql": "^10.0.9",
|
|
21
|
+
"@nestjs/microservices": "^8.0.5",
|
|
22
|
+
"@nestjs/testing": "^8.0.5",
|
|
23
|
+
"@types/lodash": "^4.14.178",
|
|
24
|
+
"@types/node": "^17.0.10",
|
|
25
|
+
"get-port": "^5.1.1",
|
|
26
|
+
"graphql": "^15.5.0",
|
|
34
27
|
"reflect-metadata": "0.1.13",
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
28
|
+
"rxjs": "7.5.2",
|
|
29
|
+
"supertest": "^6.2.2",
|
|
30
|
+
"ts-morph": "^14.0.0",
|
|
31
|
+
"ws": "^8.4.2"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@nestjs/common": "^8.0.0",
|
|
35
|
+
"@nestjs/core": "^8.0.0",
|
|
36
|
+
"@nestjs/graphql": "^10.0.0",
|
|
37
|
+
"graphql": "^15.5.0",
|
|
38
|
+
"reflect-metadata": "^0.1.12",
|
|
39
|
+
"rxjs": "^6.3.3"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"main": "dist/index.js",
|
|
43
|
+
"typings": "dist/index.d.ts"
|
|
44
|
+
},
|
|
45
|
+
"typings": "dist/index.d.ts"
|
|
39
46
|
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OrderResultByKey = void 0;
|
|
4
|
-
const OrderResultByKey = (key = 'id', defaultValue = undefined) => (target, propertyKey, descriptor) => {
|
|
5
|
-
const original = descriptor.value;
|
|
6
|
-
descriptor.value = async (keys, ...args) => {
|
|
7
|
-
try {
|
|
8
|
-
const method = original.bind(this);
|
|
9
|
-
const result = await method(keys, ...args);
|
|
10
|
-
const resultByKey = result.reduce((res, item) => (Object.assign(Object.assign({}, res), { [item[key]]: item })), {});
|
|
11
|
-
return keys.map((itemKey) => resultByKey[itemKey] || defaultValue);
|
|
12
|
-
}
|
|
13
|
-
catch (error) {
|
|
14
|
-
throw error;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
return descriptor;
|
|
18
|
-
};
|
|
19
|
-
exports.OrderResultByKey = OrderResultByKey;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|