@lark-apaas/observable-web 1.0.2-alpha.1 → 1.0.2-alpha.11

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.d.ts CHANGED
@@ -27,6 +27,7 @@ declare class WebObservableSdk {
27
27
  private resource;
28
28
  private config;
29
29
  private isStarted;
30
+ private counterCache;
30
31
  static EmptySpan: Span;
31
32
  static timeOffset: number;
32
33
  constructor();
package/dist/index.js CHANGED
@@ -7,9 +7,16 @@ var sdkLogs = require('@opentelemetry/sdk-logs');
7
7
  var sdkMetrics = require('@opentelemetry/sdk-metrics');
8
8
  var sdkTraceWeb = require('@opentelemetry/sdk-trace-web');
9
9
  var sdkTraceBase = require('@opentelemetry/sdk-trace-base');
10
+ var StackTrace = require('stacktrace-js');
10
11
  var core = require('@opentelemetry/core');
11
12
 
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var StackTrace__default = /*#__PURE__*/_interopDefault(StackTrace);
16
+
12
17
  var __defProp = Object.defineProperty;
18
+ var __defProps = Object.defineProperties;
19
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
13
20
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
14
21
  var __hasOwnProp = Object.prototype.hasOwnProperty;
15
22
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
@@ -25,6 +32,7 @@ var __spreadValues = (a, b) => {
25
32
  }
26
33
  return a;
27
34
  };
35
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
28
36
  var __async = (__this, __arguments, generator) => {
29
37
  return new Promise((resolve, reject) => {
30
38
  var fulfilled = (value) => {
@@ -46,24 +54,19 @@ var __async = (__this, __arguments, generator) => {
46
54
  });
47
55
  };
48
56
 
49
- // ../../../node_modules/@opentelemetry/api/build/esm/platform/browser/globalThis.js
50
- var _globalThis = typeof globalThis === "object" ? globalThis : typeof self === "object" ? self : typeof window === "object" ? window : typeof global === "object" ? global : {};
51
-
52
57
  // ../../../node_modules/@opentelemetry/api/build/esm/version.js
53
- var VERSION = "1.9.0";
58
+ var VERSION = "1.9.1";
54
59
 
55
60
  // ../../../node_modules/@opentelemetry/api/build/esm/internal/semver.js
56
61
  var re = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
57
62
  function _makeCompatibilityCheck(ownVersion) {
58
- var acceptedVersions = /* @__PURE__ */ new Set([ownVersion]);
59
- var rejectedVersions = /* @__PURE__ */ new Set();
60
- var myVersionMatch = ownVersion.match(re);
63
+ const acceptedVersions = /* @__PURE__ */ new Set([ownVersion]);
64
+ const rejectedVersions = /* @__PURE__ */ new Set();
65
+ const myVersionMatch = ownVersion.match(re);
61
66
  if (!myVersionMatch) {
62
- return function() {
63
- return false;
64
- };
67
+ return () => false;
65
68
  }
66
- var ownVersionParsed = {
69
+ const ownVersionParsed = {
67
70
  major: +myVersionMatch[1],
68
71
  minor: +myVersionMatch[2],
69
72
  patch: +myVersionMatch[3],
@@ -89,11 +92,11 @@ function _makeCompatibilityCheck(ownVersion) {
89
92
  if (rejectedVersions.has(globalVersion)) {
90
93
  return false;
91
94
  }
92
- var globalVersionMatch = globalVersion.match(re);
95
+ const globalVersionMatch = globalVersion.match(re);
93
96
  if (!globalVersionMatch) {
94
97
  return _reject(globalVersion);
95
98
  }
96
- var globalVersionParsed = {
99
+ const globalVersionParsed = {
97
100
  major: +globalVersionMatch[1],
98
101
  minor: +globalVersionMatch[2],
99
102
  patch: +globalVersionMatch[3],
@@ -121,124 +124,70 @@ var isCompatible = _makeCompatibilityCheck(VERSION);
121
124
 
122
125
  // ../../../node_modules/@opentelemetry/api/build/esm/internal/global-utils.js
123
126
  var major = VERSION.split(".")[0];
124
- var GLOBAL_OPENTELEMETRY_API_KEY = /* @__PURE__ */ Symbol.for("opentelemetry.js.api." + major);
125
- var _global = _globalThis;
126
- function registerGlobal(type, instance, diag, allowOverride) {
127
+ var GLOBAL_OPENTELEMETRY_API_KEY = /* @__PURE__ */ Symbol.for(`opentelemetry.js.api.${major}`);
128
+ var _global = typeof globalThis === "object" ? globalThis : typeof self === "object" ? self : typeof window === "object" ? window : typeof global === "object" ? global : {};
129
+ function registerGlobal(type, instance, diag, allowOverride = false) {
127
130
  var _a;
128
- if (allowOverride === void 0) {
129
- allowOverride = false;
130
- }
131
- var api = _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : {
131
+ const api = _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : {
132
132
  version: VERSION
133
133
  };
134
134
  if (!allowOverride && api[type]) {
135
- var err = new Error("@opentelemetry/api: Attempted duplicate registration of API: " + type);
135
+ const err = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${type}`);
136
136
  diag.error(err.stack || err.message);
137
137
  return false;
138
138
  }
139
139
  if (api.version !== VERSION) {
140
- var err = new Error("@opentelemetry/api: Registration of version v" + api.version + " for " + type + " does not match previously registered API v" + VERSION);
140
+ const err = new Error(`@opentelemetry/api: Registration of version v${api.version} for ${type} does not match previously registered API v${VERSION}`);
141
141
  diag.error(err.stack || err.message);
142
142
  return false;
143
143
  }
144
144
  api[type] = instance;
145
- diag.debug("@opentelemetry/api: Registered a global for " + type + " v" + VERSION + ".");
145
+ diag.debug(`@opentelemetry/api: Registered a global for ${type} v${VERSION}.`);
146
146
  return true;
147
147
  }
148
148
  function getGlobal(type) {
149
149
  var _a, _b;
150
- var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version;
150
+ const globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version;
151
151
  if (!globalVersion || !isCompatible(globalVersion)) {
152
152
  return;
153
153
  }
154
154
  return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type];
155
155
  }
156
156
  function unregisterGlobal(type, diag) {
157
- diag.debug("@opentelemetry/api: Unregistering a global for " + type + " v" + VERSION + ".");
158
- var api = _global[GLOBAL_OPENTELEMETRY_API_KEY];
157
+ diag.debug(`@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`);
158
+ const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];
159
159
  if (api) {
160
160
  delete api[type];
161
161
  }
162
162
  }
163
163
 
164
164
  // ../../../node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js
165
- var __read = function(o, n) {
166
- var m = typeof Symbol === "function" && o[Symbol.iterator];
167
- if (!m) return o;
168
- var i = m.call(o), r, ar = [], e;
169
- try {
170
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
171
- } catch (error) {
172
- e = { error };
173
- } finally {
174
- try {
175
- if (r && !r.done && (m = i["return"])) m.call(i);
176
- } finally {
177
- if (e) throw e.error;
178
- }
165
+ var DiagComponentLogger = class {
166
+ constructor(props) {
167
+ this._namespace = props.namespace || "DiagComponentLogger";
179
168
  }
180
- return ar;
181
- };
182
- var __spreadArray = function(to, from, pack) {
183
- if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
184
- if (ar || !(i in from)) {
185
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
186
- ar[i] = from[i];
187
- }
169
+ debug(...args) {
170
+ return logProxy("debug", this._namespace, args);
171
+ }
172
+ error(...args) {
173
+ return logProxy("error", this._namespace, args);
174
+ }
175
+ info(...args) {
176
+ return logProxy("info", this._namespace, args);
177
+ }
178
+ warn(...args) {
179
+ return logProxy("warn", this._namespace, args);
180
+ }
181
+ verbose(...args) {
182
+ return logProxy("verbose", this._namespace, args);
188
183
  }
189
- return to.concat(ar || Array.prototype.slice.call(from));
190
184
  };
191
- var DiagComponentLogger = (
192
- /** @class */
193
- (function() {
194
- function DiagComponentLogger2(props) {
195
- this._namespace = props.namespace || "DiagComponentLogger";
196
- }
197
- DiagComponentLogger2.prototype.debug = function() {
198
- var args = [];
199
- for (var _i = 0; _i < arguments.length; _i++) {
200
- args[_i] = arguments[_i];
201
- }
202
- return logProxy("debug", this._namespace, args);
203
- };
204
- DiagComponentLogger2.prototype.error = function() {
205
- var args = [];
206
- for (var _i = 0; _i < arguments.length; _i++) {
207
- args[_i] = arguments[_i];
208
- }
209
- return logProxy("error", this._namespace, args);
210
- };
211
- DiagComponentLogger2.prototype.info = function() {
212
- var args = [];
213
- for (var _i = 0; _i < arguments.length; _i++) {
214
- args[_i] = arguments[_i];
215
- }
216
- return logProxy("info", this._namespace, args);
217
- };
218
- DiagComponentLogger2.prototype.warn = function() {
219
- var args = [];
220
- for (var _i = 0; _i < arguments.length; _i++) {
221
- args[_i] = arguments[_i];
222
- }
223
- return logProxy("warn", this._namespace, args);
224
- };
225
- DiagComponentLogger2.prototype.verbose = function() {
226
- var args = [];
227
- for (var _i = 0; _i < arguments.length; _i++) {
228
- args[_i] = arguments[_i];
229
- }
230
- return logProxy("verbose", this._namespace, args);
231
- };
232
- return DiagComponentLogger2;
233
- })()
234
- );
235
185
  function logProxy(funcName, namespace, args) {
236
- var logger = getGlobal("diag");
186
+ const logger = getGlobal("diag");
237
187
  if (!logger) {
238
188
  return;
239
189
  }
240
- args.unshift(namespace);
241
- return logger[funcName].apply(logger, __spreadArray([], __read(args), false));
190
+ return logger[funcName](namespace, ...args);
242
191
  }
243
192
 
244
193
  // ../../../node_modules/@opentelemetry/api/build/esm/diag/types.js
@@ -262,7 +211,7 @@ function createLogLevelDiagLogger(maxLevel, logger) {
262
211
  }
263
212
  logger = logger || {};
264
213
  function _filterFunc(funcName, theLevel) {
265
- var theFunc = logger[funcName];
214
+ const theFunc = logger[funcName];
266
215
  if (typeof theFunc === "function" && maxLevel >= theLevel) {
267
216
  return theFunc.bind(logger);
268
217
  }
@@ -279,248 +228,169 @@ function createLogLevelDiagLogger(maxLevel, logger) {
279
228
  }
280
229
 
281
230
  // ../../../node_modules/@opentelemetry/api/build/esm/api/diag.js
282
- var __read2 = function(o, n) {
283
- var m = typeof Symbol === "function" && o[Symbol.iterator];
284
- if (!m) return o;
285
- var i = m.call(o), r, ar = [], e;
286
- try {
287
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
288
- } catch (error) {
289
- e = { error };
290
- } finally {
291
- try {
292
- if (r && !r.done && (m = i["return"])) m.call(i);
293
- } finally {
294
- if (e) throw e.error;
231
+ var API_NAME = "diag";
232
+ var DiagAPI = class _DiagAPI {
233
+ /** Get the singleton instance of the DiagAPI API */
234
+ static instance() {
235
+ if (!this._instance) {
236
+ this._instance = new _DiagAPI();
295
237
  }
238
+ return this._instance;
296
239
  }
297
- return ar;
298
- };
299
- var __spreadArray2 = function(to, from, pack) {
300
- if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
301
- if (ar || !(i in from)) {
302
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
303
- ar[i] = from[i];
240
+ /**
241
+ * Private internal constructor
242
+ * @private
243
+ */
244
+ constructor() {
245
+ function _logProxy(funcName) {
246
+ return function(...args) {
247
+ const logger = getGlobal("diag");
248
+ if (!logger)
249
+ return;
250
+ return logger[funcName](...args);
251
+ };
304
252
  }
305
- }
306
- return to.concat(ar || Array.prototype.slice.call(from));
307
- };
308
- var API_NAME = "diag";
309
- var DiagAPI = (
310
- /** @class */
311
- (function() {
312
- function DiagAPI2() {
313
- function _logProxy(funcName) {
314
- return function() {
315
- var args = [];
316
- for (var _i = 0; _i < arguments.length; _i++) {
317
- args[_i] = arguments[_i];
318
- }
319
- var logger = getGlobal("diag");
320
- if (!logger)
321
- return;
322
- return logger[funcName].apply(logger, __spreadArray2([], __read2(args), false));
253
+ const self2 = this;
254
+ const setLogger = (logger, optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }) => {
255
+ var _a, _b, _c;
256
+ if (logger === self2) {
257
+ const err = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");
258
+ self2.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);
259
+ return false;
260
+ }
261
+ if (typeof optionsOrLogLevel === "number") {
262
+ optionsOrLogLevel = {
263
+ logLevel: optionsOrLogLevel
323
264
  };
324
265
  }
325
- var self2 = this;
326
- var setLogger = function(logger, optionsOrLogLevel) {
327
- var _a, _b, _c;
328
- if (optionsOrLogLevel === void 0) {
329
- optionsOrLogLevel = { logLevel: DiagLogLevel.INFO };
330
- }
331
- if (logger === self2) {
332
- var err = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");
333
- self2.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);
334
- return false;
335
- }
336
- if (typeof optionsOrLogLevel === "number") {
337
- optionsOrLogLevel = {
338
- logLevel: optionsOrLogLevel
339
- };
340
- }
341
- var oldLogger = getGlobal("diag");
342
- var newLogger = createLogLevelDiagLogger((_b = optionsOrLogLevel.logLevel) !== null && _b !== void 0 ? _b : DiagLogLevel.INFO, logger);
343
- if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {
344
- var stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : "<failed to generate stacktrace>";
345
- oldLogger.warn("Current logger will be overwritten from " + stack);
346
- newLogger.warn("Current logger will overwrite one already registered from " + stack);
347
- }
348
- return registerGlobal("diag", newLogger, self2, true);
349
- };
350
- self2.setLogger = setLogger;
351
- self2.disable = function() {
352
- unregisterGlobal(API_NAME, self2);
353
- };
354
- self2.createComponentLogger = function(options) {
355
- return new DiagComponentLogger(options);
356
- };
357
- self2.verbose = _logProxy("verbose");
358
- self2.debug = _logProxy("debug");
359
- self2.info = _logProxy("info");
360
- self2.warn = _logProxy("warn");
361
- self2.error = _logProxy("error");
362
- }
363
- DiagAPI2.instance = function() {
364
- if (!this._instance) {
365
- this._instance = new DiagAPI2();
266
+ const oldLogger = getGlobal("diag");
267
+ const newLogger = createLogLevelDiagLogger((_b = optionsOrLogLevel.logLevel) !== null && _b !== void 0 ? _b : DiagLogLevel.INFO, logger);
268
+ if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {
269
+ const stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : "<failed to generate stacktrace>";
270
+ oldLogger.warn(`Current logger will be overwritten from ${stack}`);
271
+ newLogger.warn(`Current logger will overwrite one already registered from ${stack}`);
366
272
  }
367
- return this._instance;
273
+ return registerGlobal("diag", newLogger, self2, true);
368
274
  };
369
- return DiagAPI2;
370
- })()
371
- );
275
+ self2.setLogger = setLogger;
276
+ self2.disable = () => {
277
+ unregisterGlobal(API_NAME, self2);
278
+ };
279
+ self2.createComponentLogger = (options) => {
280
+ return new DiagComponentLogger(options);
281
+ };
282
+ self2.verbose = _logProxy("verbose");
283
+ self2.debug = _logProxy("debug");
284
+ self2.info = _logProxy("info");
285
+ self2.warn = _logProxy("warn");
286
+ self2.error = _logProxy("error");
287
+ }
288
+ };
372
289
 
373
290
  // ../../../node_modules/@opentelemetry/api/build/esm/context/context.js
374
291
  function createContextKey(description) {
375
292
  return Symbol.for(description);
376
293
  }
377
- var BaseContext = (
378
- /** @class */
379
- /* @__PURE__ */ (function() {
380
- function BaseContext2(parentContext) {
381
- var self2 = this;
382
- self2._currentContext = parentContext ? new Map(parentContext) : /* @__PURE__ */ new Map();
383
- self2.getValue = function(key) {
384
- return self2._currentContext.get(key);
385
- };
386
- self2.setValue = function(key, value) {
387
- var context2 = new BaseContext2(self2._currentContext);
388
- context2._currentContext.set(key, value);
389
- return context2;
390
- };
391
- self2.deleteValue = function(key) {
392
- var context2 = new BaseContext2(self2._currentContext);
393
- context2._currentContext.delete(key);
394
- return context2;
395
- };
396
- }
397
- return BaseContext2;
398
- })()
399
- );
294
+ var BaseContext = class _BaseContext {
295
+ /**
296
+ * Construct a new context which inherits values from an optional parent context.
297
+ *
298
+ * @param parentContext a context from which to inherit values
299
+ */
300
+ constructor(parentContext) {
301
+ const self2 = this;
302
+ self2._currentContext = parentContext ? new Map(parentContext) : /* @__PURE__ */ new Map();
303
+ self2.getValue = (key) => self2._currentContext.get(key);
304
+ self2.setValue = (key, value) => {
305
+ const context2 = new _BaseContext(self2._currentContext);
306
+ context2._currentContext.set(key, value);
307
+ return context2;
308
+ };
309
+ self2.deleteValue = (key) => {
310
+ const context2 = new _BaseContext(self2._currentContext);
311
+ context2._currentContext.delete(key);
312
+ return context2;
313
+ };
314
+ }
315
+ };
400
316
  var ROOT_CONTEXT = new BaseContext();
401
317
 
402
318
  // ../../../node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js
403
- var __read3 = function(o, n) {
404
- var m = typeof Symbol === "function" && o[Symbol.iterator];
405
- if (!m) return o;
406
- var i = m.call(o), r, ar = [], e;
407
- try {
408
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
409
- } catch (error) {
410
- e = { error };
411
- } finally {
412
- try {
413
- if (r && !r.done && (m = i["return"])) m.call(i);
414
- } finally {
415
- if (e) throw e.error;
416
- }
319
+ var NoopContextManager = class {
320
+ active() {
321
+ return ROOT_CONTEXT;
417
322
  }
418
- return ar;
419
- };
420
- var __spreadArray3 = function(to, from, pack) {
421
- if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
422
- if (ar || !(i in from)) {
423
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
424
- ar[i] = from[i];
425
- }
323
+ with(_context, fn, thisArg, ...args) {
324
+ return fn.call(thisArg, ...args);
325
+ }
326
+ bind(_context, target) {
327
+ return target;
328
+ }
329
+ enable() {
330
+ return this;
331
+ }
332
+ disable() {
333
+ return this;
426
334
  }
427
- return to.concat(ar || Array.prototype.slice.call(from));
428
335
  };
429
- var NoopContextManager = (
430
- /** @class */
431
- (function() {
432
- function NoopContextManager2() {
433
- }
434
- NoopContextManager2.prototype.active = function() {
435
- return ROOT_CONTEXT;
436
- };
437
- NoopContextManager2.prototype.with = function(_context, fn, thisArg) {
438
- var args = [];
439
- for (var _i = 3; _i < arguments.length; _i++) {
440
- args[_i - 3] = arguments[_i];
441
- }
442
- return fn.call.apply(fn, __spreadArray3([thisArg], __read3(args), false));
443
- };
444
- NoopContextManager2.prototype.bind = function(_context, target) {
445
- return target;
446
- };
447
- NoopContextManager2.prototype.enable = function() {
448
- return this;
449
- };
450
- NoopContextManager2.prototype.disable = function() {
451
- return this;
452
- };
453
- return NoopContextManager2;
454
- })()
455
- );
456
336
 
457
337
  // ../../../node_modules/@opentelemetry/api/build/esm/api/context.js
458
- var __read4 = function(o, n) {
459
- var m = typeof Symbol === "function" && o[Symbol.iterator];
460
- if (!m) return o;
461
- var i = m.call(o), r, ar = [], e;
462
- try {
463
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
464
- } catch (error) {
465
- e = { error };
466
- } finally {
467
- try {
468
- if (r && !r.done && (m = i["return"])) m.call(i);
469
- } finally {
470
- if (e) throw e.error;
471
- }
338
+ var API_NAME2 = "context";
339
+ var NOOP_CONTEXT_MANAGER = new NoopContextManager();
340
+ var ContextAPI = class _ContextAPI {
341
+ /** Empty private constructor prevents end users from constructing a new instance of the API */
342
+ constructor() {
472
343
  }
473
- return ar;
474
- };
475
- var __spreadArray4 = function(to, from, pack) {
476
- if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
477
- if (ar || !(i in from)) {
478
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
479
- ar[i] = from[i];
344
+ /** Get the singleton instance of the Context API */
345
+ static getInstance() {
346
+ if (!this._instance) {
347
+ this._instance = new _ContextAPI();
480
348
  }
349
+ return this._instance;
350
+ }
351
+ /**
352
+ * Set the current context manager.
353
+ *
354
+ * @returns true if the context manager was successfully registered, else false
355
+ */
356
+ setGlobalContextManager(contextManager) {
357
+ return registerGlobal(API_NAME2, contextManager, DiagAPI.instance());
358
+ }
359
+ /**
360
+ * Get the currently active context
361
+ */
362
+ active() {
363
+ return this._getContextManager().active();
364
+ }
365
+ /**
366
+ * Execute a function with an active context
367
+ *
368
+ * @param context context to be active during function execution
369
+ * @param fn function to execute in a context
370
+ * @param thisArg optional receiver to be used for calling fn
371
+ * @param args optional arguments forwarded to fn
372
+ */
373
+ with(context2, fn, thisArg, ...args) {
374
+ return this._getContextManager().with(context2, fn, thisArg, ...args);
375
+ }
376
+ /**
377
+ * Bind a context to a target function or event emitter
378
+ *
379
+ * @param context context to bind to the event emitter or function. Defaults to the currently active context
380
+ * @param target function or event emitter to bind
381
+ */
382
+ bind(context2, target) {
383
+ return this._getContextManager().bind(context2, target);
384
+ }
385
+ _getContextManager() {
386
+ return getGlobal(API_NAME2) || NOOP_CONTEXT_MANAGER;
387
+ }
388
+ /** Disable and remove the global context manager */
389
+ disable() {
390
+ this._getContextManager().disable();
391
+ unregisterGlobal(API_NAME2, DiagAPI.instance());
481
392
  }
482
- return to.concat(ar || Array.prototype.slice.call(from));
483
393
  };
484
- var API_NAME2 = "context";
485
- var NOOP_CONTEXT_MANAGER = new NoopContextManager();
486
- var ContextAPI = (
487
- /** @class */
488
- (function() {
489
- function ContextAPI2() {
490
- }
491
- ContextAPI2.getInstance = function() {
492
- if (!this._instance) {
493
- this._instance = new ContextAPI2();
494
- }
495
- return this._instance;
496
- };
497
- ContextAPI2.prototype.setGlobalContextManager = function(contextManager) {
498
- return registerGlobal(API_NAME2, contextManager, DiagAPI.instance());
499
- };
500
- ContextAPI2.prototype.active = function() {
501
- return this._getContextManager().active();
502
- };
503
- ContextAPI2.prototype.with = function(context2, fn, thisArg) {
504
- var _a;
505
- var args = [];
506
- for (var _i = 3; _i < arguments.length; _i++) {
507
- args[_i - 3] = arguments[_i];
508
- }
509
- return (_a = this._getContextManager()).with.apply(_a, __spreadArray4([context2, fn, thisArg], __read4(args), false));
510
- };
511
- ContextAPI2.prototype.bind = function(context2, target) {
512
- return this._getContextManager().bind(context2, target);
513
- };
514
- ContextAPI2.prototype._getContextManager = function() {
515
- return getGlobal(API_NAME2) || NOOP_CONTEXT_MANAGER;
516
- };
517
- ContextAPI2.prototype.disable = function() {
518
- this._getContextManager().disable();
519
- unregisterGlobal(API_NAME2, DiagAPI.instance());
520
- };
521
- return ContextAPI2;
522
- })()
523
- );
524
394
 
525
395
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js
526
396
  var TraceFlags;
@@ -539,49 +409,51 @@ var INVALID_SPAN_CONTEXT = {
539
409
  };
540
410
 
541
411
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js
542
- var NonRecordingSpan = (
543
- /** @class */
544
- (function() {
545
- function NonRecordingSpan2(_spanContext) {
546
- if (_spanContext === void 0) {
547
- _spanContext = INVALID_SPAN_CONTEXT;
548
- }
549
- this._spanContext = _spanContext;
550
- }
551
- NonRecordingSpan2.prototype.spanContext = function() {
552
- return this._spanContext;
553
- };
554
- NonRecordingSpan2.prototype.setAttribute = function(_key, _value) {
555
- return this;
556
- };
557
- NonRecordingSpan2.prototype.setAttributes = function(_attributes) {
558
- return this;
559
- };
560
- NonRecordingSpan2.prototype.addEvent = function(_name, _attributes) {
561
- return this;
562
- };
563
- NonRecordingSpan2.prototype.addLink = function(_link) {
564
- return this;
565
- };
566
- NonRecordingSpan2.prototype.addLinks = function(_links) {
567
- return this;
568
- };
569
- NonRecordingSpan2.prototype.setStatus = function(_status) {
570
- return this;
571
- };
572
- NonRecordingSpan2.prototype.updateName = function(_name) {
573
- return this;
574
- };
575
- NonRecordingSpan2.prototype.end = function(_endTime) {
576
- };
577
- NonRecordingSpan2.prototype.isRecording = function() {
578
- return false;
579
- };
580
- NonRecordingSpan2.prototype.recordException = function(_exception, _time) {
581
- };
582
- return NonRecordingSpan2;
583
- })()
584
- );
412
+ var NonRecordingSpan = class {
413
+ constructor(spanContext = INVALID_SPAN_CONTEXT) {
414
+ this._spanContext = spanContext;
415
+ }
416
+ // Returns a SpanContext.
417
+ spanContext() {
418
+ return this._spanContext;
419
+ }
420
+ // By default does nothing
421
+ setAttribute(_key, _value) {
422
+ return this;
423
+ }
424
+ // By default does nothing
425
+ setAttributes(_attributes) {
426
+ return this;
427
+ }
428
+ // By default does nothing
429
+ addEvent(_name, _attributes) {
430
+ return this;
431
+ }
432
+ addLink(_link) {
433
+ return this;
434
+ }
435
+ addLinks(_links) {
436
+ return this;
437
+ }
438
+ // By default does nothing
439
+ setStatus(_status) {
440
+ return this;
441
+ }
442
+ // By default does nothing
443
+ updateName(_name) {
444
+ return this;
445
+ }
446
+ // By default does nothing
447
+ end(_endTime) {
448
+ }
449
+ // isRecording always returns false for NonRecordingSpan.
450
+ isRecording() {
451
+ return false;
452
+ }
453
+ // By default does nothing
454
+ recordException(_exception, _time) {
455
+ }
456
+ };
585
457
 
586
458
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/context-utils.js
587
459
  var SPAN_KEY = createContextKey("OpenTelemetry Context Key SPAN");
@@ -606,13 +478,125 @@ function getSpanContext(context2) {
606
478
  }
607
479
 
608
480
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js
609
- var VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;
610
- var VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;
481
+ var isHex = new Uint8Array([
482
+ 0,
483
+ 0,
484
+ 0,
485
+ 0,
486
+ 0,
487
+ 0,
488
+ 0,
489
+ 0,
490
+ 0,
491
+ 0,
492
+ 0,
493
+ 0,
494
+ 0,
495
+ 0,
496
+ 0,
497
+ 0,
498
+ 0,
499
+ 0,
500
+ 0,
501
+ 0,
502
+ 0,
503
+ 0,
504
+ 0,
505
+ 0,
506
+ 0,
507
+ 0,
508
+ 0,
509
+ 0,
510
+ 0,
511
+ 0,
512
+ 0,
513
+ 0,
514
+ 0,
515
+ 0,
516
+ 0,
517
+ 0,
518
+ 0,
519
+ 0,
520
+ 0,
521
+ 0,
522
+ 0,
523
+ 0,
524
+ 0,
525
+ 0,
526
+ 0,
527
+ 0,
528
+ 0,
529
+ 0,
530
+ 1,
531
+ 1,
532
+ 1,
533
+ 1,
534
+ 1,
535
+ 1,
536
+ 1,
537
+ 1,
538
+ 1,
539
+ 1,
540
+ 0,
541
+ 0,
542
+ 0,
543
+ 0,
544
+ 0,
545
+ 0,
546
+ 0,
547
+ 1,
548
+ 1,
549
+ 1,
550
+ 1,
551
+ 1,
552
+ 1,
553
+ 0,
554
+ 0,
555
+ 0,
556
+ 0,
557
+ 0,
558
+ 0,
559
+ 0,
560
+ 0,
561
+ 0,
562
+ 0,
563
+ 0,
564
+ 0,
565
+ 0,
566
+ 0,
567
+ 0,
568
+ 0,
569
+ 0,
570
+ 0,
571
+ 0,
572
+ 0,
573
+ 0,
574
+ 0,
575
+ 0,
576
+ 0,
577
+ 0,
578
+ 0,
579
+ 1,
580
+ 1,
581
+ 1,
582
+ 1,
583
+ 1,
584
+ 1
585
+ ]);
586
+ function isValidHex(id, length) {
587
+ if (typeof id !== "string" || id.length !== length)
588
+ return false;
589
+ let r = 0;
590
+ for (let i = 0; i < id.length; i += 4) {
591
+ r += (isHex[id.charCodeAt(i)] | 0) + (isHex[id.charCodeAt(i + 1)] | 0) + (isHex[id.charCodeAt(i + 2)] | 0) + (isHex[id.charCodeAt(i + 3)] | 0);
592
+ }
593
+ return r === length;
594
+ }
611
595
  function isValidTraceId(traceId) {
612
- return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;
596
+ return isValidHex(traceId, 32) && traceId !== INVALID_TRACEID;
613
597
  }
614
598
  function isValidSpanId(spanId) {
615
- return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;
599
+ return isValidHex(spanId, 16) && spanId !== INVALID_SPANID;
616
600
  }
617
601
  function isSpanContextValid(spanContext) {
618
602
  return isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId);
@@ -623,178 +607,174 @@ function wrapSpanContext(spanContext) {
623
607
 
624
608
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js
625
609
  var contextApi = ContextAPI.getInstance();
626
- var NoopTracer = (
627
- /** @class */
628
- (function() {
629
- function NoopTracer2() {
610
+ var NoopTracer = class {
611
+ // startSpan starts a noop span.
612
+ startSpan(name, options, context2 = contextApi.active()) {
613
+ const root = Boolean(options === null || options === void 0 ? void 0 : options.root);
614
+ if (root) {
615
+ return new NonRecordingSpan();
630
616
  }
631
- NoopTracer2.prototype.startSpan = function(name, options, context2) {
632
- if (context2 === void 0) {
633
- context2 = contextApi.active();
634
- }
635
- var root = Boolean(options === null || options === void 0 ? void 0 : options.root);
636
- if (root) {
637
- return new NonRecordingSpan();
638
- }
639
- var parentFromContext = context2 && getSpanContext(context2);
640
- if (isSpanContext(parentFromContext) && isSpanContextValid(parentFromContext)) {
641
- return new NonRecordingSpan(parentFromContext);
642
- } else {
643
- return new NonRecordingSpan();
644
- }
645
- };
646
- NoopTracer2.prototype.startActiveSpan = function(name, arg2, arg3, arg4) {
647
- var opts;
648
- var ctx;
649
- var fn;
650
- if (arguments.length < 2) {
651
- return;
652
- } else if (arguments.length === 2) {
653
- fn = arg2;
654
- } else if (arguments.length === 3) {
655
- opts = arg2;
656
- fn = arg3;
657
- } else {
658
- opts = arg2;
659
- ctx = arg3;
660
- fn = arg4;
661
- }
662
- var parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active();
663
- var span = this.startSpan(name, opts, parentContext);
664
- var contextWithSpanSet = setSpan(parentContext, span);
665
- return contextApi.with(contextWithSpanSet, fn, void 0, span);
666
- };
667
- return NoopTracer2;
668
- })()
669
- );
617
+ const parentFromContext = context2 && getSpanContext(context2);
618
+ if (isSpanContext(parentFromContext) && isSpanContextValid(parentFromContext)) {
619
+ return new NonRecordingSpan(parentFromContext);
620
+ } else {
621
+ return new NonRecordingSpan();
622
+ }
623
+ }
624
+ startActiveSpan(name, arg2, arg3, arg4) {
625
+ let opts;
626
+ let ctx;
627
+ let fn;
628
+ if (arguments.length < 2) {
629
+ return;
630
+ } else if (arguments.length === 2) {
631
+ fn = arg2;
632
+ } else if (arguments.length === 3) {
633
+ opts = arg2;
634
+ fn = arg3;
635
+ } else {
636
+ opts = arg2;
637
+ ctx = arg3;
638
+ fn = arg4;
639
+ }
640
+ const parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active();
641
+ const span = this.startSpan(name, opts, parentContext);
642
+ const contextWithSpanSet = setSpan(parentContext, span);
643
+ return contextApi.with(contextWithSpanSet, fn, void 0, span);
644
+ }
645
+ };
670
646
  function isSpanContext(spanContext) {
671
- return typeof spanContext === "object" && typeof spanContext["spanId"] === "string" && typeof spanContext["traceId"] === "string" && typeof spanContext["traceFlags"] === "number";
647
+ return spanContext !== null && typeof spanContext === "object" && "spanId" in spanContext && typeof spanContext["spanId"] === "string" && "traceId" in spanContext && typeof spanContext["traceId"] === "string" && "traceFlags" in spanContext && typeof spanContext["traceFlags"] === "number";
672
648
  }
673
649
 
674
650
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js
675
651
  var NOOP_TRACER = new NoopTracer();
676
- var ProxyTracer = (
677
- /** @class */
678
- (function() {
679
- function ProxyTracer2(_provider, name, version, options) {
680
- this._provider = _provider;
681
- this.name = name;
682
- this.version = version;
683
- this.options = options;
684
- }
685
- ProxyTracer2.prototype.startSpan = function(name, options, context2) {
686
- return this._getTracer().startSpan(name, options, context2);
687
- };
688
- ProxyTracer2.prototype.startActiveSpan = function(_name, _options, _context, _fn) {
689
- var tracer = this._getTracer();
690
- return Reflect.apply(tracer.startActiveSpan, tracer, arguments);
691
- };
692
- ProxyTracer2.prototype._getTracer = function() {
693
- if (this._delegate) {
694
- return this._delegate;
695
- }
696
- var tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);
697
- if (!tracer) {
698
- return NOOP_TRACER;
699
- }
700
- this._delegate = tracer;
652
+ var ProxyTracer = class {
653
+ constructor(provider, name, version, options) {
654
+ this._provider = provider;
655
+ this.name = name;
656
+ this.version = version;
657
+ this.options = options;
658
+ }
659
+ startSpan(name, options, context2) {
660
+ return this._getTracer().startSpan(name, options, context2);
661
+ }
662
+ startActiveSpan(_name, _options, _context, _fn) {
663
+ const tracer = this._getTracer();
664
+ return Reflect.apply(tracer.startActiveSpan, tracer, arguments);
665
+ }
666
+ /**
667
+ * Try to get a tracer from the proxy tracer provider.
668
+ * If the proxy tracer provider has no delegate, return a noop tracer.
669
+ */
670
+ _getTracer() {
671
+ if (this._delegate) {
701
672
  return this._delegate;
702
- };
703
- return ProxyTracer2;
704
- })()
705
- );
673
+ }
674
+ const tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);
675
+ if (!tracer) {
676
+ return NOOP_TRACER;
677
+ }
678
+ this._delegate = tracer;
679
+ return this._delegate;
680
+ }
681
+ };
706
682
 
707
683
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js
708
- var NoopTracerProvider = (
709
- /** @class */
710
- (function() {
711
- function NoopTracerProvider2() {
712
- }
713
- NoopTracerProvider2.prototype.getTracer = function(_name, _version, _options) {
714
- return new NoopTracer();
715
- };
716
- return NoopTracerProvider2;
717
- })()
718
- );
684
+ var NoopTracerProvider = class {
685
+ getTracer(_name, _version, _options) {
686
+ return new NoopTracer();
687
+ }
688
+ };
719
689
 
720
690
  // ../../../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js
721
691
  var NOOP_TRACER_PROVIDER = new NoopTracerProvider();
722
- var ProxyTracerProvider = (
723
- /** @class */
724
- (function() {
725
- function ProxyTracerProvider2() {
726
- }
727
- ProxyTracerProvider2.prototype.getTracer = function(name, version, options) {
728
- var _a;
729
- return (_a = this.getDelegateTracer(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyTracer(this, name, version, options);
730
- };
731
- ProxyTracerProvider2.prototype.getDelegate = function() {
732
- var _a;
733
- return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER;
734
- };
735
- ProxyTracerProvider2.prototype.setDelegate = function(delegate) {
736
- this._delegate = delegate;
737
- };
738
- ProxyTracerProvider2.prototype.getDelegateTracer = function(name, version, options) {
739
- var _a;
740
- return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version, options);
741
- };
742
- return ProxyTracerProvider2;
743
- })()
744
- );
692
+ var ProxyTracerProvider = class {
693
+ /**
694
+ * Get a {@link ProxyTracer}
695
+ */
696
+ getTracer(name, version, options) {
697
+ var _a;
698
+ return (_a = this.getDelegateTracer(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyTracer(this, name, version, options);
699
+ }
700
+ getDelegate() {
701
+ var _a;
702
+ return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER;
703
+ }
704
+ /**
705
+ * Set the delegate tracer provider
706
+ */
707
+ setDelegate(delegate) {
708
+ this._delegate = delegate;
709
+ }
710
+ getDelegateTracer(name, version, options) {
711
+ var _a;
712
+ return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version, options);
713
+ }
714
+ };
745
715
 
746
716
  // ../../../node_modules/@opentelemetry/api/build/esm/context-api.js
747
717
  var context = ContextAPI.getInstance();
748
718
 
749
719
  // ../../../node_modules/@opentelemetry/api/build/esm/api/trace.js
750
720
  var API_NAME3 = "trace";
751
- var TraceAPI = (
752
- /** @class */
753
- (function() {
754
- function TraceAPI2() {
755
- this._proxyTracerProvider = new ProxyTracerProvider();
756
- this.wrapSpanContext = wrapSpanContext;
757
- this.isSpanContextValid = isSpanContextValid;
758
- this.deleteSpan = deleteSpan;
759
- this.getSpan = getSpan;
760
- this.getActiveSpan = getActiveSpan;
761
- this.getSpanContext = getSpanContext;
762
- this.setSpan = setSpan;
763
- this.setSpanContext = setSpanContext;
721
+ var TraceAPI = class _TraceAPI {
722
+ /** Empty private constructor prevents end users from constructing a new instance of the API */
723
+ constructor() {
724
+ this._proxyTracerProvider = new ProxyTracerProvider();
725
+ this.wrapSpanContext = wrapSpanContext;
726
+ this.isSpanContextValid = isSpanContextValid;
727
+ this.deleteSpan = deleteSpan;
728
+ this.getSpan = getSpan;
729
+ this.getActiveSpan = getActiveSpan;
730
+ this.getSpanContext = getSpanContext;
731
+ this.setSpan = setSpan;
732
+ this.setSpanContext = setSpanContext;
733
+ }
734
+ /** Get the singleton instance of the Trace API */
735
+ static getInstance() {
736
+ if (!this._instance) {
737
+ this._instance = new _TraceAPI();
764
738
  }
765
- TraceAPI2.getInstance = function() {
766
- if (!this._instance) {
767
- this._instance = new TraceAPI2();
768
- }
769
- return this._instance;
770
- };
771
- TraceAPI2.prototype.setGlobalTracerProvider = function(provider2) {
772
- var success = registerGlobal(API_NAME3, this._proxyTracerProvider, DiagAPI.instance());
773
- if (success) {
774
- this._proxyTracerProvider.setDelegate(provider2);
775
- }
776
- return success;
777
- };
778
- TraceAPI2.prototype.getTracerProvider = function() {
779
- return getGlobal(API_NAME3) || this._proxyTracerProvider;
780
- };
781
- TraceAPI2.prototype.getTracer = function(name, version) {
782
- return this.getTracerProvider().getTracer(name, version);
783
- };
784
- TraceAPI2.prototype.disable = function() {
785
- unregisterGlobal(API_NAME3, DiagAPI.instance());
786
- this._proxyTracerProvider = new ProxyTracerProvider();
787
- };
788
- return TraceAPI2;
789
- })()
790
- );
739
+ return this._instance;
740
+ }
741
+ /**
742
+ * Set the current global tracer.
743
+ *
744
+ * @returns true if the tracer provider was successfully registered, else false
745
+ */
746
+ setGlobalTracerProvider(provider) {
747
+ const success = registerGlobal(API_NAME3, this._proxyTracerProvider, DiagAPI.instance());
748
+ if (success) {
749
+ this._proxyTracerProvider.setDelegate(provider);
750
+ }
751
+ return success;
752
+ }
753
+ /**
754
+ * Returns the global tracer provider.
755
+ */
756
+ getTracerProvider() {
757
+ return getGlobal(API_NAME3) || this._proxyTracerProvider;
758
+ }
759
+ /**
760
+ * Returns a tracer from the global tracer provider.
761
+ */
762
+ getTracer(name, version) {
763
+ return this.getTracerProvider().getTracer(name, version);
764
+ }
765
+ /** Remove the global tracer provider */
766
+ disable() {
767
+ unregisterGlobal(API_NAME3, DiagAPI.instance());
768
+ this._proxyTracerProvider = new ProxyTracerProvider();
769
+ }
770
+ };
791
771
 
792
772
  // ../../../node_modules/@opentelemetry/api/build/esm/trace-api.js
793
773
  var trace = TraceAPI.getInstance();
794
774
 
795
775
  // package.json
796
776
  var package_default = {
797
- version: "1.0.2-alpha.0"};
777
+ version: "1.0.2-alpha.11"};
798
778
 
799
779
  // src/const.ts
800
780
  var defaultResourceAttr = {
@@ -1078,7 +1058,11 @@ var PvInstrumentation = class {
1078
1058
  referrer: document.referrer
1079
1059
  });
1080
1060
  };
1081
- window.addEventListener("load", reportPv);
1061
+ if (document.readyState === "complete") {
1062
+ reportPv();
1063
+ } else {
1064
+ window.addEventListener("load", reportPv);
1065
+ }
1082
1066
  window.addEventListener("popstate", reportPv);
1083
1067
  this.patchHistory("pushState", reportPv);
1084
1068
  this.patchHistory("replaceState", reportPv);
@@ -1274,14 +1258,24 @@ var CustomWebTraceExporter = class {
1274
1258
  }
1275
1259
  };
1276
1260
 
1261
+ // src/utils/stackTrace.ts
1262
+ var mapStacktrace = (stacktrace) => stacktrace.map(
1263
+ (frame) => {
1264
+ var _a, _b;
1265
+ return {
1266
+ fileName: ((_b = (_a = frame.fileName) == null ? void 0 : _a.split("/")) == null ? void 0 : _b.pop()) || "",
1267
+ line: frame.lineNumber || 0,
1268
+ column: frame.columnNumber || 0
1269
+ };
1270
+ }
1271
+ );
1272
+
1277
1273
  // src/core/sdk.ts
1278
- var provider = new sdkTraceWeb.WebTracerProvider();
1279
- provider.register({
1280
- contextManager: new contextZone.ZoneContextManager()
1281
- });
1274
+ var MAX_STACK_FRAMES = 50;
1282
1275
  var _WebObservableSdk = class _WebObservableSdk {
1283
1276
  constructor() {
1284
1277
  this.isStarted = false;
1278
+ this.counterCache = /* @__PURE__ */ new Map();
1285
1279
  }
1286
1280
  static get instance() {
1287
1281
  if (!this._instance) {
@@ -1365,7 +1359,9 @@ var _WebObservableSdk = class _WebObservableSdk {
1365
1359
  })
1366
1360
  ]
1367
1361
  });
1368
- this.tracerProvider.register();
1362
+ this.tracerProvider.register({
1363
+ contextManager: new contextZone.ZoneContextManager()
1364
+ });
1369
1365
  this.tracer = this.tracerProvider.getTracer("web-tracer");
1370
1366
  }
1371
1367
  initAutoPv() {
@@ -1462,12 +1458,25 @@ var _WebObservableSdk = class _WebObservableSdk {
1462
1458
  }
1463
1459
  // --- 公开 API: 日志(Log) ---
1464
1460
  log(level, message, attributes = {}, span) {
1461
+ let traceInfo = [];
1462
+ if (level === "ERROR") {
1463
+ const stacktrace = StackTrace__default.default.getSync();
1464
+ if (stacktrace && stacktrace.length > 0) {
1465
+ traceInfo = mapStacktrace(stacktrace);
1466
+ if (traceInfo.length > MAX_STACK_FRAMES) {
1467
+ traceInfo = traceInfo.slice(0, MAX_STACK_FRAMES);
1468
+ }
1469
+ }
1470
+ }
1465
1471
  try {
1466
1472
  const ctx = span ? trace.setSpan(context.active(), span) : context.active();
1473
+ if (!this.logger) return;
1467
1474
  this.logger.emit({
1468
1475
  severityText: level,
1469
1476
  body: message,
1470
- attributes,
1477
+ attributes: __spreadProps(__spreadValues({}, attributes), {
1478
+ stack: JSON.stringify(traceInfo)
1479
+ }),
1471
1480
  timestamp: _WebObservableSdk.getCalibratedDate(),
1472
1481
  context: ctx
1473
1482
  });
@@ -1477,7 +1486,12 @@ var _WebObservableSdk = class _WebObservableSdk {
1477
1486
  }
1478
1487
  // --- 公开 API: 计数器 (Metric) ---
1479
1488
  addCount(name, value = 1, attributes = {}) {
1480
- const counter = this.meter.createCounter(name);
1489
+ if (!this.meter) return;
1490
+ let counter = this.counterCache.get(name);
1491
+ if (!counter) {
1492
+ counter = this.meter.createCounter(name);
1493
+ this.counterCache.set(name, counter);
1494
+ }
1481
1495
  counter.add(value, attributes);
1482
1496
  }
1483
1497
  startSpan(name, options, spanContext) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/observable-web",
3
- "version": "1.0.2-alpha.1",
3
+ "version": "1.0.2-alpha.11",
4
4
  "description": "Observable SDK For Web",
5
5
  "main": "./dist/index.js",
6
6
  "files": [
@@ -41,4 +41,4 @@
41
41
  "react": ">=16.14.0",
42
42
  "react-dom": ">=16.14.0"
43
43
  }
44
- }
44
+ }