@ix-xs/node-comfort 2.0.0 → 2.1.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 (77) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +32 -30
  3. package/index.js +3 -3
  4. package/package.json +8 -7
  5. package/src/Arr.js +222 -58
  6. package/src/Async.js +322 -90
  7. package/src/Cache.js +148 -44
  8. package/src/Checker.js +257 -26
  9. package/src/Cli.js +404 -145
  10. package/src/Color.js +224 -83
  11. package/src/Crypto.js +481 -106
  12. package/src/Emitter.js +104 -37
  13. package/src/Env.js +176 -42
  14. package/src/FS.js +203 -60
  15. package/src/Func.js +226 -76
  16. package/src/Http.js +311 -149
  17. package/src/Id.js +281 -96
  18. package/src/Logger.js +302 -78
  19. package/src/Num.js +182 -60
  20. package/src/Obj.js +340 -125
  21. package/src/SQLite.js +426 -105
  22. package/src/Schema.js +602 -87
  23. package/src/Str.js +316 -86
  24. package/src/Sys.js +197 -54
  25. package/src/Time.js +572 -317
  26. package/src/Utils.js +62 -41
  27. package/src/errors.js +54 -11
  28. package/src/internal/shared.js +415 -0
  29. package/types/index.d.ts +59 -17
  30. package/types/src/Arr.d.ts +78 -0
  31. package/types/src/Arr.d.ts.map +1 -1
  32. package/types/src/Async.d.ts +52 -1
  33. package/types/src/Async.d.ts.map +1 -1
  34. package/types/src/Cache.d.ts +33 -7
  35. package/types/src/Cache.d.ts.map +1 -1
  36. package/types/src/Checker.d.ts +155 -2
  37. package/types/src/Checker.d.ts.map +1 -1
  38. package/types/src/Cli.d.ts +97 -15
  39. package/types/src/Cli.d.ts.map +1 -1
  40. package/types/src/Color.d.ts +7 -1
  41. package/types/src/Color.d.ts.map +1 -1
  42. package/types/src/Crypto.d.ts +99 -13
  43. package/types/src/Crypto.d.ts.map +1 -1
  44. package/types/src/Emitter.d.ts +36 -17
  45. package/types/src/Emitter.d.ts.map +1 -1
  46. package/types/src/Env.d.ts +31 -1
  47. package/types/src/Env.d.ts.map +1 -1
  48. package/types/src/FS.d.ts +36 -5
  49. package/types/src/FS.d.ts.map +1 -1
  50. package/types/src/Func.d.ts +147 -19
  51. package/types/src/Func.d.ts.map +1 -1
  52. package/types/src/Http.d.ts +113 -43
  53. package/types/src/Http.d.ts.map +1 -1
  54. package/types/src/Id.d.ts +60 -8
  55. package/types/src/Id.d.ts.map +1 -1
  56. package/types/src/Logger.d.ts +53 -2
  57. package/types/src/Logger.d.ts.map +1 -1
  58. package/types/src/Num.d.ts +48 -7
  59. package/types/src/Num.d.ts.map +1 -1
  60. package/types/src/Obj.d.ts +67 -4
  61. package/types/src/Obj.d.ts.map +1 -1
  62. package/types/src/SQLite.d.ts +123 -14
  63. package/types/src/SQLite.d.ts.map +1 -1
  64. package/types/src/Schema.d.ts +256 -7
  65. package/types/src/Schema.d.ts.map +1 -1
  66. package/types/src/Str.d.ts +49 -1
  67. package/types/src/Str.d.ts.map +1 -1
  68. package/types/src/Sys.d.ts +51 -6
  69. package/types/src/Sys.d.ts.map +1 -1
  70. package/types/src/Time.d.ts +130 -34
  71. package/types/src/Time.d.ts.map +1 -1
  72. package/types/src/Utils.d.ts +15 -11
  73. package/types/src/Utils.d.ts.map +1 -1
  74. package/types/src/errors.d.ts +27 -3
  75. package/types/src/errors.d.ts.map +1 -1
  76. package/types/src/internal/shared.d.ts +123 -0
  77. package/types/src/internal/shared.d.ts.map +1 -0
@@ -1,5 +1,5 @@
1
1
  declare namespace _exports {
2
- export { HttpBody, HttpMethod, QueryParams, HttpRetryOptions, HttpRequestConfig, HttpHooks, HttpOptions, HttpResponse, HttpClient };
2
+ export { HttpBody, HttpMethod, QueryParams, HttpHeaders, HttpRetryOptions, HttpRequestConfig, HttpHooks, HttpOptions, HttpResponse, ResponseSchema, HttpOptionsOf, HttpClient };
3
3
  }
4
4
  declare namespace _exports {
5
5
  export { request };
@@ -23,21 +23,25 @@ type HttpBody = string | Buffer | Uint8Array | ArrayBuffer | URLSearchParams | F
23
23
  */
24
24
  type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | (string & {});
25
25
  /**
26
- * Query string values. `null` and `undefined` are skipped, arrays repeat the key.
26
+ * Query string values. `null` and `undefined` are skipped, arrays repeat the key, dates are sent in ISO format.
27
27
  */
28
- type QueryParams = Record<string, string | number | boolean | null | undefined | Array<string | number | boolean>>;
28
+ type QueryParams = Record<string, string | number | boolean | Date | null | undefined | Array<string | number | boolean | Date>>;
29
+ /**
30
+ * Request headers: an object, a `Headers` instance or a list of pairs.
31
+ */
32
+ type HttpHeaders = Record<string, string | undefined> | Headers | Array<[string, string]>;
29
33
  /**
30
34
  * Retry settings.
31
35
  */
32
36
  type HttpRetryOptions = {
33
37
  /**
34
- * Total attempts, the first included. Defaults to `3` for methods that are safe to repeat, `1` for the others.
38
+ * Total attempts, the first included. Defaults to `3` for methods that are safe to repeat, `1` for the others. A number you give applies to every method, POST included.
35
39
  */
36
40
  attempts?: number | undefined;
37
41
  /**
38
- * Wait before the first retry, in ms. Defaults to `300`.
42
+ * Wait before the first retry, in ms or like `"1s"`. Defaults to `300`.
39
43
  */
40
- delay?: number | undefined;
44
+ delay?: string | number | undefined;
41
45
  /**
42
46
  * Multiplies the wait after each attempt. Defaults to `2`.
43
47
  */
@@ -45,13 +49,17 @@ type HttpRetryOptions = {
45
49
  /**
46
50
  * Longest wait, `Retry-After` included. Defaults to 30 seconds.
47
51
  */
48
- maxDelay?: number | undefined;
52
+ maxDelay?: string | number | undefined;
53
+ /**
54
+ * Shorten each wait by a random amount, up to half of it, so many clients don't all come back at the same instant.
55
+ */
56
+ jitter?: boolean | undefined;
49
57
  /**
50
58
  * Statuses worth retrying. Defaults to 408, 413, 429, 500, 502, 503 and 504.
51
59
  */
52
60
  statuses?: number[] | undefined;
53
61
  /**
54
- * Methods allowed to retry. POST and PATCH aren't, by default, so nothing gets created twice.
62
+ * Methods retried when you give no number of attempts. POST and PATCH aren't, by default, so nothing gets created twice.
55
63
  */
56
64
  methods?: HttpMethod[] | undefined;
57
65
  };
@@ -106,9 +114,13 @@ type HttpOptions = {
106
114
  /**
107
115
  * Set a header to `undefined` to remove a default one.
108
116
  */
109
- headers?: Record<string, string | undefined> | undefined;
117
+ headers?: HttpHeaders | undefined;
110
118
  /**
111
- * Added to the URL's own query string.
119
+ * Values for the `:name` parts of the URL: `"users/:id"` with `{ id: 42 }` gives `users/42`. They're encoded for you.
120
+ */
121
+ params?: Record<string, string | number | boolean> | undefined;
122
+ /**
123
+ * Added to the URL's own query string, and to the client's default query.
112
124
  */
113
125
  query?: URLSearchParams | QueryParams | undefined;
114
126
  /**
@@ -133,17 +145,23 @@ type HttpOptions = {
133
145
  password: string;
134
146
  } | undefined;
135
147
  /**
136
- * Time limit per attempt, like `"10s"`. `false` turns it off. Defaults to 30 seconds.
148
+ * Time limit per attempt, like `"10s"`. `false` turns it off. Defaults to 30 seconds. With `responseType: "stream"`, it only covers the wait for the response headers.
137
149
  */
138
150
  timeout?: string | number | false | undefined;
139
151
  /**
140
- * Number of attempts, `false`, or retry settings.
152
+ * Number of attempts, `false`, or retry settings. A request whose body is a stream is never retried.
141
153
  */
142
154
  retry?: number | false | HttpRetryOptions | undefined;
143
155
  /**
144
156
  * How to read the body. `"auto"` reads JSON or text based on the content type, a Buffer otherwise.
145
157
  */
146
158
  responseType?: "auto" | "json" | "buffer" | "text" | "stream" | undefined;
159
+ /**
160
+ * Checks the body of a 2xx response, and replaces it with the result: pass a `nc.schema` and bad data from an API stops at the door, with a `ValidationError`. `data` takes the type the schema describes.
161
+ */
162
+ schema?: {
163
+ parse(data: unknown): unknown;
164
+ } | undefined;
147
165
  /**
148
166
  * Throw an `HttpError` when the status isn't 2xx. Defaults to `true`.
149
167
  */
@@ -180,6 +198,10 @@ type HttpResponse<T = any> = {
180
198
  * Lower-cased names.
181
199
  */
182
200
  headers: Record<string, string>;
201
+ /**
202
+ * The `Set-Cookie` headers, one per cookie. `headers` can only hold one of them.
203
+ */
204
+ cookies: string[];
183
205
  /**
184
206
  * The body, already read (see `responseType`).
185
207
  */
@@ -197,6 +219,19 @@ type HttpResponse<T = any> = {
197
219
  */
198
220
  attempts: number;
199
221
  };
222
+ /**
223
+ * What the `schema` option takes: a `nc.schema`, or anything else with a
224
+ * `parse()` method that returns the checked value or throws.
225
+ */
226
+ type ResponseSchema = {
227
+ parse(data: unknown): unknown;
228
+ };
229
+ /**
230
+ * Request options, where `schema` gives `response.data` its type.
231
+ */
232
+ type HttpOptionsOf<S extends ResponseSchema> = Omit<HttpOptions, "schema"> & {
233
+ schema?: S;
234
+ };
200
235
  /**
201
236
  * A client with its own defaults, from `create()`.
202
237
  */
@@ -204,11 +239,15 @@ type HttpClient = {
204
239
  /**
205
240
  * Sends a request.
206
241
  */
207
- request: <T = any>(url: string | URL, options?: HttpOptions) => Promise<HttpResponse<T>>;
242
+ request: <T = any, S extends ResponseSchema = {
243
+ parse(data: unknown): T;
244
+ }>(url: string | URL, options?: HttpOptionsOf<S>) => Promise<HttpResponse<ReturnType<S["parse"]>>>;
208
245
  /**
209
246
  * Sends a GET request.
210
247
  */
211
- get: <T = any>(url: string | URL, options?: HttpOptions) => Promise<HttpResponse<T>>;
248
+ get: <T = any, S extends ResponseSchema = {
249
+ parse(data: unknown): T;
250
+ }>(url: string | URL, options?: HttpOptionsOf<S>) => Promise<HttpResponse<ReturnType<S["parse"]>>>;
212
251
  /**
213
252
  * Sends a HEAD request.
214
253
  */
@@ -216,19 +255,27 @@ type HttpClient = {
216
255
  /**
217
256
  * Sends a DELETE request.
218
257
  */
219
- delete: <T = any>(url: string | URL, options?: HttpOptions) => Promise<HttpResponse<T>>;
258
+ delete: <T = any, S extends ResponseSchema = {
259
+ parse(data: unknown): T;
260
+ }>(url: string | URL, options?: HttpOptionsOf<S>) => Promise<HttpResponse<ReturnType<S["parse"]>>>;
220
261
  /**
221
262
  * Sends a POST request. Objects and arrays go as JSON.
222
263
  */
223
- post: <T = any>(url: string | URL, data?: unknown, options?: HttpOptions) => Promise<HttpResponse<T>>;
264
+ post: <T = any, S extends ResponseSchema = {
265
+ parse(data: unknown): T;
266
+ }>(url: string | URL, data?: unknown, options?: HttpOptionsOf<S>) => Promise<HttpResponse<ReturnType<S["parse"]>>>;
224
267
  /**
225
268
  * Sends a PUT request. Objects and arrays go as JSON.
226
269
  */
227
- put: <T = any>(url: string | URL, data?: unknown, options?: HttpOptions) => Promise<HttpResponse<T>>;
270
+ put: <T = any, S extends ResponseSchema = {
271
+ parse(data: unknown): T;
272
+ }>(url: string | URL, data?: unknown, options?: HttpOptionsOf<S>) => Promise<HttpResponse<ReturnType<S["parse"]>>>;
228
273
  /**
229
274
  * Sends a PATCH request. Objects and arrays go as JSON.
230
275
  */
231
- patch: <T = any>(url: string | URL, data?: unknown, options?: HttpOptions) => Promise<HttpResponse<T>>;
276
+ patch: <T = any, S extends ResponseSchema = {
277
+ parse(data: unknown): T;
278
+ }>(url: string | URL, data?: unknown, options?: HttpOptionsOf<S>) => Promise<HttpResponse<ReturnType<S["parse"]>>>;
232
279
  /**
233
280
  * Saves a response to a file.
234
281
  */
@@ -256,25 +303,31 @@ type HttpClient = {
256
303
  * });
257
304
  * res.data; // parsed JSON
258
305
  *
259
- * @template [T=any]
306
+ * @template [T=any] The type of `data`, when no `schema` says it.
307
+ * @template {ResponseSchema} [S={ parse(data: unknown): T }]
260
308
  * @param {string | URL} url An absolute URL, or a path when `baseURL` is set.
261
- * @param {HttpOptions} [options]
262
- * @returns {Promise<HttpResponse<T>>}
309
+ * @param {HttpOptionsOf<S>} [options]
310
+ * @returns {Promise<HttpResponse<ReturnType<S["parse"]>>>}
263
311
  * @throws {HttpError | TimeoutError | AbortError}
264
312
  */
265
- declare function request<T = any>(url: string | URL, options?: HttpOptions): Promise<HttpResponse<T>>;
313
+ declare function request<T = any, S extends ResponseSchema = {
314
+ parse(data: unknown): T;
315
+ }>(url: string | URL, options?: HttpOptionsOf<S>): Promise<HttpResponse<ReturnType<S["parse"]>>>;
266
316
  /**
267
317
  * Sends a GET request.
268
318
  *
269
319
  * @example
270
320
  * const { data } = await http.get("https://api.example.com/users", { query: { page: 2, tags: ["a", "b"] } });
271
321
  *
272
- * @template [T=any]
322
+ * @template [T=any] The type of `data`, when no `schema` says it.
323
+ * @template {ResponseSchema} [S={ parse(data: unknown): T }]
273
324
  * @param {string | URL} url
274
- * @param {HttpOptions} [options]
275
- * @returns {Promise<HttpResponse<T>>}
325
+ * @param {HttpOptionsOf<S>} [options]
326
+ * @returns {Promise<HttpResponse<ReturnType<S["parse"]>>>}
276
327
  */
277
- declare function get<T = any>(url: string | URL, options?: HttpOptions): Promise<HttpResponse<T>>;
328
+ declare function get<T = any, S extends ResponseSchema = {
329
+ parse(data: unknown): T;
330
+ }>(url: string | URL, options?: HttpOptionsOf<S>): Promise<HttpResponse<ReturnType<S["parse"]>>>;
278
331
  /**
279
332
  * Sends a HEAD request: headers only, no body.
280
333
  *
@@ -296,48 +349,65 @@ declare function head<T = undefined>(url: string | URL, options?: HttpOptions):
296
349
  * const { data: user } = await http.post("https://api.example.com/users", { name: "Ada" });
297
350
  * await http.post(uploadUrl, formData);
298
351
  *
299
- * @template [T=any]
352
+ * @template [T=any] The type of `data`, when no `schema` says it.
353
+ * @template {ResponseSchema} [S={ parse(data: unknown): T }]
300
354
  * @param {string | URL} url
301
355
  * @param {unknown} [data]
302
- * @param {HttpOptions} [options]
303
- * @returns {Promise<HttpResponse<T>>}
356
+ * @param {HttpOptionsOf<S>} [options]
357
+ * @returns {Promise<HttpResponse<ReturnType<S["parse"]>>>}
304
358
  */
305
- declare function post<T = any>(url: string | URL, data?: unknown, options?: HttpOptions): Promise<HttpResponse<T>>;
359
+ declare function post<T = any, S extends ResponseSchema = {
360
+ parse(data: unknown): T;
361
+ }>(url: string | URL, data?: unknown, options?: HttpOptionsOf<S>): Promise<HttpResponse<ReturnType<S["parse"]>>>;
306
362
  /**
307
363
  * Sends a PUT request. The body works like in `post()`.
308
364
  *
309
- * @template [T=any]
365
+ * @template [T=any] The type of `data`, when no `schema` says it.
366
+ * @template {ResponseSchema} [S={ parse(data: unknown): T }]
310
367
  * @param {string | URL} url
311
368
  * @param {unknown} [data]
312
- * @param {HttpOptions} [options]
313
- * @returns {Promise<HttpResponse<T>>}
369
+ * @param {HttpOptionsOf<S>} [options]
370
+ * @returns {Promise<HttpResponse<ReturnType<S["parse"]>>>}
314
371
  */
315
- declare function put<T = any>(url: string | URL, data?: unknown, options?: HttpOptions): Promise<HttpResponse<T>>;
372
+ declare function put<T = any, S extends ResponseSchema = {
373
+ parse(data: unknown): T;
374
+ }>(url: string | URL, data?: unknown, options?: HttpOptionsOf<S>): Promise<HttpResponse<ReturnType<S["parse"]>>>;
316
375
  /**
317
376
  * Sends a PATCH request. The body works like in `post()`.
318
377
  *
319
- * @template [T=any]
378
+ * @template [T=any] The type of `data`, when no `schema` says it.
379
+ * @template {ResponseSchema} [S={ parse(data: unknown): T }]
320
380
  * @param {string | URL} url
321
381
  * @param {unknown} [data]
322
- * @param {HttpOptions} [options]
323
- * @returns {Promise<HttpResponse<T>>}
382
+ * @param {HttpOptionsOf<S>} [options]
383
+ * @returns {Promise<HttpResponse<ReturnType<S["parse"]>>>}
324
384
  */
325
- declare function patch<T = any>(url: string | URL, data?: unknown, options?: HttpOptions): Promise<HttpResponse<T>>;
385
+ declare function patch<T = any, S extends ResponseSchema = {
386
+ parse(data: unknown): T;
387
+ }>(url: string | URL, data?: unknown, options?: HttpOptionsOf<S>): Promise<HttpResponse<ReturnType<S["parse"]>>>;
326
388
  /**
327
389
  * Sends a DELETE request.
328
390
  *
329
391
  * @example
330
392
  * await http.delete(`https://api.example.com/users/${id}`);
331
393
  *
332
- * @template [T=any]
394
+ * @template [T=any] The type of `data`, when no `schema` says it.
395
+ * @template {ResponseSchema} [S={ parse(data: unknown): T }]
333
396
  * @param {string | URL} url
334
- * @param {HttpOptions} [options]
335
- * @returns {Promise<HttpResponse<T>>}
397
+ * @param {HttpOptionsOf<S>} [options]
398
+ * @returns {Promise<HttpResponse<ReturnType<S["parse"]>>>}
336
399
  */
337
- declare function del<T = any>(url: string | URL, options?: HttpOptions): Promise<HttpResponse<T>>;
400
+ declare function del<T = any, S extends ResponseSchema = {
401
+ parse(data: unknown): T;
402
+ }>(url: string | URL, options?: HttpOptionsOf<S>): Promise<HttpResponse<ReturnType<S["parse"]>>>;
338
403
  /**
339
404
  * Downloads to a file as a stream, so memory stays flat whatever the size.
340
- * Folders are created, and a partial file is removed if it fails.
405
+ * Folders are created. The data goes to a temporary file that takes the
406
+ * final name once complete, so a failed or interrupted download never
407
+ * leaves half a file where you expect a whole one.
408
+ *
409
+ * `timeout` is how long the server gets to start answering; the transfer
410
+ * itself can take as long as it needs. Use `signal` to put a limit on it.
341
411
  *
342
412
  * @example
343
413
  * await http.download("https://example.com/video.mp4", "./downloads/video.mp4", {
@@ -1 +1 @@
1
- {"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../../src/Http.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../../src/Http.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;gBAoBa,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,GAAG,IAAI,GAAG,cAAc,GAAG,OAAO,aAAa,EAAE,QAAQ;;;;kBAKhI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;;;;mBAKhF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;;;;mBAK7G,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAkBrE,MAAM;YACN,UAAU;;;;aACV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;UACtB,QAAQ,GAAG,SAAS;;;;aACpB,MAAM;;;;;;;;;8BAMS,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;;;gCACxC,YAAY,CAAC,GAAG,CAAC,UAAU,iBAAiB,KAAK,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;;;;2BAChH,OAAO,WAAW,MAAM,SAAS,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAW9E,OAAO;;;;;;;;;;;;;gBAGG,MAAM;;kBAAiB,MAAM;kBAAY,MAAM;;;;;;;;;;;;;;;;;;oBAI3C,OAAO,GAAG,OAAO;;;;;;;;;;;;;;qCAIpB;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAAK,IAAI;;;;;;;;;kBAM9F,CAAC;YAED,MAAM;gBACN,MAAM;;;;QACN,OAAO;;;;aACP,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;aACtB,MAAM,EAAE;;;;UACR,CAAC;;;;SACD,MAAM;;;;cACN,MAAM;;;;cACN,MAAM;;;;;;sBAMP;IAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE;;;;mBAKhB,CAAC,SAAjB,cAAe,IAChB,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE;;;;;;;;aAM3C,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,cAAc,GAAG;QAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;;;SACjK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,cAAc,GAAG;QAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;;;UACjK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;;;;YAC/E,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,cAAc,GAAG;QAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;;;UACjK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,cAAc,GAAG;QAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;;;SACjL,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,cAAc,GAAG;QAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;;;WACjL,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,cAAc,GAAG;QAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;;;cACjL,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;;;;YAC1G,CAAC,QAAQ,EAAE,WAAW,KAAK,UAAU;cACrC,QAAQ,CAAC,WAAW,CAAC;;AA6WnC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,yBAPc,CAAC,QACgB,CAAC,SAAlB,cAAe;gBAAkB,OAAO,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,YACZ,aAAa,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAKzD;AAED;;;;;;;;;;;GAWG;AACH,qBANc,CAAC,QACgB,CAAC,SAAlB,cAAe;gBAAkB,OAAO,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,YACZ,aAAa,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAIzD;AAED;;;;;;;;;;;GAWG;AACH,sBALc,CAAC,mBACJ,MAAM,GAAG,GAAG,YACZ,WAAW,GACT,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAIpC;AAED;;;;;;;;;;;;;;GAcG;AACH,sBAPc,CAAC,QACgB,CAAC,SAAlB,cAAe;gBAAkB,OAAO,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,SACZ,OAAO,YACP,aAAa,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAIzD;AAED;;;;;;;;;GASG;AACH,qBAPc,CAAC,QACgB,CAAC,SAAlB,cAAe;gBAAkB,OAAO,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,SACZ,OAAO,YACP,aAAa,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAIzD;AAED;;;;;;;;;GASG;AACH,uBAPc,CAAC,QACgB,CAAC,SAAlB,cAAe;gBAAkB,OAAO,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,SACZ,OAAO,YACP,aAAa,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAIzD;AAED;;;;;;;;;;;GAWG;AACH,qBANc,CAAC,QACgB,CAAC,SAAlB,cAAe;gBAAkB,OAAO,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,YACZ,aAAa,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAIzD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+BANW,MAAM,GAAG,GAAG,eACZ,MAAM,YACN,WAAW,GACT,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkCnD;AAED;;;;;;;;;;;;;;GAcG;AACH,mCAHW,WAAW,GACT,UAAU,CAItB"}
package/types/src/Id.d.ts CHANGED
@@ -2,6 +2,11 @@
2
2
  * Encodings for `token()`.
3
3
  */
4
4
  export type TokenEncoding = "hex" | "base64" | "base64url" | "base58" | "base32";
5
+ /**
6
+ * A namespace for `uuidv5()`: one of the four standard ones, or any UUID of
7
+ * your own.
8
+ */
9
+ export type UUIDNamespace = "dns" | "url" | "oid" | "x500" | (string & {});
5
10
  /**
6
11
  * Options for `snowflake()` and `parseSnowflake()`.
7
12
  */
@@ -47,11 +52,26 @@ export type ParsedSnowflake = {
47
52
  * @returns {string}
48
53
  */
49
54
  export function uuid(): string;
55
+ /**
56
+ * A UUID v5: the same name in the same namespace always gives the same id.
57
+ * Use it to derive a stable id from something you already have, like a URL
58
+ * or an email, without storing a mapping.
59
+ *
60
+ * @example
61
+ * id.uuidv5("example.com", "dns"); // "cfbff0d1-9375-5685-968c-48ce8b15ae17", every time
62
+ * id.uuidv5("https://example.com/a", "url");
63
+ * id.uuidv5("ada@example.com", MY_APP_NAMESPACE); // any UUID works as a namespace
64
+ *
65
+ * @param {string | Buffer | Uint8Array} name
66
+ * @param {UUIDNamespace} namespace `"dns"`, `"url"`, `"oid"`, `"x500"` or a UUID.
67
+ * @returns {string}
68
+ */
69
+ export function uuidv5(name: string | Buffer | Uint8Array, namespace: UUIDNamespace): string;
50
70
  /**
51
71
  * A UUID v7: it starts with a timestamp, so ids sort by creation time.
52
72
  * That keeps database indexes compact, which makes them great primary
53
73
  * keys. Ids from the same process always increase, even within a
54
- * millisecond.
74
+ * millisecond, and even if the system clock steps back.
55
75
  *
56
76
  * @example
57
77
  * id.uuidv7(); // "0190a5c4-7c1e-7b2a-9f3e-1c2d3e4f5a6b"
@@ -65,13 +85,28 @@ export function uuidv7(): string;
65
85
  * the same millisecond still increase.
66
86
  *
67
87
  * @example
68
- * id.ulid(); // "01HQ3Z8K9V3N5W7Y2XJ4T6R8PB"
69
- * id.ulid(Date.UTC(2024, 0, 1)); // for a given time
88
+ * id.ulid(); // "01HQ3Z8K9V3N5W7Y2XJ4T6R8PB"
89
+ * id.ulid(Date.UTC(2024, 0, 1)); // for a given time
90
+ *
91
+ * @param {number | Date} [time] The moment to encode. Defaults to now.
92
+ * @returns {string}
93
+ * @throws {RangeError} If the time is not a valid timestamp.
94
+ */
95
+ export function ulid(time?: number | Date): string;
96
+ /**
97
+ * A MongoDB-style ObjectId: 24 hex characters that start with the time, in
98
+ * seconds, and increase within the process.
99
+ *
100
+ * @example
101
+ * id.objectId(); // "65f2a9c47b1e4d0c9a3f2b10"
102
+ * id.timestamp(id.objectId()); // when it was created, to the second
103
+ * id.objectId(new Date("2024-01-01")); // for a given time
70
104
  *
71
- * @param {number} [time] Timestamp to encode, in ms. Defaults to now.
105
+ * @param {number | Date} [time] The moment to encode. Defaults to now.
72
106
  * @returns {string}
107
+ * @throws {RangeError} If the time is not a valid timestamp.
73
108
  */
74
- export function ulid(time?: number): string;
109
+ export function objectId(time?: number | Date): string;
75
110
  /**
76
111
  * A short, URL-safe random id, like `nanoid`. At 21 characters, collisions
77
112
  * are as unlikely as with a UUID.
@@ -98,6 +133,20 @@ export function nano(size?: number, alphabet?: string): string;
98
133
  * @returns {(size?: number) => string}
99
134
  */
100
135
  export function customAlphabet(alphabet: string, size?: number): (size?: number) => string;
136
+ /**
137
+ * A random id with a prefix that says what it identifies, like Stripe's
138
+ * `cus_...` and `sub_...`. A glance at a log line or a support ticket tells
139
+ * you what kind of thing the id points to.
140
+ *
141
+ * @example
142
+ * id.prefixed("user"); // "user_7Hq2mXc0LrT9aZ4bWk1PdE8s"
143
+ * id.prefixed("inv", 12); // "inv_Q0f8ZrT1bK4m"
144
+ *
145
+ * @param {string} prefix
146
+ * @param {number} [size=24] How many random characters come after the prefix (letters and digits).
147
+ * @returns {string}
148
+ */
149
+ export function prefixed(prefix: string, size?: number): string;
101
150
  /**
102
151
  * A random token for API keys, session ids, reset links...
103
152
  *
@@ -133,6 +182,7 @@ export function code(length?: number, alphabet?: string): string;
133
182
  *
134
183
  * @param {SnowflakeOptions} [options]
135
184
  * @returns {string}
185
+ * @throws {RangeError} If the epoch is in the future.
136
186
  */
137
187
  export function snowflake(options?: SnowflakeOptions): string;
138
188
  /**
@@ -144,14 +194,16 @@ export function snowflake(options?: SnowflakeOptions): string;
144
194
  * @param {string | bigint} id
145
195
  * @param {SnowflakeOptions} [options] Use the epoch it was created with.
146
196
  * @returns {ParsedSnowflake}
197
+ * @throws {TypeError} If the id is not a string of digits or a bigint.
147
198
  */
148
199
  export function parseSnowflake(id: string | bigint, options?: SnowflakeOptions): ParsedSnowflake;
149
200
  /**
150
- * When a ULID or a UUID v7 was created.
201
+ * When a UUID v7, a ULID or an ObjectId was created.
151
202
  *
152
203
  * @example
153
- * id.timestamp(id.ulid()); // now
154
- * id.timestamp(id.uuid()); // undefined, v4 has no time in it
204
+ * id.timestamp(id.ulid()); // now
205
+ * id.timestamp(id.objectId()); // now, to the second
206
+ * id.timestamp(id.uuid()); // undefined, v4 has no time in it
155
207
  *
156
208
  * @param {string} value
157
209
  * @returns {Date | undefined}
@@ -1 +1 @@
1
- {"version":3,"file":"Id.d.ts","sourceRoot":"","sources":["../../src/Id.js"],"names":[],"mappings":";;;4BAqBa,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;UAcnD,IAAI;;;;eACJ,MAAM;cACN,MAAM;eACN,MAAM;;;;eACN,MAAM;;AA8EpB;;;;;;;GAOG;AACH,wBAFa,MAAM,CAIlB;AAKD;;;;;;;;;;;GAWG;AACH,0BAFa,MAAM,CAsBlB;AAMD;;;;;;;;;;GAUG;AACH,4BAHW,MAAM,GACJ,MAAM,CA0BlB;AAED;;;;;;;;;;;;GAYG;AACH,4BAJW,MAAM,aACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,yCAJW,MAAM,SACN,MAAM,GACJ,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAKrC;AAED;;;;;;;;;;;GAWG;AACH,8BAJW,MAAM,aACN,aAAa,GACX,MAAM,CAOlB;AAED;;;;;;;;;;;GAWG;AACH,8BAJW,MAAM,aACN,MAAM,GACJ,MAAM,CAIlB;AAKD;;;;;;;;;GASG;AACH,oCAHW,gBAAgB,GACd,MAAM,CAgBlB;AAED;;;;;;;;;GASG;AACH,mCAJW,MAAM,GAAG,MAAM,YACf,gBAAgB,GACd,eAAe,CAY3B;AAED;;;;;;;;;GASG;AACH,iCAHW,MAAM,GACJ,IAAI,GAAG,SAAS,CAa5B;AAED;;;;;;;;;;GAUG;AACH,6BAHW,MAAM,GACJ,MAAM,CAKlB;AAED;;;;;;;GAOG;AACH,4BAJW,MAAM,GAAG,MAAM,GAAG,UAAU,YAC5B,OAAO,UAAU,EAAE,WAAW,GAC5B,MAAM,CAIlB;AAED;;;;;;;;GAQG;AACH,4BALW,MAAM,GAAG,MAAM,GAAG,UAAU,UAC5B,MAAM,GAAG,MAAM,GAAG,UAAU,YAC5B,OAAO,UAAU,EAAE,WAAW,GAC5B,MAAM,CAIlB;AAED;;;;;;;GAOG;AACH,6BAJW,MAAM,GAAG,MAAM,GAAG,UAAU,KAC5B,MAAM,GAAG,MAAM,GAAG,UAAU,GAC1B,OAAO,CAInB"}
1
+ {"version":3,"file":"Id.d.ts","sourceRoot":"","sources":["../../src/Id.js"],"names":[],"mappings":";;;4BAqBa,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ;;;;;4BAMpD,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;UAc7C,IAAI;;;;eACJ,MAAM;cACN,MAAM;eACN,MAAM;;;;eACN,MAAM;;AA4JpB;;;;;;;GAOG;AACH,wBAFa,MAAM,CAIlB;AAED;;;;;;;;;;;;;GAaG;AACH,6BAJW,MAAM,GAAG,MAAM,GAAG,UAAU,aAC5B,aAAa,GACX,MAAM,CAYlB;AAMD;;;;;;;;;;;GAWG;AACH,0BAFa,MAAM,CAmBlB;AAoBD;;;;;;;;;;;GAWG;AACH,4BAJW,MAAM,GAAG,IAAI,GACX,MAAM,CA6BlB;AAKD;;;;;;;;;;;;GAYG;AACH,gCAJW,MAAM,GAAG,IAAI,GACX,MAAM,CAalB;AAED;;;;;;;;;;;;GAYG;AACH,4BAJW,MAAM,aACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,yCAJW,MAAM,SACN,MAAM,GACJ,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAKrC;AAED;;;;;;;;;;;;GAYG;AACH,iCAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAKlB;AAED;;;;;;;;;;;GAWG;AACH,8BAJW,MAAM,aACN,aAAa,GACX,MAAM,CASlB;AAED;;;;;;;;;;;GAWG;AACH,8BAJW,MAAM,aACN,MAAM,GACJ,MAAM,CAIlB;AAKD;;;;;;;;;;GAUG;AACH,oCAJW,gBAAgB,GACd,MAAM,CAiBlB;AAED;;;;;;;;;;GAUG;AACH,mCALW,MAAM,GAAG,MAAM,YACf,gBAAgB,GACd,eAAe,CAkB3B;AAED;;;;;;;;;;GAUG;AACH,iCAHW,MAAM,GACJ,IAAI,GAAG,SAAS,CAU5B;AAKD;;;;;;;;;;GAUG;AACH,6BAHW,MAAM,GACJ,MAAM,CAMlB;AAED;;;;;;;GAOG;AACH,4BAJW,MAAM,GAAG,MAAM,GAAG,UAAU,YAC5B,OAAO,UAAU,EAAE,WAAW,GAC5B,MAAM,CAIlB;AAED;;;;;;;;GAQG;AACH,4BALW,MAAM,GAAG,MAAM,GAAG,UAAU,UAC5B,MAAM,GAAG,MAAM,GAAG,UAAU,YAC5B,OAAO,UAAU,EAAE,WAAW,GAC5B,MAAM,CAIlB;AAED;;;;;;;GAOG;AACH,6BAJW,MAAM,GAAG,MAAM,GAAG,UAAU,KAC5B,MAAM,GAAG,MAAM,GAAG,UAAU,GAC1B,OAAO,CAInB"}
@@ -26,6 +26,26 @@ export type LogFileOptions = {
26
26
  */
27
27
  maxFiles?: number | undefined;
28
28
  };
29
+ /**
30
+ * A message as `onLog` receives it.
31
+ */
32
+ export type LogEntry = {
33
+ time: Date;
34
+ level: LogLevel;
35
+ /**
36
+ * The method that was called.
37
+ */
38
+ kind: "log" | "trace" | "debug" | "info" | "success" | "warn" | "error" | "fatal";
39
+ scope: string | undefined;
40
+ /**
41
+ * The line as written, without colors or timestamp.
42
+ */
43
+ message: string;
44
+ /**
45
+ * What was passed to the method, untouched.
46
+ */
47
+ args: unknown[];
48
+ };
29
49
  /**
30
50
  * Options for `createLogger()` and `configure()`.
31
51
  */
@@ -73,6 +93,14 @@ export type LoggerOptions = {
73
93
  * Added to every JSON record, like a service name.
74
94
  */
75
95
  fields?: Record<string, unknown> | undefined;
96
+ /**
97
+ * Keys whose values are replaced by `"[redacted]"` wherever they appear in logged objects, like `["password", "authorization"]`. Case doesn't matter.
98
+ */
99
+ redact?: string[] | undefined;
100
+ /**
101
+ * Called for every message that passes the level, to send logs somewhere else. It isn't awaited, and an error it throws (or a promise it rejects) is ignored: logging never breaks the program.
102
+ */
103
+ onLog?: ((entry: LogEntry) => void | Promise<void>) | undefined;
76
104
  };
77
105
  /**
78
106
  * A logger from `createLogger()`. Every method returns the logger, so calls chain.
@@ -159,12 +187,35 @@ export type Logger = {
159
187
  */
160
188
  configure: (options: LoggerOptions) => Logger;
161
189
  };
190
+ /**
191
+ * A log file: where it is, how big it may get, how big it is now.
192
+ */
193
+ export type _LogFile = {
194
+ target: string;
195
+ limit: number | undefined;
196
+ keep: number;
197
+ size: number;
198
+ ready: boolean;
199
+ };
200
+ /**
201
+ * What a message looks like on one output: its colors, and the parts that
202
+ * are the same on every line, styled once.
203
+ */
204
+ export type _Face = {
205
+ palette: import("./Color").ColorModule;
206
+ colors: boolean;
207
+ labels: Record<string, string>;
208
+ scope: string;
209
+ stamp: string;
210
+ stampAt: number;
211
+ stampWidth: number;
212
+ };
162
213
  /**
163
214
  * Prints a message without a badge. Strings support markup, objects are
164
215
  * pretty-printed, and several arguments are joined with spaces.
165
216
  *
166
217
  * @example
167
- * nc.log("<% green ✔ Saved %> in <% bold 12ms %>");
218
+ * nc.log("<% green ✔ Saved%> in <% bold 12ms%>");
168
219
  * nc.log("user:", { id: 1, roles: ["admin"] });
169
220
  *
170
221
  * @param {...unknown} args
@@ -259,7 +310,7 @@ export function groupEnd(): typeof import("./Logger");
259
310
  * @example
260
311
  * nc.timeStart("import");
261
312
  * await importProducts();
262
- * nc.timeEnd("import"); // "import: 1.24s"
313
+ * nc.timeEnd("import"); // "import: 1s 240ms"
263
314
  *
264
315
  * @param {string} [label="default"]
265
316
  * @returns {typeof import("./Logger")}
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/Logger.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/Logger.js"],"names":[],"mappings":"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"}