current commit
260610.2 · lib: add lint rule to enforce use of `kEmptyObject`
'use strict';

const { kEmptyObject } = require('internal/util');
const {
  validateBoolean,
  validateInteger,
  validateInt32,
  validateObject,
} = require('internal/validators');

const {
  kSamplingNoFlags,
  kSamplingForceGC,
  kSamplingIncludeObjectsCollectedByMajorGC,
  kSamplingIncludeObjectsCollectedByMinorGC,
} = internalBinding('v8');

function normalizeHeapProfileOptions(options = kEmptyObject) {
  validateObject(options, 'options');
  const {
    sampleInterval = 512 * 1024,
    stackDepth = 16,
    forceGC = false,
    includeObjectsCollectedByMajorGC = false,
    includeObjectsCollectedByMinorGC = false,
  } = options;

  validateInteger(sampleInterval, 'options.sampleInterval', 1);
  validateInt32(stackDepth, 'options.stackDepth', 0);
  validateBoolean(forceGC, 'options.forceGC');
  validateBoolean(includeObjectsCollectedByMajorGC,
                  'options.includeObjectsCollectedByMajorGC');
  validateBoolean(includeObjectsCollectedByMinorGC,
                  'options.includeObjectsCollectedByMinorGC');

  let flags = kSamplingNoFlags;
  if (forceGC) flags |= kSamplingForceGC;
  if (includeObjectsCollectedByMajorGC) {
    flags |= kSamplingIncludeObjectsCollectedByMajorGC;
  }
  if (includeObjectsCollectedByMinorGC) {
    flags |= kSamplingIncludeObjectsCollectedByMinorGC;
  }

  return { sampleInterval, stackDepth, flags };
}

module.exports = {
  normalizeHeapProfileOptions,
};