Skip to content

Commit adc47a1

Browse files
committed
feat: 🎸 add babel transformer
Issues: Closes #108
1 parent 2707faf commit adc47a1

File tree

6 files changed

+109
-3
lines changed

6 files changed

+109
-3
lines changed

Diff for: ‎package.json

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
}
5050
},
5151
"devDependencies": {
52+
"@babel/core": "^7.8.4",
53+
"@babel/preset-env": "^7.8.4",
5254
"@types/jest": "^25.1.1",
5355
"@types/node": "^13.7.0",
5456
"@types/stylus": "^0.48.32",

Diff for: ‎src/autoProcess.ts

+32-2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type AutoPreprocessOptions = {
4949
less?: TransformerOptions<Options.Less>;
5050
stylus?: TransformerOptions<Options.Stylus>;
5151
postcss?: TransformerOptions<Options.Postcss>;
52+
babel?: TransformerOptions<Options.Babel>;
5253
coffeescript?: TransformerOptions<Options.Coffeescript>;
5354
pug?: TransformerOptions<Options.Pug>;
5455
globalStyle?: TransformerOptions<Options.Typescript>;
@@ -197,14 +198,43 @@ export function autoPreprocess(
197198

198199
return { code, map, dependencies };
199200
},
200-
script: scriptTransformer,
201+
async script({ content, attributes, filename }) {
202+
const transformResult = await scriptTransformer({
203+
content,
204+
attributes,
205+
filename,
206+
});
207+
208+
if (transformResult == null) return;
209+
210+
let { code, map, dependencies, diagnostics } = transformResult;
211+
212+
if (transformers.babel) {
213+
const transformed = await runTransformer('babel', transformers.babel, {
214+
content: code,
215+
map,
216+
filename,
217+
});
218+
219+
code = transformed.code;
220+
map = transformed.map;
221+
dependencies = concat(dependencies, transformed.dependencies);
222+
diagnostics = concat(diagnostics, transformed.diagnostics);
223+
}
224+
225+
return { code, map, dependencies, diagnostics };
226+
},
201227
async style({ content, attributes, filename }) {
202-
let { code, map, dependencies } = await cssTransformer({
228+
const transformResult = await cssTransformer({
203229
content,
204230
attributes,
205231
filename,
206232
});
207233

234+
if (transformResult == null) return;
235+
236+
let { code, map, dependencies } = transformResult;
237+
208238
if (transformers.postcss) {
209239
const transformed = await runTransformer(
210240
'postcss',

Diff for: ‎src/transformers/babel.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { transformAsync } from '@babel/core';
2+
3+
import { Transformer, Options } from '../typings';
4+
5+
const transformer: Transformer<Options.Babel> = async ({
6+
content,
7+
filename,
8+
options,
9+
map = undefined,
10+
}) => {
11+
const { code, map: sourcemap } = await transformAsync(content, {
12+
...options,
13+
inputSourceMap: map as any,
14+
sourceType: 'module',
15+
// istanbul ignore next
16+
sourceMaps: options.sourceMaps ? true : false,
17+
filename,
18+
minified: false,
19+
ast: false,
20+
code: true,
21+
});
22+
23+
return {
24+
code,
25+
map: sourcemap,
26+
};
27+
};
28+
29+
export default transformer;

Diff for: ‎src/typings/options.ts

+9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import postcss from 'postcss';
22
import { Options as SassOptions } from 'sass';
33
import { Options as PugOptions } from 'pug';
44
import { CompilerOptions } from 'typescript';
5+
import { TransformOptions as BabelOptions } from '@babel/core';
56

67
export interface Coffeescript {
78
inlineMap?: boolean;
@@ -16,6 +17,14 @@ export interface Postcss extends postcss.ProcessOptions {
1617
configFilePath?: string;
1718
}
1819

20+
export interface Babel extends BabelOptions {
21+
sourceType: 'module';
22+
minified: false;
23+
ast: false;
24+
code: true;
25+
sourceMaps: boolean;
26+
}
27+
1928
export type Pug = PugOptions;
2029
export type Sass = Omit<SassOptions, 'file'>;
2130
// from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/less/index.d.ts#L80

Diff for: ‎test/autoProcess/autoProcess.test.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import getAutoPreprocess from '../../src';
22
import { getLanguage } from '../../src/utils';
3-
43
import {
54
preprocess,
65
getFixtureContent,

Diff for: ‎test/transformers/babel.test.ts

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import getAutoPreprocess from '../../src';
2+
import { preprocess } from '../utils';
3+
4+
const BABEL_CONFIG = {
5+
presets: [
6+
[
7+
'@babel/preset-env',
8+
{
9+
loose: true,
10+
modules: false,
11+
targets: {
12+
esmodules: true,
13+
},
14+
},
15+
],
16+
],
17+
};
18+
19+
describe('transformer - babel', () => {
20+
it('transpile with babel', async () => {
21+
const template = `<script>
22+
let foo = {}
23+
$: bar = foo?.b ?? 120
24+
</script>`;
25+
const opts = getAutoPreprocess({
26+
babel: BABEL_CONFIG,
27+
});
28+
const preprocessed = await preprocess(template, opts);
29+
expect(preprocessed.code).toMatchInlineSnapshot(`
30+
"<script>var _ref;
31+
32+
var foo = {};
33+
34+
$: bar = (_ref = foo == null ? void 0 : foo.b) != null ? _ref : 120;</script>"
35+
`);
36+
});
37+
});

0 commit comments

Comments
 (0)