function isValid()

in fusion-cli/build/load-fusionrc.js [54:186]


function isValid(config, silent) {
  if (!(typeof config === 'object' && config !== null)) {
    throw new Error('.fusionrc.js must export an object');
  }

  if (
    !Object.keys(config).every(key =>
      [
        'babel',
        'splitChunks',
        'modernBuildOnly',
        'defaultImportSideEffects',
        'assumeNoImportSideEffects',
        'experimentalCompile',
        'experimentalTransformTest',
        'experimentalBundleTest',
        'nodeBuiltins',
        'jest',
        'brotli',
        'zopfli', // TODO: Remove redundant zopfli option
        'gzip',
      ].includes(key)
    )
  ) {
    if (config.experimentalSideEffectsTest) {
      throw new Error(
        `experimentalSideEffectsTest has been removed. Use assumeNoImportSideEffects instead.`
      );
    }
    throw new Error(`Invalid property in .fusionrc.js`);
  }

  if (config.experimentalCompile && config.experimentalTransformTest) {
    throw new Error(
      `Cannot use both experimentalCompile and experimentalTransformTest in .fusionrc.js`
    );
  }

  if (config.experimentalCompile && config.experimentalBundleTest) {
    throw new Error(
      `Cannot use both experimentalCompile and experimentalBundleTest in .fusionrc.js`
    );
  }

  if (config.experimentalCompile) {
    if (!silent) {
      console.log(
        'WARNING: experimentalCompile is deprecated. Use experimentalTransformTest instead.'
      );
    }

    config.experimentalTransformTest = (file, defaults) => {
      return 'all';
    };
    delete config.experimentalCompile;
  }

  if (
    config.babel &&
    !Object.keys(config.babel).every(el => ['plugins', 'presets'].includes(el))
  ) {
    throw new Error(
      `Only "plugins" and "presets" are supported in fusionrc.js babel config`
    );
  }

  if (
    !(
      config.assumeNoImportSideEffects === false ||
      config.assumeNoImportSideEffects === true ||
      config.assumeNoImportSideEffects === void 0
    )
  ) {
    throw new Error(
      'assumeNoImportSideEffects must be true, false, or undefined in fusionrc.js config'
    );
  }

  if (
    !(
      config.zopfli === false ||
      config.zopfli === true ||
      config.zopfli === void 0
    )
  ) {
    throw new Error('zopfli must be true, false, or undefined in fusionrc.js');
  }

  if (config.zopfli === false || config.zopfli === true) {
    console.warn('`zopfli` option has been deprecated. Use `gzip` instead');
  }

  if (
    !(config.gzip === false || config.gzip === true || config.gzip === void 0)
  ) {
    throw new Error('gzip must be true, false, or undefined in fusionrc.js');
  }

  if (
    !(
      config.brotli === false ||
      config.brotli === true ||
      config.brotli === void 0
    )
  ) {
    throw new Error('brotli must be true, false, or undefined in fusionrc.js');
  }

  if (
    !(
      config.defaultImportSideEffects === void 0 ||
      config.defaultImportSideEffects === true ||
      config.defaultImportSideEffects === false ||
      (Array.isArray(config.defaultImportSideEffects) &&
        config.defaultImportSideEffects.every(item => typeof item === 'string'))
    )
  ) {
    throw new Error(
      'defaultImportSideEffects must be true, false, or an array of strings in fusionrc.js'
    );
  }

  if (
    config.defaultImportSideEffects !== void 0 &&
    config.assumeNoImportSideEffects !== void 0
  ) {
    throw new Error(
      `Cannot use both defaultImportSideEffects and assumeNoImportSideEffects in .fusionrc.js`
    );
  }

  return true;
}