@ls-stack/utils 1.9.0 → 1.11.0
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/testUtils.d.ts +15 -3
- package/dist/testUtils.js +55 -6
- package/dist/testUtils.js.map +1 -1
- package/package.json +1 -1
package/dist/testUtils.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
declare function createLoggerStore({ filterKeys: defaultFilterKeys, rejectKeys: defaultRejectKeys, }?: {
|
|
1
|
+
declare function createLoggerStore({ filterKeys: defaultFilterKeys, rejectKeys: defaultRejectKeys, splitLongLines: defaultSplitLongLines, maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit, fromLastSnapshot: defaultFromLastSnapshot, arrays: defaultArrays, changesOnly: defaultChangesOnly, }?: {
|
|
2
2
|
filterKeys?: string[];
|
|
3
3
|
rejectKeys?: string[];
|
|
4
|
+
splitLongLines?: true;
|
|
5
|
+
maxLineLengthBeforeSplit?: number;
|
|
6
|
+
fromLastSnapshot?: boolean;
|
|
7
|
+
arrays?: 'all' | 'firstAndLast' | 'length' | {
|
|
8
|
+
firstNItems: number;
|
|
9
|
+
};
|
|
10
|
+
changesOnly?: boolean;
|
|
4
11
|
}): {
|
|
5
12
|
add: (render: Record<string, unknown> | readonly Record<string, unknown>[]) => void;
|
|
6
13
|
reset: (keepLastRender?: boolean) => void;
|
|
7
|
-
getSnapshot: ({ arrays, changesOnly, filterKeys, rejectKeys, includeLastSnapshotEndMark, }?: {
|
|
14
|
+
getSnapshot: ({ arrays, changesOnly, filterKeys, rejectKeys, includeLastSnapshotEndMark, splitLongLines, maxLineLengthBeforeSplit, fromLastSnapshot, }?: {
|
|
8
15
|
arrays?: "all" | "firstAndLast" | "length" | {
|
|
9
16
|
firstNItems: number;
|
|
10
17
|
};
|
|
@@ -12,13 +19,18 @@ declare function createLoggerStore({ filterKeys: defaultFilterKeys, rejectKeys:
|
|
|
12
19
|
filterKeys?: string[];
|
|
13
20
|
rejectKeys?: string[];
|
|
14
21
|
includeLastSnapshotEndMark?: boolean;
|
|
22
|
+
splitLongLines?: boolean;
|
|
23
|
+
maxLineLengthBeforeSplit?: number;
|
|
24
|
+
fromLastSnapshot?: boolean;
|
|
15
25
|
}) => string;
|
|
16
26
|
waitNextLog: (timeout?: number) => Promise<void>;
|
|
17
27
|
readonly changesSnapshot: string;
|
|
18
28
|
readonly snapshot: string;
|
|
29
|
+
readonly snapshotFromLast: string;
|
|
19
30
|
logsCount: () => number;
|
|
20
31
|
readonly rendersTime: number[];
|
|
21
32
|
addMark: (label: string) => void;
|
|
22
33
|
};
|
|
34
|
+
declare function getResultFn<T extends (...args: any[]) => any>(fnGetter: () => T, wrapper?: (...args: any[]) => any): T;
|
|
23
35
|
|
|
24
|
-
export { createLoggerStore };
|
|
36
|
+
export { createLoggerStore, getResultFn };
|
package/dist/testUtils.js
CHANGED
|
@@ -19,7 +19,12 @@ import {
|
|
|
19
19
|
// src/testUtils.ts
|
|
20
20
|
function createLoggerStore({
|
|
21
21
|
filterKeys: defaultFilterKeys,
|
|
22
|
-
rejectKeys: defaultRejectKeys
|
|
22
|
+
rejectKeys: defaultRejectKeys,
|
|
23
|
+
splitLongLines: defaultSplitLongLines = true,
|
|
24
|
+
maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit = 80,
|
|
25
|
+
fromLastSnapshot: defaultFromLastSnapshot = false,
|
|
26
|
+
arrays: defaultArrays = { firstNItems: 1 },
|
|
27
|
+
changesOnly: defaultChangesOnly = false
|
|
23
28
|
} = {}) {
|
|
24
29
|
let logs = [];
|
|
25
30
|
let logsTime = [];
|
|
@@ -64,11 +69,14 @@ function createLoggerStore({
|
|
|
64
69
|
});
|
|
65
70
|
}
|
|
66
71
|
function getSnapshot({
|
|
67
|
-
arrays =
|
|
68
|
-
changesOnly =
|
|
72
|
+
arrays = defaultArrays,
|
|
73
|
+
changesOnly = defaultChangesOnly,
|
|
69
74
|
filterKeys = defaultFilterKeys,
|
|
70
75
|
rejectKeys = defaultRejectKeys,
|
|
71
|
-
includeLastSnapshotEndMark = true
|
|
76
|
+
includeLastSnapshotEndMark = true,
|
|
77
|
+
splitLongLines = defaultSplitLongLines,
|
|
78
|
+
maxLineLengthBeforeSplit = defaultMaxLineLengthBeforeSplit,
|
|
79
|
+
fromLastSnapshot = defaultFromLastSnapshot
|
|
72
80
|
} = {}) {
|
|
73
81
|
let rendersToUse = logs;
|
|
74
82
|
if (changesOnly || filterKeys || rejectKeys) {
|
|
@@ -91,6 +99,12 @@ function createLoggerStore({
|
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
}
|
|
102
|
+
if (fromLastSnapshot) {
|
|
103
|
+
const lastSnapshotMark = rendersToUse.findLastIndex(
|
|
104
|
+
(item) => item._lastSnapshotMark === true
|
|
105
|
+
);
|
|
106
|
+
rendersToUse = rendersToUse.slice(clampMin(lastSnapshotMark, 0));
|
|
107
|
+
}
|
|
94
108
|
logs.push({ _lastSnapshotMark: true });
|
|
95
109
|
return `
|
|
96
110
|
${filterAndMap(rendersToUse, (render, i) => {
|
|
@@ -140,6 +154,27 @@ ${filterAndMap(rendersToUse, (render, i) => {
|
|
|
140
154
|
line += `${key}: ${value} -- `;
|
|
141
155
|
}
|
|
142
156
|
line = line.slice(0, -4);
|
|
157
|
+
if (splitLongLines && line.length > maxLineLengthBeforeSplit) {
|
|
158
|
+
const parts = line.split(" -- ");
|
|
159
|
+
if (parts.length === 1) {
|
|
160
|
+
return line;
|
|
161
|
+
}
|
|
162
|
+
line = "";
|
|
163
|
+
for (const { item, index } of arrayWithPrevAndIndex(parts)) {
|
|
164
|
+
if (index === 0) {
|
|
165
|
+
line += "\u250C\u2500\n\u23A2 ";
|
|
166
|
+
} else if (index === parts.length - 1) {
|
|
167
|
+
line += "\u23A2 ";
|
|
168
|
+
} else {
|
|
169
|
+
line += "\u23A2 ";
|
|
170
|
+
}
|
|
171
|
+
line += `${item}
|
|
172
|
+
`;
|
|
173
|
+
if (index === parts.length - 1) {
|
|
174
|
+
line += "\u2514\u2500";
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
143
178
|
return line;
|
|
144
179
|
}).join("\n")}
|
|
145
180
|
`;
|
|
@@ -156,7 +191,10 @@ ${filterAndMap(rendersToUse, (render, i) => {
|
|
|
156
191
|
return getSnapshot({ changesOnly: true });
|
|
157
192
|
},
|
|
158
193
|
get snapshot() {
|
|
159
|
-
return getSnapshot(
|
|
194
|
+
return getSnapshot();
|
|
195
|
+
},
|
|
196
|
+
get snapshotFromLast() {
|
|
197
|
+
return getSnapshot({ fromLastSnapshot: true });
|
|
160
198
|
},
|
|
161
199
|
logsCount,
|
|
162
200
|
get rendersTime() {
|
|
@@ -165,7 +203,18 @@ ${filterAndMap(rendersToUse, (render, i) => {
|
|
|
165
203
|
addMark
|
|
166
204
|
};
|
|
167
205
|
}
|
|
206
|
+
function getResultFn(fnGetter, wrapper) {
|
|
207
|
+
return (...args) => {
|
|
208
|
+
const fn = fnGetter();
|
|
209
|
+
if (wrapper) {
|
|
210
|
+
return wrapper(fn(...args));
|
|
211
|
+
} else {
|
|
212
|
+
return fn(...args);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}
|
|
168
216
|
export {
|
|
169
|
-
createLoggerStore
|
|
217
|
+
createLoggerStore,
|
|
218
|
+
getResultFn
|
|
170
219
|
};
|
|
171
220
|
//# sourceMappingURL=testUtils.js.map
|
package/dist/testUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/testUtils.ts"],"sourcesContent":["import { arrayWithPrevAndIndex, filterAndMap } from './arrayUtils';\nimport { isObject } from './assertions';\nimport { deepEqual } from './deepEqual';\nimport { clampMin } from './mathUtils';\nimport { omit, pick } from './objUtils';\n\nexport function createLoggerStore({\n filterKeys: defaultFilterKeys,\n rejectKeys: defaultRejectKeys,\n}: {\n filterKeys?: string[];\n rejectKeys?: string[];\n} = {}) {\n let logs: Record<string, unknown>[] = [];\n let logsTime: number[] = [];\n let startTime = Date.now();\n let onNextLog: () => void = () => {};\n\n function reset(keepLastRender = false) {\n logs = keepLastRender ? [logs.at(-1)!] : [];\n logsTime = [];\n startTime = Date.now();\n }\n\n function add(\n render: Record<string, unknown> | readonly Record<string, unknown>[],\n ) {\n if (!isObject(render)) {\n for (const [i, r] of render.entries()) {\n logs.push({\n i: i + 1,\n ...r,\n });\n logsTime.push(Date.now() - startTime);\n }\n } else {\n logs.push(render);\n logsTime.push(Date.now() - startTime);\n }\n\n onNextLog();\n\n if (logs.length > 100) {\n throw new Error('Too many logs');\n }\n }\n\n function logsCount() {\n return logs.filter((item) => !item._lastSnapshotMark).length;\n }\n\n async function waitNextLog(timeout = 50) {\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n throw new Error('Timeout');\n }, timeout);\n\n onNextLog = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n });\n }\n\n function getSnapshot({\n arrays = { firstNItems: 1 },\n changesOnly = true,\n filterKeys = defaultFilterKeys,\n rejectKeys = defaultRejectKeys,\n includeLastSnapshotEndMark = true,\n }: {\n arrays?: 'all' | 'firstAndLast' | 'length' | { firstNItems: number };\n changesOnly?: boolean;\n filterKeys?: string[];\n rejectKeys?: string[];\n includeLastSnapshotEndMark?: boolean;\n } = {}) {\n let rendersToUse = logs;\n\n if (changesOnly || filterKeys || rejectKeys) {\n rendersToUse = [];\n\n for (let { item, prev } of arrayWithPrevAndIndex(logs)) {\n if (item._lastSnapshotMark || item._mark) {\n rendersToUse.push(item);\n continue;\n }\n\n if (filterKeys) {\n prev = prev && pick(prev, filterKeys);\n item = pick(item, filterKeys);\n }\n\n if (rejectKeys) {\n prev = prev && omit(prev, rejectKeys);\n item = omit(item, rejectKeys);\n }\n\n if (!deepEqual(prev, item)) {\n rendersToUse.push(item);\n }\n }\n }\n\n logs.push({ _lastSnapshotMark: true });\n\n return `\\n${filterAndMap(rendersToUse, (render, i) => {\n if (render._lastSnapshotMark) {\n if (includeLastSnapshotEndMark && i !== rendersToUse.length - 1) {\n return '---';\n } else {\n return false;\n }\n }\n\n if (render._mark) {\n let mark = `\\n>>> ${String(render._mark)}`;\n\n const nextRender = rendersToUse[i + 1];\n\n if (nextRender && !nextRender._mark && !nextRender._lastSnapshotMark) {\n mark = `${mark}\\n`;\n }\n\n return mark;\n }\n\n let line = '';\n\n for (const [key, _value] of Object.entries(render)) {\n let value = _value;\n\n if (Array.isArray(value)) {\n if (arrays === 'length') {\n value = `Array(${value.length})`;\n } else if (arrays === 'firstAndLast' && value.length > 2) {\n const intermediateSize = clampMin(value.length - 2, 0);\n\n value = [\n value[0],\n `...(${intermediateSize} between)`,\n value.at(-1),\n ];\n } else if (typeof arrays === 'object' && value.length > 2) {\n value = [\n ...value.slice(0, arrays.firstNItems),\n `...(${value.length - arrays.firstNItems} more)`,\n ];\n }\n }\n\n if (value === '') {\n value = `''`;\n }\n\n if (typeof value === 'object' && value !== null) {\n value = JSON.stringify(value).replace(/\"/g, '').replace(/,/g, ', ');\n }\n\n line += `${key}: ${value} -- `;\n }\n\n line = line.slice(0, -4);\n return line;\n }).join('\\n')}\\n`;\n }\n\n function addMark(label: string) {\n add({ _mark: label });\n }\n\n return {\n add,\n reset,\n getSnapshot,\n waitNextLog,\n get changesSnapshot() {\n return getSnapshot({ changesOnly: true });\n },\n get snapshot() {\n return getSnapshot({ changesOnly: false });\n },\n logsCount,\n get rendersTime() {\n return logsTime;\n },\n addMark,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAMO,SAAS,kBAAkB;AAAA,EAChC,YAAY;AAAA,EACZ,YAAY;AACd,IAGI,CAAC,GAAG;AACN,MAAI,OAAkC,CAAC;AACvC,MAAI,WAAqB,CAAC;AAC1B,MAAI,YAAY,KAAK,IAAI;AACzB,MAAI,YAAwB,MAAM;AAAA,EAAC;AAEnC,WAAS,MAAM,iBAAiB,OAAO;AACrC,WAAO,iBAAiB,CAAC,KAAK,GAAG,EAAE,CAAE,IAAI,CAAC;AAC1C,eAAW,CAAC;AACZ,gBAAY,KAAK,IAAI;AAAA,EACvB;AAEA,WAAS,IACP,QACA;AACA,QAAI,CAAC,SAAS,MAAM,GAAG;AACrB,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG;AACrC,aAAK,KAAK;AAAA,UACR,GAAG,IAAI;AAAA,UACP,GAAG;AAAA,QACL,CAAC;AACD,iBAAS,KAAK,KAAK,IAAI,IAAI,SAAS;AAAA,MACtC;AAAA,IACF,OAAO;AACL,WAAK,KAAK,MAAM;AAChB,eAAS,KAAK,KAAK,IAAI,IAAI,SAAS;AAAA,IACtC;AAEA,cAAU;AAEV,QAAI,KAAK,SAAS,KAAK;AACrB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,EACF;AAEA,WAAS,YAAY;AACnB,WAAO,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,iBAAiB,EAAE;AAAA,EACxD;AAEA,iBAAe,YAAY,UAAU,IAAI;AACvC,WAAO,IAAI,QAAc,CAAC,YAAY;AACpC,YAAM,YAAY,WAAW,MAAM;AACjC,cAAM,IAAI,MAAM,SAAS;AAAA,MAC3B,GAAG,OAAO;AAEV,kBAAY,MAAM;AAChB,qBAAa,SAAS;AACtB,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,YAAY;AAAA,IACnB,SAAS,EAAE,aAAa,EAAE;AAAA,IAC1B,cAAc;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,6BAA6B;AAAA,EAC/B,IAMI,CAAC,GAAG;AACN,QAAI,eAAe;AAEnB,QAAI,eAAe,cAAc,YAAY;AAC3C,qBAAe,CAAC;AAEhB,eAAS,EAAE,MAAM,KAAK,KAAK,sBAAsB,IAAI,GAAG;AACtD,YAAI,KAAK,qBAAqB,KAAK,OAAO;AACxC,uBAAa,KAAK,IAAI;AACtB;AAAA,QACF;AAEA,YAAI,YAAY;AACd,iBAAO,QAAQ,KAAK,MAAM,UAAU;AACpC,iBAAO,KAAK,MAAM,UAAU;AAAA,QAC9B;AAEA,YAAI,YAAY;AACd,iBAAO,QAAQ,KAAK,MAAM,UAAU;AACpC,iBAAO,KAAK,MAAM,UAAU;AAAA,QAC9B;AAEA,YAAI,CAAC,UAAU,MAAM,IAAI,GAAG;AAC1B,uBAAa,KAAK,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,KAAK,EAAE,mBAAmB,KAAK,CAAC;AAErC,WAAO;AAAA,EAAK,aAAa,cAAc,CAAC,QAAQ,MAAM;AACpD,UAAI,OAAO,mBAAmB;AAC5B,YAAI,8BAA8B,MAAM,aAAa,SAAS,GAAG;AAC/D,iBAAO;AAAA,QACT,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,OAAO,OAAO;AAChB,YAAI,OAAO;AAAA,MAAS,OAAO,OAAO,KAAK,CAAC;AAExC,cAAM,aAAa,aAAa,IAAI,CAAC;AAErC,YAAI,cAAc,CAAC,WAAW,SAAS,CAAC,WAAW,mBAAmB;AACpE,iBAAO,GAAG,IAAI;AAAA;AAAA,QAChB;AAEA,eAAO;AAAA,MACT;AAEA,UAAI,OAAO;AAEX,iBAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,YAAI,QAAQ;AAEZ,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAI,WAAW,UAAU;AACvB,oBAAQ,SAAS,MAAM,MAAM;AAAA,UAC/B,WAAW,WAAW,kBAAkB,MAAM,SAAS,GAAG;AACxD,kBAAM,mBAAmB,SAAS,MAAM,SAAS,GAAG,CAAC;AAErD,oBAAQ;AAAA,cACN,MAAM,CAAC;AAAA,cACP,OAAO,gBAAgB;AAAA,cACvB,MAAM,GAAG,EAAE;AAAA,YACb;AAAA,UACF,WAAW,OAAO,WAAW,YAAY,MAAM,SAAS,GAAG;AACzD,oBAAQ;AAAA,cACN,GAAG,MAAM,MAAM,GAAG,OAAO,WAAW;AAAA,cACpC,OAAO,MAAM,SAAS,OAAO,WAAW;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AAEA,YAAI,UAAU,IAAI;AAChB,kBAAQ;AAAA,QACV;AAEA,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,kBAAQ,KAAK,UAAU,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,QAAQ,MAAM,IAAI;AAAA,QACpE;AAEA,gBAAQ,GAAG,GAAG,KAAK,KAAK;AAAA,MAC1B;AAEA,aAAO,KAAK,MAAM,GAAG,EAAE;AACvB,aAAO;AAAA,IACT,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,EACf;AAEA,WAAS,QAAQ,OAAe;AAC9B,QAAI,EAAE,OAAO,MAAM,CAAC;AAAA,EACtB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,kBAAkB;AACpB,aAAO,YAAY,EAAE,aAAa,KAAK,CAAC;AAAA,IAC1C;AAAA,IACA,IAAI,WAAW;AACb,aAAO,YAAY,EAAE,aAAa,MAAM,CAAC;AAAA,IAC3C;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/testUtils.ts"],"sourcesContent":["import { arrayWithPrevAndIndex, filterAndMap } from './arrayUtils';\nimport { isObject } from './assertions';\nimport { deepEqual } from './deepEqual';\nimport { clampMin } from './mathUtils';\nimport { omit, pick } from './objUtils';\n\nexport function createLoggerStore({\n filterKeys: defaultFilterKeys,\n rejectKeys: defaultRejectKeys,\n splitLongLines: defaultSplitLongLines = true,\n maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit = 80,\n fromLastSnapshot: defaultFromLastSnapshot = false,\n arrays: defaultArrays = { firstNItems: 1 },\n changesOnly: defaultChangesOnly = false,\n}: {\n filterKeys?: string[];\n rejectKeys?: string[];\n splitLongLines?: true;\n maxLineLengthBeforeSplit?: number;\n fromLastSnapshot?: boolean;\n arrays?: 'all' | 'firstAndLast' | 'length' | { firstNItems: number };\n changesOnly?: boolean;\n} = {}) {\n let logs: Record<string, unknown>[] = [];\n let logsTime: number[] = [];\n let startTime = Date.now();\n let onNextLog: () => void = () => {};\n\n function reset(keepLastRender = false) {\n logs = keepLastRender ? [logs.at(-1)!] : [];\n logsTime = [];\n startTime = Date.now();\n }\n\n function add(\n render: Record<string, unknown> | readonly Record<string, unknown>[],\n ) {\n if (!isObject(render)) {\n for (const [i, r] of render.entries()) {\n logs.push({\n i: i + 1,\n ...r,\n });\n logsTime.push(Date.now() - startTime);\n }\n } else {\n logs.push(render);\n logsTime.push(Date.now() - startTime);\n }\n\n onNextLog();\n\n if (logs.length > 100) {\n throw new Error('Too many logs');\n }\n }\n\n function logsCount() {\n return logs.filter((item) => !item._lastSnapshotMark).length;\n }\n\n async function waitNextLog(timeout = 50) {\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n throw new Error('Timeout');\n }, timeout);\n\n onNextLog = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n });\n }\n\n function getSnapshot({\n arrays = defaultArrays,\n changesOnly = defaultChangesOnly,\n filterKeys = defaultFilterKeys,\n rejectKeys = defaultRejectKeys,\n includeLastSnapshotEndMark = true,\n splitLongLines = defaultSplitLongLines,\n maxLineLengthBeforeSplit = defaultMaxLineLengthBeforeSplit,\n fromLastSnapshot = defaultFromLastSnapshot,\n }: {\n arrays?: 'all' | 'firstAndLast' | 'length' | { firstNItems: number };\n changesOnly?: boolean;\n filterKeys?: string[];\n rejectKeys?: string[];\n includeLastSnapshotEndMark?: boolean;\n splitLongLines?: boolean;\n maxLineLengthBeforeSplit?: number;\n fromLastSnapshot?: boolean;\n } = {}) {\n let rendersToUse = logs;\n\n if (changesOnly || filterKeys || rejectKeys) {\n rendersToUse = [];\n\n for (let { item, prev } of arrayWithPrevAndIndex(logs)) {\n if (item._lastSnapshotMark || item._mark) {\n rendersToUse.push(item);\n continue;\n }\n\n if (filterKeys) {\n prev = prev && pick(prev, filterKeys);\n item = pick(item, filterKeys);\n }\n\n if (rejectKeys) {\n prev = prev && omit(prev, rejectKeys);\n item = omit(item, rejectKeys);\n }\n\n if (!deepEqual(prev, item)) {\n rendersToUse.push(item);\n }\n }\n }\n\n if (fromLastSnapshot) {\n const lastSnapshotMark = rendersToUse.findLastIndex(\n (item) => item._lastSnapshotMark === true,\n );\n\n rendersToUse = rendersToUse.slice(clampMin(lastSnapshotMark, 0));\n }\n\n logs.push({ _lastSnapshotMark: true });\n\n return `\\n${filterAndMap(rendersToUse, (render, i) => {\n if (render._lastSnapshotMark) {\n if (includeLastSnapshotEndMark && i !== rendersToUse.length - 1) {\n return '---';\n } else {\n return false;\n }\n }\n\n if (render._mark) {\n let mark = `\\n>>> ${String(render._mark)}`;\n\n const nextRender = rendersToUse[i + 1];\n\n if (nextRender && !nextRender._mark && !nextRender._lastSnapshotMark) {\n mark = `${mark}\\n`;\n }\n\n return mark;\n }\n\n let line = '';\n\n for (const [key, _value] of Object.entries(render)) {\n let value = _value;\n\n if (Array.isArray(value)) {\n if (arrays === 'length') {\n value = `Array(${value.length})`;\n } else if (arrays === 'firstAndLast' && value.length > 2) {\n const intermediateSize = clampMin(value.length - 2, 0);\n\n value = [\n value[0],\n `...(${intermediateSize} between)`,\n value.at(-1),\n ];\n } else if (typeof arrays === 'object' && value.length > 2) {\n value = [\n ...value.slice(0, arrays.firstNItems),\n `...(${value.length - arrays.firstNItems} more)`,\n ];\n }\n }\n\n if (value === '') {\n value = `''`;\n }\n\n if (typeof value === 'object' && value !== null) {\n value = JSON.stringify(value).replace(/\"/g, '').replace(/,/g, ', ');\n }\n\n line += `${key}: ${value} -- `;\n }\n\n line = line.slice(0, -4);\n\n if (splitLongLines && line.length > maxLineLengthBeforeSplit) {\n const parts = line.split(' -- ');\n\n if (parts.length === 1) {\n return line;\n }\n\n line = '';\n\n for (const { item, index } of arrayWithPrevAndIndex(parts)) {\n if (index === 0) {\n line += '┌─\\n⎢ ';\n } else if (index === parts.length - 1) {\n line += '⎢ ';\n } else {\n line += '⎢ ';\n }\n\n line += `${item}\\n`;\n\n if (index === parts.length - 1) {\n line += '└─';\n }\n }\n }\n\n return line;\n }).join('\\n')}\\n`;\n }\n\n function addMark(label: string) {\n add({ _mark: label });\n }\n\n return {\n add,\n reset,\n getSnapshot,\n waitNextLog,\n get changesSnapshot() {\n return getSnapshot({ changesOnly: true });\n },\n get snapshot() {\n return getSnapshot();\n },\n get snapshotFromLast() {\n return getSnapshot({ fromLastSnapshot: true });\n },\n logsCount,\n get rendersTime() {\n return logsTime;\n },\n addMark,\n };\n}\n\nexport function getResultFn<T extends (...args: any[]) => any>(\n fnGetter: () => T,\n wrapper?: (...args: any[]) => any,\n): T {\n return ((...args: any[]) => {\n const fn = fnGetter();\n\n if (wrapper) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return wrapper(fn(...args));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return fn(...args);\n }\n }) as T;\n}\n"],"mappings":"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","names":[]}
|