UNPKG

mdx-scoped-runtime

Version:
104 lines (91 loc) 2.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _parser = require("@babel/parser"); var _default = function _default(code) { var scope = {}; var result = {}; var removeFromResult = function removeFromResult(_ref) { var key = _ref.key, type = _ref.type, value = _ref.value; switch (type) { case 'ImportDefault': delete result[key].ImportDefault; break; case 'ImportNamespace': delete result[key].ImportNamespace; break; case 'Import': delete result[key].Import[value]; break; default: break; } }; var addToScope = function addToScope(_ref2) { var name = _ref2.name, key = _ref2.key, type = _ref2.type, value = _ref2.value; if (scope[name]) removeFromResult(scope[name]); scope[name] = { name: name, type: type, key: key, value: value }; }; (0, _parser.parse)(Array.isArray(code) ? code.join('\n') : code, { sourceType: 'module' }).program.body.filter(function (item) { return item.type === 'ImportDeclaration'; }).forEach(function (item) { var key = item.source.value; if (!result[key]) result[key] = {}; if (!result[key].Import) result[key].Import = {}; item.specifiers.forEach(function (specifier) { // eslint-disable-next-line prefer-destructuring var name = specifier.local.name; if (specifier.type === 'ImportDefaultSpecifier') { addToScope({ name: name, key: key, type: 'ImportDefault' }); result[key].ImportDefault = name; } else if (specifier.type === 'ImportNamespaceSpecifier') { addToScope({ name: name, key: key, type: 'ImportNamespace' }); result[key].ImportNamespace = name; } else if (specifier.type === 'ImportSpecifier') { addToScope({ name: name, key: key, type: 'Import', value: specifier.imported.name }); result[key].Import[specifier.imported.name] = name; } else { // eslint-disable-next-line no-console console.warn("Unhandled import specifier - ".concat(JSON.stringify(specifier, null, 2))); } }); }); Object.keys(result).forEach(function (key) { if (!Object.values(result[key].Import).length) { delete result[key].Import; } if (!(result[key].ImportDefault || result[key].ImportNamespace || result[key].Import)) { delete result[key]; } }); return result; }; exports.default = _default; //# sourceMappingURL=resolve-scope-info.js.map