UNPKG

2.1 kBPlain TextView Raw
1// We cache the references so that callers can do the following without causing infinite recursion/bugs:
2//
3// import * as clipboard from "clipboard-polyfill";
4// navigator.clipboard = clipboard;
5//
6// import { ClipboardItem } from "clipboard-polyfill";
7// window.ClipboardItem = clipboard;
8//
9// Note that per the spec:
10//
11// - is *not* possible to overwrite `navigator.clipboard`. https://www.w3.org/TR/clipboard-apis/#navigator-interface
12// - it *may* be possible to overwrite `window.ClipboardItem`.
13//
14// Chrome 83 and Safari 13.1 match this. We save the original
15// `navigator.clipboard` anyhow, because 1) it doesn't cost more code (in fact,
16// it probably saves code), and 2) just in case an unknown/future implementation
17// allows overwriting `navigator.clipboard` like this.
18
19import {
20 ClipboardItemConstructor,
21 Clipboard,
22 ClipboardItems,
23} from "./ClipboardItem/spec";
24
25const originalNavigator =
26 typeof navigator === "undefined" ? undefined : navigator;
27const originalNavigatorClipboard:
28 | Clipboard
29 | undefined = originalNavigator?.clipboard as any;
30export const originalNavigatorClipboardRead:
31 | (() => Promise<ClipboardItems>)
32 | undefined = originalNavigatorClipboard?.read?.bind(
33 originalNavigatorClipboard
34);
35export const originalNavigatorClipboardReadText:
36 | (() => Promise<string>)
37 | undefined = originalNavigatorClipboard?.readText?.bind(
38 originalNavigatorClipboard
39);
40export const originalNavigatorClipboardWrite:
41 | ((data: ClipboardItems) => Promise<void>)
42 | undefined = originalNavigatorClipboard?.write?.bind(
43 originalNavigatorClipboard
44);
45export const originalNavigatorClipboardWriteText:
46 | ((data: string) => Promise<void>)
47 | undefined = originalNavigatorClipboard?.writeText?.bind(
48 originalNavigatorClipboard
49);
50
51// The spec specifies that this goes on `window`, not e.g. `globalThis`. It's not (currently) available in workers.
52export const originalWindow =
53 typeof window === "undefined" ? undefined : window;
54export const originalWindowClipboardItem: ClipboardItemConstructor | undefined =
55 originalWindow?.ClipboardItem;
56
\No newline at end of file