@dockfries/chardetng
Version:
Simple charset detector, powered by chardetng and napi-rs.
2 lines (1 loc) • 5.79 kB
JavaScript
const{existsSync,readFileSync}=require("fs"),{join}=require("path"),{platform,arch}=process;let nativeBinding=null,localFileExisted=!1,loadError=null;function isMusl(){if(!process.report||typeof process.report.getReport!="function")try{const e=require("child_process").execSync("which ldd").toString().trim();return readFileSync(e,"utf8").includes("musl")}catch{return!0}else{const{glibcVersionRuntime:e}=process.report.getReport().header;return!e}}switch(platform){case"android":switch(arch){case"arm64":localFileExisted=existsSync(join(__dirname,"chardetng.android-arm64.node"));try{localFileExisted?nativeBinding=require("./chardetng.android-arm64.node"):nativeBinding=require("@dockfries/chardetng-android-arm64")}catch(e){loadError=e}break;case"arm":localFileExisted=existsSync(join(__dirname,"chardetng.android-arm-eabi.node"));try{localFileExisted?nativeBinding=require("./chardetng.android-arm-eabi.node"):nativeBinding=require("@dockfries/chardetng-android-arm-eabi")}catch(e){loadError=e}break;default:throw new Error(`Unsupported architecture on Android ${arch}`)}break;case"win32":switch(arch){case"x64":localFileExisted=existsSync(join(__dirname,"chardetng.win32-x64-msvc.node"));try{localFileExisted?nativeBinding=require("./chardetng.win32-x64-msvc.node"):nativeBinding=require("@dockfries/chardetng-win32-x64-msvc")}catch(e){loadError=e}break;case"ia32":localFileExisted=existsSync(join(__dirname,"chardetng.win32-ia32-msvc.node"));try{localFileExisted?nativeBinding=require("./chardetng.win32-ia32-msvc.node"):nativeBinding=require("@dockfries/chardetng-win32-ia32-msvc")}catch(e){loadError=e}break;case"arm64":localFileExisted=existsSync(join(__dirname,"chardetng.win32-arm64-msvc.node"));try{localFileExisted?nativeBinding=require("./chardetng.win32-arm64-msvc.node"):nativeBinding=require("@dockfries/chardetng-win32-arm64-msvc")}catch(e){loadError=e}break;default:throw new Error(`Unsupported architecture on Windows: ${arch}`)}break;case"darwin":localFileExisted=existsSync(join(__dirname,"chardetng.darwin-universal.node"));try{localFileExisted?nativeBinding=require("./chardetng.darwin-universal.node"):nativeBinding=require("@dockfries/chardetng-darwin-universal");break}catch{}switch(arch){case"x64":localFileExisted=existsSync(join(__dirname,"chardetng.darwin-x64.node"));try{localFileExisted?nativeBinding=require("./chardetng.darwin-x64.node"):nativeBinding=require("@dockfries/chardetng-darwin-x64")}catch(e){loadError=e}break;case"arm64":localFileExisted=existsSync(join(__dirname,"chardetng.darwin-arm64.node"));try{localFileExisted?nativeBinding=require("./chardetng.darwin-arm64.node"):nativeBinding=require("@dockfries/chardetng-darwin-arm64")}catch(e){loadError=e}break;default:throw new Error(`Unsupported architecture on macOS: ${arch}`)}break;case"freebsd":if(arch!=="x64")throw new Error(`Unsupported architecture on FreeBSD: ${arch}`);localFileExisted=existsSync(join(__dirname,"chardetng.freebsd-x64.node"));try{localFileExisted?nativeBinding=require("./chardetng.freebsd-x64.node"):nativeBinding=require("@dockfries/chardetng-freebsd-x64")}catch(e){loadError=e}break;case"linux":switch(arch){case"x64":if(isMusl()){localFileExisted=existsSync(join(__dirname,"chardetng.linux-x64-musl.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-x64-musl.node"):nativeBinding=require("@dockfries/chardetng-linux-x64-musl")}catch(e){loadError=e}}else{localFileExisted=existsSync(join(__dirname,"chardetng.linux-x64-gnu.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-x64-gnu.node"):nativeBinding=require("@dockfries/chardetng-linux-x64-gnu")}catch(e){loadError=e}}break;case"arm64":if(isMusl()){localFileExisted=existsSync(join(__dirname,"chardetng.linux-arm64-musl.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-arm64-musl.node"):nativeBinding=require("@dockfries/chardetng-linux-arm64-musl")}catch(e){loadError=e}}else{localFileExisted=existsSync(join(__dirname,"chardetng.linux-arm64-gnu.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-arm64-gnu.node"):nativeBinding=require("@dockfries/chardetng-linux-arm64-gnu")}catch(e){loadError=e}}break;case"arm":if(isMusl()){localFileExisted=existsSync(join(__dirname,"chardetng.linux-arm-musleabihf.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-arm-musleabihf.node"):nativeBinding=require("@dockfries/chardetng-linux-arm-musleabihf")}catch(e){loadError=e}}else{localFileExisted=existsSync(join(__dirname,"chardetng.linux-arm-gnueabihf.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-arm-gnueabihf.node"):nativeBinding=require("@dockfries/chardetng-linux-arm-gnueabihf")}catch(e){loadError=e}}break;case"riscv64":if(isMusl()){localFileExisted=existsSync(join(__dirname,"chardetng.linux-riscv64-musl.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-riscv64-musl.node"):nativeBinding=require("@dockfries/chardetng-linux-riscv64-musl")}catch(e){loadError=e}}else{localFileExisted=existsSync(join(__dirname,"chardetng.linux-riscv64-gnu.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-riscv64-gnu.node"):nativeBinding=require("@dockfries/chardetng-linux-riscv64-gnu")}catch(e){loadError=e}}break;case"s390x":localFileExisted=existsSync(join(__dirname,"chardetng.linux-s390x-gnu.node"));try{localFileExisted?nativeBinding=require("./chardetng.linux-s390x-gnu.node"):nativeBinding=require("@dockfries/chardetng-linux-s390x-gnu")}catch(e){loadError=e}break;default:throw new Error(`Unsupported architecture on Linux: ${arch}`)}break;default:throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)}if(!nativeBinding)throw loadError||new Error("Failed to load native binding");const{detect}=nativeBinding;module.exports.detect=detect;