notonthehighstreet/breadboard

View on GitHub
lib/getNativeModules.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

const debug = require('debug');
const d = debug('breadboard:setup:nativeModules');
const loadSanitisedNativeModules = (modules, nativeModuleName) => {
  const excludedNativesRegExp = /^internal\/|_|v8\//;

  if (!excludedNativesRegExp.test(nativeModuleName)) {
    modules[nativeModuleName] = nativeModuleName;
  }

  return modules;
};
const excludeSubstitutes = (modules, substitutes) => {
  return modules.filter(module => !substitutes.some(substitute => substitute === module));
};

module.exports = (substitutes) => {
  const natives = excludeSubstitutes(Object.keys(process.binding('natives')), substitutes);

  return new Promise((resolve) => {
    const nativeModules = natives.reduce(loadSanitisedNativeModules, {});

    d('Native modules', Object.keys(nativeModules));

    return resolve(nativeModules);
  });
};