|
1 | 1 | /* 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 | +}); |
3 | 21 | require('source-map-support').install({ |
4 | 22 | handleUncaughtExceptions: false, |
5 | 23 | environment: 'node', |
6 | 24 | 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 | + }; |
14 | 31 | }, |
15 | 32 | }); |
16 | 33 | const path = require('path'); |
17 | 34 | const vm = require('vm'); |
18 | 35 | const fs = require('fs'); |
19 | 36 | const esbuild = require('esbuild'); |
20 | 37 |
|
21 | | -process.env.NODE_APP_INSTANCE ||= '0'; |
22 | 38 | const major = +process.version.split('.')[0].split('v')[1]; |
23 | 39 | 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'; |
24 | 45 |
|
25 | 46 | const remove = [ |
26 | 47 | // by esbuild |
@@ -70,12 +91,13 @@ require.extensions['.js'] = function loader(module, filename) { |
70 | 91 | return module._compile(transform(filename), filename); |
71 | 92 | } |
72 | 93 | try { |
73 | | - const content = fs.readFileSync(filename, 'utf-8'); |
| 94 | + let content = fs.readFileSync(filename, 'utf-8'); |
74 | 95 | const lastLine = content.trim().split('\n').pop(); |
75 | 96 | if (lastLine.startsWith('//# sourceMappingURL=data:application/json;base64,')) { |
76 | 97 | 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(); |
78 | 99 | map[filename] = payload; |
| 100 | + content = content.split('//# sourceMappingURL')[0]; |
79 | 101 | } |
80 | 102 | return module._compile(content, filename); |
81 | 103 | } catch (e) { // ESM |
|
0 commit comments