@ls-stack/utils 1.0.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.
Files changed (97) hide show
  1. package/README.md +1 -0
  2. package/dist/arrayUtils.d.ts +50 -0
  3. package/dist/arrayUtils.js +13 -0
  4. package/dist/arrayUtils.js.map +1 -0
  5. package/dist/assertions.d.ts +17 -0
  6. package/dist/assertions.js +25 -0
  7. package/dist/assertions.js.map +1 -0
  8. package/dist/castValues.d.ts +4 -0
  9. package/dist/castValues.js +16 -0
  10. package/dist/castValues.js.map +1 -0
  11. package/dist/chunk-4DRNU53E.js +70 -0
  12. package/dist/chunk-4DRNU53E.js.map +1 -0
  13. package/dist/chunk-5FQYH3ZJ.js +106 -0
  14. package/dist/chunk-5FQYH3ZJ.js.map +1 -0
  15. package/dist/chunk-5SB253CL.js +54 -0
  16. package/dist/chunk-5SB253CL.js.map +1 -0
  17. package/dist/chunk-HLFWWIDK.js +9 -0
  18. package/dist/chunk-HLFWWIDK.js.map +1 -0
  19. package/dist/chunk-HYFUWQ2E.js +218 -0
  20. package/dist/chunk-HYFUWQ2E.js.map +1 -0
  21. package/dist/chunk-J66LUDLH.js +13 -0
  22. package/dist/chunk-J66LUDLH.js.map +1 -0
  23. package/dist/chunk-JT3EBBCA.js +69 -0
  24. package/dist/chunk-JT3EBBCA.js.map +1 -0
  25. package/dist/chunk-JZUOIOMU.js +75 -0
  26. package/dist/chunk-JZUOIOMU.js.map +1 -0
  27. package/dist/chunk-MMKMF4GG.js +21 -0
  28. package/dist/chunk-MMKMF4GG.js.map +1 -0
  29. package/dist/chunk-SNAAKCTH.js +40 -0
  30. package/dist/chunk-SNAAKCTH.js.map +1 -0
  31. package/dist/consoleFmt.d.ts +48 -0
  32. package/dist/consoleFmt.js +60 -0
  33. package/dist/consoleFmt.js.map +1 -0
  34. package/dist/conversions.d.ts +3 -0
  35. package/dist/conversions.js +7 -0
  36. package/dist/conversions.js.map +1 -0
  37. package/dist/createThrottleController.d.ts +16 -0
  38. package/dist/createThrottleController.js +66 -0
  39. package/dist/createThrottleController.js.map +1 -0
  40. package/dist/dedent.d.ts +4 -0
  41. package/dist/dedent.js +33 -0
  42. package/dist/dedent.js.map +1 -0
  43. package/dist/deepEqual.d.ts +4 -0
  44. package/dist/deepEqual.js +7 -0
  45. package/dist/deepEqual.js.map +1 -0
  46. package/dist/enhancedMap.d.ts +22 -0
  47. package/dist/enhancedMap.js +10 -0
  48. package/dist/enhancedMap.js.map +1 -0
  49. package/dist/exhaustiveMatch.d.ts +5 -0
  50. package/dist/exhaustiveMatch.js +27 -0
  51. package/dist/exhaustiveMatch.js.map +1 -0
  52. package/dist/main.d.ts +25 -0
  53. package/dist/main.js +3 -0
  54. package/dist/main.js.map +1 -0
  55. package/dist/mathUtils.d.ts +4 -0
  56. package/dist/mathUtils.js +9 -0
  57. package/dist/mathUtils.js.map +1 -0
  58. package/dist/objUtils.d.ts +7 -0
  59. package/dist/objUtils.js +15 -0
  60. package/dist/objUtils.js.map +1 -0
  61. package/dist/parallelAsyncResultCalls.d.ts +76 -0
  62. package/dist/parallelAsyncResultCalls.js +126 -0
  63. package/dist/parallelAsyncResultCalls.js.map +1 -0
  64. package/dist/promiseUtils.d.ts +8 -0
  65. package/dist/promiseUtils.js +14 -0
  66. package/dist/promiseUtils.js.map +1 -0
  67. package/dist/rsResult.d.ts +118 -0
  68. package/dist/rsResult.js +21 -0
  69. package/dist/rsResult.js.map +1 -0
  70. package/dist/runShellCmd.d.ts +15 -0
  71. package/dist/runShellCmd.js +71 -0
  72. package/dist/runShellCmd.js.map +1 -0
  73. package/dist/shallowEqual.d.ts +4 -0
  74. package/dist/shallowEqual.js +74 -0
  75. package/dist/shallowEqual.js.map +1 -0
  76. package/dist/sleep.d.ts +3 -0
  77. package/dist/sleep.js +7 -0
  78. package/dist/sleep.js.map +1 -0
  79. package/dist/stringUtils.d.ts +18 -0
  80. package/dist/stringUtils.js +17 -0
  81. package/dist/stringUtils.js.map +1 -0
  82. package/dist/testUtils.d.ts +24 -0
  83. package/dist/testUtils.js +171 -0
  84. package/dist/testUtils.js.map +1 -0
  85. package/dist/typingFnUtils.d.ts +5 -0
  86. package/dist/typingFnUtils.js +8 -0
  87. package/dist/typingFnUtils.js.map +1 -0
  88. package/dist/typingTestUtils.d.ts +12 -0
  89. package/dist/typingTestUtils.js +19 -0
  90. package/dist/typingTestUtils.js.map +1 -0
  91. package/dist/typingUtils.d.ts +11 -0
  92. package/dist/typingUtils.js +1 -0
  93. package/dist/typingUtils.js.map +1 -0
  94. package/dist/yamlStringify.d.ts +8 -0
  95. package/dist/yamlStringify.js +292 -0
  96. package/dist/yamlStringify.js.map +1 -0
  97. package/package.json +235 -0
@@ -0,0 +1,18 @@
1
+ type Arg = string | false | undefined | null;
2
+ /**
3
+ * A util to create more legible conditional concatenated strings
4
+ *
5
+ * @example
6
+ * joinStrings('a', 'b', 'c') // 'abc'
7
+ * joinStrings('a', false, 'c') // 'ac'
8
+ * joinStrings('a', addBString ? 'b' : null, 'c') // 'ac' if addBString is false, 'abc' if addBString is true
9
+ */
10
+ declare function joinStrings(...args: (Arg | Arg[])[]): string;
11
+ declare function dedent(strings: string): string;
12
+ declare function dedent(strings: TemplateStringsArray, ...values: string[]): string;
13
+ declare function formatNum(num: number): string;
14
+ declare function isSnakeCase(str: string): boolean;
15
+ declare function convertToSnakeCase(str: string): string;
16
+ declare function truncateString(str: string, length: number, ellipsis?: string): string;
17
+
18
+ export { convertToSnakeCase, dedent, formatNum, isSnakeCase, joinStrings, truncateString };
@@ -0,0 +1,17 @@
1
+ import {
2
+ convertToSnakeCase,
3
+ dedent,
4
+ formatNum,
5
+ isSnakeCase,
6
+ joinStrings,
7
+ truncateString
8
+ } from "./chunk-4DRNU53E.js";
9
+ export {
10
+ convertToSnakeCase,
11
+ dedent,
12
+ formatNum,
13
+ isSnakeCase,
14
+ joinStrings,
15
+ truncateString
16
+ };
17
+ //# sourceMappingURL=stringUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,24 @@
1
+ declare function createLoggerStore({ filterKeys: defaultFilterKeys, rejectKeys: defaultRejectKeys, }?: {
2
+ filterKeys?: string[];
3
+ rejectKeys?: string[];
4
+ }): {
5
+ add: (render: Record<string, unknown> | readonly Record<string, unknown>[]) => void;
6
+ reset: (keepLastRender?: boolean) => void;
7
+ getSnapshot: ({ arrays, changesOnly, filterKeys, rejectKeys, includeLastSnapshotEndMark, }?: {
8
+ arrays?: 'all' | 'firstAndLast' | 'length' | {
9
+ firstNItems: number;
10
+ };
11
+ changesOnly?: boolean;
12
+ filterKeys?: string[];
13
+ rejectKeys?: string[];
14
+ includeLastSnapshotEndMark?: boolean;
15
+ }) => string;
16
+ waitNextLog: (timeout?: number) => Promise<void>;
17
+ readonly changesSnapshot: string;
18
+ readonly snapshot: string;
19
+ logsCount: () => number;
20
+ readonly rendersTime: number[];
21
+ addMark: (label: string) => void;
22
+ };
23
+
24
+ export { createLoggerStore };
@@ -0,0 +1,171 @@
1
+ import {
2
+ clampMin
3
+ } from "./chunk-J66LUDLH.js";
4
+ import {
5
+ omit,
6
+ pick
7
+ } from "./chunk-SNAAKCTH.js";
8
+ import {
9
+ arrayWithPrevAndIndex,
10
+ filterAndMap
11
+ } from "./chunk-5SB253CL.js";
12
+ import {
13
+ isObject
14
+ } from "./chunk-JT3EBBCA.js";
15
+ import {
16
+ deepEqual
17
+ } from "./chunk-JZUOIOMU.js";
18
+
19
+ // src/testUtils.ts
20
+ function createLoggerStore({
21
+ filterKeys: defaultFilterKeys,
22
+ rejectKeys: defaultRejectKeys
23
+ } = {}) {
24
+ let logs = [];
25
+ let logsTime = [];
26
+ let startTime = Date.now();
27
+ let onNextLog = () => {
28
+ };
29
+ function reset(keepLastRender = false) {
30
+ logs = keepLastRender ? [logs.at(-1)] : [];
31
+ logsTime = [];
32
+ startTime = Date.now();
33
+ }
34
+ function add(render) {
35
+ if (!isObject(render)) {
36
+ for (const [i, r] of render.entries()) {
37
+ logs.push({
38
+ i: i + 1,
39
+ ...r
40
+ });
41
+ logsTime.push(Date.now() - startTime);
42
+ }
43
+ } else {
44
+ logs.push(render);
45
+ logsTime.push(Date.now() - startTime);
46
+ }
47
+ onNextLog();
48
+ if (logs.length > 100) {
49
+ throw new Error("Too many logs");
50
+ }
51
+ }
52
+ function logsCount() {
53
+ return logs.filter((item) => !item._lastSnapshotMark).length;
54
+ }
55
+ async function waitNextLog(timeout = 50) {
56
+ return new Promise((resolve) => {
57
+ const timeoutId = setTimeout(() => {
58
+ throw new Error("Timeout");
59
+ }, timeout);
60
+ onNextLog = () => {
61
+ clearTimeout(timeoutId);
62
+ resolve();
63
+ };
64
+ });
65
+ }
66
+ function getSnapshot({
67
+ arrays = { firstNItems: 1 },
68
+ changesOnly = true,
69
+ filterKeys = defaultFilterKeys,
70
+ rejectKeys = defaultRejectKeys,
71
+ includeLastSnapshotEndMark = true
72
+ } = {}) {
73
+ let rendersToUse = logs;
74
+ if (changesOnly || filterKeys || rejectKeys) {
75
+ rendersToUse = [];
76
+ for (let { item, prev } of arrayWithPrevAndIndex(logs)) {
77
+ if (item._lastSnapshotMark || item._mark) {
78
+ rendersToUse.push(item);
79
+ continue;
80
+ }
81
+ if (filterKeys) {
82
+ prev = prev && pick(prev, filterKeys);
83
+ item = pick(item, filterKeys);
84
+ }
85
+ if (rejectKeys) {
86
+ prev = prev && omit(prev, rejectKeys);
87
+ item = omit(item, rejectKeys);
88
+ }
89
+ if (!deepEqual(prev, item)) {
90
+ rendersToUse.push(item);
91
+ }
92
+ }
93
+ }
94
+ logs.push({ _lastSnapshotMark: true });
95
+ return `
96
+ ${filterAndMap(rendersToUse, (render, i) => {
97
+ if (render._lastSnapshotMark) {
98
+ if (includeLastSnapshotEndMark && i !== rendersToUse.length - 1) {
99
+ return "---";
100
+ } else {
101
+ return false;
102
+ }
103
+ }
104
+ if (render._mark) {
105
+ let mark = `
106
+ >>> ${String(render._mark)}`;
107
+ const nextRender = rendersToUse[i + 1];
108
+ if (nextRender && !nextRender._mark && !nextRender._lastSnapshotMark) {
109
+ mark = `${mark}
110
+ `;
111
+ }
112
+ return mark;
113
+ }
114
+ let line = "";
115
+ for (const [key, _value] of Object.entries(render)) {
116
+ let value = _value;
117
+ if (Array.isArray(value)) {
118
+ if (arrays === "length") {
119
+ value = `Array(${value.length})`;
120
+ } else if (arrays === "firstAndLast" && value.length > 2) {
121
+ const intermediateSize = clampMin(value.length - 2, 0);
122
+ value = [
123
+ value[0],
124
+ `...(${intermediateSize} between)`,
125
+ value.at(-1)
126
+ ];
127
+ } else if (typeof arrays === "object" && value.length > 2) {
128
+ value = [
129
+ ...value.slice(0, arrays.firstNItems),
130
+ `...(${value.length - arrays.firstNItems} more)`
131
+ ];
132
+ }
133
+ }
134
+ if (value === "") {
135
+ value = `''`;
136
+ }
137
+ if (typeof value === "object" && value !== null) {
138
+ value = JSON.stringify(value).replace(/"/g, "").replace(/,/g, ", ");
139
+ }
140
+ line += `${key}: ${value} -- `;
141
+ }
142
+ line = line.slice(0, -4);
143
+ return line;
144
+ }).join("\n")}
145
+ `;
146
+ }
147
+ function addMark(label) {
148
+ add({ _mark: label });
149
+ }
150
+ return {
151
+ add,
152
+ reset,
153
+ getSnapshot,
154
+ waitNextLog,
155
+ get changesSnapshot() {
156
+ return getSnapshot({ changesOnly: true });
157
+ },
158
+ get snapshot() {
159
+ return getSnapshot({ changesOnly: false });
160
+ },
161
+ logsCount,
162
+ get rendersTime() {
163
+ return logsTime;
164
+ },
165
+ addMark
166
+ };
167
+ }
168
+ export {
169
+ createLoggerStore
170
+ };
171
+ //# sourceMappingURL=testUtils.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,5 @@
1
+ import { NonPartial } from './typingUtils.js';
2
+
3
+ declare function asNonPartial<T extends Record<string, unknown>>(obj: T): NonPartial<T>;
4
+
5
+ export { asNonPartial };
@@ -0,0 +1,8 @@
1
+ // src/typingFnUtils.ts
2
+ function asNonPartial(obj) {
3
+ return obj;
4
+ }
5
+ export {
6
+ asNonPartial
7
+ };
8
+ //# sourceMappingURL=typingFnUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/typingFnUtils.ts"],"sourcesContent":["import { NonPartial } from './typingUtils';\n\nexport function asNonPartial<T extends Record<string, unknown>>(\n obj: T,\n): NonPartial<T> {\n return obj;\n}\n"],"mappings":";AAEO,SAAS,aACd,KACe;AACf,SAAO;AACT;","names":[]}
@@ -0,0 +1,12 @@
1
+ type TestTypeIsEqual<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
2
+ type TestTypeNotEqual<X, Y> = true extends TestTypeIsEqual<X, Y> ? false : true;
3
+ declare function test(title: string, func: () => any): void;
4
+ declare function describe(title: string, func: () => any): void;
5
+ declare function expectType<T extends true>(): T;
6
+ declare const typingTest: {
7
+ test: typeof test;
8
+ describe: typeof describe;
9
+ expectType: typeof expectType;
10
+ };
11
+
12
+ export { type TestTypeIsEqual, type TestTypeNotEqual, typingTest };
@@ -0,0 +1,19 @@
1
+ // src/typingTestUtils.ts
2
+ function test(title, func) {
3
+ func();
4
+ }
5
+ function describe(title, func) {
6
+ func();
7
+ }
8
+ function expectType() {
9
+ return {};
10
+ }
11
+ var typingTest = {
12
+ test,
13
+ describe,
14
+ expectType
15
+ };
16
+ export {
17
+ typingTest
18
+ };
19
+ //# sourceMappingURL=typingTestUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/typingTestUtils.ts"],"sourcesContent":["export type TestTypeIsEqual<X, Y> =\n (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true\n : false;\nexport type TestTypeNotEqual<X, Y> =\n true extends TestTypeIsEqual<X, Y> ? false : true;\n\nfunction test(title: string, func: () => any) {\n func();\n}\n\nfunction describe(title: string, func: () => any) {\n func();\n}\n\nfunction expectType<T extends true>() {\n return {} as T;\n}\n\nexport const typingTest = {\n test,\n describe,\n expectType,\n};\n"],"mappings":";AAMA,SAAS,KAAK,OAAe,MAAiB;AAC5C,OAAK;AACP;AAEA,SAAS,SAAS,OAAe,MAAiB;AAChD,OAAK;AACP;AAEA,SAAS,aAA6B;AACpC,SAAO,CAAC;AACV;AAEO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ type PartialRecord<K extends keyof any, T> = {
2
+ [P in K]?: T;
3
+ };
4
+ type NonPartial<T> = {
5
+ [K in keyof Required<T>]: T[K];
6
+ };
7
+ type ObjKeysWithValuesOfType<Obj extends Record<PropertyKey, unknown>, ValueType> = {
8
+ [K in keyof Obj]: Obj[K] extends ValueType ? K : never;
9
+ }[keyof Obj];
10
+
11
+ export type { NonPartial, ObjKeysWithValuesOfType, PartialRecord };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=typingUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,8 @@
1
+ declare function yamlStringify(obj: unknown, { maxLineLength, showUndefined, maxDepth, addRootObjSpaces, }?: {
2
+ maxLineLength?: number;
3
+ showUndefined?: boolean;
4
+ maxDepth?: number;
5
+ addRootObjSpaces?: 'before' | 'after' | 'beforeAndAfter' | false;
6
+ }): string;
7
+
8
+ export { yamlStringify };
@@ -0,0 +1,292 @@
1
+ import {
2
+ truncateString
3
+ } from "./chunk-4DRNU53E.js";
4
+ import {
5
+ bytesToHumanReadable
6
+ } from "./chunk-MMKMF4GG.js";
7
+ import {
8
+ isObject,
9
+ isPlainObject
10
+ } from "./chunk-JT3EBBCA.js";
11
+
12
+ // src/yamlStringify.ts
13
+ function yamlStringify(obj, {
14
+ maxLineLength = 100,
15
+ showUndefined,
16
+ maxDepth = 50,
17
+ addRootObjSpaces = "beforeAndAfter"
18
+ } = {}) {
19
+ if (isObject(obj) || Array.isArray(obj) || typeof obj === "function") {
20
+ return `${stringifyValue(obj, "", maxLineLength, !!showUndefined, maxDepth, 0, addRootObjSpaces)}
21
+ `;
22
+ }
23
+ return JSON.stringify(obj) || "undefined";
24
+ }
25
+ function stringifyValue(value, indent, maxLineLength, showUndefined, maxDepth, depth, addObjSpaces) {
26
+ let result = "";
27
+ const childIndent = `${indent} `;
28
+ if (isPlainObject(value)) {
29
+ if (Object.keys(value).length === 0) {
30
+ return "{}";
31
+ }
32
+ let prevValue;
33
+ let afterSpaceWasAdded = false;
34
+ for (let [key, objVal] of Object.entries(value)) {
35
+ if (objVal === void 0 && !showUndefined) {
36
+ continue;
37
+ }
38
+ if (depth > maxDepth) {
39
+ objVal = `{max depth reached}`;
40
+ }
41
+ const normalizedValue2 = normalizeValue(objVal);
42
+ if (normalizedValue2 !== null) {
43
+ objVal = normalizedValue2[1];
44
+ key = `${key}{${normalizedValue2[0]}}`;
45
+ }
46
+ const valueString = stringifyValue(
47
+ objVal,
48
+ childIndent,
49
+ maxLineLength,
50
+ showUndefined,
51
+ maxDepth,
52
+ depth + 1,
53
+ addObjSpaces
54
+ );
55
+ if (!afterSpaceWasAdded && indent === "" && isObject(objVal) && prevValue && (addObjSpaces === "before" || addObjSpaces === "beforeAndAfter")) {
56
+ result += "\n";
57
+ }
58
+ if (Array.isArray(objVal)) {
59
+ const arrayIsSingleLine = valueString.split("\n").length === 1;
60
+ if (arrayIsSingleLine && !valueString.trim().startsWith("-")) {
61
+ result += `${indent}${key}: `;
62
+ } else {
63
+ result += `${indent}${key}:
64
+ `;
65
+ }
66
+ } else if (isObject(objVal)) {
67
+ if (Object.keys(objVal).length === 0) {
68
+ result += `${indent}${key}: `;
69
+ } else {
70
+ result += `${indent}${key}:
71
+ `;
72
+ }
73
+ } else {
74
+ result += `${indent}${key}: `;
75
+ }
76
+ result += valueString;
77
+ result += "\n";
78
+ if (indent === "") {
79
+ if (isObject(objVal)) {
80
+ if (addObjSpaces === "after" || addObjSpaces === "beforeAndAfter") {
81
+ result += "\n";
82
+ afterSpaceWasAdded = true;
83
+ } else {
84
+ afterSpaceWasAdded = false;
85
+ }
86
+ }
87
+ }
88
+ prevValue = objVal;
89
+ }
90
+ return result.trimEnd();
91
+ }
92
+ if (Array.isArray(value)) {
93
+ let arrayWasAdded = false;
94
+ if (value.length === 0 || value.every(
95
+ (item) => typeof item === "string" || typeof item === "number" || typeof item === "boolean" || item === null || item === void 0
96
+ )) {
97
+ let line = "";
98
+ line += `[`;
99
+ line += value.map((item) => {
100
+ let valueToUse = item;
101
+ if (depth > maxDepth) {
102
+ valueToUse = `{max depth reached}`;
103
+ }
104
+ if (typeof valueToUse === "string" && valueToUse.includes("\n")) {
105
+ valueToUse = valueToUse.replace(/\n/g, "\\n");
106
+ }
107
+ return stringifyValue(
108
+ valueToUse,
109
+ "",
110
+ maxLineLength,
111
+ showUndefined,
112
+ maxDepth,
113
+ depth + 1,
114
+ addObjSpaces
115
+ );
116
+ }).join(", ");
117
+ line += "]";
118
+ if (line.length <= maxLineLength) {
119
+ result += line;
120
+ arrayWasAdded = true;
121
+ }
122
+ }
123
+ if (!arrayWasAdded) {
124
+ for (let item of value) {
125
+ if (depth > maxDepth) {
126
+ item = `{max depth reached}`;
127
+ }
128
+ result += `${indent}- `;
129
+ if (Array.isArray(item) || isObject(item)) {
130
+ let arrayString = stringifyValue(
131
+ item,
132
+ childIndent,
133
+ maxLineLength,
134
+ showUndefined,
135
+ maxDepth,
136
+ depth + 1,
137
+ addObjSpaces
138
+ );
139
+ arrayString = arrayString.trimStart();
140
+ result += arrayString;
141
+ } else {
142
+ result += stringifyValue(
143
+ item,
144
+ childIndent,
145
+ maxLineLength,
146
+ showUndefined,
147
+ maxDepth,
148
+ depth + 1,
149
+ addObjSpaces
150
+ );
151
+ }
152
+ result += "\n";
153
+ }
154
+ }
155
+ return result.trimEnd();
156
+ }
157
+ if (typeof value === "string") {
158
+ if (value.includes("\n")) {
159
+ const lines = value.split("\n");
160
+ for (const [i, line] of lines.entries()) {
161
+ if (i === 0) {
162
+ if (value.endsWith("\n")) {
163
+ result += `|`;
164
+ } else {
165
+ result += `|-`;
166
+ }
167
+ result += `
168
+ ${indent}${line}
169
+ `;
170
+ } else {
171
+ result += `${indent}${line}
172
+ `;
173
+ }
174
+ }
175
+ } else {
176
+ if (value.includes("'")) {
177
+ result += `"${value}"`;
178
+ } else {
179
+ result += `'${value}'`;
180
+ }
181
+ }
182
+ return result.trimEnd();
183
+ }
184
+ if (typeof value === "number" || typeof value === "boolean" || value === null || value === void 0) {
185
+ return String(value).trimEnd();
186
+ }
187
+ const normalizedValue = normalizeValue(value);
188
+ if (normalizedValue !== null) {
189
+ return stringifyValue(
190
+ {
191
+ [`${normalizedValue[0]}#`]: normalizedValue[1]
192
+ },
193
+ indent,
194
+ maxLineLength,
195
+ showUndefined,
196
+ maxDepth,
197
+ depth + 1,
198
+ addObjSpaces
199
+ );
200
+ }
201
+ return JSON.stringify(value);
202
+ }
203
+ function normalizeValue(value) {
204
+ if (value === null || isPlainObject(value) || Array.isArray(value)) {
205
+ return null;
206
+ }
207
+ if (value instanceof Map) {
208
+ const mapEntries = Array.from(value.entries());
209
+ let mapValue;
210
+ if (mapEntries.every(([key]) => typeof key === "string")) {
211
+ const mapObjValue = {};
212
+ for (const [key, val] of mapEntries) {
213
+ mapObjValue[key] = val;
214
+ }
215
+ mapValue = mapObjValue;
216
+ } else {
217
+ mapValue = mapEntries.map(([key, val]) => ({
218
+ key,
219
+ value: val
220
+ }));
221
+ }
222
+ return ["Map", mapValue];
223
+ }
224
+ if (value instanceof Set) {
225
+ const setValue = Array.from(value);
226
+ return ["Set", setValue];
227
+ }
228
+ if (value instanceof Date) {
229
+ return ["Date", value.toISOString()];
230
+ }
231
+ if (value instanceof RegExp) {
232
+ return ["RegExp", value.toString()];
233
+ }
234
+ if (value instanceof Error) {
235
+ return [
236
+ "Error",
237
+ {
238
+ message: value.message,
239
+ name: value.name,
240
+ stack: value.stack
241
+ }
242
+ ];
243
+ }
244
+ if (value instanceof File) {
245
+ return [
246
+ "File",
247
+ {
248
+ name: value.name,
249
+ type: value.type,
250
+ lastModified: new Date(value.lastModified).toISOString(),
251
+ size: bytesToHumanReadable(value.size)
252
+ }
253
+ ];
254
+ }
255
+ if (typeof value === "object") {
256
+ if ("toJSON" in value && typeof value.toJSON === "function") {
257
+ return [value.constructor.name, value.toJSON()];
258
+ }
259
+ if ("toString" in value && typeof value.toString === "function") {
260
+ const stringValue = value.toString();
261
+ if (stringValue.toString() !== "[object Object]") {
262
+ return [value.constructor.name, stringValue];
263
+ }
264
+ }
265
+ const objectValue = { ...value };
266
+ const displayValue = {};
267
+ let addedKeys = 0;
268
+ for (const [key, item] of Object.entries(objectValue)) {
269
+ if (addedKeys > 4) {
270
+ displayValue["...and more properties"] = Object.keys(objectValue).length - 4;
271
+ break;
272
+ }
273
+ if (typeof item === "string" || typeof item === "number" || typeof item === "boolean" || item === null || item === void 0) {
274
+ displayValue[key] = item;
275
+ addedKeys++;
276
+ }
277
+ }
278
+ return [String(value.constructor.name), displayValue];
279
+ }
280
+ if (typeof value === "function") {
281
+ const functionString = value.toString();
282
+ return [
283
+ `Function`,
284
+ functionString.includes("\n") ? truncateString(functionString.split("\n").join(""), 40) : functionString
285
+ ];
286
+ }
287
+ return null;
288
+ }
289
+ export {
290
+ yamlStringify
291
+ };
292
+ //# sourceMappingURL=yamlStringify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/yamlStringify.ts"],"sourcesContent":["import { isObject, isPlainObject } from './assertions';\nimport { bytesToHumanReadable } from './conversions';\nimport { truncateString } from './stringUtils';\n\nexport function yamlStringify(\n obj: unknown,\n {\n maxLineLength = 100,\n showUndefined,\n maxDepth = 50,\n addRootObjSpaces = 'beforeAndAfter',\n }: {\n maxLineLength?: number;\n showUndefined?: boolean;\n maxDepth?: number;\n addRootObjSpaces?: 'before' | 'after' | 'beforeAndAfter' | false;\n } = {},\n): string {\n if (isObject(obj) || Array.isArray(obj) || typeof obj === 'function') {\n return `${stringifyValue(obj, '', maxLineLength, !!showUndefined, maxDepth, 0, addRootObjSpaces)}\\n`;\n }\n\n return JSON.stringify(obj) || 'undefined';\n}\n\nfunction stringifyValue(\n value: unknown,\n indent: string,\n maxLineLength: number,\n showUndefined: boolean,\n maxDepth: number,\n depth: number,\n addObjSpaces: 'before' | 'after' | 'beforeAndAfter' | false,\n): string {\n let result = '';\n const childIndent = `${indent} `;\n\n if (isPlainObject(value)) {\n if (Object.keys(value).length === 0) {\n return '{}';\n }\n\n let prevValue: unknown;\n let afterSpaceWasAdded = false;\n\n for (let [key, objVal] of Object.entries(value)) {\n if (objVal === undefined && !showUndefined) {\n continue;\n }\n\n if (depth > maxDepth) {\n objVal = `{max depth reached}`;\n }\n\n const normalizedValue = normalizeValue(objVal);\n\n if (normalizedValue !== null) {\n objVal = normalizedValue[1];\n key = `${key}{${normalizedValue[0]}}`;\n }\n\n const valueString = stringifyValue(\n objVal,\n childIndent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n\n if (\n !afterSpaceWasAdded &&\n indent === '' &&\n isObject(objVal) &&\n prevValue &&\n (addObjSpaces === 'before' || addObjSpaces === 'beforeAndAfter')\n ) {\n result += '\\n';\n }\n\n if (Array.isArray(objVal)) {\n const arrayIsSingleLine = valueString.split('\\n').length === 1;\n\n if (arrayIsSingleLine && !valueString.trim().startsWith('-')) {\n result += `${indent}${key}: `;\n } else {\n result += `${indent}${key}:\\n`;\n }\n } else if (isObject(objVal)) {\n if (Object.keys(objVal).length === 0) {\n result += `${indent}${key}: `;\n } else {\n result += `${indent}${key}:\\n`;\n }\n } else {\n result += `${indent}${key}: `;\n }\n\n result += valueString;\n result += '\\n';\n\n if (indent === '') {\n if (isObject(objVal)) {\n if (addObjSpaces === 'after' || addObjSpaces === 'beforeAndAfter') {\n result += '\\n';\n afterSpaceWasAdded = true;\n } else {\n afterSpaceWasAdded = false;\n }\n }\n }\n\n prevValue = objVal;\n }\n\n return result.trimEnd();\n }\n\n if (Array.isArray(value)) {\n let arrayWasAdded = false;\n\n if (\n value.length === 0 ||\n value.every(\n (item) =>\n typeof item === 'string' ||\n typeof item === 'number' ||\n typeof item === 'boolean' ||\n item === null ||\n item === undefined,\n )\n ) {\n let line = '';\n\n line += `[`;\n\n line += value\n .map((item) => {\n let valueToUse = item;\n\n if (depth > maxDepth) {\n valueToUse = `{max depth reached}`;\n }\n\n if (typeof valueToUse === 'string' && valueToUse.includes('\\n')) {\n valueToUse = valueToUse.replace(/\\n/g, '\\\\n');\n }\n\n return stringifyValue(\n valueToUse,\n '',\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n })\n .join(', ');\n\n line += ']';\n\n if (line.length <= maxLineLength) {\n result += line;\n arrayWasAdded = true;\n }\n }\n\n if (!arrayWasAdded) {\n for (let item of value) {\n if (depth > maxDepth) {\n item = `{max depth reached}`;\n }\n\n result += `${indent}- `;\n\n if (Array.isArray(item) || isObject(item)) {\n let arrayString = stringifyValue(\n item,\n childIndent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n\n arrayString = arrayString.trimStart();\n\n result += arrayString;\n } else {\n result += stringifyValue(\n item,\n childIndent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n }\n\n result += '\\n';\n }\n }\n\n return result.trimEnd();\n }\n\n if (typeof value === 'string') {\n if (value.includes('\\n')) {\n const lines = value.split('\\n');\n\n for (const [i, line] of lines.entries()) {\n if (i === 0) {\n if (value.endsWith('\\n')) {\n result += `|`;\n } else {\n result += `|-`;\n }\n\n result += `\\n${indent}${line}\\n`;\n } else {\n result += `${indent}${line}\\n`;\n }\n }\n } else {\n if (value.includes(\"'\")) {\n result += `\"${value}\"`;\n } else {\n result += `'${value}'`;\n }\n }\n\n return result.trimEnd();\n }\n\n if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null ||\n value === undefined\n ) {\n return String(value).trimEnd();\n }\n\n const normalizedValue = normalizeValue(value);\n\n if (normalizedValue !== null) {\n return stringifyValue(\n {\n [`${normalizedValue[0]}#`]: normalizedValue[1],\n },\n indent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n }\n\n return JSON.stringify(value);\n}\n\nfunction normalizeValue(value: unknown): [string, unknown] | null {\n if (value === null || isPlainObject(value) || Array.isArray(value)) {\n return null;\n }\n\n if (value instanceof Map) {\n const mapEntries = Array.from(value.entries());\n\n let mapValue: unknown;\n\n if (mapEntries.every(([key]) => typeof key === 'string')) {\n const mapObjValue: Record<string, unknown> = {};\n\n for (const [key, val] of mapEntries) {\n mapObjValue[key] = val;\n }\n\n mapValue = mapObjValue;\n } else {\n mapValue = mapEntries.map(([key, val]) => ({\n key,\n value: val,\n }));\n }\n\n return ['Map', mapValue];\n }\n\n if (value instanceof Set) {\n const setValue = Array.from(value);\n\n return ['Set', setValue];\n }\n\n if (value instanceof Date) {\n return ['Date', value.toISOString()];\n }\n\n if (value instanceof RegExp) {\n return ['RegExp', value.toString()];\n }\n\n if (value instanceof Error) {\n return [\n 'Error',\n {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n ];\n }\n\n if (value instanceof File) {\n return [\n 'File',\n {\n name: value.name,\n type: value.type,\n lastModified: new Date(value.lastModified).toISOString(),\n size: bytesToHumanReadable(value.size),\n },\n ];\n }\n\n if (typeof value === 'object') {\n if ('toJSON' in value && typeof value.toJSON === 'function') {\n return [value.constructor.name, value.toJSON()];\n }\n\n if ('toString' in value && typeof value.toString === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const stringValue = value.toString();\n\n if (stringValue.toString() !== '[object Object]') {\n return [value.constructor.name, stringValue];\n }\n }\n\n const objectValue = { ...value };\n\n const displayValue: Record<string, unknown> = {};\n let addedKeys = 0;\n\n for (const [key, item] of Object.entries(objectValue)) {\n if (addedKeys > 4) {\n displayValue['...and more properties'] =\n Object.keys(objectValue).length - 4;\n break;\n }\n\n if (\n typeof item === 'string' ||\n typeof item === 'number' ||\n typeof item === 'boolean' ||\n item === null ||\n item === undefined\n ) {\n displayValue[key] = item;\n addedKeys++;\n }\n }\n\n return [String(value.constructor.name), displayValue];\n }\n\n if (typeof value === 'function') {\n const functionString = value.toString();\n\n return [\n `Function`,\n functionString.includes('\\n') ?\n truncateString(functionString.split('\\n').join(''), 40)\n : functionString,\n ];\n }\n\n return null;\n}\n"],"mappings":";;;;;;;;;;;;AAIO,SAAS,cACd,KACA;AAAA,EACE,gBAAgB;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,EACX,mBAAmB;AACrB,IAKI,CAAC,GACG;AACR,MAAI,SAAS,GAAG,KAAK,MAAM,QAAQ,GAAG,KAAK,OAAO,QAAQ,YAAY;AACpE,WAAO,GAAG,eAAe,KAAK,IAAI,eAAe,CAAC,CAAC,eAAe,UAAU,GAAG,gBAAgB,CAAC;AAAA;AAAA,EAClG;AAEA,SAAO,KAAK,UAAU,GAAG,KAAK;AAChC;AAEA,SAAS,eACP,OACA,QACA,eACA,eACA,UACA,OACA,cACQ;AACR,MAAI,SAAS;AACb,QAAM,cAAc,GAAG,MAAM;AAE7B,MAAI,cAAc,KAAK,GAAG;AACxB,QAAI,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AACnC,aAAO;AAAA,IACT;AAEA,QAAI;AACJ,QAAI,qBAAqB;AAEzB,aAAS,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,UAAI,WAAW,UAAa,CAAC,eAAe;AAC1C;AAAA,MACF;AAEA,UAAI,QAAQ,UAAU;AACpB,iBAAS;AAAA,MACX;AAEA,YAAMA,mBAAkB,eAAe,MAAM;AAE7C,UAAIA,qBAAoB,MAAM;AAC5B,iBAASA,iBAAgB,CAAC;AAC1B,cAAM,GAAG,GAAG,IAAIA,iBAAgB,CAAC,CAAC;AAAA,MACpC;AAEA,YAAM,cAAc;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,UACE,CAAC,sBACD,WAAW,MACX,SAAS,MAAM,KACf,cACC,iBAAiB,YAAY,iBAAiB,mBAC/C;AACA,kBAAU;AAAA,MACZ;AAEA,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,cAAM,oBAAoB,YAAY,MAAM,IAAI,EAAE,WAAW;AAE7D,YAAI,qBAAqB,CAAC,YAAY,KAAK,EAAE,WAAW,GAAG,GAAG;AAC5D,oBAAU,GAAG,MAAM,GAAG,GAAG;AAAA,QAC3B,OAAO;AACL,oBAAU,GAAG,MAAM,GAAG,GAAG;AAAA;AAAA,QAC3B;AAAA,MACF,WAAW,SAAS,MAAM,GAAG;AAC3B,YAAI,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AACpC,oBAAU,GAAG,MAAM,GAAG,GAAG;AAAA,QAC3B,OAAO;AACL,oBAAU,GAAG,MAAM,GAAG,GAAG;AAAA;AAAA,QAC3B;AAAA,MACF,OAAO;AACL,kBAAU,GAAG,MAAM,GAAG,GAAG;AAAA,MAC3B;AAEA,gBAAU;AACV,gBAAU;AAEV,UAAI,WAAW,IAAI;AACjB,YAAI,SAAS,MAAM,GAAG;AACpB,cAAI,iBAAiB,WAAW,iBAAiB,kBAAkB;AACjE,sBAAU;AACV,iCAAqB;AAAA,UACvB,OAAO;AACL,iCAAqB;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAEA,kBAAY;AAAA,IACd;AAEA,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,gBAAgB;AAEpB,QACE,MAAM,WAAW,KACjB,MAAM;AAAA,MACJ,CAAC,SACC,OAAO,SAAS,YAChB,OAAO,SAAS,YAChB,OAAO,SAAS,aAChB,SAAS,QACT,SAAS;AAAA,IACb,GACA;AACA,UAAI,OAAO;AAEX,cAAQ;AAER,cAAQ,MACL,IAAI,CAAC,SAAS;AACb,YAAI,aAAa;AAEjB,YAAI,QAAQ,UAAU;AACpB,uBAAa;AAAA,QACf;AAEA,YAAI,OAAO,eAAe,YAAY,WAAW,SAAS,IAAI,GAAG;AAC/D,uBAAa,WAAW,QAAQ,OAAO,KAAK;AAAA,QAC9C;AAEA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAC,EACA,KAAK,IAAI;AAEZ,cAAQ;AAER,UAAI,KAAK,UAAU,eAAe;AAChC,kBAAU;AACV,wBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,CAAC,eAAe;AAClB,eAAS,QAAQ,OAAO;AACtB,YAAI,QAAQ,UAAU;AACpB,iBAAO;AAAA,QACT;AAEA,kBAAU,GAAG,MAAM;AAEnB,YAAI,MAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,GAAG;AACzC,cAAI,cAAc;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UACF;AAEA,wBAAc,YAAY,UAAU;AAEpC,oBAAU;AAAA,QACZ,OAAO;AACL,oBAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,MAAM,SAAS,IAAI,GAAG;AACxB,YAAM,QAAQ,MAAM,MAAM,IAAI;AAE9B,iBAAW,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQ,GAAG;AACvC,YAAI,MAAM,GAAG;AACX,cAAI,MAAM,SAAS,IAAI,GAAG;AACxB,sBAAU;AAAA,UACZ,OAAO;AACL,sBAAU;AAAA,UACZ;AAEA,oBAAU;AAAA,EAAK,MAAM,GAAG,IAAI;AAAA;AAAA,QAC9B,OAAO;AACL,oBAAU,GAAG,MAAM,GAAG,IAAI;AAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,MAAM,SAAS,GAAG,GAAG;AACvB,kBAAU,IAAI,KAAK;AAAA,MACrB,OAAO;AACL,kBAAU,IAAI,KAAK;AAAA,MACrB;AAAA,IACF;AAEA,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,MACE,OAAO,UAAU,YACjB,OAAO,UAAU,aACjB,UAAU,QACV,UAAU,QACV;AACA,WAAO,OAAO,KAAK,EAAE,QAAQ;AAAA,EAC/B;AAEA,QAAM,kBAAkB,eAAe,KAAK;AAE5C,MAAI,oBAAoB,MAAM;AAC5B,WAAO;AAAA,MACL;AAAA,QACE,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,UAAU,KAAK;AAC7B;AAEA,SAAS,eAAe,OAA0C;AAChE,MAAI,UAAU,QAAQ,cAAc,KAAK,KAAK,MAAM,QAAQ,KAAK,GAAG;AAClE,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,KAAK;AACxB,UAAM,aAAa,MAAM,KAAK,MAAM,QAAQ,CAAC;AAE7C,QAAI;AAEJ,QAAI,WAAW,MAAM,CAAC,CAAC,GAAG,MAAM,OAAO,QAAQ,QAAQ,GAAG;AACxD,YAAM,cAAuC,CAAC;AAE9C,iBAAW,CAAC,KAAK,GAAG,KAAK,YAAY;AACnC,oBAAY,GAAG,IAAI;AAAA,MACrB;AAEA,iBAAW;AAAA,IACb,OAAO;AACL,iBAAW,WAAW,IAAI,CAAC,CAAC,KAAK,GAAG,OAAO;AAAA,QACzC;AAAA,QACA,OAAO;AAAA,MACT,EAAE;AAAA,IACJ;AAEA,WAAO,CAAC,OAAO,QAAQ;AAAA,EACzB;AAEA,MAAI,iBAAiB,KAAK;AACxB,UAAM,WAAW,MAAM,KAAK,KAAK;AAEjC,WAAO,CAAC,OAAO,QAAQ;AAAA,EACzB;AAEA,MAAI,iBAAiB,MAAM;AACzB,WAAO,CAAC,QAAQ,MAAM,YAAY,CAAC;AAAA,EACrC;AAEA,MAAI,iBAAiB,QAAQ;AAC3B,WAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,EACpC;AAEA,MAAI,iBAAiB,OAAO;AAC1B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,SAAS,MAAM;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,MAAI,iBAAiB,MAAM;AACzB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,cAAc,IAAI,KAAK,MAAM,YAAY,EAAE,YAAY;AAAA,QACvD,MAAM,qBAAqB,MAAM,IAAI;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,YAAY,SAAS,OAAO,MAAM,WAAW,YAAY;AAC3D,aAAO,CAAC,MAAM,YAAY,MAAM,MAAM,OAAO,CAAC;AAAA,IAChD;AAEA,QAAI,cAAc,SAAS,OAAO,MAAM,aAAa,YAAY;AAE/D,YAAM,cAAc,MAAM,SAAS;AAEnC,UAAI,YAAY,SAAS,MAAM,mBAAmB;AAChD,eAAO,CAAC,MAAM,YAAY,MAAM,WAAW;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,cAAc,EAAE,GAAG,MAAM;AAE/B,UAAM,eAAwC,CAAC;AAC/C,QAAI,YAAY;AAEhB,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,WAAW,GAAG;AACrD,UAAI,YAAY,GAAG;AACjB,qBAAa,wBAAwB,IACnC,OAAO,KAAK,WAAW,EAAE,SAAS;AACpC;AAAA,MACF;AAEA,UACE,OAAO,SAAS,YAChB,OAAO,SAAS,YAChB,OAAO,SAAS,aAChB,SAAS,QACT,SAAS,QACT;AACA,qBAAa,GAAG,IAAI;AACpB;AAAA,MACF;AAAA,IACF;AAEA,WAAO,CAAC,OAAO,MAAM,YAAY,IAAI,GAAG,YAAY;AAAA,EACtD;AAEA,MAAI,OAAO,UAAU,YAAY;AAC/B,UAAM,iBAAiB,MAAM,SAAS;AAEtC,WAAO;AAAA,MACL;AAAA,MACA,eAAe,SAAS,IAAI,IAC1B,eAAe,eAAe,MAAM,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IACtD;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AACT;","names":["normalizedValue"]}