@parca/profile 0.19.146 → 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 CHANGED
@@ -3,6 +3,10 @@
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
+
6
10
  ## [0.19.146](https://github.com/parca-dev/parca/compare/@parca/profile@0.19.145...@parca/profile@0.19.146) (2026-04-17)
7
11
 
8
12
  **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,EAAsB,aAAa,EAAa,MAAM,kBAAkB,CAAC;AAEhF,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"}
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 instanceof MergedProfileSource)) {
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,EAAsB,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvE,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"}
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 { MergedProfileSource } from '../../ProfileSource';
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 instanceof MergedProfileSource)) {
93
+ if (!isMergedProfileSource(profileSource)) {
94
94
  return [0n, 1n];
95
95
  }
96
96
  var request = profileSource.QueryRequest();
@@ -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;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACrD,CAAC,EAAE,aAAa,CAAC;IACjB,CAAC,EAAE,aAAa,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAEP,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,OAAO;IAOlE,aAAa,IAAI,oBAAoB;IAIrC,YAAY,IAAI,YAAY;IAgB5B,WAAW,IAAI,WAAW;IAI1B,QAAQ,IAAI,GAAG,CAAC,OAAO;IAQvB,QAAQ,IAAI,MAAM;IAWlB,KAAK,IAAI,MAAM;CAGhB;AAcD,qBAAa,mBAAoB,YAAW,aAAa;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;gBAEb,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAO5D,aAAa,IAAI,oBAAoB;IAcrC,YAAY,IAAI,YAAY;IAgB5B,WAAW,IAAI,WAAW;IAI1B,cAAc,IAAI,MAAM,EAAE;IAM1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAoBnC,KAAK,IAAI,MAAM;CAGhB"}
1
+ {"version":3,"file":"ProfileSource.d.ts","sourceRoot":"","sources":["../src/ProfileSource.tsx"],"names":[],"mappings":"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"}
@@ -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.146",
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.417",
10
+ "@parca/components": "0.16.418",
11
11
  "@parca/dynamicsize": "0.16.74",
12
- "@parca/hooks": "0.0.126",
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.208",
15
+ "@parca/store": "0.16.209",
16
16
  "@parca/test-utils": "0.0.22",
17
- "@parca/utilities": "0.0.131",
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": "ec316333f412094e3b2d78c8646a6acdf5ed7c6c"
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 {MergedProfileSource, ProfileSource, timeFormat} from '../ProfileSource';
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 instanceof MergedProfileSource)) {
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 {MergedProfileSource, ProfileSource} from '../../ProfileSource';
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 instanceof MergedProfileSource)) {
118
+ if (!isMergedProfileSource(profileSource)) {
119
119
  return [0n, 1n];
120
120
  }
121
121
 
@@ -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;