Просмотр исходного кода

chore(server): Update to Nest v6 & Typeorm v0.2.15

Michael Bromley 6 лет назад
Родитель
Сommit
c433d3bd99

+ 7 - 6
server/package.json

@@ -37,11 +37,12 @@
     "dist/**/*"
   ],
   "dependencies": {
-    "@nestjs/common": "5.7.2",
-    "@nestjs/core": "5.7.2",
-    "@nestjs/graphql": "5.5.3",
-    "@nestjs/testing": "5.7.2",
-    "@nestjs/typeorm": "^5.3.0",
+    "@nestjs/common": "^6.0.2",
+    "@nestjs/core": "^6.0.2",
+    "@nestjs/graphql": "^6.0.2",
+    "@nestjs/platform-express": "^6.0.2",
+    "@nestjs/testing": "^6.0.2",
+    "@nestjs/typeorm": "^6.0.0",
     "@types/progress": "^2.0.3",
     "apollo-server-express": "^2.4.0",
     "bcrypt": "^3.0.3",
@@ -74,7 +75,7 @@
     "reflect-metadata": "^0.1.12",
     "rxjs": "^6.3.3",
     "sharp": "^0.21.1",
-    "typeorm": "0.2.11",
+    "typeorm": "0.2.15",
     "typescript": "^3.2.4"
   },
   "devDependencies": {

+ 5 - 5
server/src/api/config/configure-graphql-module.ts

@@ -52,13 +52,13 @@ export function configureGraphQLModule(
     });
 }
 
-function createGraphQLOptions(
+async function createGraphQLOptions(
     i18nService: I18nService,
     configService: ConfigService,
     idCodecService: IdCodecService,
     typesLoader: GraphQLTypesLoader,
     options: GraphQLApiOptions,
-): GqlModuleOptions {
+): Promise<GqlModuleOptions> {
     // Prevent `Type "Node" is missing a "resolveType" resolver.` warnings.
     // See https://github.com/apollographql/apollo-server/issues/1075
     const dummyResolveType = {
@@ -69,7 +69,7 @@ function createGraphQLOptions(
 
     return {
         path: '/' + options.apiPath,
-        typeDefs: createTypeDefs(options.apiType),
+        typeDefs: await createTypeDefs(options.apiType),
         include: [options.resolverModule],
         resolvers: {
             JSON: GraphQLJSON,
@@ -103,9 +103,9 @@ function createGraphQLOptions(
      * 2. any custom fields defined in the config
      * 3. any schema extensions defined by plugins
      */
-    function createTypeDefs(apiType: 'shop' | 'admin'): string {
+    async function createTypeDefs(apiType: 'shop' | 'admin'): Promise<string> {
         const customFields = configService.customFields;
-        const typeDefs = typesLoader.mergeTypesByPaths(...options.typePaths);
+        const typeDefs = await typesLoader.mergeTypesByPaths(options.typePaths);
         let schema = generateListOptions(typeDefs);
         schema = addGraphQLCustomFields(schema, customFields);
         const pluginSchemaExtensions = getPluginAPIExtensions(configService.plugins, apiType).map(

+ 2 - 2
server/src/api/decorators/allow.decorator.ts

@@ -1,4 +1,4 @@
-import { ReflectMetadata } from '@nestjs/common';
+import { SetMetadata } from '@nestjs/common';
 
 import { Permission } from '../../../../shared/generated-types';
 
@@ -17,4 +17,4 @@ export const PERMISSIONS_METADATA_KEY = '__permissions__';
  *  }
  * ```
  */
-export const Allow = (...permissions: Permission[]) => ReflectMetadata(PERMISSIONS_METADATA_KEY, permissions);
+export const Allow = (...permissions: Permission[]) => SetMetadata(PERMISSIONS_METADATA_KEY, permissions);

+ 2 - 2
server/src/api/decorators/decode.decorator.ts

@@ -1,4 +1,4 @@
-import { ReflectMetadata } from '@nestjs/common';
+import { SetMetadata } from '@nestjs/common';
 
 export const DECODE_METADATA_KEY = '__decode__';
 
@@ -16,4 +16,4 @@ export const DECODE_METADATA_KEY = '__decode__';
  *  }
  * ```
  */
-export const Decode = (...transformKeys: string[]) => ReflectMetadata(DECODE_METADATA_KEY, transformKeys);
+export const Decode = (...transformKeys: string[]) => SetMetadata(DECODE_METADATA_KEY, transformKeys);

+ 4 - 3
server/src/api/middleware/asset-interceptor.spec.ts

@@ -1,4 +1,5 @@
-import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context.host';
+import { CallHandler } from '@nestjs/common';
+import { ExecutionContextHost } from '@nestjs/core/helpers/execution-context-host';
 import { of } from 'rxjs';
 
 import { MockConfigService } from '../../config/config.service.mock';
@@ -17,9 +18,9 @@ describe('AssetInterceptor', () => {
             configService.assetOptions.assetStorageStrategy = { toAbsoluteUrl };
             const interceptor = new AssetInterceptor(configService as any);
             const executionContext = new ExecutionContextHost([0, 0, { req: {} }]);
-            const call$ = of(response);
+            const next: CallHandler = { handle: () => of(response) };
 
-            interceptor.intercept(executionContext, call$).subscribe(result => {
+            interceptor.intercept(executionContext, next).subscribe(result => {
                 assertFn(response, result, toAbsoluteUrl);
                 done();
             });

+ 4 - 4
server/src/api/middleware/asset-interceptor.ts

@@ -1,4 +1,4 @@
-import { ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
+import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
 import { GqlExecutionContext } from '@nestjs/graphql';
 import { Observable } from 'rxjs';
 import { map } from 'rxjs/operators';
@@ -25,14 +25,14 @@ export class AssetInterceptor implements NestInterceptor {
         }
     }
 
-    intercept<T = any>(context: ExecutionContext, call$: Observable<T>): Observable<T> {
+    intercept<T = any>(context: ExecutionContext, next: CallHandler<T>): Observable<T> {
         const toAbsoluteUrl = this.toAbsoluteUrl;
         if (toAbsoluteUrl === undefined) {
-            return call$;
+            return next.handle();
         }
         const ctx = GqlExecutionContext.create(context).getContext();
         const request = ctx.req;
-        return call$.pipe(
+        return next.handle().pipe(
             map(data => {
                 visitType(data, [Asset, 'productPreview', 'productVariantPreview'], asset => {
                     if (asset instanceof Asset) {

+ 3 - 3
server/src/api/middleware/id-interceptor.ts

@@ -1,4 +1,4 @@
-import { ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
+import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
 import { Reflector } from '@nestjs/core';
 import { GqlExecutionContext } from '@nestjs/graphql';
 import { Observable } from 'rxjs';
@@ -17,7 +17,7 @@ import { DECODE_METADATA_KEY } from '../decorators/decode.decorator';
 export class IdInterceptor implements NestInterceptor {
     constructor(private idCodecService: IdCodecService, private readonly reflector: Reflector) {}
 
-    intercept(context: ExecutionContext, call$: Observable<any>): Observable<any> {
+    intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> {
         const args = GqlExecutionContext.create(context).getArgs();
         const transformKeys = this.reflector.get<string[]>(DECODE_METADATA_KEY, context.getHandler());
         const gqlRoot = context.getArgByIndex(0);
@@ -27,6 +27,6 @@ export class IdInterceptor implements NestInterceptor {
             // be already decoded.
             Object.assign(args, this.idCodecService.decode(args, transformKeys));
         }
-        return call$;
+        return next.handle();
     }
 }

+ 0 - 1
server/src/config/asset-storage-strategy/asset-storage-strategy.ts

@@ -1,4 +1,3 @@
-import { INestApplication, INestExpressApplication } from '@nestjs/common';
 import { Request } from 'express';
 import { Stream } from 'stream';
 

+ 1 - 1
server/src/plugin/default-search-plugin/fulltext-search.service.ts

@@ -94,7 +94,7 @@ export class FulltextSearchService implements SearchService {
             relations: this.variantRelations,
         });
         FindOptionsUtils.joinEagerRelations(qb, qb.alias, this.connection.getMetadata(ProductVariant));
-        const variants = await qb.where('variants_product.deletedAt IS NULL').getMany();
+        const variants = await qb.where('variants__product.deletedAt IS NULL').getMany();
         await this.connection.getRepository(SearchIndexItem).delete({ languageCode: ctx.languageCode });
         await this.saveSearchIndexItems(ctx, variants);
         return {

+ 1 - 1
server/src/service/helpers/list-query-builder/parse-channel-param.spec.ts

@@ -14,7 +14,7 @@ describe('parseChannelParam()', () => {
             fail('Result should be defined');
             return;
         }
-        expect(result.clause).toEqual('product_channels.id = :channelId');
+        expect(result.clause).toEqual('product__channels.id = :channelId');
         expect(result.parameters).toEqual({ channelId: 123 });
     });
 

+ 1 - 1
server/src/service/helpers/list-query-builder/parse-channel-param.ts

@@ -22,7 +22,7 @@ export function parseChannelParam<T extends VendureEntity>(
         return;
     }
     return {
-        clause: `${alias}_channels.id = :channelId`,
+        clause: `${alias}__channels.id = :channelId`,
         parameters: { channelId },
     };
 }

Разница между файлами не показана из-за своего большого размера
+ 281 - 245
server/yarn.lock


Некоторые файлы не были показаны из-за большого количества измененных файлов