1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _babelGenerator = require('babel-generator');
|
8 |
|
9 | var _babelGenerator2 = _interopRequireDefault(_babelGenerator);
|
10 |
|
11 | var _babelTraverse = require('babel-traverse');
|
12 |
|
13 | var _babelTraverse2 = _interopRequireDefault(_babelTraverse);
|
14 |
|
15 | var _babelTemplate = require('babel-template');
|
16 |
|
17 | var _babelTemplate2 = _interopRequireDefault(_babelTemplate);
|
18 |
|
19 | var _babelTypes = require('babel-types');
|
20 |
|
21 | var _injectionTemplate = require('./injection-template');
|
22 |
|
23 | var _injectionTemplate2 = _interopRequireDefault(_injectionTemplate);
|
24 |
|
25 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
26 |
|
27 | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | exports.default = function (ast) {
|
38 | let globals = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
|
39 |
|
40 | ast.deprecations = [];
|
41 |
|
42 | if (Object.keys(globals).length === 0) {
|
43 | return ast;
|
44 | }
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | (0, _babelTraverse2.default)(ast, {
|
53 | MemberExpression: function MemberExpression(path) {
|
54 | const isGlobalLegacyReference = Object.keys(globals).some(key => path.matchesPattern(`this.${ key }`));
|
55 | if (isGlobalLegacyReference) {
|
56 | const previous = (0, _babelGenerator2.default)(path.node).code.split('.').slice(1);
|
57 | const replaced = ['global'].concat(_toConsumableArray(previous)).join('.');
|
58 |
|
59 | const pos = path.node.loc.start;
|
60 | ast.deprecations.push({
|
61 | key: previous[0],
|
62 | type: 'globalContextAccess',
|
63 | line: pos.line,
|
64 | column: pos.column,
|
65 | alternative: replaced
|
66 | });
|
67 | path.replaceWith((0, _babelTypes.identifier)(replaced));
|
68 | }
|
69 | }
|
70 | });
|
71 |
|
72 | if (ast.hasGlobals) {
|
73 | return ast;
|
74 | }
|
75 |
|
76 | ast.hasGlobals = true;
|
77 |
|
78 |
|
79 |
|
80 | (0, _babelTraverse2.default)(ast, {
|
81 | Program: {
|
82 | exit: function exit(path) {
|
83 | const IDENTIFIER = path.scope.generateUidIdentifier('injection');
|
84 |
|
85 | const INJECTION = (0, _babelTemplate2.default)(`var ${ IDENTIFIER.name } = ${ JSON.stringify(globals) };`)();
|
86 |
|
87 | const injection = (0, _injectionTemplate2.default)({
|
88 | IDENTIFIER: IDENTIFIER,
|
89 | INJECTION: INJECTION
|
90 | });
|
91 |
|
92 | path.unshiftContainer('body', injection);
|
93 | }
|
94 | }
|
95 | });
|
96 |
|
97 | return ast;
|
98 | };
|
99 |
|
100 | module.exports = exports['default']; |
\ | No newline at end of file |