@sapphire-sh/utils 1.63.0 → 1.64.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 (104) hide show
  1. package/lib/cjs/date.d.ts +3 -0
  2. package/lib/cjs/date.d.ts.map +1 -0
  3. package/lib/cjs/date.js +37 -0
  4. package/lib/cjs/date.js.map +1 -0
  5. package/lib/cjs/download.d.ts +2 -0
  6. package/lib/cjs/download.d.ts.map +1 -0
  7. package/lib/cjs/download.js +21 -0
  8. package/lib/cjs/download.js.map +1 -0
  9. package/lib/cjs/error.d.ts +2 -0
  10. package/lib/cjs/error.d.ts.map +1 -0
  11. package/lib/cjs/error.js +6 -0
  12. package/lib/cjs/error.js.map +1 -0
  13. package/lib/cjs/fs.d.ts +2 -0
  14. package/lib/cjs/fs.d.ts.map +1 -0
  15. package/lib/cjs/fs.js +22 -0
  16. package/lib/cjs/fs.js.map +1 -0
  17. package/lib/cjs/getEnumValue.d.ts +1 -1
  18. package/lib/cjs/getEnumValue.d.ts.map +1 -1
  19. package/lib/cjs/getEnumValue.js +1 -1
  20. package/lib/cjs/getEnumValue.js.map +1 -1
  21. package/lib/cjs/http.d.ts +12 -0
  22. package/lib/cjs/http.d.ts.map +1 -0
  23. package/lib/cjs/http.js +37 -0
  24. package/lib/cjs/http.js.map +1 -0
  25. package/lib/cjs/index.d.ts +7 -0
  26. package/lib/cjs/index.d.ts.map +1 -1
  27. package/lib/cjs/index.js +16 -1
  28. package/lib/cjs/index.js.map +1 -1
  29. package/lib/cjs/interceptXHR.d.ts +2 -0
  30. package/lib/cjs/interceptXHR.d.ts.map +1 -0
  31. package/lib/cjs/interceptXHR.js +23 -0
  32. package/lib/cjs/interceptXHR.js.map +1 -0
  33. package/lib/cjs/logger.d.ts.map +1 -1
  34. package/lib/cjs/logger.js +7 -1
  35. package/lib/cjs/logger.js.map +1 -1
  36. package/lib/cjs/node.d.ts +3 -1
  37. package/lib/cjs/node.d.ts.map +1 -1
  38. package/lib/cjs/node.js +16 -18
  39. package/lib/cjs/node.js.map +1 -1
  40. package/lib/cjs/string.d.ts +2 -0
  41. package/lib/cjs/string.d.ts.map +1 -0
  42. package/lib/cjs/string.js +13 -0
  43. package/lib/cjs/string.js.map +1 -0
  44. package/lib/cjs/waitForElement.d.ts +11 -0
  45. package/lib/cjs/waitForElement.d.ts.map +1 -0
  46. package/lib/cjs/waitForElement.js +44 -0
  47. package/lib/cjs/waitForElement.js.map +1 -0
  48. package/lib/cjs/zlib.d.ts +3 -0
  49. package/lib/cjs/zlib.d.ts.map +1 -0
  50. package/lib/cjs/zlib.js +18 -0
  51. package/lib/cjs/zlib.js.map +1 -0
  52. package/lib/date.d.ts +3 -0
  53. package/lib/date.d.ts.map +1 -0
  54. package/lib/date.js +32 -0
  55. package/lib/date.js.map +1 -0
  56. package/lib/download.d.ts +2 -0
  57. package/lib/download.d.ts.map +1 -0
  58. package/lib/download.js +14 -0
  59. package/lib/download.js.map +1 -0
  60. package/lib/error.d.ts +2 -0
  61. package/lib/error.d.ts.map +1 -0
  62. package/lib/error.js +2 -0
  63. package/lib/error.js.map +1 -0
  64. package/lib/fs.d.ts +2 -0
  65. package/lib/fs.d.ts.map +1 -0
  66. package/lib/fs.js +15 -0
  67. package/lib/fs.js.map +1 -0
  68. package/lib/getEnumValue.d.ts +1 -1
  69. package/lib/getEnumValue.d.ts.map +1 -1
  70. package/lib/getEnumValue.js +1 -1
  71. package/lib/getEnumValue.js.map +1 -1
  72. package/lib/http.d.ts +12 -0
  73. package/lib/http.d.ts.map +1 -0
  74. package/lib/http.js +32 -0
  75. package/lib/http.js.map +1 -0
  76. package/lib/index.d.ts +7 -0
  77. package/lib/index.d.ts.map +1 -1
  78. package/lib/index.js +6 -0
  79. package/lib/index.js.map +1 -1
  80. package/lib/interceptXHR.d.ts +2 -0
  81. package/lib/interceptXHR.d.ts.map +1 -0
  82. package/lib/interceptXHR.js +19 -0
  83. package/lib/interceptXHR.js.map +1 -0
  84. package/lib/logger.d.ts.map +1 -1
  85. package/lib/logger.js +7 -1
  86. package/lib/logger.js.map +1 -1
  87. package/lib/node.d.ts +3 -1
  88. package/lib/node.d.ts.map +1 -1
  89. package/lib/node.js +3 -14
  90. package/lib/node.js.map +1 -1
  91. package/lib/string.d.ts +2 -0
  92. package/lib/string.d.ts.map +1 -0
  93. package/lib/string.js +9 -0
  94. package/lib/string.js.map +1 -0
  95. package/lib/waitForElement.d.ts +11 -0
  96. package/lib/waitForElement.d.ts.map +1 -0
  97. package/lib/waitForElement.js +39 -0
  98. package/lib/waitForElement.js.map +1 -0
  99. package/lib/zlib.d.ts +3 -0
  100. package/lib/zlib.d.ts.map +1 -0
  101. package/lib/zlib.js +10 -0
  102. package/lib/zlib.js.map +1 -0
  103. package/package.json +5 -4
  104. package/tsconfig.cjs.json +8 -0
@@ -0,0 +1,3 @@
1
+ export declare const toLocalISOString: (date: Date) => string;
2
+ export declare const formatDuration: (ms: number) => string;
3
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/date.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,KAAG,MAe7C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAgB3C,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDuration = exports.toLocalISOString = void 0;
4
+ const toLocalISOString = (date) => {
5
+ const year = date.getFullYear();
6
+ const month = `${date.getMonth() + 1}`.padStart(2, '0');
7
+ const day = `${date.getDate()}`.padStart(2, '0');
8
+ const hours = `${date.getHours()}`.padStart(2, '0');
9
+ const minutes = `${date.getMinutes()}`.padStart(2, '0');
10
+ const seconds = `${date.getSeconds()}`.padStart(2, '0');
11
+ const ms = `${date.getMilliseconds()}`.padStart(3, '0');
12
+ const offset = date.getTimezoneOffset();
13
+ const sign = offset <= 0 ? '+' : '-';
14
+ const offsetHours = `${Math.floor(Math.abs(offset) / 60)}`.padStart(2, '0');
15
+ const offsetMinutes = `${Math.abs(offset) % 60}`.padStart(2, '0');
16
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}${sign}${offsetHours}:${offsetMinutes}`;
17
+ };
18
+ exports.toLocalISOString = toLocalISOString;
19
+ const formatDuration = (ms) => {
20
+ const totalSeconds = Math.ceil(ms / 1000);
21
+ const hours = Math.floor(totalSeconds / 3600);
22
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
23
+ const seconds = totalSeconds % 60;
24
+ const parts = [];
25
+ if (hours > 0) {
26
+ parts.push(`${hours}h`);
27
+ }
28
+ if (minutes > 0) {
29
+ parts.push(`${minutes}m`);
30
+ }
31
+ if (seconds > 0 || parts.length === 0) {
32
+ parts.push(`${seconds}s`);
33
+ }
34
+ return parts.join(' ');
35
+ };
36
+ exports.formatDuration = formatDuration;
37
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/date.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAU,EAAE;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAElE,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,GAAG,IAAI,GAAG,WAAW,IAAI,aAAa,EAAE,CAAC;AAC7G,CAAC,CAAC;AAfW,QAAA,gBAAgB,oBAe3B;AAEK,MAAM,cAAc,GAAG,CAAC,EAAU,EAAU,EAAE;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAhBW,QAAA,cAAc,kBAgBzB"}
@@ -0,0 +1,2 @@
1
+ export declare const download: (url: string, filePath: string, init?: RequestInit, timeoutMs?: number) => Promise<void>;
2
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/download.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,GACpB,KAAK,MAAM,EACX,UAAU,MAAM,EAChB,OAAO,WAAW,EAClB,kBAAyB,KACvB,OAAO,CAAC,IAAI,CAUd,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.download = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const http_js_1 = require("./http.js");
9
+ const download = async (url, filePath, init, timeoutMs = 5 * 60 * 1000) => {
10
+ const resp = await fetch(url, {
11
+ signal: AbortSignal.timeout(timeoutMs),
12
+ ...init,
13
+ });
14
+ if (!resp.ok) {
15
+ throw new http_js_1.HttpError(resp.status, resp.statusText);
16
+ }
17
+ const buffer = await resp.arrayBuffer();
18
+ await node_fs_1.default.promises.writeFile(filePath, Buffer.from(buffer));
19
+ };
20
+ exports.download = download;
21
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/download.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,uCAAsC;AAE/B,MAAM,QAAQ,GAAG,KAAK,EAC5B,GAAW,EACX,QAAgB,EAChB,IAAkB,EAClB,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EACT,EAAE;IAClB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;QACtC,GAAG,IAAI;KACP,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,mBAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,iBAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAfW,QAAA,QAAQ,YAenB"}
@@ -0,0 +1,2 @@
1
+ export declare const serializeError: (error: Error) => Record<string, unknown>;
2
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CACC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeError = void 0;
4
+ const serializeError = (error) => JSON.parse(JSON.stringify(error, Object.getOwnPropertyNames(error)));
5
+ exports.serializeError = serializeError;
6
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":";;;AAAO,MAAM,cAAc,GAAG,CAAC,KAAY,EAA2B,EAAE,CACvE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AADzD,QAAA,cAAc,kBAC2C"}
@@ -0,0 +1,2 @@
1
+ export declare const mkdir: (path: string) => Promise<void>;
2
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/fs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAUtD,CAAC"}
package/lib/cjs/fs.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.mkdir = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const mkdir = async (path) => {
9
+ try {
10
+ await node_fs_1.default.promises.lstat(path);
11
+ }
12
+ catch (error) {
13
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
14
+ await node_fs_1.default.promises.mkdir(path, { recursive: true });
15
+ }
16
+ else {
17
+ throw error;
18
+ }
19
+ }
20
+ };
21
+ exports.mkdir = mkdir;
22
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/fs.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AAElB,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IAC1D,IAAI,CAAC;QACJ,MAAM,iBAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1E,MAAM,iBAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAVW,QAAA,KAAK,SAUhB"}
@@ -1,2 +1,2 @@
1
- export declare const getEnumValue: <T extends string, TEnum extends string>(value: { [key in T]: TEnum; }) => (value?: string) => TEnum | null;
1
+ export declare const getEnumValue: <TEnum extends string>(value: Record<string, TEnum>) => (input?: string) => TEnum | null;
2
2
  //# sourceMappingURL=getEnumValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEnumValue.d.ts","sourceRoot":"","sources":["../../src/getEnumValue.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,GAAE,MAExF,QAAQ,MAAM,KAAG,KAAK,GAAG,IACjC,CAAC"}
1
+ {"version":3,"file":"getEnumValue.d.ts","sourceRoot":"","sources":["../../src/getEnumValue.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,KAAK,SAAS,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAEtE,QAAQ,MAAM,KAAG,KAAK,GAAG,IACjC,CAAC"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getEnumValue = void 0;
4
4
  const getEnumValue = (value) => {
5
5
  const enumValues = Object.values(value);
6
- return (value) => (enumValues.includes(value) ? value : null);
6
+ return (input) => enumValues.find((e) => e === input) ?? null;
7
7
  };
8
8
  exports.getEnumValue = getEnumValue;
9
9
  //# sourceMappingURL=getEnumValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEnumValue.js","sourceRoot":"","sources":["../../src/getEnumValue.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAyC,KAA4B,EAAE,EAAE;IACpG,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,KAAc,EAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC,CAAC;AAHW,QAAA,YAAY,gBAGvB"}
1
+ {"version":3,"file":"getEnumValue.js","sourceRoot":"","sources":["../../src/getEnumValue.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAuB,KAA4B,EAAE,EAAE;IAClF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,KAAc,EAAgB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;AACtF,CAAC,CAAC;AAHW,QAAA,YAAY,gBAGvB"}
@@ -0,0 +1,12 @@
1
+ export declare class HttpError extends Error {
2
+ readonly status: number;
3
+ constructor(status: number, statusText: string);
4
+ }
5
+ export interface FetchRetryOptions {
6
+ maxRetries?: number;
7
+ baseDelayMs?: number;
8
+ jitterMs?: number;
9
+ timeoutMs?: number;
10
+ }
11
+ export declare const fetchWithRetry: (url: string, init?: RequestInit, retryOptions?: FetchRetryOptions) => Promise<Response>;
12
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aAElB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,UAAU,EAAE,MAAM;CAInB;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,GAC1B,KAAK,MAAM,EACX,OAAO,WAAW,EAClB,eAAe,iBAAiB,KAC9B,OAAO,CAAC,QAAQ,CA6BlB,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchWithRetry = exports.HttpError = void 0;
4
+ const sleep_js_1 = require("./sleep.js");
5
+ class HttpError extends Error {
6
+ status;
7
+ constructor(status, statusText) {
8
+ super(`HTTP ${status} ${statusText}`);
9
+ this.status = status;
10
+ }
11
+ }
12
+ exports.HttpError = HttpError;
13
+ const fetchWithRetry = async (url, init, retryOptions) => {
14
+ const { maxRetries = 3, baseDelayMs = 1000, jitterMs = 500, timeoutMs = 30000 } = retryOptions ?? {};
15
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
16
+ const resp = await fetch(url, {
17
+ signal: AbortSignal.timeout(timeoutMs),
18
+ ...init,
19
+ });
20
+ if (resp.ok) {
21
+ return resp;
22
+ }
23
+ const error = new HttpError(resp.status, resp.statusText);
24
+ const isTransient = resp.status === 429 || resp.status >= 500;
25
+ if (!isTransient || attempt === maxRetries) {
26
+ throw error;
27
+ }
28
+ const retryAfterHeader = resp.headers.get('retry-after');
29
+ const delay = retryAfterHeader !== null && retryAfterHeader !== ''
30
+ ? Number.parseInt(retryAfterHeader, 10) * 1000
31
+ : baseDelayMs * 2 ** attempt;
32
+ await (0, sleep_js_1.sleep)(delay, jitterMs);
33
+ }
34
+ throw new Error('unreachable');
35
+ };
36
+ exports.fetchWithRetry = fetchWithRetry;
37
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AAEnC,MAAa,SAAU,SAAQ,KAAK;IAElB;IADjB,YACiB,MAAc,EAC9B,UAAkB;QAElB,KAAK,CAAC,QAAQ,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAHtB,WAAM,GAAN,MAAM,CAAQ;IAI/B,CAAC;CACD;AAPD,8BAOC;AASM,MAAM,cAAc,GAAG,KAAK,EAClC,GAAW,EACX,IAAkB,EAClB,YAAgC,EACZ,EAAE;IACtB,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;IAErG,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtC,GAAG,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;QAE9D,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC;QACb,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,KAAK,GACV,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,EAAE;YACnD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,IAAI;YAC9C,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC;QAC/B,MAAM,IAAA,gBAAK,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AAChC,CAAC,CAAC;AAjCW,QAAA,cAAc,kBAiCzB"}
@@ -1,9 +1,16 @@
1
+ export { formatDuration, toLocalISOString } from './date.js';
2
+ export { serializeError } from './error.js';
1
3
  export { getEnumValue } from './getEnumValue.js';
4
+ export { HttpError, fetchWithRetry } from './http.js';
5
+ export type { FetchRetryOptions } from './http.js';
6
+ export { interceptXHR } from './interceptXHR.js';
2
7
  export { isNonNullable } from './isNonNullable.js';
3
8
  export { LogLevel, logger } from './logger.js';
4
9
  export { notifyMattermost, notifySlack } from './notify.js';
5
10
  export { Queue } from './queue.js';
6
11
  export { sleep } from './sleep.js';
12
+ export { escapeHtml } from './string.js';
7
13
  export { throttle } from './throttle.js';
8
14
  export type { Last, Tail } from './types.js';
15
+ export { waitForElement, waitForElements } from './waitForElement.js';
9
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
package/lib/cjs/index.js CHANGED
@@ -1,8 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.throttle = exports.sleep = exports.Queue = exports.notifySlack = exports.notifyMattermost = exports.logger = exports.LogLevel = exports.isNonNullable = exports.getEnumValue = void 0;
3
+ exports.waitForElements = exports.waitForElement = exports.throttle = exports.escapeHtml = exports.sleep = exports.Queue = exports.notifySlack = exports.notifyMattermost = exports.logger = exports.LogLevel = exports.isNonNullable = exports.interceptXHR = exports.fetchWithRetry = exports.HttpError = exports.getEnumValue = exports.serializeError = exports.toLocalISOString = exports.formatDuration = void 0;
4
+ var date_js_1 = require("./date.js");
5
+ Object.defineProperty(exports, "formatDuration", { enumerable: true, get: function () { return date_js_1.formatDuration; } });
6
+ Object.defineProperty(exports, "toLocalISOString", { enumerable: true, get: function () { return date_js_1.toLocalISOString; } });
7
+ var error_js_1 = require("./error.js");
8
+ Object.defineProperty(exports, "serializeError", { enumerable: true, get: function () { return error_js_1.serializeError; } });
4
9
  var getEnumValue_js_1 = require("./getEnumValue.js");
5
10
  Object.defineProperty(exports, "getEnumValue", { enumerable: true, get: function () { return getEnumValue_js_1.getEnumValue; } });
11
+ var http_js_1 = require("./http.js");
12
+ Object.defineProperty(exports, "HttpError", { enumerable: true, get: function () { return http_js_1.HttpError; } });
13
+ Object.defineProperty(exports, "fetchWithRetry", { enumerable: true, get: function () { return http_js_1.fetchWithRetry; } });
14
+ var interceptXHR_js_1 = require("./interceptXHR.js");
15
+ Object.defineProperty(exports, "interceptXHR", { enumerable: true, get: function () { return interceptXHR_js_1.interceptXHR; } });
6
16
  var isNonNullable_js_1 = require("./isNonNullable.js");
7
17
  Object.defineProperty(exports, "isNonNullable", { enumerable: true, get: function () { return isNonNullable_js_1.isNonNullable; } });
8
18
  var logger_js_1 = require("./logger.js");
@@ -15,6 +25,11 @@ var queue_js_1 = require("./queue.js");
15
25
  Object.defineProperty(exports, "Queue", { enumerable: true, get: function () { return queue_js_1.Queue; } });
16
26
  var sleep_js_1 = require("./sleep.js");
17
27
  Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return sleep_js_1.sleep; } });
28
+ var string_js_1 = require("./string.js");
29
+ Object.defineProperty(exports, "escapeHtml", { enumerable: true, get: function () { return string_js_1.escapeHtml; } });
18
30
  var throttle_js_1 = require("./throttle.js");
19
31
  Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return throttle_js_1.throttle; } });
32
+ var waitForElement_js_1 = require("./waitForElement.js");
33
+ Object.defineProperty(exports, "waitForElement", { enumerable: true, get: function () { return waitForElement_js_1.waitForElement; } });
34
+ Object.defineProperty(exports, "waitForElements", { enumerable: true, get: function () { return waitForElement_js_1.waitForElements; } });
20
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AACtB,yCAA+C;AAAtC,qGAAA,QAAQ,OAAA;AAAE,mGAAA,MAAM,OAAA;AACzB,yCAA4D;AAAnD,6GAAA,gBAAgB,OAAA;AAAE,wGAAA,WAAW,OAAA;AACtC,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAA6D;AAApD,yGAAA,cAAc,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACzC,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,qCAAsD;AAA7C,oGAAA,SAAS,OAAA;AAAE,yGAAA,cAAc,OAAA;AAElC,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AACtB,yCAA+C;AAAtC,qGAAA,QAAQ,OAAA;AAAE,mGAAA,MAAM,OAAA;AACzB,yCAA4D;AAAnD,6GAAA,gBAAgB,OAAA;AAAE,wGAAA,WAAW,OAAA;AACtC,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AACnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AAEjB,yDAAsE;AAA7D,mHAAA,cAAc,OAAA;AAAE,oHAAA,eAAe,OAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const interceptXHR: (pattern: string | RegExp, handler: (xhr: XMLHttpRequest) => void) => void;
2
+ //# sourceMappingURL=interceptXHR.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptXHR.d.ts","sourceRoot":"","sources":["../../src/interceptXHR.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,SAoB5F,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interceptXHR = void 0;
4
+ const originalSend = XMLHttpRequest.prototype.send;
5
+ const interceptXHR = (pattern, handler) => {
6
+ XMLHttpRequest.prototype.send = function (body) {
7
+ this.addEventListener('load', () => {
8
+ if (this.status !== 200) {
9
+ return;
10
+ }
11
+ const matches = typeof pattern === 'string'
12
+ ? this.responseURL.includes(pattern)
13
+ : pattern.test(this.responseURL);
14
+ if (!matches) {
15
+ return;
16
+ }
17
+ handler(this);
18
+ });
19
+ return originalSend.call(this, body);
20
+ };
21
+ };
22
+ exports.interceptXHR = interceptXHR;
23
+ //# sourceMappingURL=interceptXHR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptXHR.js","sourceRoot":"","sources":["../../src/interceptXHR.ts"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;AAE5C,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAE,OAAsC,EAAE,EAAE;IAChG,cAAc,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI;QAC7C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACzB,OAAO;YACR,CAAC;YAED,MAAM,OAAO,GACZ,OAAO,OAAO,KAAK,QAAQ;gBAC1B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACpC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;YACR,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACH,CAAC,CAAC;AApBW,QAAA,YAAY,gBAoBvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IACnB,KAAK,IAAI;IACT,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AAgC/C,eAAO,MAAM,MAAM;qBACD,MAAM,YAAY,OAAO;oBAC1B,MAAM,YAAY,OAAO;oBACzB,MAAM,YAAY,OAAO;qBACxB,MAAM,YAAY,OAAO;sBACxB,QAAQ,GAAG,MAAM;CAYnC,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IACnB,KAAK,IAAI;IACT,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AAgC/C,eAAO,MAAM,MAAM;qBACD,MAAM,YAAY,OAAO;oBAC1B,MAAM,YAAY,OAAO;oBACzB,MAAM,YAAY,OAAO;qBACxB,MAAM,YAAY,OAAO;sBACxB,QAAQ,GAAG,MAAM;CAkBnC,CAAC"}
package/lib/cjs/logger.js CHANGED
@@ -41,7 +41,13 @@ exports.logger = {
41
41
  error: (message, payload) => log(LogLevel.ERROR, message, payload),
42
42
  setLevel: (level) => {
43
43
  if (typeof level === 'string') {
44
- const resolved = LogLevel[level.toUpperCase()];
44
+ const levelMap = {
45
+ DEBUG: LogLevel.DEBUG,
46
+ INFO: LogLevel.INFO,
47
+ WARN: LogLevel.WARN,
48
+ ERROR: LogLevel.ERROR,
49
+ };
50
+ const resolved = levelMap[level.toUpperCase()];
45
51
  if (resolved === undefined) {
46
52
  console.warn(`[logger] Invalid log level: "${level}", keeping current level`);
47
53
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
package/lib/cjs/node.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export declare const mkdir: (path: string) => Promise<void>;
1
+ export * from './download.js';
2
+ export * from './fs.js';
3
+ export * from './zlib.js';
2
4
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAUtD,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
package/lib/cjs/node.js CHANGED
@@ -1,22 +1,20 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.mkdir = void 0;
7
- const node_fs_1 = __importDefault(require("node:fs"));
8
- const mkdir = async (path) => {
9
- try {
10
- await node_fs_1.default.promises.lstat(path);
11
- }
12
- catch (error) {
13
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
14
- await node_fs_1.default.promises.mkdir(path, { recursive: true });
15
- }
16
- else {
17
- throw error;
18
- }
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
7
  }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
15
  };
21
- exports.mkdir = mkdir;
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./download.js"), exports);
18
+ __exportStar(require("./fs.js"), exports);
19
+ __exportStar(require("./zlib.js"), exports);
22
20
  //# sourceMappingURL=node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AAElB,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IAC1D,IAAI,CAAC;QACJ,MAAM,iBAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1E,MAAM,iBAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAVW,QAAA,KAAK,SAUhB"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,0CAAwB;AACxB,4CAA0B"}
@@ -0,0 +1,2 @@
1
+ export declare const escapeHtml: (value: string) => string;
2
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAA4E,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeHtml = void 0;
4
+ const escapeMap = {
5
+ '"': '&quot;',
6
+ "'": '&apos;',
7
+ '<': '&lt;',
8
+ '>': '&gt;',
9
+ '&': '&amp;',
10
+ };
11
+ const escapeHtml = (value) => value.replaceAll(/["'<>&]/g, (match) => escapeMap[match] ?? match);
12
+ exports.escapeHtml = escapeHtml;
13
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":";;;AAAA,MAAM,SAAS,GAA2B;IACzC,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,OAAO;CACZ,CAAC;AAEK,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;AAA3G,QAAA,UAAU,cAAiG"}
@@ -0,0 +1,11 @@
1
+ export declare const waitForElement: <T extends HTMLElement>(selector: string, options?: {
2
+ parent?: ParentNode;
3
+ timeout?: number;
4
+ jitter?: number;
5
+ }) => Promise<T[] | null>;
6
+ export declare const waitForElements: <T extends HTMLElement>(selector: string | string[], options?: {
7
+ parent?: HTMLElement;
8
+ timeout?: number;
9
+ jitter?: number;
10
+ }) => Promise<T[] | null>;
11
+ //# sourceMappingURL=waitForElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitForElement.d.ts","sourceRoot":"","sources":["../../src/waitForElement.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,WAAW,EACzD,UAAU,MAAM,EAChB,UAAU;IACT,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,KACC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAMpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,CAAC,SAAS,WAAW,EAC1D,UAAU,MAAM,GAAG,MAAM,EAAE,EAC3B,UAAU;IACT,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,KACC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAYpB,CAAC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForElements = exports.waitForElement = void 0;
4
+ const isNonNullable_js_1 = require("./isNonNullable.js");
5
+ const sleep_js_1 = require("./sleep.js");
6
+ const poll = async (handler, options) => {
7
+ const { timeout = 10000, jitter = 0 } = options ?? {};
8
+ let elapsedTime = 0;
9
+ const intervalTime = 100;
10
+ for (;;) {
11
+ const result = handler();
12
+ if (result !== null) {
13
+ return result;
14
+ }
15
+ if (elapsedTime >= timeout) {
16
+ return null;
17
+ }
18
+ await (0, sleep_js_1.sleep)(intervalTime, jitter);
19
+ elapsedTime += intervalTime;
20
+ }
21
+ };
22
+ const waitForElement = async (selector, options) => {
23
+ const root = options?.parent ?? document;
24
+ return poll(() => {
25
+ const elements = root.querySelectorAll(selector);
26
+ return elements.length > 0 ? Array.from(elements) : null;
27
+ }, options);
28
+ };
29
+ exports.waitForElement = waitForElement;
30
+ const waitForElements = async (selector, options) => {
31
+ const root = options?.parent ?? document;
32
+ const selectors = Array.isArray(selector) ? selector : [selector];
33
+ return poll(() => {
34
+ for (const selector of selectors) {
35
+ const elements = root.querySelectorAll(selector);
36
+ if (elements.length > 0) {
37
+ return Array.from(elements).filter(isNonNullable_js_1.isNonNullable);
38
+ }
39
+ }
40
+ return null;
41
+ }, options);
42
+ };
43
+ exports.waitForElements = waitForElements;
44
+ //# sourceMappingURL=waitForElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitForElement.js","sourceRoot":"","sources":["../../src/waitForElement.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AACnD,yCAAmC;AAEnC,MAAM,IAAI,GAAG,KAAK,EACjB,OAAuB,EACvB,OAGC,EACmB,EAAE;IACtB,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACtD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,YAAY,GAAG,GAAG,CAAC;IAEzB,SAAS,CAAC;QACT,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,IAAA,gBAAK,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAClC,WAAW,IAAI,YAAY,CAAC;IAC7B,CAAC;AACF,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,KAAK,EAClC,QAAgB,EAChB,OAIC,EACqB,EAAE;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,EAAE;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAI,QAAQ,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC,EAAE,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAbW,QAAA,cAAc,kBAazB;AAEK,MAAM,eAAe,GAAG,KAAK,EACnC,QAA2B,EAC3B,OAIC,EACqB,EAAE;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,GAAG,EAAE;QAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAI,QAAQ,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,gCAAa,CAAC,CAAC;YACnD,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,EAAE,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B"}
@@ -0,0 +1,3 @@
1
+ export declare const compress: <T>(data: T) => Promise<Buffer>;
2
+ export declare const decompress: <T>(data: Buffer) => Promise<T>;
3
+ //# sourceMappingURL=zlib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zlib.d.ts","sourceRoot":"","sources":["../../src/zlib.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,MAAM,CAAC,KAAG,OAAO,CAAC,MAAM,CAA+C,CAAC;AAE1G,eAAO,MAAM,UAAU,GAAU,CAAC,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAG3D,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decompress = exports.compress = void 0;
7
+ const node_util_1 = require("node:util");
8
+ const node_zlib_1 = __importDefault(require("node:zlib"));
9
+ const deflate = (0, node_util_1.promisify)(node_zlib_1.default.deflate);
10
+ const inflate = (0, node_util_1.promisify)(node_zlib_1.default.inflate);
11
+ const compress = async (data) => deflate(Buffer.from(JSON.stringify(data)));
12
+ exports.compress = compress;
13
+ const decompress = async (data) => {
14
+ const result = await inflate(data);
15
+ return JSON.parse(result.toString());
16
+ };
17
+ exports.decompress = decompress;
18
+ //# sourceMappingURL=zlib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zlib.js","sourceRoot":"","sources":["../../src/zlib.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAsC;AACtC,0DAA6B;AAE7B,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,mBAAI,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,mBAAI,CAAC,OAAO,CAAC,CAAC;AAEjC,MAAM,QAAQ,GAAG,KAAK,EAAK,IAAO,EAAmB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAA7F,QAAA,QAAQ,YAAqF;AAEnG,MAAM,UAAU,GAAG,KAAK,EAAK,IAAY,EAAc,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtC,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB"}
package/lib/date.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const toLocalISOString: (date: Date) => string;
2
+ export declare const formatDuration: (ms: number) => string;
3
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,KAAG,MAe7C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAgB3C,CAAC"}
package/lib/date.js ADDED
@@ -0,0 +1,32 @@
1
+ export const toLocalISOString = (date) => {
2
+ const year = date.getFullYear();
3
+ const month = `${date.getMonth() + 1}`.padStart(2, '0');
4
+ const day = `${date.getDate()}`.padStart(2, '0');
5
+ const hours = `${date.getHours()}`.padStart(2, '0');
6
+ const minutes = `${date.getMinutes()}`.padStart(2, '0');
7
+ const seconds = `${date.getSeconds()}`.padStart(2, '0');
8
+ const ms = `${date.getMilliseconds()}`.padStart(3, '0');
9
+ const offset = date.getTimezoneOffset();
10
+ const sign = offset <= 0 ? '+' : '-';
11
+ const offsetHours = `${Math.floor(Math.abs(offset) / 60)}`.padStart(2, '0');
12
+ const offsetMinutes = `${Math.abs(offset) % 60}`.padStart(2, '0');
13
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}${sign}${offsetHours}:${offsetMinutes}`;
14
+ };
15
+ export const formatDuration = (ms) => {
16
+ const totalSeconds = Math.ceil(ms / 1000);
17
+ const hours = Math.floor(totalSeconds / 3600);
18
+ const minutes = Math.floor((totalSeconds % 3600) / 60);
19
+ const seconds = totalSeconds % 60;
20
+ const parts = [];
21
+ if (hours > 0) {
22
+ parts.push(`${hours}h`);
23
+ }
24
+ if (minutes > 0) {
25
+ parts.push(`${minutes}m`);
26
+ }
27
+ if (seconds > 0 || parts.length === 0) {
28
+ parts.push(`${seconds}s`);
29
+ }
30
+ return parts.join(' ');
31
+ };
32
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAU,EAAE;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAElE,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,GAAG,IAAI,GAAG,WAAW,IAAI,aAAa,EAAE,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAU,EAAE;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const download: (url: string, filePath: string, init?: RequestInit, timeoutMs?: number) => Promise<void>;
2
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,GACpB,KAAK,MAAM,EACX,UAAU,MAAM,EAChB,OAAO,WAAW,EAClB,kBAAyB,KACvB,OAAO,CAAC,IAAI,CAUd,CAAC"}
@@ -0,0 +1,14 @@
1
+ import fs from 'node:fs';
2
+ import { HttpError } from './http.js';
3
+ export const download = async (url, filePath, init, timeoutMs = 5 * 60 * 1000) => {
4
+ const resp = await fetch(url, {
5
+ signal: AbortSignal.timeout(timeoutMs),
6
+ ...init,
7
+ });
8
+ if (!resp.ok) {
9
+ throw new HttpError(resp.status, resp.statusText);
10
+ }
11
+ const buffer = await resp.arrayBuffer();
12
+ await fs.promises.writeFile(filePath, Buffer.from(buffer));
13
+ };
14
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC5B,GAAW,EACX,QAAgB,EAChB,IAAkB,EAClB,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EACT,EAAE;IAClB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;QACtC,GAAG,IAAI;KACP,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC"}
package/lib/error.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const serializeError: (error: Error) => Record<string, unknown>;
2
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CACC,CAAC"}
package/lib/error.js ADDED
@@ -0,0 +1,2 @@
1
+ export const serializeError = (error) => JSON.parse(JSON.stringify(error, Object.getOwnPropertyNames(error)));
2
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAA2B,EAAE,CACvE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC"}
package/lib/fs.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const mkdir: (path: string) => Promise<void>;
2
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAUtD,CAAC"}
package/lib/fs.js ADDED
@@ -0,0 +1,15 @@
1
+ import fs from 'node:fs';
2
+ export const mkdir = async (path) => {
3
+ try {
4
+ await fs.promises.lstat(path);
5
+ }
6
+ catch (error) {
7
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
8
+ await fs.promises.mkdir(path, { recursive: true });
9
+ }
10
+ else {
11
+ throw error;
12
+ }
13
+ }
14
+ };
15
+ //# sourceMappingURL=fs.js.map
package/lib/fs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IAC1D,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1E,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const getEnumValue: <T extends string, TEnum extends string>(value: { [key in T]: TEnum; }) => (value?: string) => TEnum | null;
1
+ export declare const getEnumValue: <TEnum extends string>(value: Record<string, TEnum>) => (input?: string) => TEnum | null;
2
2
  //# sourceMappingURL=getEnumValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEnumValue.d.ts","sourceRoot":"","sources":["../src/getEnumValue.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,GAAE,MAExF,QAAQ,MAAM,KAAG,KAAK,GAAG,IACjC,CAAC"}
1
+ {"version":3,"file":"getEnumValue.d.ts","sourceRoot":"","sources":["../src/getEnumValue.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,KAAK,SAAS,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAEtE,QAAQ,MAAM,KAAG,KAAK,GAAG,IACjC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export const getEnumValue = (value) => {
2
2
  const enumValues = Object.values(value);
3
- return (value) => (enumValues.includes(value) ? value : null);
3
+ return (input) => enumValues.find((e) => e === input) ?? null;
4
4
  };
5
5
  //# sourceMappingURL=getEnumValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getEnumValue.js","sourceRoot":"","sources":["../src/getEnumValue.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAyC,KAA4B,EAAE,EAAE;IACpG,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,KAAc,EAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjG,CAAC,CAAC"}
1
+ {"version":3,"file":"getEnumValue.js","sourceRoot":"","sources":["../src/getEnumValue.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAuB,KAA4B,EAAE,EAAE;IAClF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,KAAc,EAAgB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;AACtF,CAAC,CAAC"}
package/lib/http.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export declare class HttpError extends Error {
2
+ readonly status: number;
3
+ constructor(status: number, statusText: string);
4
+ }
5
+ export interface FetchRetryOptions {
6
+ maxRetries?: number;
7
+ baseDelayMs?: number;
8
+ jitterMs?: number;
9
+ timeoutMs?: number;
10
+ }
11
+ export declare const fetchWithRetry: (url: string, init?: RequestInit, retryOptions?: FetchRetryOptions) => Promise<Response>;
12
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aAElB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,UAAU,EAAE,MAAM;CAInB;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,GAC1B,KAAK,MAAM,EACX,OAAO,WAAW,EAClB,eAAe,iBAAiB,KAC9B,OAAO,CAAC,QAAQ,CA6BlB,CAAC"}
package/lib/http.js ADDED
@@ -0,0 +1,32 @@
1
+ import { sleep } from './sleep.js';
2
+ export class HttpError extends Error {
3
+ status;
4
+ constructor(status, statusText) {
5
+ super(`HTTP ${status} ${statusText}`);
6
+ this.status = status;
7
+ }
8
+ }
9
+ export const fetchWithRetry = async (url, init, retryOptions) => {
10
+ const { maxRetries = 3, baseDelayMs = 1000, jitterMs = 500, timeoutMs = 30000 } = retryOptions ?? {};
11
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
12
+ const resp = await fetch(url, {
13
+ signal: AbortSignal.timeout(timeoutMs),
14
+ ...init,
15
+ });
16
+ if (resp.ok) {
17
+ return resp;
18
+ }
19
+ const error = new HttpError(resp.status, resp.statusText);
20
+ const isTransient = resp.status === 429 || resp.status >= 500;
21
+ if (!isTransient || attempt === maxRetries) {
22
+ throw error;
23
+ }
24
+ const retryAfterHeader = resp.headers.get('retry-after');
25
+ const delay = retryAfterHeader !== null && retryAfterHeader !== ''
26
+ ? Number.parseInt(retryAfterHeader, 10) * 1000
27
+ : baseDelayMs * 2 ** attempt;
28
+ await sleep(delay, jitterMs);
29
+ }
30
+ throw new Error('unreachable');
31
+ };
32
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAElB;IADjB,YACiB,MAAc,EAC9B,UAAkB;QAElB,KAAK,CAAC,QAAQ,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAHtB,WAAM,GAAN,MAAM,CAAQ;IAI/B,CAAC;CACD;AASD,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,GAAW,EACX,IAAkB,EAClB,YAAgC,EACZ,EAAE;IACtB,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;IAErG,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtC,GAAG,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;QAE9D,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC;QACb,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,KAAK,GACV,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,EAAE;YACnD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,IAAI;YAC9C,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC;QAC/B,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AAChC,CAAC,CAAC"}
package/lib/index.d.ts CHANGED
@@ -1,9 +1,16 @@
1
+ export { formatDuration, toLocalISOString } from './date.js';
2
+ export { serializeError } from './error.js';
1
3
  export { getEnumValue } from './getEnumValue.js';
4
+ export { HttpError, fetchWithRetry } from './http.js';
5
+ export type { FetchRetryOptions } from './http.js';
6
+ export { interceptXHR } from './interceptXHR.js';
2
7
  export { isNonNullable } from './isNonNullable.js';
3
8
  export { LogLevel, logger } from './logger.js';
4
9
  export { notifyMattermost, notifySlack } from './notify.js';
5
10
  export { Queue } from './queue.js';
6
11
  export { sleep } from './sleep.js';
12
+ export { escapeHtml } from './string.js';
7
13
  export { throttle } from './throttle.js';
8
14
  export type { Last, Tail } from './types.js';
15
+ export { waitForElement, waitForElements } from './waitForElement.js';
9
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
package/lib/index.js CHANGED
@@ -1,8 +1,14 @@
1
+ export { formatDuration, toLocalISOString } from './date.js';
2
+ export { serializeError } from './error.js';
1
3
  export { getEnumValue } from './getEnumValue.js';
4
+ export { HttpError, fetchWithRetry } from './http.js';
5
+ export { interceptXHR } from './interceptXHR.js';
2
6
  export { isNonNullable } from './isNonNullable.js';
3
7
  export { LogLevel, logger } from './logger.js';
4
8
  export { notifyMattermost, notifySlack } from './notify.js';
5
9
  export { Queue } from './queue.js';
6
10
  export { sleep } from './sleep.js';
11
+ export { escapeHtml } from './string.js';
7
12
  export { throttle } from './throttle.js';
13
+ export { waitForElement, waitForElements } from './waitForElement.js';
8
14
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const interceptXHR: (pattern: string | RegExp, handler: (xhr: XMLHttpRequest) => void) => void;
2
+ //# sourceMappingURL=interceptXHR.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptXHR.d.ts","sourceRoot":"","sources":["../src/interceptXHR.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,SAoB5F,CAAC"}
@@ -0,0 +1,19 @@
1
+ const originalSend = XMLHttpRequest.prototype.send;
2
+ export const interceptXHR = (pattern, handler) => {
3
+ XMLHttpRequest.prototype.send = function (body) {
4
+ this.addEventListener('load', () => {
5
+ if (this.status !== 200) {
6
+ return;
7
+ }
8
+ const matches = typeof pattern === 'string'
9
+ ? this.responseURL.includes(pattern)
10
+ : pattern.test(this.responseURL);
11
+ if (!matches) {
12
+ return;
13
+ }
14
+ handler(this);
15
+ });
16
+ return originalSend.call(this, body);
17
+ };
18
+ };
19
+ //# sourceMappingURL=interceptXHR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptXHR.js","sourceRoot":"","sources":["../src/interceptXHR.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAE,OAAsC,EAAE,EAAE;IAChG,cAAc,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI;QAC7C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACzB,OAAO;YACR,CAAC;YAED,MAAM,OAAO,GACZ,OAAO,OAAO,KAAK,QAAQ;gBAC1B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACpC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;YACR,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IACnB,KAAK,IAAI;IACT,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AAgC/C,eAAO,MAAM,MAAM;qBACD,MAAM,YAAY,OAAO;oBAC1B,MAAM,YAAY,OAAO;oBACzB,MAAM,YAAY,OAAO;qBACxB,MAAM,YAAY,OAAO;sBACxB,QAAQ,GAAG,MAAM;CAYnC,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IACnB,KAAK,IAAI;IACT,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AAgC/C,eAAO,MAAM,MAAM;qBACD,MAAM,YAAY,OAAO;oBAC1B,MAAM,YAAY,OAAO;oBACzB,MAAM,YAAY,OAAO;qBACxB,MAAM,YAAY,OAAO;sBACxB,QAAQ,GAAG,MAAM;CAkBnC,CAAC"}
package/lib/logger.js CHANGED
@@ -38,7 +38,13 @@ export const logger = {
38
38
  error: (message, payload) => log(LogLevel.ERROR, message, payload),
39
39
  setLevel: (level) => {
40
40
  if (typeof level === 'string') {
41
- const resolved = LogLevel[level.toUpperCase()];
41
+ const levelMap = {
42
+ DEBUG: LogLevel.DEBUG,
43
+ INFO: LogLevel.INFO,
44
+ WARN: LogLevel.WARN,
45
+ ERROR: LogLevel.ERROR,
46
+ };
47
+ const resolved = levelMap[level.toUpperCase()];
42
48
  if (resolved === undefined) {
43
49
  console.warn(`[logger] Invalid log level: "${level}", keeping current level`);
44
50
  return;
package/lib/logger.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
package/lib/node.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export declare const mkdir: (path: string) => Promise<void>;
1
+ export * from './download.js';
2
+ export * from './fs.js';
3
+ export * from './zlib.js';
2
4
  //# sourceMappingURL=node.d.ts.map
package/lib/node.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAUtD,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
package/lib/node.js CHANGED
@@ -1,15 +1,4 @@
1
- import fs from 'node:fs';
2
- export const mkdir = async (path) => {
3
- try {
4
- await fs.promises.lstat(path);
5
- }
6
- catch (error) {
7
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
8
- await fs.promises.mkdir(path, { recursive: true });
9
- }
10
- else {
11
- throw error;
12
- }
13
- }
14
- };
1
+ export * from './download.js';
2
+ export * from './fs.js';
3
+ export * from './zlib.js';
15
4
  //# sourceMappingURL=node.js.map
package/lib/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IAC1D,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1E,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const escapeHtml: (value: string) => string;
2
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAA4E,CAAC"}
package/lib/string.js ADDED
@@ -0,0 +1,9 @@
1
+ const escapeMap = {
2
+ '"': '&quot;',
3
+ "'": '&apos;',
4
+ '<': '&lt;',
5
+ '>': '&gt;',
6
+ '&': '&amp;',
7
+ };
8
+ export const escapeHtml = (value) => value.replaceAll(/["'<>&]/g, (match) => escapeMap[match] ?? match);
9
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAA2B;IACzC,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,OAAO;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const waitForElement: <T extends HTMLElement>(selector: string, options?: {
2
+ parent?: ParentNode;
3
+ timeout?: number;
4
+ jitter?: number;
5
+ }) => Promise<T[] | null>;
6
+ export declare const waitForElements: <T extends HTMLElement>(selector: string | string[], options?: {
7
+ parent?: HTMLElement;
8
+ timeout?: number;
9
+ jitter?: number;
10
+ }) => Promise<T[] | null>;
11
+ //# sourceMappingURL=waitForElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitForElement.d.ts","sourceRoot":"","sources":["../src/waitForElement.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,WAAW,EACzD,UAAU,MAAM,EAChB,UAAU;IACT,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,KACC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAMpB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,CAAC,SAAS,WAAW,EAC1D,UAAU,MAAM,GAAG,MAAM,EAAE,EAC3B,UAAU;IACT,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,KACC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAYpB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { isNonNullable } from './isNonNullable.js';
2
+ import { sleep } from './sleep.js';
3
+ const poll = async (handler, options) => {
4
+ const { timeout = 10000, jitter = 0 } = options ?? {};
5
+ let elapsedTime = 0;
6
+ const intervalTime = 100;
7
+ for (;;) {
8
+ const result = handler();
9
+ if (result !== null) {
10
+ return result;
11
+ }
12
+ if (elapsedTime >= timeout) {
13
+ return null;
14
+ }
15
+ await sleep(intervalTime, jitter);
16
+ elapsedTime += intervalTime;
17
+ }
18
+ };
19
+ export const waitForElement = async (selector, options) => {
20
+ const root = options?.parent ?? document;
21
+ return poll(() => {
22
+ const elements = root.querySelectorAll(selector);
23
+ return elements.length > 0 ? Array.from(elements) : null;
24
+ }, options);
25
+ };
26
+ export const waitForElements = async (selector, options) => {
27
+ const root = options?.parent ?? document;
28
+ const selectors = Array.isArray(selector) ? selector : [selector];
29
+ return poll(() => {
30
+ for (const selector of selectors) {
31
+ const elements = root.querySelectorAll(selector);
32
+ if (elements.length > 0) {
33
+ return Array.from(elements).filter(isNonNullable);
34
+ }
35
+ }
36
+ return null;
37
+ }, options);
38
+ };
39
+ //# sourceMappingURL=waitForElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waitForElement.js","sourceRoot":"","sources":["../src/waitForElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,IAAI,GAAG,KAAK,EACjB,OAAuB,EACvB,OAGC,EACmB,EAAE;IACtB,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACtD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,YAAY,GAAG,GAAG,CAAC;IAEzB,SAAS,CAAC;QACT,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAClC,WAAW,IAAI,YAAY,CAAC;IAC7B,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAClC,QAAgB,EAChB,OAIC,EACqB,EAAE;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,EAAE;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAI,QAAQ,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC,EAAE,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EACnC,QAA2B,EAC3B,OAIC,EACqB,EAAE;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,GAAG,EAAE;QAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAI,QAAQ,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnD,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,EAAE,OAAO,CAAC,CAAC;AACb,CAAC,CAAC"}
package/lib/zlib.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const compress: <T>(data: T) => Promise<Buffer>;
2
+ export declare const decompress: <T>(data: Buffer) => Promise<T>;
3
+ //# sourceMappingURL=zlib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zlib.d.ts","sourceRoot":"","sources":["../src/zlib.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,MAAM,CAAC,KAAG,OAAO,CAAC,MAAM,CAA+C,CAAC;AAE1G,eAAO,MAAM,UAAU,GAAU,CAAC,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAG3D,CAAC"}
package/lib/zlib.js ADDED
@@ -0,0 +1,10 @@
1
+ import { promisify } from 'node:util';
2
+ import zlib from 'node:zlib';
3
+ const deflate = promisify(zlib.deflate);
4
+ const inflate = promisify(zlib.inflate);
5
+ export const compress = async (data) => deflate(Buffer.from(JSON.stringify(data)));
6
+ export const decompress = async (data) => {
7
+ const result = await inflate(data);
8
+ return JSON.parse(result.toString());
9
+ };
10
+ //# sourceMappingURL=zlib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zlib.js","sourceRoot":"","sources":["../src/zlib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAK,IAAO,EAAmB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1G,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAK,IAAY,EAAc,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapphire-sh/utils",
3
- "version": "1.63.0",
3
+ "version": "1.64.0",
4
4
  "description": "@sapphire-sh/utils",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -36,14 +36,15 @@
36
36
  },
37
37
  "./tsconfig": "./tsconfig.json",
38
38
  "./tsconfig.json": "./tsconfig.json",
39
- "./tsconfig.esm": "./tsconfig.json",
40
- "./tsconfig.esm.json": "./tsconfig.json"
39
+ "./tsconfig.cjs": "./tsconfig.cjs.json",
40
+ "./tsconfig.cjs.json": "./tsconfig.cjs.json"
41
41
  },
42
42
  "files": [
43
43
  "bin/**/*",
44
44
  "lib/**/*",
45
45
  "templates",
46
- "tsconfig.json"
46
+ "tsconfig.json",
47
+ "tsconfig.cjs.json"
47
48
  ],
48
49
  "scripts": {
49
50
  "bootstrap": "node bin/sapphire-bootstrap.js",
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "CommonJS",
5
+ "moduleResolution": "node",
6
+ "ignoreDeprecations": "5.0"
7
+ }
8
+ }