1 |
|
2 | import {
|
3 | transformSync
|
4 | transformFromAst
|
5 | } from '@babel/core'
|
6 |
|
7 | export default (codeOrAst) ->
|
8 |
|
9 | transform =
|
10 | if typeof codeOrAst is 'string'
|
11 | then transformSync
|
12 | else (ast, options) ->
|
13 | transformFromAst ast, ''
|
14 | , options
|
15 |
|
16 | prefixEsNumber = (_Number) ->
|
17 | if typeof _Number is 'number'
|
18 | then "es#{_Number}"
|
19 | else _Number
|
20 |
|
21 |
|
22 |
|
23 | options = {
|
24 | (
|
25 | if ops?.presets?
|
26 | then (
|
27 | if Array.isArray ops.presets
|
28 | then (
|
29 | presets:
|
30 | ops.presets.reduce (r, c) ->
|
31 | [
|
32 | r...
|
33 | [
|
34 | "@babel/preset-#{prefixEsNumber c}"
|
35 | ]
|
36 | ]
|
37 | , []
|
38 | )
|
39 | else (
|
40 | presets: (Object.keys ops.presets).reduce (r, k) ->
|
41 | [
|
42 | r...
|
43 | [
|
44 | "@babel/preset-#{prefixEsNumber k}"
|
45 | (
|
46 | if typeof ops.presets["#{k}"] is 'object'
|
47 | then [ ops.presets["#{k}"] ]
|
48 | else []
|
49 | )...
|
50 | ]
|
51 | ]
|
52 | , []
|
53 | )
|
54 | )
|
55 | else {}
|
56 | )...
|
57 | ( do ->
|
58 | conf = plugins: []
|
59 | flag = false
|
60 |
|
61 |
|
62 | if ops?.runtime?
|
63 | flag = true
|
64 | conf.plugins.push [
|
65 | '@babel/plugin-transform-runtime'
|
66 | moduleName: '@babel/runtime'
|
67 | ]
|
68 |
|
69 |
|
70 | if ops?.regenerator?
|
71 | flag = true
|
72 | conf.plugins.push [
|
73 | '@babel/plugin-transform-regenerator'
|
74 | ]
|
75 |
|
76 |
|
77 | if ops?.spread?
|
78 | flag = true
|
79 | conf.plugins.push [
|
80 | '@babel/plugin-transform-spread'
|
81 | ]
|
82 |
|
83 |
|
84 | if ops?.commonjs?
|
85 | flag = true
|
86 | conf.plugins.push [
|
87 | '@babel/plugin-transform-modules-commonjs'
|
88 | (
|
89 | if typeof ops.commonjs is 'object'
|
90 | then [ ops.commonjs ]
|
91 | else []
|
92 | )...
|
93 | ]
|
94 |
|
95 | if flag is false
|
96 | return {}
|
97 | else
|
98 | return conf
|
99 | )...
|
100 | }
|
101 |
|
102 | es5 = transform codeOrAst
|
103 | , options
|
104 |
|
105 | es5.code
|