@ptc-org/nestjs-query-graphql 9.3.0 → 9.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ptc-org/nestjs-query-graphql",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.4.0",
|
|
4
4
|
"description": "Nestjs graphql query adapter",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"lodash.omit": "^4.5.0",
|
|
35
35
|
"pluralize": "^8.0.0",
|
|
36
36
|
"tslib": "^2.8.1",
|
|
37
|
-
"@ptc-org/nestjs-query-core": "9.
|
|
37
|
+
"@ptc-org/nestjs-query-core": "9.4.0",
|
|
38
38
|
"lodash.merge": "4.6.2",
|
|
39
39
|
"reflect-metadata": "0.2.2"
|
|
40
40
|
},
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Class, QueryService } from '@ptc-org/nestjs-query-core';
|
|
2
2
|
import { NestjsQueryDataloader } from './relations.loader';
|
|
3
3
|
export type ReferenceArgs = {
|
|
4
|
-
|
|
4
|
+
[key: string]: string | number;
|
|
5
5
|
};
|
|
6
6
|
export declare class ReferenceLoader<DTO> implements NestjsQueryDataloader<DTO, ReferenceArgs, DTO | undefined | Error> {
|
|
7
7
|
readonly DTOClass: Class<DTO>;
|
|
8
8
|
private readonly logger;
|
|
9
9
|
constructor(DTOClass: Class<DTO>);
|
|
10
|
-
createLoader(service: QueryService<DTO, unknown, unknown
|
|
10
|
+
createLoader(service: QueryService<DTO, unknown, unknown>, key?: string): (args: ReadonlyArray<ReferenceArgs>) => Promise<(DTO | undefined | Error)[]>;
|
|
11
11
|
}
|
|
@@ -7,32 +7,32 @@ class ReferenceLoader {
|
|
|
7
7
|
this.DTOClass = DTOClass;
|
|
8
8
|
this.logger = new common_1.Logger(ReferenceLoader.name);
|
|
9
9
|
}
|
|
10
|
-
createLoader(service) {
|
|
10
|
+
createLoader(service, key = 'id') {
|
|
11
11
|
return async (args) => {
|
|
12
12
|
// Deduplicate IDs while preserving original order mapping
|
|
13
|
-
const uniqueIds = [...new Set(args.map((arg) => arg
|
|
13
|
+
const uniqueIds = [...new Set(args.map((arg) => arg[key]))];
|
|
14
14
|
try {
|
|
15
|
-
const filter = {
|
|
15
|
+
const filter = { [key]: { in: uniqueIds } };
|
|
16
16
|
const entities = await service.query({ filter });
|
|
17
17
|
// Create entity map for efficient lookup
|
|
18
18
|
// Use string keys because representation.id from federation may differ in type from entity.id
|
|
19
19
|
const entityMap = new Map();
|
|
20
20
|
entities?.forEach((entity) => {
|
|
21
|
-
const id = entity
|
|
21
|
+
const id = entity[key];
|
|
22
22
|
entityMap.set(String(id), entity);
|
|
23
23
|
});
|
|
24
24
|
// Return results in the same order as requested
|
|
25
25
|
const results = args.map((arg) => {
|
|
26
|
-
const entity = entityMap.get(String(arg
|
|
26
|
+
const entity = entityMap.get(String(arg[key]));
|
|
27
27
|
if (!entity) {
|
|
28
|
-
this.logger.warn(`Entity not found for
|
|
28
|
+
this.logger.warn(`Entity not found for ${key}: ${arg[key]} in ${this.DTOClass.name}`);
|
|
29
29
|
}
|
|
30
30
|
return entity || undefined;
|
|
31
31
|
});
|
|
32
32
|
return results;
|
|
33
33
|
}
|
|
34
34
|
catch (error) {
|
|
35
|
-
this.logger.error(`Batch query failed for ${this.DTOClass.name}:`, error);
|
|
35
|
+
this.logger.error(`Batch query failed for ${this.DTOClass.name} with key ${key}:`, error);
|
|
36
36
|
// Return error for each request, let DataLoader handle it
|
|
37
37
|
return args.map(() => (error instanceof Error ? error : new Error(String(error))));
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.loader.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/loader/reference.loader.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AASvC,MAAa,eAAe;IAG1B,YAAqB,QAAoB;QAApB,aAAQ,GAAR,QAAQ,CAAY;QAFxB,WAAM,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAEd,CAAC;IAEtC,YAAY,CAAC,OAA4C;
|
|
1
|
+
{"version":3,"file":"reference.loader.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/loader/reference.loader.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AASvC,MAAa,eAAe;IAG1B,YAAqB,QAAoB;QAApB,aAAQ,GAAR,QAAQ,CAAY;QAFxB,WAAM,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAEd,CAAC;IAEtC,YAAY,CAAC,OAA4C,EAAE,GAAG,GAAG,IAAI;QAC1E,OAAO,KAAK,EAAE,IAAkC,EAAwC,EAAE;YACxF,0DAA0D;YAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAE3D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAA4B,CAAA;gBACrE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;gBAEhD,yCAAyC;gBACzC,8FAA8F;gBAC9F,MAAM,SAAS,GAAG,IAAI,GAAG,EAAe,CAAA;gBACxC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC3B,MAAM,EAAE,GAAI,MAAkC,CAAC,GAAG,CAAC,CAAA;oBACnD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;gBACnC,CAAC,CAAC,CAAA;gBAEF,gDAAgD;gBAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oBAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;oBACvF,CAAC;oBACD,OAAO,MAAM,IAAI,SAAS,CAAA;gBAC5B,CAAC,CAAC,CAAA;gBAEF,OAAO,OAAO,CAAA;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,GAAG,GAAG,EAAE,KAAK,CAAC,CAAA;gBACzF,0DAA0D;gBAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACpF,CAAC;QACH,CAAC,CAAA;IACH,CAAC;CACF;AAvCD,0CAuCC"}
|
|
@@ -37,14 +37,14 @@ const Referenceable = (DTOClass, opts) => (BaseClass) => {
|
|
|
37
37
|
// Ensure loader name is unique in Federation scenarios
|
|
38
38
|
const serviceName = this.service?.constructor?.name || 'UnknownService';
|
|
39
39
|
const uniqueLoaderName = `${loaderName}_${serviceName}`;
|
|
40
|
-
const loader = loader_1.DataLoaderFactory.getOrCreateLoader(context, uniqueLoaderName, () => referenceLoader.createLoader(this.service), {
|
|
40
|
+
const loader = loader_1.DataLoaderFactory.getOrCreateLoader(context, uniqueLoaderName, () => referenceLoader.createLoader(this.service, key), {
|
|
41
41
|
// Ensure batching is enabled for performance
|
|
42
42
|
batch: true,
|
|
43
43
|
cache: true,
|
|
44
44
|
maxBatchSize: 1000,
|
|
45
45
|
...dataLoaderConfig
|
|
46
46
|
});
|
|
47
|
-
const result = await loader.load({
|
|
47
|
+
const result = await loader.load({ [key]: id });
|
|
48
48
|
if (!result) {
|
|
49
49
|
this.logger.error(`Unable to find ${baseName} with ${key}: ${String(id)}`);
|
|
50
50
|
throw new common_1.BadRequestException(`Unable to find ${baseName} with ${key}: ${String(id)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.resolver.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/resolvers/reference.resolver.ts"],"names":[],"mappings":";;;;AAAA,2CAA8E;AAC9E,6CAA6E;AAG7E,sCAAuC;AACvC,yGAAyF;AAEzF,sCAA8D;AAE9D,6DAA0F;AAM1F;;;GAGG;AACI,MAAM,aAAa,GACxB,CAAsD,QAAoB,EAAE,IAA2B,EAAE,EAAE,CAC3G,CAA4C,SAAY,EAAK,EAAE;IAC7D,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,oBAAW,EAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,UAAU,GAAG,gBAAgB,QAAQ,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,IAAI,wBAAe,CAAM,QAAQ,CAAC,CAAA;IAG1D,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,SAAS;QAApD;;YACmB,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAqB,QAAQ,GAAG,CAAC,CAAA;QA6CxE,CAAC;QA1CO,AAAN,KAAK,CAAC,gBAAgB,CACV,cAAkC,EACjC,OAAyB,EAEpC,gBAAoC;YAEpC,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,4BAAmB,CAAC,qDAAqD,GAAG,QAAQ,QAAQ,EAAE,CAAC,CAAA;YAC3G,CAAC;YAED,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,4BAAmB,CAAC,6BAA6B,QAAQ,uBAAuB,CAAC,CAAA;YAC7F,CAAC;YAED,uDAAuD;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,gBAAgB,CAAA;YACvE,MAAM,gBAAgB,GAAG,GAAG,UAAU,IAAI,WAAW,EAAE,CAAA;YAEvD,MAAM,MAAM,GAAG,0BAAiB,CAAC,iBAAiB,CAChD,OAAO,EACP,gBAAgB,EAChB,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"reference.resolver.js","sourceRoot":"","sources":["../../../../../packages/query-graphql/src/resolvers/reference.resolver.ts"],"names":[],"mappings":"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"}
|