text: "use strict";
  Object.defineProperty(exports, "__esModule", {
      value: true
  });
  // Map of a feature module to the file it belongs in the next package.
  const FEATURE_MODULE_MAP = new Map([
      [
          'next/image',
          '/next/image.js'
      ],
      [
          'next/script',
          '/next/script.js'
      ],
      [
          'next/dynamic',
          '/next/dynamic.js'
      ], 
  ]);
  // List of build features used in webpack configuration
  const BUILD_FEATURES = [
      'swcLoader',
      'swcMinify',
      'swcRelay',
      'swcStyledComponents',
      'swcReactRemoveProperties',
      'swcExperimentalDecorators',
      'swcRemoveConsole',
      'swcImportSource',
      'swcEmotion',
      'swc/target/x86_64-apple-darwin',
      'swc/target/x86_64-unknown-linux-gnu',
      'swc/target/x86_64-pc-windows-msvc',
      'swc/target/i686-pc-windows-msvc',
      'swc/target/aarch64-unknown-linux-gnu',
      'swc/target/armv7-unknown-linux-gnueabihf',
      'swc/target/aarch64-apple-darwin',
      'swc/target/aarch64-linux-android',
      'swc/target/arm-linux-androideabi',
      'swc/target/x86_64-unknown-freebsd',
      'swc/target/x86_64-unknown-linux-musl',
      'swc/target/aarch64-unknown-linux-musl',
      'swc/target/aarch64-pc-windows-msvc', 
  ];
  class TelemetryPlugin {
      // Build feature usage is on/off and is known before the build starts
      constructor(buildFeaturesMap){
          this.usageTracker = new Map();
          for (const featureName of BUILD_FEATURES){
              this.usageTracker.set(featureName, {
                  featureName,
                  invocationCount: buildFeaturesMap.get(featureName) ? 1 : 0
              });
          }
          for (const featureName1 of FEATURE_MODULE_MAP.keys()){
              this.usageTracker.set(featureName1, {
                  featureName: featureName1,
                  invocationCount: 0
              });
          }
      }
      apply(compiler) {
          compiler.hooks.make.tapAsync(TelemetryPlugin.name, async (compilation, callback)=>{
              compilation.hooks.finishModules.tapAsync(TelemetryPlugin.name, async (modules, modulesFinish)=>{
                  for (const module of modules){
                      const feature = findFeatureInModule(module);
                      if (!feature) {
                          continue;
                      }
                      const connections = compilation.moduleGraph.getIncomingConnections(module);
                      const originModules = findUniqueOriginModulesInConnections(connections);
                      this.usageTracker.get(feature).invocationCount = originModules.size;
                  }
                  modulesFinish();
              });
              callback();
          });
      }
      usages() {
          return [
              ...this.usageTracker.values()
          ];
      }
  }
  exports.TelemetryPlugin = TelemetryPlugin;
  /**
   * Determine if there is a feature of interest in the specified 'module'.
   */ function findFeatureInModule(module) {
      if (module.type !== 'javascript/auto') {
          return;
      }
      for (const [feature, path] of FEATURE_MODULE_MAP){
          if (module.identifier().replace(/\\/g, '/').endsWith(path)) {
              return feature;
          }
      }
  }
  /**
   * Find unique origin modules in the specified 'connections', which possibly
   * contains more than one connection for a module due to different types of
   * dependency.
   */ function findUniqueOriginModulesInConnections(connections) {
      const originModules = new Set();
      for (const connection of connections){
          if (!originModules.has(connection.originModule)) {
              originModules.add(connection.originModule);
          }
      }
      return originModules;
  }
  
  //# sourceMappingURL=telemetry-plugin.js.map