@remote-logger/sdk 0.1.1 → 0.1.4

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.js CHANGED
@@ -3,6 +3,9 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
6
9
  var __export = (target, all) => {
7
10
  for (var name in all)
8
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -16,6 +19,9 @@ var __copyProps = (to, from, except, desc) => {
16
19
  return to;
17
20
  };
18
21
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
24
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
19
25
 
20
26
  // src/index.ts
21
27
  var index_exports = {};
@@ -25,6 +31,314 @@ __export(index_exports, {
25
31
  default: () => index_default
26
32
  });
27
33
  module.exports = __toCommonJS(index_exports);
34
+
35
+ // ../node_modules/non-error/index.js
36
+ var isNonErrorSymbol = /* @__PURE__ */ Symbol("isNonError");
37
+ function defineProperty(object, key, value) {
38
+ Object.defineProperty(object, key, {
39
+ value,
40
+ writable: false,
41
+ enumerable: false,
42
+ configurable: false
43
+ });
44
+ }
45
+ function stringify(value) {
46
+ if (value === void 0) {
47
+ return "undefined";
48
+ }
49
+ if (value === null) {
50
+ return "null";
51
+ }
52
+ if (typeof value === "string") {
53
+ return value;
54
+ }
55
+ if (typeof value === "number" || typeof value === "boolean") {
56
+ return String(value);
57
+ }
58
+ if (typeof value === "bigint") {
59
+ return `${value}n`;
60
+ }
61
+ if (typeof value === "symbol") {
62
+ return value.toString();
63
+ }
64
+ if (typeof value === "function") {
65
+ return `[Function${value.name ? ` ${value.name}` : " (anonymous)"}]`;
66
+ }
67
+ if (value instanceof Error) {
68
+ try {
69
+ return String(value);
70
+ } catch {
71
+ return "<Unserializable error>";
72
+ }
73
+ }
74
+ try {
75
+ return JSON.stringify(value);
76
+ } catch {
77
+ try {
78
+ return String(value);
79
+ } catch {
80
+ return "<Unserializable value>";
81
+ }
82
+ }
83
+ }
84
+ var _NonError_static, handleCallback_fn;
85
+ var _NonError = class _NonError extends Error {
86
+ constructor(value, { superclass: Superclass = Error } = {}) {
87
+ if (_NonError.isNonError(value)) {
88
+ return value;
89
+ }
90
+ if (value instanceof Error) {
91
+ throw new TypeError("Do not pass Error instances to NonError. Throw the error directly instead.");
92
+ }
93
+ super(`Non-error value: ${stringify(value)}`);
94
+ if (Superclass !== Error) {
95
+ Object.setPrototypeOf(this, Superclass.prototype);
96
+ }
97
+ defineProperty(this, "name", "NonError");
98
+ defineProperty(this, isNonErrorSymbol, true);
99
+ defineProperty(this, "isNonError", true);
100
+ defineProperty(this, "value", value);
101
+ }
102
+ static isNonError(value) {
103
+ return value?.[isNonErrorSymbol] === true;
104
+ }
105
+ static try(callback) {
106
+ var _a;
107
+ return __privateMethod(_a = _NonError, _NonError_static, handleCallback_fn).call(_a, callback, []);
108
+ }
109
+ static wrap(callback) {
110
+ return (...arguments_) => {
111
+ var _a;
112
+ return __privateMethod(_a = _NonError, _NonError_static, handleCallback_fn).call(_a, callback, arguments_);
113
+ };
114
+ }
115
+ // This makes instanceof work even when using the `superclass` option
116
+ static [Symbol.hasInstance](instance) {
117
+ return _NonError.isNonError(instance);
118
+ }
119
+ };
120
+ _NonError_static = new WeakSet();
121
+ handleCallback_fn = function(callback, arguments_) {
122
+ try {
123
+ const result = callback(...arguments_);
124
+ if (result && typeof result.then === "function") {
125
+ return (async () => {
126
+ try {
127
+ return await result;
128
+ } catch (error) {
129
+ if (error instanceof Error) {
130
+ throw error;
131
+ }
132
+ throw new _NonError(error);
133
+ }
134
+ })();
135
+ }
136
+ return result;
137
+ } catch (error) {
138
+ if (error instanceof Error) {
139
+ throw error;
140
+ }
141
+ throw new _NonError(error);
142
+ }
143
+ };
144
+ __privateAdd(_NonError, _NonError_static);
145
+ var NonError = _NonError;
146
+
147
+ // ../node_modules/serialize-error/error-constructors.js
148
+ var list = [
149
+ // Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects
150
+ Error,
151
+ EvalError,
152
+ RangeError,
153
+ ReferenceError,
154
+ SyntaxError,
155
+ TypeError,
156
+ URIError,
157
+ AggregateError,
158
+ // Built-in errors
159
+ globalThis.DOMException,
160
+ // Node-specific errors
161
+ // https://nodejs.org/api/errors.html
162
+ globalThis.AssertionError,
163
+ globalThis.SystemError
164
+ ].filter(Boolean).map((constructor) => [constructor.name, constructor]);
165
+ var errorConstructors = new Map(list);
166
+ var errorFactories = /* @__PURE__ */ new Map();
167
+
168
+ // ../node_modules/serialize-error/index.js
169
+ var errorProperties = [
170
+ {
171
+ property: "name",
172
+ enumerable: false
173
+ },
174
+ {
175
+ property: "message",
176
+ enumerable: false
177
+ },
178
+ {
179
+ property: "stack",
180
+ enumerable: false
181
+ },
182
+ {
183
+ property: "code",
184
+ enumerable: true
185
+ },
186
+ {
187
+ property: "cause",
188
+ enumerable: false
189
+ },
190
+ {
191
+ property: "errors",
192
+ enumerable: false
193
+ }
194
+ ];
195
+ var toJsonWasCalled = /* @__PURE__ */ new WeakSet();
196
+ var toJSON = (from) => {
197
+ toJsonWasCalled.add(from);
198
+ const json = from.toJSON();
199
+ toJsonWasCalled.delete(from);
200
+ return json;
201
+ };
202
+ var newError = (name) => {
203
+ if (name === "NonError") {
204
+ return new NonError();
205
+ }
206
+ const factory = errorFactories.get(name);
207
+ if (factory) {
208
+ return factory();
209
+ }
210
+ const ErrorConstructor = errorConstructors.get(name) ?? Error;
211
+ return ErrorConstructor === AggregateError ? new ErrorConstructor([]) : new ErrorConstructor();
212
+ };
213
+ var destroyCircular = ({
214
+ from,
215
+ seen,
216
+ to,
217
+ forceEnumerable,
218
+ maxDepth,
219
+ depth,
220
+ useToJSON,
221
+ serialize
222
+ }) => {
223
+ if (!to) {
224
+ if (Array.isArray(from)) {
225
+ to = [];
226
+ } else if (!serialize && isErrorLike(from)) {
227
+ to = newError(from.name);
228
+ } else {
229
+ to = {};
230
+ }
231
+ }
232
+ seen.add(from);
233
+ if (depth >= maxDepth) {
234
+ seen.delete(from);
235
+ return to;
236
+ }
237
+ if (useToJSON && typeof from.toJSON === "function" && !toJsonWasCalled.has(from)) {
238
+ seen.delete(from);
239
+ return toJSON(from);
240
+ }
241
+ const continueDestroyCircular = (value) => destroyCircular({
242
+ from: value,
243
+ seen,
244
+ forceEnumerable,
245
+ maxDepth,
246
+ depth: depth + 1,
247
+ useToJSON,
248
+ serialize
249
+ });
250
+ for (const key of Object.keys(from)) {
251
+ const value = from[key];
252
+ if (value && value instanceof Uint8Array && value.constructor.name === "Buffer") {
253
+ to[key] = serialize ? "[object Buffer]" : value;
254
+ continue;
255
+ }
256
+ if (value !== null && typeof value === "object" && typeof value.pipe === "function") {
257
+ to[key] = serialize ? "[object Stream]" : value;
258
+ continue;
259
+ }
260
+ if (typeof value === "function") {
261
+ if (!serialize) {
262
+ to[key] = value;
263
+ }
264
+ continue;
265
+ }
266
+ if (serialize && typeof value === "bigint") {
267
+ to[key] = `${value}n`;
268
+ continue;
269
+ }
270
+ if (!value || typeof value !== "object") {
271
+ try {
272
+ to[key] = value;
273
+ } catch {
274
+ }
275
+ continue;
276
+ }
277
+ if (!seen.has(value)) {
278
+ to[key] = continueDestroyCircular(value);
279
+ continue;
280
+ }
281
+ to[key] = "[Circular]";
282
+ }
283
+ if (serialize || to instanceof Error) {
284
+ for (const { property, enumerable } of errorProperties) {
285
+ const value = from[property];
286
+ if (value === void 0 || value === null) {
287
+ continue;
288
+ }
289
+ const descriptor = Object.getOwnPropertyDescriptor(to, property);
290
+ if (descriptor?.configurable === false) {
291
+ continue;
292
+ }
293
+ let processedValue = value;
294
+ if (typeof value === "object") {
295
+ processedValue = seen.has(value) ? "[Circular]" : continueDestroyCircular(value);
296
+ }
297
+ Object.defineProperty(to, property, {
298
+ value: processedValue,
299
+ enumerable: forceEnumerable || enumerable,
300
+ configurable: true,
301
+ writable: true
302
+ });
303
+ }
304
+ }
305
+ seen.delete(from);
306
+ return to;
307
+ };
308
+ function serializeError(value, options = {}) {
309
+ const {
310
+ maxDepth = Number.POSITIVE_INFINITY,
311
+ useToJSON = true
312
+ } = options;
313
+ if (typeof value === "object" && value !== null) {
314
+ return destroyCircular({
315
+ from: value,
316
+ seen: /* @__PURE__ */ new Set(),
317
+ forceEnumerable: true,
318
+ maxDepth,
319
+ depth: 0,
320
+ useToJSON,
321
+ serialize: true
322
+ });
323
+ }
324
+ if (typeof value === "function") {
325
+ value = "<Function>";
326
+ }
327
+ return destroyCircular({
328
+ from: new NonError(value),
329
+ seen: /* @__PURE__ */ new Set(),
330
+ forceEnumerable: true,
331
+ maxDepth,
332
+ depth: 0,
333
+ useToJSON,
334
+ serialize: true
335
+ });
336
+ }
337
+ function isErrorLike(value) {
338
+ return Boolean(value) && typeof value === "object" && typeof value.name === "string" && typeof value.message === "string" && typeof value.stack === "string";
339
+ }
340
+
341
+ // src/index.ts
28
342
  var LEVEL_ORDER = {
29
343
  DEBUG: 0,
30
344
  INFO: 1,
@@ -32,7 +346,7 @@ var LEVEL_ORDER = {
32
346
  ERROR: 3,
33
347
  FATAL: 4
34
348
  };
35
- var SDK_VERSION = "0.1.1";
349
+ var SDK_VERSION = "0.1.4";
36
350
  var DEFAULT_BASE_URL = "https://log.terodato.com";
37
351
  var BATCH_SIZE = 50;
38
352
  var MAX_BUFFER_SIZE = 1e3;
@@ -284,8 +598,24 @@ ${arg.stack}`;
284
598
  const logGroup = group ?? "console";
285
599
  const wrap = (original, level) => {
286
600
  const wrapped = (...args) => {
601
+ let stack;
602
+ let errorType;
603
+ if (level === "ERROR") {
604
+ const errArg = args.find((a) => isErrorLike(a));
605
+ if (errArg) {
606
+ const serialized = serializeError(errArg);
607
+ stack = serialized.stack;
608
+ errorType = serialized.name;
609
+ } else {
610
+ const lines = new Error().stack?.split("\n");
611
+ if (lines) {
612
+ const isV8 = lines[0]?.trimStart().startsWith("Error");
613
+ stack = lines.slice(isV8 ? 2 : 1).join("\n");
614
+ }
615
+ }
616
+ }
287
617
  queueMicrotask(() => {
288
- self.log(level, self.formatArgs(args), { group: logGroup });
618
+ self.log(level, self.formatArgs(args), { group: logGroup, stack, errorType });
289
619
  });
290
620
  return original.apply(console, args);
291
621
  };
package/dist/index.mjs CHANGED
@@ -1,3 +1,316 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
6
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
7
+
8
+ // ../node_modules/non-error/index.js
9
+ var isNonErrorSymbol = /* @__PURE__ */ Symbol("isNonError");
10
+ function defineProperty(object, key, value) {
11
+ Object.defineProperty(object, key, {
12
+ value,
13
+ writable: false,
14
+ enumerable: false,
15
+ configurable: false
16
+ });
17
+ }
18
+ function stringify(value) {
19
+ if (value === void 0) {
20
+ return "undefined";
21
+ }
22
+ if (value === null) {
23
+ return "null";
24
+ }
25
+ if (typeof value === "string") {
26
+ return value;
27
+ }
28
+ if (typeof value === "number" || typeof value === "boolean") {
29
+ return String(value);
30
+ }
31
+ if (typeof value === "bigint") {
32
+ return `${value}n`;
33
+ }
34
+ if (typeof value === "symbol") {
35
+ return value.toString();
36
+ }
37
+ if (typeof value === "function") {
38
+ return `[Function${value.name ? ` ${value.name}` : " (anonymous)"}]`;
39
+ }
40
+ if (value instanceof Error) {
41
+ try {
42
+ return String(value);
43
+ } catch {
44
+ return "<Unserializable error>";
45
+ }
46
+ }
47
+ try {
48
+ return JSON.stringify(value);
49
+ } catch {
50
+ try {
51
+ return String(value);
52
+ } catch {
53
+ return "<Unserializable value>";
54
+ }
55
+ }
56
+ }
57
+ var _NonError_static, handleCallback_fn;
58
+ var _NonError = class _NonError extends Error {
59
+ constructor(value, { superclass: Superclass = Error } = {}) {
60
+ if (_NonError.isNonError(value)) {
61
+ return value;
62
+ }
63
+ if (value instanceof Error) {
64
+ throw new TypeError("Do not pass Error instances to NonError. Throw the error directly instead.");
65
+ }
66
+ super(`Non-error value: ${stringify(value)}`);
67
+ if (Superclass !== Error) {
68
+ Object.setPrototypeOf(this, Superclass.prototype);
69
+ }
70
+ defineProperty(this, "name", "NonError");
71
+ defineProperty(this, isNonErrorSymbol, true);
72
+ defineProperty(this, "isNonError", true);
73
+ defineProperty(this, "value", value);
74
+ }
75
+ static isNonError(value) {
76
+ return value?.[isNonErrorSymbol] === true;
77
+ }
78
+ static try(callback) {
79
+ var _a;
80
+ return __privateMethod(_a = _NonError, _NonError_static, handleCallback_fn).call(_a, callback, []);
81
+ }
82
+ static wrap(callback) {
83
+ return (...arguments_) => {
84
+ var _a;
85
+ return __privateMethod(_a = _NonError, _NonError_static, handleCallback_fn).call(_a, callback, arguments_);
86
+ };
87
+ }
88
+ // This makes instanceof work even when using the `superclass` option
89
+ static [Symbol.hasInstance](instance) {
90
+ return _NonError.isNonError(instance);
91
+ }
92
+ };
93
+ _NonError_static = new WeakSet();
94
+ handleCallback_fn = function(callback, arguments_) {
95
+ try {
96
+ const result = callback(...arguments_);
97
+ if (result && typeof result.then === "function") {
98
+ return (async () => {
99
+ try {
100
+ return await result;
101
+ } catch (error) {
102
+ if (error instanceof Error) {
103
+ throw error;
104
+ }
105
+ throw new _NonError(error);
106
+ }
107
+ })();
108
+ }
109
+ return result;
110
+ } catch (error) {
111
+ if (error instanceof Error) {
112
+ throw error;
113
+ }
114
+ throw new _NonError(error);
115
+ }
116
+ };
117
+ __privateAdd(_NonError, _NonError_static);
118
+ var NonError = _NonError;
119
+
120
+ // ../node_modules/serialize-error/error-constructors.js
121
+ var list = [
122
+ // Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects
123
+ Error,
124
+ EvalError,
125
+ RangeError,
126
+ ReferenceError,
127
+ SyntaxError,
128
+ TypeError,
129
+ URIError,
130
+ AggregateError,
131
+ // Built-in errors
132
+ globalThis.DOMException,
133
+ // Node-specific errors
134
+ // https://nodejs.org/api/errors.html
135
+ globalThis.AssertionError,
136
+ globalThis.SystemError
137
+ ].filter(Boolean).map((constructor) => [constructor.name, constructor]);
138
+ var errorConstructors = new Map(list);
139
+ var errorFactories = /* @__PURE__ */ new Map();
140
+
141
+ // ../node_modules/serialize-error/index.js
142
+ var errorProperties = [
143
+ {
144
+ property: "name",
145
+ enumerable: false
146
+ },
147
+ {
148
+ property: "message",
149
+ enumerable: false
150
+ },
151
+ {
152
+ property: "stack",
153
+ enumerable: false
154
+ },
155
+ {
156
+ property: "code",
157
+ enumerable: true
158
+ },
159
+ {
160
+ property: "cause",
161
+ enumerable: false
162
+ },
163
+ {
164
+ property: "errors",
165
+ enumerable: false
166
+ }
167
+ ];
168
+ var toJsonWasCalled = /* @__PURE__ */ new WeakSet();
169
+ var toJSON = (from) => {
170
+ toJsonWasCalled.add(from);
171
+ const json = from.toJSON();
172
+ toJsonWasCalled.delete(from);
173
+ return json;
174
+ };
175
+ var newError = (name) => {
176
+ if (name === "NonError") {
177
+ return new NonError();
178
+ }
179
+ const factory = errorFactories.get(name);
180
+ if (factory) {
181
+ return factory();
182
+ }
183
+ const ErrorConstructor = errorConstructors.get(name) ?? Error;
184
+ return ErrorConstructor === AggregateError ? new ErrorConstructor([]) : new ErrorConstructor();
185
+ };
186
+ var destroyCircular = ({
187
+ from,
188
+ seen,
189
+ to,
190
+ forceEnumerable,
191
+ maxDepth,
192
+ depth,
193
+ useToJSON,
194
+ serialize
195
+ }) => {
196
+ if (!to) {
197
+ if (Array.isArray(from)) {
198
+ to = [];
199
+ } else if (!serialize && isErrorLike(from)) {
200
+ to = newError(from.name);
201
+ } else {
202
+ to = {};
203
+ }
204
+ }
205
+ seen.add(from);
206
+ if (depth >= maxDepth) {
207
+ seen.delete(from);
208
+ return to;
209
+ }
210
+ if (useToJSON && typeof from.toJSON === "function" && !toJsonWasCalled.has(from)) {
211
+ seen.delete(from);
212
+ return toJSON(from);
213
+ }
214
+ const continueDestroyCircular = (value) => destroyCircular({
215
+ from: value,
216
+ seen,
217
+ forceEnumerable,
218
+ maxDepth,
219
+ depth: depth + 1,
220
+ useToJSON,
221
+ serialize
222
+ });
223
+ for (const key of Object.keys(from)) {
224
+ const value = from[key];
225
+ if (value && value instanceof Uint8Array && value.constructor.name === "Buffer") {
226
+ to[key] = serialize ? "[object Buffer]" : value;
227
+ continue;
228
+ }
229
+ if (value !== null && typeof value === "object" && typeof value.pipe === "function") {
230
+ to[key] = serialize ? "[object Stream]" : value;
231
+ continue;
232
+ }
233
+ if (typeof value === "function") {
234
+ if (!serialize) {
235
+ to[key] = value;
236
+ }
237
+ continue;
238
+ }
239
+ if (serialize && typeof value === "bigint") {
240
+ to[key] = `${value}n`;
241
+ continue;
242
+ }
243
+ if (!value || typeof value !== "object") {
244
+ try {
245
+ to[key] = value;
246
+ } catch {
247
+ }
248
+ continue;
249
+ }
250
+ if (!seen.has(value)) {
251
+ to[key] = continueDestroyCircular(value);
252
+ continue;
253
+ }
254
+ to[key] = "[Circular]";
255
+ }
256
+ if (serialize || to instanceof Error) {
257
+ for (const { property, enumerable } of errorProperties) {
258
+ const value = from[property];
259
+ if (value === void 0 || value === null) {
260
+ continue;
261
+ }
262
+ const descriptor = Object.getOwnPropertyDescriptor(to, property);
263
+ if (descriptor?.configurable === false) {
264
+ continue;
265
+ }
266
+ let processedValue = value;
267
+ if (typeof value === "object") {
268
+ processedValue = seen.has(value) ? "[Circular]" : continueDestroyCircular(value);
269
+ }
270
+ Object.defineProperty(to, property, {
271
+ value: processedValue,
272
+ enumerable: forceEnumerable || enumerable,
273
+ configurable: true,
274
+ writable: true
275
+ });
276
+ }
277
+ }
278
+ seen.delete(from);
279
+ return to;
280
+ };
281
+ function serializeError(value, options = {}) {
282
+ const {
283
+ maxDepth = Number.POSITIVE_INFINITY,
284
+ useToJSON = true
285
+ } = options;
286
+ if (typeof value === "object" && value !== null) {
287
+ return destroyCircular({
288
+ from: value,
289
+ seen: /* @__PURE__ */ new Set(),
290
+ forceEnumerable: true,
291
+ maxDepth,
292
+ depth: 0,
293
+ useToJSON,
294
+ serialize: true
295
+ });
296
+ }
297
+ if (typeof value === "function") {
298
+ value = "<Function>";
299
+ }
300
+ return destroyCircular({
301
+ from: new NonError(value),
302
+ seen: /* @__PURE__ */ new Set(),
303
+ forceEnumerable: true,
304
+ maxDepth,
305
+ depth: 0,
306
+ useToJSON,
307
+ serialize: true
308
+ });
309
+ }
310
+ function isErrorLike(value) {
311
+ return Boolean(value) && typeof value === "object" && typeof value.name === "string" && typeof value.message === "string" && typeof value.stack === "string";
312
+ }
313
+
1
314
  // src/index.ts
2
315
  var LEVEL_ORDER = {
3
316
  DEBUG: 0,
@@ -6,7 +319,7 @@ var LEVEL_ORDER = {
6
319
  ERROR: 3,
7
320
  FATAL: 4
8
321
  };
9
- var SDK_VERSION = "0.1.1";
322
+ var SDK_VERSION = "0.1.4";
10
323
  var DEFAULT_BASE_URL = "https://log.terodato.com";
11
324
  var BATCH_SIZE = 50;
12
325
  var MAX_BUFFER_SIZE = 1e3;
@@ -258,8 +571,24 @@ ${arg.stack}`;
258
571
  const logGroup = group ?? "console";
259
572
  const wrap = (original, level) => {
260
573
  const wrapped = (...args) => {
574
+ let stack;
575
+ let errorType;
576
+ if (level === "ERROR") {
577
+ const errArg = args.find((a) => isErrorLike(a));
578
+ if (errArg) {
579
+ const serialized = serializeError(errArg);
580
+ stack = serialized.stack;
581
+ errorType = serialized.name;
582
+ } else {
583
+ const lines = new Error().stack?.split("\n");
584
+ if (lines) {
585
+ const isV8 = lines[0]?.trimStart().startsWith("Error");
586
+ stack = lines.slice(isV8 ? 2 : 1).join("\n");
587
+ }
588
+ }
589
+ }
261
590
  queueMicrotask(() => {
262
- self.log(level, self.formatArgs(args), { group: logGroup });
591
+ self.log(level, self.formatArgs(args), { group: logGroup, stack, errorType });
263
592
  });
264
593
  return original.apply(console, args);
265
594
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remote-logger/sdk",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "JavaScript SDK for Remote Logger",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -25,6 +25,7 @@
25
25
  "test": "tsx test/test.ts"
26
26
  },
27
27
  "devDependencies": {
28
+ "serialize-error": "^13.0.1",
28
29
  "tsup": "^8.0.0",
29
30
  "tsx": "^4.7.0",
30
31
  "typescript": "^5.3.0"