From e6d19f9150d1308bf0dbf96feca3488660cfc80b Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 00:33:59 +0300 Subject: [PATCH 1/7] Bundle server code with webpack --- deploy.js | 8 +- package.json | 14 +- serverless.yml | 25 ++- src/.babelrc | 14 -- src/app/typings/webpack-imports.d.ts | 10 - src/webpack/createBaseConfig.js | 37 +--- ...ack.config.js => webpack.config.client.js} | 32 +++- src/webpack/webpack.config.server.js | 67 +++++++ yarn.lock | 174 ++++++++---------- 9 files changed, 203 insertions(+), 178 deletions(-) delete mode 100644 src/.babelrc rename src/webpack/{webpack.config.js => webpack.config.client.js} (79%) create mode 100644 src/webpack/webpack.config.server.js diff --git a/deploy.js b/deploy.js index 987f31927..104d8a2c8 100644 --- a/deploy.js +++ b/deploy.js @@ -12,18 +12,20 @@ const { IS_PULL_REQUEST, BRANCH } = shelljs.env; const isPullRequest = IS_PULL_REQUEST !== 'false'; -const whitelistedBranches = ['master', 'beta', 'internal', 'materialize-more']; +const whitelistedBranches = ['master', 'beta', 'internal']; async function main() { - const buildCommands = ['yarn test', 'yarn coverage/report', 'yarn build']; + const buildCommands = []; const deploymentCommands = [ - 'cp yarn.lock package.json ./dist && cd dist && yarn --prod', `NODE_ENV=production serverless deploy --stage ${BRANCH} --aws-s3-accelerate`, ]; let isDeployment = false; if (isPullRequest === true) { console.info('Skipping deployment commands in PRs'); + buildCommands.push( + `NODE_ENV=production serverless package --stage ${BRANCH}`, + ); } else if (!whitelistedBranches.includes(BRANCH)) { console.info( `Skipping deployment because the branch "${BRANCH}" is not whitelisted`, diff --git a/package.json b/package.json index f783100db..b8b8751c2 100644 --- a/package.json +++ b/package.json @@ -18,22 +18,16 @@ "server/check-ts": "tsc --project ./src --noEmit", "app/check-ts": "tsc --project ./src/app --noEmit", "check-ts": "npm-run-all -s copy-defs -p -c --aggregate-output '*/check-ts'", - "app/webpack/build": "NODE_ENV=production NO_PERF_CHECKS=1 webpack --config ./src/webpack/webpack.config.js", "bundlesize": "bundlesize", "copy-defs": "cp src/app/typings/fbSdk.d.ts src/typings", + "app/webpack/build": "NODE_ENV=production NO_PERF_CHECKS=1 webpack --config ./src/webpack/webpack.config.client.js", "app/build": "API_ENDPOINT=${API_ENDPOINT:-https://api.hollowverse.com/graphql} run-s app/graphql/build app/webpack/build bundlesize", "app/analyze": "webpack-bundle-analyzer dist/client/stats.json dist/client", "app/graphql/schema": "apollo-codegen introspect-schema ${API_ENDPOINT:-https://api.hollowverse.com/graphql} --output ./graphqlSchema.json", "app/graphql/types": "mkdir -p src/app/api && apollo-codegen generate --project-name app 'src/app/**/*.{graphql,gql}' --target typescript --output src/app/api/types.ts", "app/graphql/dev": "nodemon -q --watch src/app --ext graphql,gql --exec 'run-s app/graphql/schema app/graphql/types'", "app/graphql/build": "run-s app/graphql/schema app/graphql/types", - "server/app-server/dev": "API_ENDPOINT=${API_ENDPOINT:-https://api.hollowverse.com/graphql} APP_SERVER_PORT=${APP_SERVER_PORT:-3001} HOT=1 NODE_ENV=development webpack-dev-server --config ./src/webpack/webpack.config.js --host 0.0.0.0 --display-error-details --hot", - "server/app-server/start": "node dist/appServer.js", - "server/main-server/dev": "PORT=${PORT:-8081} API_ENDPOINT=${API_ENDPOINT:-https://api.hollowverse.com/graphql} nodemon -q --watch src --ignore src/app --ignore src/webpack --ext ts,tsx,json --exec 'node -r 'ts-node/register' src/mainServer.ts'", - "server/main-server/start": "node dist/mainServer.js", - "server/build": "tsc --project ./src && babel --config-file ./src/.babelrc ./dist -d dist", - "build": "npm-run-all -s clean server/build app/build", - "start": "NODE_ENV=production run-p server/main-server/start", + "server/app-server/dev": "API_ENDPOINT=${API_ENDPOINT:-https://api.hollowverse.com/graphql} APP_SERVER_PORT=${APP_SERVER_PORT:-3001} HOT=1 NODE_ENV=development webpack-dev-server --config ./src/webpack/webpack.config.client.js --host 0.0.0.0 --display-error-details --hot", "dev": "NO_PROXY=${NO_PROXY:-1} NODE_ENV=development API_ENDPOINT=${API_ENDPOINT:-https://api.hollowverse.com/graphql} npm-run-all -s clean -p app/graphql/dev server/app-server/dev", "clean/build": "del-cli './dist'", "clean/test": "del-cli './coverage'", @@ -221,12 +215,12 @@ "babel-minify-webpack-plugin": "^0.3.1", "babel-plugin-dynamic-import-node": "^1.2.0", "babel-plugin-lodash": "^3.3.2", - "babel-plugin-module-resolver": "^3.1.1", "babel-plugin-transform-inline-environment-variables": "^0.3.0", "babel-preset-minify": "^0.4.0", "bundlesize": "^0.15.3", "circular-dependency-plugin": "^3.0.0", "codecov": "^3.0.0", + "copy-webpack-plugin": "^4.5.2", "css-loader": "^0.28.4", "del-cli": "^1.1.0", "eslint": "^4.19.1", @@ -274,7 +268,9 @@ "serverless-apigw-binary": "^0.4.4", "serverless-cloudfront-invalidate": "aghadiry/serverless-cloudfront-invalidate", "serverless-content-encoding": "^1.0.20", + "serverless-plugin-scripts": "^1.0.2", "serverless-plugin-typescript": "^1.1.5", + "serverless-webpack": "^5.2.0", "source-map-loader": "^0.2.1", "source-map-support": "^0.5.0", "supertest": "^3.0.0", diff --git a/serverless.yml b/serverless.yml index 591c7e705..b66935d86 100644 --- a/serverless.yml +++ b/serverless.yml @@ -1,11 +1,22 @@ service: website plugins: + - serverless-plugin-scripts + - serverless-webpack - serverless-apigw-binary - serverless-content-encoding - serverless-cloudfront-invalidate custom: + scripts: + hooks: + 'before:package:createDeploymentArtifacts': yarn app/build + + webpack: + packager: 'yarn' + webpackConfig: ./src/webpack/webpack.config.server.js + includeModules: true + cloudfrontInvalidate: distributionId: 'E3U55U3N2RXSA3' items: @@ -35,10 +46,10 @@ provider: Action: - secretsmanager:GetSecretValue Resource: - - "${self:custom.secretsArnPrefix}/splunk/httpCollector/website/token-*" + - '${self:custom.secretsArnPrefix}/splunk/httpCollector/website/token-*' functions: servePages: - handler: dist/servePages.servePages + handler: src/servePages.servePages events: - http: method: ANY @@ -47,17 +58,11 @@ functions: method: ANY path: /{proxy+} serveLogEndpoint: - handler: dist/serveLogEndpoint.serveLogEndpoint + handler: src/serveLogEndpoint.serveLogEndpoint events: - http: method: POST path: /log package: - excludeDevDependencies: false - include: - - 'dist/**' - exclude: - - '**/*' - - + individually: true diff --git a/src/.babelrc b/src/.babelrc deleted file mode 100644 index 70397e00c..000000000 --- a/src/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../.babelrc", - "plugins": [ - // Rewrite TypeScript absolute imports of local files to the actual - // relative paths so the modules can be found at runtime. - // require('memoizeOnSuccess') ==> require('./memoizeOnSuccess') - ["module-resolver", { - "root": [ - "./dist", - "./dist/app" - ] - }] - ] -} diff --git a/src/app/typings/webpack-imports.d.ts b/src/app/typings/webpack-imports.d.ts index 4f0d94ee9..1fb9333d8 100644 --- a/src/app/typings/webpack-imports.d.ts +++ b/src/app/typings/webpack-imports.d.ts @@ -39,13 +39,3 @@ declare module '*.html' { const str: string; export = str; } - -declare module '!!json-loader!*' { - const json: object; - export = json; -} - -declare module 'json-loader!*' { - const json: object; - export = json; -} diff --git a/src/webpack/createBaseConfig.js b/src/webpack/createBaseConfig.js index 452b20b2f..8bace01b9 100644 --- a/src/webpack/createBaseConfig.js +++ b/src/webpack/createBaseConfig.js @@ -3,15 +3,14 @@ const path = require('path'); const SpriteLoaderPlugin = require('svg-sprite-loader/plugin'); -const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); - const { URL } = require('url'); -const { compact } = require('lodash'); +const { compact, mapValues } = require('lodash'); const { srcDirectory, excludedPatterns, publicPath } = require('./variables'); -const { isHot, isDev, isProd } = require('@hollowverse/utils/helpers/env'); +const { isHot, isProd } = require('@hollowverse/utils/helpers/env'); +const { getAppGlobals } = require('./appGlobals'); const { API_ENDPOINT = 'https://api.hollowverse.com/graphql' } = process.env; @@ -39,30 +38,6 @@ module.exports.createBaseConfig = () => ({ stats: 'errors-only', }, - // See https://medium.com/webpack/webpack-4-mode-and-optimization-5423a6bc597a - optimization: { - noEmitOnErrors: true, - // Required for debugging in development and for long-term caching in production - namedModules: true, - namedChunks: true, - minimizer: [ - new UglifyJsPlugin({ - parallel: true, - sourceMap: true, - uglifyOptions: { - comments: false, - minimize: true, - safari10: true, // Workaround Safari 10 bugs - compress: { - inline: false, // Buggy - }, - }, - }), - ], - }, - - devtool: isDev ? 'cheap-module-source-map' : 'source-map', - module: { rules: compact([ // Read source maps produced by TypeScript and Babel and merge @@ -140,7 +115,7 @@ module.exports.createBaseConfig = () => ({ 'es6-promise': 'empty-module', }, - extensions: ['.tsx', '.ts', '.js'], + extensions: ['.tsx', '.ts', '.js', '.json'], modules: [ // Allow absolute imports from 'src' dir, // e.g. `import 'file';` instead of `'../../file';` @@ -163,5 +138,9 @@ module.exports.createBaseConfig = () => ({ ]), new SpriteLoaderPlugin(), + + new webpack.DefinePlugin( + mapValues(getAppGlobals(), v => JSON.stringify(v)), + ), ]), }); diff --git a/src/webpack/webpack.config.js b/src/webpack/webpack.config.client.js similarity index 79% rename from src/webpack/webpack.config.js rename to src/webpack/webpack.config.client.js index ded4132f7..87859f4c7 100644 --- a/src/webpack/webpack.config.js +++ b/src/webpack/webpack.config.client.js @@ -1,13 +1,13 @@ -const webpack = require('webpack'); const webpackMerge = require('webpack-merge'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const FaviconsWebpackPlugin = require('favicons-webpack-plugin'); const PreloadWebpackPlugin = require('preload-webpack-plugin'); const { StatsWriterPlugin } = require('webpack-stats-plugin'); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const path = require('path'); -const { compact, mapValues } = require('lodash'); +const { compact } = require('lodash'); const { createScriptRules } = require('./helpers'); const { @@ -16,7 +16,6 @@ const { publicPath, } = require('./variables'); const { createBaseConfig } = require('./createBaseConfig'); -const { getAppGlobals } = require('./appGlobals'); const common = createBaseConfig(); @@ -25,6 +24,7 @@ const { ifDev, ifPerf, isProd, + isDev, } = require('@hollowverse/utils/helpers/env'); const clientSpecificConfig = { @@ -41,7 +41,27 @@ const clientSpecificConfig = { publicPath, }, + // See https://medium.com/webpack/webpack-4-mode-and-optimization-5423a6bc597a optimization: { + noEmitOnErrors: true, + // Required for debugging in development and for long-term caching in production + namedModules: true, + namedChunks: true, + minimizer: [ + new UglifyJsPlugin({ + parallel: true, + sourceMap: true, + uglifyOptions: { + comments: false, + minimize: true, + safari10: true, // Workaround Safari 10 bugs + compress: { + inline: false, // Buggy + }, + }, + }), + ], + runtimeChunk: true, // See https://gist.github.com/sokra/1522d586b8e5c0f5072d7565c2bee693 @@ -67,6 +87,8 @@ const clientSpecificConfig = { }, }, + devtool: isDev ? 'cheap-module-source-map' : 'source-map', + stats: 'errors-only', // Enforce performance limits for production build if PERF flag is set @@ -117,10 +139,6 @@ const clientSpecificConfig = { include: 'initial', }), - new webpack.DefinePlugin( - mapValues(getAppGlobals(), v => JSON.stringify(v)), - ), - ...ifProd([ // @ts-ignore new StatsWriterPlugin({ diff --git a/src/webpack/webpack.config.server.js b/src/webpack/webpack.config.server.js new file mode 100644 index 000000000..9ff482763 --- /dev/null +++ b/src/webpack/webpack.config.server.js @@ -0,0 +1,67 @@ +const webpack = require('webpack'); +const webpackMerge = require('webpack-merge'); +const slsw = require('serverless-webpack'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); + +const path = require('path'); +const { compact } = require('lodash'); + +const { createScriptRules } = require('./helpers'); +const { createBaseConfig } = require('./createBaseConfig'); + +const common = createBaseConfig(); + +const serverSpecificConfig = { + entry: slsw.lib.entries, + target: 'node', + node: { + __dirname: true, + }, + + devtool: false, + + externals: ['express', 'http-proxy-middleware'], + + optimization: { + minimizer: [ + new UglifyJsPlugin({ + uglifyOptions: { + keep_classnames: true, + compress: { + inline: false, + }, + }, + }), + ], + }, + + output: { + libraryTarget: 'commonjs', + path: path.resolve(__dirname, '.webpack'), + filename: '[name].js', + }, + + stats: 'minimal', + + module: { + rules: compact([ + // JavaScript and TypeScript + ...createScriptRules({ isNode: true }), + ]), + }, + + resolve: { + modules: [path.join(__dirname, '..')], + }, + + plugins: compact([ + new webpack.IgnorePlugin(/^electron$/), + new webpack.IgnorePlugin(/^yamlparser$/), + + // @ts-ignore + new CopyWebpackPlugin([{ from: 'dist', to: 'dist' }]), + ]), +}; + +module.exports = webpackMerge(common, serverSpecificConfig); diff --git a/yarn.lock b/yarn.lock index 9c54738e7..accf49238 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1586,6 +1586,19 @@ archiver@^1.1.0: walkdir "^0.0.11" zip-stream "^1.1.0" +archiver@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.1.tgz#ff662b4a78201494a3ee544d3a33fe7496509ebc" + dependencies: + archiver-utils "^1.3.0" + async "^2.0.0" + buffer-crc32 "^0.2.1" + glob "^7.0.0" + lodash "^4.8.0" + readable-stream "^2.0.0" + tar-stream "^1.5.0" + zip-stream "^1.2.0" + are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" @@ -2287,16 +2300,6 @@ babel-plugin-minify-type-constructors@^0.4.0: dependencies: babel-helper-is-void-0 "^0.4.0" -babel-plugin-module-resolver@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz#881cf67e3d4b8400d5eaaefc1be44d2dc1fe404f" - dependencies: - find-babel-config "^1.1.0" - glob "^7.1.2" - pkg-up "^2.0.0" - reselect "^3.0.1" - resolve "^1.4.0" - babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -3097,23 +3100,7 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.2.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^2.3.0: +braces@^2.2.2, braces@^2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: @@ -4092,6 +4079,19 @@ copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" +copy-webpack-plugin@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.2.tgz#d53444a8fea2912d806e78937390ddd7e632ee5c" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + globby "^7.1.1" + is-glob "^4.0.0" + loader-utils "^1.1.0" + minimatch "^3.0.4" + p-limit "^1.0.0" + serialize-javascript "^1.4.0" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -5700,20 +5700,7 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extglob@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.2.tgz#3290f46208db1b2e8eb8be0c94ed9e6ad80edbe2" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extglob@^2.0.4: +extglob@^2.0.2, extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" dependencies: @@ -5924,12 +5911,12 @@ filesize@^3.3.0, filesize@^3.5.11: resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" @@ -5966,13 +5953,6 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" -find-babel-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355" - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -6467,7 +6447,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^7.0.0: +globby@^7.0.0, globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" dependencies: @@ -7801,12 +7781,6 @@ is-observable@^0.2.0: dependencies: symbol-observable "^0.2.2" -is-odd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088" - dependencies: - is-number "^3.0.0" - is-odd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" @@ -8820,7 +8794,7 @@ json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" -json5@^0.5.0, json5@^0.5.1: +json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -9545,6 +9519,10 @@ math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" @@ -9691,7 +9669,7 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.4, micromatch@^3.1.9: +micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" dependencies: @@ -9709,24 +9687,6 @@ micromatch@^3.1.4, micromatch@^3.1.9: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.8.tgz#5c8caa008de588eebb395e8c0ad12c128f25fff1" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -9950,16 +9910,16 @@ nan@^2.9.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" nanomatch@^1.2.1: - version "1.2.6" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.6.tgz#f27233e97c34a8706b7e781a4bc611c957a81625" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^1.0.0" - kind-of "^5.0.2" + is-windows "^1.0.2" + kind-of "^6.0.2" object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" @@ -10583,6 +10543,12 @@ p-lazy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" +p-limit@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -10620,6 +10586,10 @@ p-timeout@^2.0.1: dependencies: p-finally "^1.0.0" +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -10915,12 +10885,6 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - dependencies: - find-up "^2.1.0" - platform@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd" @@ -11561,12 +11525,13 @@ ramda@^0.24.1: version "0.24.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" +randomatic@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" randombytes@^2.0.0, randombytes@^2.0.1: version "2.0.5" @@ -12771,6 +12736,10 @@ serverless-content-encoding@^1.0.20: dependencies: is-number "^4.0.0" +serverless-plugin-scripts@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/serverless-plugin-scripts/-/serverless-plugin-scripts-1.0.2.tgz#21808c3cfd0a1a84e48c0660b0f6f370b5665486" + serverless-plugin-typescript@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/serverless-plugin-typescript/-/serverless-plugin-typescript-1.1.5.tgz#a62ed1f04ea76875c72700b36b8bf95002a8d6a0" @@ -12780,6 +12749,19 @@ serverless-plugin-typescript@^1.1.5: lodash "^4.17.4" typescript "^2.2.2" +serverless-webpack@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/serverless-webpack/-/serverless-webpack-5.2.0.tgz#3ad2de29506ad79a25d0ac8dc3f0a647b4944175" + dependencies: + archiver "^2.1.1" + bluebird "^3.5.1" + fs-extra "^4.0.3" + glob "^7.1.2" + is-builtin-module "^1.0.0" + lodash "^4.17.10" + semver "^5.5.0" + ts-node "^3.2.0" + serverless@^1.26.1: version "1.26.1" resolved "https://registry.yarnpkg.com/serverless/-/serverless-1.26.1.tgz#20037b28ce36ab381d36929081f36b249d126542" @@ -15186,7 +15168,7 @@ zen-observable-ts@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.4.4.tgz#c244c71eaebef79a985ccf9895bc90307a6e9712" -zip-stream@^1.1.0: +zip-stream@^1.1.0, zip-stream@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04" dependencies: From 2457e9176adedcaac9183fd17c86a0b68344b488 Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 09:20:52 +0300 Subject: [PATCH 2/7] Externalize aws-sdk, helmet --- src/webpack/webpack.config.server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/webpack/webpack.config.server.js b/src/webpack/webpack.config.server.js index 9ff482763..d6c4413ac 100644 --- a/src/webpack/webpack.config.server.js +++ b/src/webpack/webpack.config.server.js @@ -21,7 +21,7 @@ const serverSpecificConfig = { devtool: false, - externals: ['express', 'http-proxy-middleware'], + externals: ['express', 'http-proxy-middleware', 'helmet', 'aws-sdk'], optimization: { minimizer: [ From 5f80159f9401054473f3c3d503d2e1200823a1ae Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 09:22:01 +0300 Subject: [PATCH 3/7] Restore build commands --- deploy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.js b/deploy.js index 104d8a2c8..36bd335ca 100644 --- a/deploy.js +++ b/deploy.js @@ -15,7 +15,7 @@ const isPullRequest = IS_PULL_REQUEST !== 'false'; const whitelistedBranches = ['master', 'beta', 'internal']; async function main() { - const buildCommands = []; + const buildCommands = ['yarn test', 'yarn coverage/report', 'yarn build']; const deploymentCommands = [ `NODE_ENV=production serverless deploy --stage ${BRANCH} --aws-s3-accelerate`, ]; From a4dec4325b1b360cb131f7542631692055298cce Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 09:22:20 +0300 Subject: [PATCH 4/7] Run copy-defs before packaging --- serverless.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless.yml b/serverless.yml index b66935d86..875dd0c5b 100644 --- a/serverless.yml +++ b/serverless.yml @@ -10,7 +10,7 @@ plugins: custom: scripts: hooks: - 'before:package:createDeploymentArtifacts': yarn app/build + 'before:package:createDeploymentArtifacts': yarn run-s copy-defs app/build webpack: packager: 'yarn' From b8c388787b9a0d587a7529b98556dca06b14dcc2 Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 09:30:07 +0300 Subject: [PATCH 5/7] Remove old build command --- deploy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.js b/deploy.js index 36bd335ca..1a961ec9d 100644 --- a/deploy.js +++ b/deploy.js @@ -15,7 +15,7 @@ const isPullRequest = IS_PULL_REQUEST !== 'false'; const whitelistedBranches = ['master', 'beta', 'internal']; async function main() { - const buildCommands = ['yarn test', 'yarn coverage/report', 'yarn build']; + const buildCommands = ['yarn test', 'yarn coverage/report']; const deploymentCommands = [ `NODE_ENV=production serverless deploy --stage ${BRANCH} --aws-s3-accelerate`, ]; From f6fa087b2e7913564b8eb93e88e6297717ccc9cc Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 09:44:00 +0300 Subject: [PATCH 6/7] Externalize encoding, keyv --- src/webpack/webpack.config.server.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/webpack/webpack.config.server.js b/src/webpack/webpack.config.server.js index d6c4413ac..e3955170f 100644 --- a/src/webpack/webpack.config.server.js +++ b/src/webpack/webpack.config.server.js @@ -21,7 +21,14 @@ const serverSpecificConfig = { devtool: false, - externals: ['express', 'http-proxy-middleware', 'helmet', 'aws-sdk'], + externals: [ + 'express', + 'http-proxy-middleware', + 'helmet', + 'aws-sdk', + 'encoding', + 'keyv', + ], optimization: { minimizer: [ From 92e56cae8998e78048c1ed4d047a01d31346a3fb Mon Sep 17 00:00:00 2001 From: Muhammad Fawwaz Orabi Date: Sun, 9 Sep 2018 09:52:55 +0300 Subject: [PATCH 7/7] Revert "Externalize encoding, keyv" This reverts commit f6fa087b2e7913564b8eb93e88e6297717ccc9cc. --- src/webpack/webpack.config.server.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/webpack/webpack.config.server.js b/src/webpack/webpack.config.server.js index e3955170f..d6c4413ac 100644 --- a/src/webpack/webpack.config.server.js +++ b/src/webpack/webpack.config.server.js @@ -21,14 +21,7 @@ const serverSpecificConfig = { devtool: false, - externals: [ - 'express', - 'http-proxy-middleware', - 'helmet', - 'aws-sdk', - 'encoding', - 'keyv', - ], + externals: ['express', 'http-proxy-middleware', 'helmet', 'aws-sdk'], optimization: { minimizer: [