@localstack/appinspector-ui 1.0.97 → 1.0.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +2584 -642
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.js +2351 -409
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -4851,20 +4851,20 @@ var RowSorting = {
|
|
|
4851
4851
|
createColumn: (column, table) => {
|
|
4852
4852
|
column.getAutoSortingFn = () => {
|
|
4853
4853
|
const firstRows = table.getFilteredRowModel().flatRows.slice(10);
|
|
4854
|
-
let
|
|
4854
|
+
let isString3 = false;
|
|
4855
4855
|
for (const row of firstRows) {
|
|
4856
4856
|
const value = row == null ? void 0 : row.getValue(column.id);
|
|
4857
4857
|
if (Object.prototype.toString.call(value) === "[object Date]") {
|
|
4858
4858
|
return sortingFns.datetime;
|
|
4859
4859
|
}
|
|
4860
4860
|
if (typeof value === "string") {
|
|
4861
|
-
|
|
4861
|
+
isString3 = true;
|
|
4862
4862
|
if (value.split(reSplitAlphaNumeric).length > 1) {
|
|
4863
4863
|
return sortingFns.alphanumeric;
|
|
4864
4864
|
}
|
|
4865
4865
|
}
|
|
4866
4866
|
}
|
|
4867
|
-
if (
|
|
4867
|
+
if (isString3) {
|
|
4868
4868
|
return sortingFns.text;
|
|
4869
4869
|
}
|
|
4870
4870
|
return sortingFns.basic;
|
|
@@ -15383,7 +15383,7 @@ var StatusMessage = ({
|
|
|
15383
15383
|
fontSize: "0.875rem",
|
|
15384
15384
|
p: 1
|
|
15385
15385
|
},
|
|
15386
|
-
children: "
|
|
15386
|
+
children: "LOCALSTACK_APP_INSPECTOR=1 localstack start"
|
|
15387
15387
|
}
|
|
15388
15388
|
),
|
|
15389
15389
|
/* @__PURE__ */ jsxs123(Box6, { sx: { display: "flex", gap: 1, mt: 2 }, children: [
|
|
@@ -15457,10 +15457,74 @@ var StatusMessage = ({
|
|
|
15457
15457
|
return /* @__PURE__ */ jsx129(Fragment6, {});
|
|
15458
15458
|
};
|
|
15459
15459
|
|
|
15460
|
+
// src/hooks/status-provider.tsx
|
|
15461
|
+
import { createContext as createContext8, useContext as useContext15, useMemo as useMemo6 } from "react";
|
|
15462
|
+
|
|
15463
|
+
// src/hooks/use-status.tsx
|
|
15464
|
+
import { useCallback as useCallback3, useEffect as useEffect11, useRef as useRef8, useState as useState6 } from "react";
|
|
15465
|
+
var useStatus = () => {
|
|
15466
|
+
const api = useAppInspectorApi();
|
|
15467
|
+
const [checking, setChecking] = useState6(true);
|
|
15468
|
+
const [status, setStatus] = useState6();
|
|
15469
|
+
const [error, setError] = useState6();
|
|
15470
|
+
const hasFetchedReference = useRef8(false);
|
|
15471
|
+
const abortControllerReference = useRef8(null);
|
|
15472
|
+
const checkStatus = useCallback3(async () => {
|
|
15473
|
+
if (abortControllerReference.current !== null) {
|
|
15474
|
+
abortControllerReference.current.abort();
|
|
15475
|
+
}
|
|
15476
|
+
const abortController = new AbortController();
|
|
15477
|
+
abortControllerReference.current = abortController;
|
|
15478
|
+
setChecking(true);
|
|
15479
|
+
try {
|
|
15480
|
+
const response = await api.getStatus();
|
|
15481
|
+
if (!abortController.signal.aborted) {
|
|
15482
|
+
setStatus(response);
|
|
15483
|
+
setError(void 0);
|
|
15484
|
+
}
|
|
15485
|
+
} catch (error_) {
|
|
15486
|
+
if (!abortController.signal.aborted) {
|
|
15487
|
+
setError(error_ instanceof Error ? error_ : new Error("Unknown error"));
|
|
15488
|
+
setStatus(void 0);
|
|
15489
|
+
}
|
|
15490
|
+
} finally {
|
|
15491
|
+
if (!abortController.signal.aborted) {
|
|
15492
|
+
setChecking(false);
|
|
15493
|
+
}
|
|
15494
|
+
}
|
|
15495
|
+
}, [api]);
|
|
15496
|
+
useEffect11(() => {
|
|
15497
|
+
if (!hasFetchedReference.current) {
|
|
15498
|
+
hasFetchedReference.current = true;
|
|
15499
|
+
void checkStatus();
|
|
15500
|
+
}
|
|
15501
|
+
}, [checkStatus]);
|
|
15502
|
+
return { checking, checkStatus, error, status };
|
|
15503
|
+
};
|
|
15504
|
+
|
|
15505
|
+
// src/hooks/status-provider.tsx
|
|
15506
|
+
import { jsx as jsx130 } from "react/jsx-runtime";
|
|
15507
|
+
var AppInspectorStatusContext = createContext8(void 0);
|
|
15508
|
+
var StatusProvider = ({ children }) => {
|
|
15509
|
+
const { checking, checkStatus, error, status } = useStatus();
|
|
15510
|
+
const value = useMemo6(
|
|
15511
|
+
() => ({ checking, checkStatus, status, statusError: error }),
|
|
15512
|
+
[checking, checkStatus, status, error]
|
|
15513
|
+
);
|
|
15514
|
+
return /* @__PURE__ */ jsx130(AppInspectorStatusContext.Provider, { value, children });
|
|
15515
|
+
};
|
|
15516
|
+
var useAppInspectorStatus = () => {
|
|
15517
|
+
const value = useContext15(AppInspectorStatusContext);
|
|
15518
|
+
if (!value) {
|
|
15519
|
+
throw new Error("@localstack-studio/ui: useAppInspectorStatus must be used within a <StatusProvider> (rendered internally by <AppInspectorContextProvider>)");
|
|
15520
|
+
}
|
|
15521
|
+
return value;
|
|
15522
|
+
};
|
|
15523
|
+
|
|
15460
15524
|
// src/hooks/use-local-storage.tsx
|
|
15461
|
-
import { useCallback as
|
|
15525
|
+
import { useCallback as useCallback4, useEffect as useEffect12, useState as useState7 } from "react";
|
|
15462
15526
|
function useLocalStorage(key, initialValue) {
|
|
15463
|
-
const [storedValue, setStoredValue] =
|
|
15527
|
+
const [storedValue, setStoredValue] = useState7(() => {
|
|
15464
15528
|
try {
|
|
15465
15529
|
const item = globalThis.localStorage.getItem(key);
|
|
15466
15530
|
return item ? JSON.parse(item) : initialValue;
|
|
@@ -15469,7 +15533,7 @@ function useLocalStorage(key, initialValue) {
|
|
|
15469
15533
|
return initialValue;
|
|
15470
15534
|
}
|
|
15471
15535
|
});
|
|
15472
|
-
const setValue =
|
|
15536
|
+
const setValue = useCallback4((value) => {
|
|
15473
15537
|
try {
|
|
15474
15538
|
setStoredValue((previousState) => {
|
|
15475
15539
|
const next = typeof value === "function" ? value(previousState) : value;
|
|
@@ -15484,7 +15548,7 @@ function useLocalStorage(key, initialValue) {
|
|
|
15484
15548
|
console.error(`Error setting localStorage key "${key}":`, error);
|
|
15485
15549
|
}
|
|
15486
15550
|
}, [key]);
|
|
15487
|
-
|
|
15551
|
+
useEffect12(() => {
|
|
15488
15552
|
const handleStorageChange = (event) => {
|
|
15489
15553
|
if (event.key === key && event.newValue !== null) {
|
|
15490
15554
|
try {
|
|
@@ -15503,49 +15567,7 @@ function useLocalStorage(key, initialValue) {
|
|
|
15503
15567
|
}
|
|
15504
15568
|
|
|
15505
15569
|
// src/hooks/use-spans.ts
|
|
15506
|
-
import { useCallback as useCallback7, useEffect as
|
|
15507
|
-
|
|
15508
|
-
// src/hooks/use-status.tsx
|
|
15509
|
-
import { useCallback as useCallback4, useEffect as useEffect12, useRef as useRef8, useState as useState7 } from "react";
|
|
15510
|
-
var useStatus = () => {
|
|
15511
|
-
const api = useAppInspectorApi();
|
|
15512
|
-
const [checking, setChecking] = useState7(true);
|
|
15513
|
-
const [status, setStatus] = useState7();
|
|
15514
|
-
const [error, setError] = useState7();
|
|
15515
|
-
const hasFetchedReference = useRef8(false);
|
|
15516
|
-
const abortControllerReference = useRef8(null);
|
|
15517
|
-
const checkStatus = useCallback4(async () => {
|
|
15518
|
-
if (abortControllerReference.current !== null) {
|
|
15519
|
-
abortControllerReference.current.abort();
|
|
15520
|
-
}
|
|
15521
|
-
const abortController = new AbortController();
|
|
15522
|
-
abortControllerReference.current = abortController;
|
|
15523
|
-
setChecking(true);
|
|
15524
|
-
try {
|
|
15525
|
-
const response = await api.getStatus();
|
|
15526
|
-
if (!abortController.signal.aborted) {
|
|
15527
|
-
setStatus(response);
|
|
15528
|
-
setError(void 0);
|
|
15529
|
-
}
|
|
15530
|
-
} catch (error_) {
|
|
15531
|
-
if (!abortController.signal.aborted) {
|
|
15532
|
-
setError(error_ instanceof Error ? error_ : new Error("Unknown error"));
|
|
15533
|
-
setStatus(void 0);
|
|
15534
|
-
}
|
|
15535
|
-
} finally {
|
|
15536
|
-
if (!abortController.signal.aborted) {
|
|
15537
|
-
setChecking(false);
|
|
15538
|
-
}
|
|
15539
|
-
}
|
|
15540
|
-
}, [api]);
|
|
15541
|
-
useEffect12(() => {
|
|
15542
|
-
if (!hasFetchedReference.current) {
|
|
15543
|
-
hasFetchedReference.current = true;
|
|
15544
|
-
void checkStatus();
|
|
15545
|
-
}
|
|
15546
|
-
}, [checkStatus]);
|
|
15547
|
-
return { checking, checkStatus, error, status };
|
|
15548
|
-
};
|
|
15570
|
+
import { useCallback as useCallback7, useEffect as useEffect16, useRef as useRef12, useState as useState10 } from "react";
|
|
15549
15571
|
|
|
15550
15572
|
// src/utils/pagination-buffer.ts
|
|
15551
15573
|
var insertSorted = (array, item, compareFunction, hint = "back") => {
|
|
@@ -15726,12 +15748,13 @@ var createPaginationBuffer = (options) => {
|
|
|
15726
15748
|
};
|
|
15727
15749
|
|
|
15728
15750
|
// src/hooks/use-spans-ws.tsx
|
|
15729
|
-
import { useCallback as useCallback6, useEffect as
|
|
15751
|
+
import { useCallback as useCallback6, useEffect as useEffect14, useRef as useRef10, useState as useState8 } from "react";
|
|
15730
15752
|
|
|
15731
15753
|
// src/config.ts
|
|
15732
15754
|
var APPINSPECTOR_API_PREFIX = "/_localstack/appinspector";
|
|
15733
15755
|
var API_VERSION = "v1";
|
|
15734
15756
|
var API_ENDPOINTS = {
|
|
15757
|
+
ANALYTICS: "/analytics",
|
|
15735
15758
|
EVENTS: "/traces/*/spans/*/events",
|
|
15736
15759
|
ROOT: "/",
|
|
15737
15760
|
SPANS: "/traces/*/spans",
|
|
@@ -15754,8 +15777,8 @@ var getAppInspectorApiUrl = (localstackEndpoint, endpoint) => {
|
|
|
15754
15777
|
var LOCALSTACK_INFO_PATH = "/_localstack/info";
|
|
15755
15778
|
|
|
15756
15779
|
// src/context.tsx
|
|
15757
|
-
import { createContext as
|
|
15758
|
-
import { useCallback as useCallback5, useMemo as
|
|
15780
|
+
import { createContext as createContext9, useContext as useContext16 } from "react";
|
|
15781
|
+
import { useCallback as useCallback5, useMemo as useMemo7 } from "react";
|
|
15759
15782
|
|
|
15760
15783
|
// src/api/client.ts
|
|
15761
15784
|
var import_semver2 = __toESM(require_semver2(), 1);
|
|
@@ -15826,6 +15849,7 @@ var createScopedLogger = (scope) => ({
|
|
|
15826
15849
|
|
|
15827
15850
|
// src/api/client.ts
|
|
15828
15851
|
var apiLogger = createScopedLogger("API");
|
|
15852
|
+
var analyticsLogger = createScopedLogger("ANALYTICS");
|
|
15829
15853
|
var makeRequest = async (options) => {
|
|
15830
15854
|
const url = getAppInspectorApiUrl(options.localstackEndpoint, options.endpoint);
|
|
15831
15855
|
try {
|
|
@@ -15973,6 +15997,20 @@ var createApiClient = ({ localstackEndpoint }) => {
|
|
|
15973
15997
|
const localstackVersion = headerVersion && import_semver2.default.coerce(headerVersion) ? headerVersion : infoVersion.status === "fulfilled" ? infoVersion.value : void 0;
|
|
15974
15998
|
return { ...statusResult.value, localstackVersion };
|
|
15975
15999
|
},
|
|
16000
|
+
postAnalytics: async (request) => {
|
|
16001
|
+
try {
|
|
16002
|
+
await makeRequest({
|
|
16003
|
+
endpoint: API_ENDPOINTS.ANALYTICS,
|
|
16004
|
+
localstackEndpoint,
|
|
16005
|
+
request: {
|
|
16006
|
+
body: JSON.stringify(request),
|
|
16007
|
+
method: "POST"
|
|
16008
|
+
}
|
|
16009
|
+
});
|
|
16010
|
+
} catch (error) {
|
|
16011
|
+
analyticsLogger.warn("Failed to post analytics event:", { error, event: request.event });
|
|
16012
|
+
}
|
|
16013
|
+
},
|
|
15976
16014
|
setStatus: async (request) => {
|
|
15977
16015
|
return makeRequest({
|
|
15978
16016
|
endpoint: API_ENDPOINTS.STATUS,
|
|
@@ -15986,18 +16024,1925 @@ var createApiClient = ({ localstackEndpoint }) => {
|
|
|
15986
16024
|
};
|
|
15987
16025
|
};
|
|
15988
16026
|
|
|
16027
|
+
// src/hooks/use-appinspector-open-analytics.ts
|
|
16028
|
+
import { useEffect as useEffect13, useRef as useRef9 } from "react";
|
|
16029
|
+
|
|
16030
|
+
// node_modules/ua-parser-js/src/main/ua-parser.mjs
|
|
16031
|
+
var LIBVERSION = "2.0.9";
|
|
16032
|
+
var UA_MAX_LENGTH = 500;
|
|
16033
|
+
var USER_AGENT = "user-agent";
|
|
16034
|
+
var EMPTY = "";
|
|
16035
|
+
var UNKNOWN = "?";
|
|
16036
|
+
var TYPEOF = {
|
|
16037
|
+
FUNCTION: "function",
|
|
16038
|
+
OBJECT: "object",
|
|
16039
|
+
STRING: "string",
|
|
16040
|
+
UNDEFINED: "undefined"
|
|
16041
|
+
};
|
|
16042
|
+
var BROWSER = "browser";
|
|
16043
|
+
var CPU = "cpu";
|
|
16044
|
+
var DEVICE = "device";
|
|
16045
|
+
var ENGINE = "engine";
|
|
16046
|
+
var OS = "os";
|
|
16047
|
+
var RESULT = "result";
|
|
16048
|
+
var NAME = "name";
|
|
16049
|
+
var TYPE = "type";
|
|
16050
|
+
var VENDOR = "vendor";
|
|
16051
|
+
var VERSION = "version";
|
|
16052
|
+
var ARCHITECTURE = "architecture";
|
|
16053
|
+
var MAJOR = "major";
|
|
16054
|
+
var MODEL = "model";
|
|
16055
|
+
var CONSOLE = "console";
|
|
16056
|
+
var MOBILE = "mobile";
|
|
16057
|
+
var TABLET = "tablet";
|
|
16058
|
+
var SMARTTV = "smarttv";
|
|
16059
|
+
var WEARABLE = "wearable";
|
|
16060
|
+
var XR = "xr";
|
|
16061
|
+
var EMBEDDED = "embedded";
|
|
16062
|
+
var FETCHER = "fetcher";
|
|
16063
|
+
var INAPP = "inapp";
|
|
16064
|
+
var BRANDS = "brands";
|
|
16065
|
+
var FORMFACTORS = "formFactors";
|
|
16066
|
+
var FULLVERLIST = "fullVersionList";
|
|
16067
|
+
var PLATFORM = "platform";
|
|
16068
|
+
var PLATFORMVER = "platformVersion";
|
|
16069
|
+
var BITNESS = "bitness";
|
|
16070
|
+
var CH = "sec-ch-ua";
|
|
16071
|
+
var CH_FULL_VER_LIST = CH + "-full-version-list";
|
|
16072
|
+
var CH_ARCH = CH + "-arch";
|
|
16073
|
+
var CH_BITNESS = CH + "-" + BITNESS;
|
|
16074
|
+
var CH_FORM_FACTORS = CH + "-form-factors";
|
|
16075
|
+
var CH_MOBILE = CH + "-" + MOBILE;
|
|
16076
|
+
var CH_MODEL = CH + "-" + MODEL;
|
|
16077
|
+
var CH_PLATFORM = CH + "-" + PLATFORM;
|
|
16078
|
+
var CH_PLATFORM_VER = CH_PLATFORM + "-version";
|
|
16079
|
+
var CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS];
|
|
16080
|
+
var AMAZON = "Amazon";
|
|
16081
|
+
var APPLE = "Apple";
|
|
16082
|
+
var ASUS = "ASUS";
|
|
16083
|
+
var BLACKBERRY = "BlackBerry";
|
|
16084
|
+
var GOOGLE = "Google";
|
|
16085
|
+
var HUAWEI = "Huawei";
|
|
16086
|
+
var LENOVO = "Lenovo";
|
|
16087
|
+
var HONOR = "Honor";
|
|
16088
|
+
var LG = "LG";
|
|
16089
|
+
var MICROSOFT = "Microsoft";
|
|
16090
|
+
var MOTOROLA = "Motorola";
|
|
16091
|
+
var NVIDIA = "Nvidia";
|
|
16092
|
+
var ONEPLUS = "OnePlus";
|
|
16093
|
+
var OPPO = "OPPO";
|
|
16094
|
+
var SAMSUNG = "Samsung";
|
|
16095
|
+
var SHARP = "Sharp";
|
|
16096
|
+
var SONY = "Sony";
|
|
16097
|
+
var XIAOMI = "Xiaomi";
|
|
16098
|
+
var ZEBRA = "Zebra";
|
|
16099
|
+
var CHROME = "Chrome";
|
|
16100
|
+
var CHROMIUM = "Chromium";
|
|
16101
|
+
var CHROMECAST = "Chromecast";
|
|
16102
|
+
var EDGE = "Edge";
|
|
16103
|
+
var FIREFOX = "Firefox";
|
|
16104
|
+
var OPERA = "Opera";
|
|
16105
|
+
var FACEBOOK = "Facebook";
|
|
16106
|
+
var SOGOU = "Sogou";
|
|
16107
|
+
var PREFIX_MOBILE = "Mobile ";
|
|
16108
|
+
var SUFFIX_BROWSER = " Browser";
|
|
16109
|
+
var WINDOWS = "Windows";
|
|
16110
|
+
var isWindow = typeof window !== TYPEOF.UNDEFINED;
|
|
16111
|
+
var NAVIGATOR = isWindow && window.navigator ? window.navigator : void 0;
|
|
16112
|
+
var NAVIGATOR_UADATA = NAVIGATOR && NAVIGATOR.userAgentData ? NAVIGATOR.userAgentData : void 0;
|
|
16113
|
+
var extend = function(defaultRgx, extensions) {
|
|
16114
|
+
var mergedRgx = {};
|
|
16115
|
+
var extraRgx = extensions;
|
|
16116
|
+
if (!isExtensions(extensions)) {
|
|
16117
|
+
extraRgx = {};
|
|
16118
|
+
for (var i2 in extensions) {
|
|
16119
|
+
for (var j2 in extensions[i2]) {
|
|
16120
|
+
extraRgx[j2] = extensions[i2][j2].concat(extraRgx[j2] ? extraRgx[j2] : []);
|
|
16121
|
+
}
|
|
16122
|
+
}
|
|
16123
|
+
}
|
|
16124
|
+
for (var k2 in defaultRgx) {
|
|
16125
|
+
mergedRgx[k2] = extraRgx[k2] && extraRgx[k2].length % 2 === 0 ? extraRgx[k2].concat(defaultRgx[k2]) : defaultRgx[k2];
|
|
16126
|
+
}
|
|
16127
|
+
return mergedRgx;
|
|
16128
|
+
};
|
|
16129
|
+
var enumerize = function(arr) {
|
|
16130
|
+
var enums = {};
|
|
16131
|
+
for (var i2 = 0; i2 < arr.length; i2++) {
|
|
16132
|
+
enums[arr[i2].toUpperCase()] = arr[i2];
|
|
16133
|
+
}
|
|
16134
|
+
return enums;
|
|
16135
|
+
};
|
|
16136
|
+
var has = function(str1, str2) {
|
|
16137
|
+
if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {
|
|
16138
|
+
for (var i2 in str1) {
|
|
16139
|
+
if (lowerize(str2) == lowerize(str1[i2])) return true;
|
|
16140
|
+
}
|
|
16141
|
+
return false;
|
|
16142
|
+
}
|
|
16143
|
+
return isString2(str1) ? lowerize(str2) == lowerize(str1) : false;
|
|
16144
|
+
};
|
|
16145
|
+
var isExtensions = function(obj, deep) {
|
|
16146
|
+
for (var prop in obj) {
|
|
16147
|
+
return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
|
|
16148
|
+
}
|
|
16149
|
+
};
|
|
16150
|
+
var isString2 = function(val) {
|
|
16151
|
+
return typeof val === TYPEOF.STRING;
|
|
16152
|
+
};
|
|
16153
|
+
var itemListToArray = function(header) {
|
|
16154
|
+
if (!header) return void 0;
|
|
16155
|
+
var arr = [];
|
|
16156
|
+
var tokens = strip(/\\?\"/g, header).split(",");
|
|
16157
|
+
for (var i2 = 0; i2 < tokens.length; i2++) {
|
|
16158
|
+
if (tokens[i2].indexOf(";") > -1) {
|
|
16159
|
+
var token = trim(tokens[i2]).split(";v=");
|
|
16160
|
+
arr[i2] = { brand: token[0], version: token[1] };
|
|
16161
|
+
} else {
|
|
16162
|
+
arr[i2] = trim(tokens[i2]);
|
|
16163
|
+
}
|
|
16164
|
+
}
|
|
16165
|
+
return arr;
|
|
16166
|
+
};
|
|
16167
|
+
var lowerize = function(str) {
|
|
16168
|
+
return isString2(str) ? str.toLowerCase() : str;
|
|
16169
|
+
};
|
|
16170
|
+
var majorize = function(version) {
|
|
16171
|
+
return isString2(version) ? strip(/[^\d\.]/g, version).split(".")[0] : void 0;
|
|
16172
|
+
};
|
|
16173
|
+
var setProps = function(arr) {
|
|
16174
|
+
for (var i2 in arr) {
|
|
16175
|
+
if (!arr.hasOwnProperty(i2)) continue;
|
|
16176
|
+
var propName = arr[i2];
|
|
16177
|
+
if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {
|
|
16178
|
+
this[propName[0]] = propName[1];
|
|
16179
|
+
} else {
|
|
16180
|
+
this[propName] = void 0;
|
|
16181
|
+
}
|
|
16182
|
+
}
|
|
16183
|
+
return this;
|
|
16184
|
+
};
|
|
16185
|
+
var strip = function(pattern, str) {
|
|
16186
|
+
return isString2(str) ? str.replace(pattern, EMPTY) : str;
|
|
16187
|
+
};
|
|
16188
|
+
var stripQuotes = function(str) {
|
|
16189
|
+
return strip(/\\?\"/g, str);
|
|
16190
|
+
};
|
|
16191
|
+
var trim = function(str, len) {
|
|
16192
|
+
str = strip(/^\s\s*/, String(str));
|
|
16193
|
+
return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
|
|
16194
|
+
};
|
|
16195
|
+
var rgxMapper = function(ua, arrays) {
|
|
16196
|
+
if (!ua || !arrays) return;
|
|
16197
|
+
var i2 = 0, j2, k2, p2, q2, matches, match;
|
|
16198
|
+
while (i2 < arrays.length && !matches) {
|
|
16199
|
+
var regex = arrays[i2], props = arrays[i2 + 1];
|
|
16200
|
+
j2 = k2 = 0;
|
|
16201
|
+
while (j2 < regex.length && !matches) {
|
|
16202
|
+
if (!regex[j2]) {
|
|
16203
|
+
break;
|
|
16204
|
+
}
|
|
16205
|
+
matches = regex[j2++].exec(ua);
|
|
16206
|
+
if (!!matches) {
|
|
16207
|
+
for (p2 = 0; p2 < props.length; p2++) {
|
|
16208
|
+
match = matches[++k2];
|
|
16209
|
+
q2 = props[p2];
|
|
16210
|
+
if (typeof q2 === TYPEOF.OBJECT && q2.length > 0) {
|
|
16211
|
+
if (q2.length === 2) {
|
|
16212
|
+
if (typeof q2[1] == TYPEOF.FUNCTION) {
|
|
16213
|
+
this[q2[0]] = q2[1].call(this, match);
|
|
16214
|
+
} else {
|
|
16215
|
+
this[q2[0]] = q2[1];
|
|
16216
|
+
}
|
|
16217
|
+
} else if (q2.length >= 3) {
|
|
16218
|
+
if (typeof q2[1] === TYPEOF.FUNCTION && !(q2[1].exec && q2[1].test)) {
|
|
16219
|
+
if (q2.length > 3) {
|
|
16220
|
+
this[q2[0]] = match ? q2[1].apply(this, q2.slice(2)) : void 0;
|
|
16221
|
+
} else {
|
|
16222
|
+
this[q2[0]] = match ? q2[1].call(this, match, q2[2]) : void 0;
|
|
16223
|
+
}
|
|
16224
|
+
} else {
|
|
16225
|
+
if (q2.length == 3) {
|
|
16226
|
+
this[q2[0]] = match ? match.replace(q2[1], q2[2]) : void 0;
|
|
16227
|
+
} else if (q2.length == 4) {
|
|
16228
|
+
this[q2[0]] = match ? q2[3].call(this, match.replace(q2[1], q2[2])) : void 0;
|
|
16229
|
+
} else if (q2.length > 4) {
|
|
16230
|
+
this[q2[0]] = match ? q2[3].apply(this, [match.replace(q2[1], q2[2])].concat(q2.slice(4))) : void 0;
|
|
16231
|
+
}
|
|
16232
|
+
}
|
|
16233
|
+
}
|
|
16234
|
+
} else {
|
|
16235
|
+
this[q2] = match ? match : void 0;
|
|
16236
|
+
}
|
|
16237
|
+
}
|
|
16238
|
+
}
|
|
16239
|
+
}
|
|
16240
|
+
i2 += 2;
|
|
16241
|
+
}
|
|
16242
|
+
};
|
|
16243
|
+
var strMapper = function(str, map) {
|
|
16244
|
+
for (var i2 in map) {
|
|
16245
|
+
if (typeof map[i2] === TYPEOF.OBJECT && map[i2].length > 0) {
|
|
16246
|
+
for (var j2 = 0; j2 < map[i2].length; j2++) {
|
|
16247
|
+
if (has(map[i2][j2], str)) {
|
|
16248
|
+
return i2 === UNKNOWN ? void 0 : i2;
|
|
16249
|
+
}
|
|
16250
|
+
}
|
|
16251
|
+
} else if (has(map[i2], str)) {
|
|
16252
|
+
return i2 === UNKNOWN ? void 0 : i2;
|
|
16253
|
+
}
|
|
16254
|
+
}
|
|
16255
|
+
return map.hasOwnProperty("*") ? map["*"] : str;
|
|
16256
|
+
};
|
|
16257
|
+
var windowsVersionMap = {
|
|
16258
|
+
"ME": "4.90",
|
|
16259
|
+
"NT 3.51": "3.51",
|
|
16260
|
+
"NT 4.0": "4.0",
|
|
16261
|
+
"2000": ["5.0", "5.01"],
|
|
16262
|
+
"XP": ["5.1", "5.2"],
|
|
16263
|
+
"Vista": "6.0",
|
|
16264
|
+
"7": "6.1",
|
|
16265
|
+
"8": "6.2",
|
|
16266
|
+
"8.1": "6.3",
|
|
16267
|
+
"10": ["6.4", "10.0"],
|
|
16268
|
+
"NT": ""
|
|
16269
|
+
};
|
|
16270
|
+
var formFactorsMap = {
|
|
16271
|
+
"embedded": "Automotive",
|
|
16272
|
+
"mobile": "Mobile",
|
|
16273
|
+
"tablet": ["Tablet", "EInk"],
|
|
16274
|
+
"smarttv": "TV",
|
|
16275
|
+
"wearable": "Watch",
|
|
16276
|
+
"xr": ["VR", "XR"],
|
|
16277
|
+
"?": ["Desktop", "Unknown"],
|
|
16278
|
+
"*": void 0
|
|
16279
|
+
};
|
|
16280
|
+
var browserHintsMap = {
|
|
16281
|
+
"Chrome": "Google Chrome",
|
|
16282
|
+
"Edge": "Microsoft Edge",
|
|
16283
|
+
"Edge WebView2": "Microsoft Edge WebView2",
|
|
16284
|
+
"Chrome WebView": "Android WebView",
|
|
16285
|
+
"Chrome Headless": "HeadlessChrome",
|
|
16286
|
+
"Huawei Browser": "HuaweiBrowser",
|
|
16287
|
+
"MIUI Browser": "Miui Browser",
|
|
16288
|
+
"Opera Mobi": "OperaMobile",
|
|
16289
|
+
"Yandex": "YaBrowser"
|
|
16290
|
+
};
|
|
16291
|
+
var defaultRegexes = {
|
|
16292
|
+
browser: [
|
|
16293
|
+
[
|
|
16294
|
+
// Most common regardless engine
|
|
16295
|
+
/\b(?:crmo|crios)\/([\w\.]+)/i
|
|
16296
|
+
// Chrome for Android/iOS
|
|
16297
|
+
],
|
|
16298
|
+
[VERSION, [NAME, PREFIX_MOBILE + "Chrome"]],
|
|
16299
|
+
[
|
|
16300
|
+
/webview.+edge\/([\w\.]+)/i
|
|
16301
|
+
// Microsoft Edge
|
|
16302
|
+
],
|
|
16303
|
+
[VERSION, [NAME, EDGE + " WebView"]],
|
|
16304
|
+
[
|
|
16305
|
+
/edg(?:e|ios|a)?\/([\w\.]+)/i
|
|
16306
|
+
],
|
|
16307
|
+
[VERSION, [NAME, "Edge"]],
|
|
16308
|
+
[
|
|
16309
|
+
// Presto based
|
|
16310
|
+
/(opera mini)\/([-\w\.]+)/i,
|
|
16311
|
+
// Opera Mini
|
|
16312
|
+
/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
|
|
16313
|
+
// Opera Mobi/Tablet
|
|
16314
|
+
/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
|
|
16315
|
+
// Opera
|
|
16316
|
+
],
|
|
16317
|
+
[NAME, VERSION],
|
|
16318
|
+
[
|
|
16319
|
+
/opios[\/ ]+([\w\.]+)/i
|
|
16320
|
+
// Opera mini on iphone >= 8.0
|
|
16321
|
+
],
|
|
16322
|
+
[VERSION, [NAME, OPERA + " Mini"]],
|
|
16323
|
+
[
|
|
16324
|
+
/\bop(?:rg)?x\/([\w\.]+)/i
|
|
16325
|
+
// Opera GX
|
|
16326
|
+
],
|
|
16327
|
+
[VERSION, [NAME, OPERA + " GX"]],
|
|
16328
|
+
[
|
|
16329
|
+
/\bopr\/([\w\.]+)/i
|
|
16330
|
+
// Opera Webkit
|
|
16331
|
+
],
|
|
16332
|
+
[VERSION, [NAME, OPERA]],
|
|
16333
|
+
[
|
|
16334
|
+
// Mixed
|
|
16335
|
+
/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
|
|
16336
|
+
// Baidu
|
|
16337
|
+
],
|
|
16338
|
+
[VERSION, [NAME, "Baidu"]],
|
|
16339
|
+
[
|
|
16340
|
+
/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i
|
|
16341
|
+
// Maxthon
|
|
16342
|
+
],
|
|
16343
|
+
[VERSION, [NAME, "Maxthon"]],
|
|
16344
|
+
[
|
|
16345
|
+
/(kindle)\/([\w\.]+)/i,
|
|
16346
|
+
// Kindle
|
|
16347
|
+
/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
|
|
16348
|
+
// Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
|
|
16349
|
+
// Trident based
|
|
16350
|
+
/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,
|
|
16351
|
+
// Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
|
|
16352
|
+
/(?:ms|\()(ie) ([\w\.]+)/i,
|
|
16353
|
+
// Internet Explorer
|
|
16354
|
+
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon/HiBrowser
|
|
16355
|
+
/(atlas|flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:hi|lg |ovi|qute)browser|palemoon)\/v?([-\w\.]+)/i,
|
|
16356
|
+
// Atlas/Rekonq/Puffin/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
|
16357
|
+
/(brave)(?: chrome)?\/([\d\.]+)/i,
|
|
16358
|
+
// Brave
|
|
16359
|
+
/(aloha|heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,
|
|
16360
|
+
// Aloha/HeyTap/Ovi/115/Surf
|
|
16361
|
+
/(qwant)(?:ios|mobile)\/([\d\.]+)/i,
|
|
16362
|
+
// Qwant
|
|
16363
|
+
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i
|
|
16364
|
+
// Ecosia/Weibo
|
|
16365
|
+
],
|
|
16366
|
+
[NAME, VERSION],
|
|
16367
|
+
[
|
|
16368
|
+
/quark(?:pc)?\/([-\w\.]+)/i
|
|
16369
|
+
// Quark
|
|
16370
|
+
],
|
|
16371
|
+
[VERSION, [NAME, "Quark"]],
|
|
16372
|
+
[
|
|
16373
|
+
/\bddg\/([\w\.]+)/i
|
|
16374
|
+
// DuckDuckGo
|
|
16375
|
+
],
|
|
16376
|
+
[VERSION, [NAME, "DuckDuckGo"]],
|
|
16377
|
+
[
|
|
16378
|
+
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
|
|
16379
|
+
// UCBrowser
|
|
16380
|
+
],
|
|
16381
|
+
[VERSION, [NAME, "UCBrowser"]],
|
|
16382
|
+
[
|
|
16383
|
+
/microm.+\bqbcore\/([\w\.]+)/i,
|
|
16384
|
+
// WeChat Desktop for Windows Built-in Browser
|
|
16385
|
+
/\bqbcore\/([\w\.]+).+microm/i,
|
|
16386
|
+
/micromessenger\/([\w\.]+)/i
|
|
16387
|
+
// WeChat
|
|
16388
|
+
],
|
|
16389
|
+
[VERSION, [NAME, "WeChat"]],
|
|
16390
|
+
[
|
|
16391
|
+
/konqueror\/([\w\.]+)/i
|
|
16392
|
+
// Konqueror
|
|
16393
|
+
],
|
|
16394
|
+
[VERSION, [NAME, "Konqueror"]],
|
|
16395
|
+
[
|
|
16396
|
+
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
|
|
16397
|
+
// IE11
|
|
16398
|
+
],
|
|
16399
|
+
[VERSION, [NAME, "IE"]],
|
|
16400
|
+
[
|
|
16401
|
+
/ya(?:search)?browser\/([\w\.]+)/i
|
|
16402
|
+
// Yandex
|
|
16403
|
+
],
|
|
16404
|
+
[VERSION, [NAME, "Yandex"]],
|
|
16405
|
+
[
|
|
16406
|
+
/slbrowser\/([\w\.]+)/i
|
|
16407
|
+
// Smart Lenovo Browser
|
|
16408
|
+
],
|
|
16409
|
+
[VERSION, [NAME, "Smart " + LENOVO + SUFFIX_BROWSER]],
|
|
16410
|
+
[
|
|
16411
|
+
/(av(?:ast|g|ira))\/([\w\.]+)/i
|
|
16412
|
+
// Avast/AVG/Avira Secure Browser
|
|
16413
|
+
],
|
|
16414
|
+
[[NAME, /(.+)/, "$1 Secure" + SUFFIX_BROWSER], VERSION],
|
|
16415
|
+
[
|
|
16416
|
+
/norton\/([\w\.]+)/i
|
|
16417
|
+
// Norton Private Browser
|
|
16418
|
+
],
|
|
16419
|
+
[VERSION, [NAME, "Norton Private" + SUFFIX_BROWSER]],
|
|
16420
|
+
[
|
|
16421
|
+
/\bfocus\/([\w\.]+)/i
|
|
16422
|
+
// Firefox Focus
|
|
16423
|
+
],
|
|
16424
|
+
[VERSION, [NAME, FIREFOX + " Focus"]],
|
|
16425
|
+
[
|
|
16426
|
+
/ mms\/([\w\.]+)$/i
|
|
16427
|
+
// Opera Neon
|
|
16428
|
+
],
|
|
16429
|
+
[VERSION, [NAME, OPERA + " Neon"]],
|
|
16430
|
+
[
|
|
16431
|
+
/ opt\/([\w\.]+)$/i
|
|
16432
|
+
// Opera Touch
|
|
16433
|
+
],
|
|
16434
|
+
[VERSION, [NAME, OPERA + " Touch"]],
|
|
16435
|
+
[
|
|
16436
|
+
/coc_coc\w+\/([\w\.]+)/i
|
|
16437
|
+
// Coc Coc Browser
|
|
16438
|
+
],
|
|
16439
|
+
[VERSION, [NAME, "Coc Coc"]],
|
|
16440
|
+
[
|
|
16441
|
+
/dolfin\/([\w\.]+)/i
|
|
16442
|
+
// Dolphin
|
|
16443
|
+
],
|
|
16444
|
+
[VERSION, [NAME, "Dolphin"]],
|
|
16445
|
+
[
|
|
16446
|
+
/coast\/([\w\.]+)/i
|
|
16447
|
+
// Opera Coast
|
|
16448
|
+
],
|
|
16449
|
+
[VERSION, [NAME, OPERA + " Coast"]],
|
|
16450
|
+
[
|
|
16451
|
+
/miuibrowser\/([\w\.]+)/i
|
|
16452
|
+
// MIUI Browser
|
|
16453
|
+
],
|
|
16454
|
+
[VERSION, [NAME, "MIUI" + SUFFIX_BROWSER]],
|
|
16455
|
+
[
|
|
16456
|
+
/fxios\/([\w\.-]+)/i
|
|
16457
|
+
// Firefox for iOS
|
|
16458
|
+
],
|
|
16459
|
+
[VERSION, [NAME, PREFIX_MOBILE + FIREFOX]],
|
|
16460
|
+
[
|
|
16461
|
+
/\bqihoobrowser\/?([\w\.]*)/i
|
|
16462
|
+
// 360
|
|
16463
|
+
],
|
|
16464
|
+
[VERSION, [NAME, "360"]],
|
|
16465
|
+
[
|
|
16466
|
+
/\b(qq)\/([\w\.]+)/i
|
|
16467
|
+
// QQ
|
|
16468
|
+
],
|
|
16469
|
+
[[NAME, /(.+)/, "$1Browser"], VERSION],
|
|
16470
|
+
[
|
|
16471
|
+
/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
|
|
16472
|
+
],
|
|
16473
|
+
[[NAME, /(.+)/, "$1" + SUFFIX_BROWSER], VERSION],
|
|
16474
|
+
[
|
|
16475
|
+
// Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
|
|
16476
|
+
/samsungbrowser\/([\w\.]+)/i
|
|
16477
|
+
// Samsung Internet
|
|
16478
|
+
],
|
|
16479
|
+
[VERSION, [NAME, SAMSUNG + " Internet"]],
|
|
16480
|
+
[
|
|
16481
|
+
/metasr[\/ ]?([\d\.]+)/i
|
|
16482
|
+
// Sogou Explorer
|
|
16483
|
+
],
|
|
16484
|
+
[VERSION, [NAME, SOGOU + " Explorer"]],
|
|
16485
|
+
[
|
|
16486
|
+
/(sogou)mo\w+\/([\d\.]+)/i
|
|
16487
|
+
// Sogou Mobile
|
|
16488
|
+
],
|
|
16489
|
+
[[NAME, SOGOU + " Mobile"], VERSION],
|
|
16490
|
+
[
|
|
16491
|
+
/(electron)\/([\w\.]+) safari/i,
|
|
16492
|
+
// Electron-based App
|
|
16493
|
+
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
|
|
16494
|
+
// Tesla
|
|
16495
|
+
/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i
|
|
16496
|
+
// QQ/2345
|
|
16497
|
+
],
|
|
16498
|
+
[NAME, VERSION],
|
|
16499
|
+
[
|
|
16500
|
+
/(lbbrowser|luakit|rekonq|steam(?= (clie|tenf|gameo)))/i
|
|
16501
|
+
// LieBao Browser/Luakit/Rekonq/Steam
|
|
16502
|
+
],
|
|
16503
|
+
[NAME],
|
|
16504
|
+
[
|
|
16505
|
+
/ome\/([\w\.]+).+(iron(?= saf)|360(?=[es]e$))/i
|
|
16506
|
+
// Iron / 360
|
|
16507
|
+
],
|
|
16508
|
+
[VERSION, NAME],
|
|
16509
|
+
[
|
|
16510
|
+
// WebView
|
|
16511
|
+
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
|
|
16512
|
+
// Facebook App for iOS & Android
|
|
16513
|
+
],
|
|
16514
|
+
[[NAME, FACEBOOK], VERSION, [TYPE, INAPP]],
|
|
16515
|
+
[
|
|
16516
|
+
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
|
|
16517
|
+
// Kakao App
|
|
16518
|
+
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
|
|
16519
|
+
// Naver InApp
|
|
16520
|
+
/(daum)apps[\/ ]([\w\.]+)/i,
|
|
16521
|
+
// Daum App
|
|
16522
|
+
/safari (line)\/([\w\.]+)/i,
|
|
16523
|
+
// Line App for iOS
|
|
16524
|
+
/\b(line)\/([\w\.]+)\/iab/i,
|
|
16525
|
+
// Line App for Android
|
|
16526
|
+
/(alipay)client\/([\w\.]+)/i,
|
|
16527
|
+
// Alipay
|
|
16528
|
+
/(twitter)(?:and| f.+e\/([\w\.]+))/i,
|
|
16529
|
+
// Twitter
|
|
16530
|
+
/(bing)(?:web|sapphire)\/([\w\.]+)/i,
|
|
16531
|
+
// Bing
|
|
16532
|
+
/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i
|
|
16533
|
+
// Instagram/Snapchat/Klarna
|
|
16534
|
+
],
|
|
16535
|
+
[NAME, VERSION, [TYPE, INAPP]],
|
|
16536
|
+
[
|
|
16537
|
+
/\bgsa\/([\w\.]+) .*safari\//i
|
|
16538
|
+
// Google Search Appliance on iOS
|
|
16539
|
+
],
|
|
16540
|
+
[VERSION, [NAME, "GSA"], [TYPE, INAPP]],
|
|
16541
|
+
[
|
|
16542
|
+
/(?:musical_ly|trill)(?:.+app_?version\/|_)([\w\.]+)/i
|
|
16543
|
+
// TikTok
|
|
16544
|
+
],
|
|
16545
|
+
[VERSION, [NAME, "TikTok"], [TYPE, INAPP]],
|
|
16546
|
+
[
|
|
16547
|
+
/\[(linkedin)app\]/i
|
|
16548
|
+
// LinkedIn App for iOS & Android
|
|
16549
|
+
],
|
|
16550
|
+
[NAME, [TYPE, INAPP]],
|
|
16551
|
+
[
|
|
16552
|
+
/(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i
|
|
16553
|
+
// Zalo
|
|
16554
|
+
],
|
|
16555
|
+
[[NAME, /(.+)/, "Zalo"], VERSION, [TYPE, INAPP]],
|
|
16556
|
+
[
|
|
16557
|
+
/(chromium)[\/ ]([-\w\.]+)/i
|
|
16558
|
+
// Chromium
|
|
16559
|
+
],
|
|
16560
|
+
[NAME, VERSION],
|
|
16561
|
+
[
|
|
16562
|
+
/ome-(lighthouse)$/i
|
|
16563
|
+
// Chrome Lighthouse
|
|
16564
|
+
],
|
|
16565
|
+
[NAME, [TYPE, FETCHER]],
|
|
16566
|
+
[
|
|
16567
|
+
/headlesschrome(?:\/([\w\.]+)| )/i
|
|
16568
|
+
// Chrome Headless
|
|
16569
|
+
],
|
|
16570
|
+
[VERSION, [NAME, CHROME + " Headless"]],
|
|
16571
|
+
[
|
|
16572
|
+
/wv\).+chrome\/([\w\.]+).+edgw\//i
|
|
16573
|
+
// Edge WebView2
|
|
16574
|
+
],
|
|
16575
|
+
[VERSION, [NAME, EDGE + " WebView2"]],
|
|
16576
|
+
[
|
|
16577
|
+
/ wv\).+(chrome)\/([\w\.]+)/i
|
|
16578
|
+
// Chrome WebView
|
|
16579
|
+
],
|
|
16580
|
+
[[NAME, CHROME + " WebView"], VERSION],
|
|
16581
|
+
[
|
|
16582
|
+
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
|
|
16583
|
+
// Android Browser
|
|
16584
|
+
],
|
|
16585
|
+
[VERSION, [NAME, "Android" + SUFFIX_BROWSER]],
|
|
16586
|
+
[
|
|
16587
|
+
/chrome\/([\w\.]+) mobile/i
|
|
16588
|
+
// Chrome Mobile
|
|
16589
|
+
],
|
|
16590
|
+
[VERSION, [NAME, PREFIX_MOBILE + "Chrome"]],
|
|
16591
|
+
[
|
|
16592
|
+
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
|
|
16593
|
+
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
|
16594
|
+
],
|
|
16595
|
+
[NAME, VERSION],
|
|
16596
|
+
[
|
|
16597
|
+
/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i
|
|
16598
|
+
// Safari Mobile
|
|
16599
|
+
],
|
|
16600
|
+
[VERSION, [NAME, PREFIX_MOBILE + "Safari"]],
|
|
16601
|
+
[
|
|
16602
|
+
/iphone .*mobile(?:\/\w+ | ?)safari/i
|
|
16603
|
+
],
|
|
16604
|
+
[[NAME, PREFIX_MOBILE + "Safari"]],
|
|
16605
|
+
[
|
|
16606
|
+
/version\/([\w\.\,]+) .*(safari)/i
|
|
16607
|
+
// Safari
|
|
16608
|
+
],
|
|
16609
|
+
[VERSION, NAME],
|
|
16610
|
+
[
|
|
16611
|
+
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
|
|
16612
|
+
// Safari < 3.0
|
|
16613
|
+
],
|
|
16614
|
+
[NAME, [VERSION, "1"]],
|
|
16615
|
+
[
|
|
16616
|
+
/(webkit|khtml)\/([\w\.]+)/i
|
|
16617
|
+
],
|
|
16618
|
+
[NAME, VERSION],
|
|
16619
|
+
[
|
|
16620
|
+
// Gecko based
|
|
16621
|
+
/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i
|
|
16622
|
+
// Firefox Mobile
|
|
16623
|
+
],
|
|
16624
|
+
[[NAME, PREFIX_MOBILE + FIREFOX], VERSION],
|
|
16625
|
+
[
|
|
16626
|
+
/(navigator|netscape\d?)\/([-\w\.]+)/i
|
|
16627
|
+
// Netscape
|
|
16628
|
+
],
|
|
16629
|
+
[[NAME, "Netscape"], VERSION],
|
|
16630
|
+
[
|
|
16631
|
+
/(wolvic|librewolf)\/([\w\.]+)/i
|
|
16632
|
+
// Wolvic/LibreWolf
|
|
16633
|
+
],
|
|
16634
|
+
[NAME, VERSION],
|
|
16635
|
+
[
|
|
16636
|
+
/mobile vr; rv:([\w\.]+)\).+firefox/i
|
|
16637
|
+
// Firefox Reality
|
|
16638
|
+
],
|
|
16639
|
+
[VERSION, [NAME, FIREFOX + " Reality"]],
|
|
16640
|
+
[
|
|
16641
|
+
/ekiohf.+(flow)\/([\w\.]+)/i,
|
|
16642
|
+
// Flow
|
|
16643
|
+
/(swiftfox)/i,
|
|
16644
|
+
// Swiftfox
|
|
16645
|
+
/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
|
|
16646
|
+
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
|
16647
|
+
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,
|
|
16648
|
+
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
|
16649
|
+
/(firefox)\/([\w\.]+)/i,
|
|
16650
|
+
// Other Firefox-based
|
|
16651
|
+
/(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i,
|
|
16652
|
+
// Mozilla
|
|
16653
|
+
// Other
|
|
16654
|
+
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
16655
|
+
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
|
16656
|
+
/\b(links) \(([\w\.]+)/i
|
|
16657
|
+
// Links
|
|
16658
|
+
],
|
|
16659
|
+
[NAME, [VERSION, /_/g, "."]],
|
|
16660
|
+
[
|
|
16661
|
+
/(cobalt)\/([\w\.]+)/i
|
|
16662
|
+
// Cobalt
|
|
16663
|
+
],
|
|
16664
|
+
[NAME, [VERSION, /[^\d\.]+./, EMPTY]]
|
|
16665
|
+
],
|
|
16666
|
+
cpu: [
|
|
16667
|
+
[
|
|
16668
|
+
/\b((amd|x|x86[-_]?|wow|win)64)\b/i
|
|
16669
|
+
// AMD64 (x64)
|
|
16670
|
+
],
|
|
16671
|
+
[[ARCHITECTURE, "amd64"]],
|
|
16672
|
+
[
|
|
16673
|
+
/(ia32(?=;))/i,
|
|
16674
|
+
// IA32 (quicktime)
|
|
16675
|
+
/\b((i[346]|x)86)(pc)?\b/i
|
|
16676
|
+
// IA32 (x86)
|
|
16677
|
+
],
|
|
16678
|
+
[[ARCHITECTURE, "ia32"]],
|
|
16679
|
+
[
|
|
16680
|
+
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i
|
|
16681
|
+
// ARM64
|
|
16682
|
+
],
|
|
16683
|
+
[[ARCHITECTURE, "arm64"]],
|
|
16684
|
+
[
|
|
16685
|
+
/\b(arm(v[67])?ht?n?[fl]p?)\b/i
|
|
16686
|
+
// ARMHF
|
|
16687
|
+
],
|
|
16688
|
+
[[ARCHITECTURE, "armhf"]],
|
|
16689
|
+
[
|
|
16690
|
+
// PocketPC mistakenly identified as PowerPC
|
|
16691
|
+
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
|
16692
|
+
],
|
|
16693
|
+
[[ARCHITECTURE, "arm"]],
|
|
16694
|
+
[
|
|
16695
|
+
/ sun4\w[;\)]/i
|
|
16696
|
+
// SPARC
|
|
16697
|
+
],
|
|
16698
|
+
[[ARCHITECTURE, "sparc"]],
|
|
16699
|
+
[
|
|
16700
|
+
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
|
16701
|
+
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,
|
|
16702
|
+
/((ppc|powerpc)(64)?)( mac|;|\))/i,
|
|
16703
|
+
// PowerPC
|
|
16704
|
+
/(?:osf1|[freopnt]{3,4}bsd) (alpha)/i
|
|
16705
|
+
// Alpha
|
|
16706
|
+
],
|
|
16707
|
+
[[ARCHITECTURE, /ower/, EMPTY, lowerize]],
|
|
16708
|
+
[
|
|
16709
|
+
/mc680.0/i
|
|
16710
|
+
],
|
|
16711
|
+
[[ARCHITECTURE, "68k"]],
|
|
16712
|
+
[
|
|
16713
|
+
/winnt.+\[axp/i
|
|
16714
|
+
],
|
|
16715
|
+
[[ARCHITECTURE, "alpha"]]
|
|
16716
|
+
],
|
|
16717
|
+
device: [
|
|
16718
|
+
[
|
|
16719
|
+
//////////////////////////
|
|
16720
|
+
// MOBILES & TABLETS
|
|
16721
|
+
/////////////////////////
|
|
16722
|
+
// Samsung
|
|
16723
|
+
/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
|
|
16724
|
+
],
|
|
16725
|
+
[MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],
|
|
16726
|
+
[
|
|
16727
|
+
/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
|
16728
|
+
/samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,
|
|
16729
|
+
/sec-(sgh\w+)/i
|
|
16730
|
+
],
|
|
16731
|
+
[MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],
|
|
16732
|
+
[
|
|
16733
|
+
// Apple
|
|
16734
|
+
/(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i
|
|
16735
|
+
// iPod/iPhone
|
|
16736
|
+
],
|
|
16737
|
+
[MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],
|
|
16738
|
+
[
|
|
16739
|
+
/\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i,
|
|
16740
|
+
// iPad
|
|
16741
|
+
/\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i
|
|
16742
|
+
],
|
|
16743
|
+
[MODEL, [VENDOR, APPLE], [TYPE, TABLET]],
|
|
16744
|
+
[
|
|
16745
|
+
/(macintosh);/i
|
|
16746
|
+
],
|
|
16747
|
+
[MODEL, [VENDOR, APPLE]],
|
|
16748
|
+
[
|
|
16749
|
+
// Sharp
|
|
16750
|
+
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
16751
|
+
],
|
|
16752
|
+
[MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],
|
|
16753
|
+
[
|
|
16754
|
+
// Honor
|
|
16755
|
+
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
|
16756
|
+
],
|
|
16757
|
+
[MODEL, [VENDOR, HONOR], [TYPE, TABLET]],
|
|
16758
|
+
[
|
|
16759
|
+
/honor([-\w ]+)[;\)]/i
|
|
16760
|
+
],
|
|
16761
|
+
[MODEL, [VENDOR, HONOR], [TYPE, MOBILE]],
|
|
16762
|
+
[
|
|
16763
|
+
// Huawei
|
|
16764
|
+
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
|
16765
|
+
],
|
|
16766
|
+
[MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],
|
|
16767
|
+
[
|
|
16768
|
+
/(?:huawei) ?([-\w ]+)[;\)]/i,
|
|
16769
|
+
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i
|
|
16770
|
+
],
|
|
16771
|
+
[MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],
|
|
16772
|
+
[
|
|
16773
|
+
// Xiaomi
|
|
16774
|
+
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
|
16775
|
+
/\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i
|
|
16776
|
+
// Mi Pad tablets
|
|
16777
|
+
],
|
|
16778
|
+
[[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]],
|
|
16779
|
+
[
|
|
16780
|
+
/\b; (\w+) build\/hm\1/i,
|
|
16781
|
+
// Xiaomi Hongmi 'numeric' models
|
|
16782
|
+
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
|
|
16783
|
+
// Xiaomi Hongmi
|
|
16784
|
+
// Xiaomi Redmi / POCO / Black Shark / Qin
|
|
16785
|
+
/oid[^\)]+; (redmi[\-_ ]?(?:note|k)?[\w_ ]+|m?[12]\d[01]\d\w{3,6}|poco[\w ]+|(shark )?\w{3}-[ah]0|qin ?[1-3](s\+|ultra| pro)?)( bui|; wv|\))/i,
|
|
16786
|
+
// Xiaomi Mi
|
|
16787
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,
|
|
16788
|
+
/ ([\w ]+) miui\/v?\d/i
|
|
16789
|
+
],
|
|
16790
|
+
[[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]],
|
|
16791
|
+
[
|
|
16792
|
+
// OnePlus
|
|
16793
|
+
/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-l]\w[1m]10)\b/i,
|
|
16794
|
+
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
|
16795
|
+
],
|
|
16796
|
+
[MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]],
|
|
16797
|
+
[
|
|
16798
|
+
// OPPO
|
|
16799
|
+
/; (\w+) bui.+ oppo/i,
|
|
16800
|
+
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
|
16801
|
+
],
|
|
16802
|
+
[MODEL, [VENDOR, OPPO], [TYPE, MOBILE]],
|
|
16803
|
+
[
|
|
16804
|
+
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
|
16805
|
+
],
|
|
16806
|
+
[MODEL, [VENDOR, strMapper, { "OnePlus": ["203", "304", "403", "404", "413", "415"], "*": OPPO }], [TYPE, TABLET]],
|
|
16807
|
+
[
|
|
16808
|
+
// BLU
|
|
16809
|
+
/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
|
|
16810
|
+
// Vivo series
|
|
16811
|
+
],
|
|
16812
|
+
[MODEL, [VENDOR, "BLU"], [TYPE, MOBILE]],
|
|
16813
|
+
[
|
|
16814
|
+
// Vivo
|
|
16815
|
+
/; vivo (\w+)(?: bui|\))/i,
|
|
16816
|
+
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
|
16817
|
+
],
|
|
16818
|
+
[MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]],
|
|
16819
|
+
[
|
|
16820
|
+
// Realme
|
|
16821
|
+
/\b(rmx[1-3]\d{3})(?: bui|;|\))/i
|
|
16822
|
+
],
|
|
16823
|
+
[MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]],
|
|
16824
|
+
[
|
|
16825
|
+
// Lenovo
|
|
16826
|
+
/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
|
|
16827
|
+
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
|
16828
|
+
],
|
|
16829
|
+
[MODEL, [VENDOR, LENOVO], [TYPE, TABLET]],
|
|
16830
|
+
[
|
|
16831
|
+
/lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i
|
|
16832
|
+
],
|
|
16833
|
+
[MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]],
|
|
16834
|
+
[
|
|
16835
|
+
// Motorola
|
|
16836
|
+
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
|
16837
|
+
/\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,
|
|
16838
|
+
/((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i
|
|
16839
|
+
],
|
|
16840
|
+
[MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],
|
|
16841
|
+
[
|
|
16842
|
+
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
|
16843
|
+
],
|
|
16844
|
+
[MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],
|
|
16845
|
+
[
|
|
16846
|
+
// LG
|
|
16847
|
+
/\b(?:lg)?([vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
|
16848
|
+
],
|
|
16849
|
+
[MODEL, [VENDOR, LG], [TYPE, TABLET]],
|
|
16850
|
+
[
|
|
16851
|
+
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
|
16852
|
+
/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
|
|
16853
|
+
/\blg-?([\d\w]+) bui/i
|
|
16854
|
+
],
|
|
16855
|
+
[MODEL, [VENDOR, LG], [TYPE, MOBILE]],
|
|
16856
|
+
[
|
|
16857
|
+
// Nokia
|
|
16858
|
+
/(nokia) (t[12][01])/i
|
|
16859
|
+
],
|
|
16860
|
+
[VENDOR, MODEL, [TYPE, TABLET]],
|
|
16861
|
+
[
|
|
16862
|
+
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
|
16863
|
+
/nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i
|
|
16864
|
+
],
|
|
16865
|
+
[[MODEL, /_/g, " "], [TYPE, MOBILE], [VENDOR, "Nokia"]],
|
|
16866
|
+
[
|
|
16867
|
+
// Google
|
|
16868
|
+
/(pixel (c|tablet))\b/i
|
|
16869
|
+
// Google Pixel C/Tablet
|
|
16870
|
+
],
|
|
16871
|
+
[MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],
|
|
16872
|
+
[
|
|
16873
|
+
// Google Pixel
|
|
16874
|
+
/droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i
|
|
16875
|
+
],
|
|
16876
|
+
[MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],
|
|
16877
|
+
[
|
|
16878
|
+
/(google) (pixelbook( go)?)/i
|
|
16879
|
+
],
|
|
16880
|
+
[VENDOR, MODEL],
|
|
16881
|
+
[
|
|
16882
|
+
// Sony
|
|
16883
|
+
/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
|
16884
|
+
],
|
|
16885
|
+
[MODEL, [VENDOR, SONY], [TYPE, MOBILE]],
|
|
16886
|
+
[
|
|
16887
|
+
/sony tablet [ps]/i,
|
|
16888
|
+
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
|
16889
|
+
],
|
|
16890
|
+
[[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]],
|
|
16891
|
+
[
|
|
16892
|
+
// Amazon
|
|
16893
|
+
/(alexa)webm/i,
|
|
16894
|
+
/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
|
|
16895
|
+
// Kindle Fire without Silk / Echo Show
|
|
16896
|
+
/(kf[a-z]+)( bui|\)).+silk\//i
|
|
16897
|
+
// Kindle Fire HD
|
|
16898
|
+
],
|
|
16899
|
+
[MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],
|
|
16900
|
+
[
|
|
16901
|
+
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
|
|
16902
|
+
// Fire Phone
|
|
16903
|
+
],
|
|
16904
|
+
[[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]],
|
|
16905
|
+
[
|
|
16906
|
+
// BlackBerry
|
|
16907
|
+
/(playbook);[-\w\),; ]+(rim)/i
|
|
16908
|
+
// BlackBerry PlayBook
|
|
16909
|
+
],
|
|
16910
|
+
[MODEL, VENDOR, [TYPE, TABLET]],
|
|
16911
|
+
[
|
|
16912
|
+
/\b((?:bb[a-f]|st[hv])100-\d)/i,
|
|
16913
|
+
/(?:blackberry|\(bb10;) (\w+)/i
|
|
16914
|
+
],
|
|
16915
|
+
[MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],
|
|
16916
|
+
[
|
|
16917
|
+
// Asus
|
|
16918
|
+
/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
|
|
16919
|
+
],
|
|
16920
|
+
[MODEL, [VENDOR, ASUS], [TYPE, TABLET]],
|
|
16921
|
+
[
|
|
16922
|
+
/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
|
|
16923
|
+
],
|
|
16924
|
+
[MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],
|
|
16925
|
+
[
|
|
16926
|
+
// HTC
|
|
16927
|
+
/(nexus 9)/i
|
|
16928
|
+
// HTC Nexus 9
|
|
16929
|
+
],
|
|
16930
|
+
[MODEL, [VENDOR, "HTC"], [TYPE, TABLET]],
|
|
16931
|
+
[
|
|
16932
|
+
/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
|
|
16933
|
+
// HTC
|
|
16934
|
+
// ZTE
|
|
16935
|
+
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
|
16936
|
+
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
|
|
16937
|
+
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
|
16938
|
+
],
|
|
16939
|
+
[VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]],
|
|
16940
|
+
[
|
|
16941
|
+
// TCL
|
|
16942
|
+
/tcl (xess p17aa)/i,
|
|
16943
|
+
/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i
|
|
16944
|
+
],
|
|
16945
|
+
[MODEL, [VENDOR, "TCL"], [TYPE, TABLET]],
|
|
16946
|
+
[
|
|
16947
|
+
/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i
|
|
16948
|
+
],
|
|
16949
|
+
[MODEL, [VENDOR, "TCL"], [TYPE, MOBILE]],
|
|
16950
|
+
[
|
|
16951
|
+
// itel
|
|
16952
|
+
/(itel) ((\w+))/i
|
|
16953
|
+
],
|
|
16954
|
+
[[VENDOR, lowerize], MODEL, [TYPE, strMapper, { "tablet": ["p10001l", "w7001"], "*": "mobile" }]],
|
|
16955
|
+
[
|
|
16956
|
+
// Acer
|
|
16957
|
+
/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
|
|
16958
|
+
],
|
|
16959
|
+
[MODEL, [VENDOR, "Acer"], [TYPE, TABLET]],
|
|
16960
|
+
[
|
|
16961
|
+
// Meizu
|
|
16962
|
+
/droid.+; (m[1-5] note) bui/i,
|
|
16963
|
+
/\bmz-([-\w]{2,})/i
|
|
16964
|
+
],
|
|
16965
|
+
[MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]],
|
|
16966
|
+
[
|
|
16967
|
+
// Ulefone
|
|
16968
|
+
/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
|
|
16969
|
+
],
|
|
16970
|
+
[MODEL, [VENDOR, "Ulefone"], [TYPE, MOBILE]],
|
|
16971
|
+
[
|
|
16972
|
+
// Energizer
|
|
16973
|
+
/; (energy ?\w+)(?: bui|\))/i,
|
|
16974
|
+
/; energizer ([\w ]+)(?: bui|\))/i
|
|
16975
|
+
],
|
|
16976
|
+
[MODEL, [VENDOR, "Energizer"], [TYPE, MOBILE]],
|
|
16977
|
+
[
|
|
16978
|
+
// Cat
|
|
16979
|
+
/; cat (b35);/i,
|
|
16980
|
+
/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
|
|
16981
|
+
],
|
|
16982
|
+
[MODEL, [VENDOR, "Cat"], [TYPE, MOBILE]],
|
|
16983
|
+
[
|
|
16984
|
+
// Smartfren
|
|
16985
|
+
/((?:new )?andromax[\w- ]+)(?: bui|\))/i
|
|
16986
|
+
],
|
|
16987
|
+
[MODEL, [VENDOR, "Smartfren"], [TYPE, MOBILE]],
|
|
16988
|
+
[
|
|
16989
|
+
// Nothing
|
|
16990
|
+
/droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i
|
|
16991
|
+
],
|
|
16992
|
+
[MODEL, [VENDOR, "Nothing"], [TYPE, MOBILE]],
|
|
16993
|
+
[
|
|
16994
|
+
// Archos
|
|
16995
|
+
/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
|
|
16996
|
+
/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
|
|
16997
|
+
],
|
|
16998
|
+
[MODEL, [VENDOR, "Archos"], [TYPE, TABLET]],
|
|
16999
|
+
[
|
|
17000
|
+
/archos ([\w ]+)( b|\))/i,
|
|
17001
|
+
/; (ac[3-6]\d\w{2,8})( b|\))/i
|
|
17002
|
+
],
|
|
17003
|
+
[MODEL, [VENDOR, "Archos"], [TYPE, MOBILE]],
|
|
17004
|
+
[
|
|
17005
|
+
// HMD
|
|
17006
|
+
/; (n159v)/i
|
|
17007
|
+
],
|
|
17008
|
+
[MODEL, [VENDOR, "HMD"], [TYPE, MOBILE]],
|
|
17009
|
+
[
|
|
17010
|
+
// MIXED
|
|
17011
|
+
/(imo) (tab \w+)/i,
|
|
17012
|
+
// IMO
|
|
17013
|
+
/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i
|
|
17014
|
+
// Infinix XPad / Tecno
|
|
17015
|
+
],
|
|
17016
|
+
[VENDOR, MODEL, [TYPE, TABLET]],
|
|
17017
|
+
[
|
|
17018
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
|
17019
|
+
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
|
|
17020
|
+
// BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
|
|
17021
|
+
/; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,
|
|
17022
|
+
/(hp) ([\w ]+\w)/i,
|
|
17023
|
+
// HP iPAQ
|
|
17024
|
+
/(microsoft); (lumia[\w ]+)/i,
|
|
17025
|
+
// Microsoft Lumia
|
|
17026
|
+
/(oppo) ?([\w ]+) bui/i,
|
|
17027
|
+
// OPPO
|
|
17028
|
+
/(hisense) ([ehv][\w ]+)\)/i,
|
|
17029
|
+
// Hisense
|
|
17030
|
+
/droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i
|
|
17031
|
+
// Philips
|
|
17032
|
+
],
|
|
17033
|
+
[VENDOR, MODEL, [TYPE, MOBILE]],
|
|
17034
|
+
[
|
|
17035
|
+
/(kobo)\s(ereader|touch)/i,
|
|
17036
|
+
// Kobo
|
|
17037
|
+
/(hp).+(touchpad(?!.+tablet)|tablet)/i,
|
|
17038
|
+
// HP TouchPad
|
|
17039
|
+
/(kindle)\/([\w\.]+)/i
|
|
17040
|
+
// Kindle
|
|
17041
|
+
],
|
|
17042
|
+
[VENDOR, MODEL, [TYPE, TABLET]],
|
|
17043
|
+
[
|
|
17044
|
+
/(surface duo)/i
|
|
17045
|
+
// Surface Duo
|
|
17046
|
+
],
|
|
17047
|
+
[MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],
|
|
17048
|
+
[
|
|
17049
|
+
/droid [\d\.]+; (fp\du?)(?: b|\))/i
|
|
17050
|
+
// Fairphone
|
|
17051
|
+
],
|
|
17052
|
+
[MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]],
|
|
17053
|
+
[
|
|
17054
|
+
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i
|
|
17055
|
+
// Nvidia Tablets
|
|
17056
|
+
],
|
|
17057
|
+
[MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]],
|
|
17058
|
+
[
|
|
17059
|
+
/(sprint) (\w+)/i
|
|
17060
|
+
// Sprint Phones
|
|
17061
|
+
],
|
|
17062
|
+
[VENDOR, MODEL, [TYPE, MOBILE]],
|
|
17063
|
+
[
|
|
17064
|
+
/(kin\.[onetw]{3})/i
|
|
17065
|
+
// Microsoft Kin
|
|
17066
|
+
],
|
|
17067
|
+
[[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]],
|
|
17068
|
+
[
|
|
17069
|
+
/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
|
|
17070
|
+
// Zebra
|
|
17071
|
+
],
|
|
17072
|
+
[MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],
|
|
17073
|
+
[
|
|
17074
|
+
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
|
17075
|
+
],
|
|
17076
|
+
[MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],
|
|
17077
|
+
[
|
|
17078
|
+
///////////////////
|
|
17079
|
+
// SMARTTVS
|
|
17080
|
+
///////////////////
|
|
17081
|
+
/(philips)[\w ]+tv/i,
|
|
17082
|
+
// Philips
|
|
17083
|
+
/smart-tv.+(samsung)/i
|
|
17084
|
+
// Samsung
|
|
17085
|
+
],
|
|
17086
|
+
[VENDOR, [TYPE, SMARTTV]],
|
|
17087
|
+
[
|
|
17088
|
+
/hbbtv.+maple;(\d+)/i
|
|
17089
|
+
],
|
|
17090
|
+
[[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]],
|
|
17091
|
+
[
|
|
17092
|
+
/(vizio)(?: |.+model\/)(\w+-\w+)/i,
|
|
17093
|
+
// Vizio
|
|
17094
|
+
/tcast.+(lg)e?. ([-\w]+)/i
|
|
17095
|
+
// LG SmartTV
|
|
17096
|
+
],
|
|
17097
|
+
[VENDOR, MODEL, [TYPE, SMARTTV]],
|
|
17098
|
+
[
|
|
17099
|
+
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
|
17100
|
+
],
|
|
17101
|
+
[[VENDOR, LG], [TYPE, SMARTTV]],
|
|
17102
|
+
[
|
|
17103
|
+
/(apple) ?tv/i
|
|
17104
|
+
// Apple TV
|
|
17105
|
+
],
|
|
17106
|
+
[VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]],
|
|
17107
|
+
[
|
|
17108
|
+
/crkey.*devicetype\/chromecast/i
|
|
17109
|
+
// Google Chromecast Third Generation
|
|
17110
|
+
],
|
|
17111
|
+
[[MODEL, CHROMECAST + " Third Generation"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
17112
|
+
[
|
|
17113
|
+
/crkey.*devicetype\/([^/]*)/i
|
|
17114
|
+
// Google Chromecast with specific device type
|
|
17115
|
+
],
|
|
17116
|
+
[[MODEL, /^/, "Chromecast "], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
17117
|
+
[
|
|
17118
|
+
/fuchsia.*crkey/i
|
|
17119
|
+
// Google Chromecast Nest Hub
|
|
17120
|
+
],
|
|
17121
|
+
[[MODEL, CHROMECAST + " Nest Hub"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
17122
|
+
[
|
|
17123
|
+
/crkey/i
|
|
17124
|
+
// Google Chromecast, Linux-based or unknown
|
|
17125
|
+
],
|
|
17126
|
+
[[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
|
17127
|
+
[
|
|
17128
|
+
/(portaltv)/i
|
|
17129
|
+
// Facebook Portal TV
|
|
17130
|
+
],
|
|
17131
|
+
[MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]],
|
|
17132
|
+
[
|
|
17133
|
+
/droid.+aft(\w+)( bui|\))/i
|
|
17134
|
+
// Fire TV
|
|
17135
|
+
],
|
|
17136
|
+
[MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],
|
|
17137
|
+
[
|
|
17138
|
+
/(shield \w+ tv)/i
|
|
17139
|
+
// Nvidia Shield TV
|
|
17140
|
+
],
|
|
17141
|
+
[MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]],
|
|
17142
|
+
[
|
|
17143
|
+
/\(dtv[\);].+(aquos)/i,
|
|
17144
|
+
/(aquos-tv[\w ]+)\)/i
|
|
17145
|
+
// Sharp
|
|
17146
|
+
],
|
|
17147
|
+
[MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],
|
|
17148
|
+
[
|
|
17149
|
+
/(bravia[\w ]+)( bui|\))/i
|
|
17150
|
+
// Sony
|
|
17151
|
+
],
|
|
17152
|
+
[MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],
|
|
17153
|
+
[
|
|
17154
|
+
/(mi(tv|box)-?\w+) bui/i
|
|
17155
|
+
// Xiaomi
|
|
17156
|
+
],
|
|
17157
|
+
[MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],
|
|
17158
|
+
[
|
|
17159
|
+
/Hbbtv.*(technisat) (.*);/i
|
|
17160
|
+
// TechniSAT
|
|
17161
|
+
],
|
|
17162
|
+
[VENDOR, MODEL, [TYPE, SMARTTV]],
|
|
17163
|
+
[
|
|
17164
|
+
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
|
|
17165
|
+
// Roku
|
|
17166
|
+
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
|
|
17167
|
+
// HbbTV devices
|
|
17168
|
+
],
|
|
17169
|
+
[[VENDOR, /.+\/(\w+)/, "$1", strMapper, { "LG": "lge" }], [MODEL, trim], [TYPE, SMARTTV]],
|
|
17170
|
+
[
|
|
17171
|
+
///////////////////
|
|
17172
|
+
// CONSOLES
|
|
17173
|
+
///////////////////
|
|
17174
|
+
/(playstation \w+)/i
|
|
17175
|
+
// Playstation
|
|
17176
|
+
],
|
|
17177
|
+
[MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],
|
|
17178
|
+
[
|
|
17179
|
+
/\b(xbox(?: one)?(?!; xbox))[\); ]/i
|
|
17180
|
+
// Microsoft Xbox
|
|
17181
|
+
],
|
|
17182
|
+
[MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],
|
|
17183
|
+
[
|
|
17184
|
+
/(ouya)/i,
|
|
17185
|
+
// Ouya
|
|
17186
|
+
/(nintendo) (\w+)/i,
|
|
17187
|
+
// Nintendo
|
|
17188
|
+
/(retroid) (pocket ([^\)]+))/i,
|
|
17189
|
+
// Retroid Pocket
|
|
17190
|
+
/(valve).+(steam deck)/i,
|
|
17191
|
+
/droid.+; ((shield|rgcube|gr0006))( bui|\))/i
|
|
17192
|
+
// Nvidia Portable/Anbernic/Logitech
|
|
17193
|
+
],
|
|
17194
|
+
[[VENDOR, strMapper, { "Nvidia": "Shield", "Anbernic": "RGCUBE", "Logitech": "GR0006" }], MODEL, [TYPE, CONSOLE]],
|
|
17195
|
+
[
|
|
17196
|
+
///////////////////
|
|
17197
|
+
// WEARABLES
|
|
17198
|
+
///////////////////
|
|
17199
|
+
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i
|
|
17200
|
+
// Samsung Galaxy Watch
|
|
17201
|
+
],
|
|
17202
|
+
[MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]],
|
|
17203
|
+
[
|
|
17204
|
+
/((pebble))app/i,
|
|
17205
|
+
// Pebble
|
|
17206
|
+
/(asus|google|lg|oppo|xiaomi) ((pixel |zen)?watch[\w ]*)( bui|\))/i
|
|
17207
|
+
// Asus ZenWatch / LG Watch / Pixel Watch / Xiaomi Watch
|
|
17208
|
+
],
|
|
17209
|
+
[VENDOR, MODEL, [TYPE, WEARABLE]],
|
|
17210
|
+
[
|
|
17211
|
+
/(ow(?:19|20)?we?[1-3]{1,3})/i
|
|
17212
|
+
// Oppo Watch
|
|
17213
|
+
],
|
|
17214
|
+
[MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]],
|
|
17215
|
+
[
|
|
17216
|
+
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
|
|
17217
|
+
// Apple Watch
|
|
17218
|
+
],
|
|
17219
|
+
[MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]],
|
|
17220
|
+
[
|
|
17221
|
+
/(opwwe\d{3})/i
|
|
17222
|
+
// OnePlus Watch
|
|
17223
|
+
],
|
|
17224
|
+
[MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]],
|
|
17225
|
+
[
|
|
17226
|
+
/(moto 360)/i
|
|
17227
|
+
// Motorola 360
|
|
17228
|
+
],
|
|
17229
|
+
[MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]],
|
|
17230
|
+
[
|
|
17231
|
+
/(smartwatch 3)/i
|
|
17232
|
+
// Sony SmartWatch
|
|
17233
|
+
],
|
|
17234
|
+
[MODEL, [VENDOR, SONY], [TYPE, WEARABLE]],
|
|
17235
|
+
[
|
|
17236
|
+
/(g watch r)/i
|
|
17237
|
+
// LG G Watch R
|
|
17238
|
+
],
|
|
17239
|
+
[MODEL, [VENDOR, LG], [TYPE, WEARABLE]],
|
|
17240
|
+
[
|
|
17241
|
+
/droid.+; (wt63?0{2,3})\)/i
|
|
17242
|
+
],
|
|
17243
|
+
[MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],
|
|
17244
|
+
[
|
|
17245
|
+
///////////////////
|
|
17246
|
+
// XR
|
|
17247
|
+
///////////////////
|
|
17248
|
+
/droid.+; (glass) \d/i
|
|
17249
|
+
// Google Glass
|
|
17250
|
+
],
|
|
17251
|
+
[MODEL, [VENDOR, GOOGLE], [TYPE, XR]],
|
|
17252
|
+
[
|
|
17253
|
+
/(pico) ([\w ]+) os\d/i
|
|
17254
|
+
// Pico
|
|
17255
|
+
],
|
|
17256
|
+
[VENDOR, MODEL, [TYPE, XR]],
|
|
17257
|
+
[
|
|
17258
|
+
/(quest( \d| pro)?s?).+vr/i
|
|
17259
|
+
// Meta Quest
|
|
17260
|
+
],
|
|
17261
|
+
[MODEL, [VENDOR, FACEBOOK], [TYPE, XR]],
|
|
17262
|
+
[
|
|
17263
|
+
/mobile vr; rv.+firefox/i
|
|
17264
|
+
// Unidentifiable VR device using Firefox Reality / Wolvic
|
|
17265
|
+
],
|
|
17266
|
+
[[TYPE, XR]],
|
|
17267
|
+
[
|
|
17268
|
+
///////////////////
|
|
17269
|
+
// EMBEDDED
|
|
17270
|
+
///////////////////
|
|
17271
|
+
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
|
|
17272
|
+
// Tesla
|
|
17273
|
+
],
|
|
17274
|
+
[VENDOR, [TYPE, EMBEDDED]],
|
|
17275
|
+
[
|
|
17276
|
+
/(aeobc)\b/i
|
|
17277
|
+
// Echo Dot
|
|
17278
|
+
],
|
|
17279
|
+
[MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]],
|
|
17280
|
+
[
|
|
17281
|
+
/(homepod).+mac os/i
|
|
17282
|
+
// Apple HomePod
|
|
17283
|
+
],
|
|
17284
|
+
[MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]],
|
|
17285
|
+
[
|
|
17286
|
+
/windows iot/i
|
|
17287
|
+
// Unidentifiable embedded device using Windows IoT
|
|
17288
|
+
],
|
|
17289
|
+
[[TYPE, EMBEDDED]],
|
|
17290
|
+
[
|
|
17291
|
+
////////////////////
|
|
17292
|
+
// MIXED (GENERIC)
|
|
17293
|
+
///////////////////
|
|
17294
|
+
/droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i
|
|
17295
|
+
// Unidentifiable SmartTV
|
|
17296
|
+
],
|
|
17297
|
+
[MODEL, [TYPE, SMARTTV]],
|
|
17298
|
+
[
|
|
17299
|
+
/\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i
|
|
17300
|
+
],
|
|
17301
|
+
[[TYPE, SMARTTV]],
|
|
17302
|
+
[
|
|
17303
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i
|
|
17304
|
+
],
|
|
17305
|
+
[MODEL, [TYPE, strMapper, { "mobile": "Mobile", "xr": "VR", "*": TABLET }]],
|
|
17306
|
+
[
|
|
17307
|
+
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
|
|
17308
|
+
// Unidentifiable Tablet
|
|
17309
|
+
],
|
|
17310
|
+
[[TYPE, TABLET]],
|
|
17311
|
+
[
|
|
17312
|
+
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
|
|
17313
|
+
// Unidentifiable Mobile
|
|
17314
|
+
],
|
|
17315
|
+
[[TYPE, MOBILE]],
|
|
17316
|
+
[
|
|
17317
|
+
/droid .+?; ([\w\. -]+)( bui|\))/i
|
|
17318
|
+
// Generic Android Device
|
|
17319
|
+
],
|
|
17320
|
+
[MODEL, [VENDOR, "Generic"]]
|
|
17321
|
+
],
|
|
17322
|
+
engine: [
|
|
17323
|
+
[
|
|
17324
|
+
/windows.+ edge\/([\w\.]+)/i
|
|
17325
|
+
// EdgeHTML
|
|
17326
|
+
],
|
|
17327
|
+
[VERSION, [NAME, EDGE + "HTML"]],
|
|
17328
|
+
[
|
|
17329
|
+
/(arkweb)\/([\w\.]+)/i
|
|
17330
|
+
// ArkWeb
|
|
17331
|
+
],
|
|
17332
|
+
[NAME, VERSION],
|
|
17333
|
+
[
|
|
17334
|
+
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
|
|
17335
|
+
// Blink
|
|
17336
|
+
],
|
|
17337
|
+
[VERSION, [NAME, "Blink"]],
|
|
17338
|
+
[
|
|
17339
|
+
/(presto)\/([\w\.]+)/i,
|
|
17340
|
+
// Presto
|
|
17341
|
+
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,
|
|
17342
|
+
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
|
|
17343
|
+
/ekioh(flow)\/([\w\.]+)/i,
|
|
17344
|
+
// Flow
|
|
17345
|
+
/(khtml|tasman|links|dillo)[\/ ]\(?([\w\.]+)/i,
|
|
17346
|
+
// KHTML/Tasman/Links/Dillo
|
|
17347
|
+
/(icab)[\/ ]([23]\.[\d\.]+)/i,
|
|
17348
|
+
// iCab
|
|
17349
|
+
/\b(libweb)/i
|
|
17350
|
+
// LibWeb
|
|
17351
|
+
],
|
|
17352
|
+
[NAME, VERSION],
|
|
17353
|
+
[
|
|
17354
|
+
/ladybird\//i
|
|
17355
|
+
],
|
|
17356
|
+
[[NAME, "LibWeb"]],
|
|
17357
|
+
[
|
|
17358
|
+
/rv\:([\w\.]{1,9})\b.+(gecko)/i
|
|
17359
|
+
// Gecko
|
|
17360
|
+
],
|
|
17361
|
+
[VERSION, NAME]
|
|
17362
|
+
],
|
|
17363
|
+
os: [
|
|
17364
|
+
[
|
|
17365
|
+
// Windows
|
|
17366
|
+
/(windows nt) (6\.[23]); arm/i
|
|
17367
|
+
// Windows RT
|
|
17368
|
+
],
|
|
17369
|
+
[[NAME, /N/, "R"], [VERSION, strMapper, windowsVersionMap]],
|
|
17370
|
+
[
|
|
17371
|
+
/(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,
|
|
17372
|
+
// Windows IoT/Mobile/Phone
|
|
17373
|
+
// Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11
|
|
17374
|
+
/(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i
|
|
17375
|
+
],
|
|
17376
|
+
[NAME, VERSION],
|
|
17377
|
+
[
|
|
17378
|
+
/windows nt ?([\d\.\)]*)(?!.+xbox)/i,
|
|
17379
|
+
/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i
|
|
17380
|
+
],
|
|
17381
|
+
[[VERSION, /(;|\))/g, "", strMapper, windowsVersionMap], [NAME, WINDOWS]],
|
|
17382
|
+
[
|
|
17383
|
+
/(windows ce)\/?([\d\.]*)/i
|
|
17384
|
+
// Windows CE
|
|
17385
|
+
],
|
|
17386
|
+
[NAME, VERSION],
|
|
17387
|
+
[
|
|
17388
|
+
// iOS/macOS
|
|
17389
|
+
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,
|
|
17390
|
+
// iOS
|
|
17391
|
+
/(?:ios;fbsv|ios(?=.+ip(?:ad|hone)|.+apple ?tv)|ip(?:ad|hone)(?: |.+i(?:pad)?)os|apple ?tv.+ios)[\/ ]([\w\.]+)/i,
|
|
17392
|
+
/\btvos ?([\w\.]+)/i,
|
|
17393
|
+
/cfnetwork\/.+darwin/i
|
|
17394
|
+
],
|
|
17395
|
+
[[VERSION, /_/g, "."], [NAME, "iOS"]],
|
|
17396
|
+
[
|
|
17397
|
+
/(mac os x) ?([\w\. ]*)/i,
|
|
17398
|
+
/(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i
|
|
17399
|
+
// Mac OS
|
|
17400
|
+
],
|
|
17401
|
+
[[NAME, "macOS"], [VERSION, /_/g, "."]],
|
|
17402
|
+
[
|
|
17403
|
+
// Google Chromecast
|
|
17404
|
+
/android ([\d\.]+).*crkey/i
|
|
17405
|
+
// Google Chromecast, Android-based
|
|
17406
|
+
],
|
|
17407
|
+
[VERSION, [NAME, CHROMECAST + " Android"]],
|
|
17408
|
+
[
|
|
17409
|
+
/fuchsia.*crkey\/([\d\.]+)/i
|
|
17410
|
+
// Google Chromecast, Fuchsia-based
|
|
17411
|
+
],
|
|
17412
|
+
[VERSION, [NAME, CHROMECAST + " Fuchsia"]],
|
|
17413
|
+
[
|
|
17414
|
+
/crkey\/([\d\.]+).*devicetype\/smartspeaker/i
|
|
17415
|
+
// Google Chromecast, Linux-based Smart Speaker
|
|
17416
|
+
],
|
|
17417
|
+
[VERSION, [NAME, CHROMECAST + " SmartSpeaker"]],
|
|
17418
|
+
[
|
|
17419
|
+
/linux.*crkey\/([\d\.]+)/i
|
|
17420
|
+
// Google Chromecast, Legacy Linux-based
|
|
17421
|
+
],
|
|
17422
|
+
[VERSION, [NAME, CHROMECAST + " Linux"]],
|
|
17423
|
+
[
|
|
17424
|
+
/crkey\/([\d\.]+)/i
|
|
17425
|
+
// Google Chromecast, unknown
|
|
17426
|
+
],
|
|
17427
|
+
[VERSION, [NAME, CHROMECAST]],
|
|
17428
|
+
[
|
|
17429
|
+
// Mobile OSes
|
|
17430
|
+
/droid ([\w\.]+)\b.+(android[- ]x86)/i
|
|
17431
|
+
// Android-x86
|
|
17432
|
+
],
|
|
17433
|
+
[VERSION, NAME],
|
|
17434
|
+
[
|
|
17435
|
+
/(ubuntu) ([\w\.]+) like android/i
|
|
17436
|
+
// Ubuntu Touch
|
|
17437
|
+
],
|
|
17438
|
+
[[NAME, /(.+)/, "$1 Touch"], VERSION],
|
|
17439
|
+
[
|
|
17440
|
+
/(harmonyos)[\/ ]?([\d\.]*)/i,
|
|
17441
|
+
// HarmonyOS
|
|
17442
|
+
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
|
17443
|
+
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i
|
|
17444
|
+
],
|
|
17445
|
+
[NAME, VERSION],
|
|
17446
|
+
[
|
|
17447
|
+
/\(bb(10);/i
|
|
17448
|
+
// BlackBerry 10
|
|
17449
|
+
],
|
|
17450
|
+
[VERSION, [NAME, BLACKBERRY]],
|
|
17451
|
+
[
|
|
17452
|
+
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i
|
|
17453
|
+
// Symbian
|
|
17454
|
+
],
|
|
17455
|
+
[VERSION, [NAME, "Symbian"]],
|
|
17456
|
+
[
|
|
17457
|
+
/mozilla\/[\d\.]+ \((?:mobile[;\w ]*|tablet|tv|[^\)]*(?:viera|lg(?:l25|-d300)|alcatel ?o.+|y300-f1)); rv:([\w\.]+)\).+gecko\//i
|
|
17458
|
+
// Firefox OS
|
|
17459
|
+
],
|
|
17460
|
+
[VERSION, [NAME, FIREFOX + " OS"]],
|
|
17461
|
+
[
|
|
17462
|
+
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,
|
|
17463
|
+
// WebOS
|
|
17464
|
+
/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
|
|
17465
|
+
],
|
|
17466
|
+
[VERSION, [NAME, "webOS"]],
|
|
17467
|
+
[
|
|
17468
|
+
/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
|
|
17469
|
+
// https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
|
|
17470
|
+
],
|
|
17471
|
+
[[VERSION, strMapper, { "25": "120", "24": "108", "23": "94", "22": "87", "6": "79", "5": "68", "4": "53", "3": "38", "2": "538", "1": "537", "*": "TV" }], [NAME, "webOS"]],
|
|
17472
|
+
[
|
|
17473
|
+
/watch(?: ?os[,\/ ]|\d,\d\/)([\d\.]+)/i
|
|
17474
|
+
// watchOS
|
|
17475
|
+
],
|
|
17476
|
+
[VERSION, [NAME, "watchOS"]],
|
|
17477
|
+
[
|
|
17478
|
+
// Google ChromeOS
|
|
17479
|
+
/cros [\w]+(?:\)| ([\w\.]+)\b)/i
|
|
17480
|
+
// Chromium OS
|
|
17481
|
+
],
|
|
17482
|
+
[VERSION, [NAME, "Chrome OS"]],
|
|
17483
|
+
[
|
|
17484
|
+
// Smart TVs
|
|
17485
|
+
/kepler ([\w\.]+); (aft|aeo)/i
|
|
17486
|
+
// Vega OS
|
|
17487
|
+
],
|
|
17488
|
+
[VERSION, [NAME, "Vega OS"]],
|
|
17489
|
+
[
|
|
17490
|
+
/(netrange)mmh/i,
|
|
17491
|
+
// Netrange
|
|
17492
|
+
/(nettv)\/(\d+\.[\w\.]+)/i,
|
|
17493
|
+
// NetTV
|
|
17494
|
+
// Console
|
|
17495
|
+
/(nintendo|playstation) (\w+)/i,
|
|
17496
|
+
// Nintendo/Playstation
|
|
17497
|
+
/(xbox); +xbox ([^\);]+)/i,
|
|
17498
|
+
// Microsoft Xbox (360, One, X, S, Series X, Series S)
|
|
17499
|
+
/(pico) .+os([\w\.]+)/i,
|
|
17500
|
+
// Pico
|
|
17501
|
+
// Other
|
|
17502
|
+
/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
|
|
17503
|
+
// Joli/Palm
|
|
17504
|
+
/linux.+(mint)[\/\(\) ]?([\w\.]*)/i,
|
|
17505
|
+
// Mint
|
|
17506
|
+
/(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,
|
|
17507
|
+
// Mageia/VectorLinux/Fuchsia/ArcaOS/Arch
|
|
17508
|
+
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
|
17509
|
+
// Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix
|
|
17510
|
+
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
|
|
17511
|
+
// Solaris
|
|
17512
|
+
/\b(aix)[; ]([1-9\.]{0,4})/i,
|
|
17513
|
+
// AIX
|
|
17514
|
+
/(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,
|
|
17515
|
+
// Hurd/Linux/MorphOS
|
|
17516
|
+
/(gnu) ?([\w\.]*)/i,
|
|
17517
|
+
// GNU
|
|
17518
|
+
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
|
|
17519
|
+
// FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
|
17520
|
+
/(haiku) ?(r\d)?/i
|
|
17521
|
+
// Haiku
|
|
17522
|
+
],
|
|
17523
|
+
[NAME, VERSION],
|
|
17524
|
+
[
|
|
17525
|
+
/(sunos) ?([\d\.]*)/i
|
|
17526
|
+
// Solaris
|
|
17527
|
+
],
|
|
17528
|
+
[[NAME, "Solaris"], VERSION],
|
|
17529
|
+
[
|
|
17530
|
+
/\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,
|
|
17531
|
+
// BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS
|
|
17532
|
+
/(unix) ?([\w\.]*)/i
|
|
17533
|
+
// UNIX
|
|
17534
|
+
],
|
|
17535
|
+
[NAME, VERSION]
|
|
17536
|
+
]
|
|
17537
|
+
};
|
|
17538
|
+
var defaultProps = (function() {
|
|
17539
|
+
var props = { init: {}, isIgnore: {}, isIgnoreRgx: {}, toString: {} };
|
|
17540
|
+
setProps.call(props.init, [
|
|
17541
|
+
[BROWSER, [NAME, VERSION, MAJOR, TYPE]],
|
|
17542
|
+
[CPU, [ARCHITECTURE]],
|
|
17543
|
+
[DEVICE, [TYPE, MODEL, VENDOR]],
|
|
17544
|
+
[ENGINE, [NAME, VERSION]],
|
|
17545
|
+
[OS, [NAME, VERSION]]
|
|
17546
|
+
]);
|
|
17547
|
+
setProps.call(props.isIgnore, [
|
|
17548
|
+
[BROWSER, [VERSION, MAJOR]],
|
|
17549
|
+
[ENGINE, [VERSION]],
|
|
17550
|
+
[OS, [VERSION]]
|
|
17551
|
+
]);
|
|
17552
|
+
setProps.call(props.isIgnoreRgx, [
|
|
17553
|
+
[BROWSER, / ?browser$/i],
|
|
17554
|
+
[OS, / ?os$/i]
|
|
17555
|
+
]);
|
|
17556
|
+
setProps.call(props.toString, [
|
|
17557
|
+
[BROWSER, [NAME, VERSION]],
|
|
17558
|
+
[CPU, [ARCHITECTURE]],
|
|
17559
|
+
[DEVICE, [VENDOR, MODEL]],
|
|
17560
|
+
[ENGINE, [NAME, VERSION]],
|
|
17561
|
+
[OS, [NAME, VERSION]]
|
|
17562
|
+
]);
|
|
17563
|
+
return props;
|
|
17564
|
+
})();
|
|
17565
|
+
var createIData = function(item, itemType) {
|
|
17566
|
+
var init_props = defaultProps.init[itemType], is_ignoreProps = defaultProps.isIgnore[itemType] || 0, is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0, toString_props = defaultProps.toString[itemType] || 0;
|
|
17567
|
+
function IData() {
|
|
17568
|
+
setProps.call(this, init_props);
|
|
17569
|
+
}
|
|
17570
|
+
IData.prototype.getItem = function() {
|
|
17571
|
+
return item;
|
|
17572
|
+
};
|
|
17573
|
+
IData.prototype.withClientHints = function() {
|
|
17574
|
+
if (!NAVIGATOR_UADATA) {
|
|
17575
|
+
return item.parseCH().get();
|
|
17576
|
+
}
|
|
17577
|
+
return NAVIGATOR_UADATA.getHighEntropyValues(CH_ALL_VALUES).then(function(res) {
|
|
17578
|
+
return item.setCH(new UACHData(res, false)).parseCH().get();
|
|
17579
|
+
});
|
|
17580
|
+
};
|
|
17581
|
+
IData.prototype.withFeatureCheck = function() {
|
|
17582
|
+
return item.detectFeature().get();
|
|
17583
|
+
};
|
|
17584
|
+
if (itemType != RESULT) {
|
|
17585
|
+
IData.prototype.is = function(strToCheck) {
|
|
17586
|
+
var is = false;
|
|
17587
|
+
for (var i2 in this) {
|
|
17588
|
+
if (this.hasOwnProperty(i2) && !has(is_ignoreProps, i2) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i2]) : this[i2]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {
|
|
17589
|
+
is = true;
|
|
17590
|
+
if (strToCheck != TYPEOF.UNDEFINED) break;
|
|
17591
|
+
} else if (strToCheck == TYPEOF.UNDEFINED && is) {
|
|
17592
|
+
is = !is;
|
|
17593
|
+
break;
|
|
17594
|
+
}
|
|
17595
|
+
}
|
|
17596
|
+
return is;
|
|
17597
|
+
};
|
|
17598
|
+
IData.prototype.toString = function() {
|
|
17599
|
+
var str = EMPTY;
|
|
17600
|
+
for (var i2 in toString_props) {
|
|
17601
|
+
if (typeof this[toString_props[i2]] !== TYPEOF.UNDEFINED) {
|
|
17602
|
+
str += (str ? " " : EMPTY) + this[toString_props[i2]];
|
|
17603
|
+
}
|
|
17604
|
+
}
|
|
17605
|
+
return str || TYPEOF.UNDEFINED;
|
|
17606
|
+
};
|
|
17607
|
+
}
|
|
17608
|
+
IData.prototype.then = function(cb2) {
|
|
17609
|
+
var that = this;
|
|
17610
|
+
var IDataResolve = function() {
|
|
17611
|
+
for (var prop in that) {
|
|
17612
|
+
if (that.hasOwnProperty(prop)) {
|
|
17613
|
+
this[prop] = that[prop];
|
|
17614
|
+
}
|
|
17615
|
+
}
|
|
17616
|
+
};
|
|
17617
|
+
IDataResolve.prototype = {
|
|
17618
|
+
is: IData.prototype.is,
|
|
17619
|
+
toString: IData.prototype.toString,
|
|
17620
|
+
withClientHints: IData.prototype.withClientHints,
|
|
17621
|
+
withFeatureCheck: IData.prototype.withFeatureCheck
|
|
17622
|
+
};
|
|
17623
|
+
var resolveData = new IDataResolve();
|
|
17624
|
+
cb2(resolveData);
|
|
17625
|
+
return resolveData;
|
|
17626
|
+
};
|
|
17627
|
+
return new IData();
|
|
17628
|
+
};
|
|
17629
|
+
function UACHData(uach, isHttpUACH) {
|
|
17630
|
+
uach = uach || {};
|
|
17631
|
+
setProps.call(this, CH_ALL_VALUES);
|
|
17632
|
+
if (isHttpUACH) {
|
|
17633
|
+
setProps.call(this, [
|
|
17634
|
+
[BRANDS, itemListToArray(uach[CH])],
|
|
17635
|
+
[FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
|
|
17636
|
+
[MOBILE, /\?1/.test(uach[CH_MOBILE])],
|
|
17637
|
+
[MODEL, stripQuotes(uach[CH_MODEL])],
|
|
17638
|
+
[PLATFORM, stripQuotes(uach[CH_PLATFORM])],
|
|
17639
|
+
[PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],
|
|
17640
|
+
[ARCHITECTURE, stripQuotes(uach[CH_ARCH])],
|
|
17641
|
+
[FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
|
|
17642
|
+
[BITNESS, stripQuotes(uach[CH_BITNESS])]
|
|
17643
|
+
]);
|
|
17644
|
+
} else {
|
|
17645
|
+
for (var prop in uach) {
|
|
17646
|
+
if (this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];
|
|
17647
|
+
}
|
|
17648
|
+
}
|
|
17649
|
+
}
|
|
17650
|
+
function UAItem(itemType, ua, rgxMap, uaCH) {
|
|
17651
|
+
setProps.call(this, [
|
|
17652
|
+
["itemType", itemType],
|
|
17653
|
+
["ua", ua],
|
|
17654
|
+
["uaCH", uaCH],
|
|
17655
|
+
["rgxMap", rgxMap],
|
|
17656
|
+
["data", createIData(this, itemType)]
|
|
17657
|
+
]);
|
|
17658
|
+
return this;
|
|
17659
|
+
}
|
|
17660
|
+
UAItem.prototype.get = function(prop) {
|
|
17661
|
+
if (!prop) return this.data;
|
|
17662
|
+
return this.data.hasOwnProperty(prop) ? this.data[prop] : void 0;
|
|
17663
|
+
};
|
|
17664
|
+
UAItem.prototype.set = function(prop, val) {
|
|
17665
|
+
this.data[prop] = val;
|
|
17666
|
+
return this;
|
|
17667
|
+
};
|
|
17668
|
+
UAItem.prototype.setCH = function(ch) {
|
|
17669
|
+
this.uaCH = ch;
|
|
17670
|
+
return this;
|
|
17671
|
+
};
|
|
17672
|
+
UAItem.prototype.detectFeature = function() {
|
|
17673
|
+
if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
|
|
17674
|
+
switch (this.itemType) {
|
|
17675
|
+
case BROWSER:
|
|
17676
|
+
if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {
|
|
17677
|
+
this.set(NAME, "Brave");
|
|
17678
|
+
}
|
|
17679
|
+
break;
|
|
17680
|
+
case DEVICE:
|
|
17681
|
+
if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
|
|
17682
|
+
this.set(TYPE, MOBILE);
|
|
17683
|
+
}
|
|
17684
|
+
if (this.get(MODEL) == "Macintosh" && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
|
|
17685
|
+
this.set(MODEL, "iPad").set(TYPE, TABLET);
|
|
17686
|
+
}
|
|
17687
|
+
break;
|
|
17688
|
+
case OS:
|
|
17689
|
+
if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
|
|
17690
|
+
this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
|
|
17691
|
+
}
|
|
17692
|
+
break;
|
|
17693
|
+
case RESULT:
|
|
17694
|
+
var data = this.data;
|
|
17695
|
+
var detect = function(itemType) {
|
|
17696
|
+
return data[itemType].getItem().detectFeature().get();
|
|
17697
|
+
};
|
|
17698
|
+
this.set(BROWSER, detect(BROWSER)).set(CPU, detect(CPU)).set(DEVICE, detect(DEVICE)).set(ENGINE, detect(ENGINE)).set(OS, detect(OS));
|
|
17699
|
+
}
|
|
17700
|
+
}
|
|
17701
|
+
return this;
|
|
17702
|
+
};
|
|
17703
|
+
UAItem.prototype.parseUA = function() {
|
|
17704
|
+
if (this.itemType != RESULT) {
|
|
17705
|
+
rgxMapper.call(this.data, this.ua, this.rgxMap);
|
|
17706
|
+
}
|
|
17707
|
+
switch (this.itemType) {
|
|
17708
|
+
case BROWSER:
|
|
17709
|
+
this.set(MAJOR, majorize(this.get(VERSION)));
|
|
17710
|
+
break;
|
|
17711
|
+
case OS:
|
|
17712
|
+
if (this.get(NAME) == "iOS" && this.get(VERSION) == "18.6") {
|
|
17713
|
+
var realVersion = /\) Version\/([\d\.]+)/.exec(this.ua);
|
|
17714
|
+
if (realVersion && parseInt(realVersion[1].substring(0, 2), 10) >= 26) {
|
|
17715
|
+
this.set(VERSION, realVersion[1]);
|
|
17716
|
+
}
|
|
17717
|
+
}
|
|
17718
|
+
break;
|
|
17719
|
+
}
|
|
17720
|
+
return this;
|
|
17721
|
+
};
|
|
17722
|
+
UAItem.prototype.parseCH = function() {
|
|
17723
|
+
var uaCH = this.uaCH, rgxMap = this.rgxMap;
|
|
17724
|
+
switch (this.itemType) {
|
|
17725
|
+
case BROWSER:
|
|
17726
|
+
case ENGINE:
|
|
17727
|
+
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
|
17728
|
+
if (brands) {
|
|
17729
|
+
for (var i2 = 0; i2 < brands.length; i2++) {
|
|
17730
|
+
var brandName = brands[i2].brand || brands[i2], brandVersion = brands[i2].version;
|
|
17731
|
+
if (this.itemType == BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || /Chrom/.test(prevName) && brandName != CHROMIUM || prevName == EDGE && /WebView2/.test(brandName))) {
|
|
17732
|
+
brandName = strMapper(brandName, browserHintsMap);
|
|
17733
|
+
prevName = this.get(NAME);
|
|
17734
|
+
if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
|
|
17735
|
+
this.set(NAME, brandName).set(VERSION, brandVersion).set(MAJOR, majorize(brandVersion));
|
|
17736
|
+
}
|
|
17737
|
+
prevName = brandName;
|
|
17738
|
+
}
|
|
17739
|
+
if (this.itemType == ENGINE && brandName == CHROMIUM) {
|
|
17740
|
+
this.set(VERSION, brandVersion);
|
|
17741
|
+
}
|
|
17742
|
+
}
|
|
17743
|
+
}
|
|
17744
|
+
break;
|
|
17745
|
+
case CPU:
|
|
17746
|
+
var archName = uaCH[ARCHITECTURE];
|
|
17747
|
+
if (archName) {
|
|
17748
|
+
if (archName && uaCH[BITNESS] == "64") archName += "64";
|
|
17749
|
+
rgxMapper.call(this.data, archName + ";", rgxMap);
|
|
17750
|
+
}
|
|
17751
|
+
break;
|
|
17752
|
+
case DEVICE:
|
|
17753
|
+
if (uaCH[MOBILE]) {
|
|
17754
|
+
this.set(TYPE, MOBILE);
|
|
17755
|
+
}
|
|
17756
|
+
if (uaCH[MODEL]) {
|
|
17757
|
+
this.set(MODEL, uaCH[MODEL]);
|
|
17758
|
+
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
|
17759
|
+
var reParse = {};
|
|
17760
|
+
rgxMapper.call(reParse, "droid 9; " + uaCH[MODEL] + ")", rgxMap);
|
|
17761
|
+
if (!this.get(TYPE) && !!reParse.type) {
|
|
17762
|
+
this.set(TYPE, reParse.type);
|
|
17763
|
+
}
|
|
17764
|
+
if (!this.get(VENDOR) && !!reParse.vendor) {
|
|
17765
|
+
this.set(VENDOR, reParse.vendor);
|
|
17766
|
+
}
|
|
17767
|
+
}
|
|
17768
|
+
}
|
|
17769
|
+
if (uaCH[FORMFACTORS]) {
|
|
17770
|
+
var ff;
|
|
17771
|
+
if (typeof uaCH[FORMFACTORS] !== "string") {
|
|
17772
|
+
var idx = 0;
|
|
17773
|
+
while (!ff && idx < uaCH[FORMFACTORS].length) {
|
|
17774
|
+
ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);
|
|
17775
|
+
}
|
|
17776
|
+
} else {
|
|
17777
|
+
ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);
|
|
17778
|
+
}
|
|
17779
|
+
this.set(TYPE, ff);
|
|
17780
|
+
}
|
|
17781
|
+
break;
|
|
17782
|
+
case OS:
|
|
17783
|
+
var osName = uaCH[PLATFORM];
|
|
17784
|
+
if (osName) {
|
|
17785
|
+
var osVersion = uaCH[PLATFORMVER];
|
|
17786
|
+
if (osName == WINDOWS) osVersion = parseInt(majorize(osVersion), 10) >= 13 ? "11" : "10";
|
|
17787
|
+
this.set(NAME, osName).set(VERSION, osVersion);
|
|
17788
|
+
}
|
|
17789
|
+
if (this.get(NAME) == WINDOWS && uaCH[MODEL] == "Xbox") {
|
|
17790
|
+
this.set(NAME, "Xbox").set(VERSION, void 0);
|
|
17791
|
+
}
|
|
17792
|
+
break;
|
|
17793
|
+
case RESULT:
|
|
17794
|
+
var data = this.data;
|
|
17795
|
+
var parse2 = function(itemType) {
|
|
17796
|
+
return data[itemType].getItem().setCH(uaCH).parseCH().get();
|
|
17797
|
+
};
|
|
17798
|
+
this.set(BROWSER, parse2(BROWSER)).set(CPU, parse2(CPU)).set(DEVICE, parse2(DEVICE)).set(ENGINE, parse2(ENGINE)).set(OS, parse2(OS));
|
|
17799
|
+
}
|
|
17800
|
+
return this;
|
|
17801
|
+
};
|
|
17802
|
+
function UAParser(ua, extensions, headers) {
|
|
17803
|
+
if (typeof ua === TYPEOF.OBJECT) {
|
|
17804
|
+
if (isExtensions(ua, true)) {
|
|
17805
|
+
if (typeof extensions === TYPEOF.OBJECT) {
|
|
17806
|
+
headers = extensions;
|
|
17807
|
+
}
|
|
17808
|
+
extensions = ua;
|
|
17809
|
+
} else {
|
|
17810
|
+
headers = ua;
|
|
17811
|
+
extensions = void 0;
|
|
17812
|
+
}
|
|
17813
|
+
ua = void 0;
|
|
17814
|
+
} else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {
|
|
17815
|
+
headers = extensions;
|
|
17816
|
+
extensions = void 0;
|
|
17817
|
+
}
|
|
17818
|
+
if (headers) {
|
|
17819
|
+
if (typeof headers.append === TYPEOF.FUNCTION) {
|
|
17820
|
+
var kv = {};
|
|
17821
|
+
headers.forEach(function(v2, k2) {
|
|
17822
|
+
kv[String(k2).toLowerCase()] = v2;
|
|
17823
|
+
});
|
|
17824
|
+
headers = kv;
|
|
17825
|
+
} else {
|
|
17826
|
+
var normalized = {};
|
|
17827
|
+
for (var header in headers) {
|
|
17828
|
+
if (headers.hasOwnProperty(header)) {
|
|
17829
|
+
normalized[String(header).toLowerCase()] = headers[header];
|
|
17830
|
+
}
|
|
17831
|
+
}
|
|
17832
|
+
headers = normalized;
|
|
17833
|
+
}
|
|
17834
|
+
}
|
|
17835
|
+
if (!(this instanceof UAParser)) {
|
|
17836
|
+
return new UAParser(ua, extensions, headers).getResult();
|
|
17837
|
+
}
|
|
17838
|
+
var userAgent = typeof ua === TYPEOF.STRING ? ua : (
|
|
17839
|
+
// Passed user-agent string
|
|
17840
|
+
headers && headers[USER_AGENT] ? headers[USER_AGENT] : (
|
|
17841
|
+
// User-Agent from passed headers
|
|
17842
|
+
NAVIGATOR && NAVIGATOR.userAgent ? NAVIGATOR.userAgent : (
|
|
17843
|
+
// navigator.userAgent
|
|
17844
|
+
EMPTY
|
|
17845
|
+
)
|
|
17846
|
+
)
|
|
17847
|
+
), httpUACH = new UACHData(headers, true), regexMap = extensions ? extend(defaultRegexes, extensions) : defaultRegexes, createItemFunc = function(itemType) {
|
|
17848
|
+
if (itemType == RESULT) {
|
|
17849
|
+
return function() {
|
|
17850
|
+
return new UAItem(itemType, userAgent, regexMap, httpUACH).set("ua", userAgent).set(BROWSER, this.getBrowser()).set(CPU, this.getCPU()).set(DEVICE, this.getDevice()).set(ENGINE, this.getEngine()).set(OS, this.getOS()).get();
|
|
17851
|
+
};
|
|
17852
|
+
} else {
|
|
17853
|
+
return function() {
|
|
17854
|
+
return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH).parseUA().get();
|
|
17855
|
+
};
|
|
17856
|
+
}
|
|
17857
|
+
};
|
|
17858
|
+
setProps.call(this, [
|
|
17859
|
+
["getBrowser", createItemFunc(BROWSER)],
|
|
17860
|
+
["getCPU", createItemFunc(CPU)],
|
|
17861
|
+
["getDevice", createItemFunc(DEVICE)],
|
|
17862
|
+
["getEngine", createItemFunc(ENGINE)],
|
|
17863
|
+
["getOS", createItemFunc(OS)],
|
|
17864
|
+
["getResult", createItemFunc(RESULT)],
|
|
17865
|
+
["getUA", function() {
|
|
17866
|
+
return userAgent;
|
|
17867
|
+
}],
|
|
17868
|
+
["setUA", function(ua2) {
|
|
17869
|
+
if (isString2(ua2)) userAgent = trim(ua2, UA_MAX_LENGTH);
|
|
17870
|
+
return this;
|
|
17871
|
+
}]
|
|
17872
|
+
]).setUA(userAgent);
|
|
17873
|
+
return this;
|
|
17874
|
+
}
|
|
17875
|
+
UAParser.VERSION = LIBVERSION;
|
|
17876
|
+
UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);
|
|
17877
|
+
UAParser.CPU = enumerize([ARCHITECTURE]);
|
|
17878
|
+
UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
|
|
17879
|
+
UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
|
|
17880
|
+
|
|
17881
|
+
// src/utils/browser.ts
|
|
17882
|
+
var FALLBACK = { browser: "Other", browser_version: "unknown" };
|
|
17883
|
+
var detectBrowser = () => {
|
|
17884
|
+
if (typeof navigator === "undefined" || typeof navigator.userAgent !== "string") {
|
|
17885
|
+
return FALLBACK;
|
|
17886
|
+
}
|
|
17887
|
+
const { name, version } = new UAParser(navigator.userAgent).getBrowser();
|
|
17888
|
+
if (!name || !version) {
|
|
17889
|
+
return FALLBACK;
|
|
17890
|
+
}
|
|
17891
|
+
return { browser: name, browser_version: version };
|
|
17892
|
+
};
|
|
17893
|
+
|
|
17894
|
+
// src/hooks/use-appinspector-open-analytics.ts
|
|
17895
|
+
var buildPayload = (container) => {
|
|
17896
|
+
if (container.source === "vscode") {
|
|
17897
|
+
return {
|
|
17898
|
+
extension_version: container.extensionVersion,
|
|
17899
|
+
ide_version: container.ideVersion,
|
|
17900
|
+
source: "vscode"
|
|
17901
|
+
};
|
|
17902
|
+
}
|
|
17903
|
+
const { browser, browser_version } = detectBrowser();
|
|
17904
|
+
return { browser, browser_version, source: "web" };
|
|
17905
|
+
};
|
|
17906
|
+
var useAppInspectorOpenAnalytics = () => {
|
|
17907
|
+
const api = useAppInspectorApi();
|
|
17908
|
+
const { deploymentContainer } = useAppInspector();
|
|
17909
|
+
const { status, statusError } = useAppInspectorStatus();
|
|
17910
|
+
const firedRef = useRef9(false);
|
|
17911
|
+
useEffect13(() => {
|
|
17912
|
+
if (firedRef.current) {
|
|
17913
|
+
return;
|
|
17914
|
+
}
|
|
17915
|
+
if (statusError) {
|
|
17916
|
+
return;
|
|
17917
|
+
}
|
|
17918
|
+
if (status?.status !== "ENABLED") {
|
|
17919
|
+
return;
|
|
17920
|
+
}
|
|
17921
|
+
firedRef.current = true;
|
|
17922
|
+
api.postAnalytics({
|
|
17923
|
+
event: "appinspector_open",
|
|
17924
|
+
payload: buildPayload(deploymentContainer)
|
|
17925
|
+
}).catch(() => {
|
|
17926
|
+
});
|
|
17927
|
+
}, [api, deploymentContainer, status, statusError]);
|
|
17928
|
+
};
|
|
17929
|
+
|
|
15989
17930
|
// src/context.tsx
|
|
15990
|
-
import { jsx as
|
|
15991
|
-
var AppInspectorContext =
|
|
17931
|
+
import { Fragment as Fragment7, jsx as jsx131 } from "react/jsx-runtime";
|
|
17932
|
+
var AppInspectorContext = createContext9(void 0);
|
|
15992
17933
|
var useAppInspector = () => {
|
|
15993
|
-
const context =
|
|
17934
|
+
const context = useContext16(AppInspectorContext);
|
|
15994
17935
|
if (!context) {
|
|
15995
17936
|
throw new Error("@localstack-studio/ui: components must be used within a <AppInspectorContextProvider>");
|
|
15996
17937
|
}
|
|
15997
17938
|
return context;
|
|
15998
17939
|
};
|
|
17940
|
+
var AppInspectorAnalyticsBoundary = ({ children }) => {
|
|
17941
|
+
useAppInspectorOpenAnalytics();
|
|
17942
|
+
return /* @__PURE__ */ jsx131(Fragment7, { children });
|
|
17943
|
+
};
|
|
15999
17944
|
var AppInspectorContextProvider = (props) => {
|
|
16000
|
-
const api =
|
|
17945
|
+
const api = useMemo7(
|
|
16001
17946
|
() => createApiClient({ localstackEndpoint: props.localstackEndpoint }),
|
|
16002
17947
|
[props.localstackEndpoint]
|
|
16003
17948
|
);
|
|
@@ -16013,27 +17958,32 @@ var AppInspectorContextProvider = (props) => {
|
|
|
16013
17958
|
},
|
|
16014
17959
|
[props.routePrefix]
|
|
16015
17960
|
);
|
|
16016
|
-
const
|
|
17961
|
+
const deploymentContainer = useMemo7(
|
|
17962
|
+
() => props.deploymentContainer ?? { source: "web" },
|
|
17963
|
+
[props.deploymentContainer]
|
|
17964
|
+
);
|
|
17965
|
+
const contextValue = useMemo7(
|
|
16017
17966
|
() => ({
|
|
17967
|
+
deploymentContainer,
|
|
16018
17968
|
linkComponent: props.linkComponent,
|
|
16019
17969
|
localstackEndpoint: props.localstackEndpoint,
|
|
16020
17970
|
resolveLink
|
|
16021
17971
|
}),
|
|
16022
|
-
[props.linkComponent, props.localstackEndpoint, resolveLink]
|
|
17972
|
+
[deploymentContainer, props.linkComponent, props.localstackEndpoint, resolveLink]
|
|
16023
17973
|
);
|
|
16024
|
-
return /* @__PURE__ */
|
|
17974
|
+
return /* @__PURE__ */ jsx131(ApiProvider, { api, children: /* @__PURE__ */ jsx131(StatusProvider, { children: /* @__PURE__ */ jsx131(AppInspectorContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx131(AppInspectorAnalyticsBoundary, { children: props.children }) }) }) });
|
|
16025
17975
|
};
|
|
16026
17976
|
|
|
16027
17977
|
// src/hooks/use-spans-ws.tsx
|
|
16028
17978
|
function useSpansWebSocket(options) {
|
|
16029
17979
|
const { onMessage } = options;
|
|
16030
|
-
const onMessageRef =
|
|
16031
|
-
|
|
17980
|
+
const onMessageRef = useRef10(onMessage);
|
|
17981
|
+
useEffect14(() => {
|
|
16032
17982
|
onMessageRef.current = onMessage;
|
|
16033
17983
|
}, [onMessage]);
|
|
16034
17984
|
const [connected, setConnected] = useState8(false);
|
|
16035
|
-
const wsRef =
|
|
16036
|
-
const reconnectRef =
|
|
17985
|
+
const wsRef = useRef10(void 0);
|
|
17986
|
+
const reconnectRef = useRef10(void 0);
|
|
16037
17987
|
const { localstackEndpoint } = useAppInspector();
|
|
16038
17988
|
const connect = useCallback6(() => {
|
|
16039
17989
|
if (wsRef.current !== void 0) return;
|
|
@@ -16061,7 +18011,7 @@ function useSpansWebSocket(options) {
|
|
|
16061
18011
|
}
|
|
16062
18012
|
});
|
|
16063
18013
|
}, [localstackEndpoint]);
|
|
16064
|
-
|
|
18014
|
+
useEffect14(() => {
|
|
16065
18015
|
connect();
|
|
16066
18016
|
return () => {
|
|
16067
18017
|
if (reconnectRef.current !== void 0) clearTimeout(reconnectRef.current);
|
|
@@ -16078,17 +18028,17 @@ function useSpansWebSocket(options) {
|
|
|
16078
18028
|
}
|
|
16079
18029
|
|
|
16080
18030
|
// src/hooks/use-throttled-items.ts
|
|
16081
|
-
import { useEffect as
|
|
18031
|
+
import { useEffect as useEffect15, useRef as useRef11, useState as useState9 } from "react";
|
|
16082
18032
|
function useThrottledItems(items, getId, catchUpIncrement = 10) {
|
|
16083
18033
|
const [displayedItems, setDisplayedItems] = useState9([]);
|
|
16084
18034
|
const [isCatchingUpForward, setIsCatchingUpForward] = useState9(false);
|
|
16085
18035
|
const [isCatchingUpBackward, setIsCatchingUpBackward] = useState9(false);
|
|
16086
|
-
const targetRef =
|
|
16087
|
-
const rafRef =
|
|
16088
|
-
const leftHiddenRef =
|
|
16089
|
-
const rightHiddenRef =
|
|
16090
|
-
const shrinkRafPendingRef =
|
|
16091
|
-
|
|
18036
|
+
const targetRef = useRef11([]);
|
|
18037
|
+
const rafRef = useRef11(void 0);
|
|
18038
|
+
const leftHiddenRef = useRef11(0);
|
|
18039
|
+
const rightHiddenRef = useRef11(0);
|
|
18040
|
+
const shrinkRafPendingRef = useRef11(false);
|
|
18041
|
+
useEffect15(() => {
|
|
16092
18042
|
const previousTarget = targetRef.current;
|
|
16093
18043
|
const target = items ?? [];
|
|
16094
18044
|
targetRef.current = target;
|
|
@@ -16159,7 +18109,7 @@ function useThrottledItems(items, getId, catchUpIncrement = 10) {
|
|
|
16159
18109
|
});
|
|
16160
18110
|
}
|
|
16161
18111
|
}, [items, getId, catchUpIncrement]);
|
|
16162
|
-
|
|
18112
|
+
useEffect15(() => {
|
|
16163
18113
|
return () => {
|
|
16164
18114
|
if (rafRef.current !== void 0) {
|
|
16165
18115
|
cancelAnimationFrame(rafRef.current);
|
|
@@ -16179,7 +18129,7 @@ var useSpans = () => {
|
|
|
16179
18129
|
const [fetchError, setFetchError] = useState10();
|
|
16180
18130
|
const [fetchingForward, setFetchingForward] = useState10(false);
|
|
16181
18131
|
const [fetchingBackward, setFetchingBackward] = useState10(false);
|
|
16182
|
-
const paginationBufferRef =
|
|
18132
|
+
const paginationBufferRef = useRef12(createPaginationBuffer({
|
|
16183
18133
|
async fetchPage(token) {
|
|
16184
18134
|
const response = await api.getSpans({
|
|
16185
18135
|
limit: PAGE_SIZE,
|
|
@@ -16206,9 +18156,9 @@ var useSpans = () => {
|
|
|
16206
18156
|
onError: (error) => {
|
|
16207
18157
|
setFetchError(error);
|
|
16208
18158
|
},
|
|
16209
|
-
onStatusChange(
|
|
16210
|
-
setFetchingBackward(
|
|
16211
|
-
setFetchingForward(
|
|
18159
|
+
onStatusChange(status) {
|
|
18160
|
+
setFetchingBackward(status.fetchingBackward);
|
|
18161
|
+
setFetchingForward(status.fetchingForward);
|
|
16212
18162
|
},
|
|
16213
18163
|
// The spans endpoint is sorted by span ingestion time, which might differ from
|
|
16214
18164
|
// the span timestamp. In order to accomodate for this, we will sort the spans
|
|
@@ -16229,10 +18179,9 @@ var useSpans = () => {
|
|
|
16229
18179
|
const fetchBackward = useCallback7(() => {
|
|
16230
18180
|
void paginationBufferRef.current.fetchBackward();
|
|
16231
18181
|
}, []);
|
|
16232
|
-
|
|
18182
|
+
useEffect16(() => {
|
|
16233
18183
|
fetchForward();
|
|
16234
18184
|
}, [fetchForward]);
|
|
16235
|
-
const { checking, checkStatus, error: statusError, status } = useStatus();
|
|
16236
18185
|
const [clearingSpans, setClearingSpans] = useState10(false);
|
|
16237
18186
|
const clearSpans = useCallback7(async () => {
|
|
16238
18187
|
if (clearingSpans) {
|
|
@@ -16255,7 +18204,7 @@ var useSpans = () => {
|
|
|
16255
18204
|
const toggleStream = useCallback7(() => {
|
|
16256
18205
|
setStreamPaused((previous) => !previous);
|
|
16257
18206
|
}, []);
|
|
16258
|
-
|
|
18207
|
+
useEffect16(() => {
|
|
16259
18208
|
if (hasMoreForward === true && !fetchingForward && !streamPaused) {
|
|
16260
18209
|
void paginationBufferRef.current.fetchForward();
|
|
16261
18210
|
}
|
|
@@ -16275,8 +18224,6 @@ var useSpans = () => {
|
|
|
16275
18224
|
}
|
|
16276
18225
|
});
|
|
16277
18226
|
return {
|
|
16278
|
-
checking,
|
|
16279
|
-
checkStatus,
|
|
16280
18227
|
clearingSpans,
|
|
16281
18228
|
clearSpans,
|
|
16282
18229
|
fetchBackward,
|
|
@@ -16289,8 +18236,6 @@ var useSpans = () => {
|
|
|
16289
18236
|
iamErrorCount,
|
|
16290
18237
|
licenseLimit,
|
|
16291
18238
|
spans: throttledSpans.items,
|
|
16292
|
-
status,
|
|
16293
|
-
statusError,
|
|
16294
18239
|
streamPaused,
|
|
16295
18240
|
systemLimit,
|
|
16296
18241
|
toggleStream,
|
|
@@ -16303,12 +18248,12 @@ import { ArrowBack } from "@mui/icons-material";
|
|
|
16303
18248
|
import { Box as Box19, Button as Button6, Drawer, Paper as Paper3 } from "@mui/material";
|
|
16304
18249
|
import { styled } from "@mui/material/styles";
|
|
16305
18250
|
import { ReactFlowProvider } from "@xyflow/react";
|
|
16306
|
-
import { useCallback as useCallback9, useEffect as
|
|
18251
|
+
import { useCallback as useCallback9, useEffect as useEffect21, useRef as useRef16, useState as useState17 } from "react";
|
|
16307
18252
|
|
|
16308
18253
|
// src/components/event-details/event-details.tsx
|
|
16309
18254
|
import { Close as Close2 } from "@mui/icons-material";
|
|
16310
18255
|
import { Alert as Alert4, Box as Box15, Chip as Chip3, Divider as Divider3, FormControlLabel as FormControlLabel2, IconButton as IconButton4, Stack as Stack2, Switch, Typography as Typography10 } from "@mui/material";
|
|
16311
|
-
import { useMemo as
|
|
18256
|
+
import { useMemo as useMemo12, useState as useState16 } from "react";
|
|
16312
18257
|
|
|
16313
18258
|
// src/utils/iam-utils.ts
|
|
16314
18259
|
function determinePermissionStatus(payload) {
|
|
@@ -16507,28 +18452,28 @@ var getEventGroupsByType = (events) => {
|
|
|
16507
18452
|
// src/components/event-details/event-detail.tsx
|
|
16508
18453
|
import { KeyboardArrowDown as KeyboardArrowDown2, KeyboardArrowRight as KeyboardArrowRight2 } from "@mui/icons-material";
|
|
16509
18454
|
import { Box as Box12, IconButton as IconButton3, Typography as Typography7 } from "@mui/material";
|
|
16510
|
-
import { useEffect as
|
|
18455
|
+
import { useEffect as useEffect18, useMemo as useMemo10, useRef as useRef14, useState as useState13 } from "react";
|
|
16511
18456
|
|
|
16512
18457
|
// src/components/status-icon.tsx
|
|
16513
18458
|
import { Cancel, CheckCircle, Error as Error2, Info, RemoveCircle } from "@mui/icons-material";
|
|
16514
18459
|
import { Box as Box7 } from "@mui/material";
|
|
16515
|
-
import { jsx as
|
|
18460
|
+
import { jsx as jsx132 } from "react/jsx-runtime";
|
|
16516
18461
|
var StatusIcon = ({ errorLevel }) => {
|
|
16517
18462
|
switch (errorLevel) {
|
|
16518
18463
|
case EventLevel.LevelError: {
|
|
16519
|
-
return /* @__PURE__ */
|
|
18464
|
+
return /* @__PURE__ */ jsx132(Cancel, { sx: { color: "red" } });
|
|
16520
18465
|
}
|
|
16521
18466
|
case EventLevel.LevelInfo: {
|
|
16522
|
-
return /* @__PURE__ */
|
|
18467
|
+
return /* @__PURE__ */ jsx132(Info, { sx: { color: "gray" } });
|
|
16523
18468
|
}
|
|
16524
18469
|
case EventLevel.LevelPermission: {
|
|
16525
|
-
return /* @__PURE__ */
|
|
18470
|
+
return /* @__PURE__ */ jsx132(RemoveCircle, { sx: { color: "blue" } });
|
|
16526
18471
|
}
|
|
16527
18472
|
case EventLevel.LevelWarning: {
|
|
16528
|
-
return /* @__PURE__ */
|
|
18473
|
+
return /* @__PURE__ */ jsx132(Error2, { sx: { color: "orange" } });
|
|
16529
18474
|
}
|
|
16530
18475
|
default: {
|
|
16531
|
-
return /* @__PURE__ */
|
|
18476
|
+
return /* @__PURE__ */ jsx132(CheckCircle, { sx: { color: "lightgray" } });
|
|
16532
18477
|
}
|
|
16533
18478
|
}
|
|
16534
18479
|
};
|
|
@@ -16536,39 +18481,39 @@ var StatusIcon = ({ errorLevel }) => {
|
|
|
16536
18481
|
// src/components/event-details/iam-event-detail.tsx
|
|
16537
18482
|
import { CheckCircle as CheckCircle2, Error as ErrorIcon, Warning } from "@mui/icons-material";
|
|
16538
18483
|
import { Box as Box8, Chip, Typography as Typography5 } from "@mui/material";
|
|
16539
|
-
import { jsx as
|
|
18484
|
+
import { jsx as jsx133, jsxs as jsxs124 } from "react/jsx-runtime";
|
|
16540
18485
|
var DetailRow = ({ content, label }) => /* @__PURE__ */ jsxs124(Box8, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
|
|
16541
|
-
/* @__PURE__ */
|
|
16542
|
-
/* @__PURE__ */
|
|
18486
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
|
|
18487
|
+
/* @__PURE__ */ jsx133(Box8, { children: typeof content === "string" ? /* @__PURE__ */ jsx133(Typography5, { sx: { color: "text.primary", wordBreak: "break-word" }, variant: "caption", children: content }) : content })
|
|
16543
18488
|
] });
|
|
16544
18489
|
var PermissionIcon = ({ status }) => {
|
|
16545
18490
|
switch (status) {
|
|
16546
18491
|
case "explicitly_allowed":
|
|
16547
18492
|
case "implicitly_allowed": {
|
|
16548
|
-
return /* @__PURE__ */
|
|
18493
|
+
return /* @__PURE__ */ jsx133(CheckCircle2, { sx: { color: "success.main", fontSize: "1rem" } });
|
|
16549
18494
|
}
|
|
16550
18495
|
case "explicitly_denied": {
|
|
16551
|
-
return /* @__PURE__ */
|
|
18496
|
+
return /* @__PURE__ */ jsx133(ErrorIcon, { sx: { color: "error.main", fontSize: "1rem" } });
|
|
16552
18497
|
}
|
|
16553
18498
|
case "implicitly_denied": {
|
|
16554
|
-
return /* @__PURE__ */
|
|
18499
|
+
return /* @__PURE__ */ jsx133(Warning, { sx: { color: "warning.main", fontSize: "1rem" } });
|
|
16555
18500
|
}
|
|
16556
18501
|
}
|
|
16557
18502
|
};
|
|
16558
18503
|
var IAMEventDetail = ({ event }) => {
|
|
16559
18504
|
const payloadString = event.attributes?.payload;
|
|
16560
18505
|
if (!payloadString) {
|
|
16561
|
-
return /* @__PURE__ */
|
|
18506
|
+
return /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "No IAM policy evaluation data available" });
|
|
16562
18507
|
}
|
|
16563
18508
|
const parsedIAM = parseIAMEvent(payloadString);
|
|
16564
18509
|
if (!parsedIAM) {
|
|
16565
|
-
return /* @__PURE__ */
|
|
18510
|
+
return /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Failed to parse IAM event data" });
|
|
16566
18511
|
}
|
|
16567
18512
|
return /* @__PURE__ */ jsxs124(Box8, { children: [
|
|
16568
|
-
/* @__PURE__ */
|
|
18513
|
+
/* @__PURE__ */ jsx133(Box8, { sx: { mb: 1.5 }, children: /* @__PURE__ */ jsx133(
|
|
16569
18514
|
Chip,
|
|
16570
18515
|
{
|
|
16571
|
-
icon: /* @__PURE__ */
|
|
18516
|
+
icon: /* @__PURE__ */ jsx133(PermissionIcon, { status: parsedIAM.permission }),
|
|
16572
18517
|
label: formatPermissionStatus(parsedIAM.permission),
|
|
16573
18518
|
size: "small",
|
|
16574
18519
|
sx: {
|
|
@@ -16578,36 +18523,36 @@ var IAMEventDetail = ({ event }) => {
|
|
|
16578
18523
|
variant: "outlined"
|
|
16579
18524
|
}
|
|
16580
18525
|
) }),
|
|
16581
|
-
/* @__PURE__ */
|
|
16582
|
-
/* @__PURE__ */
|
|
16583
|
-
parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */
|
|
18526
|
+
/* @__PURE__ */ jsx133(DetailRow, { content: `${parsedIAM.service}:${parsedIAM.operation}`, label: "Operation" }),
|
|
18527
|
+
/* @__PURE__ */ jsx133(DetailRow, { content: parsedIAM.principal, label: "Principal" }),
|
|
18528
|
+
parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsx133(
|
|
16584
18529
|
DetailRow,
|
|
16585
18530
|
{
|
|
16586
|
-
content: /* @__PURE__ */
|
|
18531
|
+
content: /* @__PURE__ */ jsx133(Box8, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx133(Typography5, { sx: { color: "text.primary", display: "block" }, variant: "caption", children: action }, action)) }),
|
|
16587
18532
|
label: "Actions"
|
|
16588
18533
|
}
|
|
16589
18534
|
),
|
|
16590
|
-
parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */
|
|
18535
|
+
parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsx133(
|
|
16591
18536
|
DetailRow,
|
|
16592
18537
|
{
|
|
16593
|
-
content: /* @__PURE__ */
|
|
18538
|
+
content: /* @__PURE__ */ jsx133(Box8, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx133(Typography5, { sx: { color: "text.primary", display: "block", wordBreak: "break-all" }, variant: "caption", children: resource }, resource)) }),
|
|
16594
18539
|
label: "Resources"
|
|
16595
18540
|
}
|
|
16596
18541
|
),
|
|
16597
18542
|
(parsedIAM.details.explicitAllows !== void 0 || parsedIAM.details.explicitDenies !== void 0 || parsedIAM.details.implicitDenies !== void 0) && /* @__PURE__ */ jsxs124(Box8, { sx: { mt: 1.5 }, children: [
|
|
16598
|
-
/* @__PURE__ */
|
|
18543
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", sx: { display: "block", fontWeight: 600, mb: 0.5 }, variant: "caption", children: "Policy Evaluation" }),
|
|
16599
18544
|
/* @__PURE__ */ jsxs124(Box8, { sx: { display: "grid", gap: 1, gridTemplateColumns: "repeat(3, 1fr)" }, children: [
|
|
16600
18545
|
parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */ jsxs124(Box8, { sx: { textAlign: "center" }, children: [
|
|
16601
|
-
/* @__PURE__ */
|
|
16602
|
-
/* @__PURE__ */
|
|
18546
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "success.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.explicitAllows }),
|
|
18547
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Explicit Allows" })
|
|
16603
18548
|
] }),
|
|
16604
18549
|
parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */ jsxs124(Box8, { sx: { textAlign: "center" }, children: [
|
|
16605
|
-
/* @__PURE__ */
|
|
16606
|
-
/* @__PURE__ */
|
|
18550
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "error.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.explicitDenies }),
|
|
18551
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Explicit Denies" })
|
|
16607
18552
|
] }),
|
|
16608
18553
|
parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */ jsxs124(Box8, { sx: { textAlign: "center" }, children: [
|
|
16609
|
-
/* @__PURE__ */
|
|
16610
|
-
/* @__PURE__ */
|
|
18554
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "warning.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.implicitDenies }),
|
|
18555
|
+
/* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Implicit Denies" })
|
|
16611
18556
|
] })
|
|
16612
18557
|
] })
|
|
16613
18558
|
] })
|
|
@@ -16617,19 +18562,19 @@ var IAMEventDetail = ({ event }) => {
|
|
|
16617
18562
|
// src/components/event-details/iam-permission-detail.tsx
|
|
16618
18563
|
import { KeyboardArrowDown, KeyboardArrowRight } from "@mui/icons-material";
|
|
16619
18564
|
import { Box as Box9, Chip as Chip2, IconButton as IconButton2, Typography as Typography6 } from "@mui/material";
|
|
16620
|
-
import { useMemo as
|
|
16621
|
-
import { jsx as
|
|
18565
|
+
import { useMemo as useMemo8, useState as useState11 } from "react";
|
|
18566
|
+
import { jsx as jsx134, jsxs as jsxs125 } from "react/jsx-runtime";
|
|
16622
18567
|
var getChipColors = (status) => ({
|
|
16623
18568
|
backgroundColor: getPermissionStatusColor(status),
|
|
16624
18569
|
color: "white"
|
|
16625
18570
|
});
|
|
16626
18571
|
var LabelValue = ({ label, value }) => /* @__PURE__ */ jsxs125(Box9, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
|
|
16627
|
-
/* @__PURE__ */
|
|
16628
|
-
/* @__PURE__ */
|
|
18572
|
+
/* @__PURE__ */ jsx134(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
|
|
18573
|
+
/* @__PURE__ */ jsx134(Typography6, { sx: { wordBreak: "break-all" }, variant: "caption", children: value })
|
|
16629
18574
|
] });
|
|
16630
18575
|
var IAMPermissionItem = ({ event }) => {
|
|
16631
18576
|
const [isOpen, setIsOpen] = useState11(false);
|
|
16632
|
-
const parsedData =
|
|
18577
|
+
const parsedData = useMemo8(() => {
|
|
16633
18578
|
const payloadString = event.attributes?.payload;
|
|
16634
18579
|
if (!payloadString) return;
|
|
16635
18580
|
const parsedIAM2 = parseIAMEvent(payloadString);
|
|
@@ -16642,10 +18587,10 @@ var IAMPermissionItem = ({ event }) => {
|
|
|
16642
18587
|
const { chipColors, parsedIAM } = parsedData;
|
|
16643
18588
|
return /* @__PURE__ */ jsxs125(Box9, { sx: { mb: 0.5 }, children: [
|
|
16644
18589
|
/* @__PURE__ */ jsxs125(Box9, { sx: { alignItems: "center", display: "flex", gap: 1 }, children: [
|
|
16645
|
-
/* @__PURE__ */
|
|
18590
|
+
/* @__PURE__ */ jsx134(IconButton2, { onClick: () => {
|
|
16646
18591
|
setIsOpen(!isOpen);
|
|
16647
|
-
}, size: "small", sx: { p: 0 }, children: isOpen ? /* @__PURE__ */
|
|
16648
|
-
/* @__PURE__ */
|
|
18592
|
+
}, size: "small", sx: { p: 0 }, children: isOpen ? /* @__PURE__ */ jsx134(KeyboardArrowDown, { sx: { fontSize: 16 } }) : /* @__PURE__ */ jsx134(KeyboardArrowRight, { sx: { fontSize: 16 } }) }),
|
|
18593
|
+
/* @__PURE__ */ jsx134(Chip2, { label: formatPermissionStatus(parsedIAM.permission), size: "small", sx: { ...chipColors, fontWeight: 500 } }),
|
|
16649
18594
|
/* @__PURE__ */ jsxs125(Typography6, { color: "text.secondary", noWrap: true, sx: { flex: 1, overflow: "hidden", textOverflow: "ellipsis" }, variant: "caption", children: [
|
|
16650
18595
|
parsedIAM.service,
|
|
16651
18596
|
":",
|
|
@@ -16653,28 +18598,28 @@ var IAMPermissionItem = ({ event }) => {
|
|
|
16653
18598
|
] })
|
|
16654
18599
|
] }),
|
|
16655
18600
|
isOpen && /* @__PURE__ */ jsxs125(Box9, { sx: { borderColor: "divider", borderLeft: "2px solid", ml: 1, mt: 0.5, pl: 1.5, py: 0.5 }, children: [
|
|
16656
|
-
/* @__PURE__ */
|
|
18601
|
+
/* @__PURE__ */ jsx134(LabelValue, { label: "Principal", value: parsedIAM.principal }),
|
|
16657
18602
|
parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsxs125(Box9, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
|
|
16658
|
-
/* @__PURE__ */
|
|
16659
|
-
/* @__PURE__ */
|
|
18603
|
+
/* @__PURE__ */ jsx134(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: "Actions" }),
|
|
18604
|
+
/* @__PURE__ */ jsx134(Box9, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx134(Typography6, { sx: { display: "block" }, variant: "caption", children: action }, action)) })
|
|
16660
18605
|
] }),
|
|
16661
18606
|
parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsxs125(Box9, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr" }, children: [
|
|
16662
|
-
/* @__PURE__ */
|
|
16663
|
-
/* @__PURE__ */
|
|
18607
|
+
/* @__PURE__ */ jsx134(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: "Resources" }),
|
|
18608
|
+
/* @__PURE__ */ jsx134(Box9, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx134(Typography6, { sx: { display: "block", wordBreak: "break-all" }, variant: "caption", children: resource }, resource)) })
|
|
16664
18609
|
] })
|
|
16665
18610
|
] })
|
|
16666
18611
|
] });
|
|
16667
18612
|
};
|
|
16668
|
-
var IAMPermissionDetail = ({ events }) => /* @__PURE__ */
|
|
18613
|
+
var IAMPermissionDetail = ({ events }) => /* @__PURE__ */ jsx134(Box9, { children: events.map((event) => /* @__PURE__ */ jsx134(IAMPermissionItem, { event }, `${event.span_id}-${event.event_id}`)) });
|
|
16669
18614
|
|
|
16670
18615
|
// src/components/event-details/payload-viewer.tsx
|
|
16671
18616
|
import { Box as Box11, useTheme as useTheme3 } from "@mui/material";
|
|
16672
18617
|
|
|
16673
18618
|
// node_modules/@textea/json-viewer/dist/index.mjs
|
|
16674
18619
|
var import_copy_to_clipboard = __toESM(require_copy_to_clipboard(), 1);
|
|
16675
|
-
import { jsx as
|
|
18620
|
+
import { jsx as jsx135, jsxs as jsxs126, Fragment as Fragment8 } from "react/jsx-runtime";
|
|
16676
18621
|
import { Box as Box10, InputBase, NoSsr, SvgIcon, createTheme, ThemeProvider, Paper as Paper2 } from "@mui/material";
|
|
16677
|
-
import { createContext as
|
|
18622
|
+
import { createContext as createContext10, useContext as useContext17, useState as useState12, useRef as useRef13, useCallback as useCallback8, useMemo as useMemo9, useEffect as useEffect17, memo as memo9 } from "react";
|
|
16678
18623
|
import { create, useStore, createStore } from "zustand";
|
|
16679
18624
|
function r(e2) {
|
|
16680
18625
|
var t2, f2, n2 = "";
|
|
@@ -16790,10 +18735,10 @@ var createJsonViewerStore = (props) => {
|
|
|
16790
18735
|
};
|
|
16791
18736
|
});
|
|
16792
18737
|
};
|
|
16793
|
-
var JsonViewerStoreContext =
|
|
18738
|
+
var JsonViewerStoreContext = createContext10(void 0);
|
|
16794
18739
|
JsonViewerStoreContext.Provider;
|
|
16795
18740
|
var useJsonViewerStore = (selector2, equalityFn) => {
|
|
16796
|
-
const store =
|
|
18741
|
+
const store = useContext17(JsonViewerStoreContext);
|
|
16797
18742
|
return useStore(store, selector2, equalityFn);
|
|
16798
18743
|
};
|
|
16799
18744
|
var useTextColor = () => {
|
|
@@ -16919,7 +18864,7 @@ async function copyString(value) {
|
|
|
16919
18864
|
function useClipboard() {
|
|
16920
18865
|
let { timeout = 2e3 } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
16921
18866
|
const [copied, setCopied] = useState12(false);
|
|
16922
|
-
const copyTimeout =
|
|
18867
|
+
const copyTimeout = useRef13(null);
|
|
16923
18868
|
const handleCopyResult = useCallback8((value) => {
|
|
16924
18869
|
const current = copyTimeout.current;
|
|
16925
18870
|
if (current) {
|
|
@@ -16966,7 +18911,7 @@ function useClipboard() {
|
|
|
16966
18911
|
}
|
|
16967
18912
|
function useIsCycleReference(path, value) {
|
|
16968
18913
|
const rootValue = useJsonViewerStore((store) => store.value);
|
|
16969
|
-
return
|
|
18914
|
+
return useMemo9(() => isCycleReference(rootValue, path, value), [
|
|
16970
18915
|
path,
|
|
16971
18916
|
value,
|
|
16972
18917
|
rootValue
|
|
@@ -16979,7 +18924,7 @@ function useInspect(path, value, nestedIndex) {
|
|
|
16979
18924
|
const setInspectCache = useJsonViewerStore((store) => store.setInspectCache);
|
|
16980
18925
|
const defaultInspectDepth = useJsonViewerStore((store) => store.defaultInspectDepth);
|
|
16981
18926
|
const defaultInspectControl = useJsonViewerStore((store) => store.defaultInspectControl);
|
|
16982
|
-
|
|
18927
|
+
useEffect17(() => {
|
|
16983
18928
|
const inspect2 = getInspectCache(path, nestedIndex);
|
|
16984
18929
|
if (inspect2 !== void 0) {
|
|
16985
18930
|
return;
|
|
@@ -17027,7 +18972,7 @@ function useInspect(path, value, nestedIndex) {
|
|
|
17027
18972
|
setInspect
|
|
17028
18973
|
];
|
|
17029
18974
|
}
|
|
17030
|
-
var DataBox = (props) => /* @__PURE__ */
|
|
18975
|
+
var DataBox = (props) => /* @__PURE__ */ jsx135(Box10, {
|
|
17031
18976
|
component: "div",
|
|
17032
18977
|
...props,
|
|
17033
18978
|
sx: {
|
|
@@ -17038,7 +18983,7 @@ var DataBox = (props) => /* @__PURE__ */ jsx134(Box10, {
|
|
|
17038
18983
|
var DataTypeLabel = (param) => {
|
|
17039
18984
|
let { dataType, enable = true } = param;
|
|
17040
18985
|
if (!enable) return null;
|
|
17041
|
-
return /* @__PURE__ */
|
|
18986
|
+
return /* @__PURE__ */ jsx135(DataBox, {
|
|
17042
18987
|
className: "data-type-label",
|
|
17043
18988
|
sx: {
|
|
17044
18989
|
mx: 0.5,
|
|
@@ -17062,12 +19007,12 @@ function defineEasyType(param) {
|
|
|
17062
19007
|
color: color2
|
|
17063
19008
|
},
|
|
17064
19009
|
children: [
|
|
17065
|
-
displayTypeLabel && storeDisplayDataTypes && /* @__PURE__ */
|
|
19010
|
+
displayTypeLabel && storeDisplayDataTypes && /* @__PURE__ */ jsx135(DataTypeLabel, {
|
|
17066
19011
|
dataType: type
|
|
17067
19012
|
}),
|
|
17068
|
-
/* @__PURE__ */
|
|
19013
|
+
/* @__PURE__ */ jsx135(DataBox, {
|
|
17069
19014
|
className: "".concat(type, "-value"),
|
|
17070
|
-
children: /* @__PURE__ */
|
|
19015
|
+
children: /* @__PURE__ */ jsx135(Render, {
|
|
17071
19016
|
path: props.path,
|
|
17072
19017
|
inspect: props.inspect,
|
|
17073
19018
|
setInspect: props.setInspect,
|
|
@@ -17107,7 +19052,7 @@ function defineEasyType(param) {
|
|
|
17107
19052
|
}, [
|
|
17108
19053
|
setValue
|
|
17109
19054
|
]);
|
|
17110
|
-
return /* @__PURE__ */
|
|
19055
|
+
return /* @__PURE__ */ jsx135(InputBase, {
|
|
17111
19056
|
autoFocus: true,
|
|
17112
19057
|
value,
|
|
17113
19058
|
onChange: handleChange,
|
|
@@ -17147,7 +19092,7 @@ var booleanType = defineEasyType({
|
|
|
17147
19092
|
},
|
|
17148
19093
|
Renderer: (param) => {
|
|
17149
19094
|
let { value } = param;
|
|
17150
|
-
return /* @__PURE__ */
|
|
19095
|
+
return /* @__PURE__ */ jsx135(Fragment8, {
|
|
17151
19096
|
children: value ? "true" : "false"
|
|
17152
19097
|
});
|
|
17153
19098
|
}
|
|
@@ -17166,7 +19111,7 @@ var dateType = defineEasyType({
|
|
|
17166
19111
|
colorKey: "base0D",
|
|
17167
19112
|
Renderer: (param) => {
|
|
17168
19113
|
let { value } = param;
|
|
17169
|
-
return /* @__PURE__ */
|
|
19114
|
+
return /* @__PURE__ */ jsx135(Fragment8, {
|
|
17170
19115
|
children: value.toLocaleTimeString("en-us", displayOptions)
|
|
17171
19116
|
});
|
|
17172
19117
|
}
|
|
@@ -17197,7 +19142,7 @@ var rb = "}";
|
|
|
17197
19142
|
var PreFunctionType = (props) => {
|
|
17198
19143
|
return /* @__PURE__ */ jsxs126(NoSsr, {
|
|
17199
19144
|
children: [
|
|
17200
|
-
/* @__PURE__ */
|
|
19145
|
+
/* @__PURE__ */ jsx135(DataTypeLabel, {
|
|
17201
19146
|
dataType: "function"
|
|
17202
19147
|
}),
|
|
17203
19148
|
/* @__PURE__ */ jsxs126(Box10, {
|
|
@@ -17216,8 +19161,8 @@ var PreFunctionType = (props) => {
|
|
|
17216
19161
|
});
|
|
17217
19162
|
};
|
|
17218
19163
|
var PostFunctionType = () => {
|
|
17219
|
-
return /* @__PURE__ */
|
|
17220
|
-
children: /* @__PURE__ */
|
|
19164
|
+
return /* @__PURE__ */ jsx135(NoSsr, {
|
|
19165
|
+
children: /* @__PURE__ */ jsx135(Box10, {
|
|
17221
19166
|
component: "span",
|
|
17222
19167
|
className: "data-function-end",
|
|
17223
19168
|
children: rb
|
|
@@ -17226,15 +19171,15 @@ var PostFunctionType = () => {
|
|
|
17226
19171
|
};
|
|
17227
19172
|
var FunctionType = (props) => {
|
|
17228
19173
|
const functionColor = useJsonViewerStore((store) => store.colorspace.base05);
|
|
17229
|
-
return /* @__PURE__ */
|
|
17230
|
-
children: /* @__PURE__ */
|
|
19174
|
+
return /* @__PURE__ */ jsx135(NoSsr, {
|
|
19175
|
+
children: /* @__PURE__ */ jsx135(Box10, {
|
|
17231
19176
|
className: "data-function",
|
|
17232
19177
|
sx: {
|
|
17233
19178
|
display: props.inspect ? "block" : "inline-block",
|
|
17234
19179
|
pl: props.inspect ? 2 : 0,
|
|
17235
19180
|
color: functionColor
|
|
17236
19181
|
},
|
|
17237
|
-
children: props.inspect ? functionBody(props.value) : /* @__PURE__ */
|
|
19182
|
+
children: props.inspect ? functionBody(props.value) : /* @__PURE__ */ jsx135(Box10, {
|
|
17238
19183
|
component: "span",
|
|
17239
19184
|
className: "data-function-body",
|
|
17240
19185
|
onClick: () => props.setInspect(true),
|
|
@@ -17262,7 +19207,7 @@ var nullType = defineEasyType({
|
|
|
17262
19207
|
displayTypeLabel: false,
|
|
17263
19208
|
Renderer: () => {
|
|
17264
19209
|
const backgroundColor = useJsonViewerStore((store) => store.colorspace.base02);
|
|
17265
|
-
return /* @__PURE__ */
|
|
19210
|
+
return /* @__PURE__ */ jsx135(Box10, {
|
|
17266
19211
|
sx: {
|
|
17267
19212
|
fontSize: "0.8rem",
|
|
17268
19213
|
backgroundColor,
|
|
@@ -17285,7 +19230,7 @@ var nanType = defineEasyType({
|
|
|
17285
19230
|
deserialize: (value) => parseFloat(value),
|
|
17286
19231
|
Renderer: () => {
|
|
17287
19232
|
const backgroundColor = useJsonViewerStore((store) => store.colorspace.base02);
|
|
17288
|
-
return /* @__PURE__ */
|
|
19233
|
+
return /* @__PURE__ */ jsx135(Box10, {
|
|
17289
19234
|
sx: {
|
|
17290
19235
|
backgroundColor,
|
|
17291
19236
|
fontSize: "0.8rem",
|
|
@@ -17305,7 +19250,7 @@ var floatType = defineEasyType({
|
|
|
17305
19250
|
deserialize: (value) => parseFloat(value),
|
|
17306
19251
|
Renderer: (param) => {
|
|
17307
19252
|
let { value } = param;
|
|
17308
|
-
return /* @__PURE__ */
|
|
19253
|
+
return /* @__PURE__ */ jsx135(Fragment8, {
|
|
17309
19254
|
children: value
|
|
17310
19255
|
});
|
|
17311
19256
|
}
|
|
@@ -17319,7 +19264,7 @@ var intType = defineEasyType({
|
|
|
17319
19264
|
deserialize: (value) => parseFloat(value),
|
|
17320
19265
|
Renderer: (param) => {
|
|
17321
19266
|
let { value } = param;
|
|
17322
|
-
return /* @__PURE__ */
|
|
19267
|
+
return /* @__PURE__ */ jsx135(Fragment8, {
|
|
17323
19268
|
children: value
|
|
17324
19269
|
});
|
|
17325
19270
|
}
|
|
@@ -17332,16 +19277,16 @@ var bigIntType = defineEasyType({
|
|
|
17332
19277
|
deserialize: (value) => BigInt(value.replace(/\D/g, "")),
|
|
17333
19278
|
Renderer: (param) => {
|
|
17334
19279
|
let { value } = param;
|
|
17335
|
-
return /* @__PURE__ */
|
|
19280
|
+
return /* @__PURE__ */ jsx135(Fragment8, {
|
|
17336
19281
|
children: "".concat(value, "n")
|
|
17337
19282
|
});
|
|
17338
19283
|
}
|
|
17339
19284
|
});
|
|
17340
19285
|
var BaseIcon = (param) => {
|
|
17341
19286
|
let { d: d2, ...props } = param;
|
|
17342
|
-
return /* @__PURE__ */
|
|
19287
|
+
return /* @__PURE__ */ jsx135(SvgIcon, {
|
|
17343
19288
|
...props,
|
|
17344
|
-
children: /* @__PURE__ */
|
|
19289
|
+
children: /* @__PURE__ */ jsx135("path", {
|
|
17345
19290
|
d: d2
|
|
17346
19291
|
})
|
|
17347
19292
|
});
|
|
@@ -17356,55 +19301,55 @@ var Edit = "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.3
|
|
|
17356
19301
|
var ExpandMore = "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z";
|
|
17357
19302
|
var Delete = "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5l-1-1h-5l-1 1H5v2h14V4z";
|
|
17358
19303
|
var AddBoxIcon = (props) => {
|
|
17359
|
-
return /* @__PURE__ */
|
|
19304
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17360
19305
|
d: AddBox,
|
|
17361
19306
|
...props
|
|
17362
19307
|
});
|
|
17363
19308
|
};
|
|
17364
19309
|
var CheckIcon = (props) => {
|
|
17365
|
-
return /* @__PURE__ */
|
|
19310
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17366
19311
|
d: Check,
|
|
17367
19312
|
...props
|
|
17368
19313
|
});
|
|
17369
19314
|
};
|
|
17370
19315
|
var ChevronRightIcon = (props) => {
|
|
17371
|
-
return /* @__PURE__ */
|
|
19316
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17372
19317
|
d: ChevronRight,
|
|
17373
19318
|
...props
|
|
17374
19319
|
});
|
|
17375
19320
|
};
|
|
17376
19321
|
var CircularArrowsIcon = (props) => {
|
|
17377
|
-
return /* @__PURE__ */
|
|
19322
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17378
19323
|
d: CircularArrows,
|
|
17379
19324
|
...props
|
|
17380
19325
|
});
|
|
17381
19326
|
};
|
|
17382
19327
|
var CloseIcon = (props) => {
|
|
17383
|
-
return /* @__PURE__ */
|
|
19328
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17384
19329
|
d: Close,
|
|
17385
19330
|
...props
|
|
17386
19331
|
});
|
|
17387
19332
|
};
|
|
17388
19333
|
var ContentCopyIcon = (props) => {
|
|
17389
|
-
return /* @__PURE__ */
|
|
19334
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17390
19335
|
d: ContentCopy,
|
|
17391
19336
|
...props
|
|
17392
19337
|
});
|
|
17393
19338
|
};
|
|
17394
19339
|
var EditIcon = (props) => {
|
|
17395
|
-
return /* @__PURE__ */
|
|
19340
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17396
19341
|
d: Edit,
|
|
17397
19342
|
...props
|
|
17398
19343
|
});
|
|
17399
19344
|
};
|
|
17400
19345
|
var ExpandMoreIcon = (props) => {
|
|
17401
|
-
return /* @__PURE__ */
|
|
19346
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17402
19347
|
d: ExpandMore,
|
|
17403
19348
|
...props
|
|
17404
19349
|
});
|
|
17405
19350
|
};
|
|
17406
19351
|
var DeleteIcon = (props) => {
|
|
17407
|
-
return /* @__PURE__ */
|
|
19352
|
+
return /* @__PURE__ */ jsx135(BaseIcon, {
|
|
17408
19353
|
d: Delete,
|
|
17409
19354
|
...props
|
|
17410
19355
|
});
|
|
@@ -17427,17 +19372,17 @@ function inspectMetadata(value) {
|
|
|
17427
19372
|
var PreObjectType = (props) => {
|
|
17428
19373
|
const metadataColor = useJsonViewerStore((store) => store.colorspace.base04);
|
|
17429
19374
|
const textColor = useTextColor();
|
|
17430
|
-
const isArrayLike =
|
|
19375
|
+
const isArrayLike = useMemo9(() => Array.isArray(props.value) || props.value instanceof Set, [
|
|
17431
19376
|
props.value
|
|
17432
19377
|
]);
|
|
17433
|
-
const isEmptyValue =
|
|
19378
|
+
const isEmptyValue = useMemo9(() => getValueSize(props.value) === 0, [
|
|
17434
19379
|
props.value
|
|
17435
19380
|
]);
|
|
17436
|
-
const sizeOfValue =
|
|
19381
|
+
const sizeOfValue = useMemo9(() => inspectMetadata(props.value), [
|
|
17437
19382
|
props.value
|
|
17438
19383
|
]);
|
|
17439
19384
|
const displaySize = useJsonViewerStore((store) => store.displaySize);
|
|
17440
|
-
const shouldDisplaySize =
|
|
19385
|
+
const shouldDisplaySize = useMemo9(() => typeof displaySize === "function" ? displaySize(props.path, props.value) : displaySize, [
|
|
17441
19386
|
displaySize,
|
|
17442
19387
|
props.path,
|
|
17443
19388
|
props.value
|
|
@@ -17451,7 +19396,7 @@ var PreObjectType = (props) => {
|
|
|
17451
19396
|
},
|
|
17452
19397
|
children: [
|
|
17453
19398
|
isArrayLike ? arrayLb : objectLb,
|
|
17454
|
-
shouldDisplaySize && props.inspect && !isEmptyValue && /* @__PURE__ */
|
|
19399
|
+
shouldDisplaySize && props.inspect && !isEmptyValue && /* @__PURE__ */ jsx135(Box10, {
|
|
17455
19400
|
component: "span",
|
|
17456
19401
|
sx: {
|
|
17457
19402
|
pl: 0.5,
|
|
@@ -17461,16 +19406,16 @@ var PreObjectType = (props) => {
|
|
|
17461
19406
|
},
|
|
17462
19407
|
children: sizeOfValue
|
|
17463
19408
|
}),
|
|
17464
|
-
isTrap && !props.inspect && /* @__PURE__ */ jsxs126(
|
|
19409
|
+
isTrap && !props.inspect && /* @__PURE__ */ jsxs126(Fragment8, {
|
|
17465
19410
|
children: [
|
|
17466
|
-
/* @__PURE__ */
|
|
19411
|
+
/* @__PURE__ */ jsx135(CircularArrowsIcon, {
|
|
17467
19412
|
sx: {
|
|
17468
19413
|
fontSize: 12,
|
|
17469
19414
|
color: textColor,
|
|
17470
19415
|
mx: 0.5
|
|
17471
19416
|
}
|
|
17472
19417
|
}),
|
|
17473
|
-
/* @__PURE__ */
|
|
19418
|
+
/* @__PURE__ */ jsx135(DataBox, {
|
|
17474
19419
|
sx: {
|
|
17475
19420
|
cursor: "pointer",
|
|
17476
19421
|
userSelect: "none"
|
|
@@ -17485,17 +19430,17 @@ var PreObjectType = (props) => {
|
|
|
17485
19430
|
var PostObjectType = (props) => {
|
|
17486
19431
|
const metadataColor = useJsonViewerStore((store) => store.colorspace.base04);
|
|
17487
19432
|
const textColor = useTextColor();
|
|
17488
|
-
const isArrayLike =
|
|
19433
|
+
const isArrayLike = useMemo9(() => Array.isArray(props.value) || props.value instanceof Set, [
|
|
17489
19434
|
props.value
|
|
17490
19435
|
]);
|
|
17491
|
-
const isEmptyValue =
|
|
19436
|
+
const isEmptyValue = useMemo9(() => getValueSize(props.value) === 0, [
|
|
17492
19437
|
props.value
|
|
17493
19438
|
]);
|
|
17494
|
-
const sizeOfValue =
|
|
19439
|
+
const sizeOfValue = useMemo9(() => inspectMetadata(props.value), [
|
|
17495
19440
|
props.value
|
|
17496
19441
|
]);
|
|
17497
19442
|
const displaySize = useJsonViewerStore((store) => store.displaySize);
|
|
17498
|
-
const shouldDisplaySize =
|
|
19443
|
+
const shouldDisplaySize = useMemo9(() => typeof displaySize === "function" ? displaySize(props.path, props.value) : displaySize, [
|
|
17499
19444
|
displaySize,
|
|
17500
19445
|
props.path,
|
|
17501
19446
|
props.value
|
|
@@ -17511,7 +19456,7 @@ var PostObjectType = (props) => {
|
|
|
17511
19456
|
},
|
|
17512
19457
|
children: [
|
|
17513
19458
|
isArrayLike ? arrayRb : objectRb,
|
|
17514
|
-
shouldDisplaySize && (isEmptyValue || !props.inspect) ? /* @__PURE__ */
|
|
19459
|
+
shouldDisplaySize && (isEmptyValue || !props.inspect) ? /* @__PURE__ */ jsx135(Box10, {
|
|
17515
19460
|
component: "span",
|
|
17516
19461
|
sx: {
|
|
17517
19462
|
pl: 0.5,
|
|
@@ -17534,7 +19479,7 @@ var ObjectType = (props) => {
|
|
|
17534
19479
|
const isTrap = useIsCycleReference(props.path, props.value);
|
|
17535
19480
|
const [displayLength, setDisplayLength] = useState12(useJsonViewerStore((store) => store.maxDisplayLength));
|
|
17536
19481
|
const objectSortKeys = useJsonViewerStore((store) => store.objectSortKeys);
|
|
17537
|
-
const elements =
|
|
19482
|
+
const elements = useMemo9(() => {
|
|
17538
19483
|
if (!props.inspect) {
|
|
17539
19484
|
return null;
|
|
17540
19485
|
}
|
|
@@ -17551,7 +19496,7 @@ var ObjectType = (props) => {
|
|
|
17551
19496
|
...props.path,
|
|
17552
19497
|
key
|
|
17553
19498
|
];
|
|
17554
|
-
elements3.push(/* @__PURE__ */
|
|
19499
|
+
elements3.push(/* @__PURE__ */ jsx135(DataKeyPair, {
|
|
17555
19500
|
path,
|
|
17556
19501
|
value: value2,
|
|
17557
19502
|
prevValue: props.prevValue instanceof Map ? props.prevValue.get(k2) : void 0,
|
|
@@ -17567,7 +19512,7 @@ var ObjectType = (props) => {
|
|
|
17567
19512
|
while (true) {
|
|
17568
19513
|
const nextResult = iterator2.next();
|
|
17569
19514
|
var _nextResult_done;
|
|
17570
|
-
elements3.push(/* @__PURE__ */
|
|
19515
|
+
elements3.push(/* @__PURE__ */ jsx135(DataKeyPair, {
|
|
17571
19516
|
path: [
|
|
17572
19517
|
...props.path,
|
|
17573
19518
|
"iterator:".concat(count2)
|
|
@@ -17595,7 +19540,7 @@ var ObjectType = (props) => {
|
|
|
17595
19540
|
...props.path,
|
|
17596
19541
|
index
|
|
17597
19542
|
];
|
|
17598
|
-
return /* @__PURE__ */
|
|
19543
|
+
return /* @__PURE__ */ jsx135(DataKeyPair, {
|
|
17599
19544
|
path,
|
|
17600
19545
|
value: value2,
|
|
17601
19546
|
prevValue: Array.isArray(props.prevValue) ? props.prevValue[index] : void 0,
|
|
@@ -17627,7 +19572,7 @@ var ObjectType = (props) => {
|
|
|
17627
19572
|
const prevElements = Array.isArray(props.prevValue) ? segmentArray(props.prevValue, groupArraysAfterLength) : void 0;
|
|
17628
19573
|
const elementsLastIndex = elements3.length - 1;
|
|
17629
19574
|
return elements3.map((list, index) => {
|
|
17630
|
-
return /* @__PURE__ */
|
|
19575
|
+
return /* @__PURE__ */ jsx135(DataKeyPair, {
|
|
17631
19576
|
path: props.path,
|
|
17632
19577
|
value: list,
|
|
17633
19578
|
nestedIndex: index,
|
|
@@ -17654,7 +19599,7 @@ var ObjectType = (props) => {
|
|
|
17654
19599
|
...props.path,
|
|
17655
19600
|
key
|
|
17656
19601
|
];
|
|
17657
|
-
return /* @__PURE__ */
|
|
19602
|
+
return /* @__PURE__ */ jsx135(DataKeyPair, {
|
|
17658
19603
|
path,
|
|
17659
19604
|
value: value2,
|
|
17660
19605
|
prevValue: (_props_prevValue = props.prevValue) === null || _props_prevValue === void 0 ? void 0 : _props_prevValue[key],
|
|
@@ -17695,13 +19640,13 @@ var ObjectType = (props) => {
|
|
|
17695
19640
|
const marginLeft = props.inspect ? 0.6 : 0;
|
|
17696
19641
|
const width = useJsonViewerStore((store) => store.indentWidth);
|
|
17697
19642
|
const indentWidth = props.inspect ? width - marginLeft : width;
|
|
17698
|
-
const isEmptyValue =
|
|
19643
|
+
const isEmptyValue = useMemo9(() => getValueSize(props.value) === 0, [
|
|
17699
19644
|
props.value
|
|
17700
19645
|
]);
|
|
17701
19646
|
if (isEmptyValue) {
|
|
17702
19647
|
return null;
|
|
17703
19648
|
}
|
|
17704
|
-
return /* @__PURE__ */
|
|
19649
|
+
return /* @__PURE__ */ jsx135(Box10, {
|
|
17705
19650
|
className: "data-object",
|
|
17706
19651
|
sx: {
|
|
17707
19652
|
display: props.inspect ? "block" : "inline-block",
|
|
@@ -17710,7 +19655,7 @@ var ObjectType = (props) => {
|
|
|
17710
19655
|
color: keyColor,
|
|
17711
19656
|
borderLeft: props.inspect ? "1px solid ".concat(borderColor) : "none"
|
|
17712
19657
|
},
|
|
17713
|
-
children: props.inspect ? elements : !isTrap && /* @__PURE__ */
|
|
19658
|
+
children: props.inspect ? elements : !isTrap && /* @__PURE__ */ jsx135(Box10, {
|
|
17714
19659
|
component: "span",
|
|
17715
19660
|
className: "data-object-body",
|
|
17716
19661
|
onClick: () => props.setInspect(true),
|
|
@@ -17760,7 +19705,7 @@ var stringType = defineEasyType({
|
|
|
17760
19705
|
children: [
|
|
17761
19706
|
'"',
|
|
17762
19707
|
value,
|
|
17763
|
-
hasRest && !showRest && /* @__PURE__ */
|
|
19708
|
+
hasRest && !showRest && /* @__PURE__ */ jsx135(Box10, {
|
|
17764
19709
|
component: "span",
|
|
17765
19710
|
sx: {
|
|
17766
19711
|
padding: 0.5
|
|
@@ -17779,7 +19724,7 @@ var undefinedType = defineEasyType({
|
|
|
17779
19724
|
displayTypeLabel: false,
|
|
17780
19725
|
Renderer: () => {
|
|
17781
19726
|
const backgroundColor = useJsonViewerStore((store) => store.colorspace.base02);
|
|
17782
|
-
return /* @__PURE__ */
|
|
19727
|
+
return /* @__PURE__ */ jsx135(Box10, {
|
|
17783
19728
|
sx: {
|
|
17784
19729
|
fontSize: "0.7rem",
|
|
17785
19730
|
backgroundColor,
|
|
@@ -17831,10 +19776,10 @@ var createTypeRegistryStore = () => {
|
|
|
17831
19776
|
}
|
|
17832
19777
|
}));
|
|
17833
19778
|
};
|
|
17834
|
-
var TypeRegistryStoreContext = /* @__PURE__ */
|
|
19779
|
+
var TypeRegistryStoreContext = /* @__PURE__ */ createContext10(void 0);
|
|
17835
19780
|
TypeRegistryStoreContext.Provider;
|
|
17836
19781
|
var useTypeRegistryStore = (selector2, equalityFn) => {
|
|
17837
|
-
const store =
|
|
19782
|
+
const store = useContext17(TypeRegistryStoreContext);
|
|
17838
19783
|
return useStore(store, selector2, equalityFn);
|
|
17839
19784
|
};
|
|
17840
19785
|
function matchTypeComponents(value, path, registry) {
|
|
@@ -17854,13 +19799,13 @@ function matchTypeComponents(value, path, registry) {
|
|
|
17854
19799
|
}
|
|
17855
19800
|
function useTypeComponents(value, path) {
|
|
17856
19801
|
const registry = useTypeRegistryStore((store) => store.registry);
|
|
17857
|
-
return
|
|
19802
|
+
return useMemo9(() => matchTypeComponents(value, path, registry), [
|
|
17858
19803
|
value,
|
|
17859
19804
|
path,
|
|
17860
19805
|
registry
|
|
17861
19806
|
]);
|
|
17862
19807
|
}
|
|
17863
|
-
var IconBox = (props) => /* @__PURE__ */
|
|
19808
|
+
var IconBox = (props) => /* @__PURE__ */ jsx135(Box10, {
|
|
17864
19809
|
component: "span",
|
|
17865
19810
|
...props,
|
|
17866
19811
|
sx: {
|
|
@@ -17875,7 +19820,7 @@ var DataKeyPair = (props) => {
|
|
|
17875
19820
|
var _props_editable;
|
|
17876
19821
|
const propsEditable = (_props_editable = props.editable) !== null && _props_editable !== void 0 ? _props_editable : void 0;
|
|
17877
19822
|
const storeEditable = useJsonViewerStore((store) => store.editable);
|
|
17878
|
-
const editable =
|
|
19823
|
+
const editable = useMemo9(() => {
|
|
17879
19824
|
if (storeEditable === false) {
|
|
17880
19825
|
return false;
|
|
17881
19826
|
}
|
|
@@ -17896,7 +19841,7 @@ var DataKeyPair = (props) => {
|
|
|
17896
19841
|
const depth = path.length;
|
|
17897
19842
|
const key = path[depth - 1];
|
|
17898
19843
|
const hoverPath = useJsonViewerStore((store) => store.hoverPath);
|
|
17899
|
-
const isHover =
|
|
19844
|
+
const isHover = useMemo9(() => {
|
|
17900
19845
|
return hoverPath && path.every((value2, index) => value2 === hoverPath.path[index] && nestedIndex === hoverPath.nestedIndex);
|
|
17901
19846
|
}, [
|
|
17902
19847
|
hoverPath,
|
|
@@ -17918,7 +19863,7 @@ var DataKeyPair = (props) => {
|
|
|
17918
19863
|
const isNumberKey = Number.isInteger(Number(key));
|
|
17919
19864
|
const storeEnableAdd = useJsonViewerStore((store) => store.enableAdd);
|
|
17920
19865
|
const onAdd = useJsonViewerStore((store) => store.onAdd);
|
|
17921
|
-
const enableAdd =
|
|
19866
|
+
const enableAdd = useMemo9(() => {
|
|
17922
19867
|
if (!onAdd || nestedIndex !== void 0) return false;
|
|
17923
19868
|
if (storeEnableAdd === false) {
|
|
17924
19869
|
return false;
|
|
@@ -17943,7 +19888,7 @@ var DataKeyPair = (props) => {
|
|
|
17943
19888
|
]);
|
|
17944
19889
|
const storeEnableDelete = useJsonViewerStore((store) => store.enableDelete);
|
|
17945
19890
|
const onDelete = useJsonViewerStore((store) => store.onDelete);
|
|
17946
|
-
const enableDelete =
|
|
19891
|
+
const enableDelete = useMemo9(() => {
|
|
17947
19892
|
if (!onDelete || nestedIndex !== void 0) return false;
|
|
17948
19893
|
if (isRoot) {
|
|
17949
19894
|
return false;
|
|
@@ -17970,7 +19915,7 @@ var DataKeyPair = (props) => {
|
|
|
17970
19915
|
const enableClipboard = useJsonViewerStore((store) => store.enableClipboard);
|
|
17971
19916
|
const { copy, copied } = useClipboard();
|
|
17972
19917
|
const highlightUpdates = useJsonViewerStore((store) => store.highlightUpdates);
|
|
17973
|
-
const isHighlight =
|
|
19918
|
+
const isHighlight = useMemo9(() => {
|
|
17974
19919
|
if (!highlightUpdates || prevValue === void 0) return false;
|
|
17975
19920
|
if (typeof value !== typeof prevValue) {
|
|
17976
19921
|
return true;
|
|
@@ -17994,8 +19939,8 @@ var DataKeyPair = (props) => {
|
|
|
17994
19939
|
prevValue,
|
|
17995
19940
|
value
|
|
17996
19941
|
]);
|
|
17997
|
-
const highlightContainer =
|
|
17998
|
-
|
|
19942
|
+
const highlightContainer = useRef13();
|
|
19943
|
+
useEffect17(() => {
|
|
17999
19944
|
if (highlightContainer.current && isHighlight && "animate" in highlightContainer.current) {
|
|
18000
19945
|
highlightContainer.current.animate([
|
|
18001
19946
|
{
|
|
@@ -18044,20 +19989,20 @@ var DataKeyPair = (props) => {
|
|
|
18044
19989
|
path,
|
|
18045
19990
|
value
|
|
18046
19991
|
]);
|
|
18047
|
-
const actionIcons =
|
|
19992
|
+
const actionIcons = useMemo9(() => {
|
|
18048
19993
|
if (editing) {
|
|
18049
|
-
return /* @__PURE__ */ jsxs126(
|
|
19994
|
+
return /* @__PURE__ */ jsxs126(Fragment8, {
|
|
18050
19995
|
children: [
|
|
18051
|
-
/* @__PURE__ */
|
|
18052
|
-
children: /* @__PURE__ */
|
|
19996
|
+
/* @__PURE__ */ jsx135(IconBox, {
|
|
19997
|
+
children: /* @__PURE__ */ jsx135(CloseIcon, {
|
|
18053
19998
|
sx: {
|
|
18054
19999
|
fontSize: ".8rem"
|
|
18055
20000
|
},
|
|
18056
20001
|
onClick: abortEditing
|
|
18057
20002
|
})
|
|
18058
20003
|
}),
|
|
18059
|
-
/* @__PURE__ */
|
|
18060
|
-
children: /* @__PURE__ */
|
|
20004
|
+
/* @__PURE__ */ jsx135(IconBox, {
|
|
20005
|
+
children: /* @__PURE__ */ jsx135(CheckIcon, {
|
|
18061
20006
|
sx: {
|
|
18062
20007
|
fontSize: ".8rem"
|
|
18063
20008
|
},
|
|
@@ -18067,9 +20012,9 @@ var DataKeyPair = (props) => {
|
|
|
18067
20012
|
]
|
|
18068
20013
|
});
|
|
18069
20014
|
}
|
|
18070
|
-
return /* @__PURE__ */ jsxs126(
|
|
20015
|
+
return /* @__PURE__ */ jsxs126(Fragment8, {
|
|
18071
20016
|
children: [
|
|
18072
|
-
enableClipboard && /* @__PURE__ */
|
|
20017
|
+
enableClipboard && /* @__PURE__ */ jsx135(IconBox, {
|
|
18073
20018
|
onClick: (event) => {
|
|
18074
20019
|
event.preventDefault();
|
|
18075
20020
|
try {
|
|
@@ -18078,41 +20023,41 @@ var DataKeyPair = (props) => {
|
|
|
18078
20023
|
console.error(e2);
|
|
18079
20024
|
}
|
|
18080
20025
|
},
|
|
18081
|
-
children: copied ? /* @__PURE__ */
|
|
20026
|
+
children: copied ? /* @__PURE__ */ jsx135(CheckIcon, {
|
|
18082
20027
|
sx: {
|
|
18083
20028
|
fontSize: ".8rem"
|
|
18084
20029
|
}
|
|
18085
|
-
}) : /* @__PURE__ */
|
|
20030
|
+
}) : /* @__PURE__ */ jsx135(ContentCopyIcon, {
|
|
18086
20031
|
sx: {
|
|
18087
20032
|
fontSize: ".8rem"
|
|
18088
20033
|
}
|
|
18089
20034
|
})
|
|
18090
20035
|
}),
|
|
18091
|
-
Editor && editable && serialize && deserialize && /* @__PURE__ */
|
|
20036
|
+
Editor && editable && serialize && deserialize && /* @__PURE__ */ jsx135(IconBox, {
|
|
18092
20037
|
onClick: startEditing,
|
|
18093
|
-
children: /* @__PURE__ */
|
|
20038
|
+
children: /* @__PURE__ */ jsx135(EditIcon, {
|
|
18094
20039
|
sx: {
|
|
18095
20040
|
fontSize: ".8rem"
|
|
18096
20041
|
}
|
|
18097
20042
|
})
|
|
18098
20043
|
}),
|
|
18099
|
-
enableAdd && /* @__PURE__ */
|
|
20044
|
+
enableAdd && /* @__PURE__ */ jsx135(IconBox, {
|
|
18100
20045
|
onClick: (event) => {
|
|
18101
20046
|
event.preventDefault();
|
|
18102
20047
|
onAdd === null || onAdd === void 0 ? void 0 : onAdd(path);
|
|
18103
20048
|
},
|
|
18104
|
-
children: /* @__PURE__ */
|
|
20049
|
+
children: /* @__PURE__ */ jsx135(AddBoxIcon, {
|
|
18105
20050
|
sx: {
|
|
18106
20051
|
fontSize: ".8rem"
|
|
18107
20052
|
}
|
|
18108
20053
|
})
|
|
18109
20054
|
}),
|
|
18110
|
-
enableDelete && /* @__PURE__ */
|
|
20055
|
+
enableDelete && /* @__PURE__ */ jsx135(IconBox, {
|
|
18111
20056
|
onClick: (event) => {
|
|
18112
20057
|
event.preventDefault();
|
|
18113
20058
|
onDelete === null || onDelete === void 0 ? void 0 : onDelete(path, value);
|
|
18114
20059
|
},
|
|
18115
|
-
children: /* @__PURE__ */
|
|
20060
|
+
children: /* @__PURE__ */ jsx135(DeleteIcon, {
|
|
18116
20061
|
sx: {
|
|
18117
20062
|
fontSize: ".9rem"
|
|
18118
20063
|
}
|
|
@@ -18140,12 +20085,12 @@ var DataKeyPair = (props) => {
|
|
|
18140
20085
|
abortEditing,
|
|
18141
20086
|
commitEditing
|
|
18142
20087
|
]);
|
|
18143
|
-
const isEmptyValue =
|
|
20088
|
+
const isEmptyValue = useMemo9(() => getValueSize(value) === 0, [
|
|
18144
20089
|
value
|
|
18145
20090
|
]);
|
|
18146
20091
|
const expandable = !isEmptyValue && !!(PreComponent && PostComponent);
|
|
18147
20092
|
const KeyRenderer = useJsonViewerStore((store) => store.keyRenderer);
|
|
18148
|
-
const downstreamProps =
|
|
20093
|
+
const downstreamProps = useMemo9(() => ({
|
|
18149
20094
|
path,
|
|
18150
20095
|
inspect,
|
|
18151
20096
|
setInspect,
|
|
@@ -18193,7 +20138,7 @@ var DataKeyPair = (props) => {
|
|
|
18193
20138
|
setInspect
|
|
18194
20139
|
]),
|
|
18195
20140
|
children: [
|
|
18196
|
-
expandable ? inspect ? /* @__PURE__ */
|
|
20141
|
+
expandable ? inspect ? /* @__PURE__ */ jsx135(ExpandMoreIcon, {
|
|
18197
20142
|
className: "data-key-toggle-expanded",
|
|
18198
20143
|
sx: {
|
|
18199
20144
|
fontSize: ".8rem",
|
|
@@ -18201,7 +20146,7 @@ var DataKeyPair = (props) => {
|
|
|
18201
20146
|
cursor: "pointer"
|
|
18202
20147
|
}
|
|
18203
20148
|
}
|
|
18204
|
-
}) : /* @__PURE__ */
|
|
20149
|
+
}) : /* @__PURE__ */ jsx135(ChevronRightIcon, {
|
|
18205
20150
|
className: "data-key-toggle-collapsed",
|
|
18206
20151
|
sx: {
|
|
18207
20152
|
fontSize: ".8rem",
|
|
@@ -18210,44 +20155,44 @@ var DataKeyPair = (props) => {
|
|
|
18210
20155
|
}
|
|
18211
20156
|
}
|
|
18212
20157
|
}) : null,
|
|
18213
|
-
/* @__PURE__ */
|
|
20158
|
+
/* @__PURE__ */ jsx135(Box10, {
|
|
18214
20159
|
ref: highlightContainer,
|
|
18215
20160
|
className: "data-key-key",
|
|
18216
20161
|
component: "span",
|
|
18217
|
-
children: isRoot && depth === 0 ? rootName !== false ? quotesOnKeys ? /* @__PURE__ */ jsxs126(
|
|
20162
|
+
children: isRoot && depth === 0 ? rootName !== false ? quotesOnKeys ? /* @__PURE__ */ jsxs126(Fragment8, {
|
|
18218
20163
|
children: [
|
|
18219
20164
|
'"',
|
|
18220
20165
|
rootName,
|
|
18221
20166
|
'"'
|
|
18222
20167
|
]
|
|
18223
|
-
}) : /* @__PURE__ */
|
|
20168
|
+
}) : /* @__PURE__ */ jsx135(Fragment8, {
|
|
18224
20169
|
children: rootName
|
|
18225
|
-
}) : null : KeyRenderer.when(downstreamProps) ? /* @__PURE__ */
|
|
20170
|
+
}) : null : KeyRenderer.when(downstreamProps) ? /* @__PURE__ */ jsx135(KeyRenderer, {
|
|
18226
20171
|
...downstreamProps
|
|
18227
|
-
}) : nestedIndex === void 0 && (isNumberKey ? /* @__PURE__ */
|
|
20172
|
+
}) : nestedIndex === void 0 && (isNumberKey ? /* @__PURE__ */ jsx135(Box10, {
|
|
18228
20173
|
component: "span",
|
|
18229
20174
|
style: {
|
|
18230
20175
|
color: numberKeyColor,
|
|
18231
20176
|
userSelect: isNumberKey ? "none" : "auto"
|
|
18232
20177
|
},
|
|
18233
20178
|
children: key
|
|
18234
|
-
}) : quotesOnKeys ? /* @__PURE__ */ jsxs126(
|
|
20179
|
+
}) : quotesOnKeys ? /* @__PURE__ */ jsxs126(Fragment8, {
|
|
18235
20180
|
children: [
|
|
18236
20181
|
'"',
|
|
18237
20182
|
key,
|
|
18238
20183
|
'"'
|
|
18239
20184
|
]
|
|
18240
|
-
}) : /* @__PURE__ */
|
|
20185
|
+
}) : /* @__PURE__ */ jsx135(Fragment8, {
|
|
18241
20186
|
children: key
|
|
18242
20187
|
}))
|
|
18243
20188
|
}),
|
|
18244
|
-
isRoot ? rootName !== false && /* @__PURE__ */
|
|
20189
|
+
isRoot ? rootName !== false && /* @__PURE__ */ jsx135(DataBox, {
|
|
18245
20190
|
className: "data-key-colon",
|
|
18246
20191
|
sx: {
|
|
18247
20192
|
mr: 0.5
|
|
18248
20193
|
},
|
|
18249
20194
|
children: ":"
|
|
18250
|
-
}) : nestedIndex === void 0 && /* @__PURE__ */
|
|
20195
|
+
}) : nestedIndex === void 0 && /* @__PURE__ */ jsx135(DataBox, {
|
|
18251
20196
|
className: "data-key-colon",
|
|
18252
20197
|
sx: {
|
|
18253
20198
|
mr: 0.5,
|
|
@@ -18258,29 +20203,29 @@ var DataKeyPair = (props) => {
|
|
|
18258
20203
|
},
|
|
18259
20204
|
children: ":"
|
|
18260
20205
|
}),
|
|
18261
|
-
PreComponent && /* @__PURE__ */
|
|
20206
|
+
PreComponent && /* @__PURE__ */ jsx135(PreComponent, {
|
|
18262
20207
|
...downstreamProps
|
|
18263
20208
|
}),
|
|
18264
20209
|
isHover && expandable && inspect && actionIcons
|
|
18265
20210
|
]
|
|
18266
20211
|
}),
|
|
18267
|
-
editing && editable ? Editor && /* @__PURE__ */
|
|
20212
|
+
editing && editable ? Editor && /* @__PURE__ */ jsx135(Editor, {
|
|
18268
20213
|
path,
|
|
18269
20214
|
value: tempValue,
|
|
18270
20215
|
setValue: setTempValue,
|
|
18271
20216
|
abortEditing,
|
|
18272
20217
|
commitEditing
|
|
18273
|
-
}) : Component ? /* @__PURE__ */
|
|
20218
|
+
}) : Component ? /* @__PURE__ */ jsx135(Component, {
|
|
18274
20219
|
...downstreamProps
|
|
18275
|
-
}) : /* @__PURE__ */
|
|
20220
|
+
}) : /* @__PURE__ */ jsx135(Box10, {
|
|
18276
20221
|
component: "span",
|
|
18277
20222
|
className: "data-value-fallback",
|
|
18278
20223
|
children: "fallback: ".concat(value)
|
|
18279
20224
|
}),
|
|
18280
|
-
PostComponent && /* @__PURE__ */
|
|
20225
|
+
PostComponent && /* @__PURE__ */ jsx135(PostComponent, {
|
|
18281
20226
|
...downstreamProps
|
|
18282
20227
|
}),
|
|
18283
|
-
!last && displayComma && /* @__PURE__ */
|
|
20228
|
+
!last && displayComma && /* @__PURE__ */ jsx135(DataBox, {
|
|
18284
20229
|
children: ","
|
|
18285
20230
|
}),
|
|
18286
20231
|
isHover && expandable && !inspect && actionIcons,
|
|
@@ -18292,7 +20237,7 @@ var DataKeyPair = (props) => {
|
|
|
18292
20237
|
var query = "(prefers-color-scheme: dark)";
|
|
18293
20238
|
function useThemeDetector() {
|
|
18294
20239
|
const [isDark, setIsDark] = useState12(false);
|
|
18295
|
-
|
|
20240
|
+
useEffect17(() => {
|
|
18296
20241
|
const listener = (e2) => setIsDark(e2.matches);
|
|
18297
20242
|
setIsDark(window.matchMedia(query).matches);
|
|
18298
20243
|
const queryMedia = window.matchMedia(query);
|
|
@@ -18302,8 +20247,8 @@ function useThemeDetector() {
|
|
|
18302
20247
|
return isDark;
|
|
18303
20248
|
}
|
|
18304
20249
|
function useSetIfNotUndefinedEffect(key, value) {
|
|
18305
|
-
const { setState } =
|
|
18306
|
-
|
|
20250
|
+
const { setState } = useContext17(JsonViewerStoreContext);
|
|
20251
|
+
useEffect17(() => {
|
|
18307
20252
|
if (value !== void 0) {
|
|
18308
20253
|
setState({
|
|
18309
20254
|
[key]: value
|
|
@@ -18316,8 +20261,8 @@ function useSetIfNotUndefinedEffect(key, value) {
|
|
|
18316
20261
|
]);
|
|
18317
20262
|
}
|
|
18318
20263
|
var JsonViewerInner = (props) => {
|
|
18319
|
-
const { setState } =
|
|
18320
|
-
|
|
20264
|
+
const { setState } = useContext17(JsonViewerStoreContext);
|
|
20265
|
+
useEffect17(() => {
|
|
18321
20266
|
setState((state) => ({
|
|
18322
20267
|
prevValue: state.value,
|
|
18323
20268
|
value: props.value
|
|
@@ -18345,7 +20290,7 @@ var JsonViewerInner = (props) => {
|
|
|
18345
20290
|
useSetIfNotUndefinedEffect("displaySize", props.displaySize);
|
|
18346
20291
|
useSetIfNotUndefinedEffect("displayComma", props.displayComma);
|
|
18347
20292
|
useSetIfNotUndefinedEffect("highlightUpdates", props.highlightUpdates);
|
|
18348
|
-
|
|
20293
|
+
useEffect17(() => {
|
|
18349
20294
|
if (props.theme === "light") {
|
|
18350
20295
|
setState({
|
|
18351
20296
|
colorspace: lightColorspace
|
|
@@ -18363,13 +20308,13 @@ var JsonViewerInner = (props) => {
|
|
|
18363
20308
|
setState,
|
|
18364
20309
|
props.theme
|
|
18365
20310
|
]);
|
|
18366
|
-
const themeCls =
|
|
20311
|
+
const themeCls = useMemo9(() => {
|
|
18367
20312
|
if (typeof props.theme === "object") return "json-viewer-theme-custom";
|
|
18368
20313
|
return props.theme === "dark" ? "json-viewer-theme-dark" : "json-viewer-theme-light";
|
|
18369
20314
|
}, [
|
|
18370
20315
|
props.theme
|
|
18371
20316
|
]);
|
|
18372
|
-
const onceRef =
|
|
20317
|
+
const onceRef = useRef13(true);
|
|
18373
20318
|
const registerTypes = useTypeRegistryStore((store) => store.registerTypes);
|
|
18374
20319
|
if (onceRef.current) {
|
|
18375
20320
|
const allTypes = props.valueTypes ? [
|
|
@@ -18381,7 +20326,7 @@ var JsonViewerInner = (props) => {
|
|
|
18381
20326
|
registerTypes(allTypes);
|
|
18382
20327
|
onceRef.current = false;
|
|
18383
20328
|
}
|
|
18384
|
-
|
|
20329
|
+
useEffect17(() => {
|
|
18385
20330
|
const allTypes = props.valueTypes ? [
|
|
18386
20331
|
...predefinedTypes,
|
|
18387
20332
|
...props.valueTypes
|
|
@@ -18395,12 +20340,12 @@ var JsonViewerInner = (props) => {
|
|
|
18395
20340
|
]);
|
|
18396
20341
|
const value = useJsonViewerStore((store) => store.value);
|
|
18397
20342
|
const prevValue = useJsonViewerStore((store) => store.prevValue);
|
|
18398
|
-
const emptyPath =
|
|
20343
|
+
const emptyPath = useMemo9(() => [], []);
|
|
18399
20344
|
const setHover = useJsonViewerStore((store) => store.setHover);
|
|
18400
20345
|
const onMouseLeave = useCallback8(() => setHover(null), [
|
|
18401
20346
|
setHover
|
|
18402
20347
|
]);
|
|
18403
|
-
return /* @__PURE__ */
|
|
20348
|
+
return /* @__PURE__ */ jsx135(Paper2, {
|
|
18404
20349
|
elevation: 0,
|
|
18405
20350
|
className: clsx(themeCls, props.className),
|
|
18406
20351
|
style: props.style,
|
|
@@ -18411,7 +20356,7 @@ var JsonViewerInner = (props) => {
|
|
|
18411
20356
|
...props.sx
|
|
18412
20357
|
},
|
|
18413
20358
|
onMouseLeave,
|
|
18414
|
-
children: /* @__PURE__ */
|
|
20359
|
+
children: /* @__PURE__ */ jsx135(DataKeyPair, {
|
|
18415
20360
|
value,
|
|
18416
20361
|
prevValue,
|
|
18417
20362
|
path: emptyPath,
|
|
@@ -18426,14 +20371,14 @@ var JsonViewer = function JsonViewer2(props) {
|
|
|
18426
20371
|
}
|
|
18427
20372
|
}
|
|
18428
20373
|
const isAutoDarkTheme = useThemeDetector();
|
|
18429
|
-
const themeType =
|
|
20374
|
+
const themeType = useMemo9(() => {
|
|
18430
20375
|
var _props_theme;
|
|
18431
20376
|
return props.theme === "auto" ? isAutoDarkTheme ? "dark" : "light" : (_props_theme = props.theme) !== null && _props_theme !== void 0 ? _props_theme : "light";
|
|
18432
20377
|
}, [
|
|
18433
20378
|
isAutoDarkTheme,
|
|
18434
20379
|
props.theme
|
|
18435
20380
|
]);
|
|
18436
|
-
const theme =
|
|
20381
|
+
const theme = useMemo9(() => {
|
|
18437
20382
|
const backgroundColor = typeof themeType === "object" ? themeType.base00 : themeType === "dark" ? darkColorspace.base00 : lightColorspace.base00;
|
|
18438
20383
|
const foregroundColor = typeof themeType === "object" ? themeType.base07 : themeType === "dark" ? darkColorspace.base07 : lightColorspace.base07;
|
|
18439
20384
|
return createTheme({
|
|
@@ -18461,15 +20406,15 @@ var JsonViewer = function JsonViewer2(props) {
|
|
|
18461
20406
|
...props,
|
|
18462
20407
|
theme: themeType
|
|
18463
20408
|
};
|
|
18464
|
-
const jsonViewerStore =
|
|
18465
|
-
const typeRegistryStore =
|
|
18466
|
-
return /* @__PURE__ */
|
|
20409
|
+
const jsonViewerStore = useMemo9(() => createJsonViewerStore(props), []);
|
|
20410
|
+
const typeRegistryStore = useMemo9(() => createTypeRegistryStore(), []);
|
|
20411
|
+
return /* @__PURE__ */ jsx135(ThemeProvider, {
|
|
18467
20412
|
theme,
|
|
18468
|
-
children: /* @__PURE__ */
|
|
20413
|
+
children: /* @__PURE__ */ jsx135(TypeRegistryStoreContext.Provider, {
|
|
18469
20414
|
value: typeRegistryStore,
|
|
18470
|
-
children: /* @__PURE__ */
|
|
20415
|
+
children: /* @__PURE__ */ jsx135(JsonViewerStoreContext.Provider, {
|
|
18471
20416
|
value: jsonViewerStore,
|
|
18472
|
-
children: /* @__PURE__ */
|
|
20417
|
+
children: /* @__PURE__ */ jsx135(JsonViewerInner, {
|
|
18473
20418
|
...mixedProps
|
|
18474
20419
|
})
|
|
18475
20420
|
})
|
|
@@ -18479,7 +20424,7 @@ var JsonViewer = function JsonViewer2(props) {
|
|
|
18479
20424
|
|
|
18480
20425
|
// src/components/event-details/payload-viewer.tsx
|
|
18481
20426
|
import { memo as memo10 } from "react";
|
|
18482
|
-
import { jsx as
|
|
20427
|
+
import { jsx as jsx136 } from "react/jsx-runtime";
|
|
18483
20428
|
function tryParseJson(value) {
|
|
18484
20429
|
if (typeof value !== "string") {
|
|
18485
20430
|
return value;
|
|
@@ -18492,7 +20437,7 @@ function tryParseJson(value) {
|
|
|
18492
20437
|
}
|
|
18493
20438
|
var PayloadViewer = memo10(({ sx, testId, value }) => {
|
|
18494
20439
|
const theme = useTheme3();
|
|
18495
|
-
return /* @__PURE__ */
|
|
20440
|
+
return /* @__PURE__ */ jsx136(Box11, { "data-testid": testId, sx: { backgroundColor: "background.default", borderRadius: 1, fontSize: 12, overflow: "auto", p: 1, ...sx }, children: /* @__PURE__ */ jsx136(
|
|
18496
20441
|
JsonViewer,
|
|
18497
20442
|
{
|
|
18498
20443
|
displayDataTypes: false,
|
|
@@ -18506,21 +20451,21 @@ var PayloadViewer = memo10(({ sx, testId, value }) => {
|
|
|
18506
20451
|
});
|
|
18507
20452
|
|
|
18508
20453
|
// src/components/event-details/event-detail.tsx
|
|
18509
|
-
import { Fragment as
|
|
20454
|
+
import { Fragment as Fragment9, jsx as jsx137, jsxs as jsxs127 } from "react/jsx-runtime";
|
|
18510
20455
|
var DetailRow2 = ({ content, label }) => /* @__PURE__ */ jsxs127(Box12, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
|
|
18511
|
-
/* @__PURE__ */
|
|
18512
|
-
/* @__PURE__ */
|
|
20456
|
+
/* @__PURE__ */ jsx137(Typography7, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
|
|
20457
|
+
/* @__PURE__ */ jsx137(Box12, { children: typeof content === "string" ? /* @__PURE__ */ jsx137(Typography7, { sx: { color: "text.primary", whiteSpace: "pre-wrap" }, variant: "caption", children: content }) : content })
|
|
18513
20458
|
] });
|
|
18514
20459
|
var EventMessage = ({ event }) => {
|
|
18515
20460
|
const [isOpen, setIsOpen] = useState13(false);
|
|
18516
20461
|
const [isOverflowing, setIsOverflowing] = useState13(false);
|
|
18517
|
-
const textReference =
|
|
18518
|
-
const parsedMessage =
|
|
18519
|
-
const isIAMPolicyEvent =
|
|
20462
|
+
const textReference = useRef14(null);
|
|
20463
|
+
const parsedMessage = useMemo10(() => parseEventMessage(event), [event]);
|
|
20464
|
+
const isIAMPolicyEvent = useMemo10(
|
|
18520
20465
|
() => event.event_type === "iam.policy_evaluation" && event.attributes?.payload && typeof event.attributes.payload === "string",
|
|
18521
20466
|
[event]
|
|
18522
20467
|
);
|
|
18523
|
-
|
|
20468
|
+
useEffect18(() => {
|
|
18524
20469
|
const checkOverflow = () => {
|
|
18525
20470
|
const element = textReference.current;
|
|
18526
20471
|
if (element) {
|
|
@@ -18533,17 +20478,17 @@ var EventMessage = ({ event }) => {
|
|
|
18533
20478
|
window.removeEventListener("resize", checkOverflow);
|
|
18534
20479
|
};
|
|
18535
20480
|
}, [parsedMessage.headline]);
|
|
18536
|
-
const hasAdditionalContent =
|
|
20481
|
+
const hasAdditionalContent = useMemo10(
|
|
18537
20482
|
() => parsedMessage.message || parsedMessage.details || isIAMPolicyEvent,
|
|
18538
20483
|
[parsedMessage.message, parsedMessage.details, isIAMPolicyEvent]
|
|
18539
20484
|
);
|
|
18540
|
-
const shouldShowToggle =
|
|
20485
|
+
const shouldShowToggle = useMemo10(
|
|
18541
20486
|
() => isOverflowing || hasAdditionalContent,
|
|
18542
20487
|
[isOverflowing, hasAdditionalContent]
|
|
18543
20488
|
);
|
|
18544
20489
|
return /* @__PURE__ */ jsxs127(Box12, { sx: { display: "flex", flexDirection: "column" }, children: [
|
|
18545
20490
|
/* @__PURE__ */ jsxs127(Box12, { sx: { alignItems: "center", display: "flex" }, children: [
|
|
18546
|
-
Boolean(shouldShowToggle) && /* @__PURE__ */
|
|
20491
|
+
Boolean(shouldShowToggle) && /* @__PURE__ */ jsx137(
|
|
18547
20492
|
IconButton3,
|
|
18548
20493
|
{
|
|
18549
20494
|
onClick: () => {
|
|
@@ -18551,10 +20496,10 @@ var EventMessage = ({ event }) => {
|
|
|
18551
20496
|
},
|
|
18552
20497
|
size: "small",
|
|
18553
20498
|
sx: { mr: 1, p: 0 },
|
|
18554
|
-
children: isOpen ? /* @__PURE__ */
|
|
20499
|
+
children: isOpen ? /* @__PURE__ */ jsx137(KeyboardArrowDown2, { sx: { fontSize: 16 } }) : /* @__PURE__ */ jsx137(KeyboardArrowRight2, { sx: { fontSize: 16 } })
|
|
18555
20500
|
}
|
|
18556
20501
|
),
|
|
18557
|
-
/* @__PURE__ */
|
|
20502
|
+
/* @__PURE__ */ jsx137(
|
|
18558
20503
|
Typography7,
|
|
18559
20504
|
{
|
|
18560
20505
|
ref: textReference,
|
|
@@ -18572,12 +20517,12 @@ var EventMessage = ({ event }) => {
|
|
|
18572
20517
|
}
|
|
18573
20518
|
)
|
|
18574
20519
|
] }),
|
|
18575
|
-
isOpen && /* @__PURE__ */
|
|
18576
|
-
Boolean(parsedMessage.message) && /* @__PURE__ */
|
|
18577
|
-
Boolean(parsedMessage.details) && /* @__PURE__ */
|
|
20520
|
+
isOpen && /* @__PURE__ */ jsx137(Box12, { sx: { borderColor: "divider", borderLeft: "2px solid", ml: 1, mt: 0.5, pl: 1.5, py: 0.5 }, children: isIAMPolicyEvent ? /* @__PURE__ */ jsx137(IAMEventDetail, { event }) : /* @__PURE__ */ jsxs127(Fragment9, { children: [
|
|
20521
|
+
Boolean(parsedMessage.message) && /* @__PURE__ */ jsx137(DetailRow2, { content: parsedMessage.message, label: "Message" }),
|
|
20522
|
+
Boolean(parsedMessage.details) && /* @__PURE__ */ jsx137(
|
|
18578
20523
|
DetailRow2,
|
|
18579
20524
|
{
|
|
18580
|
-
content: /* @__PURE__ */
|
|
20525
|
+
content: /* @__PURE__ */ jsx137(PayloadViewer, { sx: { px: 0 }, value: tryParseJson(parsedMessage.details) }),
|
|
18581
20526
|
label: "Details"
|
|
18582
20527
|
}
|
|
18583
20528
|
)
|
|
@@ -18609,15 +20554,15 @@ var EventDetail = ({
|
|
|
18609
20554
|
type
|
|
18610
20555
|
}) => {
|
|
18611
20556
|
if (type === "permission") {
|
|
18612
|
-
return /* @__PURE__ */
|
|
20557
|
+
return /* @__PURE__ */ jsx137(IAMPermissionDetail, { events });
|
|
18613
20558
|
}
|
|
18614
20559
|
const eventLevel = getEventLevelFromGroup(type);
|
|
18615
20560
|
return /* @__PURE__ */ jsxs127(Box12, { children: [
|
|
18616
20561
|
/* @__PURE__ */ jsxs127(Box12, { sx: { alignItems: "center", display: "flex", mb: 0.5 }, children: [
|
|
18617
|
-
/* @__PURE__ */
|
|
18618
|
-
/* @__PURE__ */
|
|
20562
|
+
/* @__PURE__ */ jsx137(StatusIcon, { errorLevel: eventLevel }),
|
|
20563
|
+
/* @__PURE__ */ jsx137(Typography7, { color: "text.secondary", sx: { fontWeight: 600, ml: 0.5 }, variant: "caption", children: displayText })
|
|
18619
20564
|
] }),
|
|
18620
|
-
/* @__PURE__ */
|
|
20565
|
+
/* @__PURE__ */ jsx137(Box12, { children: events.map((event) => /* @__PURE__ */ jsx137(Box12, { sx: { maxWidth: "100%", mb: 0.5 }, children: /* @__PURE__ */ jsx137(EventMessage, { event }) }, `${event.span_id}-${event.event_id}`)) })
|
|
18621
20566
|
] });
|
|
18622
20567
|
};
|
|
18623
20568
|
|
|
@@ -23946,7 +25891,7 @@ async function checkFeatures(context, config, args) {
|
|
|
23946
25891
|
}
|
|
23947
25892
|
|
|
23948
25893
|
// node_modules/@aws-sdk/middleware-user-agent/dist-es/constants.js
|
|
23949
|
-
var
|
|
25894
|
+
var USER_AGENT2 = "user-agent";
|
|
23950
25895
|
var X_AMZ_USER_AGENT = "x-amz-user-agent";
|
|
23951
25896
|
var SPACE = " ";
|
|
23952
25897
|
var UA_NAME_SEPARATOR = "/";
|
|
@@ -23998,9 +25943,9 @@ var userAgentMiddleware = (options) => (next, context) => async (args) => {
|
|
|
23998
25943
|
].join(SPACE);
|
|
23999
25944
|
if (options.runtime !== "browser") {
|
|
24000
25945
|
if (normalUAValue) {
|
|
24001
|
-
headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[
|
|
25946
|
+
headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[USER_AGENT2]} ${normalUAValue}` : normalUAValue;
|
|
24002
25947
|
}
|
|
24003
|
-
headers[
|
|
25948
|
+
headers[USER_AGENT2] = sdkUserAgentValue;
|
|
24004
25949
|
} else {
|
|
24005
25950
|
headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;
|
|
24006
25951
|
}
|
|
@@ -28309,8 +30254,8 @@ var QueryStatus = {
|
|
|
28309
30254
|
|
|
28310
30255
|
// src/components/event-details/lambda-invoke-logs-section.tsx
|
|
28311
30256
|
import { Box as Box13, CircularProgress as CircularProgress3, Stack, Typography as Typography8 } from "@mui/material";
|
|
28312
|
-
import { useEffect as
|
|
28313
|
-
import { jsx as
|
|
30257
|
+
import { useEffect as useEffect19, useMemo as useMemo11, useRef as useRef15, useState as useState14 } from "react";
|
|
30258
|
+
import { jsx as jsx138, jsxs as jsxs128 } from "react/jsx-runtime";
|
|
28314
30259
|
var POLL_INTERVAL_MS = 1e3;
|
|
28315
30260
|
async function pollQueryResults(client, queryId) {
|
|
28316
30261
|
return client.send(new GetQueryResultsCommand({ queryId }));
|
|
@@ -28327,7 +30272,7 @@ async function startLambdaLogsQuery(client, functionName2, requestId, startTimeS
|
|
|
28327
30272
|
}
|
|
28328
30273
|
function useCloudWatchLogsClient(region) {
|
|
28329
30274
|
const { localstackEndpoint } = useAppInspector();
|
|
28330
|
-
const client =
|
|
30275
|
+
const client = useMemo11(() => new CloudWatchLogsClient({
|
|
28331
30276
|
credentials: {
|
|
28332
30277
|
accessKeyId: "test",
|
|
28333
30278
|
secretAccessKey: "test"
|
|
@@ -28341,9 +30286,9 @@ function useLambdaInvokeLogs(functionName2, requestId, region, startTimeNano, en
|
|
|
28341
30286
|
const [loading, setLoading] = useState14(true);
|
|
28342
30287
|
const [logs, setLogs] = useState14([]);
|
|
28343
30288
|
const [error, setError] = useState14();
|
|
28344
|
-
const pollTimerRef =
|
|
30289
|
+
const pollTimerRef = useRef15(null);
|
|
28345
30290
|
const cloudWatchLogs = useCloudWatchLogsClient(region);
|
|
28346
|
-
|
|
30291
|
+
useEffect19(() => {
|
|
28347
30292
|
let cancelled = false;
|
|
28348
30293
|
const startTimeSec = Math.floor(Number(BigInt(startTimeNano) / BigInt(1e9)));
|
|
28349
30294
|
const endTimeSec = Math.ceil(Number(BigInt(endTimeNano) / BigInt(1e9)));
|
|
@@ -28401,24 +30346,24 @@ var LambdaInvokeLogsSection = ({ endTimeNano, functionName: functionName2, regio
|
|
|
28401
30346
|
const { error, loading, logs } = useLambdaInvokeLogs(functionName2, requestId, region, startTimeNano, endTimeNano);
|
|
28402
30347
|
if (loading) {
|
|
28403
30348
|
return /* @__PURE__ */ jsxs128(Stack, { alignItems: "center", direction: "row", spacing: 1, children: [
|
|
28404
|
-
/* @__PURE__ */
|
|
28405
|
-
/* @__PURE__ */
|
|
30349
|
+
/* @__PURE__ */ jsx138(CircularProgress3, { size: 14 }),
|
|
30350
|
+
/* @__PURE__ */ jsx138(Typography8, { color: "text.secondary", variant: "body2", children: "Loading logs\u2026" })
|
|
28406
30351
|
] });
|
|
28407
30352
|
}
|
|
28408
30353
|
if (error !== void 0) {
|
|
28409
|
-
return /* @__PURE__ */
|
|
30354
|
+
return /* @__PURE__ */ jsx138(Typography8, { color: "error", variant: "body2", children: error.message });
|
|
28410
30355
|
}
|
|
28411
30356
|
if (logs.length === 0) {
|
|
28412
|
-
return /* @__PURE__ */
|
|
30357
|
+
return /* @__PURE__ */ jsx138(Typography8, { color: "text.secondary", variant: "body2", children: "No logs found for this invocation." });
|
|
28413
30358
|
}
|
|
28414
|
-
return /* @__PURE__ */
|
|
30359
|
+
return /* @__PURE__ */ jsx138(Box13, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ jsx138("pre", { style: { margin: 0, overflow: "auto" }, children: logs.map((log) => /* @__PURE__ */ jsx138(Typography8, { variant: "body2", children: `[${log.timestamp}] ${log.message}` }, log.ptr)) }) });
|
|
28415
30360
|
};
|
|
28416
30361
|
|
|
28417
30362
|
// src/components/event-details/toggle-section.tsx
|
|
28418
30363
|
import { KeyboardArrowDown as KeyboardArrowDown3, KeyboardArrowRight as KeyboardArrowRight3 } from "@mui/icons-material";
|
|
28419
30364
|
import { Box as Box14, Typography as Typography9 } from "@mui/material";
|
|
28420
30365
|
import { useState as useState15 } from "react";
|
|
28421
|
-
import { jsx as
|
|
30366
|
+
import { jsx as jsx139, jsxs as jsxs129 } from "react/jsx-runtime";
|
|
28422
30367
|
var ToggleSection = ({ action, children, headline, initialOpen = true }) => {
|
|
28423
30368
|
const [isOpen, setIsOpen] = useState15(initialOpen);
|
|
28424
30369
|
return /* @__PURE__ */ jsxs129(Box14, { sx: { mt: 4 }, children: [
|
|
@@ -28446,23 +30391,23 @@ var ToggleSection = ({ action, children, headline, initialOpen = true }) => {
|
|
|
28446
30391
|
gap: 1
|
|
28447
30392
|
},
|
|
28448
30393
|
children: [
|
|
28449
|
-
/* @__PURE__ */
|
|
28450
|
-
isOpen ? /* @__PURE__ */
|
|
30394
|
+
/* @__PURE__ */ jsx139(Typography9, { sx: { fontWeight: 600 }, variant: "subtitle2", children: headline }),
|
|
30395
|
+
isOpen ? /* @__PURE__ */ jsx139(KeyboardArrowDown3, { sx: { color: "text.secondary", height: 20, width: 20 } }) : /* @__PURE__ */ jsx139(KeyboardArrowRight3, { sx: { color: "text.secondary", height: 20, width: 20 } })
|
|
28451
30396
|
]
|
|
28452
30397
|
}
|
|
28453
30398
|
),
|
|
28454
|
-
action !== false && /* @__PURE__ */
|
|
30399
|
+
action !== false && /* @__PURE__ */ jsx139(Box14, { onClick: (event) => {
|
|
28455
30400
|
event.stopPropagation();
|
|
28456
30401
|
}, children: action })
|
|
28457
30402
|
]
|
|
28458
30403
|
}
|
|
28459
30404
|
),
|
|
28460
|
-
isOpen && /* @__PURE__ */
|
|
30405
|
+
isOpen && /* @__PURE__ */ jsx139(Box14, { children })
|
|
28461
30406
|
] });
|
|
28462
30407
|
};
|
|
28463
30408
|
|
|
28464
30409
|
// src/components/event-details/event-details.tsx
|
|
28465
|
-
import { Fragment as
|
|
30410
|
+
import { Fragment as Fragment10, jsx as jsx140, jsxs as jsxs130 } from "react/jsx-runtime";
|
|
28466
30411
|
var checkIsLambdaInvoke = (span) => {
|
|
28467
30412
|
if (span.service_name !== "lambda") {
|
|
28468
30413
|
return false;
|
|
@@ -28477,13 +30422,13 @@ var checkIsSqsSendMessage = (span) => {
|
|
|
28477
30422
|
return span.operation_name.startsWith("SendMessage");
|
|
28478
30423
|
};
|
|
28479
30424
|
var EventDetails = ({ onClose, selectedEvent }) => {
|
|
28480
|
-
const eventGroups =
|
|
30425
|
+
const eventGroups = useMemo12(
|
|
28481
30426
|
() => getEventGroupsByType(selectedEvent?.events ?? []),
|
|
28482
30427
|
[selectedEvent?.events]
|
|
28483
30428
|
);
|
|
28484
30429
|
const [parseNestedJson, setParseNestedJson] = useState16(true);
|
|
28485
30430
|
if (!selectedEvent) {
|
|
28486
|
-
return /* @__PURE__ */
|
|
30431
|
+
return /* @__PURE__ */ jsx140(Box15, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx140(Typography10, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
|
|
28487
30432
|
}
|
|
28488
30433
|
const isLambdaInvoke = checkIsLambdaInvoke(selectedEvent);
|
|
28489
30434
|
const isSqsSendMessage = checkIsSqsSendMessage(selectedEvent);
|
|
@@ -28519,48 +30464,48 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
28519
30464
|
py: 1
|
|
28520
30465
|
},
|
|
28521
30466
|
children: [
|
|
28522
|
-
/* @__PURE__ */
|
|
28523
|
-
onClose && /* @__PURE__ */
|
|
30467
|
+
/* @__PURE__ */ jsx140(Box15, { children: /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "h6", children: "Operation Details" }) }),
|
|
30468
|
+
onClose && /* @__PURE__ */ jsx140(IconButton4, { "data-testid": EVENT_DETAILS_CLOSE_BUTTON_TEST_ID, onClick: onClose, size: "small", children: /* @__PURE__ */ jsx140(Close2, {}) })
|
|
28524
30469
|
]
|
|
28525
30470
|
}
|
|
28526
30471
|
),
|
|
28527
|
-
/* @__PURE__ */
|
|
28528
|
-
/* @__PURE__ */
|
|
30472
|
+
/* @__PURE__ */ jsx140(Box15, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 2, children: [
|
|
30473
|
+
/* @__PURE__ */ jsx140(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ jsxs130(Stack2, { "data-testid": EVENT_DETAILS_SECTION_BASIC_INFORMATION_TEST_ID, spacing: 1, children: [
|
|
28529
30474
|
/* @__PURE__ */ jsxs130(Box15, { sx: { display: "grid", gap: 2, gridTemplateColumns: "1.3fr 1fr" }, children: [
|
|
28530
30475
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28531
|
-
/* @__PURE__ */
|
|
28532
|
-
/* @__PURE__ */
|
|
30476
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
|
|
30477
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_SERVICE_NAME_TEST_ID, variant: "body2", children: selectedEvent.service_name })
|
|
28533
30478
|
] }),
|
|
28534
30479
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28535
|
-
/* @__PURE__ */
|
|
28536
|
-
/* @__PURE__ */
|
|
30480
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
|
|
30481
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_OPERATION_NAME_TEST_ID, variant: "body2", children: selectedEvent.operation_name })
|
|
28537
30482
|
] })
|
|
28538
30483
|
] }),
|
|
28539
30484
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28540
|
-
/* @__PURE__ */
|
|
28541
|
-
/* @__PURE__ */
|
|
30485
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
|
|
30486
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_RESOURCE_NAME_TEST_ID, variant: "body2", children: selectedEvent.resource_name })
|
|
28542
30487
|
] }),
|
|
28543
30488
|
Boolean(resourceArn) && /* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28544
|
-
/* @__PURE__ */
|
|
28545
|
-
/* @__PURE__ */
|
|
30489
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource ARN" }),
|
|
30490
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_RESOURCE_ARN_TEST_ID, variant: "body2", children: resourceArn })
|
|
28546
30491
|
] }),
|
|
28547
30492
|
/* @__PURE__ */ jsxs130(Box15, { sx: { display: "grid", gap: 1, gridTemplateColumns: "1.3fr 1fr" }, children: [
|
|
28548
30493
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28549
|
-
/* @__PURE__ */
|
|
28550
|
-
/* @__PURE__ */
|
|
30494
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Account" }),
|
|
30495
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_ACCOUNT_TEST_ID, variant: "body2", children: selectedEvent.account_id })
|
|
28551
30496
|
] }),
|
|
28552
30497
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28553
|
-
/* @__PURE__ */
|
|
28554
|
-
/* @__PURE__ */
|
|
30498
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
|
|
30499
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_REGION_TEST_ID, variant: "body2", children: selectedEvent.region })
|
|
28555
30500
|
] })
|
|
28556
30501
|
] }),
|
|
28557
30502
|
/* @__PURE__ */ jsxs130(Box15, { sx: { display: "grid", gap: 1, gridTemplateColumns: duration === void 0 ? "1fr" : "1.3fr 1fr" }, children: [
|
|
28558
30503
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28559
|
-
/* @__PURE__ */
|
|
28560
|
-
/* @__PURE__ */
|
|
30504
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
|
|
30505
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_START_TIME_TEST_ID, variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
|
|
28561
30506
|
] }),
|
|
28562
30507
|
duration !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28563
|
-
/* @__PURE__ */
|
|
30508
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
|
|
28564
30509
|
/* @__PURE__ */ jsxs130(Typography10, { "data-testid": EVENT_DETAILS_DURATION_TEST_ID, variant: "body2", children: [
|
|
28565
30510
|
duration,
|
|
28566
30511
|
"ms"
|
|
@@ -28568,8 +30513,8 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
28568
30513
|
] })
|
|
28569
30514
|
] }),
|
|
28570
30515
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28571
|
-
/* @__PURE__ */
|
|
28572
|
-
/* @__PURE__ */
|
|
30516
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Status" }),
|
|
30517
|
+
/* @__PURE__ */ jsx140(Stack2, { alignItems: "center", direction: "row", flexWrap: "wrap", gap: 1, sx: { mb: eventGroups.errors || eventGroups.warnings ? 1 : 0 }, children: /* @__PURE__ */ jsx140(
|
|
28573
30518
|
Chip3,
|
|
28574
30519
|
{
|
|
28575
30520
|
color: selectedEvent.status_code === 2 ? "error" : selectedEvent.status_code === 1 ? "success" : "default",
|
|
@@ -28580,50 +30525,50 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
28580
30525
|
) })
|
|
28581
30526
|
] })
|
|
28582
30527
|
] }) }),
|
|
28583
|
-
/* @__PURE__ */
|
|
30528
|
+
/* @__PURE__ */ jsx140(Divider3, {}),
|
|
28584
30529
|
/* @__PURE__ */ jsxs130(ToggleSection, { headline: "Permissions", children: [
|
|
28585
|
-
selectedEvent.iam_errors_suppressed && /* @__PURE__ */
|
|
28586
|
-
!selectedEvent.iam_errors_suppressed && !eventGroups.permissions && !eventGroups.errors && !eventGroups.warnings && /* @__PURE__ */
|
|
28587
|
-
eventGroups.permissions && /* @__PURE__ */
|
|
28588
|
-
eventGroups.errors && /* @__PURE__ */
|
|
28589
|
-
eventGroups.warnings && /* @__PURE__ */
|
|
30530
|
+
selectedEvent.iam_errors_suppressed && /* @__PURE__ */ jsx140(Alert4, { "data-testid": EVENT_DETAILS_IAM_ERRORS_SUPPRESSED_TEST_ID, severity: "warning", sx: { mb: 1 }, children: "IAM errors are suppressed \u2014 upgrade your license to view" }),
|
|
30531
|
+
!selectedEvent.iam_errors_suppressed && !eventGroups.permissions && !eventGroups.errors && !eventGroups.warnings && /* @__PURE__ */ jsx140(Typography10, { color: "text.secondary", variant: "body2", children: "There is no permission information available." }),
|
|
30532
|
+
eventGroups.permissions && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Permissions", events: eventGroups.permissions, type: "permission" }),
|
|
30533
|
+
eventGroups.errors && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Error", events: eventGroups.errors, type: "error" }),
|
|
30534
|
+
eventGroups.warnings && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Warning", events: eventGroups.warnings, type: "warning" })
|
|
28590
30535
|
] }),
|
|
28591
|
-
hasPayloads && /* @__PURE__ */ jsxs130(
|
|
28592
|
-
/* @__PURE__ */
|
|
28593
|
-
/* @__PURE__ */
|
|
30536
|
+
hasPayloads && /* @__PURE__ */ jsxs130(Fragment10, { children: [
|
|
30537
|
+
/* @__PURE__ */ jsx140(Divider3, {}),
|
|
30538
|
+
/* @__PURE__ */ jsx140(
|
|
28594
30539
|
ToggleSection,
|
|
28595
30540
|
{
|
|
28596
|
-
action: /* @__PURE__ */
|
|
30541
|
+
action: /* @__PURE__ */ jsx140(
|
|
28597
30542
|
FormControlLabel2,
|
|
28598
30543
|
{
|
|
28599
|
-
control: /* @__PURE__ */
|
|
30544
|
+
control: /* @__PURE__ */ jsx140(Switch, { checked: !parseNestedJson, onChange: (event) => {
|
|
28600
30545
|
setParseNestedJson(!event.target.checked);
|
|
28601
30546
|
}, size: "small" }),
|
|
28602
|
-
label: /* @__PURE__ */
|
|
30547
|
+
label: /* @__PURE__ */ jsx140(Typography10, { variant: "caption", children: "View raw data" }),
|
|
28603
30548
|
sx: { mr: 0 }
|
|
28604
30549
|
}
|
|
28605
30550
|
),
|
|
28606
30551
|
headline: "Payloads",
|
|
28607
30552
|
children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 2, children: [
|
|
28608
30553
|
requestPayload !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28609
|
-
/* @__PURE__ */
|
|
28610
|
-
/* @__PURE__ */
|
|
30554
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Request" }),
|
|
30555
|
+
/* @__PURE__ */ jsx140(PayloadViewer, { testId: EVENT_DETAILS_REQUEST_PAYLOAD, value: requestPayload })
|
|
28611
30556
|
] }),
|
|
28612
30557
|
(responsePayload !== void 0 || isResponseSuppressed) && /* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28613
|
-
/* @__PURE__ */
|
|
28614
|
-
isResponseSuppressed ? /* @__PURE__ */
|
|
30558
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Response" }),
|
|
30559
|
+
isResponseSuppressed ? /* @__PURE__ */ jsx140(Box15, { sx: { py: 1 }, children: /* @__PURE__ */ jsx140(Alert4, { severity: "warning", sx: { mb: 1 }, children: "Response payload is available \u2014 upgrade your license to view" }) }) : /* @__PURE__ */ jsx140(PayloadViewer, { testId: EVENT_DETAILS_RESPONSE_PAYLOAD_TEST_ID, value: responsePayload })
|
|
28615
30560
|
] }),
|
|
28616
30561
|
exceptionPayload !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28617
|
-
/* @__PURE__ */
|
|
28618
|
-
/* @__PURE__ */
|
|
30562
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Exception" }),
|
|
30563
|
+
/* @__PURE__ */ jsx140(PayloadViewer, { testId: EVENT_DETAILS_EXCEPTION_PAYLOAD_TEST_ID, value: exceptionPayload })
|
|
28619
30564
|
] })
|
|
28620
30565
|
] })
|
|
28621
30566
|
}
|
|
28622
30567
|
)
|
|
28623
30568
|
] }),
|
|
28624
|
-
isLambdaInvoke && requestId !== void 0 && /* @__PURE__ */ jsxs130(
|
|
28625
|
-
/* @__PURE__ */
|
|
28626
|
-
/* @__PURE__ */
|
|
30569
|
+
isLambdaInvoke && requestId !== void 0 && /* @__PURE__ */ jsxs130(Fragment10, { children: [
|
|
30570
|
+
/* @__PURE__ */ jsx140(Divider3, {}),
|
|
30571
|
+
/* @__PURE__ */ jsx140(ToggleSection, { headline: "Lambda Logs", children: /* @__PURE__ */ jsx140(
|
|
28627
30572
|
LambdaInvokeLogsSection,
|
|
28628
30573
|
{
|
|
28629
30574
|
endTimeNano: selectedEvent.end_time_unix_nano ?? selectedEvent.start_time_unix_nano,
|
|
@@ -28634,21 +30579,21 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
28634
30579
|
}
|
|
28635
30580
|
) })
|
|
28636
30581
|
] }),
|
|
28637
|
-
/* @__PURE__ */
|
|
28638
|
-
/* @__PURE__ */
|
|
30582
|
+
/* @__PURE__ */ jsx140(Divider3, {}),
|
|
30583
|
+
/* @__PURE__ */ jsx140(ToggleSection, { headline: "Advanced Information", initialOpen: false, children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 1, children: [
|
|
28639
30584
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28640
|
-
/* @__PURE__ */
|
|
28641
|
-
/* @__PURE__ */
|
|
30585
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
|
|
30586
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_SPAN_ID_TEST_ID, variant: "body2", children: selectedEvent.span_id })
|
|
28642
30587
|
] }),
|
|
28643
30588
|
/* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28644
|
-
/* @__PURE__ */
|
|
28645
|
-
/* @__PURE__ */
|
|
30589
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
|
|
30590
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_TRACE_ID_TEST_ID, variant: "body2", children: selectedEvent.trace_id })
|
|
28646
30591
|
] }),
|
|
28647
30592
|
requestId !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
|
|
28648
|
-
/* @__PURE__ */
|
|
28649
|
-
/* @__PURE__ */
|
|
30593
|
+
/* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Request ID" }),
|
|
30594
|
+
/* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_REQUEST_ID_TEST_ID, variant: "body2", children: requestId })
|
|
28650
30595
|
] }),
|
|
28651
|
-
eventGroups.info && /* @__PURE__ */
|
|
30596
|
+
eventGroups.info && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Info", events: eventGroups.info, type: "info" })
|
|
28652
30597
|
] }) })
|
|
28653
30598
|
] }) })
|
|
28654
30599
|
] });
|
|
@@ -28658,7 +30603,7 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
28658
30603
|
import "@xyflow/react/dist/base.css";
|
|
28659
30604
|
import { Alert as Alert5, Button as Button5, useTheme as useTheme5 } from "@mui/material";
|
|
28660
30605
|
import { Background, MarkerType, Position as Position2, ReactFlow, useEdgesState, useNodesState } from "@xyflow/react";
|
|
28661
|
-
import { useEffect as
|
|
30606
|
+
import { useEffect as useEffect20 } from "react";
|
|
28662
30607
|
|
|
28663
30608
|
// src/components/trace-graph/service-node.tsx
|
|
28664
30609
|
import { Box as Box17, Divider as Divider4, Stack as Stack3, Typography as Typography11, useTheme as useTheme4 } from "@mui/material";
|
|
@@ -28669,23 +30614,23 @@ import { memo as memo11 } from "react";
|
|
|
28669
30614
|
// src/components/trace-graph/problem-indicator.tsx
|
|
28670
30615
|
import { Error as ErrorIcon2, Info as Info2, Warning as Warning2 } from "@mui/icons-material";
|
|
28671
30616
|
import { Box as Box16, Tooltip as Tooltip4 } from "@mui/material";
|
|
28672
|
-
import { useMemo as
|
|
28673
|
-
import { jsx as
|
|
30617
|
+
import { useMemo as useMemo13 } from "react";
|
|
30618
|
+
import { jsx as jsx141 } from "react/jsx-runtime";
|
|
28674
30619
|
var ProblemIndicator = ({ error }) => {
|
|
28675
|
-
const icon =
|
|
30620
|
+
const icon = useMemo13(() => {
|
|
28676
30621
|
switch (error.level) {
|
|
28677
30622
|
case "error": {
|
|
28678
|
-
return /* @__PURE__ */
|
|
30623
|
+
return /* @__PURE__ */ jsx141(ErrorIcon2, { sx: { color: "#d32f2f", fontSize: "14px" } });
|
|
28679
30624
|
}
|
|
28680
30625
|
case "warning": {
|
|
28681
|
-
return /* @__PURE__ */
|
|
30626
|
+
return /* @__PURE__ */ jsx141(Warning2, { sx: { color: "#ff9800", fontSize: "14px" } });
|
|
28682
30627
|
}
|
|
28683
30628
|
default: {
|
|
28684
|
-
return /* @__PURE__ */
|
|
30629
|
+
return /* @__PURE__ */ jsx141(Info2, { sx: { color: "#2196f3", fontSize: "14px" } });
|
|
28685
30630
|
}
|
|
28686
30631
|
}
|
|
28687
30632
|
}, [error.level]);
|
|
28688
|
-
const color2 =
|
|
30633
|
+
const color2 = useMemo13(() => {
|
|
28689
30634
|
switch (error.level) {
|
|
28690
30635
|
case "error": {
|
|
28691
30636
|
return "#d32f2f";
|
|
@@ -28698,7 +30643,7 @@ var ProblemIndicator = ({ error }) => {
|
|
|
28698
30643
|
}
|
|
28699
30644
|
}
|
|
28700
30645
|
}, [error.level]);
|
|
28701
|
-
return /* @__PURE__ */
|
|
30646
|
+
return /* @__PURE__ */ jsx141(Tooltip4, { arrow: true, title: error.message ?? "Issue detected", children: /* @__PURE__ */ jsx141(
|
|
28702
30647
|
Box16,
|
|
28703
30648
|
{
|
|
28704
30649
|
sx: {
|
|
@@ -28718,7 +30663,7 @@ var ProblemIndicator = ({ error }) => {
|
|
|
28718
30663
|
};
|
|
28719
30664
|
|
|
28720
30665
|
// src/components/trace-graph/service-node.tsx
|
|
28721
|
-
import { jsx as
|
|
30666
|
+
import { jsx as jsx142, jsxs as jsxs131 } from "react/jsx-runtime";
|
|
28722
30667
|
var handleStyle = {
|
|
28723
30668
|
backgroundColor: "white",
|
|
28724
30669
|
borderColor: "lightgray",
|
|
@@ -28750,8 +30695,8 @@ var ServiceNode = memo11(({ data, selected }) => {
|
|
|
28750
30695
|
},
|
|
28751
30696
|
tabIndex: 0,
|
|
28752
30697
|
children: [
|
|
28753
|
-
/* @__PURE__ */
|
|
28754
|
-
/* @__PURE__ */
|
|
30698
|
+
/* @__PURE__ */ jsx142(Handle, { position: Position.Left, style: handleStyle, type: "target" }),
|
|
30699
|
+
/* @__PURE__ */ jsx142(Handle, { position: Position.Right, style: handleStyle, type: "source" }),
|
|
28755
30700
|
/* @__PURE__ */ jsxs131(
|
|
28756
30701
|
Stack3,
|
|
28757
30702
|
{
|
|
@@ -28759,9 +30704,9 @@ var ServiceNode = memo11(({ data, selected }) => {
|
|
|
28759
30704
|
direction: "row",
|
|
28760
30705
|
sx: { gap: "8px", pb: "2px", pt: "6px", px: "8px" },
|
|
28761
30706
|
children: [
|
|
28762
|
-
/* @__PURE__ */
|
|
30707
|
+
/* @__PURE__ */ jsx142(Box17, { sx: { borderRadius: "4px", flexShrink: 0, lineHeight: 0, overflow: "hidden" }, children: /* @__PURE__ */ jsx142(AwsServiceIcon, { hideTooltip: true, service: data.event.service_name, size: "medium" }) }),
|
|
28763
30708
|
/* @__PURE__ */ jsxs131(Stack3, { sx: { minWidth: 0 }, children: [
|
|
28764
|
-
/* @__PURE__ */
|
|
30709
|
+
/* @__PURE__ */ jsx142(
|
|
28765
30710
|
Typography11,
|
|
28766
30711
|
{
|
|
28767
30712
|
noWrap: true,
|
|
@@ -28770,7 +30715,7 @@ var ServiceNode = memo11(({ data, selected }) => {
|
|
|
28770
30715
|
children: data.event.service_name
|
|
28771
30716
|
}
|
|
28772
30717
|
),
|
|
28773
|
-
data.event.resource_name != "" && /* @__PURE__ */
|
|
30718
|
+
data.event.resource_name != "" && /* @__PURE__ */ jsx142(
|
|
28774
30719
|
Typography11,
|
|
28775
30720
|
{
|
|
28776
30721
|
color: "text.secondary",
|
|
@@ -28784,7 +30729,7 @@ var ServiceNode = memo11(({ data, selected }) => {
|
|
|
28784
30729
|
]
|
|
28785
30730
|
}
|
|
28786
30731
|
),
|
|
28787
|
-
/* @__PURE__ */
|
|
30732
|
+
/* @__PURE__ */ jsx142(Divider4, { sx: { ml: "38px", mr: "8px", my: "5px" } }),
|
|
28788
30733
|
/* @__PURE__ */ jsxs131(
|
|
28789
30734
|
Stack3,
|
|
28790
30735
|
{
|
|
@@ -28792,7 +30737,7 @@ var ServiceNode = memo11(({ data, selected }) => {
|
|
|
28792
30737
|
direction: "row",
|
|
28793
30738
|
sx: { minWidth: 0, pb: "5px", pr: "8px", pt: "1px" },
|
|
28794
30739
|
children: [
|
|
28795
|
-
/* @__PURE__ */
|
|
30740
|
+
/* @__PURE__ */ jsx142(
|
|
28796
30741
|
Box17,
|
|
28797
30742
|
{
|
|
28798
30743
|
sx: {
|
|
@@ -28802,10 +30747,10 @@ var ServiceNode = memo11(({ data, selected }) => {
|
|
|
28802
30747
|
justifyContent: "center",
|
|
28803
30748
|
width: "38px"
|
|
28804
30749
|
},
|
|
28805
|
-
children: hasErrors && data.event.errors?.map((error) => /* @__PURE__ */
|
|
30750
|
+
children: hasErrors && data.event.errors?.map((error) => /* @__PURE__ */ jsx142(ProblemIndicator, { error }, error.span_id))
|
|
28806
30751
|
}
|
|
28807
30752
|
),
|
|
28808
|
-
/* @__PURE__ */
|
|
30753
|
+
/* @__PURE__ */ jsx142(
|
|
28809
30754
|
Typography11,
|
|
28810
30755
|
{
|
|
28811
30756
|
"data-testid": SERVICE_NODE_OPERATION_NAME_TEST_ID,
|
|
@@ -28883,7 +30828,7 @@ import { Box as Box18, IconButton as IconButton5 } from "@mui/material";
|
|
|
28883
30828
|
import { useReactFlow, useStore as useStore2 } from "@xyflow/react";
|
|
28884
30829
|
import { memo as memo12 } from "react";
|
|
28885
30830
|
import { shallow } from "zustand/shallow";
|
|
28886
|
-
import { jsx as
|
|
30831
|
+
import { jsx as jsx143, jsxs as jsxs132 } from "react/jsx-runtime";
|
|
28887
30832
|
var selector = (s2) => ({
|
|
28888
30833
|
isInteractive: s2.nodesDraggable || s2.nodesConnectable || s2.elementsSelectable,
|
|
28889
30834
|
maxZoomReached: s2.transform[2] >= s2.maxZoom,
|
|
@@ -28915,33 +30860,33 @@ var Controls = memo12(() => {
|
|
|
28915
30860
|
zIndex: 5
|
|
28916
30861
|
},
|
|
28917
30862
|
children: [
|
|
28918
|
-
/* @__PURE__ */
|
|
30863
|
+
/* @__PURE__ */ jsx143(
|
|
28919
30864
|
IconButton5,
|
|
28920
30865
|
{
|
|
28921
30866
|
className: "react-flow__controls-zoomin",
|
|
28922
30867
|
disabled: maxZoomReached,
|
|
28923
30868
|
onClick: onZoomInHandler,
|
|
28924
30869
|
size: "small",
|
|
28925
|
-
children: /* @__PURE__ */
|
|
30870
|
+
children: /* @__PURE__ */ jsx143(Add, {})
|
|
28926
30871
|
}
|
|
28927
30872
|
),
|
|
28928
|
-
/* @__PURE__ */
|
|
30873
|
+
/* @__PURE__ */ jsx143(
|
|
28929
30874
|
IconButton5,
|
|
28930
30875
|
{
|
|
28931
30876
|
className: "react-flow__controls-zoomout",
|
|
28932
30877
|
disabled: minZoomReached,
|
|
28933
30878
|
onClick: onZoomOutHandler,
|
|
28934
30879
|
size: "small",
|
|
28935
|
-
children: /* @__PURE__ */
|
|
30880
|
+
children: /* @__PURE__ */ jsx143(Remove, {})
|
|
28936
30881
|
}
|
|
28937
30882
|
),
|
|
28938
|
-
/* @__PURE__ */
|
|
30883
|
+
/* @__PURE__ */ jsx143(
|
|
28939
30884
|
IconButton5,
|
|
28940
30885
|
{
|
|
28941
30886
|
className: "react-flow__controls-fitview",
|
|
28942
30887
|
onClick: onFitViewHandler,
|
|
28943
30888
|
size: "small",
|
|
28944
|
-
children: /* @__PURE__ */
|
|
30889
|
+
children: /* @__PURE__ */ jsx143(FitScreen, {})
|
|
28945
30890
|
}
|
|
28946
30891
|
)
|
|
28947
30892
|
]
|
|
@@ -28950,7 +30895,7 @@ var Controls = memo12(() => {
|
|
|
28950
30895
|
});
|
|
28951
30896
|
|
|
28952
30897
|
// src/components/trace-graph/trace-graph.tsx
|
|
28953
|
-
import { Fragment as
|
|
30898
|
+
import { Fragment as Fragment11, jsx as jsx144, jsxs as jsxs133 } from "react/jsx-runtime";
|
|
28954
30899
|
var nodeTypes = {
|
|
28955
30900
|
service: ServiceNode
|
|
28956
30901
|
};
|
|
@@ -28963,7 +30908,7 @@ var TraceGraph = ({
|
|
|
28963
30908
|
}) => {
|
|
28964
30909
|
const [nodes, setNodes, onNodesChange] = useNodesState([]);
|
|
28965
30910
|
const [edges, setEdges] = useEdgesState([]);
|
|
28966
|
-
|
|
30911
|
+
useEffect20(() => {
|
|
28967
30912
|
const allNodes = [];
|
|
28968
30913
|
const allEdges = [];
|
|
28969
30914
|
for (const span of spans.data ?? []) {
|
|
@@ -29014,11 +30959,11 @@ var TraceGraph = ({
|
|
|
29014
30959
|
setEdges(layoutedEdges);
|
|
29015
30960
|
}, [spans.data, initialFocusEventId, order2, setNodes, setEdges]);
|
|
29016
30961
|
const theme = useTheme5();
|
|
29017
|
-
return /* @__PURE__ */ jsxs133(
|
|
30962
|
+
return /* @__PURE__ */ jsxs133(Fragment11, { children: [
|
|
29018
30963
|
spans.error && /* @__PURE__ */ jsxs133(
|
|
29019
30964
|
Alert5,
|
|
29020
30965
|
{
|
|
29021
|
-
action: /* @__PURE__ */
|
|
30966
|
+
action: /* @__PURE__ */ jsx144(Button5, { onClick: () => {
|
|
29022
30967
|
onRefresh();
|
|
29023
30968
|
}, children: "Retry" }),
|
|
29024
30969
|
severity: "error",
|
|
@@ -29047,8 +30992,8 @@ var TraceGraph = ({
|
|
|
29047
30992
|
onNodesChange,
|
|
29048
30993
|
selectNodesOnDrag: false,
|
|
29049
30994
|
children: [
|
|
29050
|
-
/* @__PURE__ */
|
|
29051
|
-
/* @__PURE__ */
|
|
30995
|
+
/* @__PURE__ */ jsx144(Controls, {}),
|
|
30996
|
+
/* @__PURE__ */ jsx144(
|
|
29052
30997
|
Background,
|
|
29053
30998
|
{
|
|
29054
30999
|
bgColor: theme.palette.background.default,
|
|
@@ -29062,7 +31007,7 @@ var TraceGraph = ({
|
|
|
29062
31007
|
};
|
|
29063
31008
|
|
|
29064
31009
|
// src/pages/trace-graph-page.tsx
|
|
29065
|
-
import { Fragment as
|
|
31010
|
+
import { Fragment as Fragment12, jsx as jsx145, jsxs as jsxs134 } from "react/jsx-runtime";
|
|
29066
31011
|
var HEADER_HEIGHT = 56;
|
|
29067
31012
|
var DRAWER_WIDTH = "35%";
|
|
29068
31013
|
var Main = styled("main", { shouldForwardProp: (property) => property !== "open" })(({ open, theme }) => ({
|
|
@@ -29126,12 +31071,12 @@ var TraceGraphView = ({
|
|
|
29126
31071
|
},
|
|
29127
31072
|
children: [
|
|
29128
31073
|
/* @__PURE__ */ jsxs134(Box19, { sx: { display: "flex", width: "100%" }, children: [
|
|
29129
|
-
/* @__PURE__ */
|
|
31074
|
+
/* @__PURE__ */ jsx145(Button6, { onClick: () => {
|
|
29130
31075
|
navigateToSpansList();
|
|
29131
|
-
}, startIcon: /* @__PURE__ */
|
|
29132
|
-
/* @__PURE__ */
|
|
31076
|
+
}, startIcon: /* @__PURE__ */ jsx145(ArrowBack, {}), children: "Go back" }),
|
|
31077
|
+
/* @__PURE__ */ jsx145(Box19, { sx: { flexGrow: 1 } })
|
|
29133
31078
|
] }),
|
|
29134
|
-
/* @__PURE__ */
|
|
31079
|
+
/* @__PURE__ */ jsx145(
|
|
29135
31080
|
Paper3,
|
|
29136
31081
|
{
|
|
29137
31082
|
sx: {
|
|
@@ -29141,7 +31086,7 @@ var TraceGraphView = ({
|
|
|
29141
31086
|
position: "relative",
|
|
29142
31087
|
width: "100%"
|
|
29143
31088
|
},
|
|
29144
|
-
children: shouldShowStatusMessage ? /* @__PURE__ */
|
|
31089
|
+
children: shouldShowStatusMessage ? /* @__PURE__ */ jsx145(
|
|
29145
31090
|
StatusMessage,
|
|
29146
31091
|
{
|
|
29147
31092
|
error: statusError,
|
|
@@ -29149,15 +31094,15 @@ var TraceGraphView = ({
|
|
|
29149
31094
|
onRetry: handleRetry,
|
|
29150
31095
|
status
|
|
29151
31096
|
}
|
|
29152
|
-
) : /* @__PURE__ */ jsxs134(
|
|
29153
|
-
/* @__PURE__ */
|
|
31097
|
+
) : /* @__PURE__ */ jsxs134(Fragment12, { children: [
|
|
31098
|
+
/* @__PURE__ */ jsx145(Main, { open, children: /* @__PURE__ */ jsx145(
|
|
29154
31099
|
Box19,
|
|
29155
31100
|
{
|
|
29156
31101
|
sx: {
|
|
29157
31102
|
height: "100%",
|
|
29158
31103
|
overflow: "auto"
|
|
29159
31104
|
},
|
|
29160
|
-
children: traceId !== void 0 && /* @__PURE__ */
|
|
31105
|
+
children: traceId !== void 0 && /* @__PURE__ */ jsx145(ReactFlowProvider, { children: /* @__PURE__ */ jsx145(
|
|
29161
31106
|
TraceGraph,
|
|
29162
31107
|
{
|
|
29163
31108
|
initialFocusEventId: spanId,
|
|
@@ -29175,7 +31120,7 @@ var TraceGraphView = ({
|
|
|
29175
31120
|
) })
|
|
29176
31121
|
}
|
|
29177
31122
|
) }),
|
|
29178
|
-
/* @__PURE__ */
|
|
31123
|
+
/* @__PURE__ */ jsx145(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ jsx145(EventDetails, { onClose: handleClose, selectedEvent }) })
|
|
29179
31124
|
] })
|
|
29180
31125
|
}
|
|
29181
31126
|
)
|
|
@@ -29235,19 +31180,19 @@ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId
|
|
|
29235
31180
|
setLoading(false);
|
|
29236
31181
|
}
|
|
29237
31182
|
}, [api, traceId]);
|
|
29238
|
-
|
|
31183
|
+
useEffect21(() => {
|
|
29239
31184
|
void fetchSpans();
|
|
29240
31185
|
}, [fetchSpans]);
|
|
29241
31186
|
const [open, setOpen] = useState17(true);
|
|
29242
31187
|
const [selectedEvent, setSelectedEvent] = useState17(() => spans?.find((span) => span.span_id === spanId));
|
|
29243
|
-
const spansReference =
|
|
29244
|
-
|
|
31188
|
+
const spansReference = useRef16();
|
|
31189
|
+
useEffect21(() => {
|
|
29245
31190
|
if (!spansReference.current && spans) {
|
|
29246
31191
|
setSelectedEvent(spans.find((span) => span.span_id === spanId));
|
|
29247
31192
|
spansReference.current = spans;
|
|
29248
31193
|
}
|
|
29249
31194
|
}, [spans, setSelectedEvent, spanId]);
|
|
29250
|
-
const { checkStatus,
|
|
31195
|
+
const { checkStatus, status, statusError } = useAppInspectorStatus();
|
|
29251
31196
|
const handleEnable = useCallback9(async () => {
|
|
29252
31197
|
await api.setStatus({ status: "ENABLED" });
|
|
29253
31198
|
void checkStatus();
|
|
@@ -29263,7 +31208,7 @@ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId
|
|
|
29263
31208
|
const navigateToSpansList = useCallback9(() => {
|
|
29264
31209
|
onClose?.();
|
|
29265
31210
|
}, [onClose]);
|
|
29266
|
-
return /* @__PURE__ */
|
|
31211
|
+
return /* @__PURE__ */ jsx145(
|
|
29267
31212
|
TraceGraphView,
|
|
29268
31213
|
{
|
|
29269
31214
|
fetchError,
|
|
@@ -29289,12 +31234,10 @@ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId
|
|
|
29289
31234
|
};
|
|
29290
31235
|
|
|
29291
31236
|
// src/pages/spans-list-page.tsx
|
|
29292
|
-
import { Fragment as
|
|
31237
|
+
import { Fragment as Fragment13, jsx as jsx146, jsxs as jsxs135 } from "react/jsx-runtime";
|
|
29293
31238
|
var SpansListPage = () => {
|
|
29294
31239
|
const api = useAppInspectorApi();
|
|
29295
31240
|
const {
|
|
29296
|
-
checking,
|
|
29297
|
-
checkStatus,
|
|
29298
31241
|
clearingSpans,
|
|
29299
31242
|
clearSpans,
|
|
29300
31243
|
fetchBackward,
|
|
@@ -29307,13 +31250,12 @@ var SpansListPage = () => {
|
|
|
29307
31250
|
iamErrorCount,
|
|
29308
31251
|
licenseLimit,
|
|
29309
31252
|
spans,
|
|
29310
|
-
status,
|
|
29311
|
-
statusError,
|
|
29312
31253
|
streamPaused,
|
|
29313
31254
|
systemLimit,
|
|
29314
31255
|
toggleStream,
|
|
29315
31256
|
totalCount
|
|
29316
31257
|
} = useSpans();
|
|
31258
|
+
const { checking, checkStatus, status, statusError } = useAppInspectorStatus();
|
|
29317
31259
|
const clearSpansSync = useCallback10(() => {
|
|
29318
31260
|
void clearSpans();
|
|
29319
31261
|
}, [clearSpans]);
|
|
@@ -29335,7 +31277,7 @@ var SpansListPage = () => {
|
|
|
29335
31277
|
void checkStatus();
|
|
29336
31278
|
}, [api, checkStatus]);
|
|
29337
31279
|
const shouldShowStatusMessage = Boolean(statusError) || status?.status === "DISABLED";
|
|
29338
|
-
return /* @__PURE__ */ jsxs135(
|
|
31280
|
+
return /* @__PURE__ */ jsxs135(Fragment13, { children: [
|
|
29339
31281
|
/* @__PURE__ */ jsxs135(
|
|
29340
31282
|
Box20,
|
|
29341
31283
|
{
|
|
@@ -29352,7 +31294,7 @@ var SpansListPage = () => {
|
|
|
29352
31294
|
width: "100%"
|
|
29353
31295
|
},
|
|
29354
31296
|
children: [
|
|
29355
|
-
!checking && !shouldShowStatusMessage && /* @__PURE__ */
|
|
31297
|
+
!checking && !shouldShowStatusMessage && /* @__PURE__ */ jsx146(
|
|
29356
31298
|
EmulatorVersionBanner,
|
|
29357
31299
|
{
|
|
29358
31300
|
compatibility: bannerDismissed && versionCompatibility === "warning" ? "ok" : versionCompatibility,
|
|
@@ -29362,7 +31304,7 @@ var SpansListPage = () => {
|
|
|
29362
31304
|
} : void 0
|
|
29363
31305
|
}
|
|
29364
31306
|
),
|
|
29365
|
-
shouldShowStatusMessage ? /* @__PURE__ */
|
|
31307
|
+
shouldShowStatusMessage ? /* @__PURE__ */ jsx146(
|
|
29366
31308
|
StatusMessage,
|
|
29367
31309
|
{
|
|
29368
31310
|
error: statusError,
|
|
@@ -29371,7 +31313,7 @@ var SpansListPage = () => {
|
|
|
29371
31313
|
onRetry: handleRetry,
|
|
29372
31314
|
status
|
|
29373
31315
|
}
|
|
29374
|
-
) : /* @__PURE__ */
|
|
31316
|
+
) : /* @__PURE__ */ jsx146(
|
|
29375
31317
|
SpansList,
|
|
29376
31318
|
{
|
|
29377
31319
|
clearingSpans,
|
|
@@ -29398,7 +31340,7 @@ var SpansListPage = () => {
|
|
|
29398
31340
|
]
|
|
29399
31341
|
}
|
|
29400
31342
|
),
|
|
29401
|
-
selectedTraceId !== void 0 && /* @__PURE__ */
|
|
31343
|
+
selectedTraceId !== void 0 && /* @__PURE__ */ jsx146(TraceGraphPage, { onClose: () => {
|
|
29402
31344
|
setSelectedTraceId(void 0);
|
|
29403
31345
|
}, order: order2, spanId: selectedSpanId, traceId: selectedTraceId })
|
|
29404
31346
|
] });
|