1 | const Program = require('./js-elements/Program')
|
2 | const SourceBuffer = require('./SourceBuffer')
|
3 | const ASTTransformer = require('./ASTTransformer')
|
4 |
|
5 | class JSTranspiler {
|
6 | constructor (opts = {}) {
|
7 | this.filename = opts.filename
|
8 | this.featureConf = opts.features
|
9 | }
|
10 |
|
11 | transpile (ast) {
|
12 | try {
|
13 | const astTransformer = new ASTTransformer(this.featureConf)
|
14 | astTransformer.load('js-transformations')
|
15 |
|
16 | const tast = astTransformer.transform(ast)
|
17 | const jse = new Program(tast, this.featureConf)
|
18 |
|
19 | const buffer = new SourceBuffer()
|
20 | jse.compile(buffer)
|
21 | buffer.createLocationMap()
|
22 |
|
23 | const source = buffer.toString()
|
24 | return source.replace(/\s*$/, '\n')
|
25 | } catch (err) {
|
26 | if (this.filename) {
|
27 | err.message += ` in file ${this.filename}`
|
28 | }
|
29 |
|
30 | throw err
|
31 | }
|
32 | }
|
33 | }
|
34 |
|
35 | module.exports = JSTranspiler
|