@livestore/utils-dev 0.3.1 → 0.3.2-dev.1

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.
@@ -0,0 +1,14 @@
1
+ import { Layer, Logger } from '@livestore/utils/effect';
2
+ export declare const makeFileLogger: (logFilePath: string, options?: {
3
+ readonly threadName: string;
4
+ readonly colors?: boolean;
5
+ }) => Layer.Layer<never, never, never>;
6
+ export declare const defaultDateFormat: (date: Date) => string;
7
+ export declare const structuredMessage: (u: unknown) => unknown;
8
+ export declare const prettyLoggerTty: (options: {
9
+ readonly colors: boolean;
10
+ readonly stderr: boolean;
11
+ readonly formatDate: (date: Date) => string;
12
+ readonly onLog?: (str: string) => void;
13
+ }) => Logger.Logger<unknown, string>;
14
+ //# sourceMappingURL=FileLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileLogger.d.ts","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,EAEL,MAAM,EAIP,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,cAAc,GACzB,aAAa,MAAM,EACnB,UAAU;IACR,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B,qCAqBA,CAAA;AAmCH,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,KAAG,MAI8B,CAAA;AAE7E,eAAO,MAAM,iBAAiB,GAAI,GAAG,OAAO,KAAG,OAW9C,CAAA;AAqBD,eAAO,MAAM,eAAe,GAAI,SAAS;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,mCAoFA,CAAA"}
@@ -0,0 +1,151 @@
1
+ import * as fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import util from 'node:util';
4
+ import { Cause, Effect, FiberId, HashMap, Inspectable, Layer, List, Logger, LogSpan, ReadonlyArray, } from '@livestore/utils/effect';
5
+ export const makeFileLogger = (logFilePath, options) => Layer.unwrapScoped(Effect.gen(function* () {
6
+ yield* Effect.sync(() => fs.mkdirSync(path.dirname(logFilePath), { recursive: true }));
7
+ const logFile = yield* Effect.acquireRelease(Effect.sync(() => fs.openSync(logFilePath, 'a', 0o666)), (fd) => Effect.sync(() => fs.closeSync(fd)));
8
+ return Logger.replace(Logger.defaultLogger, prettyLoggerTty({
9
+ colors: options?.colors ?? false,
10
+ stderr: false,
11
+ formatDate: (date) => `${defaultDateFormat(date)} ${options?.threadName ?? ''}`,
12
+ onLog: (str) => fs.writeSync(logFile, str),
13
+ }));
14
+ }));
15
+ const withColor = (text, ...colors) => {
16
+ let out = '';
17
+ for (let i = 0; i < colors.length; i++) {
18
+ out += `\x1b[${colors[i]}m`;
19
+ }
20
+ return `${out}${text}\x1b[0m`;
21
+ };
22
+ const withColorNoop = (text, ..._colors) => text;
23
+ const colors = {
24
+ bold: '1',
25
+ red: '31',
26
+ green: '32',
27
+ yellow: '33',
28
+ blue: '34',
29
+ cyan: '36',
30
+ white: '37',
31
+ gray: '90',
32
+ black: '30',
33
+ bgBrightRed: '101',
34
+ };
35
+ const logLevelColors = {
36
+ None: [],
37
+ All: [],
38
+ Trace: [colors.gray],
39
+ Debug: [colors.blue],
40
+ Info: [colors.green],
41
+ Warning: [colors.yellow],
42
+ Error: [colors.red],
43
+ Fatal: [colors.bgBrightRed, colors.black],
44
+ };
45
+ export const defaultDateFormat = (date) => `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date
46
+ .getSeconds()
47
+ .toString()
48
+ .padStart(2, '0')}.${date.getMilliseconds().toString().padStart(3, '0')}`;
49
+ export const structuredMessage = (u) => {
50
+ switch (typeof u) {
51
+ case 'bigint':
52
+ case 'function':
53
+ case 'symbol': {
54
+ return String(u);
55
+ }
56
+ default: {
57
+ return Inspectable.toJSON(u);
58
+ }
59
+ }
60
+ };
61
+ const consoleLogToString = (...s) => {
62
+ if (s.length === 0)
63
+ return '';
64
+ const [first, ...rest] = s;
65
+ if (typeof first === 'string') {
66
+ return rest.length > 0 ? util.format(first, ...rest.map(structuredMessage)) : first;
67
+ }
68
+ return s
69
+ .map((v) => {
70
+ if (typeof v === 'string')
71
+ return v;
72
+ return util.inspect(structuredMessage(v), {
73
+ depth: 3,
74
+ colors: false,
75
+ compact: false,
76
+ breakLength: 120,
77
+ });
78
+ })
79
+ .join(' ');
80
+ };
81
+ export const prettyLoggerTty = (options) => {
82
+ const color = options.colors ? withColor : withColorNoop;
83
+ return Logger.make(({ annotations, cause, date, fiberId, logLevel, message: message_, spans }) => {
84
+ let str = '';
85
+ const log = (...s) => {
86
+ str += `${consoleLogToString(...s)}\n`;
87
+ options.onLog?.(str);
88
+ };
89
+ const logIndented = (...s) => {
90
+ str += `${consoleLogToString(...s).replace(/^/gm, ' ')}\n`;
91
+ options.onLog?.(str);
92
+ };
93
+ const message = ReadonlyArray.ensure(message_);
94
+ let firstLine = color(`[${options.formatDate(date)}]`, colors.white) +
95
+ ` ${color(logLevel.label, ...logLevelColors[logLevel._tag])}` +
96
+ ` (${FiberId.threadName(fiberId)})`;
97
+ if (List.isCons(spans)) {
98
+ const now = date.getTime();
99
+ const render = LogSpan.render(now);
100
+ for (const span of spans) {
101
+ firstLine += ` ${render(span)}`;
102
+ }
103
+ }
104
+ firstLine += ':';
105
+ let messageIndex = 0;
106
+ if (message.length > 0) {
107
+ const firstMaybeString = structuredMessage(message[0]);
108
+ if (typeof firstMaybeString === 'string') {
109
+ firstLine += ` ${color(firstMaybeString, colors.bold, colors.cyan)}`;
110
+ messageIndex++;
111
+ }
112
+ }
113
+ log(firstLine);
114
+ // if (!processIsBun) console.group()
115
+ if (!Cause.isEmpty(cause)) {
116
+ logIndented(Cause.pretty(cause, { renderErrorCause: true }));
117
+ }
118
+ if (messageIndex < message.length) {
119
+ for (; messageIndex < message.length; messageIndex++) {
120
+ const msg = message[messageIndex];
121
+ if (typeof msg === 'object' && msg !== null) {
122
+ logIndented(util.inspect(structuredMessage(msg), {
123
+ depth: 3,
124
+ colors: false,
125
+ compact: false,
126
+ breakLength: 120,
127
+ }));
128
+ }
129
+ else {
130
+ logIndented(Inspectable.redact(msg));
131
+ }
132
+ }
133
+ }
134
+ if (HashMap.size(annotations) > 0) {
135
+ for (const [key, value] of annotations) {
136
+ const formattedValue = typeof value === 'object' && value !== null
137
+ ? util.inspect(structuredMessage(value), {
138
+ depth: 3,
139
+ colors: false,
140
+ compact: false,
141
+ breakLength: 120,
142
+ })
143
+ : Inspectable.redact(value);
144
+ logIndented(color(`${key}:`, colors.bold, colors.white), formattedValue);
145
+ }
146
+ }
147
+ // if (!processIsBun) console.groupEnd()
148
+ return str;
149
+ });
150
+ };
151
+ //# sourceMappingURL=FileLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileLogger.js","sourceRoot":"","sources":["../../src/node/FileLogger.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { CommandExecutor, PlatformError, Tracer } from '@livestore/utils/effect';
2
2
  import { Effect, Layer, OtelTracer } from '@livestore/utils/effect';
3
3
  import * as otel from '@opentelemetry/api';
4
- export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
5
4
  export { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
5
+ export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
6
+ export * as FileLogger from './FileLogger.ts';
6
7
  export declare const OtelLiveHttp: ({ serviceName, rootSpanName, rootSpanAttributes, parentSpan, skipLogUrl, traceNodeBootstrap, }?: {
7
8
  serviceName?: string;
8
9
  rootSpanName?: string;
@@ -20,6 +21,7 @@ export declare const cmd: (commandInput: string | (string | undefined)[], option
20
21
  } | undefined) => Effect.Effect<CommandExecutor.ExitCode, PlatformError.PlatformError, CommandExecutor.CommandExecutor>;
21
22
  export declare const cmdText: (commandInput: string | (string | undefined)[], options?: {
22
23
  cwd?: string;
24
+ stderr?: 'inherit' | 'pipe';
23
25
  runInShell?: boolean;
24
26
  env?: Record<string, string | undefined>;
25
27
  }) => Effect.Effect<string, PlatformError.PlatformError, CommandExecutor.CommandExecutor>;
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAmB,MAAM,EAAY,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE9F,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAM1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAE9E,eAAO,MAAM,YAAY,GAAI,iGAO1B;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACxB,KAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CA4ExC,CAAA;AAEpC,eAAO,MAAM,oBAAoB,GAAI,WAAW,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,MAAM,MAAM,IAAI,CAAC,IAAI,oDAazF,CAAA;AAEH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,CAAC,IAAI,oDAqBhD,CAAA;AAEJ,eAAO,MAAM,GAAG,EAAE,CAChB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,CAAC,EACJ;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC,GACD,SAAS,KACV,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,eAAe,CAyBvG,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,CACpB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,KACvF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,eAAe,CAuBtF,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAmB,MAAM,EAAY,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE9F,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAM1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAE3E,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,eAAO,MAAM,YAAY,GAAI,iGAO1B;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACxB,KAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CA8ExC,CAAA;AAEpC,eAAO,MAAM,oBAAoB,GAAI,WAAW,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,MAAM,MAAM,IAAI,CAAC,IAAI,oDAazF,CAAA;AAEH,eAAO,MAAM,oBAAoB,GAAI,MAAM,IAAI,CAAC,IAAI,oDAqBhD,CAAA;AAEJ,eAAO,MAAM,GAAG,EAAE,CAChB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,CAAC,EACJ;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC,GACD,SAAS,KACV,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,eAAe,CAyBvG,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,CACpB,YAAY,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAC7C,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC,KACE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,eAAe,CAwBtF,CAAA"}
package/dist/node/mod.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { performance } from 'node:perf_hooks';
2
2
  import * as OtelNodeSdk from '@effect/opentelemetry/NodeSdk';
3
- import { IS_BUN, isNotUndefined, shouldNeverHappen } from '@livestore/utils';
3
+ import { IS_BUN, isNonEmptyString, isNotUndefined, shouldNeverHappen } from '@livestore/utils';
4
4
  import { Command, Config, Effect, identity, Layer, OtelTracer } from '@livestore/utils/effect';
5
5
  import { OtelLiveDummy } from '@livestore/utils/node';
6
6
  import * as otel from '@opentelemetry/api';
@@ -8,11 +8,12 @@ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
8
8
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
9
9
  import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
10
10
  import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
11
- export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
12
11
  export { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
12
+ export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
13
+ export * as FileLogger from "./FileLogger.js";
13
14
  export const OtelLiveHttp = ({ serviceName, rootSpanName, rootSpanAttributes, parentSpan, skipLogUrl, traceNodeBootstrap, } = {}) => Effect.gen(function* () {
14
15
  const configRes = yield* Config.all({
15
- exporterUrl: Config.string('OTEL_EXPORTER_OTLP_ENDPOINT'),
16
+ exporterUrl: Config.string('OTEL_EXPORTER_OTLP_ENDPOINT').pipe(Config.validate({ message: 'OTEL_EXPORTER_OTLP_ENDPOINT must be set', validation: isNonEmptyString })),
16
17
  serviceName: serviceName
17
18
  ? Config.succeed(serviceName)
18
19
  : Config.string('OTEL_SERVICE_NAME').pipe(Config.withDefault('livestore-utils-dev')),
@@ -22,7 +23,7 @@ export const OtelLiveHttp = ({ serviceName, rootSpanName, rootSpanAttributes, pa
22
23
  }).pipe(Effect.option);
23
24
  if (configRes._tag === 'None') {
24
25
  const RootSpanLive = Layer.span('DummyRoot', {});
25
- return RootSpanLive.pipe(Layer.provide(OtelLiveDummy));
26
+ return RootSpanLive.pipe(Layer.provideMerge(OtelLiveDummy));
26
27
  }
27
28
  const config = configRes.value;
28
29
  const resource = { serviceName: config.serviceName };
@@ -124,7 +125,8 @@ export const cmdText = Effect.fn('cmdText')(function* (commandInput, options) {
124
125
  const commandDebugStr = debugEnvStr + [command, ...args].join(' ');
125
126
  yield* Effect.logDebug(`Running '${commandDebugStr}' in '${cwd}'`);
126
127
  yield* Effect.annotateCurrentSpan({ 'span.label': commandDebugStr, command, cwd });
127
- return yield* Command.make(command, ...args).pipe(Command.stderr('inherit'), // Stream stderr to process.stderr
128
- Command.workingDirectory(cwd), options?.runInShell ? Command.runInShell(true) : identity, Command.env(options?.env ?? {}), Command.string);
128
+ return yield* Command.make(command, ...args).pipe(
129
+ // inherit = Stream stderr to process.stderr, pipe = Stream stderr to process.stdout
130
+ Command.stderr(options?.stderr ?? 'inherit'), Command.workingDirectory(cwd), options?.runInShell ? Command.runInShell(true) : identity, Command.env(options?.env ?? {}), Command.string);
129
131
  });
130
132
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/node/mod.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/utils-dev",
3
- "version": "0.3.1",
3
+ "version": "0.3.2-dev.1",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "./dist/node-vitest/polyfill.js"
@@ -8,27 +8,30 @@
8
8
  "exports": {
9
9
  "./node": {
10
10
  "types": "./dist/node/mod.d.ts",
11
+ "bun": "./src/node/mod.ts",
11
12
  "default": "./dist/node/mod.js"
12
13
  },
13
14
  "./node-vitest": {
14
15
  "types": "./dist/node-vitest/mod.d.ts",
16
+ "bun": "./src/node-vitest/mod.ts",
15
17
  "default": "./dist/node-vitest/mod.js"
16
18
  },
17
19
  "./node-vitest-polyfill": {
18
20
  "types": "./dist/node-vitest/polyfill.d.ts",
21
+ "bun": "./src/node-vitest/polyfill.ts",
19
22
  "default": "./dist/node-vitest/polyfill.js"
20
23
  }
21
24
  },
22
25
  "dependencies": {
23
- "@effect/opentelemetry": "0.48.4",
24
- "@effect/vitest": "0.22.2",
26
+ "@effect/opentelemetry": "0.53.11",
27
+ "@effect/vitest": "0.23.12",
25
28
  "@opentelemetry/api": "1.9.0",
26
29
  "@opentelemetry/exporter-metrics-otlp-http": "0.200.0",
27
30
  "@opentelemetry/exporter-trace-otlp-http": "0.200.0",
28
31
  "@opentelemetry/sdk-metrics": "2.0.0",
29
32
  "@opentelemetry/sdk-trace-base": "2.0.0",
30
33
  "@opentelemetry/sdk-trace-node": "2.0.0",
31
- "@livestore/utils": "0.3.1"
34
+ "@livestore/utils": "0.3.2-dev.1"
32
35
  },
33
36
  "devDependencies": {},
34
37
  "files": [
@@ -0,0 +1,206 @@
1
+ import * as fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import util from 'node:util'
4
+ import {
5
+ Cause,
6
+ Effect,
7
+ FiberId,
8
+ HashMap,
9
+ Inspectable,
10
+ Layer,
11
+ List,
12
+ Logger,
13
+ type LogLevel,
14
+ LogSpan,
15
+ ReadonlyArray,
16
+ } from '@livestore/utils/effect'
17
+
18
+ export const makeFileLogger = (
19
+ logFilePath: string,
20
+ options?: {
21
+ readonly threadName: string
22
+ readonly colors?: boolean
23
+ },
24
+ ) =>
25
+ Layer.unwrapScoped(
26
+ Effect.gen(function* () {
27
+ yield* Effect.sync(() => fs.mkdirSync(path.dirname(logFilePath), { recursive: true }))
28
+
29
+ const logFile = yield* Effect.acquireRelease(
30
+ Effect.sync(() => fs.openSync(logFilePath, 'a', 0o666)),
31
+ (fd) => Effect.sync(() => fs.closeSync(fd)),
32
+ )
33
+
34
+ return Logger.replace(
35
+ Logger.defaultLogger,
36
+ prettyLoggerTty({
37
+ colors: options?.colors ?? false,
38
+ stderr: false,
39
+ formatDate: (date) => `${defaultDateFormat(date)} ${options?.threadName ?? ''}`,
40
+ onLog: (str) => fs.writeSync(logFile, str),
41
+ }),
42
+ )
43
+ }),
44
+ )
45
+
46
+ const withColor = (text: string, ...colors: ReadonlyArray<string>) => {
47
+ let out = ''
48
+ for (let i = 0; i < colors.length; i++) {
49
+ out += `\x1b[${colors[i]}m`
50
+ }
51
+ return `${out}${text}\x1b[0m`
52
+ }
53
+ const withColorNoop = (text: string, ..._colors: ReadonlyArray<string>) => text
54
+
55
+ const colors = {
56
+ bold: '1',
57
+ red: '31',
58
+ green: '32',
59
+ yellow: '33',
60
+ blue: '34',
61
+ cyan: '36',
62
+ white: '37',
63
+ gray: '90',
64
+ black: '30',
65
+ bgBrightRed: '101',
66
+ } as const
67
+
68
+ const logLevelColors: Record<LogLevel.LogLevel['_tag'], ReadonlyArray<string>> = {
69
+ None: [],
70
+ All: [],
71
+ Trace: [colors.gray],
72
+ Debug: [colors.blue],
73
+ Info: [colors.green],
74
+ Warning: [colors.yellow],
75
+ Error: [colors.red],
76
+ Fatal: [colors.bgBrightRed, colors.black],
77
+ }
78
+
79
+ export const defaultDateFormat = (date: Date): string =>
80
+ `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date
81
+ .getSeconds()
82
+ .toString()
83
+ .padStart(2, '0')}.${date.getMilliseconds().toString().padStart(3, '0')}`
84
+
85
+ export const structuredMessage = (u: unknown): unknown => {
86
+ switch (typeof u) {
87
+ case 'bigint':
88
+ case 'function':
89
+ case 'symbol': {
90
+ return String(u)
91
+ }
92
+ default: {
93
+ return Inspectable.toJSON(u)
94
+ }
95
+ }
96
+ }
97
+
98
+ const consoleLogToString = (...s: any[]) => {
99
+ if (s.length === 0) return ''
100
+ const [first, ...rest] = s
101
+ if (typeof first === 'string') {
102
+ return rest.length > 0 ? util.format(first, ...rest.map(structuredMessage)) : first
103
+ }
104
+ return s
105
+ .map((v) => {
106
+ if (typeof v === 'string') return v
107
+ return util.inspect(structuredMessage(v), {
108
+ depth: 3,
109
+ colors: false,
110
+ compact: false,
111
+ breakLength: 120,
112
+ })
113
+ })
114
+ .join(' ')
115
+ }
116
+
117
+ export const prettyLoggerTty = (options: {
118
+ readonly colors: boolean
119
+ readonly stderr: boolean
120
+ readonly formatDate: (date: Date) => string
121
+ readonly onLog?: (str: string) => void
122
+ }) => {
123
+ const color = options.colors ? withColor : withColorNoop
124
+ return Logger.make<unknown, string>(({ annotations, cause, date, fiberId, logLevel, message: message_, spans }) => {
125
+ let str = ''
126
+
127
+ const log = (...s: any[]) => {
128
+ str += `${consoleLogToString(...s)}\n`
129
+ options.onLog?.(str)
130
+ }
131
+
132
+ const logIndented = (...s: any[]) => {
133
+ str += `${consoleLogToString(...s).replace(/^/gm, ' ')}\n`
134
+ options.onLog?.(str)
135
+ }
136
+
137
+ const message = ReadonlyArray.ensure(message_)
138
+
139
+ let firstLine =
140
+ color(`[${options.formatDate(date)}]`, colors.white) +
141
+ ` ${color(logLevel.label, ...logLevelColors[logLevel._tag])}` +
142
+ ` (${FiberId.threadName(fiberId)})`
143
+
144
+ if (List.isCons(spans)) {
145
+ const now = date.getTime()
146
+ const render = LogSpan.render(now)
147
+ for (const span of spans) {
148
+ firstLine += ` ${render(span)}`
149
+ }
150
+ }
151
+
152
+ firstLine += ':'
153
+ let messageIndex = 0
154
+ if (message.length > 0) {
155
+ const firstMaybeString = structuredMessage(message[0])
156
+ if (typeof firstMaybeString === 'string') {
157
+ firstLine += ` ${color(firstMaybeString, colors.bold, colors.cyan)}`
158
+ messageIndex++
159
+ }
160
+ }
161
+
162
+ log(firstLine)
163
+ // if (!processIsBun) console.group()
164
+
165
+ if (!Cause.isEmpty(cause)) {
166
+ logIndented(Cause.pretty(cause, { renderErrorCause: true }))
167
+ }
168
+
169
+ if (messageIndex < message.length) {
170
+ for (; messageIndex < message.length; messageIndex++) {
171
+ const msg = message[messageIndex]
172
+ if (typeof msg === 'object' && msg !== null) {
173
+ logIndented(
174
+ util.inspect(structuredMessage(msg), {
175
+ depth: 3,
176
+ colors: false,
177
+ compact: false,
178
+ breakLength: 120,
179
+ }),
180
+ )
181
+ } else {
182
+ logIndented(Inspectable.redact(msg))
183
+ }
184
+ }
185
+ }
186
+
187
+ if (HashMap.size(annotations) > 0) {
188
+ for (const [key, value] of annotations) {
189
+ const formattedValue =
190
+ typeof value === 'object' && value !== null
191
+ ? util.inspect(structuredMessage(value), {
192
+ depth: 3,
193
+ colors: false,
194
+ compact: false,
195
+ breakLength: 120,
196
+ })
197
+ : Inspectable.redact(value)
198
+ logIndented(color(`${key}:`, colors.bold, colors.white), formattedValue)
199
+ }
200
+ }
201
+
202
+ // if (!processIsBun) console.groupEnd()
203
+
204
+ return str
205
+ })
206
+ }
package/src/node/mod.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { performance } from 'node:perf_hooks'
2
2
 
3
3
  import * as OtelNodeSdk from '@effect/opentelemetry/NodeSdk'
4
- import { IS_BUN, isNotUndefined, shouldNeverHappen } from '@livestore/utils'
4
+ import { IS_BUN, isNonEmptyString, isNotUndefined, shouldNeverHappen } from '@livestore/utils'
5
5
  import type { CommandExecutor, PlatformError, Tracer } from '@livestore/utils/effect'
6
6
  import { Command, Config, Effect, identity, Layer, OtelTracer } from '@livestore/utils/effect'
7
7
  import { OtelLiveDummy } from '@livestore/utils/node'
@@ -11,8 +11,10 @@ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
11
11
  import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'
12
12
  import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
13
13
 
14
- export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
15
14
  export { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
15
+ export { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
16
+
17
+ export * as FileLogger from './FileLogger.ts'
16
18
 
17
19
  export const OtelLiveHttp = ({
18
20
  serviceName,
@@ -31,7 +33,9 @@ export const OtelLiveHttp = ({
31
33
  } = {}): Layer.Layer<OtelTracer.OtelTracer | Tracer.ParentSpan, never, never> =>
32
34
  Effect.gen(function* () {
33
35
  const configRes = yield* Config.all({
34
- exporterUrl: Config.string('OTEL_EXPORTER_OTLP_ENDPOINT'),
36
+ exporterUrl: Config.string('OTEL_EXPORTER_OTLP_ENDPOINT').pipe(
37
+ Config.validate({ message: 'OTEL_EXPORTER_OTLP_ENDPOINT must be set', validation: isNonEmptyString }),
38
+ ),
35
39
  serviceName: serviceName
36
40
  ? Config.succeed(serviceName)
37
41
  : Config.string('OTEL_SERVICE_NAME').pipe(Config.withDefault('livestore-utils-dev')),
@@ -42,7 +46,7 @@ export const OtelLiveHttp = ({
42
46
 
43
47
  if (configRes._tag === 'None') {
44
48
  const RootSpanLive = Layer.span('DummyRoot', {})
45
- return RootSpanLive.pipe(Layer.provide(OtelLiveDummy))
49
+ return RootSpanLive.pipe(Layer.provideMerge(OtelLiveDummy)) as any
46
50
  }
47
51
 
48
52
  const config = configRes.value
@@ -182,7 +186,12 @@ export const cmd: (
182
186
 
183
187
  export const cmdText: (
184
188
  commandInput: string | (string | undefined)[],
185
- options?: { cwd?: string; runInShell?: boolean; env?: Record<string, string | undefined> },
189
+ options?: {
190
+ cwd?: string
191
+ stderr?: 'inherit' | 'pipe'
192
+ runInShell?: boolean
193
+ env?: Record<string, string | undefined>
194
+ },
186
195
  ) => Effect.Effect<string, PlatformError.PlatformError, CommandExecutor.CommandExecutor> = Effect.fn('cmdText')(
187
196
  function* (commandInput, options) {
188
197
  const cwd = options?.cwd ?? process.env.WORKSPACE_ROOT ?? shouldNeverHappen('WORKSPACE_ROOT is not set')
@@ -199,7 +208,8 @@ export const cmdText: (
199
208
  yield* Effect.annotateCurrentSpan({ 'span.label': commandDebugStr, command, cwd })
200
209
 
201
210
  return yield* Command.make(command!, ...args).pipe(
202
- Command.stderr('inherit'), // Stream stderr to process.stderr
211
+ // inherit = Stream stderr to process.stderr, pipe = Stream stderr to process.stdout
212
+ Command.stderr(options?.stderr ?? 'inherit'),
203
213
  Command.workingDirectory(cwd),
204
214
  options?.runInShell ? Command.runInShell(true) : identity,
205
215
  Command.env(options?.env ?? {}),