Skip to content

Commit 6507495

Browse files
register: compress sourcemap storage (#1065)
1 parent 594a25a commit 6507495

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

framework/register/index.js

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,47 @@
11
/* eslint-disable node/no-deprecated-api */
2-
const map = {};
2+
const zlib = require('zlib');
3+
const sourceMapArg = process.env.LOADER_SOURCEMAP_ONLY
4+
|| process.argv.find((i) => i.startsWith('--sourcemap-only='))
5+
|| '';
6+
const sourceMapOnly = sourceMapArg ? sourceMapArg.split('=')[1].split(',').filter((i) => i) : false;
7+
const map = new Proxy(Object.create(null), {
8+
get(target, key) {
9+
if (!target[key]) return null;
10+
return zlib.inflateSync(target[key]).toString();
11+
},
12+
set(target, key, value) {
13+
if (typeof value !== 'string') return false;
14+
if (sourceMapOnly && key.includes('node_modules') && !sourceMapOnly.some((entry) => key.includes(entry))) {
15+
return true;
16+
}
17+
target[key] = zlib.deflateSync(value, { level: 9 });
18+
return true;
19+
},
20+
});
321
require('source-map-support').install({
422
handleUncaughtExceptions: false,
523
environment: 'node',
624
retrieveSourceMap(file) {
7-
if (map[file]) {
8-
return {
9-
url: file,
10-
map: map[file],
11-
};
12-
}
13-
return null;
25+
const data = map[file];
26+
if (!data) return null;
27+
return {
28+
url: file,
29+
map: data,
30+
};
1431
},
1532
});
1633
const path = require('path');
1734
const vm = require('vm');
1835
const fs = require('fs');
1936
const esbuild = require('esbuild');
2037

21-
process.env.NODE_APP_INSTANCE ||= '0';
2238
const major = +process.version.split('.')[0].split('v')[1];
2339
const minor = +process.version.split('.')[1];
40+
if (major < 18) {
41+
console.error('NodeJS <18 is no longer supported');
42+
process.exit(1);
43+
}
44+
process.env.NODE_APP_INSTANCE ||= '0';
2445

2546
const remove = [
2647
// by esbuild
@@ -70,12 +91,13 @@ require.extensions['.js'] = function loader(module, filename) {
7091
return module._compile(transform(filename), filename);
7192
}
7293
try {
73-
const content = fs.readFileSync(filename, 'utf-8');
94+
let content = fs.readFileSync(filename, 'utf-8');
7495
const lastLine = content.trim().split('\n').pop();
7596
if (lastLine.startsWith('//# sourceMappingURL=data:application/json;base64,')) {
7697
const info = lastLine.split('//# sourceMappingURL=data:application/json;base64,')[1];
77-
const payload = JSON.parse(Buffer.from(info, 'base64').toString());
98+
const payload = Buffer.from(info, 'base64').toString();
7899
map[filename] = payload;
100+
content = content.split('//# sourceMappingURL')[0];
79101
}
80102
return module._compile(content, filename);
81103
} catch (e) { // ESM

0 commit comments

Comments
 (0)