UNPKG

2.1 kBJavaScriptView Raw
1const { FirescriptParser } = require('firescript-parser')
2const { FirescriptLinter } = require('firescript-linter')
3const { JavascriptTranspiler } = require('firescript-transpiler')
4
5const path = require('path')
6const SuperFS = require('superfs')
7
8class FirescriptBuilder {
9 constructor (opts) {
10 this.files = new Map()
11 this.srcDir = opts.srcDir
12 this.destDir = opts.destDir
13 this.conf = opts.conf
14 }
15
16 addFile (filename, source) {
17 this.files.set(filename, {
18 source
19 })
20 }
21
22 async parse () {
23 for (const [filename, item] of this.files) {
24 // console.log('Parse', filename)
25 const parser = new FirescriptParser()
26 item.fst = await parser.parse(item.source)
27 }
28 }
29
30 async lint () {
31 for (const [filename, item] of this.files) {
32 // console.log('Lint', filename)
33 const linter = new FirescriptLinter()
34 item.lint = linter.lint(item.fst)
35 }
36 }
37
38 async transpile () {
39 for (const [filename, item] of this.files) {
40 console.log('Transpile', filename)
41 const transpiler = new JavascriptTranspiler({
42 features: this.conf.features
43 })
44 item.transpiled = transpiler.transpile(item.fst)
45 item.destFile = path.join(this.destDir, path.relative(this.srcDir, filename).replace(/\.fire$/, '.js'))
46 }
47 }
48
49 async writefiles () {
50 for (const [filename, item] of this.files) {
51 // item.destFile = path.join(this.destDir, path.relative(this.srcDir, filename))
52 console.log('Write file:', filename, item, item.destFile)
53 await SuperFS.writeFile(item.destFile, item.transpiled, { encoding: 'utf8' })
54 }
55 }
56
57 async build (srcDir, distDir) {
58 await this.parse()
59 await this.lint()
60 await this.transpile()
61 await this.writefiles()
62 }
63
64 async copy (srcPatterns, srcDir, distDir) {
65 const files = srcPatterns.lenght ? await SuperFS.readDir(srcDir, {
66 filter: srcPatterns,
67 recursive: true,
68 ignore: [
69 'node_modules',
70 '.git'
71 ]
72 }) : []
73
74 console.log('Files:', files)
75 }
76}
77
78module.exports.FirescriptBuilder = FirescriptBuilder