43 lines
1.8 KiB
JavaScript
43 lines
1.8 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.autoSelectWriter = void 0;
|
|
const web_fs_1 = require("./writers/web-fs");
|
|
const with_resolvers_1 = require("./create/with-resolvers");
|
|
const log_1 = require("./log");
|
|
const buffer_1 = require("./writers/buffer");
|
|
const autoSelectWriter = async (writer, logLevel) => {
|
|
if (writer) {
|
|
log_1.Log.verbose(logLevel, 'Using writer provided by user');
|
|
return writer;
|
|
}
|
|
log_1.Log.verbose(logLevel, 'Determining best writer');
|
|
const hasNavigator = typeof navigator !== 'undefined';
|
|
if (!hasNavigator) {
|
|
log_1.Log.verbose(logLevel, 'No navigator API detected, using buffer writer');
|
|
return buffer_1.bufferWriter;
|
|
}
|
|
// Check if we're offline using the navigator API
|
|
const isOffline = !navigator.onLine;
|
|
if (isOffline) {
|
|
log_1.Log.verbose(logLevel, 'Offline mode detected, using buffer writer');
|
|
return buffer_1.bufferWriter;
|
|
}
|
|
try {
|
|
const { promise: timeout, reject, resolve } = (0, with_resolvers_1.withResolvers)();
|
|
const time = setTimeout(() => reject(new Error('WebFS check timeout')), 2000);
|
|
const webFsSupported = await Promise.race([(0, web_fs_1.canUseWebFsWriter)(), timeout]);
|
|
resolve();
|
|
clearTimeout(time);
|
|
if (webFsSupported) {
|
|
log_1.Log.verbose(logLevel, 'Using WebFS writer because it is supported');
|
|
return web_fs_1.webFsWriter;
|
|
}
|
|
}
|
|
catch (err) {
|
|
log_1.Log.verbose(logLevel, `WebFS check failed: ${err}. Falling back to buffer writer`);
|
|
}
|
|
log_1.Log.verbose(logLevel, 'Using buffer writer because WebFS writer is not supported or unavailable');
|
|
return buffer_1.bufferWriter;
|
|
};
|
|
exports.autoSelectWriter = autoSelectWriter;
|