@ls-stack/utils 1.13.0 → 1.13.2
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.js +14 -5
- package/dist/testUtils.js.map +1 -1
- package/package.json +1 -1
package/dist/testUtils.js
CHANGED
|
@@ -109,18 +109,24 @@ function createLoggerStore({
|
|
|
109
109
|
}
|
|
110
110
|
logs.push({ _lastSnapshotMark: true });
|
|
111
111
|
const propDivider = "\u22C5";
|
|
112
|
-
|
|
112
|
+
const snapShot = `
|
|
113
113
|
${filterAndMap(rendersToUse, (render, i) => {
|
|
114
114
|
if (render._lastSnapshotMark) {
|
|
115
|
-
if (includeLastSnapshotEndMark
|
|
116
|
-
|
|
115
|
+
if (includeLastSnapshotEndMark) {
|
|
116
|
+
if (rendersToUse.length === 1) {
|
|
117
|
+
return "\u22C5\u22C5\u22C5";
|
|
118
|
+
}
|
|
119
|
+
if (i !== rendersToUse.length - 1) {
|
|
120
|
+
return "\u22C5\u22C5\u22C5";
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
117
123
|
} else {
|
|
118
124
|
return false;
|
|
119
125
|
}
|
|
120
126
|
}
|
|
121
127
|
if (render._mark) {
|
|
122
|
-
|
|
123
|
-
>>> ${String(render._mark)}`;
|
|
128
|
+
const prevIsLastSnapshotMark = rendersToUse[i - 1]?._lastSnapshotMark;
|
|
129
|
+
let mark = `${prevIsLastSnapshotMark ? "" : "\n"}>>> ${String(render._mark)}`;
|
|
124
130
|
const nextRender = rendersToUse[i + 1];
|
|
125
131
|
if (nextRender && !nextRender._mark && !nextRender._lastSnapshotMark) {
|
|
126
132
|
mark = `${mark}
|
|
@@ -184,6 +190,9 @@ ${propDividerML} `;
|
|
|
184
190
|
return line;
|
|
185
191
|
}).join("\n")}
|
|
186
192
|
`;
|
|
193
|
+
return snapShot === `
|
|
194
|
+
\u22C5\u22C5\u22C5
|
|
195
|
+
` ? "\u22C5\u22C5\u22C5empty\u22C5\u22C5\u22C5" : snapShot;
|
|
187
196
|
}
|
|
188
197
|
function addMark(label) {
|
|
189
198
|
add({ _mark: label });
|
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 splitLongLines: defaultSplitLongLines = true,\n maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit = 80,\n fromLastSnapshot: defaultFromLastSnapshot = false,\n arrays: defaultArrays = { firstNItems: 1 },\n changesOnly: defaultChangesOnly = false,\n useEmojiForBooleans: defaultUseEmojiForBooleans = true,\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 useEmojiForBooleans?: 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 useEmojiForBooleans = defaultUseEmojiForBooleans,\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 useEmojiForBooleans?: 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 const propDivider = '⋅';\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 = [value[0], `…(${intermediateSize} between)`, value.at(-1)];\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 (typeof value === 'boolean' && useEmojiForBooleans) {\n value = value ? '✅' : '❌';\n }\n\n if (value === '') {\n value = `''`;\n }\n\n if (typeof value === 'object' && value !== null) {\n value = JSON.stringify(value)\n .replace(/:true/g, ':✅')\n .replace(/:false/g, ':❌')\n .replace(/:\"\"/g, \":''\")\n .replace(/\"/g, '')\n .replace(/,/g, ', ');\n }\n\n line += `${key}: ${value} ${propDivider} `;\n }\n\n line = line.slice(0, (propDivider.length + 2) * -1);\n\n if (splitLongLines && line.length > maxLineLengthBeforeSplit) {\n const parts = line.split(` ${propDivider} `);\n\n if (parts.length === 1) {\n return line;\n }\n\n line = '';\n\n const propDividerML = '⋅';\n\n for (const { item, index } of arrayWithPrevAndIndex(parts)) {\n if (index === 0) {\n line += `┌─\\n${propDividerML} `;\n } else if (index === parts.length - 1) {\n line += `${propDividerML} `;\n } else {\n line += `${propDividerML} `;\n }\n\n line += `${item}\\n`;\n\n if (index === parts.length - 1) {\n line += '└─';\n }\n }\n } else {\n line = `-> ${line}`;\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":[]}
|
|
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 useEmojiForBooleans: defaultUseEmojiForBooleans = true,\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 useEmojiForBooleans?: 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 useEmojiForBooleans = defaultUseEmojiForBooleans,\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 useEmojiForBooleans?: 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 const propDivider = '⋅';\n\n const snapShot = `\\n${filterAndMap(rendersToUse, (render, i) => {\n if (render._lastSnapshotMark) {\n if (includeLastSnapshotEndMark) {\n if (rendersToUse.length === 1) {\n return '⋅⋅⋅';\n }\n\n if (i !== rendersToUse.length - 1) {\n return '⋅⋅⋅';\n }\n\n return false;\n } else {\n return false;\n }\n }\n\n if (render._mark) {\n const prevIsLastSnapshotMark = rendersToUse[i - 1]?._lastSnapshotMark;\n let mark = `${\n prevIsLastSnapshotMark ? '' : '\\n'\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 = [value[0], `…(${intermediateSize} between)`, value.at(-1)];\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 (typeof value === 'boolean' && useEmojiForBooleans) {\n value = value ? '✅' : '❌';\n }\n\n if (value === '') {\n value = `''`;\n }\n\n if (typeof value === 'object' && value !== null) {\n value = JSON.stringify(value)\n .replace(/:true/g, ':✅')\n .replace(/:false/g, ':❌')\n .replace(/:\"\"/g, \":''\")\n .replace(/\"/g, '')\n .replace(/,/g, ', ');\n }\n\n line += `${key}: ${value} ${propDivider} `;\n }\n\n line = line.slice(0, (propDivider.length + 2) * -1);\n\n if (splitLongLines && line.length > maxLineLengthBeforeSplit) {\n const parts = line.split(` ${propDivider} `);\n\n if (parts.length === 1) {\n return line;\n }\n\n line = '';\n\n const propDividerML = '⋅';\n\n for (const { item, index } of arrayWithPrevAndIndex(parts)) {\n if (index === 0) {\n line += `┌─\\n${propDividerML} `;\n } else if (index === parts.length - 1) {\n line += `${propDividerML} `;\n } else {\n line += `${propDividerML} `;\n }\n\n line += `${item}\\n`;\n\n if (index === parts.length - 1) {\n line += '└─';\n }\n }\n } else {\n line = `-> ${line}`;\n }\n\n return line;\n }).join('\\n')}\\n`;\n\n return snapShot === `\\n⋅⋅⋅\\n` ? '⋅⋅⋅empty⋅⋅⋅' : snapShot;\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":[]}
|