@ankhzet/utils 1.17.0 → 1.19.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Change Log - @torque/utils
2
2
 
3
+ ## 1.19.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Fix builds
8
+
9
+ ## 1.18.0
10
+
11
+ ### Minor Changes
12
+
13
+ - Fix release
14
+
3
15
  ## 1.17.0
4
16
 
5
17
  ### Minor Changes
@@ -0,0 +1,360 @@
1
+ import { cloneDeep } from 'lodash-es';
2
+ import { Constructor as Constructor_2 } from 'type-fest';
3
+ import { debounce } from 'lodash-es';
4
+ import { escapeRegExp } from 'lodash-es';
5
+ import { JsonDocument } from '@anchan828/json-ast';
6
+ import { memoize } from 'lodash-es';
7
+ import { merge } from 'lodash-es';
8
+ import { ParseSettings } from '@anchan828/json-ast';
9
+ import { PartialDeep } from 'type-fest';
10
+ import { Simplify } from 'type-fest';
11
+ import { toJSON } from '@anchan828/json-ast';
12
+ import { toString as toString_2 } from '@anchan828/json-ast';
13
+
14
+ /** @public */
15
+ export declare type AnyTuple = any[];
16
+
17
+ /** @public */
18
+ export declare function assert<T>(truthy: T | {} | Falsy, status?: number | string, message?: string, props?: object): asserts truthy is NonNullable<T>;
19
+
20
+ /**
21
+ * @public
22
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#copying_accessors
23
+ */
24
+ export declare const assignProxy: <T>(target: T, ...sources: (object | undefined)[]) => T;
25
+
26
+ /** @public */
27
+ export declare type AsyncMethod<A extends any[], T> = TypedMethod<A, Promise<T>>;
28
+
29
+ /** @public */
30
+ export declare type Bag<T> = Record<string, T>;
31
+
32
+ /** @public */
33
+ export declare type Catchable<T> = Pick<Promise<T>, 'catch'>;
34
+
35
+ export { cloneDeep }
36
+
37
+ /** @public */
38
+ export declare type Constructor<T = any, Arguments extends unknown[] = any[]> = new (...arguments_: Arguments) => T;
39
+
40
+ declare type Curry<M extends Method, Provided extends AnyTuple> = <Rest extends PartialTuple<ExtractRemainder<M, Provided>>>(...args: Rest) => CurryOrValue<M, [...Provided, ...Rest]>;
41
+
42
+ /** @public */
43
+ export declare function curry<M extends Method, ProvidedArgs extends AnyTuple>(fn: M, ...providedArgs: ProvidedArgs): Curry<M, ProvidedArgs>;
44
+
45
+ declare type CurryOrValue<M extends Method, Provided extends AnyTuple> = ExtractRemainder<M, Provided> extends NonEmptyTuple ? Curry<M, Provided> : ReturnType<M>;
46
+
47
+ export { debounce }
48
+
49
+ /** @public */
50
+ export declare const delayedWarning: (warning: string, item: any) => void;
51
+
52
+ /** @public */
53
+ export declare type ErrorVariation = {
54
+ message?: string;
55
+ stack?: string;
56
+ description?: ErrorVariation;
57
+ status?: number;
58
+ code?: number | string;
59
+ bag?: Bag<unknown>;
60
+ errors?: Bag<unknown>;
61
+ cause?: ErrorVariation;
62
+ };
63
+
64
+ export { escapeRegExp }
65
+
66
+ declare type ExtractRemainder<M extends Method, Provided extends AnyTuple> = ExtractTuple<Parameters<M>, Provided>;
67
+
68
+ /** @public */
69
+ export declare type ExtractTuple<Expected extends AnyTuple, Provided extends AnyTuple> = Expected extends [infer ExpectedHead, ...infer RestRemaining] ? Provided extends [infer ProvidedHead, ...infer RestProvided] ? ExtractTuple<RestRemaining, RestProvided> : Expected : [];
70
+
71
+ /** @public */
72
+ export declare type Falsy = null | false | undefined | '' | 0;
73
+
74
+ /** @public */
75
+ export declare const fromEntries: <T extends object, K extends keyof T, U>(o: T, mapper: (entry: T[K], key: K) => U) => Record<K, U>;
76
+
77
+ /**
78
+ * @public
79
+ */
80
+ export declare const genId: (e: Map<string, unknown>, length?: number) => string;
81
+
82
+ /** @public */
83
+ export declare const get: <T, K extends Extract<keyof T, string>>(data: T, key: K | `${K}.${string}`) => any;
84
+
85
+ /** @public */
86
+ export declare function getDiff<O1, O2 extends PartialDeep<O1>>(oldData: O1, newData: O2): PartialDeep<O1>;
87
+
88
+ /** @public */
89
+ export declare const getErrorDetails: <T, E extends PrettyErrorClass<T> = PrettyErrorClass<T>>(e: unknown, as?: Constructor_2<E>) => E;
90
+
91
+ /** @public */
92
+ export declare const getStackTrace: (e: Error) => string[];
93
+
94
+ /** @public */
95
+ export declare type HttpMethod = 'HEAD' | 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';
96
+
97
+ /** @public */
98
+ export declare const humanReadableFileSize: (size: number) => string;
99
+
100
+ /** @public */
101
+ export declare const interpolate: (min: number, max: number, group: number[][]) => number[][];
102
+
103
+ /** @public */
104
+ export declare const interpolateBraces: (str: string, data: object) => string;
105
+
106
+ /** @public */
107
+ export declare const isCatchable: <T, P extends Catchable<T> = Catchable<T>>(v: unknown | Catchable<T>) => v is P;
108
+
109
+ /** @public */
110
+ export declare const isDirectKey: <T, K extends Extract<keyof T, string>>(key: K | `${K}.${string}`) => key is K;
111
+
112
+ /** @public */
113
+ export declare const isEqual: (a: unknown, b: unknown) => boolean;
114
+
115
+ /** @public */
116
+ export declare const isError: <K extends PropertyKey>(e: unknown) => e is Error & { [P in K]: unknown; };
117
+
118
+ /** @public */
119
+ export declare const isFunction: <T, Args extends any[]>(value: T | ((...args: Args) => T)) => value is (...args: Args) => T;
120
+
121
+ /** @public */
122
+ export declare const isLike: <T = {}>(o: unknown) => o is T;
123
+
124
+ /** @public */
125
+ export declare const isMethod: <M = Method>(m: unknown | M) => m is Method;
126
+
127
+ /** @public */
128
+ export declare const isPromiseLike: <T, P extends Thenable<T> & Catchable<T>>(v: unknown | object) => v is P;
129
+
130
+ /** @public */
131
+ export declare const isShallowEqual: (a: any, b: any, loose?: boolean) => boolean;
132
+
133
+ /** @public */
134
+ export declare const isStatusError: (e: unknown) => e is Error & {
135
+ status: number;
136
+ };
137
+
138
+ /** @public */
139
+ export declare const isThenable: <T, P extends Thenable<T> = Thenable<T>>(v: unknown | Thenable<T>) => v is P;
140
+
141
+ export declare const JSON5: {
142
+ analyze: (source: string, settings?: ParseSettings) => JsonDocument;
143
+ parse: (source: string) => unknown;
144
+ stringify: typeof toString_2;
145
+ toJSON: typeof toJSON;
146
+ };
147
+
148
+ /** @public */
149
+ export declare enum Log {
150
+ silent = 0,
151
+ error = 1,
152
+ warn = 2,
153
+ log = 3,
154
+ info = 4
155
+ }
156
+
157
+ /** @public */
158
+ export declare type Logger = {
159
+ info: LogMethod;
160
+ log: LogMethod;
161
+ warn: LogMethod;
162
+ error: LogMethod;
163
+ };
164
+
165
+ /** @public */
166
+ export declare type LogLevel = Exclude<Log, Log.silent>;
167
+
168
+ /** @public */
169
+ export declare type LogMethod = (message?: any, ...optionalParams: any[]) => void;
170
+
171
+ /** @public */
172
+ export declare const logWrap: {
173
+ method: <M extends Method, A extends Parameters<M>, R extends ReturnType<M>>(logger: Logger, print: PrintMethod<M>, cb: M) => TypedMethod<A, R>;
174
+ prop: <T extends Record<K, (...args: any[]) => any>, K extends keyof T>(logger: Logger, print: PrintMethod<T[K]>, o: T, prop: K) => T;
175
+ object: <T>(logger: Logger, print: PrintMethod<Method>, selector: string | string[], o: T) => T;
176
+ };
177
+
178
+ /**
179
+ * @public
180
+ */
181
+ export declare const lorem: (min?: number, max?: number) => string;
182
+
183
+ /** @public */
184
+ export declare const makeLogger: (level: string | number | undefined, log: ((...args: any[]) => void) | Logger) => Logger & {
185
+ (level: LogLevel, ...args: any): void;
186
+ };
187
+
188
+ /** @public */
189
+ export declare const mapValues: <T, U>(bag: Bag<T>, mapper: (value: T, name: string) => [string, U] | undefined | false) => Bag<U> | undefined;
190
+
191
+ /** @public */
192
+ export declare const matchId: <Item extends {
193
+ id: ID;
194
+ }, ID>(id: ID) => (item: Item) => boolean;
195
+
196
+ export { memoize }
197
+
198
+ export { merge }
199
+
200
+ /** @public */
201
+ export declare type Method = (...args: any[]) => any;
202
+
203
+ /** @public */
204
+ export declare type NonEmptyTuple = [unknown, ...any[]];
205
+
206
+ /** @public */
207
+ export declare type NonUndefinedKeys<T> = {
208
+ [N in keyof T]: T[N] extends {} ? N : never;
209
+ }[keyof T];
210
+
211
+ /** @public */
212
+ export declare const noop: () => void;
213
+
214
+ /** @public */
215
+ export declare const objectHash: (o?: object) => string | undefined;
216
+
217
+ /** @public */
218
+ export declare const omit: <T extends object, K extends keyof T, O extends K>(obj: T, keys: O[]) => Omit<T, O>;
219
+
220
+ /** @public */
221
+ export declare type OmitNever<T> = {
222
+ [N in NonUndefinedKeys<T> as [T[N]] extends [never] ? never : N]: T[N];
223
+ };
224
+
225
+ /** @public */
226
+ export declare type Optional<T extends object, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
227
+
228
+ /** @public */
229
+ export declare type PartialTuple<T extends AnyTuple, Extracted extends AnyTuple = []> = T extends [infer Next, ...infer Rest] ? PartialTuple<Rest, [...Extracted, Next?]> : [...Extracted, ...T];
230
+
231
+ /** @public */
232
+ export declare const pick: <T extends object, K extends keyof T>(obj: T, keys: K[]) => Pick<T, K>;
233
+
234
+ /** @public */
235
+ export declare type PrettifyContext<T = unknown> = T & Simplify<ErrorVariation & {
236
+ trim?: RegExp;
237
+ keep?: RegExp;
238
+ detail?: boolean;
239
+ }>;
240
+
241
+ /** @public */
242
+ export declare const PrettyError: Omit<typeof _PrettyError, "constructor"> & (new <T>(data: PrettifyContext<T>) => _PrettyError<T> & PrettifyContext<T>);
243
+
244
+ declare class _PrettyError<T> extends Error implements PrettifyContext {
245
+ #private;
246
+ static type: string;
247
+ static status: number;
248
+ name: string;
249
+ status: number;
250
+ cause?: ErrorVariation;
251
+ trim?: RegExp;
252
+ keep?: RegExp;
253
+ detail?: boolean;
254
+ trimmed: number;
255
+ constructor(props: Simplify<PrettifyContext<T & {
256
+ message?: string;
257
+ }>>);
258
+ get description(): PrettifyContext<T>;
259
+ static is<E extends _PrettyError<T>, T extends ErrorVariation>(this: Constructor_2<E> & {
260
+ type?: string;
261
+ }, e?: unknown): e is E;
262
+ static extractMessage(e?: {
263
+ message?: string;
264
+ bag?: {
265
+ message: string;
266
+ };
267
+ }): string | undefined;
268
+ }
269
+
270
+ /** @public */
271
+ export declare type PrettyErrorClass<T> = InstanceType<typeof PrettyError<T>>;
272
+
273
+ /** @public */
274
+ export declare type PrintMethod<M extends Method> = TypedMethod<[Error | null, ReturnType<M> | null, ...Parameters<M>], string>;
275
+
276
+ /**
277
+ * @public
278
+ */
279
+ export declare const randomID: (length?: number) => string;
280
+
281
+ /**
282
+ * @public
283
+ */
284
+ export declare const randomIndex: (max: number) => number;
285
+
286
+ /**
287
+ * @public
288
+ */
289
+ export declare const randomNumber: (min: number, max: number) => number;
290
+
291
+ /** @public */
292
+ export declare function safeParse<T, U extends T = T>(json: string | undefined): T | undefined;
293
+
294
+ /** @public */
295
+ export declare function safeParse<T, U extends T = T>(json: string | undefined, defaults: U): T;
296
+
297
+ /** @public */
298
+ export declare const set: <T, K extends Extract<keyof T, string>>(data: T, key: K | `${K}.${string}`, value: any) => void;
299
+
300
+ /** @public */
301
+ export declare const sleepAsync: (ms: number) => Promise<void>;
302
+
303
+ /** @public */
304
+ export declare type Strings = Bag<string>;
305
+
306
+ /**
307
+ * @public
308
+ */
309
+ export declare const takeChance: (proportion: number) => boolean;
310
+
311
+ /**
312
+ * @public
313
+ */
314
+ export declare const takeMany: <T extends unknown>(from: T[], min: number, max: number) => T[];
315
+
316
+ /**
317
+ * @public
318
+ */
319
+ export declare const takeOne: <T extends unknown>(from: T[], except?: T[]) => T;
320
+
321
+ /**
322
+ * @public
323
+ */
324
+ export declare const takeSome: <T extends unknown>(from: T[], min: number, max: number) => T[];
325
+
326
+ /** @public */
327
+ export declare const template: (braces?: [string, string]) => (str: string, data: object) => string;
328
+
329
+ /** @public */
330
+ export declare type Thenable<T> = Pick<Promise<T>, 'then'>;
331
+
332
+ /** @public */
333
+ export declare const toStrings: (o: object) => Strings;
334
+
335
+ /** @public */
336
+ export declare const trimMD: (text?: string) => string | undefined;
337
+
338
+ /** @public */
339
+ export declare type TupleN<T, N extends number, R extends unknown[] = []> = R['length'] extends N ? R : TupleN<T, N, [T, ...R]>;
340
+
341
+ /** @public */
342
+ export declare type TypedMethod<A extends any[], T> = (...args: A) => T;
343
+
344
+ /** @public */
345
+ export declare const ucFirst: (str: string) => string;
346
+
347
+ /** @public */
348
+ export declare type Values<T> = T[keyof T] & {};
349
+
350
+ /** @public */
351
+ export declare const wildcardRegexp: (pattern: string, flags?: string, greedy?: boolean) => RegExp;
352
+
353
+ export { }
354
+
355
+
356
+ declare global {
357
+ interface String {
358
+ colors: Record<ColorKeys, string>;
359
+ }
360
+ }
package/dist/index.js ADDED
@@ -0,0 +1,307 @@
1
+ import { cloneDeep as e, debounce as t, escapeRegExp as n, memoize as r, merge as i } from "lodash-es";
2
+ import { parse as a, toJSON as o, toString as s } from "@anchan828/json-ast";
3
+ //#region src/types.ts
4
+ var c = /* @__PURE__ */ function(e) {
5
+ return e[e.silent = 0] = "silent", e[e.error = 1] = "error", e[e.warn = 2] = "warn", e[e.log = 3] = "log", e[e.info = 4] = "info", e;
6
+ }({}), l = (e) => !!(e ?? !1) && typeof e == "object", u = (e) => !!e, d = (e) => typeof e == "function", f = (e) => l(e) && !!e.then, p = (e) => l(e) && !!e.catch, ee = (e) => f(e) && p(e), m = (e) => !!e?.message || e instanceof Error, te = (e) => m(e) && typeof e?.status == "number", ne = {
7
+ analyze: (e, t) => a(e, t),
8
+ parse: (e) => o(a(e)),
9
+ stringify: s,
10
+ toJSON: o
11
+ };
12
+ Object.groupBy || (Object.groupBy = (e, t) => {
13
+ let n = {}, r = 0;
14
+ for (let i of e) {
15
+ let e = t(i, r++), a = n[e];
16
+ a ? a.push(i) : n[e] = [i];
17
+ }
18
+ return n;
19
+ });
20
+ var h = (e) => !e.includes("."), re = (e, t) => {
21
+ if (h(t)) return e[t];
22
+ let n = t.split("."), r, i = 0, a = e;
23
+ for (; e && (r = n[i++]);) if (a = a[r] ?? void 0, a === void 0) return;
24
+ return a;
25
+ }, g = (e, t, n) => {
26
+ if (h(t)) {
27
+ e[t] = n;
28
+ return;
29
+ }
30
+ let r = t.split("."), i = r.length - 1, a, o = 0, s = e;
31
+ for (; e && (a = r[o++]) && o <= i;) if (s = s[a] ?? void 0, s === void 0) return;
32
+ a && (s[a] = n);
33
+ }, _ = (e, t) => Object.entries(e).reduce((e, [n, r]) => (t.includes(n) || (e[n] = r), e), {}), v = (e, t) => t.reduce((t, n) => (t[n] = e[n], t), {});
34
+ function y(e, t) {
35
+ try {
36
+ return e ? o(a(e)) : void 0;
37
+ } catch {}
38
+ return t;
39
+ }
40
+ var b = (e, t) => {
41
+ if (e === t) return !0;
42
+ if (t && typeof t == "object" && e && typeof e == "object") {
43
+ let n = Object.keys(e);
44
+ if (n.length !== Object.keys(t).length) return !1;
45
+ for (let r of n) {
46
+ let n = e[r], i = t[r];
47
+ if (n !== i && !b(n, i)) return !1;
48
+ }
49
+ return !0;
50
+ }
51
+ return !1;
52
+ }, ie = (e, t, n) => {
53
+ if (e === t) return !0;
54
+ if ((e && typeof e) !== "object" || (t && typeof t) !== "object") return !1;
55
+ let r = Object.keys(e);
56
+ if (!n) {
57
+ let e = Object.keys(t);
58
+ if (r.length !== e.length) return !1;
59
+ }
60
+ for (let n of r) if (t[n] !== e[n]) return !1;
61
+ return !0;
62
+ }, ae = (e) => e && Object.entries(e).map(([e, t]) => e + t).join(";"), x = (e) => {
63
+ let t = e[0] || "", n = e.substring(1);
64
+ return t.toLocaleUpperCase() + n;
65
+ }, S = (e, t) => Object.fromEntries(Object.entries(e).map(([e, n]) => [e, t(n, e)])), oe = (e, t) => {
66
+ let n = [];
67
+ for (let [r, i] of Object.entries(e)) {
68
+ let e = t(i, r);
69
+ e && n.push(e);
70
+ }
71
+ if (n.length) return Object.fromEntries(n);
72
+ }, se = (e) => S(e, String), C = (e = ["{", "}"]) => {
73
+ let [t, r] = e, i = n(t), a = n(r), o = RegExp(`${i}([^${a}]+)${a}`, "g");
74
+ return (e, t) => e.replace(o, (e, n) => n in t ? t[n] : e);
75
+ }, ce = C(["{", "}"]), le = (e) => new Promise((t) => setTimeout(t, e)), w = () => {}, ue = (e, t, n) => {
76
+ let r = t - e;
77
+ return n.map((t) => t.map((t) => e + Math.min(Math.max(0, t), 1) * r));
78
+ }, de = "KMGTPEZY", fe = (e) => {
79
+ if (e < 1024) return e + " B";
80
+ let t = Math.floor(Math.log(e) / Math.log(1024)), n = e / 1024 ** t, r = Math.round(n);
81
+ return `${r < 10 ? n.toFixed(2) : r < 100 ? n.toFixed(1) : r} ${de[t - 1]}B`;
82
+ }, T = (e, t = "i", r = !1) => {
83
+ let i = [[
84
+ "PATTERN_REPLACE_ANY",
85
+ "*",
86
+ ".*?"
87
+ ], [
88
+ "PATTERN_REPLACE_ONE",
89
+ "?",
90
+ "."
91
+ ]], a = e;
92
+ for (let [e, t] of i) a = a.replaceAll(t, e);
93
+ a = n(a);
94
+ for (let [e, , t] of i) a = a.replaceAll(e, t);
95
+ return new RegExp(r ? `^${a}$` : a, t);
96
+ }, E = (e) => {
97
+ let [, t] = e?.match(/(?:\n|^)(\s+)\S/) || [void 0, void 0];
98
+ if (t) {
99
+ let n = RegExp(`^\\s{1,${t.length}}`), r = e.split("\n").map((e) => e.replace(n, "")), i = 0, a = r.length - 1;
100
+ for (; i < a && r[i] === "";) i++;
101
+ for (; i < a && r[a] === "";) a--;
102
+ return r.slice(i, a + 1).join("\n");
103
+ }
104
+ return e;
105
+ }, D = {}, O = (e, n) => {
106
+ let r = D[e] || (D[e] = {
107
+ fn: t((t) => {
108
+ console.warn(e, t.join(", ")), t.splice(0, t.length);
109
+ }, 1e3),
110
+ items: [],
111
+ old: /* @__PURE__ */ new Set()
112
+ });
113
+ r.old.has(n) || (r.old.add(n), r.items.push(n), r.fn(r.items));
114
+ }, k = (e) => {
115
+ let t = (e.cause || e).stack;
116
+ if (t) return t.split("\n");
117
+ let n = {};
118
+ return Error.captureStackTrace?.(n), n.stack?.split("\n") || [];
119
+ }, A = (e, ...t) => (t.forEach((t) => {
120
+ if (!t) return;
121
+ let n = Object.fromEntries(Object.keys(t).map((e) => [e, Object.getOwnPropertyDescriptor(t, e)]).filter(([, e]) => !!e));
122
+ Object.getOwnPropertySymbols(t).forEach((e) => {
123
+ let r = Object.getOwnPropertyDescriptor(t, e);
124
+ r?.enumerable && (n[e] = r);
125
+ }), Object.defineProperties(e, n);
126
+ }), e), j = (e) => (t) => t.id === e;
127
+ //#endregion
128
+ //#region src/diff.ts
129
+ function M(e, t) {
130
+ if (Array.isArray(t)) return t;
131
+ if (t && typeof t == "object" && e && typeof e == "object") {
132
+ let n = {};
133
+ for (let r in t) {
134
+ if (!Object.hasOwn(t, r)) continue;
135
+ let i = e[r], a = t[r];
136
+ b(i, a) || (n[r] = M(i, a));
137
+ }
138
+ return n;
139
+ }
140
+ return t;
141
+ }
142
+ //#endregion
143
+ //#region src/error.ts
144
+ var N = "node_modules", P = /[\\/]common[\\/]temp[\\/]$/i, F = (e) => (e.includes(N) && (e = e.split(N, 1)[0]), P.test(e) && (e = e.slice(0, -13)), e), I = ((e, t) => F(new URL(e, t).toString()))(".", import.meta.url), L = class extends Error {
145
+ static type = "Error";
146
+ static status = 500;
147
+ #e;
148
+ name;
149
+ status;
150
+ cause;
151
+ trim;
152
+ keep;
153
+ detail;
154
+ trimmed;
155
+ constructor(e) {
156
+ return super(e.message || e.cause?.message), this.trimmed = 0, this.name = this.constructor.type, this.status = this.constructor.status, Object.assign(this, e), this.trim === void 0 && (this.trim = z), this.stack = this.description.stack, this;
157
+ }
158
+ get description() {
159
+ if (this.#e) return this.#e;
160
+ if (this.#e = this, this.cause && !this.cause.stack) return this.stack = " at [assert] (<unknown>:1:1)", this.#e;
161
+ let e = k(this).filter(me(this)), t = (this.detail ? e.map(pe(I)) : e).join("\n"), n = this.trimmed ? ` (${this.trimmed} frames trimmed)` : "";
162
+ return this.#e.stack = `[Error] ${this.message}${n}\n${t}`, this.#e;
163
+ }
164
+ static is(e) {
165
+ return !!e && (e.name === this.type || e.constructor instanceof this);
166
+ }
167
+ static extractMessage(e) {
168
+ return e?.bag?.message || e?.message;
169
+ }
170
+ }, R = /^\s*at (assert|makePrettyError|getErrorDetails)/, z = /\((?:node:)?internal\/\w+/, B = /[\s(]((?:file:\/\/)?\/[^):]+)(?::\d+)*/, V = "\n ", pe = (e) => (t) => {
171
+ let [, n] = t.match(B) || [];
172
+ if (n?.startsWith(e)) {
173
+ let r = n.lastIndexOf(N), i = r > 0, a = (i ? "module:" : "project:") + n.slice(i ? r + 12 - n.length + 1 : e.length);
174
+ return t.replace("file://", "") + V + a + V;
175
+ }
176
+ return t;
177
+ }, H = (e) => (t) => e && e.test(t), me = (e) => {
178
+ let t = H(e.keep), n = H(e.trim);
179
+ return (r) => {
180
+ if (!R.test(r)) {
181
+ if (t(r) || !n(r)) return !0;
182
+ e.trimmed++;
183
+ }
184
+ };
185
+ }, U = L, W = (e, t = U) => {
186
+ let n = e, r = n.message || (typeof e == "string" ? e : "");
187
+ return new t({
188
+ cause: n,
189
+ message: r,
190
+ status: n.status || 500,
191
+ bag: n.bag || n.errors || { message: r },
192
+ detail: !0,
193
+ ...e
194
+ });
195
+ };
196
+ //#endregion
197
+ //#region src/curry.ts
198
+ function G(e, ...t) {
199
+ return function(...n) {
200
+ let r = [...t, ...n];
201
+ return r.length >= e.length ? e(...r) : G(e, ...r);
202
+ };
203
+ }
204
+ //#endregion
205
+ //#region src/generators.ts
206
+ var he = 97, ge = 48, K = (e, t, n) => String.fromCharCode(e + t % n), _e = (e, t = 26) => K(he, e, t), ve = (e) => K(ge, e, 10), ye = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.".split(/\W+/), q = (e = 10) => {
207
+ let t = [];
208
+ for (; e-- > 0;) {
209
+ let e = ~~(Math.random() * 100), n = e < 70 ? _e(e, 6) : ve(e);
210
+ t.push(n);
211
+ }
212
+ return t.join("");
213
+ }, J = (e) => ~~(Math.random() * e), Y = (e, t) => e + ~~((t - e) * Math.random()), be = (e = 2, t = 20) => x(X(ye, e, t).join(" ")), xe = (e) => Y(0, 100) < 100 * e, Se = (e, t) => {
214
+ if (!e.length) throw Error("Source is empty");
215
+ if (e.length === t?.length) throw Error("Exceptions length should be less than source length");
216
+ for (;;) {
217
+ let n = e[J(e.length)];
218
+ if (!t?.includes(n)) return n;
219
+ }
220
+ }, X = (e, t, n) => {
221
+ let r = Y(t, n), i = [];
222
+ for (; r-- > 0;) i.push(e[J(e.length)]);
223
+ return i;
224
+ }, Z = (e, t, n) => {
225
+ if (t > e.length) throw Error("Source has lesser items than min required");
226
+ let r = Y(t, n), i = [], a = new Set(e);
227
+ for (; r > 0 && a.size;) {
228
+ let e = [...a.values()][J(a.size)];
229
+ i.includes(e) || (i.push(e), a.delete(e), r--);
230
+ }
231
+ return i;
232
+ }, Ce = (e, t = 8) => {
233
+ let n;
234
+ do
235
+ n = q(t);
236
+ while (e.has(n));
237
+ return n;
238
+ };
239
+ //#endregion
240
+ //#region src/debug.ts
241
+ function we(e, t, n, r) {
242
+ if (!e) throw typeof t != "number" && (n = t, t = 500), new U({
243
+ message: n,
244
+ status: t,
245
+ ...r
246
+ });
247
+ }
248
+ var Q = (e, t, n, r) => {
249
+ let [i, ...a] = Array.isArray(n) ? n : n.split("."), o = !a.length, s = G($, e, t), c = G(Q, e, t, a), l = (e) => {
250
+ if (o && u(e)) return s(e);
251
+ if (!o && e && typeof e == "object") return c(e);
252
+ };
253
+ if (i === "*") for (let [e, t] of Object.entries(r)) {
254
+ let n = t && l(t);
255
+ n && (r[e] = n);
256
+ }
257
+ else {
258
+ let e = i, t = r[e], n = t && l(t);
259
+ n && (r[e] = n);
260
+ }
261
+ return r;
262
+ }, Te = (e, t, n, r) => ({
263
+ ...n,
264
+ [r]: $(e, t, n[r])
265
+ }), $ = (e, t, n) => (...r) => {
266
+ let i = (n, i) => {
267
+ if (n) {
268
+ let i = W(n);
269
+ throw e.error("%s: %o", t(i, null, ...r), i.description), i;
270
+ }
271
+ if (i) return e.info(t(null, i, ...r)), i;
272
+ };
273
+ try {
274
+ let e = n(...r);
275
+ return f(e) ? e.then((e) => i(null, e), (e) => i(e, null)) : i(null, e);
276
+ } catch (e) {
277
+ throw i(e, null);
278
+ }
279
+ }, Ee = {
280
+ method: $,
281
+ prop: Te,
282
+ object: Q
283
+ }, De = (e = 1, t = console) => ({
284
+ error: e < 1 ? w : t.error.bind(t),
285
+ warn: e < 2 ? w : t.warn.bind(t),
286
+ log: e < 3 ? w : t.log.bind(t),
287
+ info: e < 4 ? w : t.info.bind(t)
288
+ }), Oe = (e) => !!c[e], ke = (e, t) => {
289
+ let n = De(Oe(e) ? c[e] : c.error, "log" in t ? t : {
290
+ log: (e, ...n) => t(e, ...n),
291
+ info: (e, ...n) => t(String(e).colors.gray, ...n),
292
+ warn: (e, ...n) => t(String(e).colors.yellow, ...n),
293
+ error: (e, ...n) => t(String(e).colors.red, ...n)
294
+ });
295
+ return Object.assign(function(e, ...t) {
296
+ switch (e) {
297
+ case c.info: return n.info(...t);
298
+ case c.log: return n.log(...t);
299
+ case c.warn: return n.warn(...t);
300
+ case c.error: return n.error(...t);
301
+ }
302
+ }, n);
303
+ };
304
+ //#endregion
305
+ export { ne as JSON5, c as Log, U as PrettyError, we as assert, A as assignProxy, e as cloneDeep, G as curry, t as debounce, O as delayedWarning, n as escapeRegExp, S as fromEntries, Ce as genId, re as get, M as getDiff, W as getErrorDetails, k as getStackTrace, fe as humanReadableFileSize, ue as interpolate, ce as interpolateBraces, p as isCatchable, h as isDirectKey, b as isEqual, m as isError, d as isFunction, l as isLike, u as isMethod, ee as isPromiseLike, ie as isShallowEqual, te as isStatusError, f as isThenable, Ee as logWrap, be as lorem, ke as makeLogger, oe as mapValues, j as matchId, r as memoize, i as merge, w as noop, ae as objectHash, _ as omit, v as pick, q as randomID, J as randomIndex, Y as randomNumber, y as safeParse, g as set, le as sleepAsync, xe as takeChance, X as takeMany, Se as takeOne, Z as takeSome, C as template, se as toStrings, E as trimMD, x as ucFirst, T as wildcardRegexp };
306
+
307
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["#description"],"sources":["../src/types.ts","../src/utils.ts","../src/diff.ts","../src/error.ts","../src/curry.ts","../src/generators.ts","../src/debug.ts"],"sourcesContent":["import type { Simplify } from 'type-fest';\n\n/** @public */\nexport type Falsy = null | false | undefined | '' | 0;\n\n/** @public */\nexport type Bag<T> = Record<string, T>;\n/** @public */\nexport type Strings = Bag<string>;\n/** @public */\nexport type Values<T> = T[keyof T] & {};\n\n/** @public */\nexport type AnyTuple = any[];\n/** @public */\nexport type NonEmptyTuple = [unknown, ...any[]];\n/** @public */\nexport type Method = (...args: any[]) => any;\n/** @public */\nexport type TypedMethod<A extends any[], T> = (...args: A) => T;\n/** @public */\nexport type AsyncMethod<A extends any[], T> = TypedMethod<A, Promise<T>>;\n/** @public */\nexport type Constructor<T = any, Arguments extends unknown[] = any[]> = new (...arguments_: Arguments) => T;\n\n/** @public */\nexport type NonUndefinedKeys<T> = {\n [N in keyof T]: T[N] extends {} ? N : never;\n}[keyof T];\n\n/** @public */\nexport type OmitNever<T> = {\n [N in NonUndefinedKeys<T> as [T[N]] extends [never] ? never : N]: T[N];\n};\n\n/** @public */\nexport type Optional<T extends object, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/** @public */\nexport type HttpMethod = 'HEAD' | 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';\n\n/** @public */\nexport type ErrorVariation = {\n message?: string;\n stack?: string;\n description?: ErrorVariation;\n status?: number;\n code?: number | string;\n bag?: Bag<unknown>;\n errors?: Bag<unknown>;\n cause?: ErrorVariation;\n};\n\n/** @public */\nexport type PrettifyContext<T = unknown> = T &\n Simplify<\n ErrorVariation & {\n trim?: RegExp;\n keep?: RegExp;\n detail?: boolean;\n }\n >;\n\n/** @public */\nexport type Thenable<T> = Pick<Promise<T>, 'then'>;\n/** @public */\nexport type Catchable<T> = Pick<Promise<T>, 'catch'>;\n\n/** @public */\nexport type LogMethod = (message?: any, ...optionalParams: any[]) => void;\n\n/** @public */\nexport type Logger = {\n info: LogMethod;\n log: LogMethod;\n warn: LogMethod;\n error: LogMethod;\n};\n\n/** @public */\nexport enum Log {\n silent = 0,\n error = 1,\n warn = 2,\n log = 3,\n info = 4,\n}\n\n/** @public */\nexport type LogLevel = Exclude<Log, Log.silent>;\n\n/** @public */\nexport type PrintMethod<M extends Method> = TypedMethod<[Error | null, ReturnType<M> | null, ...Parameters<M>], string>;\n\n/** @public */\nexport type PartialTuple<T extends AnyTuple, Extracted extends AnyTuple = []> =\n //\n T extends [infer Next, ...infer Rest] //\n ? PartialTuple<Rest, [...Extracted, Next?]>\n : [...Extracted, ...T];\n\n/** @public */\nexport type ExtractTuple<Expected extends AnyTuple, Provided extends AnyTuple> =\n Expected extends [infer ExpectedHead, ...infer RestRemaining] //\n ?\n Provided extends [infer ProvidedHead, ...infer RestProvided] //\n ? ExtractTuple<RestRemaining, RestProvided>\n : // ? // ExtractTuple<RestRemaining, RestProvided>\n // ProvidedHead extends ExpectedHead //\n // ? ExtractTuple<RestRemaining, RestProvided>\n // : never\n Expected\n : [];\n\n/** @public */\nexport type TupleN<T, N extends number, R extends unknown[] = []> = R['length'] extends N ? R : TupleN<T, N, [T, ...R]>;\n\n/** @public */\nexport const isLike = <T = {}>(o: unknown): o is T => !!(o ?? false) && typeof o === 'object';\n/** @public */\nexport const isMethod = <M = Method>(m: unknown | M): m is Method => !!m;\n/** @public */\nexport const isFunction = <T, Args extends any[]>(value: T | ((...args: Args) => T)): value is (...args: Args) => T =>\n typeof value === 'function';\n\n/** @public */\nexport const isThenable = <T, P extends Thenable<T> = Thenable<T>>(v: unknown | Thenable<T>): v is P =>\n isLike<{ then: unknown }>(v) && !!v.then;\n/** @public */\nexport const isCatchable = <T, P extends Catchable<T> = Catchable<T>>(v: unknown | Catchable<T>): v is P =>\n isLike<{ catch: unknown }>(v) && !!v.catch;\n/** @public */\nexport const isPromiseLike = <T, P extends Thenable<T> & Catchable<T>>(v: unknown | object): v is P =>\n isThenable(v) && isCatchable(v);\n\n/** @public */\nexport const isError = <K extends PropertyKey>(e: unknown): e is Error & { [P in K]: unknown } =>\n !!(e as ErrorVariation)?.message || e instanceof Error;\n\n/** @public */\nexport const isStatusError = (e: unknown): e is Error & { status: number } =>\n isError<'status'>(e) && typeof e?.status === 'number';\n","import { debounce, escapeRegExp, memoize, merge, cloneDeep } from 'lodash-es';\nimport { parse, toJSON, toString, ParseSettings, JsonDocument, JsonNode } from '@anchan828/json-ast';\nimport type { Bag, Strings } from './types';\n\nconst JSON5 = {\n analyze: (source: string, settings?: ParseSettings): JsonDocument => parse(source, settings),\n parse: (source: string) => toJSON(parse(source)),\n stringify: toString,\n toJSON,\n}\n\nexport {\n /** @public */\n debounce,\n /** @public */\n escapeRegExp,\n /** @public */\n memoize,\n /** @public */\n merge,\n /** @public */\n cloneDeep,\n /** @public */\n JSON5,\n};\n\nif (!Object.groupBy) {\n Object.groupBy = <T, K extends keyof any>(values: Iterable<T>, mapper: (v: T, inedx: number) => K) => {\n const result: Record<K, T[]> = {} as any;\n let idx = 0;\n\n for (const value of values) {\n const key = mapper(value, idx++);\n const bucket = result[key];\n\n if (bucket) {\n bucket.push(value);\n } else {\n result[key] = [value];\n }\n }\n\n return result;\n };\n}\n\n/** @public */\nexport const isDirectKey = <T, K extends Extract<keyof T, string>>(key: K | `${K}.${string}`): key is K =>\n !key.includes('.');\n\n/** @public */\nexport const get = <T, K extends Extract<keyof T, string>>(data: T, key: K | `${K}.${string}`) => {\n if (isDirectKey<T, K>(key)) {\n return data[key];\n }\n\n const parts = key.split('.');\n let part;\n let i = 0;\n let target: any = data;\n\n while (data && (part = parts[i++])) {\n target = target[part] ?? undefined;\n\n if (target === undefined) {\n return;\n }\n }\n\n return target;\n};\n\n/** @public */\nexport const set = <T, K extends Extract<keyof T, string>>(data: T, key: K | `${K}.${string}`, value: any): void => {\n if (isDirectKey<T, K>(key)) {\n data[key] = value;\n\n return;\n }\n\n const parts = key.split('.');\n const last = parts.length - 1;\n let part;\n let i = 0;\n let target: any = data;\n\n while (data && (part = parts[i++]) && i <= last) {\n target = target[part] ?? undefined;\n\n if (target === undefined) {\n return;\n }\n }\n\n if (part) {\n target[part] = value;\n }\n};\n\n/** @public */\nexport const omit = <T extends object, K extends keyof T, O extends K>(obj: T, keys: O[]): Omit<T, O> =>\n (Object.entries(obj) as [K, T[K]][]).reduce((acc, [key, value]) => {\n if (!keys.includes(key as O)) {\n acc[key] = value;\n }\n\n return acc;\n }, {} as T);\n\n/** @public */\nexport const pick = <T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> =>\n keys.reduce(\n (acc, key) => {\n acc[key] = obj[key];\n\n return acc;\n },\n {} as Pick<T, K>\n );\n\n/** @public */\nexport function safeParse<T, U extends T = T>(json: string | undefined): T | undefined;\n/** @public */\nexport function safeParse<T, U extends T = T>(json: string | undefined, defaults: U): T;\n/** @public */\nexport function safeParse<T, U extends T = T>(json: string | undefined, defaults?: U): T | undefined {\n try {\n return json ? toJSON<T>(parse(json)) : undefined;\n } catch {}\n\n return defaults;\n}\n\n/** @public */\nexport const isEqual = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n }\n\n const oldObject = a && typeof a === 'object';\n const newObject = b && typeof b === 'object';\n\n if (newObject && oldObject) {\n const keys = Object.keys(a);\n\n if (keys.length !== Object.keys(b).length) {\n return false;\n }\n\n for (const prop of keys) {\n const o = a[prop as keyof unknown];\n const n = b[prop as keyof unknown];\n\n if (o !== n && !isEqual(o, n)) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n};\n\n/** @public */\nexport const isShallowEqual = (a: any, b: any, loose?: boolean) => {\n if (a === b) {\n return true;\n }\n\n const typeA = a && typeof a;\n const typeB = b && typeof b;\n\n if (typeA !== 'object' || typeB !== 'object') {\n return false;\n }\n\n const keysA = Object.keys(a);\n\n if (!loose) {\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n }\n\n for (const prop of keysA) {\n if (b[prop as keyof typeof b] !== a[prop]) {\n return false;\n }\n }\n\n return true;\n};\n\n/** @public */\nexport const objectHash = (o?: object): string | undefined =>\n o &&\n Object.entries(o)\n .map(([k, v]) => k + v)\n .join(';');\n\n/** @public */\nexport const ucFirst = (str: string) => {\n const first = str[0] || '';\n const rest = str.substring(1);\n\n return first.toLocaleUpperCase() + rest;\n};\n\n/** @public */\nexport const fromEntries = <T extends object, K extends keyof T, U>(\n o: T,\n mapper: (entry: T[K], key: K) => U\n): Record<K, U> =>\n Object.fromEntries(Object.entries(o).map(([key, value]) => [key, mapper(value as T[K], key as K)])) as Record<K, U>;\n\n/** @public */\nexport const mapValues = <T, U>(\n bag: Bag<T>,\n mapper: (value: T, name: string) => [string, U] | undefined | false\n): Bag<U> | undefined => {\n const collected: [string, U][] = [];\n\n for (const [name, value] of Object.entries(bag)) {\n const mapped = mapper(value, name);\n\n if (mapped) {\n collected.push(mapped);\n }\n }\n\n if (collected.length) {\n return Object.fromEntries(collected);\n }\n};\n\n/** @public */\nexport const toStrings = (o: object): Strings => fromEntries(o, String);\n\n/** @public */\nexport const template = (braces: [string, string] = ['{', '}']) => {\n const [opener, closer] = braces;\n const safeOpen = escapeRegExp(opener);\n const safeClose = escapeRegExp(closer);\n const regexp = new RegExp(`${safeOpen}([^${safeClose}]+)${safeClose}`, 'g');\n\n return (str: string, data: object) =>\n str.replace(regexp, (whole: string, key: string) => (key in data ? data[key as keyof typeof data] : whole));\n};\n\n/** @public */\nexport const interpolateBraces = template(['{', '}']);\n\n/** @public */\nexport const sleepAsync = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\n/** @public */\nexport const noop = () => {};\n\n/** @public */\nexport const interpolate = (min: number, max: number, group: number[][]) => {\n const diff = max - min;\n\n return group.map((steps) => steps.map((value) => min + Math.min(Math.max(0, value), 1) * diff));\n};\n\nconst letters = 'KMGTPEZY';\n\n/** @public */\nexport const humanReadableFileSize = (size: number) => {\n if (size < 1024) {\n return size + ' B';\n }\n\n const i = Math.floor(Math.log(size) / Math.log(1024));\n const num = size / Math.pow(1024, i);\n const round = Math.round(num);\n const float = round < 10 ? num.toFixed(2) : round < 100 ? num.toFixed(1) : round;\n const bracket = letters[i - 1];\n\n return `${float} ${bracket}B`;\n};\n\n/** @public */\nexport const wildcardRegexp = (pattern: string, flags: string = 'i', greedy: boolean = false) => {\n const REPLACES: [string, string, string][] = [\n ['PATTERN_REPLACE_ANY', '*', '.*?'],\n ['PATTERN_REPLACE_ONE', '?', '.'],\n ];\n\n let substitute = pattern;\n\n for (const [key, wildcard] of REPLACES) {\n substitute = substitute.replaceAll(wildcard, key);\n }\n\n substitute = escapeRegExp(substitute);\n\n for (const [key, , pattern] of REPLACES) {\n substitute = substitute.replaceAll(key, pattern);\n }\n\n return new RegExp(greedy ? `^${substitute}$` : substitute, flags);\n};\n\n/** @public */\nexport const trimMD = (text?: string): string | undefined => {\n const [, indent] = text?.match(/(?:\\n|^)(\\s+)\\S/) || [undefined, undefined];\n\n if (indent) {\n const regexp = new RegExp(`^\\\\s{1,${indent.length}}`);\n const remapped = text!.split('\\n').map((line) => line.replace(regexp, ''));\n\n let left = 0;\n let right = remapped.length - 1;\n\n while (left < right && remapped[left] === '') {\n left++;\n }\n\n while (left < right && remapped[right] === '') {\n right--;\n }\n\n return remapped.slice(left, right + 1).join('\\n');\n }\n\n return text;\n};\n\nconst delays: any = {};\n\n/** @public */\nexport const delayedWarning = (warning: string, item: any): void => {\n const logger =\n delays[warning] ||\n (delays[warning] = {\n fn: debounce((items) => {\n console.warn(warning, items.join(', '));\n items.splice(0, items.length);\n }, 1000),\n items: [],\n old: new Set(),\n });\n\n if (!logger.old.has(item)) {\n logger.old.add(item);\n logger.items.push(item);\n logger.fn(logger.items);\n }\n};\n\n/** @public */\nexport const getStackTrace = (e: Error): string[] => {\n const raw = (((e as any).cause as Error) || e).stack;\n\n if (raw) {\n return raw.split('\\n');\n }\n\n const capture: { stack?: string } = {};\n (Error as { captureStackTrace?: (e: unknown) => unknown }).captureStackTrace?.(capture);\n\n return capture.stack?.split('\\n') || [];\n};\n\n/**\n * @public\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#copying_accessors\n */\nexport const assignProxy = <T>(target: T, ...sources: (object | undefined)[]) => {\n sources.forEach((source) => {\n if (!source) {\n return;\n }\n\n const descriptors: Record<string | symbol, PropertyDescriptor> = Object.fromEntries(\n Object.keys(source)\n .map((key) => [key, Object.getOwnPropertyDescriptor(source, key)])\n .filter(([, descriptor]) => !!descriptor)\n );\n\n Object.getOwnPropertySymbols(source).forEach((symbol) => {\n const descriptor = Object.getOwnPropertyDescriptor(source, symbol);\n\n if (descriptor?.enumerable) {\n descriptors[symbol] = descriptor;\n }\n });\n\n Object.defineProperties(target, descriptors);\n });\n\n return target;\n};\n\n/** @public */\nexport const matchId = <Item extends { id: ID }, ID>(id: ID) => (item: Item): boolean => (\n item.id === id\n);\n","import type { PartialDeep } from 'type-fest';\nimport { isEqual } from './utils';\n\n/** @public */\nexport function getDiff<O1, O2 extends PartialDeep<O1>>(oldData: O1, newData: O2): PartialDeep<O1> {\n if (Array.isArray(newData)) {\n return newData;\n }\n\n const oldObject = oldData && typeof oldData === 'object';\n const newObject = newData && typeof newData === 'object';\n\n if (newObject && oldObject) {\n const changes: Record<string, unknown> = {};\n\n for (const prop in newData) {\n if (!Object.hasOwn(newData, prop)) {\n continue;\n }\n\n const o = oldData[prop as keyof unknown];\n const n = newData[prop as keyof unknown];\n\n if (!isEqual(o, n)) {\n changes[prop] = getDiff(o, n);\n }\n }\n\n return changes as PartialDeep<O1>;\n }\n\n return newData;\n}\n","import type { Simplify, Constructor } from 'type-fest';\nimport type { ErrorVariation, PrettifyContext } from './types';\nimport { getStackTrace } from './utils';\n\nconst NODE_MODULES = 'node_modules';\nconst RUSH_COMMON = /[\\\\/]common[\\\\/]temp[\\\\/]$/i;\nconst findRoot = (dir: string) => {\n if (dir.includes(NODE_MODULES)) {\n dir = dir.split(NODE_MODULES, 1)[0]!;\n }\n\n if (RUSH_COMMON.test(dir)) {\n dir = dir.slice(0, -13);\n }\n\n return dir;\n};\n\n// bypass webpack overeager transform\nconst project_root = ((ref, base) => findRoot(new URL(ref, base).toString()))('.', import.meta.url);\n\nclass _PrettyError<T> extends Error implements PrettifyContext {\n public static type: string = 'Error';\n public static status: number = 500;\n\n /** @internal */\n #description?: PrettifyContext<T>;\n\n public name: string;\n public status: number;\n public cause?: ErrorVariation;\n public trim?: RegExp;\n public keep?: RegExp;\n public detail?: boolean;\n public trimmed: number;\n\n public constructor(props: Simplify<PrettifyContext<T & { message?: string }>>) {\n super(props.message || props.cause?.message);\n\n this.trimmed = 0;\n this.name = (this.constructor as typeof _PrettyError).type;\n this.status = (this.constructor as typeof _PrettyError).status;\n\n Object.assign(this, props);\n\n if (this.trim === undefined) {\n this.trim = RE_INTERNAL;\n }\n\n this.stack = this.description.stack!;\n\n return this as unknown as _PrettyError<T> & T;\n }\n\n public get description(): PrettifyContext<T> {\n if (this.#description) {\n return this.#description;\n }\n\n this.#description = this as unknown as PrettifyContext<T>;\n\n if (this.cause && !this.cause.stack) {\n this.stack = ' at [assert] (<unknown>:1:1)';\n\n return this.#description!;\n }\n\n const stack: string[] = getStackTrace(this);\n const filtered = stack.filter(filterStack(this));\n const prettified = (this.detail ? filtered.map(prettifyStack(project_root)) : filtered).join('\\n');\n const trimmed = this.trimmed ? ` (${this.trimmed} frames trimmed)` : '';\n\n this.#description!.stack = `[Error] ${this.message}${trimmed}\\n${prettified}`;\n\n return this.#description!;\n }\n\n public static is<E extends _PrettyError<T>, T extends ErrorVariation>(\n this: Constructor<E> & { type?: string },\n e?: unknown\n ): e is E {\n return !!e && ((e as { name: string }).name === this.type || e.constructor instanceof this);\n }\n\n public static extractMessage(e?: { message?: string; bag?: { message: string } }): string | undefined {\n return (e?.bag?.message as string) || e?.message;\n }\n}\n\nconst RE_ASSERT = /^\\s*at (assert|makePrettyError|getErrorDetails)/;\nconst RE_INTERNAL = /\\((?:node:)?internal\\/\\w+/;\nconst RE_PRETTIFIABLE = /[\\s(]((?:file:\\/\\/)?\\/[^):]+)(?::\\d+)*/;\nconst TX_NEWLINE = '\\n ';\nconst prettifyStack = (relative: string) => {\n return (line: string) => {\n const [, path] = line.match(RE_PRETTIFIABLE) || [];\n\n if (path?.startsWith(relative)) {\n const node = path.lastIndexOf(NODE_MODULES);\n const isModule = node > 0;\n const short =\n (isModule ? 'module:' : 'project:') +\n path.slice(isModule ? node + NODE_MODULES.length - path.length + 1 : relative.length);\n\n return line.replace('file://', '') + TX_NEWLINE + short + TX_NEWLINE;\n }\n\n return line;\n };\n};\n\nconst match = (match?: RegExp) => (str: string) => match && match.test(str);\n\nconst filterStack = (context: PrettifyContext<{ trimmed: number }>) => {\n const keep = match(context.keep);\n const trim = match(context.trim);\n\n return (line: string) => {\n if (RE_ASSERT.test(line)) {\n // skip top assert clauses, but not count them as trimmed\n return;\n }\n\n if (keep(line) || !trim(line)) {\n return true;\n }\n\n context.trimmed++;\n };\n};\n\n/** @public */\nexport const PrettyError = _PrettyError as Omit<typeof _PrettyError, 'constructor'> &\n (new <T>(data: PrettifyContext<T>) => _PrettyError<T> & PrettifyContext<T>);\n\n/** @public */\nexport type PrettyErrorClass<T> = InstanceType<typeof PrettyError<T>>;\n\n/** @public */\nexport const getErrorDetails = <T, E extends PrettyErrorClass<T> = PrettyErrorClass<T>>(\n e: unknown,\n as: Constructor<E> = PrettyError<T> as unknown as Constructor<E>\n): E => {\n const cause = e as Error & ErrorVariation;\n const message = cause.message || (typeof e === 'string' ? e : '');\n const status = cause.status || 500;\n const bag = cause.bag || cause.errors || { message };\n\n return new as({\n cause,\n message,\n status,\n bag,\n detail: true,\n ...(e as T),\n });\n};\n","import type { AnyTuple, ExtractTuple, Method, NonEmptyTuple, PartialTuple } from './types';\n\ntype ExtractRemainder<M extends Method, Provided extends AnyTuple> = ExtractTuple<Parameters<M>, Provided>;\ntype CurryOrValue<M extends Method, Provided extends AnyTuple> =\n //\n ExtractRemainder<M, Provided> extends NonEmptyTuple //\n ? Curry<M, Provided>\n : ReturnType<M>;\n\ntype Curry<M extends Method, Provided extends AnyTuple> =\n //\n <Rest extends PartialTuple<ExtractRemainder<M, Provided>>>(\n ...args: Rest\n ) => CurryOrValue<M, [...Provided, ...Rest]>;\n\n/** @public */\nexport function curry<M extends Method, ProvidedArgs extends AnyTuple>(\n fn: M,\n ...providedArgs: ProvidedArgs\n): Curry<M, ProvidedArgs> {\n return function <Args extends AnyTuple>(...args: Args) {\n const combined: [...ProvidedArgs, ...Args] = [...providedArgs, ...args];\n\n if (combined.length >= fn.length) {\n return fn(...combined);\n }\n\n return curry(fn, ...combined);\n };\n}\n","import { ucFirst } from './utils';\n\nconst ALPHA_OFFSET = 'a'.charCodeAt(0);\nconst DIGIT_OFFSET = '0'.charCodeAt(0);\nconst randomChar = (offset: number, idx: number, range: number) => String.fromCharCode(offset + (idx % range));\nconst randomAlpha = (idx: number, width = 26) => randomChar(ALPHA_OFFSET, idx, width);\nconst randomDigit = (idx: number) => randomChar(DIGIT_OFFSET, idx, 10);\nconst loremParagraph =\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor' +\n ' incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud' +\n ' exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure ' +\n 'dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ' +\n 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit' +\n ' anim id est laborum.';\nconst loremDictionary: string[] = loremParagraph.split(/\\W+/);\n\n/**\n * @public\n */\nexport const randomID = (length = 10) => {\n const buffer = [];\n\n while (length-- > 0) {\n const idx = ~~(Math.random() * 100);\n const char = idx < 70 ? randomAlpha(idx, 6) : randomDigit(idx);\n\n buffer.push(char);\n }\n\n return buffer.join('');\n};\n\n/**\n * @public\n */\nexport const randomIndex = (max: number) => ~~(Math.random() * max);\n\n/**\n * @public\n */\nexport const randomNumber = (min: number, max: number) => min + ~~((max - min) * Math.random());\n\n/**\n * @public\n */\nexport const lorem = (min = 2, max = 20) => ucFirst(takeMany(loremDictionary, min, max).join(' '));\n\n/**\n * @public\n */\nexport const takeChance = (proportion: number) => randomNumber(0, 100) < 100 * proportion;\n\n/**\n * @public\n */\nexport const takeOne = <T extends unknown>(from: T[], except?: T[]): T => {\n if (!from.length) {\n throw new Error('Source is empty');\n }\n\n if (from.length === except?.length) {\n throw new Error('Exceptions length should be less than source length');\n }\n\n while (true) {\n const item = from[randomIndex(from.length)]!;\n\n if (!except?.includes(item)) {\n return item;\n }\n }\n};\n\n/**\n * @public\n */\nexport const takeMany = <T extends unknown>(from: T[], min: number, max: number): T[] => {\n let count = randomNumber(min, max);\n const result: T[] = [];\n\n while (count-- > 0) {\n result.push(from[randomIndex(from.length)]!);\n }\n\n return result;\n};\n\n/**\n * @public\n */\nexport const takeSome = <T extends unknown>(from: T[], min: number, max: number): T[] => {\n if (min > from.length) {\n throw new Error('Source has lesser items than min required');\n }\n\n let count = randomNumber(min, max);\n const result: T[] = [];\n const available = new Set(from);\n\n while (count > 0 && available.size) {\n const item = [...available.values()][randomIndex(available.size)]!;\n\n if (!result.includes(item)) {\n result.push(item);\n available.delete(item);\n count--;\n }\n }\n\n return result;\n};\n\n/**\n * @public\n */\nexport const genId = (e: Map<string, unknown>, length = 8) => {\n let id;\n\n do {\n id = randomID(length);\n } while (e.has(id));\n\n return id;\n};\n","import type { Falsy, Logger, LogLevel, Method, PrintMethod, TypedMethod } from './types';\nimport { isMethod, isThenable, Log } from './types';\nimport { noop } from './utils';\nimport { getErrorDetails, PrettyError } from './error';\nimport { curry } from './curry';\n\n/** @public */\nexport function assert<T>(\n truthy: T | {} | Falsy,\n status?: number | string,\n message?: string,\n props?: object\n): asserts truthy is NonNullable<T> {\n if (truthy) {\n return;\n }\n\n if (typeof status !== 'number') {\n message = status;\n status = 500;\n }\n\n throw new PrettyError({ message, status, ...props });\n}\n\nconst object = <T>(logger: Logger, print: PrintMethod<Method>, selector: string | string[], o: T): T => {\n const [qualifier, ...rest] = Array.isArray(selector) ? selector : selector.split('.');\n const final = !rest.length;\n const wrapMethod = curry(method, logger, print);\n const wrapObject = curry(object, logger, print, rest);\n\n const wrap = <T extends object | Method | unknown>(value: T): T | undefined => {\n if (final && isMethod(value)) {\n return wrapMethod(value) as T;\n } else if (!final && value && typeof value === 'object') {\n return wrapObject(value) as T;\n }\n };\n\n if (qualifier === '*') {\n for (const [name, value] of Object.entries(o as object)) {\n const wrapped = value && wrap(value);\n\n if (wrapped) {\n o[name as keyof T] = wrapped;\n }\n }\n } else {\n const prop = qualifier as keyof T;\n const value = o[prop];\n const wrapped = value && wrap(value);\n\n if (wrapped) {\n o[prop] = wrapped as T[keyof T];\n }\n }\n\n return o;\n};\n\nconst prop = <T extends Record<K, (...args: any[]) => any>, K extends keyof T>(\n logger: Logger,\n print: PrintMethod<T[K]>,\n o: T,\n prop: K\n): T => {\n return { ...o, [prop]: method(logger, print, o[prop]) };\n};\n\nconst method = <M extends Method, A extends Parameters<M>, R extends ReturnType<M>>(\n logger: Logger,\n print: PrintMethod<M>,\n cb: M\n): TypedMethod<A, R> => {\n return (...args: A): R => {\n const handler = (e: unknown, result: R | null): R | undefined => {\n if (e) {\n const details = getErrorDetails(e);\n\n logger.error(`%s: %o`, print(details, null, ...args), details.description);\n\n throw details;\n }\n\n if (result) {\n logger.info(print(null, result, ...args));\n\n return result;\n }\n };\n\n try {\n const result: R = cb(...args);\n\n if (isThenable<R>(result)) {\n return result.then(\n (r: R) => handler(null, r),\n (e: Error) => handler(e, null)\n ) as R;\n }\n\n return handler(null, result)!;\n } catch (e) {\n throw handler(e, null);\n }\n };\n};\n\n/** @public */\nexport const logWrap = {\n method,\n prop,\n object,\n};\n\nconst wrapLogger: (level?: Log, target?: Logger) => Logger = (logLevel: number = 1, target: Logger = console) => ({\n error: logLevel < 1 ? noop : target.error.bind(target),\n warn: logLevel < 2 ? noop : target.warn.bind(target),\n log: logLevel < 3 ? noop : target.log.bind(target),\n info: logLevel < 4 ? noop : target.info.bind(target),\n});\n\nconst isLogLevel = (s: unknown): s is keyof typeof Log => !!Log[s as any];\n\n/** @public */\nexport const makeLogger = (\n level: string | number | undefined,\n log: ((...args: any[]) => void) | Logger\n): Logger & { (level: LogLevel, ...args: any): void } => {\n const logger = wrapLogger(\n isLogLevel(level) ? Log[level] : Log.error,\n 'log' in log\n ? log\n : {\n log: (message: string, ...rest: any[]) => log(message, ...rest),\n info: (message: string, ...rest: any[]) => log(String(message).colors.gray, ...rest),\n warn: (message: string, ...rest: any[]) => log(String(message).colors.yellow, ...rest),\n error: (message: string, ...rest: any[]) => log(String(message).colors.red, ...rest),\n }\n );\n\n return Object.assign(function (this: Logger, level: LogLevel, ...args: any) {\n switch (level) {\n case Log.info:\n return logger.info(...args);\n case Log.log:\n return logger.log(...args);\n case Log.warn:\n return logger.warn(...args);\n case Log.error:\n return logger.error(...args);\n }\n }, logger);\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhzet/utils",
3
- "version": "1.17.0",
3
+ "version": "1.19.0",
4
4
  "author": "AnkhZet ankhzet@gmail.com",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -9,8 +9,7 @@
9
9
  "files": [
10
10
  "package.json",
11
11
  "src/**/*.ts",
12
- "src/**/*.tsx",
13
- "build",
12
+ "dist",
14
13
  "*.md"
15
14
  ],
16
15
  "exports": {
@@ -33,8 +32,7 @@
33
32
  "@types/lodash-es": "^4.17.12"
34
33
  },
35
34
  "scripts": {
36
- "_phase:api": "api-extractor run --local --verbose",
37
- "_phase:clean": "rm -rf ./build && rm -rf ./api && rm -rf ./*.log",
38
- "_phase:compile": "torqb --esm ./build --dts ./build -r \"build/index:index.min\" ./src"
35
+ "clean": "rm -rf ./{build,dist,api} && rm -rf ./*.log",
36
+ "build": "vite build"
39
37
  }
40
38
  }
package/src/utils.ts CHANGED
@@ -1,7 +1,14 @@
1
1
  import { debounce, escapeRegExp, memoize, merge, cloneDeep } from 'lodash-es';
2
- import { parse, toJSON } from '@anchan828/json-ast';
2
+ import { parse, toJSON, toString, ParseSettings, JsonDocument, JsonNode } from '@anchan828/json-ast';
3
3
  import type { Bag, Strings } from './types';
4
4
 
5
+ const JSON5 = {
6
+ analyze: (source: string, settings?: ParseSettings): JsonDocument => parse(source, settings),
7
+ parse: (source: string) => toJSON(parse(source)),
8
+ stringify: toString,
9
+ toJSON,
10
+ }
11
+
5
12
  export {
6
13
  /** @public */
7
14
  debounce,
@@ -13,6 +20,8 @@ export {
13
20
  merge,
14
21
  /** @public */
15
22
  cloneDeep,
23
+ /** @public */
24
+ JSON5,
16
25
  };
17
26
 
18
27
  if (!Object.groupBy) {