82 lines
3.3 KiB
JavaScript
82 lines
3.3 KiB
JavaScript
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
var platform_tests_exports = {};
|
|
__export(platform_tests_exports, {
|
|
airplaySupported: () => airplaySupported,
|
|
castSupported: () => castSupported,
|
|
fullscreenSupported: () => fullscreenSupported,
|
|
getTestMediaEl: () => getTestMediaEl,
|
|
hasFullscreenSupport: () => hasFullscreenSupport,
|
|
hasPipSupport: () => hasPipSupport,
|
|
hasVolumeSupportAsync: () => hasVolumeSupportAsync,
|
|
pipSupported: () => pipSupported
|
|
});
|
|
module.exports = __toCommonJS(platform_tests_exports);
|
|
var import_server_safe_globals = require("./server-safe-globals.js");
|
|
var import_utils = require("./utils.js");
|
|
var import_fullscreen_api = require("./fullscreen-api.js");
|
|
let testMediaEl;
|
|
const getTestMediaEl = () => {
|
|
var _a, _b;
|
|
if (testMediaEl)
|
|
return testMediaEl;
|
|
testMediaEl = (_b = (_a = import_server_safe_globals.document) == null ? void 0 : _a.createElement) == null ? void 0 : _b.call(_a, "video");
|
|
return testMediaEl;
|
|
};
|
|
const hasVolumeSupportAsync = async (mediaEl = getTestMediaEl()) => {
|
|
if (!mediaEl)
|
|
return false;
|
|
const prevVolume = mediaEl.volume;
|
|
mediaEl.volume = prevVolume / 2 + 0.1;
|
|
const abortController = new AbortController();
|
|
const volumeSupported = await Promise.race([
|
|
dispatchedVolumeChange(mediaEl, abortController.signal),
|
|
volumeChanged(mediaEl, prevVolume)
|
|
]);
|
|
abortController.abort();
|
|
return volumeSupported;
|
|
};
|
|
const dispatchedVolumeChange = (mediaEl, signal) => {
|
|
return new Promise((resolve) => {
|
|
mediaEl.addEventListener("volumechange", () => resolve(true), { signal });
|
|
});
|
|
};
|
|
const volumeChanged = async (mediaEl, prevVolume) => {
|
|
for (let i = 0; i < 10; i++) {
|
|
if (mediaEl.volume === prevVolume)
|
|
return false;
|
|
await (0, import_utils.delay)(10);
|
|
}
|
|
return mediaEl.volume !== prevVolume;
|
|
};
|
|
const isSafari = /.*Version\/.*Safari\/.*/.test(
|
|
import_server_safe_globals.globalThis.navigator.userAgent
|
|
);
|
|
const hasPipSupport = (mediaEl = getTestMediaEl()) => {
|
|
if (import_server_safe_globals.globalThis.matchMedia("(display-mode: standalone)").matches && isSafari)
|
|
return false;
|
|
return typeof (mediaEl == null ? void 0 : mediaEl.requestPictureInPicture) === "function";
|
|
};
|
|
const hasFullscreenSupport = (mediaEl = getTestMediaEl()) => {
|
|
return (0, import_fullscreen_api.isFullscreenEnabled)({ documentElement: import_server_safe_globals.document, media: mediaEl });
|
|
};
|
|
const fullscreenSupported = hasFullscreenSupport();
|
|
const pipSupported = hasPipSupport();
|
|
const airplaySupported = !!import_server_safe_globals.globalThis.WebKitPlaybackTargetAvailabilityEvent;
|
|
const castSupported = !!import_server_safe_globals.globalThis.chrome;
|