hummingbird-me/kitsu-web

View on GitHub
ember-cli-build.js

Summary

Maintainability
B
5 hrs
Test Coverage
const EmberApp = require('ember-cli/lib/broccoli/ember-app');
const PostCSSFlex = require('postcss-flexbugs-fixes');
const Autoprefixer = require('autoprefixer');
const svgoUniqueIds = require('svgo-plugin-unify-ids');
const sass = require('sass');
const targets = require('./config/targets');

const environment = EmberApp.env();
const IS_PROD = environment === 'production';
const IS_TEST = environment === 'test';
const IS_DEV = environment === 'development';

module.exports = function(defaults) {
  const app = new EmberApp(defaults, {
    browseryStats: IS_DEV,
    hinting: IS_TEST,
    tests: IS_TEST,

    babel: {
      plugins: ['@babel/plugin-proposal-object-rest-spread']
    },

    'ember-cli-babel': {
      includePolyfill: IS_PROD
    },

    'ember-cli-password-strength': {
      bundleZxcvbn: false
    },

    autoprefixer: {
      sourcemaps: false
    },

    sourcemaps: {
      enabled: IS_PROD,
      extensions: ['js']
    },

    outputPaths: {
      app: {
        css: {
          'light-theme': '/assets/light.css',
          'dark-theme': '/assets/dark.css'
        }
      }
    },

    sassOptions: {
      implementation: sass,
      includePaths: ['node_modules/bootstrap/scss']
    },

    postcssOptions: {
      compile: { enabled: false },
      filter: {
        enabled: true,
        plugins: [
          { module: PostCSSFlex },
          { module: Autoprefixer,
            options: { browsers: targets.browsers }
          }
        ]
      }
    },

    fingerprint: {
      generateAssetMap: true,
      fingerprintAssetMap: true,
      extensions: ['js', 'css', 'png', 'jpg', 'gif', 'map', 'json', 'webmanifest'],
      exclude: [
        'OneSignalSDKWorker.js',
        'OneSignalSDKUpdaterWorker.js',
        'apple-app-site-association',
        'hulu-embed-frame.html'
      ]
    },

    svgJar: {
      persist: false,
      optimizer: {
        plugins: [
          { removeTitle: true },
          { removeDesc: true },
          { removeXMLNS: true },
          { uniqueIds: svgoUniqueIds }
        ]
      }
    },

    'ember-cli-workbox': {
      enabled: true,
      autoRegister: true,
      debug: environment !== 'production'
    },

    workbox: {
      swDest: '/sw.js',
      skipWaiting: true,
      clientsClaim: true,
      sourcemap: false,
      navigateFallback: '/index.html',
      navigationPreload: false,
      runtimeCaching: [
        {
          urlPattern: /^https:\/\/fonts\.gstatic\.com/,
          handler: 'CacheFirst',
          options: {
            cacheName: 'google-fonts'
          }
        }
      ]
    },

    // assets
    nodeAssets: {
      autosize: {
        srcDir: 'dist',
        import: ['autosize.js']
      },
      clipboard: {
        srcDir: 'dist',
        import: ['clipboard.js']
      },
      cropperjs: {
        srcDir: 'dist',
        import: ['cropper.css', 'cropper.js']
      },
      flickity: {
        srcDir: 'dist',
        import: ['flickity.css']
      },
      getstream: {
        srcDir: 'dist/js',
        import: ['getstream.js']
      },
      hoverintent: {
        srcDir: 'dist',
        import: ['hoverintent.min.js']
      }
    },

    emberApolloClient: {
      keepGraphqlFileExtension: false
    },

    // Disable auto importing of manually imported packages listed below
    autoImport: {
      exclude: ['moment', 'moment-timezone', 'preferred-locale', 'algoliasearch', 'text-clipper']
    }
  });

  // Work around for Ember 2.16.2 and Sourcemaps in production
  app.import('node_modules/zxcvbn/dist/zxcvbn.js.map', { destDir: '.' });
  app.import('node_modules/preferred-locale/lib/index.browser.js', {
    using: [
      { transformation: 'amd', as: 'preferred-locale' }
    ]
  });
  app.import('node_modules/algoliasearch/dist/algoliasearchLite.min.js', {
    using: [
      { transformation: 'amd', as: 'algoliasearch' }
    ]
  });
  app.import('node_modules/text-clipper/dist/index.js', {
    using: [
      { transformation: 'cjs', as: 'text-clipper' }
    ]
  });

  return app.toTree();
};