one
Version:
One is a React framework for web, iOS, and Android apps.
86 lines (85 loc) • 3.12 kB
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 keep_awake_exports = {};
__export(keep_awake_exports, {
KeepAwake: () => KeepAwake,
useKeepAwake: () => useKeepAwake
});
module.exports = __toCommonJS(keep_awake_exports);
var import_react = require("react");
var import_unavailable = require("./unavailable.cjs");
var import_validate = require("./validate.cjs");
const active = /* @__PURE__ */ new Set();
let lock;
let operation = Promise.resolve();
function live() {
return !!lock && !lock.released;
}
function apply(owner) {
const next = operation.catch(() => {}).then(async () => {
if (active.size === 0) {
await lock?.release();
lock = void 0;
return;
}
if (live()) return;
if (!navigator.wakeLock) throw new Error(`KeepAwake.${owner}: Screen Wake Lock is unavailable`);
lock = await navigator.wakeLock.request("screen");
});
operation = next;
return next;
}
const KeepAwake = Object.freeze({
isEnabled: async () => typeof window !== "undefined" && active.size > 0 && live(),
setEnabled: (enabled) => {
(0, import_validate.assertKeepAwakeEnabled)(enabled);
if (typeof window === "undefined") return import_unavailable.KeepAwake.setEnabled(enabled);
if (enabled) active.add((0, import_validate.normalizeKeepAwakeTag)(void 0));
else active.delete((0, import_validate.normalizeKeepAwakeTag)(void 0));
return apply("setEnabled");
},
activate: (tag) => {
(0, import_validate.assertKeepAwakeTag)(tag, "activate");
if (typeof window === "undefined") return import_unavailable.KeepAwake.activate(tag);
active.add((0, import_validate.normalizeKeepAwakeTag)(tag));
return apply("activate");
},
deactivate: (tag) => {
(0, import_validate.assertKeepAwakeTag)(tag, "deactivate");
if (typeof window === "undefined") return import_unavailable.KeepAwake.deactivate(tag);
active.delete((0, import_validate.normalizeKeepAwakeTag)(tag));
return apply("deactivate");
}
});
function useKeepAwake(tag) {
const fallback = (0, import_react.useId)();
(0, import_validate.assertKeepAwakeTag)(tag, "useKeepAwake");
const effective = tag ?? fallback;
(0, import_react.useEffect)(() => {
if (typeof window === "undefined") return;
KeepAwake.activate(effective).catch((error) => {
console.error(`Failed to keep the screen awake: ${String(error)}`);
});
return () => {
KeepAwake.deactivate(effective).catch(() => {});
};
}, [effective]);
}