@mariozechner/clipboard
Advanced tools
+3
-3
@@ -20,4 +20,4 @@ [package] | ||
| # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix | ||
| napi = { version = "2.12.2", default-features = false, features = ["napi4", "tokio_rt"] } | ||
| napi-derive = "2.12.2" | ||
| napi = { version = "3.9.0", default-features = false, features = ["napi4", "tokio_rt", "dyn-symbols"] } | ||
| napi-derive = "3.5.6" | ||
| tokio = "1.36.0" | ||
@@ -42,3 +42,3 @@ | ||
| # Pin to version that works with older Rust in Docker images | ||
| napi-build = "=2.1.3" | ||
| napi-build = "2.3.2" | ||
@@ -45,0 +45,0 @@ [profile.release] |
+34
-20
@@ -1,23 +0,37 @@ | ||
| /* tslint:disable */ | ||
| /* auto-generated by NAPI-RS */ | ||
| /* eslint-disable */ | ||
| export declare function availableFormats(): Array<string> | ||
| /* auto-generated by NAPI-RS */ | ||
| export declare function callThreadsafeFunction(callback: ((err: Error | null, arg: number) => void)): void | ||
| export function availableFormats(): Array<string> | ||
| export function getText(): Promise<string> | ||
| export function setText(text: string): Promise<void> | ||
| export function hasText(): boolean | ||
| export function getImageBinary(): Promise<Array<number>> | ||
| export function getImageBase64(): Promise<string> | ||
| export function setImageBinary(imageBytes: Array<number>): Promise<void> | ||
| export function setImageBase64(base64Str: string): Promise<void> | ||
| export function hasImage(): boolean | ||
| export function getHtml(): Promise<string> | ||
| export function setHtml(html: string): Promise<void> | ||
| export function hasHtml(): boolean | ||
| export function getRtf(): Promise<string> | ||
| export function setRtf(rtf: string): Promise<void> | ||
| export function hasRtf(): boolean | ||
| export function clear(): Promise<void> | ||
| export function watch(): void | ||
| export function callThreadsafeFunction(callback: (...args: any[]) => any): void | ||
| export declare function clear(): Promise<void> | ||
| export declare function getHtml(): Promise<string> | ||
| export declare function getImageBase64(): Promise<string> | ||
| export declare function getImageBinary(): Promise<Array<number>> | ||
| export declare function getRtf(): Promise<string> | ||
| export declare function getText(): Promise<string> | ||
| export declare function hasHtml(): boolean | ||
| export declare function hasImage(): boolean | ||
| export declare function hasRtf(): boolean | ||
| export declare function hasText(): boolean | ||
| export declare function setHtml(html: string): Promise<void> | ||
| export declare function setImageBase64(base64Str: string): Promise<void> | ||
| export declare function setImageBinary(imageBytes: Array<number>): Promise<void> | ||
| export declare function setRtf(rtf: string): Promise<void> | ||
| export declare function setText(text: string): Promise<void> | ||
| export declare function watch(): void |
+545
-256
@@ -1,294 +0,584 @@ | ||
| /* tslint:disable */ | ||
| // prettier-ignore | ||
| /* eslint-disable */ | ||
| /* prettier-ignore */ | ||
| // @ts-nocheck | ||
| /* auto-generated by NAPI-RS */ | ||
| const { existsSync, readFileSync } = require('fs') | ||
| const { join } = require('path') | ||
| const { readFileSync } = require('node:fs') | ||
| let nativeBinding = null | ||
| const loadErrors = [] | ||
| const { platform, arch } = process | ||
| const isMusl = () => { | ||
| let musl = false | ||
| if (process.platform === 'linux') { | ||
| musl = isMuslFromFilesystem() | ||
| if (musl === null) { | ||
| musl = isMuslFromReport() | ||
| } | ||
| if (musl === null) { | ||
| musl = isMuslFromChildProcess() | ||
| } | ||
| } | ||
| return musl | ||
| } | ||
| let nativeBinding = null | ||
| let localFileExisted = false | ||
| let loadError = null | ||
| const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') | ||
| function isMusl() { | ||
| // For Node 10 | ||
| if (!process.report || typeof process.report.getReport !== 'function') { | ||
| try { | ||
| const lddPath = require('child_process').execSync('which ldd').toString().trim() | ||
| return readFileSync(lddPath, 'utf8').includes('musl') | ||
| } catch (e) { | ||
| const isMuslFromFilesystem = () => { | ||
| try { | ||
| return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') | ||
| } catch { | ||
| return null | ||
| } | ||
| } | ||
| const isMuslFromReport = () => { | ||
| let report = null | ||
| if (typeof process.report?.getReport === 'function') { | ||
| process.report.excludeNetwork = true | ||
| report = process.report.getReport() | ||
| } | ||
| if (!report) { | ||
| return null | ||
| } | ||
| if (report.header && report.header.glibcVersionRuntime) { | ||
| return false | ||
| } | ||
| if (Array.isArray(report.sharedObjects)) { | ||
| if (report.sharedObjects.some(isFileMusl)) { | ||
| return true | ||
| } | ||
| } else { | ||
| const { glibcVersionRuntime } = process.report.getReport().header | ||
| return !glibcVersionRuntime | ||
| } | ||
| return false | ||
| } | ||
| switch (platform) { | ||
| case 'android': | ||
| switch (arch) { | ||
| case 'arm64': | ||
| localFileExisted = existsSync(join(__dirname, 'clipboard.android-arm64.node')) | ||
| const isMuslFromChildProcess = () => { | ||
| try { | ||
| return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') | ||
| } catch (e) { | ||
| // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false | ||
| return false | ||
| } | ||
| } | ||
| function requireNative() { | ||
| if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) { | ||
| try { | ||
| return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH); | ||
| } catch (err) { | ||
| loadErrors.push(err) | ||
| } | ||
| } else if (process.platform === 'android') { | ||
| if (process.arch === 'arm64') { | ||
| try { | ||
| return require('./clipboard.android-arm64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-android-arm64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-android-arm64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 'arm') { | ||
| try { | ||
| return require('./clipboard.android-arm-eabi.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-android-arm-eabi') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-android-arm-eabi/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) | ||
| } | ||
| } else if (process.platform === 'win32') { | ||
| if (process.arch === 'x64') { | ||
| if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') { | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.android-arm64.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-android-arm64') | ||
| } | ||
| return require('./clipboard.win32-x64-gnu.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-win32-x64-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-win32-x64-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| try { | ||
| return require('./clipboard.win32-x64-msvc.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-win32-x64-msvc') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-win32-x64-msvc/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } | ||
| } else if (process.arch === 'ia32') { | ||
| try { | ||
| return require('./clipboard.win32-ia32-msvc.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-win32-ia32-msvc') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-win32-ia32-msvc/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 'arm64') { | ||
| try { | ||
| return require('./clipboard.win32-arm64-msvc.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-win32-arm64-msvc') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-win32-arm64-msvc/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) | ||
| } | ||
| } else if (process.platform === 'darwin') { | ||
| try { | ||
| return require('./clipboard.darwin-universal.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-darwin-universal') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-darwin-universal/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| if (process.arch === 'x64') { | ||
| try { | ||
| return require('./clipboard.darwin-x64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-darwin-x64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-darwin-x64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 'arm64') { | ||
| try { | ||
| return require('./clipboard.darwin-arm64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-darwin-arm64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-darwin-arm64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) | ||
| } | ||
| } else if (process.platform === 'freebsd') { | ||
| if (process.arch === 'x64') { | ||
| try { | ||
| return require('./clipboard.freebsd-x64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-freebsd-x64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-freebsd-x64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 'arm64') { | ||
| try { | ||
| return require('./clipboard.freebsd-arm64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-freebsd-arm64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-freebsd-arm64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) | ||
| } | ||
| } else if (process.platform === 'linux') { | ||
| if (process.arch === 'x64') { | ||
| if (isMusl()) { | ||
| try { | ||
| return require('./clipboard.linux-x64-musl.node') | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'arm': | ||
| localFileExisted = existsSync(join(__dirname, 'clipboard.android-arm-eabi.node')) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.android-arm-eabi.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-android-arm-eabi') | ||
| const binding = require('@mariozechner/clipboard-linux-x64-musl') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-x64-musl/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| default: | ||
| throw new Error(`Unsupported architecture on Android ${arch}`) | ||
| } | ||
| break | ||
| case 'win32': | ||
| switch (arch) { | ||
| case 'x64': | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.win32-x64-msvc.node') | ||
| ) | ||
| } else { | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.win32-x64-msvc.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-win32-x64-msvc') | ||
| } | ||
| return require('./clipboard.linux-x64-gnu.node') | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'ia32': | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.win32-ia32-msvc.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.win32-ia32-msvc.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-win32-ia32-msvc') | ||
| const binding = require('@mariozechner/clipboard-linux-x64-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-x64-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'arm64': | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.win32-arm64-msvc.node') | ||
| ) | ||
| } | ||
| } else if (process.arch === 'arm64') { | ||
| if (isMusl()) { | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.win32-arm64-msvc.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-win32-arm64-msvc') | ||
| return require('./clipboard.linux-arm64-musl.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-arm64-musl') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-arm64-musl/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| default: | ||
| throw new Error(`Unsupported architecture on Windows: ${arch}`) | ||
| } | ||
| break | ||
| case 'darwin': | ||
| localFileExisted = existsSync(join(__dirname, 'clipboard.darwin-universal.node')) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.darwin-universal.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-darwin-universal') | ||
| } | ||
| break | ||
| } catch {} | ||
| switch (arch) { | ||
| case 'x64': | ||
| localFileExisted = existsSync(join(__dirname, 'clipboard.darwin-x64.node')) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.darwin-x64.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-darwin-x64') | ||
| return require('./clipboard.linux-arm64-gnu.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-arm64-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-arm64-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'arm64': | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.darwin-arm64.node') | ||
| ) | ||
| } | ||
| } else if (process.arch === 'arm') { | ||
| if (isMusl()) { | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.darwin-arm64.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-darwin-arm64') | ||
| return require('./clipboard.linux-arm-musleabihf.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-arm-musleabihf') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-arm-musleabihf/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(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, 'clipboard.freebsd-x64.node')) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.freebsd-x64.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-freebsd-x64') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| } | ||
| break | ||
| case 'linux': | ||
| switch (arch) { | ||
| case 'x64': | ||
| if (isMusl()) { | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-x64-musl.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-x64-musl.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-x64-musl') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| try { | ||
| return require('./clipboard.linux-arm-gnueabihf.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-arm-gnueabihf') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-arm-gnueabihf/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| } else { | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-x64-gnu.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-x64-gnu.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-x64-gnu') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'arm64': | ||
| if (isMusl()) { | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-arm64-musl.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-arm64-musl.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-arm64-musl') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| } | ||
| } else if (process.arch === 'loong64') { | ||
| if (isMusl()) { | ||
| try { | ||
| return require('./clipboard.linux-loong64-musl.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-loong64-musl') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-loong64-musl/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| } else { | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-arm64-gnu.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-arm64-gnu.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-arm64-gnu') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'arm': | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-arm-gnueabihf.node') | ||
| ) | ||
| } else { | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-arm-gnueabihf.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-arm-gnueabihf') | ||
| return require('./clipboard.linux-loong64-gnu.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-loong64-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-loong64-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 'riscv64': | ||
| if (isMusl()) { | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-riscv64-musl.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-riscv64-musl.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-riscv64-musl') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| } | ||
| } else if (process.arch === 'riscv64') { | ||
| if (isMusl()) { | ||
| try { | ||
| return require('./clipboard.linux-riscv64-musl.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-riscv64-musl') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-riscv64-musl/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| } else { | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-riscv64-gnu.node') | ||
| ) | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-riscv64-gnu.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-riscv64-gnu') | ||
| } | ||
| } catch (e) { | ||
| loadError = e | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| case 's390x': | ||
| localFileExisted = existsSync( | ||
| join(__dirname, 'clipboard.linux-s390x-gnu.node') | ||
| ) | ||
| } else { | ||
| try { | ||
| if (localFileExisted) { | ||
| nativeBinding = require('./clipboard.linux-s390x-gnu.node') | ||
| } else { | ||
| nativeBinding = require('@mariozechner/clipboard-linux-s390x-gnu') | ||
| return require('./clipboard.linux-riscv64-gnu.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-riscv64-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-riscv64-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadError = e | ||
| loadErrors.push(e) | ||
| } | ||
| break | ||
| default: | ||
| throw new Error(`Unsupported architecture on Linux: ${arch}`) | ||
| } | ||
| } else if (process.arch === 'ppc64') { | ||
| try { | ||
| return require('./clipboard.linux-ppc64-gnu.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-ppc64-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-ppc64-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 's390x') { | ||
| try { | ||
| return require('./clipboard.linux-s390x-gnu.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-linux-s390x-gnu') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-linux-s390x-gnu/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) | ||
| } | ||
| break | ||
| default: | ||
| throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) | ||
| } else if (process.platform === 'openharmony') { | ||
| if (process.arch === 'arm64') { | ||
| try { | ||
| return require('./clipboard.openharmony-arm64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-openharmony-arm64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-openharmony-arm64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 'x64') { | ||
| try { | ||
| return require('./clipboard.openharmony-x64.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-openharmony-x64') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-openharmony-x64/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else if (process.arch === 'arm') { | ||
| try { | ||
| return require('./clipboard.openharmony-arm.node') | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| try { | ||
| const binding = require('@mariozechner/clipboard-openharmony-arm') | ||
| const bindingPackageVersion = require('@mariozechner/clipboard-openharmony-arm/package.json').version | ||
| if (bindingPackageVersion !== '0.3.9' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') { | ||
| throw new Error(`Native binding package version mismatch, expected 0.3.9 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`) | ||
| } | ||
| return binding | ||
| } catch (e) { | ||
| loadErrors.push(e) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`)) | ||
| } | ||
| } else { | ||
| loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) | ||
| } | ||
| } | ||
| nativeBinding = requireNative() | ||
| // NAPI_RS_FORCE_WASI is a tri-state flag: | ||
| // unset / any other value → native binding preferred, WASI is only a fallback | ||
| // 'true' → force WASI fallback even if native loaded | ||
| // 'error' → force WASI and throw if no WASI binding is found | ||
| // Treating any non-empty string as truthy (the historical behavior) meant | ||
| // NAPI_RS_FORCE_WASI=false, NAPI_RS_FORCE_WASI=0, etc. inadvertently triggered | ||
| // the WASI path, causing ENOENT for packages shipped without a .wasi.cjs file. | ||
| const forceWasi = | ||
| process.env.NAPI_RS_FORCE_WASI === 'true' || process.env.NAPI_RS_FORCE_WASI === 'error' | ||
| if (!nativeBinding || forceWasi) { | ||
| let wasiBinding = null | ||
| let wasiBindingError = null | ||
| try { | ||
| wasiBinding = require('./clipboard.wasi.cjs') | ||
| nativeBinding = wasiBinding | ||
| } catch (err) { | ||
| if (forceWasi) { | ||
| wasiBindingError = err | ||
| } | ||
| } | ||
| if (!nativeBinding || forceWasi) { | ||
| try { | ||
| wasiBinding = require('@mariozechner/clipboard-wasm32-wasi') | ||
| nativeBinding = wasiBinding | ||
| } catch (err) { | ||
| if (forceWasi) { | ||
| if (!wasiBindingError) { | ||
| wasiBindingError = err | ||
| } else { | ||
| wasiBindingError.cause = err | ||
| } | ||
| loadErrors.push(err) | ||
| } | ||
| } | ||
| } | ||
| if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) { | ||
| const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error') | ||
| error.cause = wasiBindingError | ||
| throw error | ||
| } | ||
| } | ||
| if (!nativeBinding) { | ||
| if (loadError) { | ||
| throw loadError | ||
| if (loadErrors.length > 0) { | ||
| throw new Error( | ||
| `Cannot find native binding. ` + | ||
| `npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` + | ||
| 'Please try `npm i` again after removing both package-lock.json and node_modules directory.', | ||
| { | ||
| cause: loadErrors.reduce((err, cur) => { | ||
| cur.cause = err | ||
| return cur | ||
| }), | ||
| }, | ||
| ) | ||
| } | ||
@@ -298,21 +588,20 @@ throw new Error(`Failed to load native binding`) | ||
| const { availableFormats, getText, setText, hasText, getImageBinary, getImageBase64, setImageBinary, setImageBase64, hasImage, getHtml, setHtml, hasHtml, getRtf, setRtf, hasRtf, clear, watch, callThreadsafeFunction } = nativeBinding | ||
| module.exports.availableFormats = availableFormats | ||
| module.exports.getText = getText | ||
| module.exports.setText = setText | ||
| module.exports.hasText = hasText | ||
| module.exports.getImageBinary = getImageBinary | ||
| module.exports.getImageBase64 = getImageBase64 | ||
| module.exports.setImageBinary = setImageBinary | ||
| module.exports.setImageBase64 = setImageBase64 | ||
| module.exports.hasImage = hasImage | ||
| module.exports.getHtml = getHtml | ||
| module.exports.setHtml = setHtml | ||
| module.exports.hasHtml = hasHtml | ||
| module.exports.getRtf = getRtf | ||
| module.exports.setRtf = setRtf | ||
| module.exports.hasRtf = hasRtf | ||
| module.exports.clear = clear | ||
| module.exports.watch = watch | ||
| module.exports.callThreadsafeFunction = callThreadsafeFunction | ||
| module.exports = nativeBinding | ||
| module.exports.availableFormats = nativeBinding.availableFormats | ||
| module.exports.callThreadsafeFunction = nativeBinding.callThreadsafeFunction | ||
| module.exports.clear = nativeBinding.clear | ||
| module.exports.getHtml = nativeBinding.getHtml | ||
| module.exports.getImageBase64 = nativeBinding.getImageBase64 | ||
| module.exports.getImageBinary = nativeBinding.getImageBinary | ||
| module.exports.getRtf = nativeBinding.getRtf | ||
| module.exports.getText = nativeBinding.getText | ||
| module.exports.hasHtml = nativeBinding.hasHtml | ||
| module.exports.hasImage = nativeBinding.hasImage | ||
| module.exports.hasRtf = nativeBinding.hasRtf | ||
| module.exports.hasText = nativeBinding.hasText | ||
| module.exports.setHtml = nativeBinding.setHtml | ||
| module.exports.setImageBase64 = nativeBinding.setImageBase64 | ||
| module.exports.setImageBinary = nativeBinding.setImageBinary | ||
| module.exports.setRtf = nativeBinding.setRtf | ||
| module.exports.setText = nativeBinding.setText | ||
| module.exports.watch = nativeBinding.watch |
+14
-14
| { | ||
| "name": "@mariozechner/clipboard", | ||
| "version": "0.3.6", | ||
| "version": "0.3.9", | ||
| "main": "index.js", | ||
@@ -26,3 +26,3 @@ "types": "index.d.ts", | ||
| "devDependencies": { | ||
| "@napi-rs/cli": "^2.18.0", | ||
| "@napi-rs/cli": "3.7.0", | ||
| "ava": "^6.0.1" | ||
@@ -40,19 +40,19 @@ }, | ||
| "build:debug": "napi build --platform", | ||
| "prepublishOnly": "napi prepublish -t npm", | ||
| "prepublishOnly": "napi pre-publish -t npm", | ||
| "test": "ava", | ||
| "universal": "napi universal", | ||
| "universal": "napi universalize -o artifacts", | ||
| "version": "napi version" | ||
| }, | ||
| "optionalDependencies": { | ||
| "@mariozechner/clipboard-darwin-arm64": "0.3.6", | ||
| "@mariozechner/clipboard-darwin-universal": "0.3.6", | ||
| "@mariozechner/clipboard-darwin-x64": "0.3.6", | ||
| "@mariozechner/clipboard-linux-arm64-gnu": "0.3.6", | ||
| "@mariozechner/clipboard-linux-arm64-musl": "0.3.6", | ||
| "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.6", | ||
| "@mariozechner/clipboard-linux-x64-gnu": "0.3.6", | ||
| "@mariozechner/clipboard-linux-x64-musl": "0.3.6", | ||
| "@mariozechner/clipboard-win32-arm64-msvc": "0.3.6", | ||
| "@mariozechner/clipboard-win32-x64-msvc": "0.3.6" | ||
| "@mariozechner/clipboard-darwin-arm64": "0.3.9", | ||
| "@mariozechner/clipboard-darwin-universal": "0.3.9", | ||
| "@mariozechner/clipboard-darwin-x64": "0.3.9", | ||
| "@mariozechner/clipboard-linux-arm64-gnu": "0.3.9", | ||
| "@mariozechner/clipboard-linux-arm64-musl": "0.3.9", | ||
| "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9", | ||
| "@mariozechner/clipboard-linux-x64-gnu": "0.3.9", | ||
| "@mariozechner/clipboard-linux-x64-musl": "0.3.9", | ||
| "@mariozechner/clipboard-win32-arm64-msvc": "0.3.9", | ||
| "@mariozechner/clipboard-win32-x64-msvc": "0.3.9" | ||
| } | ||
| } |
+4
-9
@@ -12,6 +12,5 @@ #![deny(clippy::all)] | ||
| bindgen_prelude::*, | ||
| threadsafe_function::{ErrorStrategy, ThreadsafeFunction, ThreadsafeFunctionCallMode}, | ||
| JsFunction, | ||
| threadsafe_function::{ThreadsafeFunction, ThreadsafeFunctionCallMode}, | ||
| }; | ||
| use std::{thread, time::Duration}; | ||
| use std::{sync::Arc, thread, time::Duration}; | ||
@@ -166,9 +165,5 @@ #[macro_use] | ||
| #[napi] | ||
| pub fn call_threadsafe_function(callback: JsFunction) -> Result<()> { | ||
| let tsfn: ThreadsafeFunction<u32, ErrorStrategy::CalleeHandled> = callback | ||
| .create_threadsafe_function(0, |ctx| { | ||
| ctx.env.create_uint32(ctx.value + 1).map(|v| vec![v]) | ||
| })?; | ||
| pub fn call_threadsafe_function(callback: Arc<ThreadsafeFunction<u32, ()>>) -> Result<()> { | ||
| for n in 0..10 { | ||
| let tsfn = tsfn.clone(); | ||
| let tsfn = Arc::clone(&callback); | ||
| thread::spawn(move || { | ||
@@ -175,0 +170,0 @@ tsfn.call(Ok(n), ThreadsafeFunctionCallMode::Blocking); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
142555
12.85%622
84.57%61
2950%2
100%