summaryrefslogtreecommitdiff
path: root/shared/utils/node_modules/@amp/runtime-detect/dist/extensions/flags.js
blob: 04980eeb83607d0c11ad1afc5f8639eeaa3161f4 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
function _define_property(obj, key, value) {
    if (key in obj) {
        Object.defineProperty(obj, key, {
            value: value,
            enumerable: true,
            configurable: true,
            writable: true
        });
    } else {
        obj[key] = value;
    }
    return obj;
}
function _object_spread(target) {
    for(var i = 1; i < arguments.length; i++){
        var source = arguments[i] != null ? arguments[i] : {};
        var ownKeys = Object.keys(source);
        if (typeof Object.getOwnPropertySymbols === "function") {
            ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
                return Object.getOwnPropertyDescriptor(source, sym).enumerable;
            }));
        }
        ownKeys.forEach(function(key) {
            _define_property(target, key, source[key]);
        });
    }
    return target;
}
function ownKeys(object, enumerableOnly) {
    var keys = Object.keys(object);
    if (Object.getOwnPropertySymbols) {
        var symbols = Object.getOwnPropertySymbols(object);
        if (enumerableOnly) {
            symbols = symbols.filter(function(sym) {
                return Object.getOwnPropertyDescriptor(object, sym).enumerable;
            });
        }
        keys.push.apply(keys, symbols);
    }
    return keys;
}
function _object_spread_props(target, source) {
    source = source != null ? source : {};
    if (Object.getOwnPropertyDescriptors) {
        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
    } else {
        ownKeys(Object(source)).forEach(function(key) {
            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
        });
    }
    return target;
}
function flagsExtension(descriptor) {
    let osName = descriptor.os.name;
    const isAndroid = descriptor.os.name === 'android';
    let isMacOS = descriptor.os.name === 'macos';
    let isIOS = descriptor.os.name === 'ios';
    var _descriptor_navigator_maxTouchPoints;
    /**
   * Newer iPads will identify as macOS in the UserAgent string but can still be differentiated by
   * inspecting `maxTouchPoints`. The macOS and iOS values need to be reset when detected.
   */ const isIPadOS = osName === 'ipados' || isIOS && /ipad/i.test(descriptor.ua) || isMacOS && ((_descriptor_navigator_maxTouchPoints = descriptor.navigator.maxTouchPoints) !== null && _descriptor_navigator_maxTouchPoints !== void 0 ? _descriptor_navigator_maxTouchPoints : 0) >= 2;
    if (isIPadOS) {
        osName = 'ipados';
        isIOS = false;
        isMacOS = false;
    }
    const browser = _object_spread_props(_object_spread({}, descriptor.browser), {
        isUnknown: descriptor.browser.name === 'unknown',
        isSafari: descriptor.browser.name === 'safari',
        isChrome: descriptor.browser.name === 'chrome',
        isFirefox: descriptor.browser.name === 'firefox',
        isEdge: descriptor.browser.name === 'edge',
        isWebView: descriptor.browser.name === 'webview',
        isOther: descriptor.browser.name === 'other',
        isMobile: descriptor.browser.mobile || isIOS || isIPadOS || isAndroid || false
    });
    const engine = _object_spread_props(_object_spread({}, descriptor.engine), {
        isUnknown: descriptor.engine.name === 'unknown',
        isWebKit: descriptor.engine.name === 'webkit',
        isBlink: descriptor.engine.name === 'blink',
        isGecko: descriptor.engine.name === 'gecko'
    });
    const os = _object_spread_props(_object_spread({}, descriptor.os), {
        name: osName,
        isUnknown: descriptor.os.name === 'unknown',
        isLinux: descriptor.os.name === 'linux',
        isWindows: descriptor.os.name === 'windows',
        isMacOS,
        isAndroid,
        isIOS,
        isIPadOS
    });
    return _object_spread_props(_object_spread({}, descriptor), {
        extensions: [
            ...descriptor.extensions,
            'flags'
        ],
        browser,
        os,
        engine
    });
}

export { flagsExtension };