@logtape/logtape 0.1.0 → 0.2.0-dev.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -63,7 +63,7 @@ the application to set up LogTape):
63
63
  ~~~~ typescript
64
64
  import { configure, getConsoleSink } from "@logtape/logtape";
65
65
 
66
- configure({
66
+ await configure({
67
67
  sinks: { console: getConsoleSink() },
68
68
  filters: {},
69
69
  loggers: [
@@ -140,7 +140,7 @@ Here's an example of setting log levels for different categories:
140
140
  ~~~~ typescript
141
141
  import { configure, getConsoleSink } from "@logtape/logtape";
142
142
 
143
- configure({
143
+ await configure({
144
144
  sinks: {
145
145
  console: getConsoleSink(),
146
146
  },
@@ -169,7 +169,7 @@ Here's a simple example of a sink that writes log messages to console:
169
169
  ~~~~ typescript
170
170
  import { configure } from "@logtape/logtape";
171
171
 
172
- configure({
172
+ await configure({
173
173
  sinks: {
174
174
  console(record) {
175
175
  console.log(record.message);
@@ -187,7 +187,7 @@ provides a console sink:
187
187
  ~~~~ typescript
188
188
  import { configure, getConsoleSink } from "@logtape/logtape";
189
189
 
190
- configure({
190
+ await configure({
191
191
  sinks: {
192
192
  console: getConsoleSink(),
193
193
  },
@@ -209,7 +209,7 @@ messages to the standard error:
209
209
 
210
210
  ~~~~ typescript
211
211
  // Deno:
212
- configure({
212
+ await configure({
213
213
  sinks: {
214
214
  stream: getStreamSink(Deno.stderr.writable),
215
215
  },
@@ -221,7 +221,7 @@ configure({
221
221
  // Node.js:
222
222
  import stream from "node:stream";
223
223
 
224
- configure({
224
+ await configure({
225
225
  sinks: {
226
226
  stream: getStreamSink(stream.Writable.toWeb(process.stderr)),
227
227
  },
@@ -256,7 +256,7 @@ writes log messages to a file:
256
256
  ~~~~ typescript
257
257
  import { getFileSink } from "@logtape/logtape";
258
258
 
259
- configure({
259
+ await configure({
260
260
  sinks: {
261
261
  file: getFileSink("my-app.log"),
262
262
  },
@@ -283,7 +283,7 @@ export type TextFormatter = (record: LogRecord) => string;
283
283
  Here's an example of a text formatter that writes log messages in a JSON format:
284
284
 
285
285
  ~~~~ typescript
286
- configure({
286
+ await configure({
287
287
  sinks: {
288
288
  stream: getStreamSink(Deno.stderr.writable, {
289
289
  formatter: JSON.stringify,
@@ -309,6 +309,40 @@ disposableSink[Symbol.dispose] = () => {
309
309
  };
310
310
  ~~~~
311
311
 
312
+ A sync can be asynchronously disposed of as well. The type of an asynchronous
313
+ disposable sink is: `Sink & AsyncDisposable`. You can create an asynchronous
314
+ disposable sink by defining a `[Symbol.asyncDispose]` method:
315
+
316
+ ~~~~ typescript
317
+ const asyncDisposableSink: Sink & AsyncDisposable = (record: LogRecord) => {
318
+ console.log(record.message);
319
+ };
320
+ asyncDisposableSink[Symbol.asyncDispose] = async () => {
321
+ console.log("Disposed!");
322
+ };
323
+ ~~~~
324
+
325
+ ### Explicit disposal
326
+
327
+ You can explicitly dispose of a sink by calling the `dispose()` method. It is
328
+ useful when you want to flush the buffer of a sink without blocking returning
329
+ a response in edge functions. Here's an example of using the `dispose()`
330
+ with [`ctx.waitUntil()`] in Cloudflare Workers:
331
+
332
+ ~~~~ typescript
333
+ import { configure, dispose } from "@logtape/logtape";
334
+
335
+ export default {
336
+ async fetch(request, env, ctx) {
337
+ await configure({ /* ... */ });
338
+ // ...
339
+ ctx.waitUntil(dispose());
340
+ }
341
+ }
342
+ ~~~~
343
+
344
+ [`ctx.waitUntil()`]: https://developers.cloudflare.com/workers/runtime-apis/context/#waituntil
345
+
312
346
 
313
347
  Testing
314
348
  -------
@@ -326,16 +360,16 @@ the following code shows how to reset the configuration after a test
326
360
  import { configure, reset } from "@logtape/logtape";
327
361
 
328
362
  Deno.test("my test", async (t) => {
329
- await t.step("set up", () => {
330
- configure({ /* ... */ });
363
+ await t.step("set up", async () => {
364
+ await configure({ /* ... */ });
331
365
  });
332
366
 
333
367
  await t.step("run test", () => {
334
368
  // Run the test
335
369
  });
336
370
 
337
- await t.step("tear down", () => {
338
- reset();
371
+ await t.step("tear down", async () => {
372
+ await reset();
339
373
  });
340
374
  });
341
375
  ~~~~
@@ -350,7 +384,7 @@ import { type LogRecord, configure } from "@logtape/logtape";
350
384
 
351
385
  const buffer: LogRecord[] = [];
352
386
 
353
- configure({
387
+ await configure({
354
388
  sinks: {
355
389
  buffer: buffer.push.bind(buffer),
356
390
  },
package/esm/config.js CHANGED
@@ -10,6 +10,10 @@ let configured = false;
10
10
  * Disposables to dispose when resetting the configuration.
11
11
  */
12
12
  const disposables = new Set();
13
+ /**
14
+ * Async disposables to dispose when resetting the configuration.
15
+ */
16
+ const asyncDisposables = new Set();
13
17
  /**
14
18
  * Configure the loggers with the specified configuration.
15
19
  *
@@ -18,7 +22,7 @@ const disposables = new Set();
18
22
  *
19
23
  * @example
20
24
  * ```typescript
21
- * configure({
25
+ * await configure({
22
26
  * sinks: {
23
27
  * console: getConsoleSink(),
24
28
  * },
@@ -49,11 +53,11 @@ const disposables = new Set();
49
53
  *
50
54
  * @param config The configuration.
51
55
  */
52
- export function configure(config) {
56
+ export async function configure(config) {
53
57
  if (configured && !config.reset) {
54
58
  throw new ConfigError("Already configured; if you want to reset, turn on the reset flag.");
55
59
  }
56
- reset();
60
+ await reset();
57
61
  configured = true;
58
62
  let metaConfigured = false;
59
63
  for (const cfg of config.loggers) {
@@ -68,7 +72,7 @@ export function configure(config) {
68
72
  for (const sinkId of cfg.sinks ?? []) {
69
73
  const sink = config.sinks[sinkId];
70
74
  if (!sink) {
71
- reset();
75
+ await reset();
72
76
  throw new ConfigError(`Sink not found: ${sinkId}.`);
73
77
  }
74
78
  logger.sinks.push(sink);
@@ -78,18 +82,26 @@ export function configure(config) {
78
82
  for (const filterId of cfg.filters ?? []) {
79
83
  const filter = config.filters[filterId];
80
84
  if (filter === undefined) {
81
- reset();
85
+ await reset();
82
86
  throw new ConfigError(`Filter not found: ${filterId}.`);
83
87
  }
84
88
  logger.filters.push(toFilter(filter));
85
89
  }
86
90
  }
87
91
  for (const sink of Object.values(config.sinks)) {
92
+ if (Symbol.asyncDispose in sink) {
93
+ asyncDisposables.add(sink);
94
+ }
88
95
  if (Symbol.dispose in sink)
89
96
  disposables.add(sink);
90
97
  }
91
98
  for (const filter of Object.values(config.filters)) {
92
- if (filter != null && typeof filter !== "string" && Symbol.dispose in filter)
99
+ if (filter == null || typeof filter === "string")
100
+ continue;
101
+ if (Symbol.asyncDispose in filter) {
102
+ asyncDisposables.add(filter);
103
+ }
104
+ if (Symbol.dispose in filter)
93
105
  disposables.add(filter);
94
106
  }
95
107
  if ("process" in dntShim.dntGlobalThis) { // @ts-ignore: It's fine to use process in Node
@@ -114,18 +126,24 @@ export function configure(config) {
114
126
  /**
115
127
  * Reset the configuration. Mostly for testing purposes.
116
128
  */
117
- export function reset() {
118
- dispose();
129
+ export async function reset() {
130
+ await dispose();
119
131
  LoggerImpl.getLogger([]).resetDescendants();
120
132
  configured = false;
121
133
  }
122
134
  /**
123
135
  * Dispose of the disposables.
124
136
  */
125
- export function dispose() {
137
+ export async function dispose() {
126
138
  for (const disposable of disposables)
127
139
  disposable[Symbol.dispose]();
128
140
  disposables.clear();
141
+ const promises = [];
142
+ for (const disposable of asyncDisposables) {
143
+ promises.push(disposable[Symbol.asyncDispose]());
144
+ asyncDisposables.delete(disposable);
145
+ }
146
+ await Promise.all(promises);
129
147
  }
130
148
  /**
131
149
  * A configuration error.
package/esm/mod.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ConfigError, configure, reset, } from "./config.js";
1
+ export { ConfigError, configure, dispose, reset, } from "./config.js";
2
2
  export { getFileSink } from "./filesink.node.js";
3
3
  export { getLevelFilter, toFilter, } from "./filter.js";
4
4
  export { defaultConsoleFormatter, defaultTextFormatter, } from "./formatter.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logtape/logtape",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-dev.19+9c900230",
4
4
  "description": "Simple logging library for Deno/Node.js/Bun/browsers",
5
5
  "keywords": [
6
6
  "logging",
package/script/config.js CHANGED
@@ -36,6 +36,10 @@ let configured = false;
36
36
  * Disposables to dispose when resetting the configuration.
37
37
  */
38
38
  const disposables = new Set();
39
+ /**
40
+ * Async disposables to dispose when resetting the configuration.
41
+ */
42
+ const asyncDisposables = new Set();
39
43
  /**
40
44
  * Configure the loggers with the specified configuration.
41
45
  *
@@ -44,7 +48,7 @@ const disposables = new Set();
44
48
  *
45
49
  * @example
46
50
  * ```typescript
47
- * configure({
51
+ * await configure({
48
52
  * sinks: {
49
53
  * console: getConsoleSink(),
50
54
  * },
@@ -75,11 +79,11 @@ const disposables = new Set();
75
79
  *
76
80
  * @param config The configuration.
77
81
  */
78
- function configure(config) {
82
+ async function configure(config) {
79
83
  if (configured && !config.reset) {
80
84
  throw new ConfigError("Already configured; if you want to reset, turn on the reset flag.");
81
85
  }
82
- reset();
86
+ await reset();
83
87
  configured = true;
84
88
  let metaConfigured = false;
85
89
  for (const cfg of config.loggers) {
@@ -94,7 +98,7 @@ function configure(config) {
94
98
  for (const sinkId of cfg.sinks ?? []) {
95
99
  const sink = config.sinks[sinkId];
96
100
  if (!sink) {
97
- reset();
101
+ await reset();
98
102
  throw new ConfigError(`Sink not found: ${sinkId}.`);
99
103
  }
100
104
  logger.sinks.push(sink);
@@ -104,18 +108,26 @@ function configure(config) {
104
108
  for (const filterId of cfg.filters ?? []) {
105
109
  const filter = config.filters[filterId];
106
110
  if (filter === undefined) {
107
- reset();
111
+ await reset();
108
112
  throw new ConfigError(`Filter not found: ${filterId}.`);
109
113
  }
110
114
  logger.filters.push((0, filter_js_1.toFilter)(filter));
111
115
  }
112
116
  }
113
117
  for (const sink of Object.values(config.sinks)) {
118
+ if (Symbol.asyncDispose in sink) {
119
+ asyncDisposables.add(sink);
120
+ }
114
121
  if (Symbol.dispose in sink)
115
122
  disposables.add(sink);
116
123
  }
117
124
  for (const filter of Object.values(config.filters)) {
118
- if (filter != null && typeof filter !== "string" && Symbol.dispose in filter)
125
+ if (filter == null || typeof filter === "string")
126
+ continue;
127
+ if (Symbol.asyncDispose in filter) {
128
+ asyncDisposables.add(filter);
129
+ }
130
+ if (Symbol.dispose in filter)
119
131
  disposables.add(filter);
120
132
  }
121
133
  if ("process" in dntShim.dntGlobalThis) { // @ts-ignore: It's fine to use process in Node
@@ -141,8 +153,8 @@ exports.configure = configure;
141
153
  /**
142
154
  * Reset the configuration. Mostly for testing purposes.
143
155
  */
144
- function reset() {
145
- dispose();
156
+ async function reset() {
157
+ await dispose();
146
158
  logger_js_1.LoggerImpl.getLogger([]).resetDescendants();
147
159
  configured = false;
148
160
  }
@@ -150,10 +162,16 @@ exports.reset = reset;
150
162
  /**
151
163
  * Dispose of the disposables.
152
164
  */
153
- function dispose() {
165
+ async function dispose() {
154
166
  for (const disposable of disposables)
155
167
  disposable[Symbol.dispose]();
156
168
  disposables.clear();
169
+ const promises = [];
170
+ for (const disposable of asyncDisposables) {
171
+ promises.push(disposable[Symbol.asyncDispose]());
172
+ asyncDisposables.delete(disposable);
173
+ }
174
+ await Promise.all(promises);
157
175
  }
158
176
  exports.dispose = dispose;
159
177
  /**
package/script/mod.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStreamSink = exports.getConsoleSink = exports.getLogger = exports.defaultTextFormatter = exports.defaultConsoleFormatter = exports.toFilter = exports.getLevelFilter = exports.getFileSink = exports.reset = exports.configure = exports.ConfigError = void 0;
3
+ exports.getStreamSink = exports.getConsoleSink = exports.getLogger = exports.defaultTextFormatter = exports.defaultConsoleFormatter = exports.toFilter = exports.getLevelFilter = exports.getFileSink = exports.reset = exports.dispose = exports.configure = exports.ConfigError = void 0;
4
4
  var config_js_1 = require("./config.js");
5
5
  Object.defineProperty(exports, "ConfigError", { enumerable: true, get: function () { return config_js_1.ConfigError; } });
6
6
  Object.defineProperty(exports, "configure", { enumerable: true, get: function () { return config_js_1.configure; } });
7
+ Object.defineProperty(exports, "dispose", { enumerable: true, get: function () { return config_js_1.dispose; } });
7
8
  Object.defineProperty(exports, "reset", { enumerable: true, get: function () { return config_js_1.reset; } });
8
9
  var filesink_node_js_1 = require("./filesink.node.js");
9
10
  Object.defineProperty(exports, "getFileSink", { enumerable: true, get: function () { return filesink_node_js_1.getFileSink; } });
package/types/config.d.ts CHANGED
@@ -55,7 +55,7 @@ export interface LoggerConfig<TSinkId extends string, TFilterId extends string>
55
55
  *
56
56
  * @example
57
57
  * ```typescript
58
- * configure({
58
+ * await configure({
59
59
  * sinks: {
60
60
  * console: getConsoleSink(),
61
61
  * },
@@ -86,15 +86,15 @@ export interface LoggerConfig<TSinkId extends string, TFilterId extends string>
86
86
  *
87
87
  * @param config The configuration.
88
88
  */
89
- export declare function configure<TSinkId extends string, TFilterId extends string>(config: Config<TSinkId, TFilterId>): void;
89
+ export declare function configure<TSinkId extends string, TFilterId extends string>(config: Config<TSinkId, TFilterId>): Promise<void>;
90
90
  /**
91
91
  * Reset the configuration. Mostly for testing purposes.
92
92
  */
93
- export declare function reset(): void;
93
+ export declare function reset(): Promise<void>;
94
94
  /**
95
95
  * Dispose of the disposables.
96
96
  */
97
- export declare function dispose(): void;
97
+ export declare function dispose(): Promise<void>;
98
98
  /**
99
99
  * A configuration error.
100
100
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAY,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM;IACtE;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEvC;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,OAAO,SAAS,MAAM,EACtB,SAAS,SAAS,MAAM;IAExB;;;OAGG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IAEtB;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,EACxE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,QA0EnC;AAED;;GAEG;AACH,wBAAgB,KAAK,SAIpB;AAED;;GAEG;AACH,wBAAgB,OAAO,SAGtB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC;;;OAGG;gBACS,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAY,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,OAAO,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM;IACtE;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEvC;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,OAAO,SAAS,MAAM,EACtB,SAAS,SAAS,MAAM;IAExB;;;OAGG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IAEtB;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,SAAS,CAC7B,OAAO,SAAS,MAAM,EACtB,SAAS,SAAS,MAAM,EACxB,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EnD;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3C;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAS7C;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC;;;OAGG;gBACS,OAAO,EAAE,MAAM;CAI5B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert_rejects.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/0.222.1/assert_rejects.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAAC;AACpB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACnD,EAAE,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,EAE9B,UAAU,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACrC,WAAW,CAAC,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAAC"}
package/types/mod.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { type Config, ConfigError, configure, type LoggerConfig, reset, } from "./config.js";
1
+ export { type Config, ConfigError, configure, dispose, type LoggerConfig, reset, } from "./config.js";
2
2
  export { getFileSink } from "./filesink.node.js";
3
3
  export { type Filter, type FilterLike, getLevelFilter, toFilter, } from "./filter.js";
4
4
  export { type ConsoleFormatter, defaultConsoleFormatter, defaultTextFormatter, type TextFormatter, } from "./formatter.js";
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,WAAW,EACX,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,GACN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,cAAc,EACd,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,cAAc,EACd,aAAa,EACb,KAAK,IAAI,EACT,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,GACN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,cAAc,EACd,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,cAAc,EACd,aAAa,EACb,KAAK,IAAI,EACT,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC"}