@ama-sdk/core 11.0.0-prerelease.40 → 11.0.0-prerelease.41

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.
@@ -215,19 +215,31 @@ var PerformanceMetricPlugin = /*#__PURE__*/ function() {
215
215
  * Callback function called when a mark is closed with an error.
216
216
  */ _define_property(this, "onMarkError", void 0);
217
217
  /**
218
+ * Callback function called when a mark is opened.
219
+ */ _define_property(this, "onMarkOpen", void 0);
220
+ /**
218
221
  * Opened marks.
219
222
  */ _define_property(this, "openMarks", {});
220
223
  /**
221
- * Method used to get the current time.
222
- * Date.now() is used by default, but we fall back on window.performance.now() if available.
224
+ * Performance reporter to use for performance measurements.
225
+ * @default window.performance on browser only, undefined on node
226
+ */ _define_property(this, "performance", void 0);
227
+ /**
228
+ * Method used to get the current time as default implementation if no Performance API available.
229
+ * Date.now() is used by default.
223
230
  */ _define_property(this, "getTime", Date.now);
231
+ /**
232
+ * Retrieve the performance tag name
233
+ * @param status status of the call
234
+ * @param markId Mark ID
235
+ */ _define_property(this, "getPerformanceTag", function(status, markId) {
236
+ return "sdk:".concat(status, ":").concat(markId);
237
+ });
238
+ this.getPerformanceTag = (options === null || options === void 0 ? void 0 : options.getPerformanceTag) || this.getPerformanceTag;
239
+ this.performance = (options === null || options === void 0 ? void 0 : options.performance) || (typeof window !== 'undefined' ? window.performance : undefined);
224
240
  this.onMarkComplete = options ? options.onMarkComplete : this.onMarkComplete;
225
241
  this.onMarkError = options ? options.onMarkError : this.onMarkError;
226
- if (typeof window !== 'undefined' && !!window.performance && !!window.performance.now) {
227
- this.getTime = function() {
228
- return window.performance.now();
229
- };
230
- }
242
+ this.onMarkOpen = options ? options.onMarkOpen : this.onMarkOpen;
231
243
  }
232
244
  _create_class(PerformanceMetricPlugin, [
233
245
  {
@@ -237,13 +249,21 @@ var PerformanceMetricPlugin = /*#__PURE__*/ function() {
237
249
  * @param url URL of the call associated to the mark to open
238
250
  * @param requestOptions Options of the call associated to the mark to open
239
251
  */ function openMark(url, requestOptions) {
252
+ var _this_performance;
240
253
  var markId = (0, _uuid.v4)();
241
- this.openMarks = _object_spread_props(_object_spread({}, this.openMarks), _define_property({}, markId, {
254
+ var perfMark = ((_this_performance = this.performance) === null || _this_performance === void 0 ? void 0 : _this_performance.mark(this.getPerformanceTag('start', markId))) || undefined;
255
+ var _perfMark_startTime;
256
+ var startTime = (_perfMark_startTime = perfMark === null || perfMark === void 0 ? void 0 : perfMark.startTime) !== null && _perfMark_startTime !== void 0 ? _perfMark_startTime : this.getTime();
257
+ var mark = {
242
258
  markId: markId,
243
259
  url: url,
244
260
  requestOptions: requestOptions,
245
- startTime: this.getTime()
246
- }));
261
+ startTime: startTime
262
+ };
263
+ this.openMarks[markId] = mark;
264
+ if (this.onMarkOpen) {
265
+ void this.onMarkOpen(mark);
266
+ }
247
267
  return markId;
248
268
  }
249
269
  },
@@ -254,14 +274,19 @@ var PerformanceMetricPlugin = /*#__PURE__*/ function() {
254
274
  * @param markId Id of the mark to close
255
275
  * @param response Response of the call associated to the mark to close
256
276
  */ function closeMark(markId, response) {
277
+ var _this_performance, _this_performance1;
278
+ var perfMark = ((_this_performance = this.performance) === null || _this_performance === void 0 ? void 0 : _this_performance.mark(this.getPerformanceTag('end', markId))) || undefined;
279
+ var _perfMark_startTime;
280
+ var endTime = (_perfMark_startTime = perfMark === null || perfMark === void 0 ? void 0 : perfMark.startTime) !== null && _perfMark_startTime !== void 0 ? _perfMark_startTime : this.getTime();
281
+ (_this_performance1 = this.performance) === null || _this_performance1 === void 0 ? void 0 : _this_performance1.measure(this.getPerformanceTag('measure', markId), this.getPerformanceTag('start', markId), this.getPerformanceTag('end', markId));
257
282
  var mark = this.openMarks[markId];
258
283
  if (!mark) {
259
284
  return;
260
285
  }
261
286
  if (this.onMarkComplete) {
262
- this.onMarkComplete(_object_spread_props(_object_spread({}, mark), {
287
+ void this.onMarkComplete(_object_spread_props(_object_spread({}, mark), {
263
288
  response: response,
264
- endTime: this.getTime()
289
+ endTime: endTime
265
290
  }));
266
291
  }
267
292
  delete this.openMarks[markId];
@@ -274,14 +299,19 @@ var PerformanceMetricPlugin = /*#__PURE__*/ function() {
274
299
  * @param markId Id of the mark to close
275
300
  * @param error Optional error of the call associated to the mark to close
276
301
  */ function closeMarkWithError(markId, error) {
302
+ var _this_performance, _this_performance1;
303
+ var perfMark = ((_this_performance = this.performance) === null || _this_performance === void 0 ? void 0 : _this_performance.mark(this.getPerformanceTag('error', markId))) || undefined;
304
+ var _perfMark_startTime;
305
+ var endTime = (_perfMark_startTime = perfMark === null || perfMark === void 0 ? void 0 : perfMark.startTime) !== null && _perfMark_startTime !== void 0 ? _perfMark_startTime : this.getTime();
306
+ (_this_performance1 = this.performance) === null || _this_performance1 === void 0 ? void 0 : _this_performance1.measure(this.getPerformanceTag('measure', markId), this.getPerformanceTag('start', markId), this.getPerformanceTag('error', markId));
277
307
  var mark = this.openMarks[markId];
278
308
  if (!mark) {
279
309
  return;
280
310
  }
281
311
  if (this.onMarkError) {
282
- this.onMarkError(_object_spread_props(_object_spread({}, mark), {
312
+ void this.onMarkError(_object_spread_props(_object_spread({}, mark), {
283
313
  error: error,
284
- endTime: this.getTime()
314
+ endTime: endTime
285
315
  }));
286
316
  }
287
317
  delete this.openMarks[markId];
@@ -5,8 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  var _perfmetricfetch = require("./perf-metric.fetch");
6
6
  var perfPlugin;
7
7
  describe('PerformanceMetricPlugin', function() {
8
+ var onMarkOpen;
8
9
  beforeEach(function() {
9
- perfPlugin = new _perfmetricfetch.PerformanceMetricPlugin({});
10
+ onMarkOpen = jest.fn();
11
+ perfPlugin = new _perfmetricfetch.PerformanceMetricPlugin({
12
+ onMarkOpen: onMarkOpen
13
+ });
10
14
  });
11
15
  it('should generate new mark ids', function() {
12
16
  expect(perfPlugin.openMark('', {})).not.toEqual(perfPlugin.openMark('', {}));
@@ -47,4 +51,10 @@ describe('PerformanceMetricPlugin', function() {
47
51
  perfPlugin.closeMarkWithError(markId, {});
48
52
  return ret;
49
53
  });
54
+ it('should include call the open mark callback', function() {
55
+ var markId = perfPlugin.openMark('my-url', {});
56
+ expect(onMarkOpen).toHaveBeenCalledWith(expect.objectContaining({
57
+ markId: markId
58
+ }));
59
+ });
50
60
  });
@@ -207,19 +207,31 @@ import { v4 } from 'uuid';
207
207
  * Callback function called when a mark is closed with an error.
208
208
  */ _define_property(this, "onMarkError", void 0);
209
209
  /**
210
+ * Callback function called when a mark is opened.
211
+ */ _define_property(this, "onMarkOpen", void 0);
212
+ /**
210
213
  * Opened marks.
211
214
  */ _define_property(this, "openMarks", {});
212
215
  /**
213
- * Method used to get the current time.
214
- * Date.now() is used by default, but we fall back on window.performance.now() if available.
216
+ * Performance reporter to use for performance measurements.
217
+ * @default window.performance on browser only, undefined on node
218
+ */ _define_property(this, "performance", void 0);
219
+ /**
220
+ * Method used to get the current time as default implementation if no Performance API available.
221
+ * Date.now() is used by default.
215
222
  */ _define_property(this, "getTime", Date.now);
223
+ /**
224
+ * Retrieve the performance tag name
225
+ * @param status status of the call
226
+ * @param markId Mark ID
227
+ */ _define_property(this, "getPerformanceTag", function(status, markId) {
228
+ return "sdk:".concat(status, ":").concat(markId);
229
+ });
230
+ this.getPerformanceTag = (options === null || options === void 0 ? void 0 : options.getPerformanceTag) || this.getPerformanceTag;
231
+ this.performance = (options === null || options === void 0 ? void 0 : options.performance) || (typeof window !== 'undefined' ? window.performance : undefined);
216
232
  this.onMarkComplete = options ? options.onMarkComplete : this.onMarkComplete;
217
233
  this.onMarkError = options ? options.onMarkError : this.onMarkError;
218
- if (typeof window !== 'undefined' && !!window.performance && !!window.performance.now) {
219
- this.getTime = function() {
220
- return window.performance.now();
221
- };
222
- }
234
+ this.onMarkOpen = options ? options.onMarkOpen : this.onMarkOpen;
223
235
  }
224
236
  _create_class(PerformanceMetricPlugin, [
225
237
  {
@@ -229,13 +241,21 @@ import { v4 } from 'uuid';
229
241
  * @param url URL of the call associated to the mark to open
230
242
  * @param requestOptions Options of the call associated to the mark to open
231
243
  */ function openMark(url, requestOptions) {
244
+ var _this_performance;
232
245
  var markId = v4();
233
- this.openMarks = _object_spread_props(_object_spread({}, this.openMarks), _define_property({}, markId, {
246
+ var perfMark = ((_this_performance = this.performance) === null || _this_performance === void 0 ? void 0 : _this_performance.mark(this.getPerformanceTag('start', markId))) || undefined;
247
+ var _perfMark_startTime;
248
+ var startTime = (_perfMark_startTime = perfMark === null || perfMark === void 0 ? void 0 : perfMark.startTime) !== null && _perfMark_startTime !== void 0 ? _perfMark_startTime : this.getTime();
249
+ var mark = {
234
250
  markId: markId,
235
251
  url: url,
236
252
  requestOptions: requestOptions,
237
- startTime: this.getTime()
238
- }));
253
+ startTime: startTime
254
+ };
255
+ this.openMarks[markId] = mark;
256
+ if (this.onMarkOpen) {
257
+ void this.onMarkOpen(mark);
258
+ }
239
259
  return markId;
240
260
  }
241
261
  },
@@ -246,14 +266,19 @@ import { v4 } from 'uuid';
246
266
  * @param markId Id of the mark to close
247
267
  * @param response Response of the call associated to the mark to close
248
268
  */ function closeMark(markId, response) {
269
+ var _this_performance, _this_performance1;
270
+ var perfMark = ((_this_performance = this.performance) === null || _this_performance === void 0 ? void 0 : _this_performance.mark(this.getPerformanceTag('end', markId))) || undefined;
271
+ var _perfMark_startTime;
272
+ var endTime = (_perfMark_startTime = perfMark === null || perfMark === void 0 ? void 0 : perfMark.startTime) !== null && _perfMark_startTime !== void 0 ? _perfMark_startTime : this.getTime();
273
+ (_this_performance1 = this.performance) === null || _this_performance1 === void 0 ? void 0 : _this_performance1.measure(this.getPerformanceTag('measure', markId), this.getPerformanceTag('start', markId), this.getPerformanceTag('end', markId));
249
274
  var mark = this.openMarks[markId];
250
275
  if (!mark) {
251
276
  return;
252
277
  }
253
278
  if (this.onMarkComplete) {
254
- this.onMarkComplete(_object_spread_props(_object_spread({}, mark), {
279
+ void this.onMarkComplete(_object_spread_props(_object_spread({}, mark), {
255
280
  response: response,
256
- endTime: this.getTime()
281
+ endTime: endTime
257
282
  }));
258
283
  }
259
284
  delete this.openMarks[markId];
@@ -266,14 +291,19 @@ import { v4 } from 'uuid';
266
291
  * @param markId Id of the mark to close
267
292
  * @param error Optional error of the call associated to the mark to close
268
293
  */ function closeMarkWithError(markId, error) {
294
+ var _this_performance, _this_performance1;
295
+ var perfMark = ((_this_performance = this.performance) === null || _this_performance === void 0 ? void 0 : _this_performance.mark(this.getPerformanceTag('error', markId))) || undefined;
296
+ var _perfMark_startTime;
297
+ var endTime = (_perfMark_startTime = perfMark === null || perfMark === void 0 ? void 0 : perfMark.startTime) !== null && _perfMark_startTime !== void 0 ? _perfMark_startTime : this.getTime();
298
+ (_this_performance1 = this.performance) === null || _this_performance1 === void 0 ? void 0 : _this_performance1.measure(this.getPerformanceTag('measure', markId), this.getPerformanceTag('start', markId), this.getPerformanceTag('error', markId));
269
299
  var mark = this.openMarks[markId];
270
300
  if (!mark) {
271
301
  return;
272
302
  }
273
303
  if (this.onMarkError) {
274
- this.onMarkError(_object_spread_props(_object_spread({}, mark), {
304
+ void this.onMarkError(_object_spread_props(_object_spread({}, mark), {
275
305
  error: error,
276
- endTime: this.getTime()
306
+ endTime: endTime
277
307
  }));
278
308
  }
279
309
  delete this.openMarks[markId];
@@ -1,8 +1,12 @@
1
1
  import { PerformanceMetricPlugin } from './perf-metric.fetch';
2
2
  var perfPlugin;
3
3
  describe('PerformanceMetricPlugin', function() {
4
+ var onMarkOpen;
4
5
  beforeEach(function() {
5
- perfPlugin = new PerformanceMetricPlugin({});
6
+ onMarkOpen = jest.fn();
7
+ perfPlugin = new PerformanceMetricPlugin({
8
+ onMarkOpen: onMarkOpen
9
+ });
6
10
  });
7
11
  it('should generate new mark ids', function() {
8
12
  expect(perfPlugin.openMark('', {})).not.toEqual(perfPlugin.openMark('', {}));
@@ -43,4 +47,10 @@ describe('PerformanceMetricPlugin', function() {
43
47
  perfPlugin.closeMarkWithError(markId, {});
44
48
  return ret;
45
49
  });
50
+ it('should include call the open mark callback', function() {
51
+ var markId = perfPlugin.openMark('my-url', {});
52
+ expect(onMarkOpen).toHaveBeenCalledWith(expect.objectContaining({
53
+ markId: markId
54
+ }));
55
+ });
46
56
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ama-sdk/core",
3
- "version": "11.0.0-prerelease.40",
3
+ "version": "11.0.0-prerelease.41",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -79,7 +79,7 @@
79
79
  "@angular-devkit/schematics": "~17.3.0",
80
80
  "@angular/cli": "~17.3.0",
81
81
  "@angular/common": "~17.3.0",
82
- "@o3r/schematics": "^11.0.0-prerelease.40",
82
+ "@o3r/schematics": "^11.0.0-prerelease.41",
83
83
  "@schematics/angular": "~17.3.0",
84
84
  "isomorphic-fetch": "^3.0.0",
85
85
  "rxjs": "^7.8.1",
@@ -119,9 +119,9 @@
119
119
  "@angular/core": "~17.3.0",
120
120
  "@nx/eslint-plugin": "~18.3.0",
121
121
  "@nx/jest": "~18.3.0",
122
- "@o3r/build-helpers": "^11.0.0-prerelease.40",
123
- "@o3r/eslint-plugin": "^11.0.0-prerelease.40",
124
- "@o3r/test-helpers": "^11.0.0-prerelease.40",
122
+ "@o3r/build-helpers": "^11.0.0-prerelease.41",
123
+ "@o3r/eslint-plugin": "^11.0.0-prerelease.41",
124
+ "@o3r/test-helpers": "^11.0.0-prerelease.41",
125
125
  "@schematics/angular": "~17.3.0",
126
126
  "@stylistic/eslint-plugin-ts": "^1.5.4",
127
127
  "@swc/cli": "~0.3.0",
@@ -32,6 +32,13 @@ export interface Mark {
32
32
  */
33
33
  endTime?: number;
34
34
  }
35
+ /** Performance object supporting NodeJs Performance and Web Performance reporting */
36
+ type CrossPlatformPerformance = {
37
+ /** @see Performance.mark */
38
+ mark: (...x: Parameters<Performance['mark']>) => ReturnType<Performance['mark']> | void;
39
+ /** @see Performance.measure */
40
+ measure: (measureName: string, startOrMeasureOptions?: string, endMark?: string) => ReturnType<Performance['measure']> | void;
41
+ };
35
42
  /**
36
43
  * Options for this plugin.
37
44
  */
@@ -39,11 +46,26 @@ export interface PerformanceMetricOptions {
39
46
  /**
40
47
  * Callback function to be called when a mark is closed.
41
48
  */
42
- onMarkComplete: (mark: Mark) => void;
49
+ onMarkComplete: (mark: Mark) => void | Promise<void>;
43
50
  /**
44
51
  * Callback function to be called when a mark is closed with an error.
45
52
  */
46
- onMarkError: (mark: Mark) => void;
53
+ onMarkError: (mark: Mark) => void | Promise<void>;
54
+ /**
55
+ * Callback function called when a mark is opened.
56
+ */
57
+ onMarkOpen: (mark: Mark) => void | Promise<void>;
58
+ /**
59
+ * Instance of the performance reporter to use for performance measurements.
60
+ * @default window.performance on browser only, undefined on node
61
+ */
62
+ performance: CrossPlatformPerformance;
63
+ /**
64
+ * Retrieve the performance tag name
65
+ * @param status status of the call
66
+ * @param markId Mark ID
67
+ */
68
+ getPerformanceTag: (status: string, markId: string) => string;
47
69
  }
48
70
  /**
49
71
  * Performance metric plugin.
@@ -52,23 +74,38 @@ export declare class PerformanceMetricPlugin implements FetchPlugin {
52
74
  /**
53
75
  * Callback function called when a mark is closed.
54
76
  */
55
- onMarkComplete?: (mark: Mark) => void;
77
+ onMarkComplete?: (mark: Mark) => void | Promise<void>;
56
78
  /**
57
79
  * Callback function called when a mark is closed with an error.
58
80
  */
59
- onMarkError?: (mark: Mark) => void;
81
+ onMarkError?: (mark: Mark) => void | Promise<void>;
82
+ /**
83
+ * Callback function called when a mark is opened.
84
+ */
85
+ onMarkOpen?: (mark: Mark) => void | Promise<void>;
60
86
  /**
61
87
  * Opened marks.
62
88
  */
63
- protected openMarks: {
89
+ protected readonly openMarks: {
64
90
  [markId: string]: Mark;
65
91
  };
66
92
  /**
67
- * Method used to get the current time.
68
- * Date.now() is used by default, but we fall back on window.performance.now() if available.
93
+ * Performance reporter to use for performance measurements.
94
+ * @default window.performance on browser only, undefined on node
95
+ */
96
+ protected readonly performance: CrossPlatformPerformance | undefined;
97
+ /**
98
+ * Method used to get the current time as default implementation if no Performance API available.
99
+ * Date.now() is used by default.
69
100
  */
70
101
  protected getTime: () => number;
71
102
  constructor(options?: Partial<PerformanceMetricOptions>);
103
+ /**
104
+ * Retrieve the performance tag name
105
+ * @param status status of the call
106
+ * @param markId Mark ID
107
+ */
108
+ protected getPerformanceTag: (status: string, markId: string) => string;
72
109
  /**
73
110
  * Opens a mark associated to a call.
74
111
  * @param url URL of the call associated to the mark to open
@@ -92,4 +129,5 @@ export declare class PerformanceMetricPlugin implements FetchPlugin {
92
129
  transform: (fetchCall: FetchCall) => Promise<Response>;
93
130
  };
94
131
  }
132
+ export {};
95
133
  //# sourceMappingURL=perf-metric.fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"perf-metric.fetch.d.ts","sourceRoot":"","sources":["../../../../src/plugins/perf-metric/perf-metric.fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,cAAc,EAAE,WAAW,CAAC;IAE5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,WAAW;IACzD;;OAEG;IACI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACI,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE;QAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,CAAM;IAEnD;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,MAAM,CAAY;gBAE/B,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC;IASvD;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW;IAcxD;;;;OAIG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAenD;;;;OAIG;IACI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS;IAelE,kBAAkB;IACX,IAAI,CAAC,OAAO,EAAE,kBAAkB;;;CAgBxC"}
1
+ {"version":3,"file":"perf-metric.fetch.d.ts","sourceRoot":"","sources":["../../../../src/plugins/perf-metric/perf-metric.fetch.ts"],"names":[],"mappings":"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"}
@@ -9,15 +9,21 @@ export class PerformanceMetricPlugin {
9
9
  */
10
10
  this.openMarks = {};
11
11
  /**
12
- * Method used to get the current time.
13
- * Date.now() is used by default, but we fall back on window.performance.now() if available.
12
+ * Method used to get the current time as default implementation if no Performance API available.
13
+ * Date.now() is used by default.
14
14
  */
15
15
  this.getTime = Date.now;
16
+ /**
17
+ * Retrieve the performance tag name
18
+ * @param status status of the call
19
+ * @param markId Mark ID
20
+ */
21
+ this.getPerformanceTag = (status, markId) => `sdk:${status}:${markId}`;
22
+ this.getPerformanceTag = options?.getPerformanceTag || this.getPerformanceTag;
23
+ this.performance = options?.performance || (typeof window !== 'undefined' ? window.performance : undefined);
16
24
  this.onMarkComplete = options ? options.onMarkComplete : this.onMarkComplete;
17
25
  this.onMarkError = options ? options.onMarkError : this.onMarkError;
18
- if (typeof window !== 'undefined' && !!window.performance && !!window.performance.now) {
19
- this.getTime = () => window.performance.now();
20
- }
26
+ this.onMarkOpen = options ? options.onMarkOpen : this.onMarkOpen;
21
27
  }
22
28
  /**
23
29
  * Opens a mark associated to a call.
@@ -26,15 +32,18 @@ export class PerformanceMetricPlugin {
26
32
  */
27
33
  openMark(url, requestOptions) {
28
34
  const markId = v4();
29
- this.openMarks = {
30
- ...this.openMarks,
31
- [markId]: {
32
- markId,
33
- url,
34
- requestOptions,
35
- startTime: this.getTime()
36
- }
35
+ const perfMark = this.performance?.mark(this.getPerformanceTag('start', markId)) || undefined;
36
+ const startTime = perfMark?.startTime ?? this.getTime();
37
+ const mark = {
38
+ markId,
39
+ url,
40
+ requestOptions,
41
+ startTime
37
42
  };
43
+ this.openMarks[markId] = mark;
44
+ if (this.onMarkOpen) {
45
+ void this.onMarkOpen(mark);
46
+ }
38
47
  return markId;
39
48
  }
40
49
  /**
@@ -43,15 +52,18 @@ export class PerformanceMetricPlugin {
43
52
  * @param response Response of the call associated to the mark to close
44
53
  */
45
54
  closeMark(markId, response) {
55
+ const perfMark = this.performance?.mark(this.getPerformanceTag('end', markId)) || undefined;
56
+ const endTime = perfMark?.startTime ?? this.getTime();
57
+ this.performance?.measure(this.getPerformanceTag('measure', markId), this.getPerformanceTag('start', markId), this.getPerformanceTag('end', markId));
46
58
  const mark = this.openMarks[markId];
47
59
  if (!mark) {
48
60
  return;
49
61
  }
50
62
  if (this.onMarkComplete) {
51
- this.onMarkComplete({
63
+ void this.onMarkComplete({
52
64
  ...mark,
53
65
  response,
54
- endTime: this.getTime()
66
+ endTime
55
67
  });
56
68
  }
57
69
  delete this.openMarks[markId];
@@ -62,15 +74,18 @@ export class PerformanceMetricPlugin {
62
74
  * @param error Optional error of the call associated to the mark to close
63
75
  */
64
76
  closeMarkWithError(markId, error) {
77
+ const perfMark = this.performance?.mark(this.getPerformanceTag('error', markId)) || undefined;
78
+ const endTime = perfMark?.startTime ?? this.getTime();
79
+ this.performance?.measure(this.getPerformanceTag('measure', markId), this.getPerformanceTag('start', markId), this.getPerformanceTag('error', markId));
65
80
  const mark = this.openMarks[markId];
66
81
  if (!mark) {
67
82
  return;
68
83
  }
69
84
  if (this.onMarkError) {
70
- this.onMarkError({
85
+ void this.onMarkError({
71
86
  ...mark,
72
87
  error,
73
- endTime: this.getTime()
88
+ endTime
74
89
  });
75
90
  }
76
91
  delete this.openMarks[markId];
@@ -1 +1 @@
1
- {"version":3,"file":"perf-metric.fetch.js","sourceRoot":"","sources":["../../../../src/plugins/perf-metric/perf-metric.fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"perf-metric.fetch.js","sourceRoot":"","sources":["../../../../src/plugins/perf-metric/perf-metric.fetch.ts"],"names":[],"mappings":"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"}