All files index.js

100% Statements 27/27
83.33% Branches 5/6
100% Functions 10/10
100% Lines 22/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 431x   1x 1x     1x     2x 1x     2x 103x     1x 9x   6x 6x 5x 4x   5x     3x     6x 3x     1x   6x 6x 6x      
const request = require('NeteaseCloudMusicApi/util/request');
 
const { join } = require('path');
const { existsSync, readdirSync } = require('fs');
 
// eslint-disable-next-line import/no-extraneous-dependencies
require('request').debug = false;
 
// 可用模块分析
const j = path => join(__dirname, `../${path}/NeteaseCloudMusicApi/module`);
const [modulePath = ''] = [
  j('..'),
  j('node_modules')
].filter(p => existsSync(p));
const modules = readdirSync(modulePath).filter(p => p.endsWith('.js')).map(p => p.replace(/.js$/, ''));
 
// 加载模块方法
const makeFn = (module) => {
  if (modules.includes(module)) {
    // eslint-disable-next-line global-require, import/no-dynamic-require
    const mod = require(join(modulePath, module));
    return (data = {}) => {
      if (!data.cookie) {
        Object.assign(data, { cookie: {} });
      }
      return mod(data, request);
    };
  }
  return () => undefined;
};
 
const makeProxy = module => new Proxy({}, {
  get: (_, subModule) => makeFn(`${module}_${subModule}`)
});
 
module.exports = new Proxy({}, {
  get: (_, property) => {
    const fn = makeFn(property);
    Object.setPrototypeOf(fn, makeProxy(property));
    return fn;
  }
});