@logtape/logtape 0.1.0-dev.12 → 0.1.0-dev.14
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 +151 -2
- package/esm/sink.js +26 -9
- package/package.json +1 -1
- package/script/sink.js +28 -10
- package/types/deps/deno.land/x/which_runtime@0.2.0/mod.d.ts.map +1 -0
- package/types/sink.d.ts +73 -11
- package/types/sink.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,9 @@ designed to be used for both applications and libraries.
|
|
|
16
16
|
Currently, LogTape provides only few sinks, but you can easily add your own
|
|
17
17
|
sinks.
|
|
18
18
|
|
|
19
|
+

|
|
20
|
+

|
|
21
|
+
|
|
19
22
|
[GitHub Actions]: https://github.com/dahlia/logtape/actions/workflows/main.yaml
|
|
20
23
|
[GitHub Actions badge]: https://github.com/dahlia/logtape/actions/workflows/main.yaml/badge.svg
|
|
21
24
|
[Codecov]: https://codecov.io/gh/dahlia/logtape
|
|
@@ -126,6 +129,23 @@ to loggers whose categories are `["my-app", "my-module"]` and `["my-app"]`.
|
|
|
126
129
|
This behavior allows you to control the verbosity of log messages by setting
|
|
127
130
|
the log level of loggers at different levels of the category hierarchy.
|
|
128
131
|
|
|
132
|
+
Here's an example of setting log levels for different categories:
|
|
133
|
+
|
|
134
|
+
~~~~ typescript
|
|
135
|
+
import { configure, getConsoleSink } from "@logtape/logtape";
|
|
136
|
+
|
|
137
|
+
configure({
|
|
138
|
+
sinks: {
|
|
139
|
+
console: getConsoleSink(),
|
|
140
|
+
},
|
|
141
|
+
filters: {},
|
|
142
|
+
loggers: [
|
|
143
|
+
{ category: ["my-app"], level: "info", sinks: ["console"] },
|
|
144
|
+
{ category: ["my-app", "my-module"], level: "debug", sinks: ["console"] },
|
|
145
|
+
],
|
|
146
|
+
})
|
|
147
|
+
~~~~
|
|
148
|
+
|
|
129
149
|
|
|
130
150
|
Sinks
|
|
131
151
|
-----
|
|
@@ -153,6 +173,8 @@ configure({
|
|
|
153
173
|
});
|
|
154
174
|
~~~~
|
|
155
175
|
|
|
176
|
+
### Console sink
|
|
177
|
+
|
|
156
178
|
Of course, you don't have to implement your own console sink because LogTape
|
|
157
179
|
provides a console sink:
|
|
158
180
|
|
|
@@ -167,19 +189,38 @@ configure({
|
|
|
167
189
|
});
|
|
168
190
|
~~~~
|
|
169
191
|
|
|
192
|
+
See also [`getConsoleSink()`] function and [`ConsoleSinkOptions`] interface
|
|
193
|
+
in the API reference for more details.
|
|
194
|
+
|
|
195
|
+
[`getConsoleSink()`]: https://jsr.io/@logtape/logtape/doc/~/getConsoleSink
|
|
196
|
+
[`ConsoleSinkOptions`]: https://jsr.io/@logtape/logtape/doc/~/ConsoleSinkOptions
|
|
197
|
+
|
|
198
|
+
### Stream sink
|
|
199
|
+
|
|
170
200
|
Another built-in sink is a stream sink. It writes log messages to
|
|
171
201
|
a [`WritableStream`]. Here's an example of a stream sink that writes log
|
|
172
202
|
messages to the standard error:
|
|
173
203
|
|
|
174
204
|
~~~~ typescript
|
|
175
205
|
// Deno:
|
|
176
|
-
|
|
206
|
+
configure({
|
|
207
|
+
sinks: {
|
|
208
|
+
stream: getStreamSink(Deno.stderr.writable),
|
|
209
|
+
},
|
|
210
|
+
// Omitted for brevity
|
|
211
|
+
});
|
|
177
212
|
~~~~
|
|
178
213
|
|
|
179
214
|
~~~~ typescript
|
|
180
215
|
// Node.js:
|
|
181
216
|
import stream from "node:stream";
|
|
182
|
-
|
|
217
|
+
|
|
218
|
+
configure({
|
|
219
|
+
sinks: {
|
|
220
|
+
stream: getStreamSink(stream.Writable.toWeb(process.stderr)),
|
|
221
|
+
},
|
|
222
|
+
// Omitted for brevity
|
|
223
|
+
});
|
|
183
224
|
~~~~
|
|
184
225
|
|
|
185
226
|
> [!NOTE]
|
|
@@ -189,6 +230,114 @@ const stderrSink = getStreamSink(stream.Writable.toWeb(process.stderr));
|
|
|
189
230
|
> Node.js stream. You can use [`Writable.toWeb()`] method to convert a Node.js
|
|
190
231
|
> stream to a `WritableStream`.
|
|
191
232
|
|
|
233
|
+
See also [`getStreamSink()`] function and [`StreamSinkOptions`] interface
|
|
234
|
+
in the API reference for more details.
|
|
235
|
+
|
|
192
236
|
[`WritableStream`]: https://developer.mozilla.org/en-US/docs/Web/API/WritableStream
|
|
193
237
|
[`Writable`]: https://nodejs.org/api/stream.html#class-streamwritable
|
|
194
238
|
[`Writable.toWeb()`]: https://nodejs.org/api/stream.html#streamwritabletowebstreamwritable
|
|
239
|
+
[`getStreamSink()`]: https://jsr.io/@logtape/logtape/doc/~/getStreamSink
|
|
240
|
+
[`StreamSinkOptions`]: https://jsr.io/@logtape/logtape/doc/~/StreamSinkOptions
|
|
241
|
+
|
|
242
|
+
### File sink
|
|
243
|
+
|
|
244
|
+
LogTape provides a platform-independent file sink. You can use it by providing
|
|
245
|
+
a platform-specific file driver for Deno or Node.js. Here's an example of
|
|
246
|
+
a file sink that writes log messages to a file:
|
|
247
|
+
|
|
248
|
+
~~~~ typescript
|
|
249
|
+
// Deno
|
|
250
|
+
import { type FileSinkDriver, getFileSink } from "@logtape/logtape";
|
|
251
|
+
|
|
252
|
+
const driver: FileSinkDriver<Deno.FsFile> = {
|
|
253
|
+
openSync(path: string) {
|
|
254
|
+
return Deno.openSync(path, { create: true, append: true });
|
|
255
|
+
},
|
|
256
|
+
writeSync(fd, chunk) {
|
|
257
|
+
fd.writeSync(chunk);
|
|
258
|
+
},
|
|
259
|
+
flushSync(fd) {
|
|
260
|
+
fd.syncSync();
|
|
261
|
+
},
|
|
262
|
+
closeSync(fd) {
|
|
263
|
+
fd.close();
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
configure({
|
|
268
|
+
sinks: {
|
|
269
|
+
file: getFileSink("my-app.log", driver),
|
|
270
|
+
},
|
|
271
|
+
// Omitted for brevity
|
|
272
|
+
});
|
|
273
|
+
~~~~
|
|
274
|
+
|
|
275
|
+
~~~~ typescript
|
|
276
|
+
// Node.js or Bun
|
|
277
|
+
import fs from "node:fs";
|
|
278
|
+
import { type FileSinkDriver, getFileSink } from "@logtape/logtape";
|
|
279
|
+
|
|
280
|
+
const driver: FileSinkDriver<number> = {
|
|
281
|
+
openSync(path: string) {
|
|
282
|
+
return fs.openSync(path, "a");
|
|
283
|
+
},
|
|
284
|
+
writeSync: fs.writeSync,
|
|
285
|
+
flushSync: fs.fsyncSync,
|
|
286
|
+
closeSync: fs.closeSync,
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
configure({
|
|
290
|
+
sinks: {
|
|
291
|
+
file: getFileSink("my-app.log", driver),
|
|
292
|
+
},
|
|
293
|
+
// Omitted for brevity
|
|
294
|
+
});
|
|
295
|
+
~~~~
|
|
296
|
+
|
|
297
|
+
See also [`getFileSink()`] function, [`FileSinkOptions`] interface, and
|
|
298
|
+
[`FileSinkDriver`] interface in the API reference for more details.
|
|
299
|
+
|
|
300
|
+
[`getFileSink()`]: https://jsr.io/@logtape/logtape/doc/~/getFileSink
|
|
301
|
+
[`FileSinkOptions`]: https://jsr.io/@logtape/logtape/doc/~/FileSinkOptions
|
|
302
|
+
[`FileSinkDriver`]: https://jsr.io/@logtape/logtape/doc/~/FileSinkDriver
|
|
303
|
+
|
|
304
|
+
### Buffer sink
|
|
305
|
+
|
|
306
|
+
For testing purposes, you may want to collect log messages in memory. Although
|
|
307
|
+
LogTape does not provide a built-in buffer sink, you can easily implement it:
|
|
308
|
+
|
|
309
|
+
~~~~ typescript
|
|
310
|
+
import { type LogRecord, configure } from "@logtape/logtape";
|
|
311
|
+
|
|
312
|
+
const buffer: LogRecord[] = [];
|
|
313
|
+
|
|
314
|
+
configure({
|
|
315
|
+
sinks: {
|
|
316
|
+
buffer: buffer.push.bind(buffer),
|
|
317
|
+
},
|
|
318
|
+
// Omitted for brevity
|
|
319
|
+
});
|
|
320
|
+
~~~~
|
|
321
|
+
|
|
322
|
+
### Text formatter
|
|
323
|
+
|
|
324
|
+
A stream sink and a file sink write log messages in a plain text format.
|
|
325
|
+
You can customize the format by providing a text formatter. The type of a
|
|
326
|
+
text formatter is:
|
|
327
|
+
|
|
328
|
+
~~~~ typescript
|
|
329
|
+
export type TextFormatter = (record: LogRecord) => string;
|
|
330
|
+
~~~~
|
|
331
|
+
|
|
332
|
+
Here's an example of a text formatter that writes log messages in a JSON format:
|
|
333
|
+
|
|
334
|
+
~~~~ typescript
|
|
335
|
+
configure({
|
|
336
|
+
sinks: {
|
|
337
|
+
stream: getStreamSink(Deno.stderr.writable, {
|
|
338
|
+
formatter: JSON.stringify,
|
|
339
|
+
}),
|
|
340
|
+
},
|
|
341
|
+
// Omitted for brevity
|
|
342
|
+
})
|
|
343
|
+
~~~~
|
package/esm/sink.js
CHANGED
|
@@ -20,13 +20,12 @@ import { defaultConsoleFormatter, defaultTextFormatter, } from "./formatter.js";
|
|
|
20
20
|
* ```
|
|
21
21
|
*
|
|
22
22
|
* @param stream The stream to write to.
|
|
23
|
-
* @param
|
|
24
|
-
* {@link defaultTextFormatter}.
|
|
25
|
-
* @param encoder The text encoder to use. Defaults to an instance of
|
|
26
|
-
* {@link TextEncoder}.
|
|
23
|
+
* @param options The options for the sink.
|
|
27
24
|
* @returns A sink that writes to the stream.
|
|
28
25
|
*/
|
|
29
|
-
export function getStreamSink(stream,
|
|
26
|
+
export function getStreamSink(stream, options = {}) {
|
|
27
|
+
const formatter = options.formatter ?? defaultTextFormatter;
|
|
28
|
+
const encoder = options.encoder ?? new TextEncoder();
|
|
30
29
|
const writer = stream.getWriter();
|
|
31
30
|
return (record) => {
|
|
32
31
|
const bytes = encoder.encode(formatter(record));
|
|
@@ -36,12 +35,12 @@ export function getStreamSink(stream, formatter = defaultTextFormatter, encoder
|
|
|
36
35
|
/**
|
|
37
36
|
* A console sink factory that returns a sink that logs to the console.
|
|
38
37
|
*
|
|
39
|
-
* @param
|
|
40
|
-
* {@link defaultConsoleFormatter}.
|
|
41
|
-
* @param console The console to log to. Defaults to {@link console}.
|
|
38
|
+
* @param options The options for the sink.
|
|
42
39
|
* @returns A sink that logs to the console.
|
|
43
40
|
*/
|
|
44
|
-
export function getConsoleSink(
|
|
41
|
+
export function getConsoleSink(options = {}) {
|
|
42
|
+
const formatter = options.formatter ?? defaultConsoleFormatter;
|
|
43
|
+
const console = options.console ?? globalThis.console;
|
|
45
44
|
return (record) => {
|
|
46
45
|
const args = formatter(record);
|
|
47
46
|
if (record.level === "debug")
|
|
@@ -57,3 +56,21 @@ export function getConsoleSink(formatter = defaultConsoleFormatter, console = gl
|
|
|
57
56
|
throw new TypeError(`Invalid log level: ${record.level}.`);
|
|
58
57
|
};
|
|
59
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Get a platform-independent file sink.
|
|
61
|
+
* @typeParam TFile The type of the file descriptor.
|
|
62
|
+
* @param path A path to the file to write to.
|
|
63
|
+
* @param options The options for the sink and the file driver.
|
|
64
|
+
* @returns A sink that writes to the file.
|
|
65
|
+
*/
|
|
66
|
+
export function getFileSink(path, options) {
|
|
67
|
+
const formatter = options.formatter ?? defaultTextFormatter;
|
|
68
|
+
const encoder = options.encoder ?? new TextEncoder();
|
|
69
|
+
const fd = options.openSync(path);
|
|
70
|
+
const sink = (record) => {
|
|
71
|
+
options.writeSync(fd, encoder.encode(formatter(record)));
|
|
72
|
+
options.flushSync(fd);
|
|
73
|
+
};
|
|
74
|
+
sink.close = () => options.closeSync(fd);
|
|
75
|
+
return sink;
|
|
76
|
+
}
|
package/package.json
CHANGED
package/script/sink.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getConsoleSink = exports.getStreamSink = void 0;
|
|
3
|
+
exports.getFileSink = exports.getConsoleSink = exports.getStreamSink = void 0;
|
|
4
4
|
const formatter_js_1 = require("./formatter.js");
|
|
5
5
|
/**
|
|
6
6
|
* A factory that returns a sink that writes to a {@link WritableStream}.
|
|
@@ -23,13 +23,12 @@ const formatter_js_1 = require("./formatter.js");
|
|
|
23
23
|
* ```
|
|
24
24
|
*
|
|
25
25
|
* @param stream The stream to write to.
|
|
26
|
-
* @param
|
|
27
|
-
* {@link defaultTextFormatter}.
|
|
28
|
-
* @param encoder The text encoder to use. Defaults to an instance of
|
|
29
|
-
* {@link TextEncoder}.
|
|
26
|
+
* @param options The options for the sink.
|
|
30
27
|
* @returns A sink that writes to the stream.
|
|
31
28
|
*/
|
|
32
|
-
function getStreamSink(stream,
|
|
29
|
+
function getStreamSink(stream, options = {}) {
|
|
30
|
+
const formatter = options.formatter ?? formatter_js_1.defaultTextFormatter;
|
|
31
|
+
const encoder = options.encoder ?? new TextEncoder();
|
|
33
32
|
const writer = stream.getWriter();
|
|
34
33
|
return (record) => {
|
|
35
34
|
const bytes = encoder.encode(formatter(record));
|
|
@@ -40,12 +39,12 @@ exports.getStreamSink = getStreamSink;
|
|
|
40
39
|
/**
|
|
41
40
|
* A console sink factory that returns a sink that logs to the console.
|
|
42
41
|
*
|
|
43
|
-
* @param
|
|
44
|
-
* {@link defaultConsoleFormatter}.
|
|
45
|
-
* @param console The console to log to. Defaults to {@link console}.
|
|
42
|
+
* @param options The options for the sink.
|
|
46
43
|
* @returns A sink that logs to the console.
|
|
47
44
|
*/
|
|
48
|
-
function getConsoleSink(
|
|
45
|
+
function getConsoleSink(options = {}) {
|
|
46
|
+
const formatter = options.formatter ?? formatter_js_1.defaultConsoleFormatter;
|
|
47
|
+
const console = options.console ?? globalThis.console;
|
|
49
48
|
return (record) => {
|
|
50
49
|
const args = formatter(record);
|
|
51
50
|
if (record.level === "debug")
|
|
@@ -62,3 +61,22 @@ function getConsoleSink(formatter = formatter_js_1.defaultConsoleFormatter, cons
|
|
|
62
61
|
};
|
|
63
62
|
}
|
|
64
63
|
exports.getConsoleSink = getConsoleSink;
|
|
64
|
+
/**
|
|
65
|
+
* Get a platform-independent file sink.
|
|
66
|
+
* @typeParam TFile The type of the file descriptor.
|
|
67
|
+
* @param path A path to the file to write to.
|
|
68
|
+
* @param options The options for the sink and the file driver.
|
|
69
|
+
* @returns A sink that writes to the file.
|
|
70
|
+
*/
|
|
71
|
+
function getFileSink(path, options) {
|
|
72
|
+
const formatter = options.formatter ?? formatter_js_1.defaultTextFormatter;
|
|
73
|
+
const encoder = options.encoder ?? new TextEncoder();
|
|
74
|
+
const fd = options.openSync(path);
|
|
75
|
+
const sink = (record) => {
|
|
76
|
+
options.writeSync(fd, encoder.encode(formatter(record)));
|
|
77
|
+
options.flushSync(fd);
|
|
78
|
+
};
|
|
79
|
+
sink.close = () => options.closeSync(fd);
|
|
80
|
+
return sink;
|
|
81
|
+
}
|
|
82
|
+
exports.getFileSink = getFileSink;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../src/deps/deno.land/x/which_runtime@0.2.0/mod.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM,SAAgC,CAAC;AACpD,eAAO,MAAM,MAAM,SAA0B,CAAC"}
|
package/types/sink.d.ts
CHANGED
|
@@ -13,6 +13,21 @@ import type { LogRecord } from "./record.js";
|
|
|
13
13
|
* @param record The log record to sink.
|
|
14
14
|
*/
|
|
15
15
|
export type Sink = (record: LogRecord) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Options for the {@link getStreamSink} function.
|
|
18
|
+
*/
|
|
19
|
+
export interface StreamSinkOptions {
|
|
20
|
+
/**
|
|
21
|
+
* The text formatter to use. Defaults to {@link defaultTextFormatter}.
|
|
22
|
+
*/
|
|
23
|
+
formatter?: TextFormatter;
|
|
24
|
+
/**
|
|
25
|
+
* The text encoder to use. Defaults to an instance of {@link TextEncoder}.
|
|
26
|
+
*/
|
|
27
|
+
encoder?: {
|
|
28
|
+
encode(text: string): Uint8Array;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
16
31
|
/**
|
|
17
32
|
* A factory that returns a sink that writes to a {@link WritableStream}.
|
|
18
33
|
*
|
|
@@ -34,22 +49,69 @@ export type Sink = (record: LogRecord) => void;
|
|
|
34
49
|
* ```
|
|
35
50
|
*
|
|
36
51
|
* @param stream The stream to write to.
|
|
37
|
-
* @param
|
|
38
|
-
* {@link defaultTextFormatter}.
|
|
39
|
-
* @param encoder The text encoder to use. Defaults to an instance of
|
|
40
|
-
* {@link TextEncoder}.
|
|
52
|
+
* @param options The options for the sink.
|
|
41
53
|
* @returns A sink that writes to the stream.
|
|
42
54
|
*/
|
|
43
|
-
export declare function getStreamSink(stream: dntShim.WritableStream,
|
|
44
|
-
|
|
45
|
-
}
|
|
55
|
+
export declare function getStreamSink(stream: dntShim.WritableStream, options?: StreamSinkOptions): Sink;
|
|
56
|
+
/**
|
|
57
|
+
* Options for the {@link getConsoleSink} function.
|
|
58
|
+
*/
|
|
59
|
+
export interface ConsoleSinkOptions {
|
|
60
|
+
/**
|
|
61
|
+
* The console formatter to use. Defaults to {@link defaultConsoleFormatter}.
|
|
62
|
+
*/
|
|
63
|
+
formatter?: ConsoleFormatter;
|
|
64
|
+
/**
|
|
65
|
+
* The console to log to. Defaults to {@link console}.
|
|
66
|
+
*/
|
|
67
|
+
console?: Console;
|
|
68
|
+
}
|
|
46
69
|
/**
|
|
47
70
|
* A console sink factory that returns a sink that logs to the console.
|
|
48
71
|
*
|
|
49
|
-
* @param
|
|
50
|
-
* {@link defaultConsoleFormatter}.
|
|
51
|
-
* @param console The console to log to. Defaults to {@link console}.
|
|
72
|
+
* @param options The options for the sink.
|
|
52
73
|
* @returns A sink that logs to the console.
|
|
53
74
|
*/
|
|
54
|
-
export declare function getConsoleSink(
|
|
75
|
+
export declare function getConsoleSink(options?: ConsoleSinkOptions): Sink;
|
|
76
|
+
/**
|
|
77
|
+
* Options for the {@link getFileSink} function.
|
|
78
|
+
*/
|
|
79
|
+
export type FileSinkOptions = StreamSinkOptions;
|
|
80
|
+
/**
|
|
81
|
+
* A platform-specific file sink driver.
|
|
82
|
+
* @typeParam TFile The type of the file descriptor.
|
|
83
|
+
*/
|
|
84
|
+
export interface FileSinkDriver<TFile> {
|
|
85
|
+
/**
|
|
86
|
+
* Open a file for appending and return a file descriptor.
|
|
87
|
+
* @param path A path to the file to open.
|
|
88
|
+
*/
|
|
89
|
+
openSync(path: string): TFile;
|
|
90
|
+
/**
|
|
91
|
+
* Write a chunk of data to the file.
|
|
92
|
+
* @param fd The file descriptor.
|
|
93
|
+
* @param chunk The data to write.
|
|
94
|
+
*/
|
|
95
|
+
writeSync(fd: TFile, chunk: Uint8Array): void;
|
|
96
|
+
/**
|
|
97
|
+
* Flush the file to ensure that all data is written to the disk.
|
|
98
|
+
* @param fd The file descriptor.
|
|
99
|
+
*/
|
|
100
|
+
flushSync(fd: TFile): void;
|
|
101
|
+
/**
|
|
102
|
+
* Close the file.
|
|
103
|
+
* @param fd The file descriptor.
|
|
104
|
+
*/
|
|
105
|
+
closeSync(fd: TFile): void;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get a platform-independent file sink.
|
|
109
|
+
* @typeParam TFile The type of the file descriptor.
|
|
110
|
+
* @param path A path to the file to write to.
|
|
111
|
+
* @param options The options for the sink and the file driver.
|
|
112
|
+
* @returns A sink that writes to the file.
|
|
113
|
+
*/
|
|
114
|
+
export declare function getFileSink<TFile>(path: string, options: FileSinkOptions & FileSinkDriver<TFile>): Sink & {
|
|
115
|
+
close: () => void;
|
|
116
|
+
};
|
|
55
117
|
//# sourceMappingURL=sink.d.ts.map
|
package/types/sink.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EACL,KAAK,gBAAgB,EAGrB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B;;OAEG;IACH,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,CAAC,cAAc,EAC9B,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CAQN;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,IAAI,CAYrE;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAE9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAE9C;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,GAC/C,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAU9B"}
|