index.js (7730B)
1 /* tslint:disable */ 2 /* eslint-disable */ 3 /* prettier-ignore */ 4 5 /* auto-generated by NAPI-RS */ 6 7 const { existsSync, readFileSync } = require('fs') 8 const { join } = require('path') 9 10 const { platform, arch } = process 11 12 let nativeBinding = null 13 let localFileExisted = false 14 let loadError = null 15 16 function isMusl() { 17 // For Node 10 18 if (!process.report || typeof process.report.getReport !== 'function') { 19 try { 20 const lddPath = require('child_process').execSync('which ldd').toString().trim() 21 return readFileSync(lddPath, 'utf8').includes('musl') 22 } catch (e) { 23 return true 24 } 25 } else { 26 const { glibcVersionRuntime } = process.report.getReport().header 27 return !glibcVersionRuntime 28 } 29 } 30 31 switch (platform) { 32 case 'android': 33 switch (arch) { 34 case 'arm64': 35 localFileExisted = existsSync(join(__dirname, 'node-yara-rs.android-arm64.node')) 36 try { 37 if (localFileExisted) { 38 nativeBinding = require('./node-yara-rs.android-arm64.node') 39 } else { 40 nativeBinding = require('@node_yara_rs/node-yara-rs-android-arm64') 41 } 42 } catch (e) { 43 loadError = e 44 } 45 break 46 case 'arm': 47 localFileExisted = existsSync(join(__dirname, 'node-yara-rs.android-arm-eabi.node')) 48 try { 49 if (localFileExisted) { 50 nativeBinding = require('./node-yara-rs.android-arm-eabi.node') 51 } else { 52 nativeBinding = require('@node_yara_rs/node-yara-rs-android-arm-eabi') 53 } 54 } catch (e) { 55 loadError = e 56 } 57 break 58 default: 59 throw new Error(`Unsupported architecture on Android ${arch}`) 60 } 61 break 62 case 'win32': 63 switch (arch) { 64 case 'x64': 65 localFileExisted = existsSync( 66 join(__dirname, 'node-yara-rs.win32-x64-msvc.node') 67 ) 68 try { 69 if (localFileExisted) { 70 nativeBinding = require('./node-yara-rs.win32-x64-msvc.node') 71 } else { 72 nativeBinding = require('@node_yara_rs/node-yara-rs-win32-x64-msvc') 73 } 74 } catch (e) { 75 loadError = e 76 } 77 break 78 case 'ia32': 79 localFileExisted = existsSync( 80 join(__dirname, 'node-yara-rs.win32-ia32-msvc.node') 81 ) 82 try { 83 if (localFileExisted) { 84 nativeBinding = require('./node-yara-rs.win32-ia32-msvc.node') 85 } else { 86 nativeBinding = require('@node_yara_rs/node-yara-rs-win32-ia32-msvc') 87 } 88 } catch (e) { 89 loadError = e 90 } 91 break 92 case 'arm64': 93 localFileExisted = existsSync( 94 join(__dirname, 'node-yara-rs.win32-arm64-msvc.node') 95 ) 96 try { 97 if (localFileExisted) { 98 nativeBinding = require('./node-yara-rs.win32-arm64-msvc.node') 99 } else { 100 nativeBinding = require('@node_yara_rs/node-yara-rs-win32-arm64-msvc') 101 } 102 } catch (e) { 103 loadError = e 104 } 105 break 106 default: 107 throw new Error(`Unsupported architecture on Windows: ${arch}`) 108 } 109 break 110 case 'darwin': 111 localFileExisted = existsSync(join(__dirname, 'node-yara-rs.darwin-universal.node')) 112 try { 113 if (localFileExisted) { 114 nativeBinding = require('./node-yara-rs.darwin-universal.node') 115 } else { 116 nativeBinding = require('@node_yara_rs/node-yara-rs-darwin-universal') 117 } 118 break 119 } catch {} 120 switch (arch) { 121 case 'x64': 122 localFileExisted = existsSync(join(__dirname, 'node-yara-rs.darwin-x64.node')) 123 try { 124 if (localFileExisted) { 125 nativeBinding = require('./node-yara-rs.darwin-x64.node') 126 } else { 127 nativeBinding = require('@node_yara_rs/node-yara-rs-darwin-x64') 128 } 129 } catch (e) { 130 loadError = e 131 } 132 break 133 case 'arm64': 134 localFileExisted = existsSync( 135 join(__dirname, 'node-yara-rs.darwin-arm64.node') 136 ) 137 try { 138 if (localFileExisted) { 139 nativeBinding = require('./node-yara-rs.darwin-arm64.node') 140 } else { 141 nativeBinding = require('@node_yara_rs/node-yara-rs-darwin-arm64') 142 } 143 } catch (e) { 144 loadError = e 145 } 146 break 147 default: 148 throw new Error(`Unsupported architecture on macOS: ${arch}`) 149 } 150 break 151 case 'freebsd': 152 if (arch !== 'x64') { 153 throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) 154 } 155 localFileExisted = existsSync(join(__dirname, 'node-yara-rs.freebsd-x64.node')) 156 try { 157 if (localFileExisted) { 158 nativeBinding = require('./node-yara-rs.freebsd-x64.node') 159 } else { 160 nativeBinding = require('@node_yara_rs/node-yara-rs-freebsd-x64') 161 } 162 } catch (e) { 163 loadError = e 164 } 165 break 166 case 'linux': 167 switch (arch) { 168 case 'x64': 169 if (isMusl()) { 170 localFileExisted = existsSync( 171 join(__dirname, 'node-yara-rs.linux-x64-musl.node') 172 ) 173 try { 174 if (localFileExisted) { 175 nativeBinding = require('./node-yara-rs.linux-x64-musl.node') 176 } else { 177 nativeBinding = require('@node_yara_rs/node-yara-rs-linux-x64-musl') 178 } 179 } catch (e) { 180 loadError = e 181 } 182 } else { 183 localFileExisted = existsSync( 184 join(__dirname, 'node-yara-rs.linux-x64-gnu.node') 185 ) 186 try { 187 if (localFileExisted) { 188 nativeBinding = require('./node-yara-rs.linux-x64-gnu.node') 189 } else { 190 nativeBinding = require('@node_yara_rs/node-yara-rs-linux-x64-gnu') 191 } 192 } catch (e) { 193 loadError = e 194 } 195 } 196 break 197 case 'arm64': 198 if (isMusl()) { 199 localFileExisted = existsSync( 200 join(__dirname, 'node-yara-rs.linux-arm64-musl.node') 201 ) 202 try { 203 if (localFileExisted) { 204 nativeBinding = require('./node-yara-rs.linux-arm64-musl.node') 205 } else { 206 nativeBinding = require('@node_yara_rs/node-yara-rs-linux-arm64-musl') 207 } 208 } catch (e) { 209 loadError = e 210 } 211 } else { 212 localFileExisted = existsSync( 213 join(__dirname, 'node-yara-rs.linux-arm64-gnu.node') 214 ) 215 try { 216 if (localFileExisted) { 217 nativeBinding = require('./node-yara-rs.linux-arm64-gnu.node') 218 } else { 219 nativeBinding = require('@node_yara_rs/node-yara-rs-linux-arm64-gnu') 220 } 221 } catch (e) { 222 loadError = e 223 } 224 } 225 break 226 case 'arm': 227 localFileExisted = existsSync( 228 join(__dirname, 'node-yara-rs.linux-arm-gnueabihf.node') 229 ) 230 try { 231 if (localFileExisted) { 232 nativeBinding = require('./node-yara-rs.linux-arm-gnueabihf.node') 233 } else { 234 nativeBinding = require('@node_yara_rs/node-yara-rs-linux-arm-gnueabihf') 235 } 236 } catch (e) { 237 loadError = e 238 } 239 break 240 default: 241 throw new Error(`Unsupported architecture on Linux: ${arch}`) 242 } 243 break 244 default: 245 throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) 246 } 247 248 if (!nativeBinding) { 249 if (loadError) { 250 throw loadError 251 } 252 throw new Error(`Failed to load native binding`) 253 } 254 255 const { YaraCompiler, YaraScanner } = nativeBinding 256 257 module.exports.YaraCompiler = YaraCompiler 258 module.exports.YaraScanner = YaraScanner