/
rollup.workers.config.ts
117 lines (113 loc) · 4.18 KB
/
rollup.workers.config.ts
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import type { RollupOptions } from 'rollup';
import path from 'path';
import glob from 'glob';
import nodeResolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import alias from '@rollup/plugin-alias';
import { wasm } from '@rollup/plugin-wasm';
import esbuild from 'rollup-plugin-esbuild';
import copy from 'rollup-plugin-copy';
import log from './LogPlugin';
import native from './NativePlugin';
import devSpeedup from './DevSpeedupPlugin';
import builtinModules from 'builtin-modules/static';
import { dependencies } from '../package.json';
const license = require('rollup-plugin-license');
const resolve = nodeResolve({ extensions: ['.js', '.ts'], browser: false, exportConditions: ['import', 'module', 'node', 'require', 'files', 'default'] });
const workerEntries = glob.sync(path.join(__dirname, '../src/workers') + '/*/index.ts').map(i => i.replace(/\\/g, '/'));
const externalPackages = [
'electron',
'electron/main',
'electron/common',
'electron/renderer',
'tesseract.js-core',
...builtinModules,
...Object.keys(dependencies)
];
export default (mode = 'production') => ({
plugins: [
log({
include: [
path.join(__dirname, '../src/workers/*.*').replace(/\\/g, '/'),
path.join(__dirname, '../src/workers/**/*.*').replace(/\\/g, '/')
],
loggerPath: '@main/logger',
logFunction: { logger: 'logger' },
disableLog: mode === 'production'
}),
mode === 'development' ? devSpeedup() : null,
alias({
customResolver: resolve as any,
entries: {
'@main': path.join(__dirname, '../src/main'),
'@render': path.join(__dirname, '../src/render'),
'@static': path.join(__dirname, '../static'),
'@assets': path.join(__dirname, '../assets')
}
}),
esbuild({
minify: mode === 'production',
sourceMap: mode !== 'production',
target: 'es2020',
define: {
'import.meta.env.DEV': JSON.stringify(mode !== 'production'),
'import.meta.env.PROD': JSON.stringify(mode === 'production')
}
}),
resolve,
json(),
wasm(),
native(),
commonjs(),
mode === 'production'
? license({
thirdParty: {
includePrivate: false,
output: {
file: path.join(__dirname, '../dist/license.dependencies.workers.json'),
template(dependencies: any) {
return JSON.stringify(dependencies);
}
}
}
})
: null,
mode === 'production'
? copy({
targets: [{
src: [
'node_modules/tesseract.js-core/tesseract-core.wasm',
'node_modules/tesseract.js-core/tesseract-core-simd.wasm'
],
dest: path.join(__dirname, '../dist/workers')
}]
})
: null
],
input: workerEntries,
output: {
dir: path.join(__dirname, '../dist/workers'),
entryFileNames: (chunkInfo) => {
const workerBase = path.join(__dirname, '../src/workers').replace(/\\/g, '/');
const facadeModuleId = (chunkInfo.facadeModuleId ?? '').replace(/\\/g, '/');
if (facadeModuleId.startsWith(workerBase)) {
const reg = new RegExp(`^${workerBase}/(.*?)/`);
const workerName = (reg.exec(facadeModuleId) ?? [])[1];
if (workerName) {
return `${workerName}.js`;
}
}
return 'index.js';
},
format: 'commonjs',
sourcemap: mode !== 'production'
},
external: externalPackages,
onwarn(e) {
if (e.code !== 'CIRCULAR_DEPENDENCY' && e.id && !/node_modules/.test(e.id)) {
console.warn(e.id);
console.warn(e.message);
}
}
} as RollupOptions);