cozy-labs/cozy-desktop

View on GitHub
core/utils/modules_stubs.js

Summary

Maintainability
A
0 mins
Test Coverage
// Stub Module loading using the cache to return fake modules when required
// See https://github.com/nodejs/node/blob/b54504c1d53796e02967e2c6c0a48416e64cf4e1/lib/internal/modules/cjs/loader.js#L928-L929

const { Module } = require('module')
const path = require('path')

const COZY_LOGGER_KEY = path.join(
  __dirname,
  '..',
  '..',
  'node_modules',
  'cozy-logger',
  'src',
  'index.js'
)

const stubbedModuleFilenames = new Map()

const originalResolver = Module._resolveFilename
Module._resolveFilename = (request, parent, isMain) => {
  if (stubbedModuleFilenames.has(request)) {
    return stubbedModuleFilenames.get(request)
  }

  return originalResolver(request, parent, isMain)
}

const stubModule = (name, key, exports) => {
  if (process.env.DEBUG || process.env.TESTDEBUG) {
    // eslint-disable-next-line no-console
    console.log(`Stubbing module ${name} (${key})`)
  }

  const m = new Module(key)
  m.exports = exports
  m.loaded = true

  Module._cache[key] = m
  stubbedModuleFilenames.set(name, key)
}

const initialize = () => {
  stubModule('cozy-logger', COZY_LOGGER_KEY, {
    default: () => {},
    addFilter: () => {},
    setNoRetry: () => {},
    setLevel: () => {},
    namespace: () => {}
  })
}

module.exports = {
  initialize
}