@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.
@@ -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 = { firstNItems: 1 },
68
- changesOnly = true,
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({ changesOnly: false });
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
@@ -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":"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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}: {\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":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ls-stack/utils",
3
3
  "description": "Typescript utils",
4
- "version": "1.9.0",
4
+ "version": "1.11.0",
5
5
  "license": "MIT",
6
6
  "files": [
7
7
  "dist"