@sapphire-sh/utils 1.82.0 → 1.84.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 (143) hide show
  1. package/lib/cjs/date.d.ts +1 -0
  2. package/lib/cjs/date.d.ts.map +1 -1
  3. package/lib/cjs/date.js +3 -1
  4. package/lib/cjs/date.js.map +1 -1
  5. package/lib/cjs/download.d.ts +1 -1
  6. package/lib/cjs/download.d.ts.map +1 -1
  7. package/lib/cjs/download.js +25 -2
  8. package/lib/cjs/download.js.map +1 -1
  9. package/lib/cjs/env.d.ts +3 -0
  10. package/lib/cjs/env.d.ts.map +1 -0
  11. package/lib/cjs/env.js +25 -0
  12. package/lib/cjs/env.js.map +1 -0
  13. package/lib/cjs/eslint.d.ts.map +1 -1
  14. package/lib/cjs/eslint.js +14 -2
  15. package/lib/cjs/eslint.js.map +1 -1
  16. package/lib/cjs/eslintNext.d.ts +3 -0
  17. package/lib/cjs/eslintNext.d.ts.map +1 -0
  18. package/lib/cjs/eslintNext.js +11 -0
  19. package/lib/cjs/eslintNext.js.map +1 -0
  20. package/lib/cjs/eslintRules.d.ts +1 -0
  21. package/lib/cjs/eslintRules.d.ts.map +1 -1
  22. package/lib/cjs/eslintRules.js +33 -1
  23. package/lib/cjs/eslintRules.js.map +1 -1
  24. package/lib/cjs/format.d.ts +2 -0
  25. package/lib/cjs/format.d.ts.map +1 -0
  26. package/lib/cjs/format.js +20 -0
  27. package/lib/cjs/format.js.map +1 -0
  28. package/lib/cjs/fs.d.ts +3 -0
  29. package/lib/cjs/fs.d.ts.map +1 -1
  30. package/lib/cjs/fs.js +22 -6
  31. package/lib/cjs/fs.js.map +1 -1
  32. package/lib/cjs/http.d.ts +3 -1
  33. package/lib/cjs/http.d.ts.map +1 -1
  34. package/lib/cjs/http.js +27 -16
  35. package/lib/cjs/http.js.map +1 -1
  36. package/lib/cjs/index.d.ts +15 -3
  37. package/lib/cjs/index.d.ts.map +1 -1
  38. package/lib/cjs/index.js +26 -1
  39. package/lib/cjs/index.js.map +1 -1
  40. package/lib/cjs/json.d.ts +12 -0
  41. package/lib/cjs/json.d.ts.map +1 -0
  42. package/lib/cjs/json.js +41 -0
  43. package/lib/cjs/json.js.map +1 -0
  44. package/lib/cjs/logger.d.ts +9 -1
  45. package/lib/cjs/logger.d.ts.map +1 -1
  46. package/lib/cjs/logger.js +28 -5
  47. package/lib/cjs/logger.js.map +1 -1
  48. package/lib/cjs/math.d.ts +2 -0
  49. package/lib/cjs/math.d.ts.map +1 -0
  50. package/lib/cjs/math.js +11 -0
  51. package/lib/cjs/math.js.map +1 -0
  52. package/lib/cjs/notify.d.ts +1 -0
  53. package/lib/cjs/notify.d.ts.map +1 -1
  54. package/lib/cjs/notify.js +18 -1
  55. package/lib/cjs/notify.js.map +1 -1
  56. package/lib/cjs/retry.d.ts +10 -0
  57. package/lib/cjs/retry.d.ts.map +1 -0
  58. package/lib/cjs/retry.js +22 -0
  59. package/lib/cjs/retry.js.map +1 -0
  60. package/lib/cjs/serialLimiter.d.ts +3 -0
  61. package/lib/cjs/serialLimiter.d.ts.map +1 -0
  62. package/lib/cjs/serialLimiter.js +29 -0
  63. package/lib/cjs/serialLimiter.js.map +1 -0
  64. package/lib/cjs/slackLogBatcher.d.ts +12 -0
  65. package/lib/cjs/slackLogBatcher.d.ts.map +1 -0
  66. package/lib/cjs/slackLogBatcher.js +54 -0
  67. package/lib/cjs/slackLogBatcher.js.map +1 -0
  68. package/lib/cjs/vitestNext.d.ts +3 -0
  69. package/lib/cjs/vitestNext.d.ts.map +1 -0
  70. package/lib/cjs/vitestNext.js +21 -0
  71. package/lib/cjs/vitestNext.js.map +1 -0
  72. package/lib/date.d.ts +1 -0
  73. package/lib/date.d.ts.map +1 -1
  74. package/lib/date.js +1 -0
  75. package/lib/date.js.map +1 -1
  76. package/lib/download.d.ts +1 -1
  77. package/lib/download.d.ts.map +1 -1
  78. package/lib/download.js +25 -2
  79. package/lib/download.js.map +1 -1
  80. package/lib/env.d.ts +3 -0
  81. package/lib/env.d.ts.map +1 -0
  82. package/lib/env.js +20 -0
  83. package/lib/env.js.map +1 -0
  84. package/lib/eslint.d.ts.map +1 -1
  85. package/lib/eslint.js +14 -2
  86. package/lib/eslint.js.map +1 -1
  87. package/lib/eslintNext.d.ts +3 -0
  88. package/lib/eslintNext.d.ts.map +1 -0
  89. package/lib/eslintNext.js +6 -0
  90. package/lib/eslintNext.js.map +1 -0
  91. package/lib/eslintRules.d.ts +1 -0
  92. package/lib/eslintRules.d.ts.map +1 -1
  93. package/lib/eslintRules.js +32 -0
  94. package/lib/eslintRules.js.map +1 -1
  95. package/lib/format.d.ts +2 -0
  96. package/lib/format.d.ts.map +1 -0
  97. package/lib/format.js +16 -0
  98. package/lib/format.js.map +1 -0
  99. package/lib/fs.d.ts +3 -0
  100. package/lib/fs.d.ts.map +1 -1
  101. package/lib/fs.js +18 -5
  102. package/lib/fs.js.map +1 -1
  103. package/lib/http.d.ts +3 -1
  104. package/lib/http.d.ts.map +1 -1
  105. package/lib/http.js +25 -15
  106. package/lib/http.js.map +1 -1
  107. package/lib/index.d.ts +15 -3
  108. package/lib/index.d.ts.map +1 -1
  109. package/lib/index.js +10 -3
  110. package/lib/index.js.map +1 -1
  111. package/lib/json.d.ts +12 -0
  112. package/lib/json.d.ts.map +1 -0
  113. package/lib/json.js +31 -0
  114. package/lib/json.js.map +1 -0
  115. package/lib/logger.d.ts +9 -1
  116. package/lib/logger.d.ts.map +1 -1
  117. package/lib/logger.js +28 -5
  118. package/lib/logger.js.map +1 -1
  119. package/lib/math.d.ts +2 -0
  120. package/lib/math.d.ts.map +1 -0
  121. package/lib/math.js +7 -0
  122. package/lib/math.js.map +1 -0
  123. package/lib/notify.d.ts +1 -0
  124. package/lib/notify.d.ts.map +1 -1
  125. package/lib/notify.js +16 -0
  126. package/lib/notify.js.map +1 -1
  127. package/lib/retry.d.ts +10 -0
  128. package/lib/retry.d.ts.map +1 -0
  129. package/lib/retry.js +18 -0
  130. package/lib/retry.js.map +1 -0
  131. package/lib/serialLimiter.d.ts +3 -0
  132. package/lib/serialLimiter.d.ts.map +1 -0
  133. package/lib/serialLimiter.js +25 -0
  134. package/lib/serialLimiter.js.map +1 -0
  135. package/lib/slackLogBatcher.d.ts +12 -0
  136. package/lib/slackLogBatcher.d.ts.map +1 -0
  137. package/lib/slackLogBatcher.js +49 -0
  138. package/lib/slackLogBatcher.js.map +1 -0
  139. package/lib/vitestNext.d.ts +3 -0
  140. package/lib/vitestNext.d.ts.map +1 -0
  141. package/lib/vitestNext.js +16 -0
  142. package/lib/vitestNext.js.map +1 -0
  143. package/package.json +21 -1
@@ -1 +1 @@
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,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAyE;AAAhE,qGAAA,UAAU,OAAA;AAAE,yGAAA,cAAc,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACrD,mCAA+C;AAAtC,iGAAA,OAAO,OAAA;AAAE,oGAAA,UAAU,OAAA;AAC5B,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AACpB,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,qCAAiE;AAAxD,oGAAA,SAAS,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,yGAAA,cAAc,OAAA;AAE7C,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AACtB,qCAA2G;AAAlG,mGAAA,QAAQ,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,oGAAA,SAAS,OAAA;AAEvF,yCAA+C;AAAtC,qGAAA,QAAQ,OAAA;AAAE,mGAAA,MAAM,OAAA;AAEzB,qCAAkC;AAAzB,gGAAA,KAAK,OAAA;AACd,yCAA8E;AAArE,6GAAA,gBAAgB,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AACxD,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AAEd,uDAAyD;AAAhD,uHAAA,mBAAmB,OAAA;AAE5B,2DAAyE;AAAhE,gHAAA,UAAU,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AAE1C,uCAAmC;AAA1B,iGAAA,KAAK,OAAA;AACd,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AACnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA"}
@@ -0,0 +1,12 @@
1
+ export type JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;
2
+ export interface JsonObject {
3
+ [key: string]: JsonValue;
4
+ }
5
+ export declare const isJsonObject: (value: unknown) => value is JsonObject;
6
+ export declare const parseJson: (text: string) => JsonValue | null;
7
+ export declare const getObject: (object: JsonObject, key: string) => JsonObject | null;
8
+ export declare const getArray: (object: JsonObject, key: string) => JsonValue[];
9
+ export declare const getString: (object: JsonObject, key: string) => string | null;
10
+ export declare const getNumber: (object: JsonObject, key: string) => number | null;
11
+ export declare const getBoolean: (object: JsonObject, key: string) => boolean | null;
12
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC;AAEpF,MAAM,WAAW,UAAU;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,UACc,CAAC;AAEtE,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,SAAS,GAAG,IAOpD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,UAAU,GAAG,IAGxE,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,SAAS,EAGnE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,IAGpE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,MAAM,GAAG,IAGpE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,EAAE,KAAK,MAAM,KAAG,OAAO,GAAG,IAGtE,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBoolean = exports.getNumber = exports.getString = exports.getArray = exports.getObject = exports.parseJson = exports.isJsonObject = void 0;
4
+ const isJsonObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
5
+ exports.isJsonObject = isJsonObject;
6
+ const parseJson = (text) => {
7
+ try {
8
+ const parsed = JSON.parse(text);
9
+ return parsed;
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ };
15
+ exports.parseJson = parseJson;
16
+ const getObject = (object, key) => {
17
+ const value = object[key];
18
+ return (0, exports.isJsonObject)(value) ? value : null;
19
+ };
20
+ exports.getObject = getObject;
21
+ const getArray = (object, key) => {
22
+ const value = object[key];
23
+ return Array.isArray(value) ? value : [];
24
+ };
25
+ exports.getArray = getArray;
26
+ const getString = (object, key) => {
27
+ const value = object[key];
28
+ return typeof value === 'string' ? value : null;
29
+ };
30
+ exports.getString = getString;
31
+ const getNumber = (object, key) => {
32
+ const value = object[key];
33
+ return typeof value === 'number' ? value : null;
34
+ };
35
+ exports.getNumber = getNumber;
36
+ const getBoolean = (object, key) => {
37
+ const value = object[key];
38
+ return typeof value === 'boolean' ? value : null;
39
+ };
40
+ exports.getBoolean = getBoolean;
41
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":";;;AAMO,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE,CACnE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AADzD,QAAA,YAAY,gBAC6C;AAE/D,MAAM,SAAS,GAAG,CAAC,IAAY,EAAoB,EAAE;IAC3D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEK,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAqB,EAAE;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC,CAAC;AAHW,QAAA,SAAS,aAGpB;AAEK,MAAM,QAAQ,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAe,EAAE;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB;AAEK,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAiB,EAAE;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAHW,QAAA,SAAS,aAGpB;AAEK,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAiB,EAAE;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAHW,QAAA,SAAS,aAGpB;AAEK,MAAM,UAAU,GAAG,CAAC,MAAkB,EAAE,GAAW,EAAkB,EAAE;IAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB"}
@@ -4,12 +4,20 @@ export declare enum LogLevel {
4
4
  WARN = 3,
5
5
  ERROR = 4
6
6
  }
7
- type Payload = Record<string, unknown> | Error;
7
+ type Payload = unknown;
8
+ export interface LogEntry {
9
+ level: LogLevel;
10
+ message: string;
11
+ payload?: unknown;
12
+ timestamp: Date;
13
+ }
14
+ export type LogSink = (entry: LogEntry) => void;
8
15
  export declare const logger: {
9
16
  debug: (message: string, payload?: Payload) => void;
10
17
  info: (message: string, payload?: Payload) => void;
11
18
  warn: (message: string, payload?: Payload) => void;
12
19
  error: (message: string, payload?: Payload) => void;
20
+ addSink: (sink: LogSink) => (() => void);
13
21
  setLevel: (level: LogLevel | string) => void;
14
22
  };
15
23
  export {};
@@ -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;AAiD/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":"AAEA,oBAAY,QAAQ;IACnB,KAAK,IAAI;IACT,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,OAAO,CAAC;AAEvB,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAgEhD,eAAO,MAAM,MAAM;qBACD,MAAM,YAAY,OAAO;oBAC1B,MAAM,YAAY,OAAO;oBACzB,MAAM,YAAY,OAAO;qBACxB,MAAM,YAAY,OAAO;oBAC1B,OAAO,KAAG,CAAC,MAAM,IAAI,CAAC;sBASpB,QAAQ,GAAG,MAAM;CAYnC,CAAC"}
package/lib/cjs/logger.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.logger = exports.LogLevel = void 0;
4
+ const env_js_1 = require("./env.js");
4
5
  var LogLevel;
5
6
  (function (LogLevel) {
6
7
  LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
@@ -8,8 +9,13 @@ var LogLevel;
8
9
  LogLevel[LogLevel["WARN"] = 3] = "WARN";
9
10
  LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
10
11
  })(LogLevel || (exports.LogLevel = LogLevel = {}));
12
+ const sinks = [];
13
+ // JSON.stringify is typed as returning string, but returns undefined for values it cannot
14
+ // serialize, such as functions and symbols.
15
+ const stringify = (value) => JSON.stringify(value);
11
16
  const serializePayload = (payload) => {
12
- const json = JSON.stringify(payload instanceof Error ? { error: payload.message, name: payload.name, stack: payload.stack } : payload);
17
+ const serialized = stringify(payload instanceof Error ? { error: payload.message, name: payload.name, stack: payload.stack } : payload);
18
+ const json = serialized ?? `"[${typeof payload}]"`;
13
19
  return json.padStart(json.length + 1);
14
20
  };
15
21
  const levelMap = {
@@ -20,8 +26,8 @@ const levelMap = {
20
26
  };
21
27
  const parseLevel = (level) => levelMap[level.toUpperCase()];
22
28
  const resolveInitialLevel = () => {
23
- const envLevel = process.env.LOG_LEVEL;
24
- if (envLevel === undefined || envLevel === '') {
29
+ const envLevel = (0, env_js_1.readEnv)('LOG_LEVEL');
30
+ if (envLevel === undefined) {
25
31
  return LogLevel.INFO;
26
32
  }
27
33
  return parseLevel(envLevel) ?? LogLevel.INFO;
@@ -31,8 +37,8 @@ const log = (level, message, payload) => {
31
37
  if (level < currentLevel) {
32
38
  return;
33
39
  }
34
- const ts = new Date().toISOString();
35
- const prefix = `[${ts}] [${LogLevel[level].toUpperCase()}]`;
40
+ const timestamp = new Date();
41
+ const prefix = `[${timestamp.toISOString()}] [${LogLevel[level].toUpperCase()}]`;
36
42
  const payloadStr = payload === undefined ? '' : serializePayload(payload);
37
43
  const output = `${prefix} ${message}${payloadStr}`;
38
44
  if (level === LogLevel.ERROR) {
@@ -47,12 +53,29 @@ const log = (level, message, payload) => {
47
53
  else {
48
54
  console.log(output);
49
55
  }
56
+ for (const sink of sinks) {
57
+ try {
58
+ sink({ level, message, payload, timestamp });
59
+ }
60
+ catch (error) {
61
+ console.error('[logger] sink failed', error);
62
+ }
63
+ }
50
64
  };
51
65
  exports.logger = {
52
66
  debug: (message, payload) => log(LogLevel.DEBUG, message, payload),
53
67
  info: (message, payload) => log(LogLevel.INFO, message, payload),
54
68
  warn: (message, payload) => log(LogLevel.WARN, message, payload),
55
69
  error: (message, payload) => log(LogLevel.ERROR, message, payload),
70
+ addSink: (sink) => {
71
+ sinks.push(sink);
72
+ return () => {
73
+ const index = sinks.indexOf(sink);
74
+ if (index !== -1) {
75
+ sinks.splice(index, 1);
76
+ }
77
+ };
78
+ },
56
79
  setLevel: (level) => {
57
80
  if (typeof level === 'string') {
58
81
  const resolved = parseLevel(level);
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAKX;AALD,WAAY,QAAQ;IACnB,yCAAS,CAAA;IACT,uCAAI,CAAA;IACJ,uCAAI,CAAA;IACJ,yCAAK,CAAA;AACN,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAID,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAAU,EAAE;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAC1B,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CACzG,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAyC;IACtD,KAAK,EAAE,QAAQ,CAAC,KAAK;IACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;CACrB,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAwB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAE1F,MAAM,mBAAmB,GAAG,GAAa,EAAE;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACvC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;AAC9C,CAAC,CAAC;AAEF,IAAI,YAAY,GAAa,mBAAmB,EAAE,CAAC;AAEnD,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,OAAiB,EAAE,EAAE;IACnE,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC;QAC1B,OAAO;IACR,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;IAEnD,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;AACF,CAAC,CAAC;AAEW,QAAA,MAAM,GAAG;IACrB,KAAK,EAAE,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;IACpF,IAAI,EAAE,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;IAClF,IAAI,EAAE,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;IAClF,KAAK,EAAE,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;IACpF,QAAQ,EAAE,CAAC,KAAwB,EAAE,EAAE;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,0BAA0B,CAAC,CAAC;gBAC9E,OAAO;YACR,CAAC;YACD,YAAY,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,CAAC;YACP,YAAY,GAAG,KAAK,CAAC;QACtB,CAAC;IACF,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const clamp: (value: number, min: number, max: number) => number;
2
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/math.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAK/D,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clamp = void 0;
4
+ const clamp = (value, min, max) => {
5
+ if (min > max) {
6
+ throw new RangeError(`Invalid clamp range: min ${min} is greater than max ${max}`);
7
+ }
8
+ return Math.min(max, Math.max(min, value));
9
+ };
10
+ exports.clamp = clamp;
11
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/math.ts"],"names":[],"mappings":";;;AAAO,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE;IACxE,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,4BAA4B,GAAG,wBAAwB,GAAG,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC;AALW,QAAA,KAAK,SAKhB"}
@@ -1,3 +1,4 @@
1
1
  export declare const notifySlack: (url: string, text: string) => Promise<void>;
2
+ export declare const pingHealthchecks: (url: string, timeoutMs?: number) => Promise<void>;
2
3
  export declare const notifyMattermost: (baseUrl: string, token: string, channelId: string, message: string) => Promise<void>;
3
4
  //# sourceMappingURL=notify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/notify.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAyBzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC5B,SAAS,MAAM,EACf,OAAO,MAAM,EACb,WAAW,MAAM,EACjB,SAAS,MAAM,KACb,OAAO,CAAC,IAAI,CAcd,CAAC"}
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/notify.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAyBzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,EAAE,kBAAgB,KAAG,OAAO,CAAC,IAAI,CAclF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC5B,SAAS,MAAM,EACf,OAAO,MAAM,EACb,WAAW,MAAM,EACjB,SAAS,MAAM,KACb,OAAO,CAAC,IAAI,CAcd,CAAC"}
package/lib/cjs/notify.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.notifyMattermost = exports.notifySlack = void 0;
3
+ exports.notifyMattermost = exports.pingHealthchecks = exports.notifySlack = void 0;
4
4
  const logger_js_1 = require("./logger.js");
5
5
  const sleep_js_1 = require("./sleep.js");
6
6
  const MAX_RETRIES = 2;
@@ -31,6 +31,23 @@ const notifySlack = async (url, text) => {
31
31
  }
32
32
  };
33
33
  exports.notifySlack = notifySlack;
34
+ const pingHealthchecks = async (url, timeoutMs = 4096) => {
35
+ try {
36
+ const resp = await fetch(url, {
37
+ method: 'GET',
38
+ signal: AbortSignal.timeout(timeoutMs),
39
+ });
40
+ if (!resp.ok) {
41
+ logger_js_1.logger.warn('[pingHealthchecks] ping failed', { status: resp.status });
42
+ }
43
+ }
44
+ catch (error) {
45
+ logger_js_1.logger.warn('[pingHealthchecks] ping threw', {
46
+ message: error instanceof Error ? error.message : String(error),
47
+ });
48
+ }
49
+ };
50
+ exports.pingHealthchecks = pingHealthchecks;
34
51
  const notifyMattermost = async (baseUrl, token, channelId, message) => {
35
52
  logger_js_1.logger.debug('[notifyMattermost] posting to channel', { channelId, messageLength: message.length });
36
53
  const resp = await fetch(`${baseUrl}/api/v4/posts`, {
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/notify.ts"],"names":[],"mappings":";;;AAAA,2CAAqC;AACrC,yCAAmC;AAEnC,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE9B,MAAM,WAAW,GAAG,KAAK,EAAE,GAAW,EAAE,IAAY,EAAiB,EAAE;IAC7E,kBAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,kBAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO;QACR,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,OAAO,GACZ,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,EAAE;YACnD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,IAAI;YAC9C,CAAC,CAAC,uBAAuB,CAAC;QAC5B,kBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAA,gBAAK,EAAC,OAAO,CAAC,CAAC;IACtB,CAAC;AACF,CAAC,CAAC;AAzBW,QAAA,WAAW,eAyBtB;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACpC,OAAe,EACf,KAAa,EACb,SAAiB,EACjB,OAAe,EACC,EAAE;IAClB,kBAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACR,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,kBAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;AACF,CAAC,CAAC;AAnBW,QAAA,gBAAgB,oBAmB3B"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/notify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface RetryOptions {
2
+ maxAttempts?: number;
3
+ baseDelayMs?: number;
4
+ jitterMs?: number;
5
+ isRetryable?: (error: unknown) => boolean;
6
+ delayMs?: (error: unknown, attempt: number) => number | undefined;
7
+ onRetry?: (error: unknown, attempt: number, delayMs: number) => void;
8
+ }
9
+ export declare const retry: <T>(fn: () => Promise<T>, options?: RetryOptions) => Promise<T>;
10
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAClE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrE;AAED,eAAO,MAAM,KAAK,GAAU,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,YAAY,KAAG,OAAO,CAAC,CAAC,CAuBtF,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retry = void 0;
4
+ const sleep_js_1 = require("./sleep.js");
5
+ const retry = async (fn, options) => {
6
+ const { maxAttempts = 4, baseDelayMs = 1024, jitterMs = 512, isRetryable = () => true, delayMs, onRetry, } = options ?? {};
7
+ for (let attempt = 1;; attempt++) {
8
+ try {
9
+ return await fn();
10
+ }
11
+ catch (error) {
12
+ if (attempt >= maxAttempts || !isRetryable(error)) {
13
+ throw error;
14
+ }
15
+ const resolvedDelayMs = delayMs?.(error, attempt) ?? baseDelayMs * 2 ** (attempt - 1);
16
+ onRetry?.(error, attempt, resolvedDelayMs);
17
+ await (0, sleep_js_1.sleep)(resolvedDelayMs, jitterMs);
18
+ }
19
+ }
20
+ };
21
+ exports.retry = retry;
22
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AAW5B,MAAM,KAAK,GAAG,KAAK,EAAK,EAAoB,EAAE,OAAsB,EAAc,EAAE;IAC1F,MAAM,EACL,WAAW,GAAG,CAAC,EACf,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,GAAG,EACd,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,EACxB,OAAO,EACP,OAAO,GACP,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC;YACJ,OAAO,MAAM,EAAE,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAC;YACb,CAAC;YAED,MAAM,eAAe,GAAG,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACtF,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAC3C,MAAM,IAAA,gBAAK,EAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAvBW,QAAA,KAAK,SAuBhB"}
@@ -0,0 +1,3 @@
1
+ export type SerialLimiter = <T>(task: () => Promise<T>, key?: string) => Promise<T>;
2
+ export declare const createSerialLimiter: (minIntervalMs: number) => SerialLimiter;
3
+ //# sourceMappingURL=serialLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialLimiter.d.ts","sourceRoot":"","sources":["../../src/serialLimiter.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpF,eAAO,MAAM,mBAAmB,GAAI,eAAe,MAAM,KAAG,aA2B3D,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSerialLimiter = void 0;
4
+ const sleep_js_1 = require("./sleep.js");
5
+ const createSerialLimiter = (minIntervalMs) => {
6
+ const tails = new Map();
7
+ const startedAt = new Map();
8
+ return async (task, key = '') => {
9
+ const previous = tails.get(key);
10
+ const run = (async () => {
11
+ if (previous !== undefined) {
12
+ await previous;
13
+ }
14
+ const previousStartedAt = startedAt.get(key);
15
+ if (previousStartedAt !== undefined) {
16
+ const remainingMs = minIntervalMs - (Date.now() - previousStartedAt);
17
+ if (remainingMs > 0) {
18
+ await (0, sleep_js_1.sleep)(remainingMs);
19
+ }
20
+ }
21
+ startedAt.set(key, Date.now());
22
+ return task();
23
+ })();
24
+ tails.set(key, Promise.allSettled([run]));
25
+ return run;
26
+ };
27
+ };
28
+ exports.createSerialLimiter = createSerialLimiter;
29
+ //# sourceMappingURL=serialLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialLimiter.js","sourceRoot":"","sources":["../../src/serialLimiter.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AAI5B,MAAM,mBAAmB,GAAG,CAAC,aAAqB,EAAiB,EAAE;IAC3E,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,OAAO,KAAK,EAAK,IAAsB,EAAE,GAAG,GAAG,EAAE,EAAc,EAAE;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAgB,EAAE;YACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,QAAQ,CAAC;YAChB,CAAC;YAED,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,CAAC;gBACrE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,IAAA,gBAAK,EAAC,WAAW,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;YAED,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/B,OAAO,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;QAEL,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC;AACH,CAAC,CAAC;AA3BW,QAAA,mBAAmB,uBA2B9B"}
@@ -0,0 +1,12 @@
1
+ export interface SlackLogBatcherOptions {
2
+ webhookUrl: string;
3
+ flushIntervalMs?: number;
4
+ maxChunkLength?: number;
5
+ }
6
+ export interface SlackLogBatcher {
7
+ enqueue: (line: string) => void;
8
+ flush: () => Promise<void>;
9
+ }
10
+ export declare const chunkLines: (lines: string[], maxLength: number) => string[];
11
+ export declare const createSlackLogBatcher: (options: SlackLogBatcherOptions) => SlackLogBatcher;
12
+ //# sourceMappingURL=slackLogBatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slackLogBatcher.d.ts","sourceRoot":"","sources":["../../src/slackLogBatcher.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,EAAE,WAAW,MAAM,KAAG,MAAM,EAoBrE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,sBAAsB,KAAG,eAiCvE,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSlackLogBatcher = exports.chunkLines = void 0;
4
+ const logger_js_1 = require("./logger.js");
5
+ const notify_js_1 = require("./notify.js");
6
+ const chunkLines = (lines, maxLength) => {
7
+ const chunks = [];
8
+ let current = null;
9
+ for (const line of lines) {
10
+ if (current === null) {
11
+ current = line;
12
+ }
13
+ else if (current.length + 1 + line.length > maxLength) {
14
+ chunks.push(current);
15
+ current = line;
16
+ }
17
+ else {
18
+ current = `${current}\n${line}`;
19
+ }
20
+ }
21
+ if (current !== null) {
22
+ chunks.push(current);
23
+ }
24
+ return chunks;
25
+ };
26
+ exports.chunkLines = chunkLines;
27
+ const createSlackLogBatcher = (options) => {
28
+ const { webhookUrl, flushIntervalMs = 4096, maxChunkLength = 16384 } = options;
29
+ let queue = [];
30
+ let timer = null;
31
+ const flush = async () => {
32
+ if (timer !== null) {
33
+ globalThis.clearTimeout(timer);
34
+ timer = null;
35
+ }
36
+ const lines = queue;
37
+ queue = [];
38
+ for (const chunk of (0, exports.chunkLines)(lines, maxChunkLength)) {
39
+ try {
40
+ await (0, notify_js_1.notifySlack)(webhookUrl, chunk);
41
+ }
42
+ catch (error) {
43
+ logger_js_1.logger.error('[slackLogBatcher] failed to send a chunk', error instanceof Error ? error : { error: String(error) });
44
+ }
45
+ }
46
+ };
47
+ const enqueue = (line) => {
48
+ queue.push(line);
49
+ timer ??= globalThis.setTimeout(() => void flush(), flushIntervalMs);
50
+ };
51
+ return { enqueue, flush };
52
+ };
53
+ exports.createSlackLogBatcher = createSlackLogBatcher;
54
+ //# sourceMappingURL=slackLogBatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slackLogBatcher.js","sourceRoot":"","sources":["../../src/slackLogBatcher.ts"],"names":[],"mappings":";;;AAAA,2CAAqC;AACrC,2CAA0C;AAanC,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,SAAiB,EAAY,EAAE;IAC1E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACP,OAAO,GAAG,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC;QACjC,CAAC;IACF,CAAC;IAED,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AApBW,QAAA,UAAU,cAoBrB;AAEK,MAAM,qBAAqB,GAAG,CAAC,OAA+B,EAAmB,EAAE;IACzF,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE/E,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,KAAK,GAAoD,IAAI,CAAC;IAElE,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACvC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,KAAK,GAAG,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC;QACpB,KAAK,GAAG,EAAE,CAAC;QAEX,KAAK,MAAM,KAAK,IAAI,IAAA,kBAAU,EAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC;gBACJ,MAAM,IAAA,uBAAW,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,kBAAM,CAAC,KAAK,CACX,0CAA0C,EAC1C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CACzD,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,KAAK,KAAK,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC;AAjCW,QAAA,qBAAqB,yBAiChC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: any;
2
+ export default _default;
3
+ //# sourceMappingURL=vitestNext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitestNext.d.ts","sourceRoot":"","sources":["../../src/vitestNext.ts"],"names":[],"mappings":";AAKA,wBAUG"}
@@ -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
+ const node_path_1 = __importDefault(require("node:path"));
7
+ const config_1 = require("vitest/config");
8
+ const vitest_js_1 = __importDefault(require("./vitest.js"));
9
+ // vitest runs from the project root, so cwd-relative paths point at the consuming project.
10
+ exports.default = (0, config_1.mergeConfig)(vitest_js_1.default, {
11
+ resolve: {
12
+ alias: {
13
+ '@': node_path_1.default.resolve(process.cwd(), 'src'),
14
+ },
15
+ },
16
+ test: {
17
+ include: ['src/**/*.{test,spec}.?(c|m)[jt]s?(x)'],
18
+ exclude: ['**/node_modules/**', '**/.next/**'],
19
+ },
20
+ });
21
+ //# sourceMappingURL=vitestNext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitestNext.js","sourceRoot":"","sources":["../../src/vitestNext.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,0CAA4C;AAC5C,4DAA+B;AAE/B,2FAA2F;AAC3F,kBAAe,IAAA,oBAAW,EAAC,mBAAI,EAAE;IAChC,OAAO,EAAE;QACR,KAAK,EAAE;YACN,GAAG,EAAE,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC;SACvC;KACD;IACD,IAAI,EAAE;QACL,OAAO,EAAE,CAAC,sCAAsC,CAAC;QACjD,OAAO,EAAE,CAAC,oBAAoB,EAAE,aAAa,CAAC;KAC9C;CACD,CAAC,CAAC"}
package/lib/date.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare const toLocalISOString: (date: Date) => string;
2
+ export declare const formatDate: (date: Date, timeZone?: string) => string;
2
3
  export declare const formatDuration: (ms: number) => string;
3
4
  //# sourceMappingURL=date.d.ts.map
package/lib/date.d.ts.map CHANGED
@@ -1 +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,MAmB3C,CAAC"}
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,UAAU,GAAI,MAAM,IAAI,EAAE,WAAW,MAAM,KAAG,MACoD,CAAC;AAEhH,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAmB3C,CAAC"}
package/lib/date.js CHANGED
@@ -12,6 +12,7 @@ export const toLocalISOString = (date) => {
12
12
  const offsetMinutes = `${Math.abs(offset) % 60}`.padStart(2, '0');
13
13
  return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}${sign}${offsetHours}:${offsetMinutes}`;
14
14
  };
15
+ export const formatDate = (date, timeZone) => new Intl.DateTimeFormat('en-CA', { timeZone, year: 'numeric', month: '2-digit', day: '2-digit' }).format(date);
15
16
  export const formatDuration = (ms) => {
16
17
  if (ms < 1000) {
17
18
  return `${ms}ms`;
package/lib/date.js.map CHANGED
@@ -1 +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,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACf,OAAO,GAAG,EAAE,IAAI,CAAC;IAClB,CAAC;IACD,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"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"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"}
package/lib/download.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const download: (url: string, filePath: string, init?: RequestInit, timeoutMs?: number) => Promise<void>;
1
+ export declare const download: (url: string, filePath: string, init?: RequestInit, timeoutMs?: number) => Promise<number>;
2
2
  //# sourceMappingURL=download.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,QAAQ,GACpB,KAAK,MAAM,EACX,UAAU,MAAM,EAChB,OAAO,WAAW,EAClB,kBAAyB,KACvB,OAAO,CAAC,MAAM,CAgBhB,CAAC"}
package/lib/download.js CHANGED
@@ -1,5 +1,24 @@
1
1
  import fs from 'node:fs';
2
+ import { Readable } from 'node:stream';
3
+ import { pipeline } from 'node:stream/promises';
2
4
  import { HttpError } from './http.js';
5
+ // fetch hands back the global ReadableStream, which Readable.fromWeb does not accept,
6
+ // so the body is drained through its reader instead.
7
+ const readChunks = async function* (body) {
8
+ const reader = body.getReader();
9
+ try {
10
+ for (;;) {
11
+ const result = await reader.read();
12
+ if (result.done) {
13
+ return;
14
+ }
15
+ yield result.value;
16
+ }
17
+ }
18
+ finally {
19
+ reader.releaseLock();
20
+ }
21
+ };
3
22
  export const download = async (url, filePath, init, timeoutMs = 5 * 60 * 1000) => {
4
23
  const resp = await fetch(url, {
5
24
  signal: AbortSignal.timeout(timeoutMs),
@@ -8,7 +27,11 @@ export const download = async (url, filePath, init, timeoutMs = 5 * 60 * 1000) =
8
27
  if (!resp.ok) {
9
28
  throw new HttpError(resp.status, resp.statusText);
10
29
  }
11
- const buffer = await resp.arrayBuffer();
12
- await fs.promises.writeFile(filePath, Buffer.from(buffer));
30
+ if (resp.body === null) {
31
+ throw new Error(`Response body is empty: ${url}`);
32
+ }
33
+ await pipeline(Readable.from(readChunks(resp.body)), fs.createWriteStream(filePath));
34
+ const { size } = await fs.promises.stat(filePath);
35
+ return size;
13
36
  };
14
37
  //# sourceMappingURL=download.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,sFAAsF;AACtF,qDAAqD;AACrD,MAAM,UAAU,GAAG,KAAK,SAAS,CAAC,EAAE,IAAmC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC;QACJ,SAAS,CAAC;YACT,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO;YACR,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,CAAC;QACpB,CAAC;IACF,CAAC;YAAS,CAAC;QACV,MAAM,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC5B,GAAW,EACX,QAAgB,EAChB,IAAkB,EAClB,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EACP,EAAE;IACpB,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,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC"}
package/lib/env.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const readEnv: (name: string) => string | undefined;
2
+ export declare const requireEnv: (name: string) => string;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAY/C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAMzC,CAAC"}
package/lib/env.js ADDED
@@ -0,0 +1,20 @@
1
+ export const readEnv = (name) => {
2
+ // The root entry re-exports modules that read env at load time, so a browser
3
+ // bundle without `process` must get undefined rather than a ReferenceError.
4
+ if (typeof process === 'undefined') {
5
+ return undefined;
6
+ }
7
+ const value = process.env[name];
8
+ if (value === undefined || value === '') {
9
+ return undefined;
10
+ }
11
+ return value;
12
+ };
13
+ export const requireEnv = (name) => {
14
+ const value = readEnv(name);
15
+ if (value === undefined) {
16
+ throw new Error(`Missing required env var: ${name}`);
17
+ }
18
+ return value;
19
+ };
20
+ //# sourceMappingURL=env.js.map
package/lib/env.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC3D,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"eslint.d.ts","sourceRoot":"","sources":["../src/eslint.ts"],"names":[],"mappings":";AAOA,wBA0IE"}
1
+ {"version":3,"file":"eslint.d.ts","sourceRoot":"","sources":["../src/eslint.ts"],"names":[],"mappings":";AAOA,wBAuJE"}