diff --git a/README.md b/README.md index a92efff5..dc32ea0e 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ [![GitHub issues](https://img.shields.io/github/issues-raw/mx-space/mx-server.svg?style=flat)](https://github.com/mx-space/mx-server/issues) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/mx-space/mx-server/Deploy?label=deploy&style=flat)](https://github.com/mx-space/mx-server/actions?query=workflow:%22Deploy%22) [![GitHub license](https://img.shields.io/github/license/mx-space/mx-server.svg?style=flat)](https://github.com/mx-space/mx-server/blob/main/LICENSE) -[![wakatime](https://wakatime.com/badge/github/mx-space/mx-server.svg)](https://wakatime.com/badge/github/mx-space/mx-server) +[![wakatime](https://wakatime.com/badge/user/9213dc96-df0d-4e66-b0bb-50f9e04e988c/project/3e6fb54a-082c-4110-bccc-b641bad13882.svg)](https://wakatime.com/badge/user/9213dc96-df0d-4e66-b0bb-50f9e04e988c/project/3e6fb54a-082c-4110-bccc-b641bad13882) [![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/innei/mx-server)](https://hub.docker.com/repository/docker/innei/mx-server) -> **RESTful API service & GraphQL for Mix Space, powered by [`nestjs`](https://github.com/nestjs/nest), required [`mongoDB`](https://www.mongodb.com/) & [`Redis`](https://redis.io/).** +> **RESTful API service for Mix Space, powered by [`nestjs`](https://github.com/nestjs/nest), required [`mongoDB`](https://www.mongodb.com/) & [`Redis`](https://redis.io/).** -> **适用于 Mix Space 的 RESTful API & GraphQL 服务端应用;基于 [`nestjs`](https://github.com/nestjs/nest) (nodejs),需安装 [`mongoDB`](https://www.mongodb.com/) 和 [`Redis`](https://redis.io/) 方可完整运行。** +> **适用于 Mix Space 的 RESTful API 服务端应用;基于 [`nestjs`](https://github.com/nestjs/nest) (nodejs),需安装 [`mongoDB`](https://www.mongodb.com/) 和 [`Redis`](https://redis.io/) 方可完整运行。** > v3 还是使用 [`nestjs`](https://github.com/nestjs/nest) 进行重构,之前的版本在 [此仓库](https://github.com/mx-space/server)。 @@ -66,7 +66,6 @@ docker-compose up -d ├── app.config.ts # 主程序配置,数据库、程序、第三方,一切可配置项 ├── app.controller.ts # 主程序根控制器 ├── app.module.ts # 主程序根模块,负责各业务模块的聚合 -├── app.resolver.ts # 主程序根 GraphQL Resolver ├── common # 存放中间件 │ ├── adapters # Fastify 适配器的配置 │ ├── decorator # 业务装饰器 diff --git a/generate-typings.ts b/generate-typings.ts deleted file mode 100644 index 11466ccb..00000000 --- a/generate-typings.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { GraphQLDefinitionsFactory } from '@nestjs/graphql' -import { join } from 'path' - -const definitionsFactory = new GraphQLDefinitionsFactory() -definitionsFactory.generate({ - typePaths: ['./*.gql'], - path: join(process.cwd(), 'types/graphql.d.ts'), - outputAs: 'class', - watch: true, -}) diff --git a/nest-cli.json b/nest-cli.json index c2c2cff9..43e80913 100644 --- a/nest-cli.json +++ b/nest-cli.json @@ -3,17 +3,6 @@ "sourceRoot": "src", "compilerOptions": { "plugins": [ - { - "name": "@nestjs/graphql", - "options": { - "typeFileNameSuffix": [ - ".input.ts", - ".args.ts", - ".dto.ts", - ".model.ts" - ] - } - }, { "name": "@nestjs/swagger", "options": { diff --git a/package.json b/package.json index ae453cf2..bd7c6006 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "MIT", "dashboard": { "repo": "mx-space/mx-admin", - "version": "3.14.3" + "version": "3.15.1" }, "husky": { "hooks": { @@ -67,7 +67,6 @@ "@nestjs/common": "8.2.6", "@nestjs/core": "8.2.6", "@nestjs/event-emitter": "1.0.0", - "@nestjs/graphql": "9.1.2", "@nestjs/jwt": "8.0.0", "@nestjs/mapped-types": "*", "@nestjs/passport": "8.1.0", @@ -81,7 +80,6 @@ "@typegoose/auto-increment": "1.1.0", "@typegoose/typegoose": "9.6.2", "algoliasearch": "4.12.1", - "apollo-server-fastify": "3.6.3", "axios": "*", "axios-retry": "3.2.4", "bcrypt": "5.0.1", @@ -98,7 +96,6 @@ "fastify-multipart": "5.3.0", "fastify-swagger": "4.15.0", "get-image-colors": "4.0.1", - "graphql": "15.8.0", "html-minifier": "4.0.0", "image-size": "1.0.1", "inquirer": "*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffb973a3..4b8f78ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,6 @@ specifiers: '@nestjs/common': 8.2.6 '@nestjs/core': 8.2.6 '@nestjs/event-emitter': 1.0.0 - '@nestjs/graphql': 9.1.2 '@nestjs/jwt': 8.0.0 '@nestjs/mapped-types': '*' '@nestjs/passport': 8.1.0 @@ -45,7 +44,6 @@ specifiers: '@types/ua-parser-js': 0.7.36 '@vercel/ncc': 0.33.1 algoliasearch: 4.12.1 - apollo-server-fastify: 3.6.3 axios: '*' axios-retry: 3.2.4 bcrypt: 5.0.1 @@ -65,7 +63,6 @@ specifiers: fastify-multipart: 5.3.0 fastify-swagger: 4.15.0 get-image-colors: 4.0.1 - graphql: 15.8.0 html-minifier: 4.0.0 husky: 7.0.4 image-size: 1.0.1 @@ -116,7 +113,6 @@ dependencies: '@nestjs/common': 8.2.6_6686f1d73a399753b561a58a608807ad '@nestjs/core': 8.2.6_9ccbff94f707ebc59cf3ddcf930aab79 '@nestjs/event-emitter': 1.0.0_d86dd164971a98d71cc003a4f36ff106 - '@nestjs/graphql': 9.1.2_91c3bca9040680d7e362a9e419843305 '@nestjs/jwt': 8.0.0_@nestjs+common@8.2.6 '@nestjs/mapped-types': 1.0.1_cda5296fe38bb7a3dcdb892503001834 '@nestjs/passport': 8.1.0_469354efd308cbdee43194b5fd6a2c15 @@ -130,7 +126,6 @@ dependencies: '@typegoose/auto-increment': 1.1.0_mongoose@6.2.0 '@typegoose/typegoose': 9.6.2_mongoose@6.2.0 algoliasearch: 4.12.1 - apollo-server-fastify: 3.6.3_graphql@15.8.0 axios: 0.25.0 axios-retry: 3.2.4 bcrypt: 5.0.1 @@ -147,7 +142,6 @@ dependencies: fastify-multipart: 5.3.0 fastify-swagger: 4.15.0 get-image-colors: 4.0.1 - graphql: 15.8.0 html-minifier: 4.0.0 image-size: 1.0.1 inquirer: 8.2.0 @@ -429,44 +423,6 @@ packages: - chokidar dev: true - /@apollo/protobufjs/1.2.2: - resolution: {integrity: sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==} - hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.1 - '@types/node': 10.17.60 - long: 4.0.0 - dev: false - - /@apollographql/apollo-tools/0.5.2: - resolution: {integrity: sha512-KxZiw0Us3k1d0YkJDhOpVH5rJ+mBfjXcgoRoCcslbgirjgLotKMzOcx4PZ7YTEvvEROmvG7X3Aon41GvMmyGsw==} - engines: {node: '>=8', npm: '>=6'} - dev: false - - /@apollographql/graphql-playground-html/1.6.29: - resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==} - dependencies: - xss: 1.0.10 - dev: false - - /@ardatan/aggregate-error/0.0.6: - resolution: {integrity: sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ==} - engines: {node: '>=8'} - dependencies: - tslib: 2.0.3 - dev: false - /@babel/code-frame/7.16.7: resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} engines: {node: '>=6.9.0'} @@ -914,82 +870,6 @@ packages: text-decoding: 1.0.0 dev: false - /@graphql-tools/merge/6.2.5_graphql@15.8.0: - resolution: {integrity: sha512-T2UEm7L5MeS1ggbGKBkdV9kTqLqSHQM13RrjPzIAYzkFL/mK837sf+oq8h2+R8B+senuHX8akUhMTcU85kcMvw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@graphql-tools/schema': 7.1.5_graphql@15.8.0 - '@graphql-tools/utils': 7.10.0_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.0.3 - dev: false - - /@graphql-tools/merge/8.2.1_graphql@15.8.0: - resolution: {integrity: sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-tools/utils': 8.6.1_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.3.1 - dev: false - - /@graphql-tools/mock/8.5.1_graphql@15.8.0: - resolution: {integrity: sha512-cwwqGs9Rofev1JdMheAseqM/rw1uw4CYb35vv3Kcv2bbyiPF+490xdlHqFeIazceotMFxC60LlQztwb64rsEnw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-tools/schema': 8.3.1_graphql@15.8.0 - '@graphql-tools/utils': 8.6.1_graphql@15.8.0 - fast-json-stable-stringify: 2.1.0 - graphql: 15.8.0 - tslib: 2.3.1 - dev: false - - /@graphql-tools/schema/7.1.5_graphql@15.8.0: - resolution: {integrity: sha512-uyn3HSNSckf4mvQSq0Q07CPaVZMNFCYEVxroApOaw802m9DcZPgf9XVPy/gda5GWj9AhbijfRYVTZQgHnJ4CXA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@graphql-tools/utils': 7.10.0_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.2.0 - value-or-promise: 1.0.6 - dev: false - - /@graphql-tools/schema/8.3.1_graphql@15.8.0: - resolution: {integrity: sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-tools/merge': 8.2.1_graphql@15.8.0 - '@graphql-tools/utils': 8.6.1_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.3.1 - value-or-promise: 1.0.11 - dev: false - - /@graphql-tools/utils/7.10.0_graphql@15.8.0: - resolution: {integrity: sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@ardatan/aggregate-error': 0.0.6 - camel-case: 4.1.2 - graphql: 15.8.0 - tslib: 2.2.0 - dev: false - - /@graphql-tools/utils/8.6.1_graphql@15.8.0: - resolution: {integrity: sha512-uxcfHCocp4ENoIiovPxUWZEHOnbXqj3ekWc0rm7fUhW93a1xheARNHcNKhwMTR+UKXVJbTFQdGI1Rl5XdyvDBg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - tslib: 2.3.1 - dev: false - /@humanwhocodes/config-array/0.9.3: resolution: {integrity: sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==} engines: {node: '>=10.10.0'} @@ -1250,10 +1130,6 @@ packages: chalk: 4.1.2 dev: true - /@josephg/resolvable/1.0.1: - resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} - dev: false - /@jridgewell/resolve-uri/3.0.4: resolution: {integrity: sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==} engines: {node: '>=6.0.0'} @@ -1399,62 +1275,6 @@ packages: reflect-metadata: 0.1.13 dev: false - /@nestjs/graphql/9.1.2_91c3bca9040680d7e362a9e419843305: - resolution: {integrity: sha512-ncxmkKmrswnHJ+jLgc6tbkRET6HAyC3gK6WKt1CdPLjvMnXVpFVpyQMFSenNXxAndInw9IgaiSyiJFdRYZVD/w==} - peerDependencies: - '@apollo/federation': ^0.26.0 || ^0.27.0 || ^0.29.0 || ^0.33.0 - '@apollo/gateway': ^0.29.0 || ^0.32.0 || ^0.33.0 || ^0.35.0 || ^0.38.0 || ^0.42.0 - '@apollo/subgraph': ^0.1.2 - '@nestjs/common': ^8.0.0 - '@nestjs/core': ^8.0.0 - apollo-server-core: ^3.0.0 - apollo-server-express: ^3.1.2 - apollo-server-fastify: ^3.1.2 - graphql: ^15.5.1 - reflect-metadata: ^0.1.13 - ts-morph: ^11.0.3 || ^12.0.0 || ^13.0.0 - peerDependenciesMeta: - '@apollo/federation': - optional: true - '@apollo/gateway': - optional: true - '@apollo/subgraph': - optional: true - apollo-server-core: - optional: true - apollo-server-express: - optional: true - apollo-server-fastify: - optional: true - ts-morph: - optional: true - dependencies: - '@graphql-tools/merge': 6.2.5_graphql@15.8.0 - '@graphql-tools/schema': 7.1.5_graphql@15.8.0 - '@graphql-tools/utils': 7.10.0_graphql@15.8.0 - '@nestjs/common': 8.2.6_6686f1d73a399753b561a58a608807ad - '@nestjs/core': 8.2.6_9ccbff94f707ebc59cf3ddcf930aab79 - '@nestjs/mapped-types': 1.0.0_cda5296fe38bb7a3dcdb892503001834 - apollo-server-fastify: 3.6.3_graphql@15.8.0 - chokidar: 3.5.2 - fast-glob: 3.2.7 - graphql: 15.8.0 - graphql-ws: 5.5.5_graphql@15.8.0 - iterall: 1.3.0 - lodash: 4.17.21 - normalize-path: 3.0.0 - reflect-metadata: 0.1.13 - subscriptions-transport-ws: 0.11.0_graphql@15.8.0 - tslib: 2.3.1 - uuid: 8.3.2 - ws: 8.3.0 - transitivePeerDependencies: - - bufferutil - - class-transformer - - class-validator - - utf-8-validate - dev: false - /@nestjs/jwt/8.0.0_@nestjs+common@8.2.6: resolution: {integrity: sha512-fz2LQgYY2zmuD8S+8UE215anwKyXlnB/1FwJQLVR47clNfMeFMK8WCxmn6xdPhF5JKuV1crO6FVabb1qWzDxqQ==} peerDependencies: @@ -1465,20 +1285,6 @@ packages: jsonwebtoken: 8.5.1 dev: false - /@nestjs/mapped-types/1.0.0_cda5296fe38bb7a3dcdb892503001834: - resolution: {integrity: sha512-26AW5jHadLXtvHs+M+Agd9KZ92dDlBrmD0rORlBlvn2KvsWs4JRaKl2mUsrW7YsdZeAu3Hc4ukqyYyDdyCmMWQ==} - peerDependencies: - '@nestjs/common': ^7.0.8 || ^8.0.0 - class-transformer: ^0.2.0 || ^0.3.0 || ^0.4.0 - class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0 - reflect-metadata: ^0.1.12 - dependencies: - '@nestjs/common': 8.2.6_6686f1d73a399753b561a58a608807ad - class-transformer: 0.5.1 - class-validator: 0.13.2 - reflect-metadata: 0.1.13 - dev: false - /@nestjs/mapped-types/1.0.1_cda5296fe38bb7a3dcdb892503001834: resolution: {integrity: sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==} peerDependencies: @@ -1686,49 +1492,6 @@ packages: - encoding dev: false - /@protobufjs/aspromise/1.1.2: - resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} - dev: false - - /@protobufjs/base64/1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: false - - /@protobufjs/codegen/2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: false - - /@protobufjs/eventemitter/1.1.0: - resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=} - dev: false - - /@protobufjs/fetch/1.1.0: - resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=} - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - dev: false - - /@protobufjs/float/1.0.2: - resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=} - dev: false - - /@protobufjs/inquire/1.1.0: - resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=} - dev: false - - /@protobufjs/path/1.1.2: - resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=} - dev: false - - /@protobufjs/pool/1.1.0: - resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=} - dev: false - - /@protobufjs/utf8/1.1.0: - resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=} - dev: false - /@sinonjs/commons/1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: @@ -2032,10 +1795,6 @@ packages: resolution: {integrity: sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==} dev: true - /@types/long/4.0.1: - resolution: {integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==} - dev: false - /@types/marked/4.0.2: resolution: {integrity: sha512-auNrZ/c0w6wsM9DccwVxWHssrMDezHUAXNesdp2RQrCVCyrQbOiSq7yqdJKrUQQpw9VTm7CGYJH2A/YG7jjrjQ==} dev: true @@ -2063,10 +1822,6 @@ packages: form-data: 3.0.1 dev: false - /@types/node/10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - dev: false - /@types/node/14.17.33: resolution: {integrity: sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g==} dev: false @@ -2682,120 +2437,7 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - - /apollo-datasource/3.3.1: - resolution: {integrity: sha512-Z3a8rEUXVPIZ1p8xrFL8bcNhWmhOmovgDArvwIwmJOBnh093ZpRfO+ESJEDAN4KswmyzCLDAwjsW4zQOONdRUw==} - engines: {node: '>=12.0'} - dependencies: - apollo-server-caching: 3.3.0 - apollo-server-env: 4.2.1 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-reporting-protobuf/3.3.0: - resolution: {integrity: sha512-51Jwrg0NvHJfKz7TIGU8+Os3rUAqWtXeKRsRtKYtTeMSBPNhzz8UoGjAB3XyVmUXRE3IRmLtDPDRFL7qbxMI/w==} - dependencies: - '@apollo/protobufjs': 1.2.2 - dev: false - - /apollo-server-caching/3.3.0: - resolution: {integrity: sha512-Wgcb0ArjZ5DjQ7ID+tvxUcZ7Yxdbk5l1MxZL8D8gkyjooOkhPNzjRVQ7ubPoXqO54PrOMOTm1ejVhsF+AfIirQ==} - engines: {node: '>=12.0'} - dependencies: - lru-cache: 6.0.0 - dev: false - - /apollo-server-core/3.6.3_graphql@15.8.0: - resolution: {integrity: sha512-TFJmAlI6vPp1MHOSXqYkE6leAyMekWv/D/3ma11uETkcd3EPjERGmxtTXPJElMVEkOK9BEElYKthCrH7bjYLuw==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - '@apollographql/apollo-tools': 0.5.2 - '@apollographql/graphql-playground-html': 1.6.29 - '@graphql-tools/mock': 8.5.1_graphql@15.8.0 - '@graphql-tools/schema': 8.3.1_graphql@15.8.0 - '@josephg/resolvable': 1.0.1 - apollo-datasource: 3.3.1 - apollo-reporting-protobuf: 3.3.0 - apollo-server-caching: 3.3.0 - apollo-server-env: 4.2.1 - apollo-server-errors: 3.3.1_graphql@15.8.0 - apollo-server-plugin-base: 3.5.1_graphql@15.8.0 - apollo-server-types: 3.5.1_graphql@15.8.0 - async-retry: 1.3.3 - fast-json-stable-stringify: 2.1.0 - graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 - lodash.sortby: 4.7.0 - loglevel: 1.8.0 - lru-cache: 6.0.0 - sha.js: 2.4.11 - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-env/4.2.1: - resolution: {integrity: sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==} - engines: {node: '>=12.0'} - dependencies: - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-errors/3.3.1_graphql@15.8.0: - resolution: {integrity: sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - dev: false - - /apollo-server-fastify/3.6.3_graphql@15.8.0: - resolution: {integrity: sha512-UtmIcUbZyupsFHn0G+6AJ0de6P6bkidKAzMzEwS9r1zw+dGnp8H11A8pZBDqn8Csb9Xa3g2qj8z6pXlbyDQXKw==} - engines: {node: '>=12.0'} - peerDependencies: - fastify: ^3.17.0 - graphql: ^15.3.0 || ^16.0.0 - dependencies: - apollo-server-core: 3.6.3_graphql@15.8.0 - apollo-server-types: 3.5.1_graphql@15.8.0 - fastify-accepts: 2.1.0 - fastify-cors: 6.0.2 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-plugin-base/3.5.1_graphql@15.8.0: - resolution: {integrity: sha512-wgDHz3lLrCqpecDky3z6AOQ0vik0qs0Cya/Ti6n3ESYXJ9MdK3jE/QunATIrOYYJaa+NKl9V7YwU+/bojNfFuQ==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - apollo-server-types: 3.5.1_graphql@15.8.0 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-types/3.5.1_graphql@15.8.0: - resolution: {integrity: sha512-zG7xLl4mmHuZMAYOfjWKHY/IC/GgIkJ3HnYuR7FRrnPpRA9Yt5Kf1M1rjm1Esuqzpb/dt8pM7cX40QaIQObCYQ==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - apollo-reporting-protobuf: 3.3.0 - apollo-server-caching: 3.3.0 - apollo-server-env: 4.2.1 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: false + dev: true /aproba/1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} @@ -2886,12 +2528,6 @@ packages: dev: false optional: true - /async-retry/1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - dependencies: - retry: 0.13.1 - dev: false - /async/0.9.2: resolution: {integrity: sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=} dev: false @@ -3038,10 +2674,6 @@ packages: babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.0 dev: true - /backo2/1.0.2: - resolution: {integrity: sha1-MasayLEpNjRj41s+u2n038+6eUc=} - dev: false - /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -3077,6 +2709,7 @@ packages: /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + dev: true /bl/4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -3190,13 +2823,6 @@ packages: upper-case: 1.1.3 dev: false - /camel-case/4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.3.1 - dev: false - /camelcase-keys/7.0.2: resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} engines: {node: '>=12'} @@ -3290,6 +2916,7 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 + dev: true /chownr/2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -4222,10 +3849,6 @@ packages: resolution: {integrity: sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw==} dev: false - /eventemitter3/3.1.2: - resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} - dev: false - /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -4325,17 +3948,6 @@ packages: merge2: 1.4.1 micromatch: 4.0.4 - /fast-glob/3.2.7: - resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} - engines: {node: '>=8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.4 - dev: false - /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -4369,14 +3981,6 @@ packages: strnum: 1.0.5 dev: false - /fastify-accepts/2.1.0: - resolution: {integrity: sha512-1nS8HfPcUsDvvGuuHDvfQBb2F1YJFfx26L77di7ypa0mUduFKZi1cpIpQCs8Kgu30v7yLMzLMH13FHfKk81SAw==} - engines: {node: '>=10'} - dependencies: - accepts: 1.3.7 - fastify-plugin: 3.0.1 - dev: false - /fastify-cookie/5.5.0: resolution: {integrity: sha512-XhexnjmAR4CUh3Cz6Ko0is+pa8k1bS6+nkf/i3viv4p7R1fwGtGhAXuz+b4nEM0x7pvdi5ApKY73Bp5CELZP7g==} dependencies: @@ -4696,6 +4300,7 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /function-bind/1.1.1: @@ -4888,30 +4493,6 @@ packages: /graceful-fs/4.2.9: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} - /graphql-tag/2.12.6_graphql@15.8.0: - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - tslib: 2.3.1 - dev: false - - /graphql-ws/5.5.5_graphql@15.8.0: - resolution: {integrity: sha512-hvyIS71vs4Tu/yUYHPvGXsTgo0t3arU820+lT5VjZS2go0ewp2LqyCgxEN56CzOG7Iys52eRhHBiD1gGRdiQtw==} - engines: {node: '>=10'} - peerDependencies: - graphql: '>=0.11 <=16' - dependencies: - graphql: 15.8.0 - dev: false - - /graphql/15.8.0: - resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} - engines: {node: '>= 10.x'} - dev: false - /har-schema/2.0.0: resolution: {integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=} engines: {node: '>=4'} @@ -5220,6 +4801,7 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 + dev: true /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -5418,10 +5000,6 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /iterall/1.3.0: - resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} - dev: false - /iterare/1.2.1: resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} engines: {node: '>=6'} @@ -6347,10 +5925,6 @@ packages: resolution: {integrity: sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=} dev: false - /lodash.sortby/4.7.0: - resolution: {integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=} - dev: false - /lodash.uniq/4.5.0: resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=} dev: false @@ -6380,10 +5954,6 @@ packages: engines: {node: '>= 0.6.0'} dev: false - /long/4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: false - /lower-case/1.1.4: resolution: {integrity: sha1-miyr0bno4K6ZOkv31YdcOcQujqw=} dev: false @@ -6806,6 +6376,7 @@ packages: /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + dev: true /notepack.io/2.1.3: resolution: {integrity: sha512-AgSt+cP5XMooho1Ppn8NB3FFaVWefV+qZoZncYTUSch2GAEwlYLcIIbT5YVkMlFeNHnfwOvc4HDlbvrB5BRxXA==} @@ -7068,13 +6639,6 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /pascal-case/3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.3.1 - dev: false - /passport-jwt/4.0.0: resolution: {integrity: sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==} dependencies: @@ -7375,6 +6939,7 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + dev: true /rechoir/0.6.2: resolution: {integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=} @@ -7522,11 +7087,6 @@ packages: engines: {node: '>=4'} dev: false - /retry/0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -7684,14 +7244,6 @@ packages: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false - /sha.js/2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: false - /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -8035,22 +7587,6 @@ packages: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} dev: false - /subscriptions-transport-ws/0.11.0_graphql@15.8.0: - resolution: {integrity: sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==} - peerDependencies: - graphql: ^15.7.2 || ^16.0.0 - dependencies: - backo2: 1.0.2 - eventemitter3: 3.1.2 - graphql: 15.8.0 - iterall: 1.3.0 - symbol-observable: 1.2.0 - ws: 7.5.6 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -8088,11 +7624,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /symbol-observable/1.2.0: - resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} - engines: {node: '>=0.10.0'} - dev: false - /symbol-observable/4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} @@ -8389,14 +7920,6 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.0.3: - resolution: {integrity: sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==} - dev: false - - /tslib/2.2.0: - resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} - dev: false - /tslib/2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} @@ -8556,16 +8079,6 @@ packages: engines: {node: '>= 0.10'} dev: false - /value-or-promise/1.0.11: - resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} - engines: {node: '>=12'} - dev: false - - /value-or-promise/1.0.6: - resolution: {integrity: sha512-9r0wQsWD8z/BxPOvnwbPf05ZvFngXyouE9EKB+5GbYix+BYnAwrIChCUyFIinfbf2FL/U71z+CPpbnmTdxrwBg==} - engines: {node: '>=12'} - dev: false - /vary/1.1.2: resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} engines: {node: '>= 0.8'} @@ -8787,6 +8300,7 @@ packages: optional: true utf-8-validate: optional: true + dev: true /ws/8.2.3: resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} @@ -8800,19 +8314,6 @@ packages: utf-8-validate: optional: true - /ws/8.3.0: - resolution: {integrity: sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - /xml-name-validator/3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true diff --git a/src/app.module.ts b/src/app.module.ts index 8158cb7c..0eb2acec 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,12 +1,9 @@ import { Logger, MiddlewareConsumer, Module, NestModule } from '@nestjs/common' import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core' -import { GraphQLModule } from '@nestjs/graphql' import cluster from 'cluster' import { mkdirSync } from 'fs' -import { join } from 'path' import { CLUSTER } from './app.config' import { AppController } from './app.controller' -import { AppResolver } from './app.resolver' import { AllExceptionsFilter } from './common/filters/any-exception.filter' import { RolesGuard } from './common/guard/roles.guard' import { AnalyzeInterceptor } from './common/interceptors/analyze.interceptor' @@ -52,6 +49,7 @@ import { DatabaseModule } from './processors/database/database.module' import { GatewayModule } from './processors/gateway/gateway.module' import { HelperModule } from './processors/helper/helper.module' import { LoggerModule } from './processors/logger/logger.module' + // FIXME function mkdirs() { mkdirSync(DATA_DIR, { recursive: true }) @@ -73,14 +71,6 @@ if (!CLUSTER.enable || cluster.isPrimary) { DatabaseModule, CacheModule, - GraphQLModule.forRoot({ - debug: isDev, - playground: isDev, - autoSchemaFile: join(process.cwd(), 'schema.gql'), - context: ({ req }) => ({ req }), - cors: false, - }), - AggregateModule, AnalyzeModule, AuthModule, @@ -116,8 +106,6 @@ if (!CLUSTER.enable || cluster.isPrimary) { ].filter(Boolean), controllers: [AppController], providers: [ - AppResolver, - { provide: APP_INTERCEPTOR, useClass: HttpCacheInterceptor, diff --git a/src/app.resolver.ts b/src/app.resolver.ts deleted file mode 100644 index f8aaa073..00000000 --- a/src/app.resolver.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Query, Resolver } from '@nestjs/graphql' - -@Resolver() -export class AppResolver { - @Query(() => String) - sayHello(): string { - return 'Hello World!' - } -} diff --git a/src/bootstrap.ts b/src/bootstrap.ts index 2e4cfe2c..1f9065ec 100644 --- a/src/bootstrap.ts +++ b/src/bootstrap.ts @@ -87,7 +87,6 @@ async function bootstrap() { const prefix = env ? 'P' : 'W' if (isDev) { consola.debug(`[${prefix + pid}] OpenApi: ${url}/api-docs`) - consola.debug(`[${prefix + pid}] GraphQL playground: ${url}/graphql`) } consola.success(`[${prefix + pid}] Server listen on: ${url}`) consola.success(`[${prefix + pid}] Admin Dashboard: ${url}/qaqdmin`) diff --git a/src/common/filters/any-exception.filter.ts b/src/common/filters/any-exception.filter.ts index cdd4ad58..4774403f 100644 --- a/src/common/filters/any-exception.filter.ts +++ b/src/common/filters/any-exception.filter.ts @@ -8,7 +8,6 @@ import { Logger, } from '@nestjs/common' import { Reflector } from '@nestjs/core' -import { GqlArgumentsHost } from '@nestjs/graphql' import { FastifyReply, FastifyRequest } from 'fastify' import { WriteStream } from 'fs' import { resolve } from 'path' @@ -18,6 +17,7 @@ import { REFLECTOR } from '~/constants/system.constant' import { isDev } from '~/utils' import { getIp } from '../../utils/ip.util' import { LoggingInterceptor } from '../interceptors/logging.interceptor' + type myError = { readonly status: number readonly statusCode?: number @@ -31,7 +31,7 @@ export class AllExceptionsFilter implements ExceptionFilter { private errorLogPipe: WriteStream constructor(@Inject(REFLECTOR) private reflector: Reflector) {} catch(exception: unknown, host: ArgumentsHost) { - const ctx = GqlArgumentsHost.create(host).switchToHttp() + const ctx = host.switchToHttp() const response = ctx.getResponse() const request = ctx.getRequest() diff --git a/src/common/interceptors/logging.interceptor.ts b/src/common/interceptors/logging.interceptor.ts index 6be99d33..112da5d0 100644 --- a/src/common/interceptors/logging.interceptor.ts +++ b/src/common/interceptors/logging.interceptor.ts @@ -14,10 +14,10 @@ import { NestInterceptor, SetMetadata, } from '@nestjs/common' -import { GqlExecutionContext } from '@nestjs/graphql' import { Observable } from 'rxjs' import { tap } from 'rxjs/operators' import { HTTP_REQUEST_TIME } from '~/constants/meta.constant' +import { getNestExecutionContextRequest } from '~/utils' @Injectable() export class LoggingInterceptor implements NestInterceptor { @@ -34,7 +34,7 @@ export class LoggingInterceptor implements NestInterceptor { const content = request.method + ' -> ' + request.url this.logger.debug('+++ 收到请求:' + content) const now = +new Date() - SetMetadata(HTTP_REQUEST_TIME, now)(this.getRequest(context)) + SetMetadata(HTTP_REQUEST_TIME, now)(this.getRequest(context) as any) return call$.pipe( tap(() => @@ -46,11 +46,6 @@ export class LoggingInterceptor implements NestInterceptor { } getRequest(context: ExecutionContext) { - const req = context.switchToHttp().getRequest() - if (req) { - return req - } - const ctx = GqlExecutionContext.create(context) - return ctx.getContext().req + return getNestExecutionContextRequest(context) } } diff --git a/src/modules/category/category.model.ts b/src/modules/category/category.model.ts index d5466381..c15b894c 100644 --- a/src/modules/category/category.model.ts +++ b/src/modules/category/category.model.ts @@ -1,4 +1,3 @@ -import { ObjectType, registerEnumType } from '@nestjs/graphql' import { PartialType } from '@nestjs/mapped-types' import { DocumentType, index, modelOptions, prop } from '@typegoose/typegoose' import { IsEnum, IsNotEmpty, IsOptional, IsString } from 'class-validator' @@ -11,13 +10,8 @@ export enum CategoryType { Tag, } -registerEnumType(CategoryType, { - name: 'CategoryType', -}) - @index({ slug: -1 }) @modelOptions({ options: { customName: 'Category' } }) -@ObjectType() export class CategoryModel extends BaseModel { @prop({ unique: true, trim: true, required: true }) @IsString() diff --git a/src/modules/note/note.dto.ts b/src/modules/note/note.dto.ts index f796655f..71943538 100644 --- a/src/modules/note/note.dto.ts +++ b/src/modules/note/note.dto.ts @@ -1,4 +1,3 @@ -import { ArgsType, Field, Int } from '@nestjs/graphql' import { Transform } from 'class-transformer' import { IsDefined, @@ -14,7 +13,6 @@ import { } from 'class-validator' import { PagerDto } from '~/shared/dto/pager.dto' -@ArgsType() export class NoteQueryDto extends PagerDto { @IsOptional() @IsIn(['title', 'created', 'modified', 'weather', 'mood']) @@ -24,7 +22,6 @@ export class NoteQueryDto extends PagerDto { @IsIn([1, -1]) @ValidateIf((o) => o.sortBy) @Transform(({ value: v }) => v | 0) - @Field(() => Int) sortOrder?: 1 | -1 } diff --git a/src/modules/note/note.input.ts b/src/modules/note/note.input.ts deleted file mode 100644 index 9a2f6dda..00000000 --- a/src/modules/note/note.input.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ArgsType, Field, ID, Int } from '@nestjs/graphql' -import { Transform } from 'class-transformer' -import { IsInt, IsMongoId, IsOptional, IsString, Min } from 'class-validator' - -@ArgsType() -export class NidOrIdArgsDto { - @IsInt() - @Field(() => Int) - @Min(1) - @IsOptional() - @Transform(({ value: v }) => v | 0) - nid?: number - - @Field(() => ID) - @IsMongoId() - @IsOptional() - id?: string -} - -@ArgsType() -export class PasswordArgsDto { - @IsString() - @IsOptional() - password?: string -} diff --git a/src/modules/note/note.model.ts b/src/modules/note/note.model.ts index 37914882..6ff1d8de 100644 --- a/src/modules/note/note.model.ts +++ b/src/modules/note/note.model.ts @@ -1,12 +1,3 @@ -/* - * @Author: Innei - * @Date: 2021-01-01 13:25:04 - * @LastEditTime: 2021-03-12 11:13:52 - * @LastEditors: Innei - * @FilePath: /server/libs/db/src/models/note.model.ts - * Mark: Coding with Love - */ -import { Field, ObjectType } from '@nestjs/graphql' import { PartialType } from '@nestjs/mapped-types' import { AutoIncrementID } from '@typegoose/auto-increment' import { index, modelOptions, plugin, prop } from '@typegoose/typegoose' @@ -27,7 +18,6 @@ import { } from '~/shared/model/base.model' @modelOptions({ schemaOptions: { id: false, _id: false } }) -@ObjectType() export class Coordinate { @IsNumber() @prop() @@ -43,7 +33,6 @@ export class Coordinate { _id: false, }, }) -@ObjectType() export class NoteMusic { @IsString() @IsNotEmpty() @@ -68,7 +57,6 @@ export class NoteMusic { @index({ text: 'text' }) @index({ modified: -1 }) @index({ nid: -1 }) -@ObjectType() export class NoteModel extends WriteBaseModel { @prop() @IsString() @@ -117,7 +105,6 @@ export class NoteModel extends WriteBaseModel { @ValidateNested() @Type(() => Coordinate) @IsOptional() - @Field(() => Coordinate, { nullable: true }) coordinates?: Coordinate @prop({ select: false }) @@ -126,14 +113,12 @@ export class NoteModel extends WriteBaseModel { location?: string @prop({ type: CountMixed, default: { read: 0, like: 0 }, _id: false }) - @Field(() => CountMixed, { nullable: true }) count?: CountMixed @prop({ type: [NoteMusic] }) @ValidateNested({ each: true }) @IsOptional() @Type(() => NoteMusic) - @Field(() => [NoteMusic], { nullable: true }) music?: NoteMusic[] static get protectedKeys() { @@ -143,17 +128,14 @@ export class NoteModel extends WriteBaseModel { export class PartialNoteModel extends PartialType(NoteModel) {} -@ObjectType() export class NoteItemAggregateModel { - @Field(() => NoteModel) data: NoteModel - @Field(() => NoteModel, { nullable: true }) + prev?: NoteModel - @Field(() => NoteModel, { nullable: true }) + next?: NoteModel } -@ObjectType() export class NotePaginatorModel { data: NoteModel[] pagination: Paginator diff --git a/src/modules/note/note.module.ts b/src/modules/note/note.module.ts index 88ecc4a3..a40e08c8 100644 --- a/src/modules/note/note.module.ts +++ b/src/modules/note/note.module.ts @@ -1,12 +1,11 @@ import { Module } from '@nestjs/common' import { GatewayModule } from '~/processors/gateway/gateway.module' import { NoteController } from './note.controller' -import { NoteResolver } from './note.resolver' import { NoteService } from './note.service' @Module({ controllers: [NoteController], - providers: [NoteService, NoteResolver], + providers: [NoteService], exports: [NoteService], imports: [GatewayModule], }) diff --git a/src/modules/note/note.resolver.ts b/src/modules/note/note.resolver.ts deleted file mode 100644 index d25c6451..00000000 --- a/src/modules/note/note.resolver.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { - ForbiddenException, - UnprocessableEntityException, -} from '@nestjs/common' -import { Args, Query, Resolver } from '@nestjs/graphql' -import { DocumentType } from '@typegoose/typegoose' -import { IsMaster } from '~/common/decorator/role.decorator' -import { VisitDocument } from '~/common/decorator/update-count.decorator' -import { CannotFindException } from '~/common/exceptions/cant-find.exception' -import { - addConditionToSeeHideContent, - addYearCondition, -} from '~/utils/query.util' -import { transformDataToPaginate } from '~/utils/transfrom.util' -import { NoteQueryDto } from './note.dto' -import { NidOrIdArgsDto, PasswordArgsDto } from './note.input' -import { - NoteItemAggregateModel, - NoteModel, - NotePaginatorModel, -} from './note.model' -import { NoteService } from './note.service' - -@Resolver() -export class NoteResolver { - constructor(private readonly service: NoteService) {} - - @Query(() => NoteItemAggregateModel) - @VisitDocument('Note') - async getNoteById( - @Args() args: NidOrIdArgsDto, - @IsMaster() isMaster: boolean, - @Args() { password }: PasswordArgsDto, - ) { - const { id, nid } = args - if (!id && !nid) { - throw new UnprocessableEntityException('id or nid must choice one') - } - const currentNote = (await this.service.findOneByIdOrNid( - id ?? nid, - )) as DocumentType - - if (!currentNote) { - throw new CannotFindException() - } - if ( - (!this.service.checkPasswordToAccess(currentNote, password) || - currentNote.hide) && - !isMaster - ) { - throw new ForbiddenException('不要偷看人家的小心思啦~') - } - const condition = addConditionToSeeHideContent(isMaster) - const prev = await this.service.model - .findOne({ - ...condition, - created: { - $gt: currentNote.created, - }, - }) - .sort({ created: 1 }) - - const next = await this.service.model - .findOne({ - ...condition, - created: { - $lt: currentNote.created, - }, - }) - .sort({ created: -1 }) - - return { data: currentNote, next, prev } - } - - @Query(() => NoteItemAggregateModel) - @VisitDocument('Note') - async getLastestNote(@IsMaster() isMaster: boolean) { - const doc = (await this.service.model - .findOne({ ...addConditionToSeeHideContent(isMaster) }) - .sort({ created: -1 })) as DocumentType - if (!doc) { - throw new CannotFindException() - } - const id = doc._id.toString() - return await this.getNoteById({ id }, isMaster, {}) - } - - @Query(() => NotePaginatorModel) - async getNotesWithPager( - @Args() args: NoteQueryDto, - @IsMaster() isMaster: boolean, - ) { - const { page, size, sortBy, sortOrder, year } = args - const condition = { - ...addConditionToSeeHideContent(isMaster), - ...addYearCondition(year), - } - return transformDataToPaginate( - await this.service.model.paginate(condition, { - limit: size, - page, - sort: sortBy ? { [sortBy]: sortOrder || -1 } : { created: -1 }, - }), - ) - } -} diff --git a/src/modules/post/post.dto.ts b/src/modules/post/post.dto.ts index 0207af3b..b4b03660 100644 --- a/src/modules/post/post.dto.ts +++ b/src/modules/post/post.dto.ts @@ -1,9 +1,7 @@ -import { ArgsType, Field, Int } from '@nestjs/graphql' import { Transform } from 'class-transformer' import { IsEnum, IsOptional, IsString, ValidateIf } from 'class-validator' import { PagerDto } from '~/shared/dto/pager.dto' -@ArgsType() export class PostQueryDto extends PagerDto { @IsOptional() @IsEnum(['categoryId', 'title', 'created', 'modified']) @@ -14,11 +12,9 @@ export class PostQueryDto extends PagerDto { @IsEnum([1, -1]) @ValidateIf((o) => o.sortBy) @Transform(({ value: v }) => v | 0) - @Field(() => Int) readonly sortOrder?: 1 | -1 } -@ArgsType() export class CategoryAndSlugDto { @IsString() readonly category: string diff --git a/src/modules/post/post.model.ts b/src/modules/post/post.model.ts index d26e3de6..81bd4006 100644 --- a/src/modules/post/post.model.ts +++ b/src/modules/post/post.model.ts @@ -1,4 +1,3 @@ -import { Field, ObjectType } from '@nestjs/graphql' import { PartialType } from '@nestjs/mapped-types' import { ApiHideProperty, ApiProperty } from '@nestjs/swagger' import { @@ -25,10 +24,7 @@ import { Paginator, WriteBaseModel, } from '~/shared/model/base.model' -import { - CategoryModel as Category, - CategoryModel, -} from '../category/category.model' +import { CategoryModel as Category } from '../category/category.model' function autoPopulateCategory( this: Query< @@ -49,7 +45,6 @@ function autoPopulateCategory( @index({ modified: -1 }) @index({ text: 'text' }) @modelOptions({ options: { customName: 'Post', allowMixed: Severity.ALLOW } }) -@ObjectType() export class PostModel extends WriteBaseModel { @prop({ trim: true, unique: true, required: true }) @IsString() @@ -65,7 +60,6 @@ export class PostModel extends WriteBaseModel { @prop({ ref: () => Category, required: true }) @IsMongoId() @ApiProperty({ example: '5eb2c62a613a5ab0642f1f7a' }) - @Field(() => String) categoryId: Ref @prop({ @@ -75,7 +69,6 @@ export class PostModel extends WriteBaseModel { justOne: true, }) @ApiHideProperty() - @Field(() => CategoryModel, { nullable: true }) public category: Ref @prop({ default: false }) @@ -98,7 +91,6 @@ export class PostModel extends WriteBaseModel { tags?: string[] @prop({ type: Count, default: { read: 0, like: 0 }, _id: false }) @ApiHideProperty() - @Field(() => Count, { nullable: true }) count?: Count static get protectedKeys() { @@ -108,7 +100,6 @@ export class PostModel extends WriteBaseModel { export class PartialPostModel extends PartialType(PostModel) {} -@ObjectType() export class PostPaginatorModel { data: PostModel[] pagination: Paginator diff --git a/src/modules/post/post.module.ts b/src/modules/post/post.module.ts index 6936f3b0..56655c94 100644 --- a/src/modules/post/post.module.ts +++ b/src/modules/post/post.module.ts @@ -1,13 +1,12 @@ import { forwardRef, Module } from '@nestjs/common' import { CategoryModule } from '../category/category.module' import { PostController } from './post.controller' -import { PostResolver } from './post.resolver' import { PostService } from './post.service' @Module({ imports: [forwardRef(() => CategoryModule)], controllers: [PostController], - providers: [PostService, PostResolver], + providers: [PostService], exports: [PostService], }) export class PostModule {} diff --git a/src/modules/post/post.resolver.ts b/src/modules/post/post.resolver.ts deleted file mode 100644 index ccae9930..00000000 --- a/src/modules/post/post.resolver.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { NotFoundException } from '@nestjs/common' -import { Args, Query, Resolver } from '@nestjs/graphql' -import { IsMaster } from '~/common/decorator/role.decorator' -import { VisitDocument } from '~/common/decorator/update-count.decorator' -import { CannotFindException } from '~/common/exceptions/cant-find.exception' -import { MongoIdDto } from '~/shared/dto/id.dto' -import { - addConditionToSeeHideContent, - addYearCondition, -} from '~/utils/query.util' -import { transformDataToPaginate } from '~/utils/transfrom.util' -import { CategoryAndSlugDto, PostQueryDto } from './post.dto' -import { PostModel, PostPaginatorModel } from './post.model' -import { PostService } from './post.service' - -@Resolver() -export class PostResolver { - constructor(private readonly postService: PostService) {} - - @Query(() => PostModel) - @VisitDocument('Post') - public async getPostById( - @Args() { id }: MongoIdDto, - @IsMaster() isMaster: boolean, - ) { - return this.postService.model - .findOne({ _id: id, ...addConditionToSeeHideContent(isMaster) }) - .populate('category') - } - - @Query(() => PostPaginatorModel) - public async getPostList( - @IsMaster() isMaster: boolean, - @Args() args: PostQueryDto, - ) { - const { size, select, page, year, sortBy, sortOrder } = args - - const res = await this.postService.findWithPaginator( - { - ...addYearCondition(year), - ...addConditionToSeeHideContent(isMaster), - }, - { - limit: size, - page, - select, - sort: sortBy ? { [sortBy]: sortOrder || -1 } : { created: -1 }, - }, - ) - - return transformDataToPaginate(res) - } - - @Query(() => PostModel) - @VisitDocument('Post') - async getByCateAndSlug( - @Args() args: CategoryAndSlugDto, - @IsMaster() isMaster: boolean, - ) { - const { category, slug } = args - - const categoryDocument = await this.postService.getCategoryBySlug(category) - if (!categoryDocument) { - throw new NotFoundException('该分类未找到 (。•́︿•̀。)') - } - - const postDocument = await this.postService.model - .findOne({ - slug, - categoryId: categoryDocument._id, - }) - .populate('category') - - if (!postDocument || (postDocument.hide && !isMaster)) { - throw new CannotFindException() - } - return postDocument - } -} diff --git a/src/modules/recently/recently.model.ts b/src/modules/recently/recently.model.ts index 16a61aee..c5b22b0e 100644 --- a/src/modules/recently/recently.model.ts +++ b/src/modules/recently/recently.model.ts @@ -1,9 +1,7 @@ -import { ObjectType } from '@nestjs/graphql' import { modelOptions, prop } from '@typegoose/typegoose' import { IsOptional, IsString } from 'class-validator' import { BaseModel } from '~/shared/model/base.model' -@ObjectType() @modelOptions({ options: { customName: 'Recently', diff --git a/src/shared/dto/id.dto.ts b/src/shared/dto/id.dto.ts index ab4b8199..a8d73404 100644 --- a/src/shared/dto/id.dto.ts +++ b/src/shared/dto/id.dto.ts @@ -1,14 +1,11 @@ import { UnprocessableEntityException } from '@nestjs/common' -import { ArgsType, Field, ID } from '@nestjs/graphql' import { ApiProperty } from '@nestjs/swagger' import { Transform } from 'class-transformer' import { IsDefined, isMongoId, IsMongoId } from 'class-validator' -@ArgsType() export class MongoIdDto { @IsMongoId() @ApiProperty({ example: '5e6f67e75b303781d2807278' }) - @Field(() => ID) id: string } diff --git a/src/shared/dto/pager.dto.ts b/src/shared/dto/pager.dto.ts index 72670df0..40928544 100644 --- a/src/shared/dto/pager.dto.ts +++ b/src/shared/dto/pager.dto.ts @@ -1,13 +1,3 @@ -/* - * @Author: Innei - * @Date: 2020-06-06 18:28:53 - * @LastEditTime: 2020-07-12 11:06:06 - * @LastEditors: Innei - * @FilePath: /mx-server/src/shared/base/dto/pager.dto.ts - * @Coding with Love - */ - -import { ArgsType, Field, Int } from '@nestjs/graphql' import { ApiProperty } from '@nestjs/swagger' import { Expose, Transform } from 'class-transformer' import { @@ -21,7 +11,6 @@ import { ValidateIf, } from 'class-validator' -@ArgsType() export class PagerDto { @Min(1) @Max(50) @@ -31,7 +20,6 @@ export class PagerDto { toClassOnly: true, }) @ApiProperty({ example: 10 }) - @Field(() => Int) size?: number @Transform(({ value: val }) => (val ? parseInt(val) : 1), { @@ -41,7 +29,6 @@ export class PagerDto { @IsInt() @Expose() @ApiProperty({ example: 1 }) - @Field(() => Int) page?: number @IsOptional() diff --git a/src/shared/model/base.model.ts b/src/shared/model/base.model.ts index 79c86581..9b8e7bf2 100644 --- a/src/shared/model/base.model.ts +++ b/src/shared/model/base.model.ts @@ -1,4 +1,3 @@ -import { Field, ID, ObjectType } from '@nestjs/graphql' import { ApiHideProperty } from '@nestjs/swagger' import { modelOptions, plugin, prop } from '@typegoose/typegoose' import { Type } from 'class-transformer' @@ -29,12 +28,10 @@ import Paginate from 'mongoose-paginate-v2' }, }, }) -@ObjectType() export class BaseModel { @ApiHideProperty() - @Field(() => Date) created?: Date - @Field(() => ID) + @ApiHideProperty() id?: string @@ -43,7 +40,6 @@ export class BaseModel { } } -@ObjectType() export class Paginator { /** * 总条数 @@ -68,7 +64,6 @@ export class Paginator { @modelOptions({ schemaOptions: { _id: false }, }) -@ObjectType() abstract class ImageModel { @prop() @IsOptional() @@ -96,7 +91,6 @@ abstract class ImageModel { src: string } -@ObjectType() export abstract class BaseCommentIndexModel extends BaseModel { @prop({ default: 0 }) @ApiHideProperty() @@ -112,7 +106,6 @@ export abstract class BaseCommentIndexModel extends BaseModel { } } -@ObjectType() export class WriteBaseModel extends BaseCommentIndexModel { @prop({ trim: true, index: true, required: true }) @IsString() @@ -125,7 +118,6 @@ export class WriteBaseModel extends BaseCommentIndexModel { @prop({ type: ImageModel }) @ApiHideProperty() - @Field(() => ImageModel, { nullable: true }) @IsOptional() @ValidateNested() @Type(() => ImageModel) @@ -133,7 +125,6 @@ export class WriteBaseModel extends BaseCommentIndexModel { @prop({ default: null }) @ApiHideProperty() - @Field(() => Date, { nullable: true }) modified: Date | null static get protectedKeys() { @@ -145,7 +136,6 @@ export class WriteBaseModel extends BaseCommentIndexModel { schemaOptions: { id: false, _id: false }, options: { customName: 'count' }, }) -@ObjectType() export class CountMixed { @prop({ default: 0 }) read?: number diff --git a/src/utils/nest.util.ts b/src/utils/nest.util.ts index a0f54664..7eed3400 100644 --- a/src/utils/nest.util.ts +++ b/src/utils/nest.util.ts @@ -1,11 +1,12 @@ import { ExecutionContext } from '@nestjs/common' -import { GqlExecutionContext } from '@nestjs/graphql' - -export function getNestExecutionContextRequest(context: ExecutionContext) { - const req = context.switchToHttp().getRequest() - if (req) { - return req - } - const ctx = GqlExecutionContext.create(context) - return ctx.getContext().req +import type { FastifyRequest } from 'fastify' +export function getNestExecutionContextRequest( + context: ExecutionContext, +): FastifyRequest & KV { + return context.switchToHttp().getRequest() + // if (req) { + // return req + // } + // const ctx = GqlExecutionContext.create(context) + // return ctx.getContext().req } diff --git a/test/src/gql.resolver.e2e-spec.ts b/test/src/gql.resolver.e2e-spec.ts deleted file mode 100644 index e08e89fe..00000000 --- a/test/src/gql.resolver.e2e-spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { GraphQLModule } from '@nestjs/graphql' -import { NestFastifyApplication } from '@nestjs/platform-fastify' -import { Test } from '@nestjs/testing' -import { join } from 'path' -import { AppResolver } from '~/app.resolver' -import { fastifyApp } from '~/common/adapters/fastify.adapter' - -describe('GQL test (e2e)', () => { - let app: NestFastifyApplication - - beforeAll(async () => { - const moduleRef = await Test.createTestingModule({ - imports: [ - GraphQLModule.forRoot({ - autoSchemaFile: join(process.cwd(), 'schema.gql'), - context: ({ req }) => ({ req }), - }), - AppResolver, - ], - }).compile() - app = moduleRef.createNestApplication(fastifyApp) - await app.init() - await app.getHttpAdapter().getInstance().ready() - }) - - it('GET /graphql', () => { - return app - .inject({ - method: 'post', - url: '/graphql', - payload: { - operationName: null, - variables: {}, - query: ` { - sayHello - }`, - }, - }) - .then((res) => { - expect(res.statusCode).toBe(200) - expect(res.json()).toStrictEqual({ - data: { - sayHello: 'Hello World!', - }, - }) - }) - }) - - afterAll(async () => { - await app.close() - }) -})