@ldsg/graphql-resolver 0.1.1

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 ADDED
@@ -0,0 +1,85 @@
1
+ # @ldsg/graphql-resolver
2
+
3
+ GraphQL Resolver 资源模块,用于向 GraphQL schema 添加单个 resolver。
4
+
5
+ ## 功能
6
+
7
+ - 支持向 Query/Mutation 添加 resolver
8
+ - 支持向 Object 类型添加关系(relation)
9
+ - 支持使用 jsonata 表达式配置 prepareArgs
10
+ - 支持 projection 配置
11
+
12
+ ## 使用示例
13
+
14
+ ### 添加 Query/Mutation resolver
15
+
16
+ ```typescript
17
+ // Query.userFindById
18
+ {
19
+ typeName: 'Query',
20
+ fieldName: 'userFindById',
21
+ objectTypeName: 'User',
22
+ resolverName: 'findById'
23
+ }
24
+
25
+ // Mutation.userCreateOne
26
+ {
27
+ typeName: 'Mutation',
28
+ fieldName: 'userCreateOne',
29
+ objectTypeName: 'User',
30
+ resolverName: 'createOne'
31
+ }
32
+ ```
33
+
34
+ ### 添加 Relation
35
+
36
+ ```typescript
37
+ // User.friends
38
+ {
39
+ typeName: 'User',
40
+ fieldName: 'friends',
41
+ objectTypeName: 'User',
42
+ resolverName: 'dataLoaderMany',
43
+ prepareArgs: '{ _ids: friendsIds }',
44
+ projection: { friendsIds: 1 }
45
+ }
46
+
47
+ // User.adultFriendsWithSameGender
48
+ {
49
+ typeName: 'User',
50
+ fieldName: 'adultFriendsWithSameGender',
51
+ objectTypeName: 'User',
52
+ resolverName: 'findMany',
53
+ prepareArgs: '{ filter: { _id: { $in: friendsIds }, age: { $gt: 21 }, gender: gender }, limit: 10 }',
54
+ projection: { friendsIds: 1, gender: 1 }
55
+ }
56
+ ```
57
+
58
+ ### Form resolver
59
+
60
+ ```typescript
61
+ // Mutation.submitUserForm
62
+ {
63
+ typeName: 'Mutation',
64
+ fieldName: 'submitUserForm',
65
+ objectTypeName: 'UserForm',
66
+ resolverName: 'submit'
67
+ }
68
+ ```
69
+
70
+ ## 配置项
71
+
72
+ | 字段 | 类型 | 描述 |
73
+ |-------|------|------|
74
+ | typeName | string | 添加到的类型名称:'Query'、'Mutation' 或 Object 类型名称 |
75
+ | fieldName | string | 字段名称 |
76
+ | description? | string | 字段描述(可选) |
77
+ | objectTypeName | string | resolver 所属的对象类型名称 |
78
+ | resolverName | string | resolver 方法名称 |
79
+ | prepareArgs? | string | jsonata 表达式,用于 prepareArgs(可选) |
80
+ | projection? | object | projection 配置(可选) |
81
+
82
+ ## 相关
83
+
84
+ - [@ldsg/graphql-resolvers](../graphql-resolvers/README.md)
85
+ - [@ldsg/graphql](../../libs/graphql/README.md)
@@ -0,0 +1,18 @@
1
+ import { HandlerSpecificResourceSettings } from '@ldsg/handler';
2
+ import { ResourceDefinitionSpecificResourceSettings } from '@ldsg/resource-definition';
3
+ import { GeneralResourceSettings } from '@ldsg/types';
4
+ /**
5
+ * Instantiate Resource Handler General Resource Settings
6
+ * 实例化资源处理程序普通资源配置
7
+ */
8
+ export declare const INSTANTIATE_RESOURCE_HANDLER_GENERAL_RESOURCE_SETTINGS: GeneralResourceSettings;
9
+ /**
10
+ * Instantiate Resource Handler Specific Resource Settings
11
+
12
+ * 实例化资源处理程序特殊资源配置
13
+ * 框架通过此实例化此资源
14
+ */
15
+ export declare const INSTANTIATE_RESOURCE_HANDLER_SPECIFIC_RESOURCE_SETTINGS: HandlerSpecificResourceSettings;
16
+ export declare const RESOURCE_DEFINITION_GENERAL_RESOURCE_SETTINGS: GeneralResourceSettings;
17
+ export declare const RESOURCE_DEFINITION_SPECIFIC_RESOURCE_SETTINGS: ResourceDefinitionSpecificResourceSettings;
18
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,0CAA0C,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,sDAAsD,EAAE,uBAGpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uDAAuD,EAAE,+BAOrE,CAAC;AAEF,eAAO,MAAM,6CAA6C,EAAE,uBAG3D,CAAC;AAEF,eAAO,MAAM,8CAA8C,EAAE,0CAE5D,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RESOURCE_DEFINITION_SPECIFIC_RESOURCE_SETTINGS = exports.RESOURCE_DEFINITION_GENERAL_RESOURCE_SETTINGS = exports.INSTANTIATE_RESOURCE_HANDLER_SPECIFIC_RESOURCE_SETTINGS = exports.INSTANTIATE_RESOURCE_HANDLER_GENERAL_RESOURCE_SETTINGS = void 0;
4
+ /**
5
+ * Instantiate Resource Handler General Resource Settings
6
+ * 实例化资源处理程序普通资源配置
7
+ */
8
+ exports.INSTANTIATE_RESOURCE_HANDLER_GENERAL_RESOURCE_SETTINGS = {
9
+ title: 'GraphQL Resolver 资源处理程序',
10
+ description: ''
11
+ };
12
+ /**
13
+ * Instantiate Resource Handler Specific Resource Settings
14
+
15
+ * 实例化资源处理程序特殊资源配置
16
+ * 框架通过此实例化此资源
17
+ */
18
+ exports.INSTANTIATE_RESOURCE_HANDLER_SPECIFIC_RESOURCE_SETTINGS = {
19
+ code: `export * from "@ldsg/graphql-resolver";`,
20
+ dependencies: [
21
+ {
22
+ name: '@ldsg/graphql-resolver'
23
+ }
24
+ ]
25
+ };
26
+ exports.RESOURCE_DEFINITION_GENERAL_RESOURCE_SETTINGS = {
27
+ title: 'GraphQL Resolver 资源定义',
28
+ description: ''
29
+ };
30
+ exports.RESOURCE_DEFINITION_SPECIFIC_RESOURCE_SETTINGS = {
31
+ kind: 'graphql-resolver'
32
+ };
33
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAIA;;;GAGG;AACU,QAAA,sDAAsD,GAA4B;IAC7F,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF;;;;;GAKG;AACU,QAAA,uDAAuD,GAAoC;IACtG,IAAI,EAAE,yCAAyC;IAC/C,YAAY,EAAE;QACZ;YACE,IAAI,EAAE,wBAAwB;SAC/B;KACF;CACF,CAAC;AAEW,QAAA,6CAA6C,GAA4B;IACpF,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,EAAE;CAChB,CAAC;AAEW,QAAA,8CAA8C,GAA+C;IACxG,IAAI,EAAE,kBAAkB;CACzB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Handler, HandlerExtendedResourceSettings } from '@ldsg/handler';
2
+ import { InstantiateResourceParams, InstantiateResourceRes } from '@ldsg/resource';
3
+ import { GraphQLResolverResource } from './resource';
4
+ import { GraphQLResolverSpecificResourceSettings } from './types';
5
+ export declare const handler: Handler<InstantiateResourceParams<HandlerExtendedResourceSettings<GraphQLResolverSpecificResourceSettings>>, InstantiateResourceRes<GraphQLResolverResource>>;
6
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uCAAuC,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,OAAO,EAAE,OAAO,CAC3B,yBAAyB,CAAC,+BAA+B,CAAC,uCAAuC,CAAC,CAAC,EACnG,sBAAsB,CAAC,uBAAuB,CAAC,CAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handler = void 0;
4
+ const instantiate_resource_1 = require("./instantiate-resource");
5
+ exports.handler = instantiate_resource_1.instantiateResource;
6
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":";;;AAEA,iEAA6D;AAIhD,QAAA,OAAO,GAGhB,0CAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './constants';
2
+ export * from './handler';
3
+ export * from './instantiate-resource';
4
+ export * from './resource';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./constants"), exports);
5
+ tslib_1.__exportStar(require("./handler"), exports);
6
+ tslib_1.__exportStar(require("./instantiate-resource"), exports);
7
+ tslib_1.__exportStar(require("./resource"), exports);
8
+ tslib_1.__exportStar(require("./types"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,oDAA0B;AAC1B,iEAAuC;AACvC,qDAA2B;AAC3B,kDAAwB"}
@@ -0,0 +1,6 @@
1
+ import { HandlerExtendedResourceSettings } from '@ldsg/handler';
2
+ import { InstantiateResource } from '@ldsg/resource';
3
+ import { GraphQLResolverResource } from './resource';
4
+ import { GraphQLResolverSpecificResourceSettings } from './types';
5
+ export declare const instantiateResource: InstantiateResource<HandlerExtendedResourceSettings<GraphQLResolverSpecificResourceSettings>, GraphQLResolverResource>;
6
+ //# sourceMappingURL=instantiate-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate-resource.d.ts","sourceRoot":"","sources":["../src/instantiate-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uCAAuC,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CACnD,+BAA+B,CAAC,uCAAuC,CAAC,EACxE,uBAAuB,CAWxB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instantiateResource = void 0;
4
+ const resource_1 = require("./resource");
5
+ const instantiateResource = (params) => {
6
+ const { resourceConstructorParams } = params;
7
+ const resource = new resource_1.GraphQLResolverResource(resourceConstructorParams);
8
+ const res = {
9
+ resource
10
+ };
11
+ return res;
12
+ };
13
+ exports.instantiateResource = instantiateResource;
14
+ //# sourceMappingURL=instantiate-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate-resource.js","sourceRoot":"","sources":["../src/instantiate-resource.ts"],"names":[],"mappings":";;;AAEA,yCAAqD;AAG9C,MAAM,mBAAmB,GAG5B,CAAC,MAAM,EAAE,EAAE;IACb,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,kCAAuB,CAAC,yBAAyB,CAAC,CAAC;IAExE,MAAM,GAAG,GAAG;QACV,QAAQ;KACT,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAbW,QAAA,mBAAmB,uBAa9B"}
@@ -0,0 +1,6 @@
1
+ import { Resource } from '@ldsg/resource';
2
+ import { GraphQLResolverSpecificResourceSettings } from './types';
3
+ export declare class GraphQLResolverResource extends Resource<GraphQLResolverSpecificResourceSettings> {
4
+ getResolverConfig: () => GraphQLResolverSpecificResourceSettings;
5
+ }
6
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uCAAuC,EAAE,MAAM,SAAS,CAAC;AAElE,qBAAa,uBAAwB,SAAQ,QAAQ,CAAC,uCAAuC,CAAC;IAC5F,iBAAiB,QAAO,uCAAuC,CAE7D;CACH"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphQLResolverResource = void 0;
4
+ const resource_1 = require("@ldsg/resource");
5
+ class GraphQLResolverResource extends resource_1.Resource {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.getResolverConfig = () => {
9
+ return this.settings;
10
+ };
11
+ }
12
+ }
13
+ exports.GraphQLResolverResource = GraphQLResolverResource;
14
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAG1C,MAAa,uBAAwB,SAAQ,mBAAiD;IAA9F;;QACE,sBAAiB,GAAG,GAA4C,EAAE;YAChE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;CAAA;AAJD,0DAIC"}
@@ -0,0 +1,2 @@
1
+ export * from './specific-resource-settings';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./specific-resource-settings"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,uEAA6C"}
@@ -0,0 +1,41 @@
1
+ import { SpecificResourceSettings } from '@ldsg/types';
2
+ export interface GraphQLResolverSpecificResourceSettings extends SpecificResourceSettings {
3
+ /**
4
+ * 添加到的类型名称
5
+ * 'Query' | 'Mutation' | 'User' | 'Post' | ...
6
+ */
7
+ typeName: string;
8
+ /**
9
+ * 字段名称
10
+ */
11
+ fieldName: string;
12
+ /**
13
+ * 描述
14
+ */
15
+ description?: string;
16
+ /**
17
+ * Resolver 所属的对象类型名称
18
+ * 'User' | 'Post' | 'UserForm' | ...
19
+ */
20
+ objectTypeName: string;
21
+ /**
22
+ * Resolver 方法名称
23
+ * 'findById' | 'dataLoaderMany' | 'submit' | ...
24
+ */
25
+ resolverName: string;
26
+ /**
27
+ * PrepareArgs 配置
28
+ * 可以是字符串(jsonata 表达式)或对象(直接映射)
29
+ */
30
+ prepareArgs?: string | {
31
+ [key: string]: any;
32
+ };
33
+ /**
34
+ * Projection 配置
35
+ */
36
+ projection?: ProjectionConfig;
37
+ }
38
+ export type ProjectionConfig = {
39
+ [key: string]: 0 | 1 | boolean;
40
+ };
41
+ //# sourceMappingURL=specific-resource-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specific-resource-settings.d.ts","sourceRoot":"","sources":["../../src/types/specific-resource-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,uCAAwC,SAAQ,wBAAwB;IACvF;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IAE9C;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=specific-resource-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specific-resource-settings.js","sourceRoot":"","sources":["../../src/types/specific-resource-settings.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@ldsg/graphql-resolver",
3
+ "version": "0.1.1",
4
+ "description": "",
5
+ "keywords": [],
6
+ "license": "MIT",
7
+ "author": "wanxger",
8
+ "main": "dist/index.js",
9
+ "types": "dist",
10
+ "files": [
11
+ "dist/"
12
+ ],
13
+ "dependencies": {
14
+ "graphql-compose": "^9.1.0",
15
+ "tslib": "^2.8.1",
16
+ "@ldsg/handler": "0.3.10",
17
+ "@ldsg/graphql": "0.3.11",
18
+ "@ldsg/resource": "0.3.10",
19
+ "@ldsg/resource-definition": "0.3.10"
20
+ },
21
+ "devDependencies": {
22
+ "@types/jest": "^29.5.2",
23
+ "@types/supertest": "^6.0.0",
24
+ "jest": "^29.5.0",
25
+ "supertest": "^6.3.4",
26
+ "ts-jest": "^29.1.5",
27
+ "ts-node": "^10.9.2",
28
+ "typescript": "^5.8.3",
29
+ "@ldsg/types": "0.3.10"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "build": "tsc --project tsconfig.build.json",
36
+ "clean": "rm -rf dist",
37
+ "test": "jest"
38
+ }
39
+ }