mdx-scoped-runtime
Version:
@mdx-js/runtime wrapper that handles full MDX syntax
104 lines (91 loc) • 2.71 kB
JavaScript
;
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