-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
49 lines (43 loc) · 1.35 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const path = require('path')
const MinifyPlugin = require('babel-minify-webpack-plugin')
const { ConcatSource, ReplaceSource } = require('webpack-sources')
function ToSwiftPlugin (options) {
this.options = options
}
ToSwiftPlugin.prototype.apply = function (compiler) {
compiler.hooks.compilation.tap({ name: 'ToSwift' }, (compilation) => {
compilation.hooks.optimizeChunkAssets.tapAsync({ name: 'ToSwift' }, (chunks, done) => {
for (const chunk of chunks) {
for (const fileName of chunk.files) {
const source = compilation.assets[fileName].source()
const escaped = new ReplaceSource(compilation.assets[fileName], fileName)
for (let idx = source.lastIndexOf('\\'); idx !== -1; idx = source.lastIndexOf('\\', idx - 1)) {
escaped.insert(idx, '\\')
}
compilation.assets[fileName] = new ConcatSource(`internal let ${this.options.variableName} = """\n`, escaped, '\n"""\n')
}
}
done()
})
})
}
module.exports = {
mode: 'production',
entry: path.join(__dirname, 'index.js'),
output: {
path: path.join(__dirname, 'Sources'),
filename: 'JSSource.swift'
},
optimization: {
minimize: true
},
plugins: [
new MinifyPlugin({}, {
test: /\.swift$/,
comments: false
}),
new ToSwiftPlugin({
variableName: 'libraryCode'
})
]
}