UNPKG

2.71 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _parser = require("@babel/parser");
9
10var _default = function _default(code) {
11 var scope = {};
12 var result = {};
13
14 var removeFromResult = function removeFromResult(_ref) {
15 var key = _ref.key,
16 type = _ref.type,
17 value = _ref.value;
18
19 switch (type) {
20 case 'ImportDefault':
21 delete result[key].ImportDefault;
22 break;
23
24 case 'ImportNamespace':
25 delete result[key].ImportNamespace;
26 break;
27
28 case 'Import':
29 delete result[key].Import[value];
30 break;
31
32 default:
33 break;
34 }
35 };
36
37 var addToScope = function addToScope(_ref2) {
38 var name = _ref2.name,
39 key = _ref2.key,
40 type = _ref2.type,
41 value = _ref2.value;
42 if (scope[name]) removeFromResult(scope[name]);
43 scope[name] = {
44 name: name,
45 type: type,
46 key: key,
47 value: value
48 };
49 };
50
51 (0, _parser.parse)(Array.isArray(code) ? code.join('\n') : code, {
52 sourceType: 'module'
53 }).program.body.filter(function (item) {
54 return item.type === 'ImportDeclaration';
55 }).forEach(function (item) {
56 var key = item.source.value;
57 if (!result[key]) result[key] = {};
58 if (!result[key].Import) result[key].Import = {};
59 item.specifiers.forEach(function (specifier) {
60 // eslint-disable-next-line prefer-destructuring
61 var name = specifier.local.name;
62
63 if (specifier.type === 'ImportDefaultSpecifier') {
64 addToScope({
65 name: name,
66 key: key,
67 type: 'ImportDefault'
68 });
69 result[key].ImportDefault = name;
70 } else if (specifier.type === 'ImportNamespaceSpecifier') {
71 addToScope({
72 name: name,
73 key: key,
74 type: 'ImportNamespace'
75 });
76 result[key].ImportNamespace = name;
77 } else if (specifier.type === 'ImportSpecifier') {
78 addToScope({
79 name: name,
80 key: key,
81 type: 'Import',
82 value: specifier.imported.name
83 });
84 result[key].Import[specifier.imported.name] = name;
85 } else {
86 // eslint-disable-next-line no-console
87 console.warn("Unhandled import specifier - ".concat(JSON.stringify(specifier, null, 2)));
88 }
89 });
90 });
91 Object.keys(result).forEach(function (key) {
92 if (!Object.values(result[key].Import).length) {
93 delete result[key].Import;
94 }
95
96 if (!(result[key].ImportDefault || result[key].ImportNamespace || result[key].Import)) {
97 delete result[key];
98 }
99 });
100 return result;
101};
102
103exports.default = _default;
104//# sourceMappingURL=resolve-scope-info.js.map
\No newline at end of file