forked from databricks/databricks-sql-nodejs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlz4.ts
More file actions
42 lines (34 loc) · 1.23 KB
/
lz4.ts
File metadata and controls
42 lines (34 loc) · 1.23 KB
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
import type LZ4Namespace from 'lz4';
type LZ4Module = typeof LZ4Namespace;
function tryLoadLZ4Module(): LZ4Module | undefined {
try {
return require('lz4'); // eslint-disable-line global-require
} catch (err) {
if (!(err instanceof Error) || !('code' in err)) {
// eslint-disable-next-line no-console
console.warn('Unexpected error loading LZ4 module: Invalid error object', err);
return undefined;
}
if (err.code === 'MODULE_NOT_FOUND') {
return undefined;
}
if (err.code === 'ERR_DLOPEN_FAILED') {
// eslint-disable-next-line no-console
console.warn('LZ4 native module failed to load: Architecture or version mismatch', err);
return undefined;
}
// If it's not a known error, return undefined
// eslint-disable-next-line no-console
console.warn('Unknown error loading LZ4 module: Unhandled error code', err);
return undefined;
}
}
// The null is already tried resolving that failed
let resolvedModule: LZ4Module | null | undefined;
function getResolvedModule() {
if (resolvedModule === undefined) {
resolvedModule = tryLoadLZ4Module() ?? null;
}
return resolvedModule === null ? undefined : resolvedModule;
}
export default getResolvedModule;