1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = void 0;
|
7 |
|
8 | var _parser = require("@babel/parser");
|
9 |
|
10 | var _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 |
|
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 |
|
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 |
|
103 | exports.default = _default;
|
104 |
|
\ | No newline at end of file |