@openfin/core 44.101.6 → 44.101.8
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/out/mock-alpha.d.ts +28 -1
- package/out/mock-beta.d.ts +28 -1
- package/out/mock-public.d.ts +28 -1
- package/out/stub.d.ts +28 -1
- package/out/stub.js +62 -26
- package/out/stub.mjs +62 -26
- package/package.json +1 -1
package/out/mock-alpha.d.ts
CHANGED
|
@@ -2166,6 +2166,15 @@ declare type ByType_8<Type extends EventType_8> = Payload_10<Type>;
|
|
|
2166
2166
|
*/
|
|
2167
2167
|
declare type ByType_9<Type extends EventType_9> = Payload_11<Type>;
|
|
2168
2168
|
|
|
2169
|
+
/** Minimal V8 CallSite shape — js-adapter does not include @types/node. */
|
|
2170
|
+
declare interface CallSite {
|
|
2171
|
+
getFileName(): string | null;
|
|
2172
|
+
toString(): string;
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
/** V8 CallSite objects, or native stack-frame strings from browsers that ignore Error.prepareStackTrace. */
|
|
2176
|
+
declare type CapturedStack = CallSite[] | string[];
|
|
2177
|
+
|
|
2169
2178
|
/**
|
|
2170
2179
|
* Configuration for page capture.
|
|
2171
2180
|
*
|
|
@@ -8993,8 +9002,26 @@ declare type LayoutOptions = {
|
|
|
8993
9002
|
content?: LayoutContent;
|
|
8994
9003
|
dimensions?: {
|
|
8995
9004
|
borderWidth?: number;
|
|
9005
|
+
/**
|
|
9006
|
+
* Minimum height a layout item can be resized to, in pixels.
|
|
9007
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemHeight`.
|
|
9008
|
+
*/
|
|
8996
9009
|
minItemHeight?: number;
|
|
9010
|
+
/**
|
|
9011
|
+
* Minimum width a layout item can be resized to, in pixels.
|
|
9012
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemWidth`.
|
|
9013
|
+
*/
|
|
8997
9014
|
minItemWidth?: number;
|
|
9015
|
+
/**
|
|
9016
|
+
* Minimum height a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9017
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemHeight} when both are set.
|
|
9018
|
+
*/
|
|
9019
|
+
defaultMinItemHeight?: string;
|
|
9020
|
+
/**
|
|
9021
|
+
* Minimum width a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9022
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemWidth} when both are set.
|
|
9023
|
+
*/
|
|
9024
|
+
defaultMinItemWidth?: string;
|
|
8998
9025
|
headerHeight?: number;
|
|
8999
9026
|
};
|
|
9000
9027
|
};
|
|
@@ -17265,7 +17292,7 @@ declare class Transport<MeType extends EntityType = EntityType> extends EventEmi
|
|
|
17265
17292
|
connectByPort(config: ExistingConnectConfig): Promise<void>;
|
|
17266
17293
|
private authorize;
|
|
17267
17294
|
sendAction<T extends keyof ProtocolMap>(action: T, payload?: ProtocolMap[T]['request'], uncorrelated?: boolean): SentMessage<SendActionResponse<T>>;
|
|
17268
|
-
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?:
|
|
17295
|
+
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?: CapturedStack): void;
|
|
17269
17296
|
ferryAction(origData: any): Promise<Message<any>>;
|
|
17270
17297
|
registerMessageHandler(handler: MessageHandler): void;
|
|
17271
17298
|
protected addWireListener(id: number, resolve: Function, handleNack: NackHandler, uncorrelated: boolean): void;
|
package/out/mock-beta.d.ts
CHANGED
|
@@ -2166,6 +2166,15 @@ declare type ByType_8<Type extends EventType_8> = Payload_10<Type>;
|
|
|
2166
2166
|
*/
|
|
2167
2167
|
declare type ByType_9<Type extends EventType_9> = Payload_11<Type>;
|
|
2168
2168
|
|
|
2169
|
+
/** Minimal V8 CallSite shape — js-adapter does not include @types/node. */
|
|
2170
|
+
declare interface CallSite {
|
|
2171
|
+
getFileName(): string | null;
|
|
2172
|
+
toString(): string;
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
/** V8 CallSite objects, or native stack-frame strings from browsers that ignore Error.prepareStackTrace. */
|
|
2176
|
+
declare type CapturedStack = CallSite[] | string[];
|
|
2177
|
+
|
|
2169
2178
|
/**
|
|
2170
2179
|
* Configuration for page capture.
|
|
2171
2180
|
*
|
|
@@ -8993,8 +9002,26 @@ declare type LayoutOptions = {
|
|
|
8993
9002
|
content?: LayoutContent;
|
|
8994
9003
|
dimensions?: {
|
|
8995
9004
|
borderWidth?: number;
|
|
9005
|
+
/**
|
|
9006
|
+
* Minimum height a layout item can be resized to, in pixels.
|
|
9007
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemHeight`.
|
|
9008
|
+
*/
|
|
8996
9009
|
minItemHeight?: number;
|
|
9010
|
+
/**
|
|
9011
|
+
* Minimum width a layout item can be resized to, in pixels.
|
|
9012
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemWidth`.
|
|
9013
|
+
*/
|
|
8997
9014
|
minItemWidth?: number;
|
|
9015
|
+
/**
|
|
9016
|
+
* Minimum height a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9017
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemHeight} when both are set.
|
|
9018
|
+
*/
|
|
9019
|
+
defaultMinItemHeight?: string;
|
|
9020
|
+
/**
|
|
9021
|
+
* Minimum width a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9022
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemWidth} when both are set.
|
|
9023
|
+
*/
|
|
9024
|
+
defaultMinItemWidth?: string;
|
|
8998
9025
|
headerHeight?: number;
|
|
8999
9026
|
};
|
|
9000
9027
|
};
|
|
@@ -17265,7 +17292,7 @@ declare class Transport<MeType extends EntityType = EntityType> extends EventEmi
|
|
|
17265
17292
|
connectByPort(config: ExistingConnectConfig): Promise<void>;
|
|
17266
17293
|
private authorize;
|
|
17267
17294
|
sendAction<T extends keyof ProtocolMap>(action: T, payload?: ProtocolMap[T]['request'], uncorrelated?: boolean): SentMessage<SendActionResponse<T>>;
|
|
17268
|
-
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?:
|
|
17295
|
+
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?: CapturedStack): void;
|
|
17269
17296
|
ferryAction(origData: any): Promise<Message<any>>;
|
|
17270
17297
|
registerMessageHandler(handler: MessageHandler): void;
|
|
17271
17298
|
protected addWireListener(id: number, resolve: Function, handleNack: NackHandler, uncorrelated: boolean): void;
|
package/out/mock-public.d.ts
CHANGED
|
@@ -2166,6 +2166,15 @@ declare type ByType_8<Type extends EventType_8> = Payload_10<Type>;
|
|
|
2166
2166
|
*/
|
|
2167
2167
|
declare type ByType_9<Type extends EventType_9> = Payload_11<Type>;
|
|
2168
2168
|
|
|
2169
|
+
/** Minimal V8 CallSite shape — js-adapter does not include @types/node. */
|
|
2170
|
+
declare interface CallSite {
|
|
2171
|
+
getFileName(): string | null;
|
|
2172
|
+
toString(): string;
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
/** V8 CallSite objects, or native stack-frame strings from browsers that ignore Error.prepareStackTrace. */
|
|
2176
|
+
declare type CapturedStack = CallSite[] | string[];
|
|
2177
|
+
|
|
2169
2178
|
/**
|
|
2170
2179
|
* Configuration for page capture.
|
|
2171
2180
|
*
|
|
@@ -8993,8 +9002,26 @@ declare type LayoutOptions = {
|
|
|
8993
9002
|
content?: LayoutContent;
|
|
8994
9003
|
dimensions?: {
|
|
8995
9004
|
borderWidth?: number;
|
|
9005
|
+
/**
|
|
9006
|
+
* Minimum height a layout item can be resized to, in pixels.
|
|
9007
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemHeight`.
|
|
9008
|
+
*/
|
|
8996
9009
|
minItemHeight?: number;
|
|
9010
|
+
/**
|
|
9011
|
+
* Minimum width a layout item can be resized to, in pixels.
|
|
9012
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemWidth`.
|
|
9013
|
+
*/
|
|
8997
9014
|
minItemWidth?: number;
|
|
9015
|
+
/**
|
|
9016
|
+
* Minimum height a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9017
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemHeight} when both are set.
|
|
9018
|
+
*/
|
|
9019
|
+
defaultMinItemHeight?: string;
|
|
9020
|
+
/**
|
|
9021
|
+
* Minimum width a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9022
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemWidth} when both are set.
|
|
9023
|
+
*/
|
|
9024
|
+
defaultMinItemWidth?: string;
|
|
8998
9025
|
headerHeight?: number;
|
|
8999
9026
|
};
|
|
9000
9027
|
};
|
|
@@ -17265,7 +17292,7 @@ declare class Transport<MeType extends EntityType = EntityType> extends EventEmi
|
|
|
17265
17292
|
connectByPort(config: ExistingConnectConfig): Promise<void>;
|
|
17266
17293
|
private authorize;
|
|
17267
17294
|
sendAction<T extends keyof ProtocolMap>(action: T, payload?: ProtocolMap[T]['request'], uncorrelated?: boolean): SentMessage<SendActionResponse<T>>;
|
|
17268
|
-
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?:
|
|
17295
|
+
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?: CapturedStack): void;
|
|
17269
17296
|
ferryAction(origData: any): Promise<Message<any>>;
|
|
17270
17297
|
registerMessageHandler(handler: MessageHandler): void;
|
|
17271
17298
|
protected addWireListener(id: number, resolve: Function, handleNack: NackHandler, uncorrelated: boolean): void;
|
package/out/stub.d.ts
CHANGED
|
@@ -2198,6 +2198,15 @@ declare type ByType_8<Type extends EventType_8> = Payload_10<Type>;
|
|
|
2198
2198
|
*/
|
|
2199
2199
|
declare type ByType_9<Type extends EventType_9> = Payload_11<Type>;
|
|
2200
2200
|
|
|
2201
|
+
/** Minimal V8 CallSite shape — js-adapter does not include @types/node. */
|
|
2202
|
+
declare interface CallSite {
|
|
2203
|
+
getFileName(): string | null;
|
|
2204
|
+
toString(): string;
|
|
2205
|
+
}
|
|
2206
|
+
|
|
2207
|
+
/** V8 CallSite objects, or native stack-frame strings from browsers that ignore Error.prepareStackTrace. */
|
|
2208
|
+
declare type CapturedStack = CallSite[] | string[];
|
|
2209
|
+
|
|
2201
2210
|
/**
|
|
2202
2211
|
* Configuration for page capture.
|
|
2203
2212
|
*
|
|
@@ -9302,8 +9311,26 @@ declare type LayoutOptions = {
|
|
|
9302
9311
|
content?: LayoutContent;
|
|
9303
9312
|
dimensions?: {
|
|
9304
9313
|
borderWidth?: number;
|
|
9314
|
+
/**
|
|
9315
|
+
* Minimum height a layout item can be resized to, in pixels.
|
|
9316
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemHeight`.
|
|
9317
|
+
*/
|
|
9305
9318
|
minItemHeight?: number;
|
|
9319
|
+
/**
|
|
9320
|
+
* Minimum width a layout item can be resized to, in pixels.
|
|
9321
|
+
* On web layouts this is mapped to Golden Layout 2 `defaultMinItemWidth`.
|
|
9322
|
+
*/
|
|
9306
9323
|
minItemWidth?: number;
|
|
9324
|
+
/**
|
|
9325
|
+
* Minimum height a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9326
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemHeight} when both are set.
|
|
9327
|
+
*/
|
|
9328
|
+
defaultMinItemHeight?: string;
|
|
9329
|
+
/**
|
|
9330
|
+
* Minimum width a layout item can be resized to (CSS size, e.g. `'500px'`).
|
|
9331
|
+
* Web layouts only. Takes precedence over {@link LayoutOptions.dimensions.minItemWidth} when both are set.
|
|
9332
|
+
*/
|
|
9333
|
+
defaultMinItemWidth?: string;
|
|
9307
9334
|
headerHeight?: number;
|
|
9308
9335
|
};
|
|
9309
9336
|
};
|
|
@@ -17695,7 +17722,7 @@ declare class Transport<MeType extends EntityType = EntityType> extends EventEmi
|
|
|
17695
17722
|
connectByPort(config: ExistingConnectConfig): Promise<void>;
|
|
17696
17723
|
private authorize;
|
|
17697
17724
|
sendAction<T extends keyof ProtocolMap>(action: T, payload?: ProtocolMap[T]['request'], uncorrelated?: boolean): SentMessage<SendActionResponse<T>>;
|
|
17698
|
-
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?:
|
|
17725
|
+
protected nackHandler(payloadOrMessage: RuntimeErrorPayload | string, reject: Function, callSites?: CapturedStack): void;
|
|
17699
17726
|
ferryAction(origData: any): Promise<Message<any>>;
|
|
17700
17727
|
registerMessageHandler(handler: MessageHandler): void;
|
|
17701
17728
|
protected addWireListener(id: number, resolve: Function, handleNack: NackHandler, uncorrelated: boolean): void;
|
package/out/stub.js
CHANGED
|
@@ -472,6 +472,26 @@ class EmitterBase extends Base {
|
|
|
472
472
|
}
|
|
473
473
|
_EmitterBase_emitterAccessor = new WeakMap(), _EmitterBase_deregisterOnceListeners = new WeakMap();
|
|
474
474
|
|
|
475
|
+
const V8Error = Error;
|
|
476
|
+
function isCallSiteArray(stack) {
|
|
477
|
+
if (!Array.isArray(stack) || stack.length === 0) {
|
|
478
|
+
return Array.isArray(stack);
|
|
479
|
+
}
|
|
480
|
+
const first = stack[0];
|
|
481
|
+
return typeof first === 'object' && first !== null && typeof first.getFileName === 'function';
|
|
482
|
+
}
|
|
483
|
+
function isStackFrameLine(line) {
|
|
484
|
+
return /^\s*at\s/.test(line) || line.includes('@');
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Split a native `error.stack` string into frames and drop the dummy Error header plus `framesToRemove` frames.
|
|
488
|
+
* Safari/Firefox ignore V8's Error.prepareStackTrace, so `.stack` stays a string and `.slice(n)` would cut characters.
|
|
489
|
+
*/
|
|
490
|
+
function stackStringToFrames(stack, framesToRemove) {
|
|
491
|
+
const lines = stack.split('\n').filter((line) => line.length > 0);
|
|
492
|
+
const start = lines[0] !== undefined && !isStackFrameLine(lines[0]) ? 1 : 0;
|
|
493
|
+
return lines.slice(start + framesToRemove);
|
|
494
|
+
}
|
|
475
495
|
class UnexpectedActionError extends Error {
|
|
476
496
|
}
|
|
477
497
|
class DuplicateCorrelationError extends Error {
|
|
@@ -500,17 +520,17 @@ class DeserializedError extends Error {
|
|
|
500
520
|
class RuntimeError extends Error {
|
|
501
521
|
static trimEndCallSites(err, takeUntilRegex) {
|
|
502
522
|
// save original props
|
|
503
|
-
const length =
|
|
523
|
+
const length = V8Error.stackTraceLimit;
|
|
504
524
|
// eslint-disable-next-line no-underscore-dangle
|
|
505
|
-
const _prepareStackTrace =
|
|
525
|
+
const _prepareStackTrace = V8Error.prepareStackTrace;
|
|
506
526
|
// This will be called when we access the `stack` property
|
|
507
|
-
|
|
527
|
+
V8Error.prepareStackTrace = (_, stack) => stack;
|
|
508
528
|
// in channel errors, the error was already serialized so we need to handle both string and CallSite[]
|
|
509
529
|
const isString = typeof err.stack === 'string';
|
|
510
530
|
const stack = (isString ? err.stack?.split('\n') : err.stack) ?? [];
|
|
511
531
|
// restore original props
|
|
512
|
-
|
|
513
|
-
|
|
532
|
+
V8Error.prepareStackTrace = _prepareStackTrace;
|
|
533
|
+
V8Error.stackTraceLimit = length;
|
|
514
534
|
// stack is optional in non chromium contexts
|
|
515
535
|
if (stack.length) {
|
|
516
536
|
const newStack = [];
|
|
@@ -532,31 +552,47 @@ class RuntimeError extends Error {
|
|
|
532
552
|
}
|
|
533
553
|
}
|
|
534
554
|
static getCallSite(callsToRemove = 0) {
|
|
535
|
-
const length =
|
|
555
|
+
const length = V8Error.stackTraceLimit;
|
|
536
556
|
const realCallsToRemove = callsToRemove + 1; // remove this call;
|
|
537
|
-
|
|
557
|
+
const limit = typeof length === 'number' && Number.isFinite(length) ? length : 10;
|
|
538
558
|
// eslint-disable-next-line no-underscore-dangle
|
|
539
|
-
const _prepareStackTrace =
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
559
|
+
const _prepareStackTrace = V8Error.prepareStackTrace;
|
|
560
|
+
try {
|
|
561
|
+
V8Error.stackTraceLimit = limit + realCallsToRemove;
|
|
562
|
+
// V8 only: accessing `.stack` invokes this and returns CallSite[]. Safari/Firefox ignore it.
|
|
563
|
+
V8Error.prepareStackTrace = (_, stack) => stack;
|
|
564
|
+
const rawStack = new Error().stack;
|
|
565
|
+
if (Array.isArray(rawStack)) {
|
|
566
|
+
return rawStack.slice(realCallsToRemove);
|
|
567
|
+
}
|
|
568
|
+
if (typeof rawStack === 'string' && rawStack.length > 0) {
|
|
569
|
+
return stackStringToFrames(rawStack, realCallsToRemove);
|
|
570
|
+
}
|
|
571
|
+
return [];
|
|
572
|
+
}
|
|
573
|
+
finally {
|
|
574
|
+
V8Error.prepareStackTrace = _prepareStackTrace;
|
|
575
|
+
V8Error.stackTraceLimit = length;
|
|
576
|
+
}
|
|
547
577
|
}
|
|
548
578
|
static prepareStackTrace(err, callSites) {
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
579
|
+
const header = `${err.name || 'Error'}: ${err.message || ''}`;
|
|
580
|
+
const frames = typeof callSites === 'string' ? stackStringToFrames(callSites, 0) : callSites;
|
|
581
|
+
if (!Array.isArray(frames) || frames.length === 0) {
|
|
582
|
+
return header;
|
|
583
|
+
}
|
|
584
|
+
if (isCallSiteArray(frames)) {
|
|
585
|
+
const prepare = V8Error.prepareStackTrace;
|
|
586
|
+
// Only V8 CallSite[] may be passed to a user-supplied Error.prepareStackTrace.
|
|
587
|
+
if (typeof prepare === 'function') {
|
|
588
|
+
return prepare(err, frames);
|
|
589
|
+
}
|
|
590
|
+
// TODO: this is just a first iteration, we can make this "nicer" at some point
|
|
591
|
+
// const EXCLUSIONS = ['IpcRenderer', 'Object.onMessage', 'Transport.onmessage', 'MessageReceiver.onmessage'];
|
|
592
|
+
return `${header}\n${frames.map((line) => ` at ${line}`).join('\n')}`;
|
|
593
|
+
}
|
|
594
|
+
// Native Safari/Firefox frames already include their engine's format (`func@file:line:col`).
|
|
595
|
+
return `${header}\n${frames.join('\n')}`;
|
|
560
596
|
}
|
|
561
597
|
/*
|
|
562
598
|
|
package/out/stub.mjs
CHANGED
|
@@ -468,6 +468,26 @@ class EmitterBase extends Base {
|
|
|
468
468
|
}
|
|
469
469
|
_EmitterBase_emitterAccessor = new WeakMap(), _EmitterBase_deregisterOnceListeners = new WeakMap();
|
|
470
470
|
|
|
471
|
+
const V8Error = Error;
|
|
472
|
+
function isCallSiteArray(stack) {
|
|
473
|
+
if (!Array.isArray(stack) || stack.length === 0) {
|
|
474
|
+
return Array.isArray(stack);
|
|
475
|
+
}
|
|
476
|
+
const first = stack[0];
|
|
477
|
+
return typeof first === 'object' && first !== null && typeof first.getFileName === 'function';
|
|
478
|
+
}
|
|
479
|
+
function isStackFrameLine(line) {
|
|
480
|
+
return /^\s*at\s/.test(line) || line.includes('@');
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Split a native `error.stack` string into frames and drop the dummy Error header plus `framesToRemove` frames.
|
|
484
|
+
* Safari/Firefox ignore V8's Error.prepareStackTrace, so `.stack` stays a string and `.slice(n)` would cut characters.
|
|
485
|
+
*/
|
|
486
|
+
function stackStringToFrames(stack, framesToRemove) {
|
|
487
|
+
const lines = stack.split('\n').filter((line) => line.length > 0);
|
|
488
|
+
const start = lines[0] !== undefined && !isStackFrameLine(lines[0]) ? 1 : 0;
|
|
489
|
+
return lines.slice(start + framesToRemove);
|
|
490
|
+
}
|
|
471
491
|
class UnexpectedActionError extends Error {
|
|
472
492
|
}
|
|
473
493
|
class DuplicateCorrelationError extends Error {
|
|
@@ -496,17 +516,17 @@ class DeserializedError extends Error {
|
|
|
496
516
|
class RuntimeError extends Error {
|
|
497
517
|
static trimEndCallSites(err, takeUntilRegex) {
|
|
498
518
|
// save original props
|
|
499
|
-
const length =
|
|
519
|
+
const length = V8Error.stackTraceLimit;
|
|
500
520
|
// eslint-disable-next-line no-underscore-dangle
|
|
501
|
-
const _prepareStackTrace =
|
|
521
|
+
const _prepareStackTrace = V8Error.prepareStackTrace;
|
|
502
522
|
// This will be called when we access the `stack` property
|
|
503
|
-
|
|
523
|
+
V8Error.prepareStackTrace = (_, stack) => stack;
|
|
504
524
|
// in channel errors, the error was already serialized so we need to handle both string and CallSite[]
|
|
505
525
|
const isString = typeof err.stack === 'string';
|
|
506
526
|
const stack = (isString ? err.stack?.split('\n') : err.stack) ?? [];
|
|
507
527
|
// restore original props
|
|
508
|
-
|
|
509
|
-
|
|
528
|
+
V8Error.prepareStackTrace = _prepareStackTrace;
|
|
529
|
+
V8Error.stackTraceLimit = length;
|
|
510
530
|
// stack is optional in non chromium contexts
|
|
511
531
|
if (stack.length) {
|
|
512
532
|
const newStack = [];
|
|
@@ -528,31 +548,47 @@ class RuntimeError extends Error {
|
|
|
528
548
|
}
|
|
529
549
|
}
|
|
530
550
|
static getCallSite(callsToRemove = 0) {
|
|
531
|
-
const length =
|
|
551
|
+
const length = V8Error.stackTraceLimit;
|
|
532
552
|
const realCallsToRemove = callsToRemove + 1; // remove this call;
|
|
533
|
-
|
|
553
|
+
const limit = typeof length === 'number' && Number.isFinite(length) ? length : 10;
|
|
534
554
|
// eslint-disable-next-line no-underscore-dangle
|
|
535
|
-
const _prepareStackTrace =
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
555
|
+
const _prepareStackTrace = V8Error.prepareStackTrace;
|
|
556
|
+
try {
|
|
557
|
+
V8Error.stackTraceLimit = limit + realCallsToRemove;
|
|
558
|
+
// V8 only: accessing `.stack` invokes this and returns CallSite[]. Safari/Firefox ignore it.
|
|
559
|
+
V8Error.prepareStackTrace = (_, stack) => stack;
|
|
560
|
+
const rawStack = new Error().stack;
|
|
561
|
+
if (Array.isArray(rawStack)) {
|
|
562
|
+
return rawStack.slice(realCallsToRemove);
|
|
563
|
+
}
|
|
564
|
+
if (typeof rawStack === 'string' && rawStack.length > 0) {
|
|
565
|
+
return stackStringToFrames(rawStack, realCallsToRemove);
|
|
566
|
+
}
|
|
567
|
+
return [];
|
|
568
|
+
}
|
|
569
|
+
finally {
|
|
570
|
+
V8Error.prepareStackTrace = _prepareStackTrace;
|
|
571
|
+
V8Error.stackTraceLimit = length;
|
|
572
|
+
}
|
|
543
573
|
}
|
|
544
574
|
static prepareStackTrace(err, callSites) {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
575
|
+
const header = `${err.name || 'Error'}: ${err.message || ''}`;
|
|
576
|
+
const frames = typeof callSites === 'string' ? stackStringToFrames(callSites, 0) : callSites;
|
|
577
|
+
if (!Array.isArray(frames) || frames.length === 0) {
|
|
578
|
+
return header;
|
|
579
|
+
}
|
|
580
|
+
if (isCallSiteArray(frames)) {
|
|
581
|
+
const prepare = V8Error.prepareStackTrace;
|
|
582
|
+
// Only V8 CallSite[] may be passed to a user-supplied Error.prepareStackTrace.
|
|
583
|
+
if (typeof prepare === 'function') {
|
|
584
|
+
return prepare(err, frames);
|
|
585
|
+
}
|
|
586
|
+
// TODO: this is just a first iteration, we can make this "nicer" at some point
|
|
587
|
+
// const EXCLUSIONS = ['IpcRenderer', 'Object.onMessage', 'Transport.onmessage', 'MessageReceiver.onmessage'];
|
|
588
|
+
return `${header}\n${frames.map((line) => ` at ${line}`).join('\n')}`;
|
|
589
|
+
}
|
|
590
|
+
// Native Safari/Firefox frames already include their engine's format (`func@file:line:col`).
|
|
591
|
+
return `${header}\n${frames.join('\n')}`;
|
|
556
592
|
}
|
|
557
593
|
/*
|
|
558
594
|
|