Browse Source

refactor(server): Enable TypeScript esModuleInterop flag

Michael Bromley 7 years ago
parent
commit
a2a4063f93
36 changed files with 93 additions and 81 deletions
  1. 2 2
      codegen/client-schema.ts
  2. 3 3
      codegen/download-introspection-schema.ts
  3. 1 1
      codegen/generate-graphql-types.ts
  4. 2 2
      server/build/gulpfile.ts
  5. 4 4
      server/cli/init.ts
  6. 3 3
      server/cli/populate.ts
  7. 3 3
      server/cli/vendure-cli.ts
  8. 4 3
      server/dev-config.ts
  9. 2 0
      server/e2e/auth.e2e-spec.ts
  10. 2 1
      server/e2e/config/test-config.ts
  11. 1 1
      server/e2e/import.e2e-spec.ts
  12. 2 2
      server/e2e/test-server.ts
  13. 3 3
      server/mock-data/mock-data.service.ts
  14. 1 1
      server/src/api/common/set-auth-token.ts
  15. 2 2
      server/src/api/config/graphql-config.service.ts
  16. 1 1
      server/src/api/resolvers/order.resolver.ts
  17. 1 1
      server/src/config/asset-naming-strategy/default-asset-naming-strategy.ts
  18. 1 1
      server/src/data-import/import-cli.ts
  19. 2 2
      server/src/data-import/providers/import-parser/import-parser.spec.ts
  20. 1 1
      server/src/data-import/providers/import-parser/import-parser.ts
  21. 2 2
      server/src/data-import/providers/importer/importer.ts
  22. 3 13
      server/src/email/default-email-types.ts
  23. 2 2
      server/src/email/email-sender.ts
  24. 5 1
      server/src/email/email.module.ts
  25. 16 5
      server/src/email/handlebars-mjml-generator.ts
  26. 4 2
      server/src/email/template-loader.ts
  27. 5 5
      server/src/i18n/i18n.service.ts
  28. 2 2
      server/src/plugin/default-asset-server-plugin/default-asset-preview-strategy.ts
  29. 3 3
      server/src/plugin/default-asset-server-plugin/default-asset-server-plugin.ts
  30. 2 2
      server/src/plugin/default-asset-server-plugin/default-asset-storage-strategy.ts
  31. 1 1
      server/src/plugin/default-asset-server-plugin/transform-image.ts
  32. 1 1
      server/src/service/helpers/password-cipher/password-ciper.ts
  33. 2 2
      server/src/service/services/asset.service.ts
  34. 2 2
      server/src/service/services/auth.service.ts
  35. 1 1
      server/src/service/services/user.service.ts
  36. 1 0
      tsconfig.json

+ 2 - 2
codegen/client-schema.ts

@@ -1,6 +1,6 @@
-import * as fs from 'fs';
+import fs from 'fs';
 import { makeExecutableSchema } from 'graphql-tools';
-import * as path from 'path';
+import path from 'path';
 
 const CLIENT_SCHEMA_FILE = '../admin-ui/src/app/data/client-state/client-types.graphql';
 const LANGUAGE_CODE_FILE = '../server/src/common/types/language-code.graphql';

+ 3 - 3
codegen/download-introspection-schema.ts

@@ -1,7 +1,7 @@
-import * as fs from 'fs';
+import fs from 'fs';
 import { introspectionQuery } from 'graphql';
-import * as http from 'http';
-import * as path from 'path';
+import http from 'http';
+import path from 'path';
 
 import { API_PATH, API_PORT } from '../shared/shared-constants';
 

+ 1 - 1
codegen/generate-graphql-types.ts

@@ -1,5 +1,5 @@
 import { generate } from 'graphql-code-generator';
-import * as path from 'path';
+import path from 'path';
 
 import { API_PATH, API_PORT } from '../shared/shared-constants';
 

+ 2 - 2
server/build/gulpfile.ts

@@ -1,5 +1,5 @@
-import * as gulp from 'gulp';
-import * as path from 'path';
+import gulp from 'gulp';
+import path from 'path';
 
 gulp.task('copy-schemas', () => {
     return gulp.src(['../src/**/*.graphql']).pipe(gulp.dest('../dist/server/src'));

+ 4 - 4
server/cli/init.ts

@@ -1,8 +1,8 @@
-import * as fs from 'fs-extra';
-import * as Handlebars from 'handlebars';
-import * as path from 'path';
+import fs from 'fs-extra';
+import Handlebars from 'handlebars';
+import path from 'path';
 import { PromptObject } from 'prompts';
-import * as prompts from 'prompts';
+import prompts from 'prompts';
 
 // tslint:disable:no-console
 export async function init(): Promise<string> {

+ 3 - 3
server/cli/populate.ts

@@ -1,7 +1,7 @@
 import { INestApplication } from '@nestjs/common';
-import * as fs from 'fs-extra';
-import * as path from 'path';
-import * as ProgressBar from 'progress';
+import fs from 'fs-extra';
+import path from 'path';
+import ProgressBar from 'progress';
 import { tap } from 'rxjs/operators';
 import { Connection } from 'typeorm';
 

+ 3 - 3
server/cli/vendure-cli.ts

@@ -1,7 +1,7 @@
 #!/usr/bin/env node
-import * as program from 'commander';
-import * as path from 'path';
-import * as prompts from 'prompts';
+import program from 'commander';
+import path from 'path';
+import prompts from 'prompts';
 
 import { logColored } from './cli-utils';
 import { init } from './init';

+ 4 - 3
server/dev-config.ts

@@ -1,4 +1,4 @@
-import * as path from 'path';
+import path from 'path';
 
 import { API_PATH, API_PORT } from '../shared/shared-constants';
 
@@ -8,7 +8,7 @@ import { OrderProcessOptions, VendureConfig } from './src/config/vendure-config'
 import { defaultEmailTypes } from './src/email/default-email-types';
 import { HandlebarsMjmlGenerator } from './src/email/handlebars-mjml-generator';
 import { DefaultAssetServerPlugin } from './src/plugin';
-import { DefaultSearchPlugin } from './src/plugin/default-search-engine/default-search-plugin';
+import { DefaultSearchPlugin } from './src/plugin/default-search-plugin/default-search-plugin';
 
 /**
  * Config settings used during development
@@ -37,8 +37,9 @@ export const devConfig: VendureConfig = {
     },
     customFields: {},
     emailOptions: {
+        emailTemplatePath: path.join(__dirname, 'src', 'email', 'templates'),
         emailTypes: defaultEmailTypes,
-        generator: new HandlebarsMjmlGenerator(path.join(__dirname, 'src', 'email', 'templates', 'partials')),
+        generator: new HandlebarsMjmlGenerator(),
         transport: {
             type: 'file',
             raw: false,

+ 2 - 0
server/e2e/auth.e2e-spec.ts

@@ -1,5 +1,6 @@
 import { DocumentNode } from 'graphql';
 import gql from 'graphql-tag';
+import path from 'path';
 
 import {
     CREATE_ADMINISTRATOR,
@@ -41,6 +42,7 @@ describe('Authorization & permissions', () => {
             },
             {
                 emailOptions: {
+                    emailTemplatePath: 'src/email/templates',
                     emailTypes: defaultEmailTypes,
                     generator: new NoopEmailGenerator(),
                     transport: {

+ 2 - 1
server/e2e/config/test-config.ts

@@ -1,4 +1,4 @@
-import * as path from 'path';
+import path from 'path';
 
 import { API_PATH } from '../../../shared/shared-constants';
 import { DefaultAssetNamingStrategy } from '../../src/config/asset-naming-strategy/default-asset-naming-strategy';
@@ -42,6 +42,7 @@ export const testConfig: VendureConfig = {
         paymentMethodHandlers: [],
     },
     emailOptions: {
+        emailTemplatePath: __dirname,
         transport: {
             type: 'none',
         },

+ 1 - 1
server/e2e/import.e2e-spec.ts

@@ -1,5 +1,5 @@
 import gql from 'graphql-tag';
-import * as path from 'path';
+import path from 'path';
 
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
 import { TestClient } from './test-client';

+ 2 - 2
server/e2e/test-server.ts

@@ -1,7 +1,7 @@
 import { INestApplication } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
-import * as fs from 'fs';
-import * as path from 'path';
+import fs from 'fs';
+import path from 'path';
 import { ConnectionOptions } from 'typeorm';
 import { SqljsConnectionOptions } from 'typeorm/driver/sqljs/SqljsConnectionOptions';
 

+ 3 - 3
server/mock-data/mock-data.service.ts

@@ -1,7 +1,7 @@
-import * as faker from 'faker/locale/en_GB';
-import * as fs from 'fs-extra';
+import faker from 'faker/locale/en_GB';
+import fs from 'fs-extra';
 import gql from 'graphql-tag';
-import * as path from 'path';
+import path from 'path';
 
 import { CREATE_FACET } from '../../admin-ui/src/app/data/definitions/facet-definitions';
 import {

+ 1 - 1
server/src/api/common/set-auth-token.ts

@@ -1,5 +1,5 @@
 import { Request, Response } from 'express';
-import * as ms from 'ms';
+import ms from 'ms';
 
 import { AuthOptions } from '../../config/vendure-config';
 

+ 2 - 2
server/src/api/config/graphql-config.service.ts

@@ -3,8 +3,8 @@ import { GqlModuleOptions, GqlOptionsFactory, GraphQLTypesLoader } from '@nestjs
 import { GraphQLUpload } from 'apollo-server-core';
 import { extendSchema, printSchema } from 'graphql';
 import { GraphQLDateTime } from 'graphql-iso-date';
-import * as GraphQLJSON from 'graphql-type-json';
-import * as path from 'path';
+import GraphQLJSON from 'graphql-type-json';
+import path from 'path';
 
 import { notNullOrUndefined } from '../../../../shared/shared-utils';
 import { ConfigService } from '../../config/config.service';

+ 1 - 1
server/src/api/resolvers/order.resolver.ts

@@ -1,5 +1,5 @@
 import { Args, Mutation, Parent, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
-import * as ms from 'ms';
+import ms from 'ms';
 
 import {
     AddItemToOrderMutationArgs,

+ 1 - 1
server/src/config/asset-naming-strategy/default-asset-naming-strategy.ts

@@ -1,4 +1,4 @@
-import * as path from 'path';
+import path from 'path';
 
 import { normalizeString } from '../../../../shared/normalize-string';
 

+ 1 - 1
server/src/data-import/import-cli.ts

@@ -1,4 +1,4 @@
-import * as path from 'path';
+import path from 'path';
 
 import { devConfig } from '../../dev-config';
 import { SimpleGraphQLClient } from '../../mock-data/simple-graphql-client';

+ 2 - 2
server/src/data-import/providers/import-parser/import-parser.spec.ts

@@ -1,5 +1,5 @@
-import * as fs from 'fs-extra';
-import * as path from 'path';
+import fs from 'fs-extra';
+import path from 'path';
 
 import { ImportParser } from './import-parser';
 

+ 1 - 1
server/src/data-import/providers/import-parser/import-parser.ts

@@ -1,5 +1,5 @@
 import { Injectable } from '@nestjs/common';
-import * as parse from 'csv-parse';
+import parse from 'csv-parse';
 import { Stream } from 'stream';
 
 import { normalizeString } from '../../../../../shared/normalize-string';

+ 2 - 2
server/src/data-import/providers/importer/importer.ts

@@ -1,6 +1,6 @@
 import { Injectable } from '@nestjs/common';
-import * as fs from 'fs-extra';
-import * as path from 'path';
+import fs from 'fs-extra';
+import path from 'path';
 import { Observable } from 'rxjs';
 import { Stream } from 'stream';
 

+ 3 - 13
server/src/email/default-email-types.ts

@@ -1,4 +1,4 @@
-import * as path from 'path';
+import path from 'path';
 
 import { LanguageCode } from '../../../shared/generated-types';
 import { DEFAULT_CHANNEL_CODE } from '../../../shared/shared-constants';
@@ -28,12 +28,7 @@ export const defaultEmailTypes: EmailTypes<DefaultEmailType> = {
                 defaultLanguage: {
                     templateContext: emailContext => ({ order: emailContext.event.order }),
                     subject: `Order confirmation for #{{ order.code }}`,
-                    templatePath: path.join(
-                        __dirname,
-                        'templates',
-                        'order-confirmation',
-                        'order-confirmation.hbs',
-                    ),
+                    templatePath: 'order-confirmation/order-confirmation.hbs',
                 },
             },
         },
@@ -55,12 +50,7 @@ export const defaultEmailTypes: EmailTypes<DefaultEmailType> = {
                         verifyUrl: SHOPFRONT_URL + 'verify',
                     }),
                     subject: `Please verify your email address`,
-                    templatePath: path.join(
-                        __dirname,
-                        'templates',
-                        'email-verification',
-                        'email-verification.hbs',
-                    ),
+                    templatePath: 'email-verification/email-verification.hbs',
                 },
             },
         },

+ 2 - 2
server/src/email/email-sender.ts

@@ -1,9 +1,9 @@
 import { Injectable } from '@nestjs/common';
-import * as fs from 'fs-extra';
+import fs from 'fs-extra';
 import { createTransport } from 'nodemailer';
 import { default as Mail } from 'nodemailer/lib/mailer';
 import SMTPTransport from 'nodemailer/lib/smtp-transport';
-import * as path from 'path';
+import path from 'path';
 import { Stream } from 'stream';
 
 import { normalizeString } from '../../../shared/normalize-string';

+ 5 - 1
server/src/email/email.module.ts

@@ -1,5 +1,5 @@
 import { Module, OnModuleInit } from '@nestjs/common';
-import * as fs from 'fs-extra';
+import fs from 'fs-extra';
 
 import { ConfigModule } from '../config/config.module';
 import { ConfigService } from '../config/config.service';
@@ -26,6 +26,10 @@ export class EmailModule implements OnModuleInit {
 
     async onModuleInit() {
         await this.setupEventSubscribers();
+        const { generator } = this.configService.emailOptions;
+        if (generator.onInit) {
+            await generator.onInit.call(generator, this.configService);
+        }
     }
 
     async setupEventSubscribers() {

+ 16 - 5
server/src/email/handlebars-mjml-generator.ts

@@ -1,10 +1,15 @@
-import * as dateFormat from 'dateformat';
-import * as fs from 'fs-extra';
-import * as Handlebars from 'handlebars';
+import dateFormat from 'dateformat';
+import fs from 'fs-extra';
+import Handlebars from 'handlebars';
+// tslint:disable-next-line
+//const mjml2html = require('mjml');
 import mjml2html from 'mjml';
-import * as path from 'path';
+import path from 'path';
 
+import { InternalServerError } from '../common/error/errors';
+import { ReadOnlyRequired } from '../common/types/common-types';
 import { EmailGenerator } from '../config/email/email-options';
+import { VendureConfig } from '../config/vendure-config';
 
 import { EmailContext, GeneratedEmailContext } from './email-context';
 
@@ -13,7 +18,13 @@ import { EmailContext, GeneratedEmailContext } from './email-context';
  * compiled down to responsive email HTML.
  */
 export class HandlebarsMjmlGenerator implements EmailGenerator {
-    constructor(partialsPath: string) {
+    onInit(config: ReadOnlyRequired<VendureConfig>) {
+        if (!config.emailOptions.emailTemplatePath) {
+            throw new InternalServerError(
+                `When using the HandlebarsMjmlGenerator, the emailTemplatePath config option must be set`,
+            );
+        }
+        const partialsPath = path.join(config.emailOptions.emailTemplatePath, 'partials');
         this.registerPartials(partialsPath);
         this.registerHelpers();
     }

+ 4 - 2
server/src/email/template-loader.ts

@@ -1,5 +1,6 @@
 import { Injectable } from '@nestjs/common';
-import * as fs from 'fs-extra';
+import fs from 'fs-extra';
+import path from 'path';
 
 import { ConfigService } from '../config/config.service';
 import { TemplateConfig } from '../config/email/email-options';
@@ -18,7 +19,8 @@ export class TemplateLoader {
         context: EmailContext,
     ): Promise<{ templateContext: any; subject: string; body: string }> {
         const { subject, templateContext, templatePath } = this.getTemplateConfig(type, context);
-        const body = await fs.readFile(templatePath, 'utf-8');
+        const { emailTemplatePath } = this.configService.emailOptions;
+        const body = await fs.readFile(path.join(emailTemplatePath, templatePath), 'utf-8');
 
         return {
             templateContext: templateContext(context),

+ 5 - 5
server/src/i18n/i18n.service.ts

@@ -1,12 +1,12 @@
 import { Injectable } from '@nestjs/common';
 import { Handler, Request } from 'express';
 import { GraphQLError } from 'graphql';
-import * as i18next from 'i18next';
+import i18next from 'i18next';
 import { TranslationFunction } from 'i18next';
-import * as i18nextMiddleware from 'i18next-express-middleware';
-import * as ICU from 'i18next-icu';
-import * as Backend from 'i18next-node-fs-backend';
-import * as path from 'path';
+import i18nextMiddleware from 'i18next-express-middleware';
+import ICU from 'i18next-icu';
+import Backend from 'i18next-node-fs-backend';
+import path from 'path';
 
 import { ConfigService } from '../config/config.service';
 

+ 2 - 2
server/src/plugin/default-asset-server-plugin/default-asset-preview-strategy.ts

@@ -1,5 +1,5 @@
-import * as path from 'path';
-import * as sharp from 'sharp';
+import path from 'path';
+import sharp from 'sharp';
 
 import { AssetType } from '../../../../shared/generated-types';
 import { getAssetType } from '../../common/utils';

+ 3 - 3
server/src/plugin/default-asset-server-plugin/default-asset-server-plugin.ts

@@ -1,7 +1,7 @@
-import * as express from 'express';
+import express from 'express';
 import { NextFunction, Request, Response } from 'express';
-import * as proxy from 'http-proxy-middleware';
-import * as path from 'path';
+import proxy from 'http-proxy-middleware';
+import path from 'path';
 
 import { AssetStorageStrategy } from '../../config/asset-storage-strategy/asset-storage-strategy';
 import { VendureConfig } from '../../config/vendure-config';

+ 2 - 2
server/src/plugin/default-asset-server-plugin/default-asset-storage-strategy.ts

@@ -1,7 +1,7 @@
 import { INestApplication, INestExpressApplication } from '@nestjs/common';
 import { Request } from 'express';
-import * as fs from 'fs-extra';
-import * as path from 'path';
+import fs from 'fs-extra';
+import path from 'path';
 import { Stream } from 'stream';
 
 import { AssetStorageStrategy } from '../../config/asset-storage-strategy/asset-storage-strategy';

+ 1 - 1
server/src/plugin/default-asset-server-plugin/transform-image.ts

@@ -1,4 +1,4 @@
-import * as sharp from 'sharp';
+import sharp from 'sharp';
 import { ResizeOptions } from 'sharp';
 
 import { ImageTransformPreset } from './default-asset-server-plugin';

+ 1 - 1
server/src/service/helpers/password-cipher/password-ciper.ts

@@ -1,5 +1,5 @@
 import { Injectable } from '@nestjs/common';
-import * as bcrypt from 'bcrypt';
+import bcrypt from 'bcrypt';
 
 const SALT_ROUNDS = 12;
 

+ 2 - 2
server/src/service/services/asset.service.ts

@@ -1,8 +1,8 @@
 import { Injectable } from '@nestjs/common';
 import { InjectConnection } from '@nestjs/typeorm';
 import { ReadStream } from 'fs-extra';
-import * as mime from 'mime-types';
-import * as path from 'path';
+import mime from 'mime-types';
+import path from 'path';
 import { Stream } from 'stream';
 import { Connection } from 'typeorm';
 

+ 2 - 2
server/src/service/services/auth.service.ts

@@ -1,7 +1,7 @@
 import { Injectable } from '@nestjs/common';
 import { InjectConnection } from '@nestjs/typeorm';
-import * as crypto from 'crypto';
-import * as ms from 'ms';
+import crypto from 'crypto';
+import ms from 'ms';
 import { Connection } from 'typeorm';
 
 import { RequestContext } from '../../api/common/request-context';

+ 1 - 1
server/src/service/services/user.service.ts

@@ -1,6 +1,6 @@
 import { Injectable } from '@nestjs/common';
 import { InjectConnection } from '@nestjs/typeorm';
-import * as ms from 'ms';
+import ms from 'ms';
 import { Connection } from 'typeorm';
 
 import { ID } from '../../../../shared/shared-types';

+ 1 - 0
tsconfig.json

@@ -5,6 +5,7 @@
     "skipLibCheck": true,
     "lib": ["es2017"],
     "allowSyntheticDefaultImports": true,
+    "esModuleInterop": true,
     "emitDecoratorMetadata": true,
     "experimentalDecorators": true,
     "target": "es6",