@parca/profile 0.19.145 → 0.19.147
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/CHANGELOG.md +8 -0
- package/dist/ProfileFlameChart/index.d.ts.map +1 -1
- package/dist/ProfileFlameChart/index.js +2 -2
- package/dist/ProfileFlameGraph/FlameGraphArrow/utils.d.ts.map +1 -1
- package/dist/ProfileFlameGraph/FlameGraphArrow/utils.js +2 -2
- package/dist/ProfileSource.d.ts +6 -0
- package/dist/ProfileSource.d.ts.map +1 -1
- package/dist/ProfileSource.js +20 -0
- package/package.json +6 -6
- package/src/ProfileFlameChart/index.tsx +7 -2
- package/src/ProfileFlameGraph/FlameGraphArrow/utils.ts +2 -2
- package/src/ProfileSource.tsx +26 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.19.147](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.146...@parca/profile@0.19.147) (2026-04-17)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @parca/profile
|
|
9
|
+
|
|
10
|
+
## [0.19.146](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.145...@parca/profile@0.19.146) (2026-04-17)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @parca/profile
|
|
13
|
+
|
|
6
14
|
## [0.19.145](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.144...@parca/profile@0.19.145) (2026-04-16)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @parca/profile
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ProfileFlameChart/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAoC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAEpF,OAAO,EAAwB,WAAW,EAAQ,MAAM,eAAe,CAAC;AAKxE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ProfileFlameChart/index.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAoC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAEpF,OAAO,EAAwB,WAAW,EAAQ,MAAM,eAAe,CAAC;AAKxE,OAAO,EAEL,aAAa,EAGd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,oCAAoC,CAAC;AAuCpE,UAAU,sBAAsB;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,kBAAkB,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AA+BD,eAAO,MAAM,iBAAiB,GAAI,kKAY/B,sBAAsB,KAAG,GAAG,CAAC,OAuM/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -36,7 +36,7 @@ import { Matcher, MatcherTypes, Query } from '@parca/parser';
|
|
|
36
36
|
import { TimeUnits, formatDate, formatDuration } from '@parca/utilities';
|
|
37
37
|
import ProfileFlameGraph, { validateFlameChartQuery } from '../ProfileFlameGraph';
|
|
38
38
|
import { boundsFromProfileSource } from '../ProfileFlameGraph/FlameGraphArrow/utils';
|
|
39
|
-
import { MergedProfileSource, timeFormat } from '../ProfileSource';
|
|
39
|
+
import { MergedProfileSource, isMergedProfileSource, timeFormat } from '../ProfileSource';
|
|
40
40
|
import { useProfileFilters } from '../ProfileView/components/ProfileFilters/useProfileFilters';
|
|
41
41
|
import { flamechartDimensionParser } from '../hooks/urlParsers';
|
|
42
42
|
import { useQuery } from '../useQuery';
|
|
@@ -90,7 +90,7 @@ var timeframeParser = createParser({
|
|
|
90
90
|
// Helper to create a filtered profile source with narrowed time bounds
|
|
91
91
|
// and dimension label matchers from the selected strip.
|
|
92
92
|
var createFilteredProfileSource = function createFilteredProfileSource(profileSource, selectedTimeframe) {
|
|
93
|
-
if (!(profileSource
|
|
93
|
+
if (!isMergedProfileSource(profileSource)) {
|
|
94
94
|
return null;
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ProfileFlameGraph/FlameGraphArrow/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAC,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAC,SAAS,EAAgB,MAAM,aAAa,CAAC;AAWrD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,MAAM,CAuBpF;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,aAMhD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,KAAG,eAMzD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,wBAAwB,MAAM,EAC9B,iBAAiB,MAAM,EACvB,OAAO,MAAM,EACb,MAAM,MAAM,KACX,MAOF,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,wBAAwB,MAAM,EAC9B,MAAM,MAAM,KACX,MAMF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,KAAG,MAAM,GAAG,IAQpD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,gBAAgB,aAAa,KAAG,SAyBvE,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,KAAK,EAAE,KAAK,MAAM,KAAG,gBAwBnE,CAAC;AAgBF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAW/F;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAStE"}
|
|
@@ -20,7 +20,7 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
20
20
|
|
|
21
21
|
import { BINARY_FEATURE_TYPES, EVERYTHING_ELSE, FILENAMES_FEATURE_TYPES } from '@parca/store';
|
|
22
22
|
import { divide, getLastItem, valueFormatter } from '@parca/utilities';
|
|
23
|
-
import {
|
|
23
|
+
import { isMergedProfileSource } from '../../ProfileSource';
|
|
24
24
|
import { hexifyAddress } from '../../utils';
|
|
25
25
|
import { FIELD_DEPTH, FIELD_FUNCTION_NAME, FIELD_FUNCTION_START_LINE, FIELD_INLINED, FIELD_LABELS_ONLY, FIELD_LOCATION_ADDRESS, FIELD_MAPPING_FILE } from './index';
|
|
26
26
|
export function nodeLabel(table, row, showBinaryName) {
|
|
@@ -90,7 +90,7 @@ export var boundsFromProfileSource = function boundsFromProfileSource(profileSou
|
|
|
90
90
|
if (profileSource === undefined) {
|
|
91
91
|
return [0n, 1n];
|
|
92
92
|
}
|
|
93
|
-
if (!(profileSource
|
|
93
|
+
if (!isMergedProfileSource(profileSource)) {
|
|
94
94
|
return [0n, 1n];
|
|
95
95
|
}
|
|
96
96
|
var request = profileSource.QueryRequest();
|
package/dist/ProfileSource.d.ts
CHANGED
|
@@ -38,7 +38,12 @@ export declare class MergedProfileSelection implements ProfileSelection {
|
|
|
38
38
|
Type(): string;
|
|
39
39
|
ProfileSource(): ProfileSource;
|
|
40
40
|
}
|
|
41
|
+
export declare const PROFILE_SOURCE_TYPE_MERGED: "merged";
|
|
42
|
+
export declare const PROFILE_SOURCE_TYPE_DIFF: "diff";
|
|
43
|
+
export declare const isMergedProfileSource: (source: ProfileSource | null | undefined) => source is MergedProfileSource;
|
|
44
|
+
export declare const isProfileDiffSource: (source: ProfileSource | null | undefined) => source is ProfileDiffSource;
|
|
41
45
|
export declare class ProfileDiffSource implements ProfileSource {
|
|
46
|
+
readonly profileSourceType: "diff";
|
|
42
47
|
a: ProfileSource;
|
|
43
48
|
b: ProfileSource;
|
|
44
49
|
profileType: ProfileType;
|
|
@@ -52,6 +57,7 @@ export declare class ProfileDiffSource implements ProfileSource {
|
|
|
52
57
|
toKey(): string;
|
|
53
58
|
}
|
|
54
59
|
export declare class MergedProfileSource implements ProfileSource {
|
|
60
|
+
readonly profileSourceType: "merged";
|
|
55
61
|
mergeFrom: bigint;
|
|
56
62
|
mergeTo: bigint;
|
|
57
63
|
query: Query;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileSource.d.ts","sourceRoot":"","sources":["../src/ProfileSource.tsx"],"names":[],"mappings":"AAaA,OAAO,EACL,oBAAoB,EAEpB,YAAY,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAqB,WAAW,EAAE,KAAK,EAAC,MAAM,eAAe,CAAC;AAGrE,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,YAAY,CAAC;IACjC,WAAW,EAAE,MAAM,WAAW,CAAC;IAC/B,aAAa,EAAE,MAAM,oBAAoB,CAAC;IAC1C,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,KAAK,EAAE,MAAM,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC1C,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,IAAI,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,KAAG,MAM9C,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAC,GAAG,MAAM,CAMpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,EAAE,MAAM,EAAE,MAAM,GAAG;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,CAI/F;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,gBAAgB,GAAG,IAAI,CAqBzB;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;gBAEjB,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAO5D,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAQrC,IAAI,IAAI,MAAM;IAId,aAAa,IAAI,aAAa;CAG/B;
|
|
1
|
+
{"version":3,"file":"ProfileSource.d.ts","sourceRoot":"","sources":["../src/ProfileSource.tsx"],"names":[],"mappings":"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"}
|
package/dist/ProfileSource.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
3
|
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
3
4
|
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
4
5
|
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
@@ -103,9 +104,27 @@ export var MergedProfileSelection = /*#__PURE__*/function () {
|
|
|
103
104
|
})
|
|
104
105
|
}]);
|
|
105
106
|
}();
|
|
107
|
+
|
|
108
|
+
// Type tag carried on instances so we can identify them reliably even when the
|
|
109
|
+
// class gets duplicated across bundle chunks (prod builds sometimes end up with
|
|
110
|
+
// two copies of the same class, making `instanceof` unreliable).
|
|
111
|
+
export var PROFILE_SOURCE_TYPE_MERGED = 'merged';
|
|
112
|
+
export var PROFILE_SOURCE_TYPE_DIFF = 'diff';
|
|
113
|
+
var getProfileSourceType = function getProfileSourceType(source) {
|
|
114
|
+
if (source == null) return undefined;
|
|
115
|
+
var tag = source.profileSourceType;
|
|
116
|
+
return typeof tag === 'string' ? tag : undefined;
|
|
117
|
+
};
|
|
118
|
+
export var isMergedProfileSource = function isMergedProfileSource(source) {
|
|
119
|
+
return getProfileSourceType(source) === PROFILE_SOURCE_TYPE_MERGED;
|
|
120
|
+
};
|
|
121
|
+
export var isProfileDiffSource = function isProfileDiffSource(source) {
|
|
122
|
+
return getProfileSourceType(source) === PROFILE_SOURCE_TYPE_DIFF;
|
|
123
|
+
};
|
|
106
124
|
export var ProfileDiffSource = /*#__PURE__*/function () {
|
|
107
125
|
function ProfileDiffSource(a, b, absolute) {
|
|
108
126
|
_classCallCheck(this, ProfileDiffSource);
|
|
127
|
+
_defineProperty(this, "profileSourceType", PROFILE_SOURCE_TYPE_DIFF);
|
|
109
128
|
this.a = a;
|
|
110
129
|
this.b = b;
|
|
111
130
|
this.profileType = a.ProfileType();
|
|
@@ -176,6 +195,7 @@ function nanosToTimestamp(nanos) {
|
|
|
176
195
|
export var MergedProfileSource = /*#__PURE__*/function () {
|
|
177
196
|
function MergedProfileSource(mergeFrom, mergeTo, query) {
|
|
178
197
|
_classCallCheck(this, MergedProfileSource);
|
|
198
|
+
_defineProperty(this, "profileSourceType", PROFILE_SOURCE_TYPE_MERGED);
|
|
179
199
|
this.mergeFrom = mergeFrom;
|
|
180
200
|
this.mergeTo = mergeTo;
|
|
181
201
|
this.query = query;
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parca/profile",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.147",
|
|
4
4
|
"description": "Profile viewing libraries",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@floating-ui/react": "^0.27.12",
|
|
7
7
|
"@headlessui/react": "^1.7.19",
|
|
8
8
|
"@iconify/react": "^4.0.0",
|
|
9
9
|
"@parca/client": "0.17.23",
|
|
10
|
-
"@parca/components": "0.16.
|
|
10
|
+
"@parca/components": "0.16.418",
|
|
11
11
|
"@parca/dynamicsize": "0.16.74",
|
|
12
|
-
"@parca/hooks": "0.0.
|
|
12
|
+
"@parca/hooks": "0.0.127",
|
|
13
13
|
"@parca/icons": "0.16.82",
|
|
14
14
|
"@parca/parser": "0.16.88",
|
|
15
|
-
"@parca/store": "0.16.
|
|
15
|
+
"@parca/store": "0.16.209",
|
|
16
16
|
"@parca/test-utils": "0.0.22",
|
|
17
|
-
"@parca/utilities": "0.0.
|
|
17
|
+
"@parca/utilities": "0.0.132",
|
|
18
18
|
"@popperjs/core": "^2.11.8",
|
|
19
19
|
"@protobuf-ts/runtime-rpc": "^2.5.0",
|
|
20
20
|
"@storybook/preview-api": "^8.4.3",
|
|
@@ -89,5 +89,5 @@
|
|
|
89
89
|
"access": "public",
|
|
90
90
|
"registry": "https://registry.npmjs.org/"
|
|
91
91
|
},
|
|
92
|
-
"gitHead": "
|
|
92
|
+
"gitHead": "43cd07b2db67dd7ab645e21071a4c2bf05e9c17c"
|
|
93
93
|
}
|
|
@@ -22,7 +22,12 @@ import {TimeUnits, formatDate, formatDuration} from '@parca/utilities';
|
|
|
22
22
|
|
|
23
23
|
import ProfileFlameGraph, {validateFlameChartQuery} from '../ProfileFlameGraph';
|
|
24
24
|
import {boundsFromProfileSource} from '../ProfileFlameGraph/FlameGraphArrow/utils';
|
|
25
|
-
import {
|
|
25
|
+
import {
|
|
26
|
+
MergedProfileSource,
|
|
27
|
+
ProfileSource,
|
|
28
|
+
isMergedProfileSource,
|
|
29
|
+
timeFormat,
|
|
30
|
+
} from '../ProfileSource';
|
|
26
31
|
import {useProfileFilters} from '../ProfileView/components/ProfileFilters/useProfileFilters';
|
|
27
32
|
import type {SamplesData} from '../ProfileView/types/visualization';
|
|
28
33
|
import {flamechartDimensionParser} from '../hooks/urlParsers';
|
|
@@ -83,7 +88,7 @@ const createFilteredProfileSource = (
|
|
|
83
88
|
profileSource: ProfileSource,
|
|
84
89
|
selectedTimeframe: {labels: LabelSet; bounds: NumberDuo}
|
|
85
90
|
): ProfileSource | null => {
|
|
86
|
-
if (!(profileSource
|
|
91
|
+
if (!isMergedProfileSource(profileSource)) {
|
|
87
92
|
return null;
|
|
88
93
|
}
|
|
89
94
|
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from '@parca/store';
|
|
23
23
|
import {divide, getLastItem, valueFormatter} from '@parca/utilities';
|
|
24
24
|
|
|
25
|
-
import {
|
|
25
|
+
import {ProfileSource, isMergedProfileSource} from '../../ProfileSource';
|
|
26
26
|
import {BigIntDuo, hexifyAddress} from '../../utils';
|
|
27
27
|
import {
|
|
28
28
|
FIELD_DEPTH,
|
|
@@ -115,7 +115,7 @@ export const boundsFromProfileSource = (profileSource?: ProfileSource): BigIntDu
|
|
|
115
115
|
return [0n, 1n];
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
if (!(profileSource
|
|
118
|
+
if (!isMergedProfileSource(profileSource)) {
|
|
119
119
|
return [0n, 1n];
|
|
120
120
|
}
|
|
121
121
|
|
package/src/ProfileSource.tsx
CHANGED
|
@@ -120,7 +120,32 @@ export class MergedProfileSelection implements ProfileSelection {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
// Type tag carried on instances so we can identify them reliably even when the
|
|
124
|
+
// class gets duplicated across bundle chunks (prod builds sometimes end up with
|
|
125
|
+
// two copies of the same class, making `instanceof` unreliable).
|
|
126
|
+
export const PROFILE_SOURCE_TYPE_MERGED = 'merged' as const;
|
|
127
|
+
export const PROFILE_SOURCE_TYPE_DIFF = 'diff' as const;
|
|
128
|
+
|
|
129
|
+
const getProfileSourceType = (source: ProfileSource | null | undefined): string | undefined => {
|
|
130
|
+
if (source == null) return undefined;
|
|
131
|
+
const tag = (source as {profileSourceType?: unknown}).profileSourceType;
|
|
132
|
+
return typeof tag === 'string' ? tag : undefined;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export const isMergedProfileSource = (
|
|
136
|
+
source: ProfileSource | null | undefined
|
|
137
|
+
): source is MergedProfileSource => {
|
|
138
|
+
return getProfileSourceType(source) === PROFILE_SOURCE_TYPE_MERGED;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export const isProfileDiffSource = (
|
|
142
|
+
source: ProfileSource | null | undefined
|
|
143
|
+
): source is ProfileDiffSource => {
|
|
144
|
+
return getProfileSourceType(source) === PROFILE_SOURCE_TYPE_DIFF;
|
|
145
|
+
};
|
|
146
|
+
|
|
123
147
|
export class ProfileDiffSource implements ProfileSource {
|
|
148
|
+
readonly profileSourceType = PROFILE_SOURCE_TYPE_DIFF;
|
|
124
149
|
a: ProfileSource;
|
|
125
150
|
b: ProfileSource;
|
|
126
151
|
profileType: ProfileType;
|
|
@@ -194,6 +219,7 @@ function nanosToTimestamp(nanos: bigint): Timestamp {
|
|
|
194
219
|
}
|
|
195
220
|
|
|
196
221
|
export class MergedProfileSource implements ProfileSource {
|
|
222
|
+
readonly profileSourceType = PROFILE_SOURCE_TYPE_MERGED;
|
|
197
223
|
mergeFrom: bigint;
|
|
198
224
|
mergeTo: bigint;
|
|
199
225
|
query: Query;
|