@touchifyapp/volumecontrol 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -0
- package/index.d.ts +131 -0
- package/index.js +579 -0
- package/package.json +52 -0
- package/volumecontrol.darwin-arm64.node +0 -0
- package/volumecontrol.darwin-x64.node +0 -0
- package/volumecontrol.linux-arm-gnueabihf.node +0 -0
- package/volumecontrol.linux-arm64-gnu.node +0 -0
- package/volumecontrol.linux-x64-gnu.node +0 -0
- package/volumecontrol.win32-arm64-msvc.node +0 -0
- package/volumecontrol.win32-ia32-msvc.node +0 -0
- package/volumecontrol.win32-x64-msvc.node +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# @touchifyapp/volumecontrol
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@touchifyapp/volumecontrol)
|
|
4
|
+
[](https://github.com/touchifyapp/volumecontrol/actions)
|
|
5
|
+
[](https://github.com/touchifyapp/volumecontrol/blob/main/LICENSE)
|
|
6
|
+
|
|
7
|
+
> Node.js bindings for the `volumecontrol` crate family via napi-rs.
|
|
8
|
+
|
|
9
|
+
This package exposes the cross-platform audio volume control API to Node.js as a native addon built with [napi-rs](https://napi.rs). The correct system backend (PulseAudio on Linux, WASAPI on Windows, CoreAudio on macOS) is selected automatically at compile time.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @touchifyapp/volumecontrol
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
> **Platform requirements**
|
|
20
|
+
> - Node.js >= 18
|
|
21
|
+
> - Linux: `libpulse-dev` (PulseAudio development headers)
|
|
22
|
+
> - Windows / macOS: no extra system libraries required
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
const { AudioDevice } = require('@touchifyapp/volumecontrol');
|
|
30
|
+
|
|
31
|
+
// Open the default audio output device
|
|
32
|
+
const device = AudioDevice.fromDefault();
|
|
33
|
+
console.log(`${device.name} (${device.id})`);
|
|
34
|
+
console.log(`Volume: ${device.getVol()}%`);
|
|
35
|
+
|
|
36
|
+
// Change volume (0–100)
|
|
37
|
+
device.setVol(50);
|
|
38
|
+
|
|
39
|
+
// Check mute state
|
|
40
|
+
console.log(`Muted: ${device.isMute()}`);
|
|
41
|
+
|
|
42
|
+
// Mute / unmute the device
|
|
43
|
+
device.setMute(true); // mute
|
|
44
|
+
device.setMute(false); // unmute
|
|
45
|
+
|
|
46
|
+
// List all available audio devices
|
|
47
|
+
const devices = AudioDevice.list();
|
|
48
|
+
devices.forEach(d => console.log(`${d.name} (${d.id})`));
|
|
49
|
+
|
|
50
|
+
// Get a device from name/id
|
|
51
|
+
const firstDevice = devices[0];
|
|
52
|
+
const deviceFromId = AudioDevice.fromId(firstDevice.id);
|
|
53
|
+
const deviceFromName = AudioDevice.fromName(firstDevice.name);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Rust `snake_case` method names are automatically mapped to JavaScript `camelCase` by napi-rs:
|
|
57
|
+
|
|
58
|
+
| Rust | JavaScript |
|
|
59
|
+
|-------------------|---------------------|
|
|
60
|
+
| `from_default()` | `fromDefault()` |
|
|
61
|
+
| `from_id(id)` | `fromId(id)` |
|
|
62
|
+
| `from_name(name)` | `fromName(name)` |
|
|
63
|
+
| `get_vol()` | `getVol()` |
|
|
64
|
+
| `set_vol(vol)` | `setVol(vol)` |
|
|
65
|
+
| `is_mute()` | `isMute()` |
|
|
66
|
+
| `set_mute(muted)` | `setMute(muted)` |
|
|
67
|
+
| `list()` | `list()` |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Building from source
|
|
72
|
+
|
|
73
|
+
Prerequisites: [Rust](https://rustup.rs/) toolchain and the platform system libraries listed above.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
cd volumecontrol-napi
|
|
77
|
+
npm install
|
|
78
|
+
npm run build # release build
|
|
79
|
+
npm run build:debug # debug build
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The build produces a `.node` native addon file and an auto-generated `index.d.ts` TypeScript declaration file.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Built with AI
|
|
87
|
+
|
|
88
|
+
This crate is part of the `volumecontrol` workspace, which was built **100% with [GitHub Copilot](https://github.com/features/copilot)** (Claude Opus & Claude Sonnet) as an experiment in AI-driven development of a production-ready Rust crate.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
MIT — see the LICENSE file in the repository for details.
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/* auto-generated by NAPI-RS */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* Cross-platform audio output device.
|
|
5
|
+
*
|
|
6
|
+
* Wraps [`volumecontrol::AudioDevice`] and exposes its API to Node.js.
|
|
7
|
+
* All fallible methods return `napi::Result<T>`, which causes the JS side
|
|
8
|
+
* to receive a thrown `Error` on failure.
|
|
9
|
+
*/
|
|
10
|
+
export declare class AudioDevice {
|
|
11
|
+
/**
|
|
12
|
+
* Returns the system default audio output device.
|
|
13
|
+
*
|
|
14
|
+
* # Errors
|
|
15
|
+
*
|
|
16
|
+
* Throws if the default device cannot be resolved.
|
|
17
|
+
*/
|
|
18
|
+
static fromDefault(): AudioDevice
|
|
19
|
+
/**
|
|
20
|
+
* Returns the audio device identified by `id`.
|
|
21
|
+
*
|
|
22
|
+
* # Errors
|
|
23
|
+
*
|
|
24
|
+
* Throws if no device with the given identifier exists, or if the lookup
|
|
25
|
+
* fails.
|
|
26
|
+
*/
|
|
27
|
+
static fromId(id: string): AudioDevice
|
|
28
|
+
/**
|
|
29
|
+
* Returns the first audio device whose name contains `name`.
|
|
30
|
+
*
|
|
31
|
+
* The match is a case-insensitive substring search on most platforms.
|
|
32
|
+
*
|
|
33
|
+
* # Errors
|
|
34
|
+
*
|
|
35
|
+
* Throws if no matching device is found, or if the lookup fails.
|
|
36
|
+
*/
|
|
37
|
+
static fromName(name: string): AudioDevice
|
|
38
|
+
/**
|
|
39
|
+
* Lists all available audio devices.
|
|
40
|
+
*
|
|
41
|
+
* # Errors
|
|
42
|
+
*
|
|
43
|
+
* Throws if the device list cannot be retrieved.
|
|
44
|
+
*/
|
|
45
|
+
static list(): Array<DeviceInfo>
|
|
46
|
+
/**
|
|
47
|
+
* Returns the unique identifier for this device.
|
|
48
|
+
*
|
|
49
|
+
* The value is the same opaque string that [`list`](Self::list) yields as
|
|
50
|
+
* `DeviceInfo.id` and that [`from_id`](Self::from_id) accepts as its
|
|
51
|
+
* argument. It is guaranteed to be non-empty.
|
|
52
|
+
*/
|
|
53
|
+
get id(): string
|
|
54
|
+
/**
|
|
55
|
+
* Returns the human-readable display name of this device.
|
|
56
|
+
*
|
|
57
|
+
* The value is the same string that [`list`](Self::list) yields as
|
|
58
|
+
* `DeviceInfo.name` and that [`from_name`](Self::from_name) uses for
|
|
59
|
+
* substring matching. It is guaranteed to be non-empty.
|
|
60
|
+
*/
|
|
61
|
+
get name(): string
|
|
62
|
+
/**
|
|
63
|
+
* Returns the current volume level in the range `0..=100`.
|
|
64
|
+
*
|
|
65
|
+
* The value is returned as `u32` for JavaScript compatibility (napi-rs
|
|
66
|
+
* does not support `u8` in `#[napi]` signatures).
|
|
67
|
+
*
|
|
68
|
+
* # Errors
|
|
69
|
+
*
|
|
70
|
+
* Throws if the volume cannot be read.
|
|
71
|
+
*/
|
|
72
|
+
getVol(): number
|
|
73
|
+
/**
|
|
74
|
+
* Sets the volume level.
|
|
75
|
+
*
|
|
76
|
+
* `vol` is clamped to `0..=100` before being applied. The parameter is
|
|
77
|
+
* `u32` for JavaScript compatibility; values above `100` are clamped to
|
|
78
|
+
* `100`.
|
|
79
|
+
*
|
|
80
|
+
* # Errors
|
|
81
|
+
*
|
|
82
|
+
* Throws if the volume cannot be set.
|
|
83
|
+
*/
|
|
84
|
+
setVol(vol: number): void
|
|
85
|
+
/**
|
|
86
|
+
* Returns `true` if the device is currently muted.
|
|
87
|
+
*
|
|
88
|
+
* # Errors
|
|
89
|
+
*
|
|
90
|
+
* Throws if the mute state cannot be read.
|
|
91
|
+
*/
|
|
92
|
+
isMute(): boolean
|
|
93
|
+
/**
|
|
94
|
+
* Mutes or unmutes the device.
|
|
95
|
+
*
|
|
96
|
+
* # Errors
|
|
97
|
+
*
|
|
98
|
+
* Throws if the mute state cannot be changed.
|
|
99
|
+
*/
|
|
100
|
+
setMute(muted: boolean): void
|
|
101
|
+
/**
|
|
102
|
+
* Returns the device formatted as `"name (id)"`.
|
|
103
|
+
*
|
|
104
|
+
* Delegates to the [`fmt::Display`](std::fmt::Display) implementation of
|
|
105
|
+
* the inner device.
|
|
106
|
+
*/
|
|
107
|
+
toString(): string
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Plain data object representing an available audio device.
|
|
112
|
+
*
|
|
113
|
+
* Mirrors [`volumecontrol_core::DeviceInfo`]. Exposed to JS as a plain
|
|
114
|
+
* object with `id` and `name` string properties.
|
|
115
|
+
*/
|
|
116
|
+
export interface DeviceInfo {
|
|
117
|
+
/**
|
|
118
|
+
* Platform-specific unique identifier for the device.
|
|
119
|
+
*
|
|
120
|
+
* Matches the value returned by [`AudioDevice::id`] and accepted by
|
|
121
|
+
* [`AudioDevice::from_id`].
|
|
122
|
+
*/
|
|
123
|
+
id: string
|
|
124
|
+
/**
|
|
125
|
+
* Human-readable display name for the device.
|
|
126
|
+
*
|
|
127
|
+
* Matches the value returned by [`AudioDevice::name`] and used for
|
|
128
|
+
* substring matching by [`AudioDevice::from_name`].
|
|
129
|
+
*/
|
|
130
|
+
name: string
|
|
131
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
// prettier-ignore
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
const { readFileSync } = require('node:fs')
|
|
7
|
+
let nativeBinding = null
|
|
8
|
+
const loadErrors = []
|
|
9
|
+
|
|
10
|
+
const isMusl = () => {
|
|
11
|
+
let musl = false
|
|
12
|
+
if (process.platform === 'linux') {
|
|
13
|
+
musl = isMuslFromFilesystem()
|
|
14
|
+
if (musl === null) {
|
|
15
|
+
musl = isMuslFromReport()
|
|
16
|
+
}
|
|
17
|
+
if (musl === null) {
|
|
18
|
+
musl = isMuslFromChildProcess()
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return musl
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
|
|
25
|
+
|
|
26
|
+
const isMuslFromFilesystem = () => {
|
|
27
|
+
try {
|
|
28
|
+
return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
|
|
29
|
+
} catch {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const isMuslFromReport = () => {
|
|
35
|
+
let report = null
|
|
36
|
+
if (typeof process.report?.getReport === 'function') {
|
|
37
|
+
process.report.excludeNetwork = true
|
|
38
|
+
report = process.report.getReport()
|
|
39
|
+
}
|
|
40
|
+
if (!report) {
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
if (report.header && report.header.glibcVersionRuntime) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(report.sharedObjects)) {
|
|
47
|
+
if (report.sharedObjects.some(isFileMusl)) {
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const isMuslFromChildProcess = () => {
|
|
55
|
+
try {
|
|
56
|
+
return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
|
|
57
|
+
} catch (e) {
|
|
58
|
+
// If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
|
|
59
|
+
return false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function requireNative() {
|
|
64
|
+
if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
|
|
65
|
+
try {
|
|
66
|
+
return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
loadErrors.push(err)
|
|
69
|
+
}
|
|
70
|
+
} else if (process.platform === 'android') {
|
|
71
|
+
if (process.arch === 'arm64') {
|
|
72
|
+
try {
|
|
73
|
+
return require('./volumecontrol.android-arm64.node')
|
|
74
|
+
} catch (e) {
|
|
75
|
+
loadErrors.push(e)
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const binding = require('@touchifyapp/volumecontrol-android-arm64')
|
|
79
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-android-arm64/package.json').version
|
|
80
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
81
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
82
|
+
}
|
|
83
|
+
return binding
|
|
84
|
+
} catch (e) {
|
|
85
|
+
loadErrors.push(e)
|
|
86
|
+
}
|
|
87
|
+
} else if (process.arch === 'arm') {
|
|
88
|
+
try {
|
|
89
|
+
return require('./volumecontrol.android-arm-eabi.node')
|
|
90
|
+
} catch (e) {
|
|
91
|
+
loadErrors.push(e)
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const binding = require('@touchifyapp/volumecontrol-android-arm-eabi')
|
|
95
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-android-arm-eabi/package.json').version
|
|
96
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
97
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
98
|
+
}
|
|
99
|
+
return binding
|
|
100
|
+
} catch (e) {
|
|
101
|
+
loadErrors.push(e)
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
|
|
105
|
+
}
|
|
106
|
+
} else if (process.platform === 'win32') {
|
|
107
|
+
if (process.arch === 'x64') {
|
|
108
|
+
if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') {
|
|
109
|
+
try {
|
|
110
|
+
return require('./volumecontrol.win32-x64-gnu.node')
|
|
111
|
+
} catch (e) {
|
|
112
|
+
loadErrors.push(e)
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const binding = require('@touchifyapp/volumecontrol-win32-x64-gnu')
|
|
116
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-win32-x64-gnu/package.json').version
|
|
117
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
118
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
119
|
+
}
|
|
120
|
+
return binding
|
|
121
|
+
} catch (e) {
|
|
122
|
+
loadErrors.push(e)
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
try {
|
|
126
|
+
return require('./volumecontrol.win32-x64-msvc.node')
|
|
127
|
+
} catch (e) {
|
|
128
|
+
loadErrors.push(e)
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const binding = require('@touchifyapp/volumecontrol-win32-x64-msvc')
|
|
132
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-win32-x64-msvc/package.json').version
|
|
133
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
134
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
135
|
+
}
|
|
136
|
+
return binding
|
|
137
|
+
} catch (e) {
|
|
138
|
+
loadErrors.push(e)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} else if (process.arch === 'ia32') {
|
|
142
|
+
try {
|
|
143
|
+
return require('./volumecontrol.win32-ia32-msvc.node')
|
|
144
|
+
} catch (e) {
|
|
145
|
+
loadErrors.push(e)
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const binding = require('@touchifyapp/volumecontrol-win32-ia32-msvc')
|
|
149
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-win32-ia32-msvc/package.json').version
|
|
150
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
151
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
152
|
+
}
|
|
153
|
+
return binding
|
|
154
|
+
} catch (e) {
|
|
155
|
+
loadErrors.push(e)
|
|
156
|
+
}
|
|
157
|
+
} else if (process.arch === 'arm64') {
|
|
158
|
+
try {
|
|
159
|
+
return require('./volumecontrol.win32-arm64-msvc.node')
|
|
160
|
+
} catch (e) {
|
|
161
|
+
loadErrors.push(e)
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const binding = require('@touchifyapp/volumecontrol-win32-arm64-msvc')
|
|
165
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-win32-arm64-msvc/package.json').version
|
|
166
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
167
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
168
|
+
}
|
|
169
|
+
return binding
|
|
170
|
+
} catch (e) {
|
|
171
|
+
loadErrors.push(e)
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
|
|
175
|
+
}
|
|
176
|
+
} else if (process.platform === 'darwin') {
|
|
177
|
+
try {
|
|
178
|
+
return require('./volumecontrol.darwin-universal.node')
|
|
179
|
+
} catch (e) {
|
|
180
|
+
loadErrors.push(e)
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const binding = require('@touchifyapp/volumecontrol-darwin-universal')
|
|
184
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-darwin-universal/package.json').version
|
|
185
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
186
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
187
|
+
}
|
|
188
|
+
return binding
|
|
189
|
+
} catch (e) {
|
|
190
|
+
loadErrors.push(e)
|
|
191
|
+
}
|
|
192
|
+
if (process.arch === 'x64') {
|
|
193
|
+
try {
|
|
194
|
+
return require('./volumecontrol.darwin-x64.node')
|
|
195
|
+
} catch (e) {
|
|
196
|
+
loadErrors.push(e)
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const binding = require('@touchifyapp/volumecontrol-darwin-x64')
|
|
200
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-darwin-x64/package.json').version
|
|
201
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
202
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
203
|
+
}
|
|
204
|
+
return binding
|
|
205
|
+
} catch (e) {
|
|
206
|
+
loadErrors.push(e)
|
|
207
|
+
}
|
|
208
|
+
} else if (process.arch === 'arm64') {
|
|
209
|
+
try {
|
|
210
|
+
return require('./volumecontrol.darwin-arm64.node')
|
|
211
|
+
} catch (e) {
|
|
212
|
+
loadErrors.push(e)
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const binding = require('@touchifyapp/volumecontrol-darwin-arm64')
|
|
216
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-darwin-arm64/package.json').version
|
|
217
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
218
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
219
|
+
}
|
|
220
|
+
return binding
|
|
221
|
+
} catch (e) {
|
|
222
|
+
loadErrors.push(e)
|
|
223
|
+
}
|
|
224
|
+
} else {
|
|
225
|
+
loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
|
|
226
|
+
}
|
|
227
|
+
} else if (process.platform === 'freebsd') {
|
|
228
|
+
if (process.arch === 'x64') {
|
|
229
|
+
try {
|
|
230
|
+
return require('./volumecontrol.freebsd-x64.node')
|
|
231
|
+
} catch (e) {
|
|
232
|
+
loadErrors.push(e)
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const binding = require('@touchifyapp/volumecontrol-freebsd-x64')
|
|
236
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-freebsd-x64/package.json').version
|
|
237
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
238
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
239
|
+
}
|
|
240
|
+
return binding
|
|
241
|
+
} catch (e) {
|
|
242
|
+
loadErrors.push(e)
|
|
243
|
+
}
|
|
244
|
+
} else if (process.arch === 'arm64') {
|
|
245
|
+
try {
|
|
246
|
+
return require('./volumecontrol.freebsd-arm64.node')
|
|
247
|
+
} catch (e) {
|
|
248
|
+
loadErrors.push(e)
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const binding = require('@touchifyapp/volumecontrol-freebsd-arm64')
|
|
252
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-freebsd-arm64/package.json').version
|
|
253
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
254
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
255
|
+
}
|
|
256
|
+
return binding
|
|
257
|
+
} catch (e) {
|
|
258
|
+
loadErrors.push(e)
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
|
|
262
|
+
}
|
|
263
|
+
} else if (process.platform === 'linux') {
|
|
264
|
+
if (process.arch === 'x64') {
|
|
265
|
+
if (isMusl()) {
|
|
266
|
+
try {
|
|
267
|
+
return require('./volumecontrol.linux-x64-musl.node')
|
|
268
|
+
} catch (e) {
|
|
269
|
+
loadErrors.push(e)
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const binding = require('@touchifyapp/volumecontrol-linux-x64-musl')
|
|
273
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-x64-musl/package.json').version
|
|
274
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
275
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
276
|
+
}
|
|
277
|
+
return binding
|
|
278
|
+
} catch (e) {
|
|
279
|
+
loadErrors.push(e)
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
try {
|
|
283
|
+
return require('./volumecontrol.linux-x64-gnu.node')
|
|
284
|
+
} catch (e) {
|
|
285
|
+
loadErrors.push(e)
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
const binding = require('@touchifyapp/volumecontrol-linux-x64-gnu')
|
|
289
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-x64-gnu/package.json').version
|
|
290
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
291
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
292
|
+
}
|
|
293
|
+
return binding
|
|
294
|
+
} catch (e) {
|
|
295
|
+
loadErrors.push(e)
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
} else if (process.arch === 'arm64') {
|
|
299
|
+
if (isMusl()) {
|
|
300
|
+
try {
|
|
301
|
+
return require('./volumecontrol.linux-arm64-musl.node')
|
|
302
|
+
} catch (e) {
|
|
303
|
+
loadErrors.push(e)
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
const binding = require('@touchifyapp/volumecontrol-linux-arm64-musl')
|
|
307
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-arm64-musl/package.json').version
|
|
308
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
309
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
310
|
+
}
|
|
311
|
+
return binding
|
|
312
|
+
} catch (e) {
|
|
313
|
+
loadErrors.push(e)
|
|
314
|
+
}
|
|
315
|
+
} else {
|
|
316
|
+
try {
|
|
317
|
+
return require('./volumecontrol.linux-arm64-gnu.node')
|
|
318
|
+
} catch (e) {
|
|
319
|
+
loadErrors.push(e)
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
const binding = require('@touchifyapp/volumecontrol-linux-arm64-gnu')
|
|
323
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-arm64-gnu/package.json').version
|
|
324
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
325
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
326
|
+
}
|
|
327
|
+
return binding
|
|
328
|
+
} catch (e) {
|
|
329
|
+
loadErrors.push(e)
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
} else if (process.arch === 'arm') {
|
|
333
|
+
if (isMusl()) {
|
|
334
|
+
try {
|
|
335
|
+
return require('./volumecontrol.linux-arm-musleabihf.node')
|
|
336
|
+
} catch (e) {
|
|
337
|
+
loadErrors.push(e)
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
const binding = require('@touchifyapp/volumecontrol-linux-arm-musleabihf')
|
|
341
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-arm-musleabihf/package.json').version
|
|
342
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
343
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
344
|
+
}
|
|
345
|
+
return binding
|
|
346
|
+
} catch (e) {
|
|
347
|
+
loadErrors.push(e)
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
try {
|
|
351
|
+
return require('./volumecontrol.linux-arm-gnueabihf.node')
|
|
352
|
+
} catch (e) {
|
|
353
|
+
loadErrors.push(e)
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
const binding = require('@touchifyapp/volumecontrol-linux-arm-gnueabihf')
|
|
357
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-arm-gnueabihf/package.json').version
|
|
358
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
359
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
360
|
+
}
|
|
361
|
+
return binding
|
|
362
|
+
} catch (e) {
|
|
363
|
+
loadErrors.push(e)
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
} else if (process.arch === 'loong64') {
|
|
367
|
+
if (isMusl()) {
|
|
368
|
+
try {
|
|
369
|
+
return require('./volumecontrol.linux-loong64-musl.node')
|
|
370
|
+
} catch (e) {
|
|
371
|
+
loadErrors.push(e)
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const binding = require('@touchifyapp/volumecontrol-linux-loong64-musl')
|
|
375
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-loong64-musl/package.json').version
|
|
376
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
377
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
378
|
+
}
|
|
379
|
+
return binding
|
|
380
|
+
} catch (e) {
|
|
381
|
+
loadErrors.push(e)
|
|
382
|
+
}
|
|
383
|
+
} else {
|
|
384
|
+
try {
|
|
385
|
+
return require('./volumecontrol.linux-loong64-gnu.node')
|
|
386
|
+
} catch (e) {
|
|
387
|
+
loadErrors.push(e)
|
|
388
|
+
}
|
|
389
|
+
try {
|
|
390
|
+
const binding = require('@touchifyapp/volumecontrol-linux-loong64-gnu')
|
|
391
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-loong64-gnu/package.json').version
|
|
392
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
393
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
394
|
+
}
|
|
395
|
+
return binding
|
|
396
|
+
} catch (e) {
|
|
397
|
+
loadErrors.push(e)
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
} else if (process.arch === 'riscv64') {
|
|
401
|
+
if (isMusl()) {
|
|
402
|
+
try {
|
|
403
|
+
return require('./volumecontrol.linux-riscv64-musl.node')
|
|
404
|
+
} catch (e) {
|
|
405
|
+
loadErrors.push(e)
|
|
406
|
+
}
|
|
407
|
+
try {
|
|
408
|
+
const binding = require('@touchifyapp/volumecontrol-linux-riscv64-musl')
|
|
409
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-riscv64-musl/package.json').version
|
|
410
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
411
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
412
|
+
}
|
|
413
|
+
return binding
|
|
414
|
+
} catch (e) {
|
|
415
|
+
loadErrors.push(e)
|
|
416
|
+
}
|
|
417
|
+
} else {
|
|
418
|
+
try {
|
|
419
|
+
return require('./volumecontrol.linux-riscv64-gnu.node')
|
|
420
|
+
} catch (e) {
|
|
421
|
+
loadErrors.push(e)
|
|
422
|
+
}
|
|
423
|
+
try {
|
|
424
|
+
const binding = require('@touchifyapp/volumecontrol-linux-riscv64-gnu')
|
|
425
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-riscv64-gnu/package.json').version
|
|
426
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
427
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
428
|
+
}
|
|
429
|
+
return binding
|
|
430
|
+
} catch (e) {
|
|
431
|
+
loadErrors.push(e)
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
} else if (process.arch === 'ppc64') {
|
|
435
|
+
try {
|
|
436
|
+
return require('./volumecontrol.linux-ppc64-gnu.node')
|
|
437
|
+
} catch (e) {
|
|
438
|
+
loadErrors.push(e)
|
|
439
|
+
}
|
|
440
|
+
try {
|
|
441
|
+
const binding = require('@touchifyapp/volumecontrol-linux-ppc64-gnu')
|
|
442
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-ppc64-gnu/package.json').version
|
|
443
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
444
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
445
|
+
}
|
|
446
|
+
return binding
|
|
447
|
+
} catch (e) {
|
|
448
|
+
loadErrors.push(e)
|
|
449
|
+
}
|
|
450
|
+
} else if (process.arch === 's390x') {
|
|
451
|
+
try {
|
|
452
|
+
return require('./volumecontrol.linux-s390x-gnu.node')
|
|
453
|
+
} catch (e) {
|
|
454
|
+
loadErrors.push(e)
|
|
455
|
+
}
|
|
456
|
+
try {
|
|
457
|
+
const binding = require('@touchifyapp/volumecontrol-linux-s390x-gnu')
|
|
458
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-linux-s390x-gnu/package.json').version
|
|
459
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
460
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
461
|
+
}
|
|
462
|
+
return binding
|
|
463
|
+
} catch (e) {
|
|
464
|
+
loadErrors.push(e)
|
|
465
|
+
}
|
|
466
|
+
} else {
|
|
467
|
+
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
|
|
468
|
+
}
|
|
469
|
+
} else if (process.platform === 'openharmony') {
|
|
470
|
+
if (process.arch === 'arm64') {
|
|
471
|
+
try {
|
|
472
|
+
return require('./volumecontrol.openharmony-arm64.node')
|
|
473
|
+
} catch (e) {
|
|
474
|
+
loadErrors.push(e)
|
|
475
|
+
}
|
|
476
|
+
try {
|
|
477
|
+
const binding = require('@touchifyapp/volumecontrol-openharmony-arm64')
|
|
478
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-openharmony-arm64/package.json').version
|
|
479
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
480
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
481
|
+
}
|
|
482
|
+
return binding
|
|
483
|
+
} catch (e) {
|
|
484
|
+
loadErrors.push(e)
|
|
485
|
+
}
|
|
486
|
+
} else if (process.arch === 'x64') {
|
|
487
|
+
try {
|
|
488
|
+
return require('./volumecontrol.openharmony-x64.node')
|
|
489
|
+
} catch (e) {
|
|
490
|
+
loadErrors.push(e)
|
|
491
|
+
}
|
|
492
|
+
try {
|
|
493
|
+
const binding = require('@touchifyapp/volumecontrol-openharmony-x64')
|
|
494
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-openharmony-x64/package.json').version
|
|
495
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
496
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
497
|
+
}
|
|
498
|
+
return binding
|
|
499
|
+
} catch (e) {
|
|
500
|
+
loadErrors.push(e)
|
|
501
|
+
}
|
|
502
|
+
} else if (process.arch === 'arm') {
|
|
503
|
+
try {
|
|
504
|
+
return require('./volumecontrol.openharmony-arm.node')
|
|
505
|
+
} catch (e) {
|
|
506
|
+
loadErrors.push(e)
|
|
507
|
+
}
|
|
508
|
+
try {
|
|
509
|
+
const binding = require('@touchifyapp/volumecontrol-openharmony-arm')
|
|
510
|
+
const bindingPackageVersion = require('@touchifyapp/volumecontrol-openharmony-arm/package.json').version
|
|
511
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
512
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
513
|
+
}
|
|
514
|
+
return binding
|
|
515
|
+
} catch (e) {
|
|
516
|
+
loadErrors.push(e)
|
|
517
|
+
}
|
|
518
|
+
} else {
|
|
519
|
+
loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
|
|
520
|
+
}
|
|
521
|
+
} else {
|
|
522
|
+
loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
nativeBinding = requireNative()
|
|
527
|
+
|
|
528
|
+
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
529
|
+
let wasiBinding = null
|
|
530
|
+
let wasiBindingError = null
|
|
531
|
+
try {
|
|
532
|
+
wasiBinding = require('./volumecontrol.wasi.cjs')
|
|
533
|
+
nativeBinding = wasiBinding
|
|
534
|
+
} catch (err) {
|
|
535
|
+
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
536
|
+
wasiBindingError = err
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
540
|
+
try {
|
|
541
|
+
wasiBinding = require('@touchifyapp/volumecontrol-wasm32-wasi')
|
|
542
|
+
nativeBinding = wasiBinding
|
|
543
|
+
} catch (err) {
|
|
544
|
+
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
545
|
+
if (!wasiBindingError) {
|
|
546
|
+
wasiBindingError = err
|
|
547
|
+
} else {
|
|
548
|
+
wasiBindingError.cause = err
|
|
549
|
+
}
|
|
550
|
+
loadErrors.push(err)
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
|
|
555
|
+
const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
|
|
556
|
+
error.cause = wasiBindingError
|
|
557
|
+
throw error
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
if (!nativeBinding) {
|
|
562
|
+
if (loadErrors.length > 0) {
|
|
563
|
+
throw new Error(
|
|
564
|
+
`Cannot find native binding. ` +
|
|
565
|
+
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
|
|
566
|
+
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
|
|
567
|
+
{
|
|
568
|
+
cause: loadErrors.reduce((err, cur) => {
|
|
569
|
+
cur.cause = err
|
|
570
|
+
return cur
|
|
571
|
+
}),
|
|
572
|
+
},
|
|
573
|
+
)
|
|
574
|
+
}
|
|
575
|
+
throw new Error(`Failed to load native binding`)
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
module.exports = nativeBinding
|
|
579
|
+
module.exports.AudioDevice = nativeBinding.AudioDevice
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@touchifyapp/volumecontrol",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Cross-platform system volume control for Node.js — powered by Rust and napi-rs",
|
|
5
|
+
"author": "Touchify <dev@touchify.io>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "index.js",
|
|
8
|
+
"types": "index.d.ts",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/touchifyapp/volumecontrol",
|
|
12
|
+
"directory": "volumecontrol-napi"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"index.js",
|
|
16
|
+
"index.d.ts",
|
|
17
|
+
"*.node"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "napi build --platform --release",
|
|
21
|
+
"build:debug": "napi build --platform",
|
|
22
|
+
"test": "vitest run",
|
|
23
|
+
"prepublishOnly": "napi prepublish -t npm --gh-release-id $RELEASE_ID --tag-style npm"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@napi-rs/cli": "^3",
|
|
27
|
+
"vitest": "^4"
|
|
28
|
+
},
|
|
29
|
+
"napi": {
|
|
30
|
+
"binaryName": "volumecontrol",
|
|
31
|
+
"targets": [
|
|
32
|
+
"x86_64-apple-darwin",
|
|
33
|
+
"aarch64-apple-darwin",
|
|
34
|
+
"x86_64-pc-windows-msvc",
|
|
35
|
+
"i686-pc-windows-msvc",
|
|
36
|
+
"aarch64-pc-windows-msvc",
|
|
37
|
+
"x86_64-unknown-linux-gnu",
|
|
38
|
+
"aarch64-unknown-linux-gnu",
|
|
39
|
+
"armv7-unknown-linux-gnueabihf"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"optionalDependencies": {
|
|
43
|
+
"@touchifyapp/volumecontrol-darwin-x64": "0.1.3",
|
|
44
|
+
"@touchifyapp/volumecontrol-darwin-arm64": "0.1.3",
|
|
45
|
+
"@touchifyapp/volumecontrol-win32-x64-msvc": "0.1.3",
|
|
46
|
+
"@touchifyapp/volumecontrol-win32-ia32-msvc": "0.1.3",
|
|
47
|
+
"@touchifyapp/volumecontrol-win32-arm64-msvc": "0.1.3",
|
|
48
|
+
"@touchifyapp/volumecontrol-linux-x64-gnu": "0.1.3",
|
|
49
|
+
"@touchifyapp/volumecontrol-linux-arm64-gnu": "0.1.3",
|
|
50
|
+
"@touchifyapp/volumecontrol-linux-arm-gnueabihf": "0.1.3"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|