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