@ 261105.16
current
'use strict';

const common = require('../common.js');
const assert = require('assert');
const fixtures = require('../../test/common/fixtures');

const bench = common.createBenchmark(
  main,
  {
    operation: [
      'parse',
      'parse-sectioned',
      'findEntry',
      'findEntry-sectioned',
      'findOrigin',
      'findOrigin-sectioned',
    ],
    n: [1e5],
  },
);

function main({ operation, n }) {
  const { SourceMap } = require('node:module');

  const samplePayload = JSON.parse(
    fixtures.readSync('source-map/no-source.js.map', 'utf8'),
  );
  const sectionedPayload = JSON.parse(
    fixtures.readSync('source-map/disk-index.map', 'utf8'),
  );

  let sourceMap;
  let sourceMapMethod;
  switch (operation) {
    case 'parse':
      bench.start();
      for (let i = 0; i < n; i++) {
        sourceMap = new SourceMap(samplePayload);
      }
      bench.end(n);
      break;

    case 'parse-sectioned':
      bench.start();
      for (let i = 0; i < n; i++) {
        sourceMap = new SourceMap(sectionedPayload);
      }
      bench.end(n);
      break;

    case 'findEntry':
      sourceMap = new SourceMap(samplePayload);
      bench.start();
      for (let i = 0; i < n; i++) {
        sourceMapMethod = sourceMap.findEntry(i, i);
      }
      bench.end(n);
      assert.ok(sourceMapMethod);
      break;

    case 'findEntry-sectioned':
      sourceMap = new SourceMap(sectionedPayload);
      bench.start();
      for (let i = 0; i < n; i++) {
        sourceMapMethod = sourceMap.findEntry(i, i);
      }
      bench.end(n);
      assert.ok(sourceMapMethod);
      break;

    case 'findOrigin':
      sourceMap = new SourceMap(samplePayload);
      bench.start();
      for (let i = 0; i < n; i++) {
        sourceMapMethod = sourceMap.findOrigin(i, i);
      }
      bench.end(n);
      assert.ok(sourceMapMethod);
      break;

    case 'findOrigin-sectioned':
      sourceMap = new SourceMap(sectionedPayload);
      bench.start();
      for (let i = 0; i < n; i++) {
        sourceMapMethod = sourceMap.findOrigin(i, i);
      }
      bench.end(n);
      assert.ok(sourceMapMethod);
      break;

    default:
      throw new Error(`Unknown operation: ${operation}`);
  }
  assert.ok(sourceMap);
}