UNPKG

plotly-icons

Version:
75 lines (55 loc) 2.99 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.getModulePath = getModulePath; var _babelTemplate = require('babel-template'); var _babelTemplate2 = _interopRequireDefault(_babelTemplate); var _babelPluginSyntaxDynamicImport = require('babel-plugin-syntax-dynamic-import'); var _babelPluginSyntaxDynamicImport2 = _interopRequireDefault(_babelPluginSyntaxDynamicImport); var _path = require('path'); var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Based on https://github.com/airbnb/babel-plugin-dynamic-import-webpack // We've added support for SSR with this version var TYPE_IMPORT = 'Import'; /* Added "typeof require.resolveWeak !== 'function'" check instead of "typeof window === 'undefined'" to support dynamic impports in non-webpack environments. "require.resolveWeak" and "require.ensure" are webpack specific methods. They would fail in Node/CommonJS environments. */ var buildImport = function buildImport(args) { return (0, _babelTemplate2.default)('\n (\n new (require(\'next/dynamic\').SameLoopPromise)((resolve, reject) => {\n const weakId = require.resolveWeak(SOURCE)\n try {\n const weakModule = __webpack_require__(weakId)\n return resolve(weakModule)\n } catch (err) {}\n\n require.ensure([], (require) => {\n try {\n let m = require(SOURCE)\n m.__webpackChunkName = \'' + args.name + '\'\n resolve(m)\n } catch(error) {\n reject(error)\n }\n }, \'chunks/' + args.name + '\');\n })\n )\n'); }; function getModulePath(sourceFilename, moduleName) { // resolve only if it's a local module var modulePath = moduleName[0] === '.' ? (0, _path.resolve)((0, _path.dirname)(sourceFilename), moduleName) : moduleName; var cleanedModulePath = modulePath.replace(/(index){0,1}\.js$/, '') // remove .js, index.js .replace(/[/\\]$/, ''); // remove end slash return cleanedModulePath; } exports.default = function () { return { inherits: _babelPluginSyntaxDynamicImport2.default, visitor: { CallExpression: function CallExpression(path, state) { if (path.node.callee.type === TYPE_IMPORT) { var moduleName = path.node.arguments[0].value; var sourceFilename = state.file.opts.filename; var modulePath = getModulePath(sourceFilename, moduleName); var modulePathHash = _crypto2.default.createHash('md5').update(modulePath).digest('hex'); var relativeModulePath = modulePath.replace('' + process.cwd() + _path.sep, ''); var name = relativeModulePath.replace(/[^\w]/g, '_') + '_' + modulePathHash; var newImport = buildImport({ name: name })({ SOURCE: path.node.arguments }); path.replaceWith(newImport); } } } }; };