Files
fluxer/fluxer_desktop/native/app-store/index.js
T

62 lines
1.8 KiB
JavaScript

// SPDX-License-Identifier: AGPL-3.0-or-later
const {existsSync} = require('node:fs');
const {join, sep} = require('node:path');
const {createNativeLoadError, loadNativeBinding} = require('./loader-diagnostics.cjs');
function nativeFileName(platform = process.platform, arch = process.arch) {
switch (platform) {
case 'darwin':
if (arch === 'x64' || arch === 'arm64') return `app-store.darwin-${arch}.node`;
break;
case 'win32':
if (arch === 'x64' || arch === 'arm64') return `app-store.win32-${arch}-msvc.node`;
break;
case 'linux':
if (arch === 'x64' || arch === 'arm64') return `app-store.linux-${arch}-gnu.node`;
break;
}
throw new Error(`Unsupported app-store target: ${platform}/${arch}`);
}
const MODULE_NAME = '@fluxer/app-store';
const SKIP_NATIVE_PROBE_ENV = 'FLUXER_APP_STORE_SKIP_NATIVE_PROBE';
function resolveNativeRoot() {
const asarSegment = `${sep}app.asar${sep}`;
if (!__dirname.includes(asarSegment)) return __dirname;
const unpackedDir = __dirname.replace(asarSegment, `${sep}app.asar.unpacked${sep}`);
return existsSync(unpackedDir) ? unpackedDir : __dirname;
}
let binding = null;
let loadError = null;
try {
const nativeRoot = resolveNativeRoot();
const nativePath = join(nativeRoot, nativeFileName());
const loaded = loadNativeBinding({
moduleName: MODULE_NAME,
nativePath,
nativeRoot,
packageDir: __dirname,
skipNativeProbeEnv: SKIP_NATIVE_PROBE_ENV,
});
binding = loaded.binding;
loadError = loaded.loadError;
if (loadError) throw loadError;
} catch (error) {
loadError = createNativeLoadError({
moduleName: MODULE_NAME,
nativeRoot: resolveNativeRoot(),
packageDir: __dirname,
reason: 'native loader threw before binding load completed',
cause: error,
skipNativeProbeEnv: SKIP_NATIVE_PROBE_ENV,
});
throw loadError;
}
module.exports = {
AppStore: binding ? binding.AppStore : null,
loadError,
};