1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | Object.defineProperty(exports, "__esModule", { value: true });
|
16 | const babelCore = require("@babel/core");
|
17 | const babylon = require("babylon");
|
18 | const uuid = require("uuid/v1");
|
19 | const babel_plugin_bare_specifiers_1 = require("./babel-plugin-bare-specifiers");
|
20 | const babel_plugin_dynamic_import_amd_1 = require("./babel-plugin-dynamic-import-amd");
|
21 | const babel_plugin_import_meta_1 = require("./babel-plugin-import-meta");
|
22 | const externalJs = require("./external-js");
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | const babelTransformEs2015 = [
|
35 | require('@babel/plugin-transform-template-literals'),
|
36 | require('@babel/plugin-transform-literals'),
|
37 | require('@babel/plugin-transform-function-name'),
|
38 | require('@babel/plugin-transform-arrow-functions'),
|
39 | require('@babel/plugin-transform-block-scoped-functions'),
|
40 | require('@babel/plugin-transform-classes'),
|
41 | require('@babel/plugin-transform-object-super'),
|
42 | require('@babel/plugin-transform-shorthand-properties'),
|
43 | require('@babel/plugin-transform-duplicate-keys'),
|
44 | require('@babel/plugin-transform-computed-properties'),
|
45 | require('@babel/plugin-transform-for-of'),
|
46 | require('@babel/plugin-transform-sticky-regex'),
|
47 | require('@babel/plugin-transform-unicode-regex'),
|
48 | require('@babel/plugin-transform-spread'),
|
49 | require('@babel/plugin-transform-parameters'),
|
50 | require('@babel/plugin-transform-destructuring'),
|
51 | require('@babel/plugin-transform-block-scoping'),
|
52 | require('@babel/plugin-transform-typeof-symbol'),
|
53 | require('@babel/plugin-transform-instanceof'),
|
54 | [
|
55 | require('@babel/plugin-transform-regenerator'),
|
56 | { async: false, asyncGenerators: false }
|
57 | ],
|
58 | ];
|
59 | const babelTransformEs2016 = [
|
60 | require('@babel/plugin-transform-exponentiation-operator'),
|
61 | ];
|
62 | const babelTransformEs2017 = [
|
63 | require('@babel/plugin-transform-async-to-generator'),
|
64 | ];
|
65 | const babelTransformEs2018 = [
|
66 | require('@babel/plugin-proposal-object-rest-spread'),
|
67 | require('@babel/plugin-proposal-async-generator-functions'),
|
68 | ];
|
69 |
|
70 | const babelExternalHelpersPlugin = require('@babel/plugin-external-helpers');
|
71 | const babelTransformModulesAmd = [
|
72 | babel_plugin_dynamic_import_amd_1.dynamicImportAmd,
|
73 | babel_plugin_import_meta_1.rewriteImportMeta,
|
74 | require('@babel/plugin-transform-modules-amd'),
|
75 | ];
|
76 |
|
77 |
|
78 |
|
79 |
|
80 | const babelSyntaxPlugins = [
|
81 |
|
82 |
|
83 | require('@babel/plugin-syntax-object-rest-spread'),
|
84 | require('@babel/plugin-syntax-async-generators'),
|
85 |
|
86 |
|
87 | require('@babel/plugin-syntax-dynamic-import'),
|
88 | require('@babel/plugin-syntax-import-meta'),
|
89 | ];
|
90 | const babelPresetMinify = require('babel-preset-minify')({}, {
|
91 |
|
92 |
|
93 | builtIns: false,
|
94 |
|
95 |
|
96 |
|
97 | evaluate: false,
|
98 |
|
99 | simplifyComparisons: false,
|
100 |
|
101 |
|
102 | deadcode: false,
|
103 |
|
104 |
|
105 | removeUndefined: false,
|
106 |
|
107 |
|
108 | simplify: false,
|
109 |
|
110 | mangle: false,
|
111 | });
|
112 |
|
113 |
|
114 |
|
115 | function jsTransform(js, options) {
|
116 |
|
117 |
|
118 |
|
119 | let doBabelTransform = false;
|
120 |
|
121 |
|
122 |
|
123 | const plugins = [...babelSyntaxPlugins];
|
124 | const presets = [];
|
125 | if (options.externalHelpers) {
|
126 | plugins.push(babelExternalHelpersPlugin);
|
127 | }
|
128 | if (options.minify) {
|
129 | doBabelTransform = true;
|
130 |
|
131 | presets.push(babelPresetMinify);
|
132 | }
|
133 | if (options.compile === true || options.compile === 'es5') {
|
134 | doBabelTransform = true;
|
135 | plugins.push(...babelTransformEs2015);
|
136 | plugins.push(...babelTransformEs2016);
|
137 | plugins.push(...babelTransformEs2017);
|
138 | plugins.push(...babelTransformEs2018);
|
139 | }
|
140 | else if (options.compile === 'es2015') {
|
141 | doBabelTransform = true;
|
142 | plugins.push(...babelTransformEs2016);
|
143 | plugins.push(...babelTransformEs2017);
|
144 | plugins.push(...babelTransformEs2018);
|
145 | }
|
146 | else if (options.compile === 'es2016') {
|
147 | doBabelTransform = true;
|
148 | plugins.push(...babelTransformEs2017);
|
149 | plugins.push(...babelTransformEs2018);
|
150 | }
|
151 | else if (options.compile === 'es2017') {
|
152 | doBabelTransform = true;
|
153 | plugins.push(...babelTransformEs2018);
|
154 | }
|
155 | if (options.moduleResolution === 'node') {
|
156 | if (!options.filePath) {
|
157 | throw new Error('Cannot perform node module resolution without filePath.');
|
158 | }
|
159 | doBabelTransform = true;
|
160 | plugins.push(babel_plugin_bare_specifiers_1.resolveBareSpecifiers(options.filePath, !!options.isComponentRequest, options.packageName, options.componentDir, options.rootDir));
|
161 | }
|
162 |
|
163 |
|
164 | let transformModulesToAmd = options.transformModulesToAmd;
|
165 | if (transformModulesToAmd === true) {
|
166 | doBabelTransform = true;
|
167 | }
|
168 | const maybeDoBabelTransform = doBabelTransform || transformModulesToAmd === 'auto';
|
169 | if (maybeDoBabelTransform) {
|
170 | let ast;
|
171 | try {
|
172 | ast = babylon.parse(js, {
|
173 |
|
174 |
|
175 | sourceType: transformModulesToAmd === 'auto' ? 'unambiguous' :
|
176 | 'module',
|
177 | plugins: [
|
178 | 'asyncGenerators',
|
179 | 'dynamicImport',
|
180 |
|
181 | 'importMeta',
|
182 | 'objectRestSpread',
|
183 | ],
|
184 | });
|
185 | }
|
186 | catch (e) {
|
187 | if (options.softSyntaxError && e.constructor.name === 'SyntaxError') {
|
188 | console.error('ERROR [polymer-build]: failed to parse JavaScript' +
|
189 | (options.filePath ? ` (${options.filePath}):` : ':'), e);
|
190 | return js;
|
191 | }
|
192 | else {
|
193 | throw e;
|
194 | }
|
195 | }
|
196 | if (transformModulesToAmd === 'auto' &&
|
197 | ast.program.sourceType === 'module') {
|
198 | transformModulesToAmd = true;
|
199 | }
|
200 | if (transformModulesToAmd) {
|
201 | doBabelTransform = true;
|
202 | plugins.push(...babelTransformModulesAmd);
|
203 | }
|
204 | if (doBabelTransform) {
|
205 | const result = babelCore.transformFromAst(ast, js, { presets, plugins });
|
206 | if (result.code === undefined) {
|
207 | throw new Error('Babel transform failed: resulting code was undefined.');
|
208 | }
|
209 | js = result.code;
|
210 | if (!options.externalHelpers && options.compile === 'es5' &&
|
211 | js.includes('regeneratorRuntime')) {
|
212 | js = externalJs.getRegeneratorRuntime() + js;
|
213 | }
|
214 | }
|
215 | }
|
216 | js = replaceTemplateObjectNames(js);
|
217 | return js;
|
218 | }
|
219 | exports.jsTransform = jsTransform;
|
220 |
|
221 |
|
222 |
|
223 |
|
224 |
|
225 |
|
226 |
|
227 | function replaceTemplateObjectNames(js) {
|
228 |
|
229 |
|
230 |
|
231 |
|
232 |
|
233 |
|
234 |
|
235 |
|
236 |
|
237 | const searchValueRegex = /(_templateObject\d*\b)/g;
|
238 |
|
239 |
|
240 |
|
241 |
|
242 |
|
243 |
|
244 |
|
245 | const uniqueId = uuid().replace(/-/g, '');
|
246 | const replaceValue = `$1_${uniqueId}`;
|
247 |
|
248 |
|
249 |
|
250 | return js.replace(searchValueRegex, replaceValue);
|
251 | }
|
252 |
|
\ | No newline at end of file |