summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/lib/utils/accessor.js
blob: 1d18992af6325f4f805ef0ba4e72b0bc5247982e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function isPropertyAccessSafe(base, property) {
  let safe;

  try {
    safe = !!base[property];
  } catch (error) {
    safe = false;
  }

  return safe;
}

function isFunctionCallSafe(base, functionName, ...args) {
  let safe = true;

  try {
    base[functionName](...args);
  } catch (error) {
    safe = false;
  }

  return safe;
}

function isLocalStorageAccessSafe() {
  let safe;

  const TEST_KEY = 'isLocalStorageAccessSafe';
  const TEST_VALUE = 'true';

  safe = isPropertyAccessSafe(window, 'localStorage');
  if (!safe) return safe;

  safe = isFunctionCallSafe(window.localStorage, 'setItem', TEST_KEY, TEST_VALUE);

  if (safe) window.localStorage.removeItem(TEST_KEY);

  return safe;
}

const AccessorUtilities = {
  isPropertyAccessSafe,
  isFunctionCallSafe,
  isLocalStorageAccessSafe,
};

export default AccessorUtilities;