@apollo/client 3.8.3 → 3.8.5
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/README.md +8 -6
- package/apollo-client.cjs +57 -73
- package/apollo-client.cjs.map +1 -1
- package/apollo-client.min.cjs +1 -1
- package/config/jest/setup.js +10 -0
- package/config/jest/setup.js.map +1 -1
- package/core/ObservableQuery.d.ts.map +1 -1
- package/core/ObservableQuery.js +5 -6
- package/core/ObservableQuery.js.map +1 -1
- package/core/QueryInfo.d.ts +0 -2
- package/core/QueryInfo.d.ts.map +1 -1
- package/core/QueryInfo.js +0 -2
- package/core/QueryInfo.js.map +1 -1
- package/core/QueryManager.d.ts +1 -1
- package/core/QueryManager.d.ts.map +1 -1
- package/core/QueryManager.js +2 -2
- package/core/QueryManager.js.map +1 -1
- package/core/core.cjs +8 -11
- package/core/core.cjs.map +1 -1
- package/core/core.cjs.native.js +8 -11
- package/dev/dev.cjs +30 -16
- package/dev/dev.cjs.map +1 -1
- package/dev/dev.cjs.native.js +30 -16
- package/dev/loadErrorMessageHandler.js +1 -1
- package/dev/loadErrorMessageHandler.js.map +1 -1
- package/package.json +30 -23
- package/react/cache/index.d.ts +0 -4
- package/react/cache/index.d.ts.map +1 -1
- package/react/cache/index.js +0 -14
- package/react/cache/index.js.map +1 -1
- package/react/index.d.ts +0 -1
- package/react/index.d.ts.map +1 -1
- package/react/index.js +0 -1
- package/react/index.js.map +1 -1
- package/react/react.cjs +1 -218
- package/react/react.cjs.map +1 -1
- package/react/react.cjs.native.js +1 -218
- package/react/types/types.d.ts +0 -3
- package/react/types/types.d.ts.map +1 -1
- package/react/types/types.js.map +1 -1
- package/testing/core/withConsoleSpy.d.ts.map +1 -1
- package/testing/core/withConsoleSpy.js.map +1 -1
- package/testing/internal/ObservableStream.d.ts +26 -0
- package/testing/internal/ObservableStream.d.ts.map +1 -0
- package/testing/internal/ObservableStream.js +101 -0
- package/testing/internal/ObservableStream.js.map +1 -0
- package/testing/internal/disposables/index.d.ts +3 -0
- package/testing/internal/disposables/index.d.ts.map +1 -0
- package/testing/internal/disposables/index.js +3 -0
- package/testing/internal/disposables/index.js.map +1 -0
- package/testing/internal/disposables/spyOnConsole.d.ts +10 -0
- package/testing/internal/disposables/spyOnConsole.d.ts.map +1 -0
- package/testing/internal/disposables/spyOnConsole.js +33 -0
- package/testing/internal/disposables/spyOnConsole.js.map +1 -0
- package/testing/internal/disposables/withCleanup.d.ts +3 -0
- package/testing/internal/disposables/withCleanup.d.ts.map +1 -0
- package/testing/internal/disposables/withCleanup.js +11 -0
- package/testing/internal/disposables/withCleanup.js.map +1 -0
- package/testing/internal/index.d.ts +4 -0
- package/testing/internal/index.d.ts.map +1 -0
- package/testing/internal/index.js +4 -0
- package/testing/internal/index.js.map +1 -0
- package/testing/internal/profile/Render.d.ts +140 -0
- package/testing/internal/profile/Render.d.ts.map +1 -0
- package/testing/internal/profile/Render.js +132 -0
- package/testing/internal/profile/Render.js.map +1 -0
- package/testing/internal/profile/index.d.ts +4 -0
- package/testing/internal/profile/index.d.ts.map +1 -0
- package/testing/internal/profile/index.js +2 -0
- package/testing/internal/profile/index.js.map +1 -0
- package/testing/internal/profile/profile.d.ts +55 -0
- package/testing/internal/profile/profile.d.ts.map +1 -0
- package/testing/internal/profile/profile.js +222 -0
- package/testing/internal/profile/profile.js.map +1 -0
- package/testing/internal/profile/traces.d.ts +3 -0
- package/testing/internal/profile/traces.d.ts.map +1 -0
- package/testing/internal/profile/traces.js +26 -0
- package/testing/internal/profile/traces.js.map +1 -0
- package/testing/matchers/ProfiledComponent.d.ts +8 -0
- package/testing/matchers/ProfiledComponent.d.ts.map +1 -0
- package/testing/matchers/ProfiledComponent.js +107 -0
- package/testing/matchers/ProfiledComponent.js.map +1 -0
- package/testing/matchers/index.js +3 -0
- package/testing/matchers/index.js.map +1 -1
- package/utilities/globals/globals.cjs +31 -16
- package/utilities/globals/globals.cjs.map +1 -1
- package/utilities/globals/globals.cjs.native.js +31 -16
- package/utilities/globals/invariantWrappers.d.ts.map +1 -1
- package/utilities/globals/invariantWrappers.js +30 -15
- package/utilities/globals/invariantWrappers.js.map +1 -1
- package/utilities/observables/asyncMap.d.ts.map +1 -1
- package/utilities/observables/asyncMap.js +17 -34
- package/utilities/observables/asyncMap.js.map +1 -1
- package/utilities/utilities.cjs +17 -34
- package/utilities/utilities.cjs.map +1 -1
- package/utilities/utilities.cjs.native.js +17 -34
- package/version.js +1 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { __spreadArray } from "tslib";
|
|
2
|
+
import { within, screen } from "@testing-library/dom";
|
|
3
|
+
import { JSDOM, VirtualConsole } from "jsdom";
|
|
4
|
+
import { applyStackTrace, captureStackTrace } from "./traces.js";
|
|
5
|
+
var RenderInstance = (function () {
|
|
6
|
+
function RenderInstance(baseRender, snapshot, stringifiedDOM) {
|
|
7
|
+
this.snapshot = snapshot;
|
|
8
|
+
this.stringifiedDOM = stringifiedDOM;
|
|
9
|
+
this.id = baseRender.id;
|
|
10
|
+
this.phase = baseRender.phase;
|
|
11
|
+
this.actualDuration = baseRender.actualDuration;
|
|
12
|
+
this.baseDuration = baseRender.baseDuration;
|
|
13
|
+
this.startTime = baseRender.startTime;
|
|
14
|
+
this.commitTime = baseRender.commitTime;
|
|
15
|
+
this.count = baseRender.count;
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(RenderInstance.prototype, "domSnapshot", {
|
|
18
|
+
get: function () {
|
|
19
|
+
if (this._domSnapshot)
|
|
20
|
+
return this._domSnapshot;
|
|
21
|
+
if (!this.stringifiedDOM) {
|
|
22
|
+
throw new Error("DOM snapshot is not available - please set the `snapshotDOM` option");
|
|
23
|
+
}
|
|
24
|
+
var virtualConsole = new VirtualConsole();
|
|
25
|
+
var stackTrace = captureStackTrace("RenderInstance.get");
|
|
26
|
+
virtualConsole.on("jsdomError", function (error) {
|
|
27
|
+
throw applyStackTrace(error, stackTrace);
|
|
28
|
+
});
|
|
29
|
+
var snapDOM = new JSDOM(this.stringifiedDOM, {
|
|
30
|
+
runScripts: "dangerously",
|
|
31
|
+
virtualConsole: virtualConsole,
|
|
32
|
+
});
|
|
33
|
+
var document = snapDOM.window.document;
|
|
34
|
+
var body = document.body;
|
|
35
|
+
var script = document.createElement("script");
|
|
36
|
+
script.type = "text/javascript";
|
|
37
|
+
script.text = "\n ".concat(errorOnDomInteraction.toString(), ";\n ").concat(errorOnDomInteraction.name, "();\n ");
|
|
38
|
+
body.appendChild(script);
|
|
39
|
+
body.removeChild(script);
|
|
40
|
+
return (this._domSnapshot = body);
|
|
41
|
+
},
|
|
42
|
+
enumerable: false,
|
|
43
|
+
configurable: true
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(RenderInstance.prototype, "withinDOM", {
|
|
46
|
+
get: function () {
|
|
47
|
+
var _this = this;
|
|
48
|
+
var snapScreen = Object.assign(within(this.domSnapshot), {
|
|
49
|
+
debug: function () {
|
|
50
|
+
var _a = [];
|
|
51
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
52
|
+
_a[_i] = arguments[_i];
|
|
53
|
+
}
|
|
54
|
+
var _b = _a[0], dom = _b === void 0 ? _this.domSnapshot : _b, rest = _a.slice(1);
|
|
55
|
+
screen.debug.apply(screen, __spreadArray([dom], rest, false));
|
|
56
|
+
},
|
|
57
|
+
logTestingPlaygroundURL: function () {
|
|
58
|
+
var _a = [];
|
|
59
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
60
|
+
_a[_i] = arguments[_i];
|
|
61
|
+
}
|
|
62
|
+
var _b = _a[0], dom = _b === void 0 ? _this.domSnapshot : _b, rest = _a.slice(1);
|
|
63
|
+
screen.logTestingPlaygroundURL.apply(screen, __spreadArray([dom], rest, false));
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
return function () { return snapScreen; };
|
|
67
|
+
},
|
|
68
|
+
enumerable: false,
|
|
69
|
+
configurable: true
|
|
70
|
+
});
|
|
71
|
+
return RenderInstance;
|
|
72
|
+
}());
|
|
73
|
+
export { RenderInstance };
|
|
74
|
+
export function errorOnDomInteraction() {
|
|
75
|
+
var events = [
|
|
76
|
+
"auxclick",
|
|
77
|
+
"blur",
|
|
78
|
+
"change",
|
|
79
|
+
"click",
|
|
80
|
+
"copy",
|
|
81
|
+
"cut",
|
|
82
|
+
"dblclick",
|
|
83
|
+
"drag",
|
|
84
|
+
"dragend",
|
|
85
|
+
"dragenter",
|
|
86
|
+
"dragleave",
|
|
87
|
+
"dragover",
|
|
88
|
+
"dragstart",
|
|
89
|
+
"drop",
|
|
90
|
+
"focus",
|
|
91
|
+
"focusin",
|
|
92
|
+
"focusout",
|
|
93
|
+
"input",
|
|
94
|
+
"keydown",
|
|
95
|
+
"keypress",
|
|
96
|
+
"keyup",
|
|
97
|
+
"mousedown",
|
|
98
|
+
"mouseenter",
|
|
99
|
+
"mouseleave",
|
|
100
|
+
"mousemove",
|
|
101
|
+
"mouseout",
|
|
102
|
+
"mouseover",
|
|
103
|
+
"mouseup",
|
|
104
|
+
"paste",
|
|
105
|
+
"pointercancel",
|
|
106
|
+
"pointerdown",
|
|
107
|
+
"pointerenter",
|
|
108
|
+
"pointerleave",
|
|
109
|
+
"pointermove",
|
|
110
|
+
"pointerout",
|
|
111
|
+
"pointerover",
|
|
112
|
+
"pointerup",
|
|
113
|
+
"scroll",
|
|
114
|
+
"select",
|
|
115
|
+
"selectionchange",
|
|
116
|
+
"selectstart",
|
|
117
|
+
"submit",
|
|
118
|
+
"toggle",
|
|
119
|
+
"touchcancel",
|
|
120
|
+
"touchend",
|
|
121
|
+
"touchmove",
|
|
122
|
+
"touchstart",
|
|
123
|
+
"wheel",
|
|
124
|
+
];
|
|
125
|
+
function warnOnDomInteraction() {
|
|
126
|
+
throw new Error("\n DOM interaction with a snapshot detected in test.\n Please don't interact with the DOM you get from `withinDOM`,\n but still use `screen' to get elements for simulating user interaction.\n ");
|
|
127
|
+
}
|
|
128
|
+
events.forEach(function (event) {
|
|
129
|
+
document.addEventListener(event, warnOnDomInteraction);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=Render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Render.js","sourceRoot":"","sources":["../../../../src/testing/internal/profile/Render.tsx"],"names":[],"mappings":"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","sourcesContent":["/* istanbul ignore file */\n\n/*\nSomething in this file does not compile correctly while measuring code coverage\nand will lead to a\n Uncaught [ReferenceError: cov_1zb8w312au is not defined]\nif we do not ignore this file in code coverage.\n\nAs we only use this file in our internal tests, we can safely ignore it.\n*/\n\nimport { within, screen } from \"@testing-library/dom\";\nimport { JSDOM, VirtualConsole } from \"jsdom\";\nimport { applyStackTrace, captureStackTrace } from \"./traces.js\";\n\n/** @internal */\nexport interface BaseRender {\n id: string;\n phase: \"mount\" | \"update\" | \"nested-update\";\n actualDuration: number;\n baseDuration: number;\n startTime: number;\n commitTime: number;\n /**\n * The number of renders that have happened so far (including this render).\n */\n count: number;\n}\n\ntype Screen = typeof screen;\n/** @internal */\nexport type SyncScreen = {\n [K in keyof Screen]: K extends `find${string}`\n ? {\n /** @deprecated A snapshot is static, so avoid async queries! */\n (...args: Parameters<Screen[K]>): ReturnType<Screen[K]>;\n }\n : Screen[K];\n};\n\n/** @internal */\nexport interface Render<Snapshot> extends BaseRender {\n /**\n * The snapshot, as returned by the `takeSnapshot` option of `profile`.\n * (If using `profileHook`, this is the return value of the hook.)\n */\n snapshot: Snapshot;\n /**\n * A DOM snapshot of the rendered component, if the `snapshotDOM`\n * option of `profile` was enabled.\n */\n readonly domSnapshot: HTMLElement;\n /**\n * Returns a callback to receive a `screen` instance that is scoped to the\n * DOM snapshot of this `Render` instance.\n * Note: this is used as a callback to prevent linter errors.\n * @example\n * ```diff\n * const { withinDOM } = RenderedComponent.takeRender();\n * -expect(screen.getByText(\"foo\")).toBeInTheDocument();\n * +expect(withinDOM().getByText(\"foo\")).toBeInTheDocument();\n * ```\n */\n withinDOM: () => SyncScreen;\n}\n\n/** @internal */\nexport class RenderInstance<Snapshot> implements Render<Snapshot> {\n id: string;\n phase: \"mount\" | \"update\" | \"nested-update\";\n actualDuration: number;\n baseDuration: number;\n startTime: number;\n commitTime: number;\n count: number;\n\n constructor(\n baseRender: BaseRender,\n public snapshot: Snapshot,\n private stringifiedDOM: string | undefined\n ) {\n this.id = baseRender.id;\n this.phase = baseRender.phase;\n this.actualDuration = baseRender.actualDuration;\n this.baseDuration = baseRender.baseDuration;\n this.startTime = baseRender.startTime;\n this.commitTime = baseRender.commitTime;\n this.count = baseRender.count;\n }\n\n private _domSnapshot: HTMLElement | undefined;\n get domSnapshot() {\n if (this._domSnapshot) return this._domSnapshot;\n if (!this.stringifiedDOM) {\n throw new Error(\n \"DOM snapshot is not available - please set the `snapshotDOM` option\"\n );\n }\n\n const virtualConsole = new VirtualConsole();\n const stackTrace = captureStackTrace(\"RenderInstance.get\");\n virtualConsole.on(\"jsdomError\", (error) => {\n throw applyStackTrace(error, stackTrace);\n });\n\n const snapDOM = new JSDOM(this.stringifiedDOM, {\n runScripts: \"dangerously\",\n virtualConsole,\n });\n const document = snapDOM.window.document;\n const body = document.body;\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.text = `\n ${errorOnDomInteraction.toString()};\n ${errorOnDomInteraction.name}();\n `;\n body.appendChild(script);\n body.removeChild(script);\n\n return (this._domSnapshot = body);\n }\n\n get withinDOM() {\n const snapScreen = Object.assign(within(this.domSnapshot), {\n debug: (\n ...[dom = this.domSnapshot, ...rest]: Parameters<typeof screen.debug>\n ) => {\n screen.debug(dom, ...rest);\n },\n logTestingPlaygroundURL: (\n ...[dom = this.domSnapshot, ...rest]: Parameters<\n typeof screen.logTestingPlaygroundURL\n >\n ) => {\n screen.logTestingPlaygroundURL(dom, ...rest);\n },\n });\n return () => snapScreen;\n }\n}\n/** @internal */\nexport function errorOnDomInteraction() {\n const events: Array<keyof DocumentEventMap> = [\n \"auxclick\",\n \"blur\",\n \"change\",\n \"click\",\n \"copy\",\n \"cut\",\n \"dblclick\",\n \"drag\",\n \"dragend\",\n \"dragenter\",\n \"dragleave\",\n \"dragover\",\n \"dragstart\",\n \"drop\",\n \"focus\",\n \"focusin\",\n \"focusout\",\n \"input\",\n \"keydown\",\n \"keypress\",\n \"keyup\",\n \"mousedown\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseout\",\n \"mouseover\",\n \"mouseup\",\n \"paste\",\n \"pointercancel\",\n \"pointerdown\",\n \"pointerenter\",\n \"pointerleave\",\n \"pointermove\",\n \"pointerout\",\n \"pointerover\",\n \"pointerup\",\n \"scroll\",\n \"select\",\n \"selectionchange\",\n \"selectstart\",\n \"submit\",\n \"toggle\",\n \"touchcancel\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\",\n \"wheel\",\n ];\n function warnOnDomInteraction() {\n throw new Error(`\n DOM interaction with a snapshot detected in test.\n Please don't interact with the DOM you get from \\`withinDOM\\`,\n but still use \\`screen\\' to get elements for simulating user interaction.\n `);\n }\n events.forEach((event) => {\n document.addEventListener(event, warnOnDomInteraction);\n });\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/internal/profile/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAE/E,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/testing/internal/profile/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["export type {\n NextRenderOptions,\n ProfiledComponent,\n ProfiledHook,\n} from \"./profile.js\";\nexport { profile, profileHook, WaitForRenderTimeoutError } from \"./profile.js\";\n\nexport type { SyncScreen } from \"./Render.js\";\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { Render, BaseRender } from "./Render.js";
|
|
3
|
+
type ValidSnapshot = void | (object & {
|
|
4
|
+
call?: never;
|
|
5
|
+
});
|
|
6
|
+
declare const _stackTrace: unique symbol;
|
|
7
|
+
export interface NextRenderOptions {
|
|
8
|
+
timeout?: number;
|
|
9
|
+
[_stackTrace]?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ProfiledComponent<Props, Snapshot> extends React.FC<Props>, ProfiledComponentFields<Props, Snapshot>, ProfiledComponenOnlyFields<Props, Snapshot> {
|
|
12
|
+
}
|
|
13
|
+
interface UpdateSnapshot<Snapshot> {
|
|
14
|
+
(newSnapshot: Snapshot): void;
|
|
15
|
+
(updateSnapshot: (lastSnapshot: Readonly<Snapshot>) => Snapshot): void;
|
|
16
|
+
}
|
|
17
|
+
interface ProfiledComponenOnlyFields<Props, Snapshot> {
|
|
18
|
+
updateSnapshot: UpdateSnapshot<Snapshot>;
|
|
19
|
+
}
|
|
20
|
+
interface ProfiledComponentFields<Props, Snapshot> {
|
|
21
|
+
renders: Array<Render<Snapshot> | {
|
|
22
|
+
phase: "snapshotError";
|
|
23
|
+
count: number;
|
|
24
|
+
error: unknown;
|
|
25
|
+
}>;
|
|
26
|
+
peekRender(options?: NextRenderOptions): Promise<Render<Snapshot>>;
|
|
27
|
+
takeRender(options?: NextRenderOptions): Promise<Render<Snapshot>>;
|
|
28
|
+
currentRenderCount(): number;
|
|
29
|
+
getCurrentRender(): Render<Snapshot>;
|
|
30
|
+
takeUntilRenderCount(count: number, optionsPerRender?: NextRenderOptions): Promise<void>;
|
|
31
|
+
waitForNextRender(options?: NextRenderOptions): Promise<Render<Snapshot>>;
|
|
32
|
+
}
|
|
33
|
+
export declare function profile<Snapshot extends ValidSnapshot = void, Props = Record<string, never>>({ Component, onRender, snapshotDOM, initialSnapshot, }: {
|
|
34
|
+
Component: React.ComponentType<Props>;
|
|
35
|
+
onRender?: (info: BaseRender & {
|
|
36
|
+
snapshot: Snapshot;
|
|
37
|
+
updateSnapshot: UpdateSnapshot<Snapshot>;
|
|
38
|
+
}) => void;
|
|
39
|
+
snapshotDOM?: boolean;
|
|
40
|
+
initialSnapshot?: Snapshot;
|
|
41
|
+
}): ProfiledComponent<Props, Snapshot>;
|
|
42
|
+
export declare class WaitForRenderTimeoutError extends Error {
|
|
43
|
+
constructor();
|
|
44
|
+
}
|
|
45
|
+
type StringReplaceRenderWithSnapshot<T extends string> = T extends `${infer Pre}Render${infer Post}` ? `${Pre}Snapshot${Post}` : T;
|
|
46
|
+
type ResultReplaceRenderWithSnapshot<T> = T extends (...args: infer Args) => Render<infer Snapshot> ? (...args: Args) => Snapshot : T extends (...args: infer Args) => Promise<Render<infer Snapshot>> ? (...args: Args) => Promise<Snapshot> : T;
|
|
47
|
+
type ProfiledHookFields<Props, ReturnValue> = ProfiledComponentFields<Props, ReturnValue> extends infer PC ? {
|
|
48
|
+
[K in keyof PC as StringReplaceRenderWithSnapshot<K & string>]: ResultReplaceRenderWithSnapshot<PC[K]>;
|
|
49
|
+
} : never;
|
|
50
|
+
export interface ProfiledHook<Props, ReturnValue> extends React.FC<Props>, ProfiledHookFields<Props, ReturnValue> {
|
|
51
|
+
ProfiledComponent: ProfiledComponent<Props, ReturnValue>;
|
|
52
|
+
}
|
|
53
|
+
export declare function profileHook<ReturnValue extends ValidSnapshot, Props>(renderCallback: (props: Props) => ReturnValue): ProfiledHook<Props, ReturnValue>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../../src/testing/internal/profile/profile.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
var _a, _b;
|
|
2
|
+
import { __assign, __awaiter, __extends, __generator } from "tslib";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { TextEncoder, TextDecoder } from "util";
|
|
5
|
+
(_a = global.TextEncoder) !== null && _a !== void 0 ? _a : (global.TextEncoder = TextEncoder);
|
|
6
|
+
(_b = global.TextDecoder) !== null && _b !== void 0 ? _b : (global.TextDecoder = TextDecoder);
|
|
7
|
+
import { RenderInstance } from "./Render.js";
|
|
8
|
+
import { applyStackTrace, captureStackTrace } from "./traces.js";
|
|
9
|
+
var _stackTrace = Symbol();
|
|
10
|
+
export function profile(_a) {
|
|
11
|
+
var Component = _a.Component, onRender = _a.onRender, _b = _a.snapshotDOM, snapshotDOM = _b === void 0 ? false : _b, initialSnapshot = _a.initialSnapshot;
|
|
12
|
+
var currentRender;
|
|
13
|
+
var nextRender;
|
|
14
|
+
var resolveNextRender;
|
|
15
|
+
var rejectNextRender;
|
|
16
|
+
var snapshotRef = { current: initialSnapshot };
|
|
17
|
+
var updateSnapshot = function (snap) {
|
|
18
|
+
if (typeof snap === "function") {
|
|
19
|
+
if (!initialSnapshot) {
|
|
20
|
+
throw new Error("Cannot use a function to update the snapshot if no initial snapshot was provided.");
|
|
21
|
+
}
|
|
22
|
+
snapshotRef.current = snap(typeof snapshotRef.current === "object"
|
|
23
|
+
? __assign({}, snapshotRef.current) : snapshotRef.current);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
snapshotRef.current = snap;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var profilerOnRender = function (id, phase, actualDuration, baseDuration, startTime, commitTime) {
|
|
30
|
+
var baseRender = {
|
|
31
|
+
id: id,
|
|
32
|
+
phase: phase,
|
|
33
|
+
actualDuration: actualDuration,
|
|
34
|
+
baseDuration: baseDuration,
|
|
35
|
+
startTime: startTime,
|
|
36
|
+
commitTime: commitTime,
|
|
37
|
+
count: Profiled.renders.length + 1,
|
|
38
|
+
};
|
|
39
|
+
try {
|
|
40
|
+
onRender === null || onRender === void 0 ? void 0 : onRender(__assign(__assign({}, baseRender), { updateSnapshot: updateSnapshot, snapshot: snapshotRef.current }));
|
|
41
|
+
var snapshot = snapshotRef.current;
|
|
42
|
+
var domSnapshot = snapshotDOM
|
|
43
|
+
? window.document.body.innerHTML
|
|
44
|
+
: undefined;
|
|
45
|
+
var render = new RenderInstance(baseRender, snapshot, domSnapshot);
|
|
46
|
+
currentRender = render;
|
|
47
|
+
Profiled.renders.push(render);
|
|
48
|
+
resolveNextRender === null || resolveNextRender === void 0 ? void 0 : resolveNextRender(render);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
Profiled.renders.push({
|
|
52
|
+
phase: "snapshotError",
|
|
53
|
+
count: Profiled.renders.length,
|
|
54
|
+
error: error,
|
|
55
|
+
});
|
|
56
|
+
rejectNextRender === null || rejectNextRender === void 0 ? void 0 : rejectNextRender(error);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
nextRender = resolveNextRender = rejectNextRender = undefined;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var iteratorPosition = 0;
|
|
63
|
+
var Profiled = Object.assign(function (props) { return (React.createElement(React.Profiler, { id: "test", onRender: profilerOnRender },
|
|
64
|
+
React.createElement(Component, __assign({}, props)))); }, {
|
|
65
|
+
updateSnapshot: updateSnapshot,
|
|
66
|
+
}, {
|
|
67
|
+
renders: new Array(),
|
|
68
|
+
currentRenderCount: function () {
|
|
69
|
+
return Profiled.renders.length;
|
|
70
|
+
},
|
|
71
|
+
peekRender: function (options) {
|
|
72
|
+
if (options === void 0) { options = {}; }
|
|
73
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
74
|
+
var render_1, render;
|
|
75
|
+
var _a;
|
|
76
|
+
return __generator(this, function (_b) {
|
|
77
|
+
if (iteratorPosition < Profiled.renders.length) {
|
|
78
|
+
render_1 = Profiled.renders[iteratorPosition];
|
|
79
|
+
if (render_1.phase === "snapshotError") {
|
|
80
|
+
throw render_1.error;
|
|
81
|
+
}
|
|
82
|
+
return [2, render_1];
|
|
83
|
+
}
|
|
84
|
+
render = Profiled.waitForNextRender(__assign((_a = {}, _a[_stackTrace] = captureStackTrace(Profiled.peekRender), _a), options));
|
|
85
|
+
return [2, render];
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
takeRender: function (options) {
|
|
90
|
+
if (options === void 0) { options = {}; }
|
|
91
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
92
|
+
var error, e_1;
|
|
93
|
+
var _a;
|
|
94
|
+
return __generator(this, function (_b) {
|
|
95
|
+
switch (_b.label) {
|
|
96
|
+
case 0:
|
|
97
|
+
error = undefined;
|
|
98
|
+
_b.label = 1;
|
|
99
|
+
case 1:
|
|
100
|
+
_b.trys.push([1, 3, 4, 5]);
|
|
101
|
+
return [4, Profiled.peekRender(__assign((_a = {}, _a[_stackTrace] = captureStackTrace(Profiled.takeRender), _a), options))];
|
|
102
|
+
case 2: return [2, _b.sent()];
|
|
103
|
+
case 3:
|
|
104
|
+
e_1 = _b.sent();
|
|
105
|
+
error = e_1;
|
|
106
|
+
throw e_1;
|
|
107
|
+
case 4:
|
|
108
|
+
if (!(error && error instanceof WaitForRenderTimeoutError)) {
|
|
109
|
+
iteratorPosition++;
|
|
110
|
+
}
|
|
111
|
+
return [7];
|
|
112
|
+
case 5: return [2];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
},
|
|
117
|
+
getCurrentRender: function () {
|
|
118
|
+
if (!currentRender) {
|
|
119
|
+
throw new Error("Has not been rendered yet!");
|
|
120
|
+
}
|
|
121
|
+
return currentRender;
|
|
122
|
+
},
|
|
123
|
+
takeUntilRenderCount: function (count, optionsPerRender) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
125
|
+
return __generator(this, function (_a) {
|
|
126
|
+
switch (_a.label) {
|
|
127
|
+
case 0:
|
|
128
|
+
if (!(Profiled.renders.length < count)) return [3, 2];
|
|
129
|
+
return [4, Profiled.takeRender(optionsPerRender)];
|
|
130
|
+
case 1:
|
|
131
|
+
_a.sent();
|
|
132
|
+
return [3, 0];
|
|
133
|
+
case 2: return [2];
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
waitForNextRender: function (_a) {
|
|
139
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.timeout, timeout = _c === void 0 ? 1000 : _c, _d = _stackTrace, _e = _b[_d], stackTrace = _e === void 0 ? captureStackTrace(Profiled.waitForNextRender) : _e;
|
|
140
|
+
if (!nextRender) {
|
|
141
|
+
nextRender = Promise.race([
|
|
142
|
+
new Promise(function (resolve, reject) {
|
|
143
|
+
resolveNextRender = resolve;
|
|
144
|
+
rejectNextRender = reject;
|
|
145
|
+
}),
|
|
146
|
+
new Promise(function (_, reject) {
|
|
147
|
+
return setTimeout(function () {
|
|
148
|
+
return reject(applyStackTrace(new WaitForRenderTimeoutError(), stackTrace));
|
|
149
|
+
}, timeout);
|
|
150
|
+
}),
|
|
151
|
+
]);
|
|
152
|
+
}
|
|
153
|
+
return nextRender;
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
return Profiled;
|
|
157
|
+
}
|
|
158
|
+
var WaitForRenderTimeoutError = (function (_super) {
|
|
159
|
+
__extends(WaitForRenderTimeoutError, _super);
|
|
160
|
+
function WaitForRenderTimeoutError() {
|
|
161
|
+
var _newTarget = this.constructor;
|
|
162
|
+
var _this = _super.call(this, "Exceeded timeout waiting for next render.") || this;
|
|
163
|
+
Object.setPrototypeOf(_this, _newTarget.prototype);
|
|
164
|
+
return _this;
|
|
165
|
+
}
|
|
166
|
+
return WaitForRenderTimeoutError;
|
|
167
|
+
}(Error));
|
|
168
|
+
export { WaitForRenderTimeoutError };
|
|
169
|
+
export function profileHook(renderCallback) {
|
|
170
|
+
var returnValue;
|
|
171
|
+
var Component = function (props) {
|
|
172
|
+
ProfiledComponent.updateSnapshot(renderCallback(props));
|
|
173
|
+
return null;
|
|
174
|
+
};
|
|
175
|
+
var ProfiledComponent = profile({
|
|
176
|
+
Component: Component,
|
|
177
|
+
onRender: function () { return returnValue; },
|
|
178
|
+
});
|
|
179
|
+
return Object.assign(function ProfiledHook(props) {
|
|
180
|
+
return React.createElement(ProfiledComponent, __assign({}, props));
|
|
181
|
+
}, {
|
|
182
|
+
ProfiledComponent: ProfiledComponent,
|
|
183
|
+
}, {
|
|
184
|
+
renders: ProfiledComponent.renders,
|
|
185
|
+
currentSnapshotCount: ProfiledComponent.currentRenderCount,
|
|
186
|
+
peekSnapshot: function (options) {
|
|
187
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
188
|
+
return __generator(this, function (_a) {
|
|
189
|
+
switch (_a.label) {
|
|
190
|
+
case 0: return [4, ProfiledComponent.peekRender(options)];
|
|
191
|
+
case 1: return [2, (_a.sent()).snapshot];
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
takeSnapshot: function (options) {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
198
|
+
return __generator(this, function (_a) {
|
|
199
|
+
switch (_a.label) {
|
|
200
|
+
case 0: return [4, ProfiledComponent.takeRender(options)];
|
|
201
|
+
case 1: return [2, (_a.sent()).snapshot];
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
getCurrentSnapshot: function () {
|
|
207
|
+
return ProfiledComponent.getCurrentRender().snapshot;
|
|
208
|
+
},
|
|
209
|
+
takeUntilSnapshotCount: ProfiledComponent.takeUntilRenderCount,
|
|
210
|
+
waitForNextSnapshot: function (options) {
|
|
211
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
212
|
+
return __generator(this, function (_a) {
|
|
213
|
+
switch (_a.label) {
|
|
214
|
+
case 0: return [4, ProfiledComponent.waitForNextRender(options)];
|
|
215
|
+
case 1: return [2, (_a.sent()).snapshot];
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../../src/testing/internal/profile/profile.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\n\nimport { TextEncoder, TextDecoder } from \"util\";\n\nglobal.TextEncoder ??= TextEncoder;\n// @ts-ignore\nglobal.TextDecoder ??= TextDecoder;\nimport type { Render, BaseRender } from \"./Render.js\";\nimport { RenderInstance } from \"./Render.js\";\nimport { applyStackTrace, captureStackTrace } from \"./traces.js\";\n\ntype ValidSnapshot = void | (object & { /* not a function */ call?: never });\n\n/** only used for passing around data internally */\nconst _stackTrace = Symbol();\n/** @internal */\nexport interface NextRenderOptions {\n timeout?: number;\n [_stackTrace]?: string;\n}\n\n/** @internal */\nexport interface ProfiledComponent<Props, Snapshot>\n extends React.FC<Props>,\n ProfiledComponentFields<Props, Snapshot>,\n ProfiledComponenOnlyFields<Props, Snapshot> {}\n\ninterface UpdateSnapshot<Snapshot> {\n (newSnapshot: Snapshot): void;\n (updateSnapshot: (lastSnapshot: Readonly<Snapshot>) => Snapshot): void;\n}\n\ninterface ProfiledComponenOnlyFields<Props, Snapshot> {\n updateSnapshot: UpdateSnapshot<Snapshot>;\n}\ninterface ProfiledComponentFields<Props, Snapshot> {\n /**\n * An array of all renders that have happened so far.\n * Errors thrown during component render will be captured here, too.\n */\n renders: Array<\n Render<Snapshot> | { phase: \"snapshotError\"; count: number; error: unknown }\n >;\n /**\n * Peeks the next render from the current iterator position, without advancing the iterator.\n * If no render has happened yet, it will wait for the next render to happen.\n * @throws {WaitForRenderTimeoutError} if no render happens within the timeout\n */\n peekRender(options?: NextRenderOptions): Promise<Render<Snapshot>>;\n /**\n * Iterates to the next render and returns it.\n * If no render has happened yet, it will wait for the next render to happen.\n * @throws {WaitForRenderTimeoutError} if no render happens within the timeout\n */\n takeRender(options?: NextRenderOptions): Promise<Render<Snapshot>>;\n /**\n * Returns the current render count.\n */\n currentRenderCount(): number;\n /**\n * Returns the current render.\n * @throws {Error} if no render has happened yet\n */\n getCurrentRender(): Render<Snapshot>;\n /**\n * Iterates the renders until the render count is reached.\n */\n takeUntilRenderCount(\n count: number,\n optionsPerRender?: NextRenderOptions\n ): Promise<void>;\n /**\n * Waits for the next render to happen.\n * Does not advance the render iterator.\n */\n waitForNextRender(options?: NextRenderOptions): Promise<Render<Snapshot>>;\n}\n\n/** @internal */\nexport function profile<\n Snapshot extends ValidSnapshot = void,\n Props = Record<string, never>,\n>({\n Component,\n onRender,\n snapshotDOM = false,\n initialSnapshot,\n}: {\n Component: React.ComponentType<Props>;\n onRender?: (\n info: BaseRender & {\n snapshot: Snapshot;\n updateSnapshot: UpdateSnapshot<Snapshot>;\n }\n ) => void;\n snapshotDOM?: boolean;\n initialSnapshot?: Snapshot;\n}) {\n let currentRender: Render<Snapshot> | undefined;\n let nextRender: Promise<Render<Snapshot>> | undefined;\n let resolveNextRender: ((render: Render<Snapshot>) => void) | undefined;\n let rejectNextRender: ((error: unknown) => void) | undefined;\n const snapshotRef = { current: initialSnapshot };\n const updateSnapshot: UpdateSnapshot<Snapshot> = (snap) => {\n if (typeof snap === \"function\") {\n if (!initialSnapshot) {\n throw new Error(\n \"Cannot use a function to update the snapshot if no initial snapshot was provided.\"\n );\n }\n snapshotRef.current = snap(\n typeof snapshotRef.current === \"object\"\n ? // \"cheap best effort\" to prevent accidental mutation of the last snapshot\n { ...snapshotRef.current! }\n : snapshotRef.current!\n );\n } else {\n snapshotRef.current = snap;\n }\n };\n const profilerOnRender: React.ProfilerOnRenderCallback = (\n id,\n phase,\n actualDuration,\n baseDuration,\n startTime,\n commitTime\n ) => {\n const baseRender = {\n id,\n phase,\n actualDuration,\n baseDuration,\n startTime,\n commitTime,\n count: Profiled.renders.length + 1,\n };\n try {\n /*\n * The `onRender` function could contain `expect` calls that throw\n * `JestAssertionError`s - but we are still inside of React, where errors\n * might be swallowed.\n * So we record them and re-throw them in `takeRender`\n * Additionally, we reject the `waitForNextRender` promise.\n */\n onRender?.({\n ...baseRender,\n updateSnapshot,\n snapshot: snapshotRef.current!,\n });\n\n const snapshot = snapshotRef.current as Snapshot;\n const domSnapshot = snapshotDOM\n ? window.document.body.innerHTML\n : undefined;\n const render = new RenderInstance(baseRender, snapshot, domSnapshot);\n // eslint-disable-next-line testing-library/render-result-naming-convention\n currentRender = render;\n Profiled.renders.push(render);\n resolveNextRender?.(render);\n } catch (error) {\n Profiled.renders.push({\n phase: \"snapshotError\",\n count: Profiled.renders.length,\n error,\n });\n rejectNextRender?.(error);\n } finally {\n nextRender = resolveNextRender = rejectNextRender = undefined;\n }\n };\n\n let iteratorPosition = 0;\n const Profiled: ProfiledComponent<Props, Snapshot> = Object.assign(\n (props: Props) => (\n <React.Profiler id=\"test\" onRender={profilerOnRender}>\n <Component {...(props as any)} />\n </React.Profiler>\n ),\n {\n updateSnapshot,\n } satisfies ProfiledComponenOnlyFields<Props, Snapshot>,\n {\n renders: new Array<\n | Render<Snapshot>\n | { phase: \"snapshotError\"; count: number; error: unknown }\n >(),\n currentRenderCount() {\n return Profiled.renders.length;\n },\n async peekRender(options: NextRenderOptions = {}) {\n if (iteratorPosition < Profiled.renders.length) {\n const render = Profiled.renders[iteratorPosition];\n if (render.phase === \"snapshotError\") {\n throw render.error;\n }\n return render;\n }\n const render = Profiled.waitForNextRender({\n [_stackTrace]: captureStackTrace(Profiled.peekRender),\n ...options,\n });\n return render;\n },\n async takeRender(options: NextRenderOptions = {}) {\n let error: { message?: string } | undefined = undefined;\n try {\n return await Profiled.peekRender({\n [_stackTrace]: captureStackTrace(Profiled.takeRender),\n ...options,\n });\n } catch (e) {\n error = e;\n throw e;\n } finally {\n if (!(error && error instanceof WaitForRenderTimeoutError)) {\n iteratorPosition++;\n }\n }\n },\n getCurrentRender() {\n if (!currentRender) {\n throw new Error(\"Has not been rendered yet!\");\n }\n return currentRender;\n },\n async takeUntilRenderCount(\n count: number,\n optionsPerRender?: NextRenderOptions\n ) {\n while (Profiled.renders.length < count) {\n await Profiled.takeRender(optionsPerRender);\n }\n },\n waitForNextRender({\n timeout = 1000,\n // capture the stack trace here so its stack trace is as close to the calling code as possible\n [_stackTrace]: stackTrace = captureStackTrace(\n Profiled.waitForNextRender\n ),\n }: NextRenderOptions = {}) {\n if (!nextRender) {\n nextRender = Promise.race<Render<Snapshot>>([\n new Promise<Render<Snapshot>>((resolve, reject) => {\n resolveNextRender = resolve;\n rejectNextRender = reject;\n }),\n new Promise<Render<Snapshot>>((_, reject) =>\n setTimeout(\n () =>\n reject(\n applyStackTrace(new WaitForRenderTimeoutError(), stackTrace)\n ),\n timeout\n )\n ),\n ]);\n }\n return nextRender;\n },\n } satisfies ProfiledComponentFields<Props, Snapshot>\n );\n return Profiled;\n}\n\n/** @internal */\nexport class WaitForRenderTimeoutError extends Error {\n constructor() {\n super(\"Exceeded timeout waiting for next render.\");\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\ntype StringReplaceRenderWithSnapshot<T extends string> =\n T extends `${infer Pre}Render${infer Post}` ? `${Pre}Snapshot${Post}` : T;\n\ntype ResultReplaceRenderWithSnapshot<T> = T extends (\n ...args: infer Args\n) => Render<infer Snapshot>\n ? (...args: Args) => Snapshot\n : T extends (...args: infer Args) => Promise<Render<infer Snapshot>>\n ? (...args: Args) => Promise<Snapshot>\n : T;\n\ntype ProfiledHookFields<Props, ReturnValue> = ProfiledComponentFields<\n Props,\n ReturnValue\n> extends infer PC\n ? {\n [K in keyof PC as StringReplaceRenderWithSnapshot<\n K & string\n >]: ResultReplaceRenderWithSnapshot<PC[K]>;\n }\n : never;\n\n/** @internal */\nexport interface ProfiledHook<Props, ReturnValue>\n extends React.FC<Props>,\n ProfiledHookFields<Props, ReturnValue> {\n ProfiledComponent: ProfiledComponent<Props, ReturnValue>;\n}\n\n/** @internal */\nexport function profileHook<ReturnValue extends ValidSnapshot, Props>(\n renderCallback: (props: Props) => ReturnValue\n): ProfiledHook<Props, ReturnValue> {\n let returnValue: ReturnValue;\n const Component = (props: Props) => {\n ProfiledComponent.updateSnapshot(renderCallback(props));\n return null;\n };\n const ProfiledComponent = profile<ReturnValue, Props>({\n Component,\n onRender: () => returnValue,\n });\n return Object.assign(\n function ProfiledHook(props: Props) {\n return <ProfiledComponent {...(props as any)} />;\n },\n {\n ProfiledComponent,\n },\n {\n renders: ProfiledComponent.renders,\n currentSnapshotCount: ProfiledComponent.currentRenderCount,\n async peekSnapshot(options) {\n return (await ProfiledComponent.peekRender(options)).snapshot;\n },\n async takeSnapshot(options) {\n return (await ProfiledComponent.takeRender(options)).snapshot;\n },\n getCurrentSnapshot() {\n return ProfiledComponent.getCurrentRender().snapshot;\n },\n takeUntilSnapshotCount: ProfiledComponent.takeUntilRenderCount,\n async waitForNextSnapshot(options) {\n return (await ProfiledComponent.waitForNextRender(options)).snapshot;\n },\n } satisfies ProfiledHookFields<Props, ReturnValue>\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../../src/testing/internal/profile/traces.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,UA2BtE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAG/D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function captureStackTrace(callingFunction) {
|
|
2
|
+
var stack = "";
|
|
3
|
+
try {
|
|
4
|
+
throw new Error("");
|
|
5
|
+
}
|
|
6
|
+
catch (e) {
|
|
7
|
+
(stack = e.stack);
|
|
8
|
+
}
|
|
9
|
+
var callerName = typeof callingFunction === "string"
|
|
10
|
+
? callingFunction
|
|
11
|
+
: callingFunction
|
|
12
|
+
? callingFunction.name
|
|
13
|
+
: undefined;
|
|
14
|
+
if (callerName && stack.includes(callerName)) {
|
|
15
|
+
var lines = stack.split("\n");
|
|
16
|
+
stack = lines
|
|
17
|
+
.slice(lines.findLastIndex(function (line) { return line.includes(callerName); }) + 1)
|
|
18
|
+
.join("\n");
|
|
19
|
+
}
|
|
20
|
+
return stack;
|
|
21
|
+
}
|
|
22
|
+
export function applyStackTrace(error, stackTrace) {
|
|
23
|
+
error.stack = error.message + "\n" + stackTrace;
|
|
24
|
+
return error;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=traces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../../src/testing/internal/profile/traces.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,iBAAiB,CAAC,eAAqC;IACrE,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI;QACF,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;KACrB;IAAC,OAAO,CAAM,EAAE;QACf,CAAG,KAAK,GAAK,CAAC,MAAN,CAAO,CAAC;KACjB;IAED,IAAM,UAAU,GACd,OAAO,eAAe,KAAK,QAAQ;QACjC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe,CAAC,IAAI;YACtB,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC5C,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,KAAK,GAAG,KAAK;aACV,KAAK,CAEJ,KAAK,CAAC,aAAa,CAAC,UAAC,IAAY,IAAK,OAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAzB,CAAyB,CAAC,GAAG,CAAC,CACrE;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,UAAkB;IAC9D,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Captures a StackTrace and (if passed) cuts off\n * the first lines including the calling function.\n */\nexport function captureStackTrace(callingFunction?: string | (() => {})) {\n let stack = \"\";\n try {\n throw new Error(\"\");\n } catch (e: any) {\n ({ stack } = e);\n }\n\n const callerName =\n typeof callingFunction === \"string\"\n ? callingFunction\n : callingFunction\n ? callingFunction.name\n : undefined;\n\n if (callerName && stack.includes(callerName)) {\n const lines = stack.split(\"\\n\");\n\n stack = lines\n .slice(\n // @ts-expect-error this is too old of a TS target, but node has it\n lines.findLastIndex((line: string) => line.includes(callerName)) + 1\n )\n .join(\"\\n\");\n }\n\n return stack;\n}\n\nexport function applyStackTrace(error: Error, stackTrace: string) {\n error.stack = error.message + \"\\n\" + stackTrace;\n return error;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MatcherFunction } from "expect";
|
|
2
|
+
import type { NextRenderOptions } from "../internal/index.js";
|
|
3
|
+
export declare const toRerender: MatcherFunction<[options?: NextRenderOptions]>;
|
|
4
|
+
export declare const toRenderExactlyTimes: MatcherFunction<[
|
|
5
|
+
times: number,
|
|
6
|
+
options?: NextRenderOptions
|
|
7
|
+
]>;
|
|
8
|
+
//# sourceMappingURL=ProfiledComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfiledComponent.d.ts","sourceRoot":"","sources":["../../../src/testing/matchers/ProfiledComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,sBAAsB,CAAC;AAC9B,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,CA8BnE,CAAC;AAKJ,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD;IAAC,KAAK,EAAE,MAAM;IAAE,OAAO,CAAC,EAAE,iBAAiB;CAAC,CAgD7C,CAAC"}
|