You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
const esbuild = require('esbuild');
|
|
const fs = require('fs');
|
|
|
|
let transformTimeUsage = 0;
|
|
let transformCount = 0;
|
|
let displayTimeout;
|
|
function transform(filename) {
|
|
const start = new Date();
|
|
const result = esbuild.buildSync({
|
|
entryPoints: [filename],
|
|
sourcemap: 'inline',
|
|
platform: 'node',
|
|
format: 'cjs',
|
|
target: 'node12',
|
|
jsx: 'transform',
|
|
write: false,
|
|
});
|
|
if (result.warnings.length) console.warn(result.warnings);
|
|
transformTimeUsage += new Date().getTime() - start.getTime();
|
|
transformCount++;
|
|
if (displayTimeout) clearTimeout(displayTimeout);
|
|
displayTimeout = setTimeout(() => console.log(`Transformed ${transformCount} files. (${transformTimeUsage}ms)`), 1000);
|
|
return result.outputFiles[0].text;
|
|
}
|
|
require.extensions['.js'] = function loader(module, filename) {
|
|
if (!filename.includes('node_modules') && !filename.includes('postcss.config.js')) {
|
|
return module._compile(transform(filename), filename);
|
|
}
|
|
const content = fs.readFileSync(filename, 'utf-8');
|
|
return module._compile(content, filename);
|
|
};
|
|
const main = require('./main.js');
|
|
|
|
if (!module.parent) main();
|