1 |
|
2 |
|
3 | import {generate, babelErrorEnhancer} from '@parcel/babel-ast-utils';
|
4 | import {Transformer} from '@parcel/plugin';
|
5 | import semver from 'semver';
|
6 | import babel7 from './babel7';
|
7 | import {load} from './config';
|
8 |
|
9 | export default (new Transformer({
|
10 | async loadConfig({config, options, logger}) {
|
11 | await load(config, options, logger);
|
12 | },
|
13 |
|
14 | canReuseAST({ast}) {
|
15 | return ast.type === 'babel' && semver.satisfies(ast.version, '^7.0.0');
|
16 | },
|
17 |
|
18 | async transform({asset, config, options}) {
|
19 |
|
20 | asset.invalidateOnEnvChange('BABEL_ENV');
|
21 | asset.invalidateOnEnvChange('NODE_ENV');
|
22 |
|
23 |
|
24 | try {
|
25 | if (config?.config) {
|
26 | if (
|
27 | asset.meta.babelPlugins != null &&
|
28 | Array.isArray(asset.meta.babelPlugins)
|
29 | ) {
|
30 | await babel7(asset, options, config, asset.meta.babelPlugins);
|
31 | } else {
|
32 | await babel7(asset, options, config);
|
33 | }
|
34 | }
|
35 |
|
36 | return [asset];
|
37 | } catch (e) {
|
38 | throw await babelErrorEnhancer(e, asset);
|
39 | }
|
40 | },
|
41 |
|
42 | generate({asset, ast, options}) {
|
43 | return generate({asset, ast, options});
|
44 | },
|
45 | }): Transformer);
|