async function runTransformation()

in fusion-cli/build/loaders/babel-worker.js [33:126]


async function runTransformation(
  source /*: string */,
  inputSourceMap /*: Object */,
  cacheKey /*: string */,
  filename /*: string */,
  loaderOptions /*: Object*/,
  rootContext /*: Object*/,
  sourceMap /*: Object*/
) {
  let newOptions = {
    ...getBabelConfigFromCache(
      rootContext,
      loaderOptions.configCacheKey,
      loaderOptions.babelConfigData
    ),
    overrides: [],
  };

  if (loaderOptions.overrides != undefined) {
    for (let i = 0; i < loaderOptions.overrides.length; i++) {
      let override = getBabelConfigFromCache(
        rootContext,
        loaderOptions.overrideCacheKey,
        loaderOptions.overrides[i]
      );
      //$FlowFixMe
      override.test = modulePath => {
        if (!JS_EXT_PATTERN.test(modulePath)) {
          return false;
        }

        const experimentalTransformTest = getExperimentalTransformTest(
          rootContext
        );
        const defaultTransform = getTransformDefault(modulePath, rootContext);
        const transform = experimentalTransformTest
          ? experimentalTransformTest(modulePath, defaultTransform)
          : defaultTransform;
        if (transform === 'none' || transform === 'spec') {
          return false;
        } else if (transform === 'all') {
          return true;
        } else {
          throw new Error(
            `Unexpected value from experimentalTransformTest ${transform}. Expected 'spec' | 'all' | 'none'`
          );
        }
      };
      newOptions.overrides.push(override);
    }
  }

  const config = babel.loadPartialConfig({
    ...newOptions,
    filename,
    sourceRoot: rootContext,
    sourceMap: sourceMap,
    inputSourceMap: inputSourceMap || void 0,
    sourceFileName: relative(rootContext, filename),
  });

  const options = config.options;

  const cacheDir = path.join(
    loaderOptions.dir,
    'node_modules/.fusion_babel-cache'
  );

  const diskCache = getCache(cacheDir);
  const result = await diskCache.get(cacheKey, () => {
    let metadata = {};

    let translationIds = new Set();
    // Add the discovery plugin
    // This only does side effects, so it is ok this doesn't affect cache key
    // This plugin is here because webpack config -> loader options
    // requires serialization. But we want to pass translationsIds directly.
    options.plugins.unshift([TranslationsExtractor, {translationIds}]);

    const transformed = transform(source, options);

    if (translationIds.size > 0) {
      metadata.translationIds = Array.from(translationIds.values());
    }

    if (!transformed) {
      return null;
    }

    return {metadata, ...transformed};
  });

  return result;
}