zilla-util 1.2.27

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 (80) hide show
  1. package/LICENSE.txt +202 -0
  2. package/lib/esm/array.d.ts +30 -0
  3. package/lib/esm/array.js +111 -0
  4. package/lib/esm/array.js.map +1 -0
  5. package/lib/esm/base64.d.ts +2 -0
  6. package/lib/esm/base64.js +51 -0
  7. package/lib/esm/base64.js.map +1 -0
  8. package/lib/esm/crypto.d.ts +16 -0
  9. package/lib/esm/crypto.js +182 -0
  10. package/lib/esm/crypto.js.map +1 -0
  11. package/lib/esm/date.d.ts +2 -0
  12. package/lib/esm/date.js +47 -0
  13. package/lib/esm/date.js.map +1 -0
  14. package/lib/esm/deep.d.ts +24 -0
  15. package/lib/esm/deep.js +318 -0
  16. package/lib/esm/deep.js.map +1 -0
  17. package/lib/esm/error.d.ts +1 -0
  18. package/lib/esm/error.js +9 -0
  19. package/lib/esm/error.js.map +1 -0
  20. package/lib/esm/hash.d.ts +4 -0
  21. package/lib/esm/hash.js +18 -0
  22. package/lib/esm/hash.js.map +1 -0
  23. package/lib/esm/index.d.ts +17 -0
  24. package/lib/esm/index.js +18 -0
  25. package/lib/esm/index.js.map +1 -0
  26. package/lib/esm/logger.d.ts +18 -0
  27. package/lib/esm/logger.js +18 -0
  28. package/lib/esm/logger.js.map +1 -0
  29. package/lib/esm/lru.d.ts +25 -0
  30. package/lib/esm/lru.js +137 -0
  31. package/lib/esm/lru.js.map +1 -0
  32. package/lib/esm/msg.d.ts +29 -0
  33. package/lib/esm/msg.js +7 -0
  34. package/lib/esm/msg.js.map +1 -0
  35. package/lib/esm/object.d.ts +8 -0
  36. package/lib/esm/object.js +31 -0
  37. package/lib/esm/object.js.map +1 -0
  38. package/lib/esm/package.d.ts +2 -0
  39. package/lib/esm/package.js +38 -0
  40. package/lib/esm/package.js.map +1 -0
  41. package/lib/esm/regex.d.ts +1 -0
  42. package/lib/esm/regex.js +22 -0
  43. package/lib/esm/regex.js.map +1 -0
  44. package/lib/esm/retry.d.ts +13 -0
  45. package/lib/esm/retry.js +57 -0
  46. package/lib/esm/retry.js.map +1 -0
  47. package/lib/esm/sha256.d.ts +50 -0
  48. package/lib/esm/sha256.js +181 -0
  49. package/lib/esm/sha256.js.map +1 -0
  50. package/lib/esm/string.d.ts +106 -0
  51. package/lib/esm/string.js +257 -0
  52. package/lib/esm/string.js.map +1 -0
  53. package/lib/esm/subst.d.ts +6 -0
  54. package/lib/esm/subst.js +37 -0
  55. package/lib/esm/subst.js.map +1 -0
  56. package/lib/esm/time.d.ts +27 -0
  57. package/lib/esm/time.js +84 -0
  58. package/lib/esm/time.js.map +1 -0
  59. package/lib/esm/url.d.ts +9 -0
  60. package/lib/esm/url.js +80 -0
  61. package/lib/esm/url.js.map +1 -0
  62. package/package.json +72 -0
  63. package/src/array.ts +134 -0
  64. package/src/base64.ts +53 -0
  65. package/src/crypto.ts +281 -0
  66. package/src/date.ts +48 -0
  67. package/src/deep.ts +348 -0
  68. package/src/error.ts +7 -0
  69. package/src/hash.ts +20 -0
  70. package/src/index.ts +17 -0
  71. package/src/logger.ts +35 -0
  72. package/src/lru.ts +187 -0
  73. package/src/msg.ts +33 -0
  74. package/src/object.ts +43 -0
  75. package/src/package.ts +39 -0
  76. package/src/retry.ts +71 -0
  77. package/src/string.ts +338 -0
  78. package/src/subst.ts +41 -0
  79. package/src/time.ts +105 -0
  80. package/src/url.ts +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256.js","sourceRoot":"","sources":["../../src/sha256.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { ZillaClock } from "./time.js";
2
+ import { GenericLogger } from "./logger.js";
3
+ import GraphemeSplitter from "grapheme-splitter";
4
+ export declare const capitalize: (s?: string) => string;
5
+ export declare const uncapitalize: (s?: string) => string;
6
+ export declare const basefilename: (s: string) => string;
7
+ export declare const ext: (s: string) => string;
8
+ export declare const basefilenameWithoutExt: (s: string) => string;
9
+ export declare const dateAsYYYYMMDD: (date: Date) => string;
10
+ export declare const dateAsUTCYYYYMMDD: (date: Date) => string;
11
+ export declare const nextDateAsYYYYMMDD: (d: string) => string;
12
+ export declare const dateAsYYYYMMDDHHmmSS: (date: Date) => string;
13
+ export declare const timestampAsYYYYMMDD: (timestamp: number) => string;
14
+ export declare const timestampAsUTCYYYYMMDD: (timestamp: number) => string;
15
+ export declare const timestampAsYYYYMMDDHHmmSS: (timestamp: number) => string;
16
+ export declare const nowAsYYYYMMDD: () => string;
17
+ export declare const nowAsYYYYMMDDHHmmSS: () => string;
18
+ export declare const sluggize: (name: string, replaceChar?: string) => string;
19
+ export declare const hyphenate: (name: string) => string;
20
+ export declare const uuidv4: (squeezed?: boolean) => string;
21
+ export declare const camel2kebab: (camelCaseString: string) => string;
22
+ export declare const camel2snake: (camelCaseString: string) => string;
23
+ export declare const kebab2camel: (kebabCaseString: string) => string;
24
+ export declare const snake2camel: (kebabCaseString: string) => string;
25
+ export declare const hasUpperCase: (str: string) => boolean;
26
+ export declare const startsWithPrefix: (s: string, prefixes: string[]) => boolean;
27
+ export declare const endsWithSuffix: (s: string, suffixes: string[]) => boolean;
28
+ export declare const randomDigit: (min?: number, max?: number) => number;
29
+ export declare const randomDigits: (n: number, min?: number, max?: number) => string;
30
+ export declare const isOnlyDigits: (s: string) => boolean;
31
+ export declare const BASE62_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
32
+ export declare const BASE62_CHARS_WITHOUT_SIMILAR_CHARS = "23456789ABCEFGHJKLMNPRSTUVWXYZ";
33
+ export declare const VOWEL_CHARS = "AEOIUaeoiu";
34
+ export declare const DIGIT_CHARS = "0123456789";
35
+ export declare const VOWEL_AND_DIGIT_CHARS: string;
36
+ export declare const _randomSafeToken: (n: number, CHARS: string) => string;
37
+ export declare const randomSafeToken: (n: number) => string;
38
+ export declare const randomSuperSafeToken: (n: number) => string;
39
+ export declare const epochToHttpDate: (epoch?: number, clock?: ZillaClock) => string;
40
+ export declare const sortWords: (words: string[], dict: string[]) => string[];
41
+ export declare const trimSpaces: (str: string) => string;
42
+ export declare const trimNonalphanumeric: (str: string) => string;
43
+ export declare const getRandomCodePoint: () => number;
44
+ export declare const generateRandomString: (length: number) => string;
45
+ export declare const sortObj: (o: Record<string, unknown>) => Record<string, unknown>;
46
+ export declare const sortedStringify: (obj: Record<string, unknown>) => string;
47
+ export declare const jsonHeader: () => {
48
+ "Content-Type": string;
49
+ };
50
+ export declare const ANSI: {
51
+ RESET: string;
52
+ BOLD: string;
53
+ DIM: string;
54
+ UNDERLINE: string;
55
+ BLINK: string;
56
+ INVERSE: string;
57
+ HIDDEN: string;
58
+ BLACK: string;
59
+ RED: string;
60
+ GREEN: string;
61
+ YELLOW: string;
62
+ BLUE: string;
63
+ MAGENTA: string;
64
+ CYAN: string;
65
+ WHITE: string;
66
+ BRIGHT_BLACK: string;
67
+ BRIGHT_RED: string;
68
+ BRIGHT_GREEN: string;
69
+ BRIGHT_YELLOW: string;
70
+ BRIGHT_BLUE: string;
71
+ BRIGHT_MAGENTA: string;
72
+ BRIGHT_CYAN: string;
73
+ BRIGHT_WHITE: string;
74
+ };
75
+ export declare const CSS: {
76
+ RESET: string;
77
+ BOLD: string;
78
+ DIM: string;
79
+ UNDERLINE: string;
80
+ BLINK: string;
81
+ INVERSE: string;
82
+ HIDDEN: string;
83
+ BLACK: string;
84
+ RED: string;
85
+ GREEN: string;
86
+ YELLOW: string;
87
+ BLUE: string;
88
+ MAGENTA: string;
89
+ CYAN: string;
90
+ WHITE: string;
91
+ BRIGHT_BLACK: string;
92
+ BRIGHT_RED: string;
93
+ BRIGHT_GREEN: string;
94
+ BRIGHT_YELLOW: string;
95
+ BRIGHT_BLUE: string;
96
+ BRIGHT_MAGENTA: string;
97
+ BRIGHT_CYAN: string;
98
+ BRIGHT_WHITE: string;
99
+ };
100
+ export declare const REGEX_ARRAY_OF_STRINGS: RegExp;
101
+ export declare const REGEX_ARRAY_OF_BOOLEANS: RegExp;
102
+ export declare const REGEX_ARRAY_OF_INTEGERS: RegExp;
103
+ export declare const REGEX_ARRAY_OF_FLOATS: RegExp;
104
+ export declare const safeStringify: (obj: unknown, logger?: GenericLogger) => string;
105
+ export declare const splitter: GraphemeSplitter;
106
+ export declare const countVisibleChars: (data: Uint8Array | string) => number;
@@ -0,0 +1,257 @@
1
+ import GraphemeSplitter from "grapheme-splitter";
2
+ export const capitalize = (s) => s && s.length > 0 ? s.substring(0, 1).toUpperCase() + s.substring(1) : "";
3
+ export const uncapitalize = (s) => s && s.length > 0 ? s.substring(0, 1).toLowerCase() + s.substring(1) : "";
4
+ export const basefilename = (s) => {
5
+ if (!s)
6
+ return s; // return null/undefined as-is
7
+ // drop trailing slashes
8
+ while (s.endsWith("/")) {
9
+ s = s.substring(0, s.length - 1);
10
+ }
11
+ const i = s ? s.lastIndexOf("/") : -1;
12
+ return i === -1 ? s : s.substring(i + 1);
13
+ };
14
+ export const ext = (s) => {
15
+ if (!s)
16
+ return s; // return null/undefined/no-dot files as-is
17
+ const dot = s.lastIndexOf(".");
18
+ return dot === -1 || dot === s.length - 1 ? "" : s.substring(dot + 1);
19
+ };
20
+ export const basefilenameWithoutExt = (s) => {
21
+ s = basefilename(s);
22
+ if (!s)
23
+ return s; // return null/undefined as-is
24
+ // drop trailing dots
25
+ while (s.endsWith(".")) {
26
+ s = s.substring(0, s.length - 1);
27
+ }
28
+ const i = s ? s.lastIndexOf(".") : -1;
29
+ return i === -1 ? s : s.substring(0, i);
30
+ };
31
+ export const dateAsYYYYMMDD = (date) => `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date
32
+ .getDate()
33
+ .toString()
34
+ .padStart(2, "0")}`;
35
+ export const dateAsUTCYYYYMMDD = (date) => `${date.getUTCFullYear()}-${(date.getUTCMonth() + 1).toString().padStart(2, "0")}-${date
36
+ .getUTCDate()
37
+ .toString()
38
+ .padStart(2, "0")}`;
39
+ export const nextDateAsYYYYMMDD = (d) => {
40
+ const dt = new Date(`${d}T00:00:00Z`); // UTC midnight of current day
41
+ dt.setUTCDate(dt.getUTCDate() + 1); // +1 calendar day
42
+ return dt.toISOString().slice(0, 10); // back to YYYY‑MM‑DD
43
+ };
44
+ export const dateAsYYYYMMDDHHmmSS = (date) => `${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date
45
+ .getDate()
46
+ .toString()
47
+ .padStart(2, "0")}-${("" + date.getHours()).padStart(2, "0")}${("" + date.getMinutes()).padStart(2, "0")}${("" + date.getSeconds()).padStart(2, "0")}`;
48
+ export const timestampAsYYYYMMDD = (timestamp) => dateAsYYYYMMDD(new Date(timestamp));
49
+ export const timestampAsUTCYYYYMMDD = (timestamp) => dateAsUTCYYYYMMDD(new Date(timestamp));
50
+ export const timestampAsYYYYMMDDHHmmSS = (timestamp) => dateAsYYYYMMDDHHmmSS(new Date(timestamp));
51
+ export const nowAsYYYYMMDD = () => timestampAsYYYYMMDD(Date.now());
52
+ export const nowAsYYYYMMDDHHmmSS = () => timestampAsYYYYMMDDHHmmSS(Date.now());
53
+ export const sluggize = (name, replaceChar = "_") => {
54
+ replaceChar ||= "_";
55
+ return name
56
+ .trim()
57
+ .replace(new RegExp(`[^A-Z\\d${replaceChar}]+`, "gi"), replaceChar)
58
+ .replace(/[\s_-]+/g, replaceChar)
59
+ .replace(new RegExp(`[${replaceChar}]+`, "gi"), replaceChar)
60
+ .replace(new RegExp(`^[${replaceChar}]+`, "gi"), "")
61
+ .replace(new RegExp(`[${replaceChar}]+$`, "gi"), "")
62
+ .toLowerCase();
63
+ };
64
+ export const hyphenate = (name) => sluggize(name, "-");
65
+ const generateRandomValues = (count) => {
66
+ if (globalThis && globalThis.crypto && globalThis.crypto.getRandomValues) {
67
+ return globalThis.crypto.getRandomValues(new Uint8Array(count));
68
+ }
69
+ else {
70
+ const arr = new Uint8Array(count);
71
+ for (let i = 0; i < count; i++) {
72
+ arr[i] = (Math.random() * 256) | 0;
73
+ }
74
+ return arr;
75
+ }
76
+ };
77
+ export const uuidv4 = (squeezed) => {
78
+ const arr = generateRandomValues(16);
79
+ // Per 4.4, set bits for version and clock_seq_hi_and_reserved
80
+ arr[6] = (arr[6] & 0x0f) | 0x40;
81
+ arr[8] = (arr[8] & 0x3f) | 0x80;
82
+ // Join it all together
83
+ const pad = (n) => (n.length < 2 ? "0" + n : n);
84
+ const uuid = Array.from(arr)
85
+ .map((b) => pad(b.toString(16)))
86
+ .join("");
87
+ return squeezed
88
+ ? uuid
89
+ : `${uuid.slice(0, 8)}-${uuid.slice(8, 12)}-${uuid.slice(12, 16)}-${uuid.slice(16, 20)}-${uuid.slice(20)}`;
90
+ };
91
+ export const camel2kebab = (camelCaseString) => camelCaseString.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
92
+ export const camel2snake = (camelCaseString) => camelCaseString.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1_$2").toLowerCase();
93
+ export const kebab2camel = (kebabCaseString) => kebabCaseString
94
+ .toLowerCase()
95
+ .replace(/([-_][a-z])/g, (group) => group.toUpperCase().replace("-", "").replace("_", ""));
96
+ export const snake2camel = kebab2camel;
97
+ export const hasUpperCase = (str) => /[A-Z]/.test(str);
98
+ export const startsWithPrefix = (s, prefixes) => prefixes.some((prefix) => s.startsWith(prefix));
99
+ export const endsWithSuffix = (s, suffixes) => suffixes.some((suffix) => s.endsWith(suffix));
100
+ export const randomDigit = (min, max) => {
101
+ min = typeof min === "number" && min >= 0 && ((max && min <= max) || typeof max !== "number") ? min : 0;
102
+ max = typeof max === "number" && max <= 9 && max >= min ? max : 9;
103
+ return Math.floor(Math.random() * (max - min + 1)) + min;
104
+ };
105
+ export const randomDigits = (n, min, max) => Array.from({ length: n }, () => `${randomDigit(min, max)}`).join("");
106
+ export const isOnlyDigits = (s) => /^\d+$/.test(s);
107
+ export const BASE62_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
108
+ export const BASE62_CHARS_WITHOUT_SIMILAR_CHARS = "23456789ABCEFGHJKLMNPRSTUVWXYZ";
109
+ export const VOWEL_CHARS = "AEOIUaeoiu";
110
+ export const DIGIT_CHARS = "0123456789";
111
+ export const VOWEL_AND_DIGIT_CHARS = VOWEL_CHARS + DIGIT_CHARS;
112
+ // "safeToken" means safe in two ways:
113
+ // 1. It's web-safe, using only characters than can appear un-encoded in URLs
114
+ // 2. It's curse-word safe: after 2 consecutive letters, the next char will be a vowel or digit
115
+ export const _randomSafeToken = (n, CHARS) => {
116
+ let result = "";
117
+ const allowedSet = new Set(CHARS);
118
+ const vowelsAndDigits = [...VOWEL_AND_DIGIT_CHARS].filter((char) => allowedSet.has(char)).join("");
119
+ for (let i = 0; i < n; i++) {
120
+ let newChar = CHARS[Math.floor(Math.random() * CHARS.length)];
121
+ // If we have at least 2 characters and they're all alphabetic
122
+ if (result.length >= 2 &&
123
+ isNaN(Number(result.charAt(result.length - 1))) &&
124
+ isNaN(Number(result.charAt(result.length - 2)))) {
125
+ // ensure next character is a vowel or a digit
126
+ newChar = vowelsAndDigits[Math.floor(Math.random() * vowelsAndDigits.length)];
127
+ }
128
+ result += newChar;
129
+ }
130
+ return result;
131
+ };
132
+ export const randomSafeToken = (n) => _randomSafeToken(n, BASE62_CHARS);
133
+ export const randomSuperSafeToken = (n) => _randomSafeToken(n, BASE62_CHARS_WITHOUT_SIMILAR_CHARS);
134
+ export const epochToHttpDate = (epoch, clock) => new Date(epoch ? epoch : clock ? clock.now() : Date.now()).toUTCString();
135
+ export const sortWords = (words, dict) => words.sort((a, b) => dict.indexOf(a) - dict.indexOf(b) || dict.length + words.indexOf(a) - (dict.length + words.indexOf(b)));
136
+ export const trimSpaces = (str) => str.trim().replace(/\s+/g, " ");
137
+ export const trimNonalphanumeric = (str) => str.replace(/[^a-zA-Z0-9]/g, "");
138
+ const commonUnicodeRanges = [
139
+ [0x0000, 0x007f], // Basic Latin (ASCII)
140
+ [0x0080, 0x00ff], // Latin-1 Supplement
141
+ [0x0100, 0x017f], // Latin Extended-A
142
+ [0x0370, 0x03ff], // Greek and Coptic
143
+ [0x0400, 0x04ff], // Cyrillic
144
+ [0x0530, 0x058f], // Armenian
145
+ [0x0590, 0x05ff], // Hebrew
146
+ [0x0600, 0x06ff], // Arabic
147
+ [0x0900, 0x097f], // Devanagari
148
+ [0xac00, 0xd7af], // Hangul Syllables
149
+ [0x4e00, 0x9fff], // CJK Unified Ideographs
150
+ ];
151
+ const createUnifiedRange = (ranges) => {
152
+ const unifiedRange = [];
153
+ for (const [start, end] of ranges) {
154
+ for (let i = start; i <= end; i++) {
155
+ unifiedRange.push(i);
156
+ }
157
+ }
158
+ return unifiedRange;
159
+ };
160
+ const unifiedUnicodeRange = createUnifiedRange(commonUnicodeRanges);
161
+ export const getRandomCodePoint = () => {
162
+ const randomIndex = Math.floor(Math.random() * unifiedUnicodeRange.length);
163
+ return unifiedUnicodeRange[randomIndex];
164
+ };
165
+ export const generateRandomString = (length) => {
166
+ return Array.from({ length }, () => String.fromCodePoint(getRandomCodePoint())).join("");
167
+ };
168
+ export const sortObj = (o) => Object.keys(o)
169
+ .sort()
170
+ .reduce((acc, key) => {
171
+ acc[key] =
172
+ typeof o[key] === "object" && o[key] !== null && !Array.isArray(o[key])
173
+ ? sortObj(o[key])
174
+ : o[key];
175
+ return acc;
176
+ }, {});
177
+ export const sortedStringify = (obj) => JSON.stringify(sortObj(obj));
178
+ export const jsonHeader = () => ({ "Content-Type": "application/json" });
179
+ export const ANSI = {
180
+ RESET: "\x1b[0m",
181
+ BOLD: "\x1b[1m",
182
+ DIM: "\x1b[2m",
183
+ UNDERLINE: "\x1b[4m",
184
+ BLINK: "\x1b[5m",
185
+ INVERSE: "\x1b[7m",
186
+ HIDDEN: "\x1b[8m",
187
+ // Foreground Colors
188
+ BLACK: "\x1b[30m",
189
+ RED: "\x1b[31m",
190
+ GREEN: "\x1b[32m",
191
+ YELLOW: "\x1b[33m",
192
+ BLUE: "\x1b[34m",
193
+ MAGENTA: "\x1b[35m",
194
+ CYAN: "\x1b[36m",
195
+ WHITE: "\x1b[37m",
196
+ // Bright Foreground Colors
197
+ BRIGHT_BLACK: "\x1b[90m",
198
+ BRIGHT_RED: "\x1b[91m",
199
+ BRIGHT_GREEN: "\x1b[92m",
200
+ BRIGHT_YELLOW: "\x1b[93m",
201
+ BRIGHT_BLUE: "\x1b[94m",
202
+ BRIGHT_MAGENTA: "\x1b[95m",
203
+ BRIGHT_CYAN: "\x1b[96m",
204
+ BRIGHT_WHITE: "\x1b[97m",
205
+ };
206
+ export const CSS = {
207
+ RESET: "color: inherit;",
208
+ BOLD: "font-weight: bold;",
209
+ DIM: "opacity: 0.7;",
210
+ UNDERLINE: "text-decoration: underline;",
211
+ // for BLINK to work, add the CSS below to some global CSS file that the browser will load:
212
+ // @keyframes blink { 50% { opacity: 0; } }
213
+ // If the CSS isn't defined, BLINK text will still appear, it just won't blink
214
+ BLINK: "animation: blink 1s step-start infinite;",
215
+ INVERSE: "filter: invert(100%);",
216
+ HIDDEN: "visibility: hidden;",
217
+ // Foreground Colors
218
+ BLACK: "color: black;",
219
+ RED: "color: red;",
220
+ GREEN: "color: green;",
221
+ YELLOW: "color: goldenrod;",
222
+ BLUE: "color: blue;",
223
+ MAGENTA: "color: purple;",
224
+ CYAN: "color: cyan;",
225
+ WHITE: "color: white;",
226
+ // Bright Foreground Colors
227
+ BRIGHT_BLACK: "color: gray;",
228
+ BRIGHT_RED: "color: lightcoral;",
229
+ BRIGHT_GREEN: "color: lightgreen;",
230
+ BRIGHT_YELLOW: "color: yellow;",
231
+ BRIGHT_BLUE: "color: lightskyblue;",
232
+ BRIGHT_MAGENTA: "color: violet;",
233
+ BRIGHT_CYAN: "color: lightcyan;",
234
+ BRIGHT_WHITE: "color: white;",
235
+ };
236
+ export const REGEX_ARRAY_OF_STRINGS = /^\[\s*(?:"[^"]*"\s*(?:,\s*"[^"]*"\s*)*)?]$/;
237
+ export const REGEX_ARRAY_OF_BOOLEANS = /^\[\s*(?:true|false)(\s*,\s*(?:true|false))*\s*]$/;
238
+ export const REGEX_ARRAY_OF_INTEGERS = /^\[\s*-?\d+(\s*,\s*-?\d+)*\s*]$/;
239
+ export const REGEX_ARRAY_OF_FLOATS = /^\[\s*-?\d+(\.\d+)?([eE][-+]?\d+)?(\s*,\s*-?\d+(\.\d+)?([eE][-+]?\d+)?)*\s*]$/;
240
+ export const safeStringify = (obj, logger) => {
241
+ const seen = new WeakSet();
242
+ return JSON.stringify(obj, (_key, val) => {
243
+ if (typeof val === "object" && val !== null) {
244
+ if (seen.has(val)) {
245
+ if (logger && logger.isDebugEnabled()) {
246
+ logger.debug(`safeStringify: detected circular reference in obj: ${obj}${obj?.constructor?.name ? ` [constructor=${obj.constructor.name}]` : ""}`);
247
+ }
248
+ return "[Circular]";
249
+ }
250
+ seen.add(val);
251
+ }
252
+ return val;
253
+ });
254
+ };
255
+ export const splitter = new GraphemeSplitter();
256
+ export const countVisibleChars = (data) => splitter.countGraphemes(typeof data === "string" ? data : new TextDecoder("utf-8").decode(data));
257
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type StringXformFunction = (args?: string[]) => string;
2
+ export type StringXformContext = Record<string, string | StringXformFunction | undefined | null>;
3
+ export declare const ERR_UNKNOWN_SUBST_CONTEXT_VAR = "Unknown context variable";
4
+ export declare const substContext: (obj: unknown, context: StringXformContext, opts?: {
5
+ strict: boolean;
6
+ }) => unknown;
@@ -0,0 +1,37 @@
1
+ export const ERR_UNKNOWN_SUBST_CONTEXT_VAR = "Unknown context variable";
2
+ export const substContext = (obj, context, opts) => {
3
+ const transformString = (str) => {
4
+ return str.replace(/{{(.*?)}}/g, (_, key) => {
5
+ const parts = key
6
+ .trim()
7
+ .split(/\s+/)
8
+ .filter((s) => s.length > 0)
9
+ .map((s) => s.trim());
10
+ const k = parts[0];
11
+ const args = parts.length > 1 ? parts.slice(1) : [];
12
+ const subst = context[k];
13
+ if (typeof subst === "string")
14
+ return subst;
15
+ if (typeof subst === "function") {
16
+ return subst(args);
17
+ }
18
+ if (!opts || opts?.strict !== false)
19
+ throw new Error(`${ERR_UNKNOWN_SUBST_CONTEXT_VAR} var=${k}`);
20
+ return `??${k}`;
21
+ });
22
+ };
23
+ const transform = (item) => {
24
+ if (typeof item === "string") {
25
+ return transformString(item);
26
+ }
27
+ else if (Array.isArray(item)) {
28
+ return item.map(transform);
29
+ }
30
+ else if (item && typeof item === "object") {
31
+ return Object.fromEntries(Object.entries(item).map(([k, v]) => [k, transform(v)]));
32
+ }
33
+ return item;
34
+ };
35
+ return transform(obj);
36
+ };
37
+ //# sourceMappingURL=subst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subst.js","sourceRoot":"","sources":["../../src/subst.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAC;AAExE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,OAA2B,EAAE,IAA0B,EAAW,EAAE;IAC3G,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE;QAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACxC,MAAM,KAAK,GAAa,GAAG;iBACtB,IAAI,EAAE;iBACN,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBACnC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEzB,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5C,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,6BAA6B,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClG,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,IAAa,EAAW,EAAE;QACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { GenericLogger } from "./logger.js";
2
+ export type ZillaNowFunc = () => number;
3
+ export type ZillaClock = {
4
+ now: ZillaNowFunc;
5
+ };
6
+ export declare const DEFAULT_CLOCK: ZillaClock;
7
+ export type ZillaClockSource = () => ZillaClock;
8
+ export declare const DEFAULT_CLOCK_SOURCE: ZillaClockSource;
9
+ export declare class MockClock {
10
+ private time;
11
+ private start;
12
+ private logger?;
13
+ private name;
14
+ constructor(startTime?: number, logger?: GenericLogger, name?: string);
15
+ now(): number;
16
+ setTime(time: number): void;
17
+ advance(timeDelta: number): void;
18
+ }
19
+ export declare const mockClock: (startTime?: number) => ZillaClock;
20
+ export declare const sleep: (ms: number) => Promise<unknown>;
21
+ export declare const DEFAULT_NAP_CHECK = 1000;
22
+ export type NapAlarm = {
23
+ wake?: boolean;
24
+ };
25
+ export declare const nap: (clock: ZillaClock, alarm: NapAlarm, ms: number, check?: number) => Promise<unknown>;
26
+ export declare const parseSimpleTime: (t: string) => number;
27
+ export declare const delay: (duration?: number | string) => Promise<void>;
@@ -0,0 +1,84 @@
1
+ import { uuidv4 } from "./string.js";
2
+ const DEFAULT_NOW_FUNC = () => Date.now();
3
+ export const DEFAULT_CLOCK = {
4
+ now: DEFAULT_NOW_FUNC,
5
+ };
6
+ export const DEFAULT_CLOCK_SOURCE = () => DEFAULT_CLOCK;
7
+ export class MockClock {
8
+ time;
9
+ start;
10
+ logger;
11
+ name;
12
+ constructor(startTime, logger, name) {
13
+ this.start = Date.now();
14
+ this.time = typeof startTime === "number" && startTime > 0 ? startTime : Date.now();
15
+ this.logger = logger;
16
+ this.name = name ? name : `MockClock-${uuidv4()}`;
17
+ }
18
+ now() {
19
+ if (this.logger && this.logger.isTraceEnabled()) {
20
+ this.logger.trace(`MockClock ID=${this.name} RETURNING now=${this.time}`);
21
+ }
22
+ return this.time + (Date.now() - this.start);
23
+ }
24
+ setTime(time) {
25
+ if (this.logger && this.logger.isTraceEnabled()) {
26
+ this.logger.trace(`MockClock ID=${this.name} SET-TIME now=${this.time} setting-to=${time}`);
27
+ }
28
+ this.time = time;
29
+ if (this.logger && this.logger.isTraceEnabled()) {
30
+ this.logger.trace(`MockClock ID=${this.name} SET-TIME now=${this.time}`);
31
+ }
32
+ }
33
+ advance(timeDelta) {
34
+ if (this.logger && this.logger.isTraceEnabled()) {
35
+ this.logger.trace(`MockClock ID=${this.name} ADVANCING now=${this.time} timeDelta=${timeDelta}`);
36
+ }
37
+ this.time += timeDelta;
38
+ if (this.logger && this.logger.isTraceEnabled()) {
39
+ this.logger.trace(`MockClock ID=${this.name} ADVANCED now=${this.time}`);
40
+ }
41
+ }
42
+ }
43
+ export const mockClock = (startTime = 0) => new MockClock(startTime);
44
+ // adapted from https://stackoverflow.com/a/39914235
45
+ export const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
46
+ export const DEFAULT_NAP_CHECK = 1000;
47
+ const _nap = (resolve, clock, alarm, ms, check) => async () => {
48
+ try {
49
+ alarm.wake = false;
50
+ const start = clock.now();
51
+ while (!alarm.wake && clock.now() - start < ms) {
52
+ await sleep(check);
53
+ }
54
+ }
55
+ finally {
56
+ resolve();
57
+ }
58
+ };
59
+ export const nap = (clock, alarm, ms, check) => new Promise((r) => _nap(r, clock, alarm, ms, check || DEFAULT_NAP_CHECK)());
60
+ export const parseSimpleTime = (t) => {
61
+ const match = /^(\d+(\.\d+)?)([smhd])?$/.exec(t);
62
+ if (!match)
63
+ throw new Error(`Invalid time format: ${t}`);
64
+ const value = Number(match[1]);
65
+ const unit = match[3];
66
+ switch (unit) {
67
+ case "s":
68
+ return value * 1000;
69
+ case "m":
70
+ return value * 60 * 1000;
71
+ case "h":
72
+ return value * 3600 * 1000;
73
+ case "d":
74
+ return value * 24 * 3600 * 1000;
75
+ default:
76
+ return value;
77
+ }
78
+ };
79
+ export const delay = async (duration) => {
80
+ if (!duration)
81
+ return;
82
+ await sleep(typeof duration === "number" ? duration : parseSimpleTime(duration));
83
+ };
84
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type CanonicalizedUrl = {
2
+ original: string;
3
+ normalized: string;
4
+ redirectChain: string[];
5
+ landing: string;
6
+ canonical: string;
7
+ };
8
+ export declare const normalizeUrl: (input: string) => string;
9
+ export declare const canonicalizeUrl: (url: string) => Promise<CanonicalizedUrl>;