static replaceInModuleSource()

in packages/extract-svg-sprite-webpack-plugin/lib/utils/replacer.js [81:132]


  static replaceInModuleSource(module, replacements, compilation) {
    if (module.type === MINI_EXTRACT_MODULE_TYPE) {
      replacements.forEach(({ token, replaceTo }) => {
        if (module.content.indexOf(token) < 0) {
          return;
        }

        const regExp = new RegExp(token, 'g');

        module.content = module.content.replace(regExp, replaceTo);
      });
      return module;
    }

    const source = Replacer.getModuleReplaceSource(module, compilation);

    if (!source) {
      return module;
    }

    const originalSourceContent = module.originalSource().source();

    replacements.forEach(({ token, replaceTo }) => {
      const indexes = Replacer.getAllStringOccurrences(
        originalSourceContent,
        token
      );

      indexes.forEach(idx => {
        const start = idx[0];
        const end = idx[1] - 1;

        /**
         * source.replacements in webpack <= 4
         * source._replacements in webpack 5
         */
        const sourceReplacements = source.replacements || source._replacements;

        const alreadyHasReplacement = sourceReplacements.find(
          r => r[0] === start && r[1] === end && r[2] === replaceTo
        );

        if (alreadyHasReplacement) {
          return;
        }

        source.replace(start, end, replaceTo);
      });
    });

    return module;
  }