@bgord/bun 1.21.1 → 1.21.2
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/dist/antivirus-clamav.adapter.d.ts.map +1 -1
- package/dist/antivirus-clamav.adapter.js +1 -0
- package/dist/antivirus-clamav.adapter.js.map +1 -1
- package/dist/better-auth-logger.service.d.ts +2 -3
- package/dist/better-auth-logger.service.d.ts.map +1 -1
- package/dist/better-auth-logger.service.js +16 -33
- package/dist/better-auth-logger.service.js.map +1 -1
- package/dist/cache-repository-redis.adapter.d.ts.map +1 -1
- package/dist/cache-repository-redis.adapter.js.map +1 -1
- package/dist/clock-system.adapter.d.ts.map +1 -1
- package/dist/clock-system.adapter.js +2 -1
- package/dist/clock-system.adapter.js.map +1 -1
- package/dist/cron-expression.vo.d.ts.map +1 -1
- package/dist/cron-expression.vo.js +1 -0
- package/dist/cron-expression.vo.js.map +1 -1
- package/dist/cron-scheduler.adapter.d.ts.map +1 -1
- package/dist/cron-scheduler.adapter.js.map +1 -1
- package/dist/file-cleaner-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-cleaner-forgiving.adapter.js.map +1 -1
- package/dist/file-cleaner.adapter.d.ts.map +1 -1
- package/dist/file-cleaner.adapter.js.map +1 -1
- package/dist/file-copier.adapter.d.ts.map +1 -1
- package/dist/file-copier.adapter.js.map +1 -1
- package/dist/file-draft-zip.service.d.ts.map +1 -1
- package/dist/file-draft-zip.service.js +1 -2
- package/dist/file-draft-zip.service.js.map +1 -1
- package/dist/file-inspection.adapter.d.ts.map +1 -1
- package/dist/file-inspection.adapter.js +1 -0
- package/dist/file-inspection.adapter.js.map +1 -1
- package/dist/file-reader-json-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-reader-json-forgiving.adapter.js.map +1 -1
- package/dist/file-reader-json.adapter.d.ts.map +1 -1
- package/dist/file-reader-json.adapter.js.map +1 -1
- package/dist/file-reader-raw-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-reader-raw-forgiving.adapter.js.map +1 -1
- package/dist/file-reader-raw.adapter.d.ts.map +1 -1
- package/dist/file-reader-raw.adapter.js.map +1 -1
- package/dist/file-reader-text-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-reader-text-forgiving.adapter.js.map +1 -1
- package/dist/file-reader-text.adapter.d.ts.map +1 -1
- package/dist/file-reader-text.adapter.js.map +1 -1
- package/dist/file-writer-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-writer-forgiving.adapter.js.map +1 -1
- package/dist/file-writer.adapter.d.ts.map +1 -1
- package/dist/file-writer.adapter.js.map +1 -1
- package/dist/graceful-shutdown.service.d.ts.map +1 -1
- package/dist/graceful-shutdown.service.js +2 -0
- package/dist/graceful-shutdown.service.js.map +1 -1
- package/dist/gzip.adapter.d.ts.map +1 -1
- package/dist/gzip.adapter.js.map +1 -1
- package/dist/healthcheck-hono.handler.d.ts +1 -1
- package/dist/image-blur.adapter.d.ts.map +1 -1
- package/dist/image-blur.adapter.js.map +1 -1
- package/dist/image-compressor.adapter.d.ts.map +1 -1
- package/dist/image-compressor.adapter.js.map +1 -1
- package/dist/image-exif-clear.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear.adapter.js.map +1 -1
- package/dist/image-formatter.adapter.d.ts.map +1 -1
- package/dist/image-formatter.adapter.js.map +1 -1
- package/dist/image-generator-web-view.adapter.d.ts.map +1 -1
- package/dist/image-generator-web-view.adapter.js.map +1 -1
- package/dist/image-grayscale.adapter.d.ts.map +1 -1
- package/dist/image-grayscale.adapter.js.map +1 -1
- package/dist/image-info.adapter.d.ts.map +1 -1
- package/dist/image-info.adapter.js +1 -0
- package/dist/image-info.adapter.js.map +1 -1
- package/dist/image-processor.adapter.d.ts.map +1 -1
- package/dist/image-processor.adapter.js.map +1 -1
- package/dist/image-resizer.adapter.d.ts.map +1 -1
- package/dist/image-resizer.adapter.js.map +1 -1
- package/dist/index.d.ts +7 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -10
- package/dist/index.js.map +1 -1
- package/dist/job-claimer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-claimer-sqlite.adapter.js.map +1 -1
- package/dist/job-completer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-completer-sqlite.adapter.js.map +1 -1
- package/dist/job-enqueuer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-enqueuer-sqlite.adapter.js.map +1 -1
- package/dist/job-failer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-failer-sqlite.adapter.js.map +1 -1
- package/dist/job-pruner-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-pruner-sqlite.adapter.js.map +1 -1
- package/dist/job-queue-sqlite-store.service.d.ts.map +1 -1
- package/dist/job-queue-sqlite-store.service.js +1 -0
- package/dist/job-queue-sqlite-store.service.js.map +1 -1
- package/dist/job-queue-stats-provider-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-queue-stats-provider-sqlite.adapter.js.map +1 -1
- package/dist/job-requeuer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-requeuer-sqlite.adapter.js.map +1 -1
- package/dist/logger-noop.adapter.js +1 -1
- package/dist/logger-noop.adapter.js.map +1 -1
- package/dist/logger-stats-provider-noop.adapter.js +1 -1
- package/dist/logger-stats-provider-noop.adapter.js.map +1 -1
- package/dist/logger-stats-provider.port.d.ts +1 -1
- package/dist/logger-stats-provider.port.d.ts.map +1 -1
- package/dist/markdown-generator.adapter.d.ts.map +1 -1
- package/dist/markdown-generator.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-binary.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-binary.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-sqlite.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-sqlite.adapter.js.map +1 -1
- package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.js +1 -0
- package/dist/remote-file-storage-disk.adapter.js.map +1 -1
- package/dist/request-context-hono.adapter.d.ts.map +1 -1
- package/dist/request-context-hono.adapter.js +5 -13
- package/dist/request-context-hono.adapter.js.map +1 -1
- package/dist/sleeper-system.adapter.d.ts.map +1 -1
- package/dist/sleeper-system.adapter.js.map +1 -1
- package/dist/static-files-hono.service.d.ts.map +1 -1
- package/dist/static-files-hono.service.js.map +1 -1
- package/dist/webhook-signature-creator-sha256.strategy.d.ts.map +1 -1
- package/dist/webhook-signature-creator-sha256.strategy.js +1 -0
- package/dist/webhook-signature-creator-sha256.strategy.js.map +1 -1
- package/dist/woodchopper-dispatcher-sync.strategy.d.ts.map +1 -1
- package/dist/woodchopper-dispatcher-sync.strategy.js +3 -1
- package/dist/woodchopper-dispatcher-sync.strategy.js.map +1 -1
- package/dist/woodchopper-formatter-human.strategy.d.ts +6 -0
- package/dist/woodchopper-formatter-human.strategy.d.ts.map +1 -0
- package/dist/woodchopper-formatter-human.strategy.js +6 -0
- package/dist/woodchopper-formatter-human.strategy.js.map +1 -0
- package/dist/woodchopper-formatter-json-raw.strategy.d.ts +6 -0
- package/dist/woodchopper-formatter-json-raw.strategy.d.ts.map +1 -0
- package/dist/woodchopper-formatter-json-raw.strategy.js +6 -0
- package/dist/woodchopper-formatter-json-raw.strategy.js.map +1 -0
- package/dist/woodchopper-formatter-json.strategy.d.ts +6 -0
- package/dist/woodchopper-formatter-json.strategy.d.ts.map +1 -0
- package/dist/woodchopper-formatter-json.strategy.js +6 -0
- package/dist/woodchopper-formatter-json.strategy.js.map +1 -0
- package/dist/woodchopper-formatter.strategy.d.ts +5 -0
- package/dist/woodchopper-formatter.strategy.d.ts.map +1 -0
- package/dist/woodchopper-formatter.strategy.js +2 -0
- package/dist/woodchopper-formatter.strategy.js.map +1 -0
- package/dist/woodchopper-sink-buffered-stderr.strategy.d.ts +5 -0
- package/dist/woodchopper-sink-buffered-stderr.strategy.d.ts.map +1 -0
- package/dist/woodchopper-sink-buffered-stderr.strategy.js +7 -0
- package/dist/woodchopper-sink-buffered-stderr.strategy.js.map +1 -0
- package/dist/woodchopper-sink-buffered-stdout.strategy.d.ts +5 -0
- package/dist/woodchopper-sink-buffered-stdout.strategy.d.ts.map +1 -0
- package/dist/woodchopper-sink-buffered-stdout.strategy.js +7 -0
- package/dist/woodchopper-sink-buffered-stdout.strategy.js.map +1 -0
- package/dist/woodchopper-sink-buffered.strategy.d.ts +26 -0
- package/dist/woodchopper-sink-buffered.strategy.d.ts.map +1 -0
- package/dist/woodchopper-sink-buffered.strategy.js +48 -0
- package/dist/woodchopper-sink-buffered.strategy.js.map +1 -0
- package/dist/woodchopper-sink-collecting.strategy.d.ts +1 -0
- package/dist/woodchopper-sink-collecting.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-collecting.strategy.js +1 -0
- package/dist/woodchopper-sink-collecting.strategy.js.map +1 -1
- package/dist/woodchopper-sink-noop.strategy.d.ts +1 -0
- package/dist/woodchopper-sink-noop.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-noop.strategy.js +1 -0
- package/dist/woodchopper-sink-noop.strategy.js.map +1 -1
- package/dist/woodchopper-sink-stderr.strategy.d.ts +4 -0
- package/dist/woodchopper-sink-stderr.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-stderr.strategy.js +6 -1
- package/dist/woodchopper-sink-stderr.strategy.js.map +1 -1
- package/dist/woodchopper-sink-stdout.strategy.d.ts +4 -0
- package/dist/woodchopper-sink-stdout.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-stdout.strategy.js +6 -1
- package/dist/woodchopper-sink-stdout.strategy.js.map +1 -1
- package/dist/woodchopper-sink.strategy.d.ts +1 -0
- package/dist/woodchopper-sink.strategy.d.ts.map +1 -1
- package/dist/woodchopper-stats.service.d.ts +3 -3
- package/dist/woodchopper-stats.service.d.ts.map +1 -1
- package/dist/woodchopper-stats.service.js +4 -4
- package/dist/woodchopper-stats.service.js.map +1 -1
- package/dist/woodchopper.d.ts.map +1 -1
- package/dist/woodchopper.js +3 -3
- package/dist/woodchopper.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +7 -4
- package/src/antivirus-clamav.adapter.ts +1 -0
- package/src/better-auth-logger.service.ts +14 -31
- package/src/cache-repository-redis.adapter.ts +1 -0
- package/src/clock-system.adapter.ts +2 -1
- package/src/cron-expression.vo.ts +1 -0
- package/src/cron-scheduler.adapter.ts +1 -0
- package/src/file-cleaner-forgiving.adapter.ts +1 -0
- package/src/file-cleaner.adapter.ts +1 -0
- package/src/file-copier.adapter.ts +1 -0
- package/src/file-draft-zip.service.ts +1 -2
- package/src/file-inspection.adapter.ts +1 -0
- package/src/file-reader-json-forgiving.adapter.ts +1 -0
- package/src/file-reader-json.adapter.ts +1 -0
- package/src/file-reader-raw-forgiving.adapter.ts +1 -0
- package/src/file-reader-raw.adapter.ts +1 -0
- package/src/file-reader-text-forgiving.adapter.ts +1 -0
- package/src/file-reader-text.adapter.ts +1 -0
- package/src/file-writer-forgiving.adapter.ts +1 -0
- package/src/file-writer.adapter.ts +1 -0
- package/src/graceful-shutdown.service.ts +3 -0
- package/src/gzip.adapter.ts +1 -0
- package/src/image-blur.adapter.ts +1 -0
- package/src/image-compressor.adapter.ts +1 -0
- package/src/image-exif-clear.adapter.ts +1 -0
- package/src/image-formatter.adapter.ts +1 -0
- package/src/image-generator-web-view.adapter.ts +1 -0
- package/src/image-grayscale.adapter.ts +1 -0
- package/src/image-info.adapter.ts +1 -0
- package/src/image-processor.adapter.ts +1 -0
- package/src/image-resizer.adapter.ts +1 -0
- package/src/index.ts +7 -10
- package/src/job-claimer-sqlite.adapter.ts +1 -0
- package/src/job-completer-sqlite.adapter.ts +1 -0
- package/src/job-enqueuer-sqlite.adapter.ts +1 -0
- package/src/job-failer-sqlite.adapter.ts +1 -0
- package/src/job-pruner-sqlite.adapter.ts +1 -0
- package/src/job-queue-sqlite-store.service.ts +1 -0
- package/src/job-queue-stats-provider-sqlite.adapter.ts +1 -0
- package/src/job-requeuer-sqlite.adapter.ts +1 -0
- package/src/logger-noop.adapter.ts +1 -1
- package/src/logger-stats-provider-noop.adapter.ts +1 -1
- package/src/logger-stats-provider.port.ts +1 -1
- package/src/markdown-generator.adapter.ts +1 -0
- package/src/prerequisite-verifier-binary.adapter.ts +1 -0
- package/src/prerequisite-verifier-sqlite.adapter.ts +1 -0
- package/src/remote-file-storage-disk.adapter.ts +1 -0
- package/src/request-context-hono.adapter.ts +5 -18
- package/src/sleeper-system.adapter.ts +1 -0
- package/src/static-files-hono.service.ts +1 -0
- package/src/webhook-signature-creator-sha256.strategy.ts +1 -0
- package/src/woodchopper-dispatcher-sync.strategy.ts +3 -1
- package/src/woodchopper-formatter-human.strategy.ts +8 -0
- package/src/woodchopper-formatter-json-raw.strategy.ts +8 -0
- package/src/woodchopper-formatter-json.strategy.ts +8 -0
- package/src/woodchopper-formatter.strategy.ts +5 -0
- package/src/woodchopper-sink-buffered-stderr.strategy.ts +7 -0
- package/src/woodchopper-sink-buffered-stdout.strategy.ts +7 -0
- package/src/woodchopper-sink-buffered.strategy.ts +57 -0
- package/src/woodchopper-sink-collecting.strategy.ts +2 -0
- package/src/woodchopper-sink-noop.strategy.ts +2 -0
- package/src/woodchopper-sink-stderr.strategy.ts +6 -1
- package/src/woodchopper-sink-stdout.strategy.ts +6 -1
- package/src/woodchopper-sink.strategy.ts +2 -0
- package/src/woodchopper-stats.service.ts +4 -4
- package/src/woodchopper.ts +3 -4
- package/dist/woodchopper-dispatcher-async.strategy.d.ts +0 -19
- package/dist/woodchopper-dispatcher-async.strategy.d.ts.map +0 -1
- package/dist/woodchopper-dispatcher-async.strategy.js +0 -71
- package/dist/woodchopper-dispatcher-async.strategy.js.map +0 -1
- package/dist/woodchopper-sink-stderr-raw.strategy.d.ts +0 -6
- package/dist/woodchopper-sink-stderr-raw.strategy.d.ts.map +0 -1
- package/dist/woodchopper-sink-stderr-raw.strategy.js +0 -6
- package/dist/woodchopper-sink-stderr-raw.strategy.js.map +0 -1
- package/dist/woodchopper-sink-stdout-human.strategy.d.ts +0 -6
- package/dist/woodchopper-sink-stdout-human.strategy.d.ts.map +0 -1
- package/dist/woodchopper-sink-stdout-human.strategy.js +0 -6
- package/dist/woodchopper-sink-stdout-human.strategy.js.map +0 -1
- package/dist/woodchopper-sink-stdout-raw.strategy.d.ts +0 -6
- package/dist/woodchopper-sink-stdout-raw.strategy.d.ts.map +0 -1
- package/dist/woodchopper-sink-stdout-raw.strategy.js +0 -6
- package/dist/woodchopper-sink-stdout-raw.strategy.js.map +0 -1
- package/src/woodchopper-dispatcher-async.strategy.ts +0 -86
- package/src/woodchopper-sink-stderr-raw.strategy.ts +0 -8
- package/src/woodchopper-sink-stdout-human.strategy.ts +0 -8
- package/src/woodchopper-sink-stdout-raw.strategy.ts +0 -8
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
import type { LoggerEntry } from "./logger.port";
|
|
3
|
+
import type { WoodchopperFormatterStrategy } from "./woodchopper-formatter.strategy";
|
|
4
|
+
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Batches formatted entries into a single write, which amortizes the syscall - the dominant
|
|
8
|
+
* cost of writing logs out.
|
|
9
|
+
*
|
|
10
|
+
* Nothing is ever held past the current event loop turn, so a burst of logs costs one write
|
|
11
|
+
* while a lone log still reaches its destination immediately. The cap bounds memory when a
|
|
12
|
+
* synchronous loop never yields.
|
|
13
|
+
*
|
|
14
|
+
* Subclasses supply the destination and nothing else.
|
|
15
|
+
*/
|
|
16
|
+
export abstract class WoodchopperSinkBuffered implements WoodchopperSinkStrategy {
|
|
17
|
+
private readonly buffer: Array<string> = [];
|
|
18
|
+
private scheduled?: ReturnType<typeof setImmediate>;
|
|
19
|
+
|
|
20
|
+
constructor(
|
|
21
|
+
private readonly formatter: WoodchopperFormatterStrategy,
|
|
22
|
+
private readonly cap: tools.IntegerPositiveType = tools.Int.positive(256),
|
|
23
|
+
) {}
|
|
24
|
+
|
|
25
|
+
protected abstract emit(payload: string): void;
|
|
26
|
+
|
|
27
|
+
write(entry: LoggerEntry): void {
|
|
28
|
+
this.buffer.push(this.formatter.format(entry));
|
|
29
|
+
|
|
30
|
+
if (this.buffer.length >= this.cap) {
|
|
31
|
+
this.flush();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (this.scheduled) return;
|
|
35
|
+
|
|
36
|
+
this.scheduled = setImmediate(() => {
|
|
37
|
+
this.scheduled = undefined;
|
|
38
|
+
this.flush();
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
close(): void {
|
|
43
|
+
if (this.scheduled) clearImmediate(this.scheduled);
|
|
44
|
+
this.scheduled = undefined;
|
|
45
|
+
|
|
46
|
+
this.flush();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private flush(): void {
|
|
50
|
+
if (this.buffer.length === 0) return;
|
|
51
|
+
|
|
52
|
+
const payload = this.buffer.join("");
|
|
53
|
+
this.buffer.length = 0;
|
|
54
|
+
|
|
55
|
+
this.emit(payload);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { LoggerEntry } from "./logger.port";
|
|
2
|
+
import type { WoodchopperFormatterStrategy } from "./woodchopper-formatter.strategy";
|
|
2
3
|
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
4
|
|
|
4
5
|
export class WoodchopperSinkStderr implements WoodchopperSinkStrategy {
|
|
6
|
+
constructor(private readonly formatter: WoodchopperFormatterStrategy) {}
|
|
7
|
+
|
|
5
8
|
write(entry: LoggerEntry): void {
|
|
6
|
-
process.stderr.write(
|
|
9
|
+
process.stderr.write(this.formatter.format(entry));
|
|
7
10
|
}
|
|
11
|
+
|
|
12
|
+
close(): void {}
|
|
8
13
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { LoggerEntry } from "./logger.port";
|
|
2
|
+
import type { WoodchopperFormatterStrategy } from "./woodchopper-formatter.strategy";
|
|
2
3
|
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
4
|
|
|
4
5
|
export class WoodchopperSinkStdout implements WoodchopperSinkStrategy {
|
|
6
|
+
constructor(private readonly formatter: WoodchopperFormatterStrategy) {}
|
|
7
|
+
|
|
5
8
|
write(entry: LoggerEntry): void {
|
|
6
|
-
process.stdout.write(
|
|
9
|
+
process.stdout.write(this.formatter.format(entry));
|
|
7
10
|
}
|
|
11
|
+
|
|
12
|
+
close(): void {}
|
|
8
13
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export class WoodchopperStats {
|
|
2
|
-
private
|
|
2
|
+
private accepted = 0;
|
|
3
3
|
private dropped = 0;
|
|
4
4
|
private deliveryFailures = 0;
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
this.
|
|
6
|
+
recordAccepted(): void {
|
|
7
|
+
this.accepted++;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
recordDropped(): void {
|
|
@@ -16,6 +16,6 @@ export class WoodchopperStats {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
get snapshot() {
|
|
19
|
-
return {
|
|
19
|
+
return { accepted: this.accepted, dropped: this.dropped, deliveryFailures: this.deliveryFailures };
|
|
20
20
|
}
|
|
21
21
|
}
|
package/src/woodchopper.ts
CHANGED
|
@@ -73,7 +73,8 @@ export class Woodchopper implements LoggerPort, LoggerStatsProviderPort {
|
|
|
73
73
|
let withInjectedFields: LoggerEntry;
|
|
74
74
|
try {
|
|
75
75
|
withInjectedFields = {
|
|
76
|
-
|
|
76
|
+
// biome-ignore lint: lint/style/noRestrictedGlobals
|
|
77
|
+
timestamp: new Date(this.deps.Clock.now().ms).toISOString(),
|
|
77
78
|
level,
|
|
78
79
|
app: this.config.app,
|
|
79
80
|
environment: this.config.environment,
|
|
@@ -96,9 +97,7 @@ export class Woodchopper implements LoggerPort, LoggerStatsProviderPort {
|
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
this.config.dispatcher.dispatch(final) ? this.stats.recordWritten() : this.stats.recordDropped();
|
|
100
|
+
this.config.dispatcher.dispatch(withRedaction) ? this.stats.recordAccepted() : this.stats.recordDropped();
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
error: LoggerPort["error"] = (entry) => this.log(LogLevelEnum.error, entry);
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import * as tools from "@bgord/tools";
|
|
2
|
-
import type { LoggerEntry } from "./logger.port";
|
|
3
|
-
import type { WoodchopperDispatcher } from "./woodchopper-dispatcher.strategy";
|
|
4
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
5
|
-
export declare class WoodchopperDispatcherAsync implements WoodchopperDispatcher {
|
|
6
|
-
private readonly sink;
|
|
7
|
-
private readonly capacity;
|
|
8
|
-
onError?: (error: unknown) => void;
|
|
9
|
-
private readonly buffer;
|
|
10
|
-
private state;
|
|
11
|
-
private wake?;
|
|
12
|
-
constructor(sink: WoodchopperSinkStrategy, capacity?: tools.IntegerPositiveType);
|
|
13
|
-
dispatch(entry: LoggerEntry): boolean;
|
|
14
|
-
close(): void;
|
|
15
|
-
private run;
|
|
16
|
-
private wakeConsumer;
|
|
17
|
-
private waitForEntry;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=woodchopper-dispatcher-async.strategy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-dispatcher-async.strategy.d.ts","sourceRoot":"","sources":["../src/woodchopper-dispatcher-async.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAO3E,qBAAa,0BAA2B,YAAW,qBAAqB;IASpE,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAT3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,KAAK,CAA2C;IAExD,OAAO,CAAC,IAAI,CAAC,CAAa;IAE1B,YACmB,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,GAAE,KAAK,CAAC,mBAA6C,EAG/E;IAED,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CASpC;IAED,KAAK,IAAI,IAAI,CAmBZ;YAEa,GAAG;IAkBjB,OAAO,CAAC,YAAY;YAKN,YAAY;CAK3B"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import * as tools from "@bgord/tools";
|
|
2
|
-
var WoodchopperDispatcherAsyncState;
|
|
3
|
-
(function (WoodchopperDispatcherAsyncState) {
|
|
4
|
-
WoodchopperDispatcherAsyncState["running"] = "running";
|
|
5
|
-
WoodchopperDispatcherAsyncState["closed"] = "closed";
|
|
6
|
-
})(WoodchopperDispatcherAsyncState || (WoodchopperDispatcherAsyncState = {}));
|
|
7
|
-
export class WoodchopperDispatcherAsync {
|
|
8
|
-
sink;
|
|
9
|
-
capacity;
|
|
10
|
-
onError;
|
|
11
|
-
buffer = [];
|
|
12
|
-
state = WoodchopperDispatcherAsyncState.running;
|
|
13
|
-
wake;
|
|
14
|
-
constructor(sink, capacity = tools.Int.positive(256)) {
|
|
15
|
-
this.sink = sink;
|
|
16
|
-
this.capacity = capacity;
|
|
17
|
-
this.run();
|
|
18
|
-
}
|
|
19
|
-
dispatch(entry) {
|
|
20
|
-
if (this.state === WoodchopperDispatcherAsyncState.closed)
|
|
21
|
-
return false;
|
|
22
|
-
if (this.buffer.length >= this.capacity)
|
|
23
|
-
return false;
|
|
24
|
-
this.buffer.push(entry);
|
|
25
|
-
this.wakeConsumer();
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
close() {
|
|
29
|
-
// Stryker disable all
|
|
30
|
-
if (this.state === WoodchopperDispatcherAsyncState.closed)
|
|
31
|
-
return;
|
|
32
|
-
// Stryker restore all
|
|
33
|
-
this.state = WoodchopperDispatcherAsyncState.closed;
|
|
34
|
-
for (const entry of this.buffer) {
|
|
35
|
-
try {
|
|
36
|
-
this.sink.write(entry);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
this.onError?.(error);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
this.buffer.length = 0;
|
|
43
|
-
// wake so the loop can exit immediately
|
|
44
|
-
this.wakeConsumer();
|
|
45
|
-
}
|
|
46
|
-
async run() {
|
|
47
|
-
while (this.state === WoodchopperDispatcherAsyncState.running) {
|
|
48
|
-
if (this.buffer.length === 0) {
|
|
49
|
-
await this.waitForEntry();
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
const entry = this.buffer.shift();
|
|
53
|
-
try {
|
|
54
|
-
this.sink.write(entry);
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
this.onError?.(error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
wakeConsumer() {
|
|
62
|
-
this.wake?.();
|
|
63
|
-
this.wake = undefined;
|
|
64
|
-
}
|
|
65
|
-
async waitForEntry() {
|
|
66
|
-
await new Promise((resolve) => {
|
|
67
|
-
this.wake = resolve;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=woodchopper-dispatcher-async.strategy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-dispatcher-async.strategy.js","sourceRoot":"","sources":["../src/woodchopper-dispatcher-async.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAKtC,IAAK,+BAGJ;AAHD,WAAK,+BAA+B;IAClC,sDAAmB,CAAA;IACnB,oDAAiB,CAAA;AACnB,CAAC,EAHI,+BAA+B,KAA/B,+BAA+B,QAGnC;AAED,MAAM,OAAO,0BAA0B;IASlB,IAAI;IACJ,QAAQ;IAT3B,OAAO,CAA4B;IAElB,MAAM,GAAuB,EAAE,CAAC;IACzC,KAAK,GAAG,+BAA+B,CAAC,OAAO,CAAC;IAEhD,IAAI,CAAc;IAE1B,YACmB,IAA6B,EAC7B,QAAQ,GAA8B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAD7D,IAAI;wBACJ,QAAQ;QAEzB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,KAAkB;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,+BAA+B,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,sBAAsB;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,+BAA+B,CAAC,MAAM;YAAE,OAAO;QAClE,sBAAsB;QAEtB,IAAI,CAAC,KAAK,GAAG,+BAA+B,CAAC,MAAM,CAAC;QAEpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,wCAAwC;QACxC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,GAAG;QACf,OAAO,IAAI,CAAC,KAAK,KAAK,+BAA+B,CAAC,OAAO,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAE1B,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAElC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAoB,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { LoggerEntry } from "./logger.port";
|
|
2
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
|
-
export declare class WoodchopperSinkStderrRaw implements WoodchopperSinkStrategy {
|
|
4
|
-
write(entry: LoggerEntry): void;
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=woodchopper-sink-stderr-raw.strategy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sink-stderr-raw.strategy.d.ts","sourceRoot":"","sources":["../src/woodchopper-sink-stderr-raw.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,qBAAa,wBAAyB,YAAW,uBAAuB;IACtE,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAE9B;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sink-stderr-raw.strategy.js","sourceRoot":"","sources":["../src/woodchopper-sink-stderr-raw.strategy.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,KAAkB;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { LoggerEntry } from "./logger.port";
|
|
2
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
|
-
export declare class WoodchopperSinkStdoutHuman implements WoodchopperSinkStrategy {
|
|
4
|
-
write(entry: LoggerEntry): void;
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=woodchopper-sink-stdout-human.strategy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sink-stdout-human.strategy.d.ts","sourceRoot":"","sources":["../src/woodchopper-sink-stdout-human.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,qBAAa,0BAA2B,YAAW,uBAAuB;IACxE,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAE9B;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sink-stdout-human.strategy.js","sourceRoot":"","sources":["../src/woodchopper-sink-stdout-human.strategy.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,0BAA0B;IACrC,KAAK,CAAC,KAAkB;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { LoggerEntry } from "./logger.port";
|
|
2
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
|
-
export declare class WoodchopperSinkStdoutRaw implements WoodchopperSinkStrategy {
|
|
4
|
-
write(entry: LoggerEntry): void;
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=woodchopper-sink-stdout-raw.strategy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sink-stdout-raw.strategy.d.ts","sourceRoot":"","sources":["../src/woodchopper-sink-stdout-raw.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,qBAAa,wBAAyB,YAAW,uBAAuB;IACtE,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAE9B;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sink-stdout-raw.strategy.js","sourceRoot":"","sources":["../src/woodchopper-sink-stdout-raw.strategy.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,KAAkB;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import * as tools from "@bgord/tools";
|
|
2
|
-
import type { LoggerEntry } from "./logger.port";
|
|
3
|
-
import type { WoodchopperDispatcher } from "./woodchopper-dispatcher.strategy";
|
|
4
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
5
|
-
|
|
6
|
-
enum WoodchopperDispatcherAsyncState {
|
|
7
|
-
running = "running",
|
|
8
|
-
closed = "closed",
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export class WoodchopperDispatcherAsync implements WoodchopperDispatcher {
|
|
12
|
-
onError?: (error: unknown) => void;
|
|
13
|
-
|
|
14
|
-
private readonly buffer: Array<LoggerEntry> = [];
|
|
15
|
-
private state = WoodchopperDispatcherAsyncState.running;
|
|
16
|
-
|
|
17
|
-
private wake?: () => void;
|
|
18
|
-
|
|
19
|
-
constructor(
|
|
20
|
-
private readonly sink: WoodchopperSinkStrategy,
|
|
21
|
-
private readonly capacity: tools.IntegerPositiveType = tools.Int.positive(256),
|
|
22
|
-
) {
|
|
23
|
-
this.run();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
dispatch(entry: LoggerEntry): boolean {
|
|
27
|
-
if (this.state === WoodchopperDispatcherAsyncState.closed) return false;
|
|
28
|
-
if (this.buffer.length >= this.capacity) return false;
|
|
29
|
-
|
|
30
|
-
this.buffer.push(entry);
|
|
31
|
-
|
|
32
|
-
this.wakeConsumer();
|
|
33
|
-
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
close(): void {
|
|
38
|
-
// Stryker disable all
|
|
39
|
-
if (this.state === WoodchopperDispatcherAsyncState.closed) return;
|
|
40
|
-
// Stryker restore all
|
|
41
|
-
|
|
42
|
-
this.state = WoodchopperDispatcherAsyncState.closed;
|
|
43
|
-
|
|
44
|
-
for (const entry of this.buffer) {
|
|
45
|
-
try {
|
|
46
|
-
this.sink.write(entry);
|
|
47
|
-
} catch (error) {
|
|
48
|
-
this.onError?.(error);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
this.buffer.length = 0;
|
|
53
|
-
|
|
54
|
-
// wake so the loop can exit immediately
|
|
55
|
-
this.wakeConsumer();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
private async run(): Promise<void> {
|
|
59
|
-
while (this.state === WoodchopperDispatcherAsyncState.running) {
|
|
60
|
-
if (this.buffer.length === 0) {
|
|
61
|
-
await this.waitForEntry();
|
|
62
|
-
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const entry = this.buffer.shift();
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
this.sink.write(entry as LoggerEntry);
|
|
70
|
-
} catch (error) {
|
|
71
|
-
this.onError?.(error);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
private wakeConsumer() {
|
|
77
|
-
this.wake?.();
|
|
78
|
-
this.wake = undefined;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private async waitForEntry() {
|
|
82
|
-
await new Promise<void>((resolve) => {
|
|
83
|
-
this.wake = resolve;
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { LoggerEntry } from "./logger.port";
|
|
2
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
|
-
|
|
4
|
-
export class WoodchopperSinkStderrRaw implements WoodchopperSinkStrategy {
|
|
5
|
-
write(entry: LoggerEntry): void {
|
|
6
|
-
process.stderr.write(JSON.stringify(entry));
|
|
7
|
-
}
|
|
8
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { LoggerEntry } from "./logger.port";
|
|
2
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
|
-
|
|
4
|
-
export class WoodchopperSinkStdoutHuman implements WoodchopperSinkStrategy {
|
|
5
|
-
write(entry: LoggerEntry): void {
|
|
6
|
-
process.stdout.write(`${JSON.stringify(entry, null, 2)}\n`);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { LoggerEntry } from "./logger.port";
|
|
2
|
-
import type { WoodchopperSinkStrategy } from "./woodchopper-sink.strategy";
|
|
3
|
-
|
|
4
|
-
export class WoodchopperSinkStdoutRaw implements WoodchopperSinkStrategy {
|
|
5
|
-
write(entry: LoggerEntry): void {
|
|
6
|
-
process.stdout.write(JSON.stringify(entry));
|
|
7
|
-
}
|
|
8
|
-
}
|