UNPKG

storybook-addon-module-mock

Version:

[![](https://img.shields.io/npm/l/storybook-addon-module-mock)](https://www.npmjs.com/package/storybook-addon-module-mock) [![](https://img.shields.io/npm/v/storybook-addon-module-mock)](https://www.npmjs.com/package/storybook-addon-module-mock) [![](http

53 lines (50 loc) 1.83 kB
export class ImportWriterPlugin { options; constructor(options) { this.options = options; } apply(compiler) { compiler.hooks.compilation.tap('ImportWriter', (compilation) => { compilation.mainTemplate.hooks.require.tap('ImportWriter', (source) => { const s = source.replace(/return module\.exports;/g, ` function minimatch(str,pattern) { function escapeRegExp(string) { return string.replace(/[.*+?^\${}()|[\\]\\\\]/g, '\\\\$$&'); } let regexPattern = pattern .split('**').map(part => part.split('*').map(escapeRegExp).join('[^/]*')).join('.*'); let regex = new RegExp('^' + regexPattern + '$$'); return regex.test(str); } const isTarget = (fileName, options) => { if (!options) return true; const { include, exclude } = options; if (!fileName) return true; if ( include && include.some((i) => (i instanceof RegExp ? i.test(fileName) : minimatch(fileName, i))) ) return true; if ( exclude && exclude.some((i) => (i instanceof RegExp ? i.test(fileName) : minimatch(fileName, i))) ) return false; return true; }; if (Object.prototype.toString.call(module.exports) === '[object Module]' && isTarget(moduleId, ${JSON.stringify(this.options)}) ) { class Module { [Symbol.toStringTag] = 'Module'; } Module.prototype.__moduleId__ = moduleId; module.exports = Object.assign(new Module(), module.exports); } return module.exports; `); return s; }); }); } }