@livestore/utils-dev 0.0.0-snapshot-e5a7caabcf7660aefa55568a44ed0fe306d00597 → 0.0.0-snapshot-9d8807d2c51c95b4df3556744702cea55dc7ded3
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/.tsbuildinfo.json +1 -1
- package/dist/node/mod.d.ts +13 -5
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +42 -67
- package/dist/node/mod.js.map +1 -1
- package/dist/node-vitest/mod.d.ts +1 -2
- package/dist/node-vitest/mod.d.ts.map +1 -1
- package/dist/node-vitest/mod.js +1 -2
- package/dist/node-vitest/mod.js.map +1 -1
- package/dist/node-vitest/polyfill.d.ts +2 -0
- package/dist/node-vitest/polyfill.d.ts.map +1 -0
- package/dist/node-vitest/{global.js → polyfill.js} +1 -1
- package/dist/node-vitest/polyfill.js.map +1 -0
- package/package.json +22 -16
- package/src/node/mod.ts +82 -81
- package/src/node-vitest/mod.ts +1 -3
- package/dist/node/DockerComposeService/DockerComposeService.d.ts +0 -58
- package/dist/node/DockerComposeService/DockerComposeService.d.ts.map +0 -1
- package/dist/node/DockerComposeService/DockerComposeService.js +0 -144
- package/dist/node/DockerComposeService/DockerComposeService.js.map +0 -1
- package/dist/node/DockerComposeService/DockerComposeService.test.d.ts +0 -2
- package/dist/node/DockerComposeService/DockerComposeService.test.d.ts.map +0 -1
- package/dist/node/DockerComposeService/DockerComposeService.test.js +0 -64
- package/dist/node/DockerComposeService/DockerComposeService.test.js.map +0 -1
- package/dist/node/FileLogger.d.ts +0 -14
- package/dist/node/FileLogger.d.ts.map +0 -1
- package/dist/node/FileLogger.js +0 -151
- package/dist/node/FileLogger.js.map +0 -1
- package/dist/node/cmd-log.d.ts +0 -21
- package/dist/node/cmd-log.d.ts.map +0 -1
- package/dist/node/cmd-log.js +0 -50
- package/dist/node/cmd-log.js.map +0 -1
- package/dist/node/cmd.d.ts +0 -36
- package/dist/node/cmd.d.ts.map +0 -1
- package/dist/node/cmd.js +0 -234
- package/dist/node/cmd.js.map +0 -1
- package/dist/node/cmd.test.d.ts +0 -2
- package/dist/node/cmd.test.d.ts.map +0 -1
- package/dist/node/cmd.test.js +0 -101
- package/dist/node/cmd.test.js.map +0 -1
- package/dist/node-vitest/Vitest.d.ts +0 -52
- package/dist/node-vitest/Vitest.d.ts.map +0 -1
- package/dist/node-vitest/Vitest.js +0 -98
- package/dist/node-vitest/Vitest.js.map +0 -1
- package/dist/node-vitest/Vitest.test.d.ts +0 -2
- package/dist/node-vitest/Vitest.test.d.ts.map +0 -1
- package/dist/node-vitest/Vitest.test.js +0 -70
- package/dist/node-vitest/Vitest.test.js.map +0 -1
- package/dist/node-vitest/global.d.ts +0 -2
- package/dist/node-vitest/global.d.ts.map +0 -1
- package/dist/node-vitest/global.js.map +0 -1
- package/dist/wrangler/WranglerDevServer.d.ts +0 -52
- package/dist/wrangler/WranglerDevServer.d.ts.map +0 -1
- package/dist/wrangler/WranglerDevServer.js +0 -90
- package/dist/wrangler/WranglerDevServer.js.map +0 -1
- package/dist/wrangler/WranglerDevServer.test.d.ts +0 -2
- package/dist/wrangler/WranglerDevServer.test.d.ts.map +0 -1
- package/dist/wrangler/WranglerDevServer.test.js +0 -77
- package/dist/wrangler/WranglerDevServer.test.js.map +0 -1
- package/dist/wrangler/fixtures/cf-worker.d.ts +0 -8
- package/dist/wrangler/fixtures/cf-worker.d.ts.map +0 -1
- package/dist/wrangler/fixtures/cf-worker.js +0 -11
- package/dist/wrangler/fixtures/cf-worker.js.map +0 -1
- package/dist/wrangler/mod.d.ts +0 -2
- package/dist/wrangler/mod.d.ts.map +0 -1
- package/dist/wrangler/mod.js +0 -2
- package/dist/wrangler/mod.js.map +0 -1
- package/src/node/DockerComposeService/DockerComposeService.test.ts +0 -91
- package/src/node/DockerComposeService/DockerComposeService.ts +0 -328
- package/src/node/DockerComposeService/test-fixtures/docker-compose.yml +0 -4
- package/src/node/FileLogger.ts +0 -206
- package/src/node/cmd-log.ts +0 -92
- package/src/node/cmd.test.ts +0 -129
- package/src/node/cmd.ts +0 -419
- package/src/node-vitest/Vitest.test.ts +0 -112
- package/src/node-vitest/Vitest.ts +0 -238
- package/src/wrangler/WranglerDevServer.test.ts +0 -133
- package/src/wrangler/WranglerDevServer.ts +0 -180
- package/src/wrangler/fixtures/cf-worker.ts +0 -11
- package/src/wrangler/fixtures/wrangler.toml +0 -11
- package/src/wrangler/mod.ts +0 -6
- /package/src/node-vitest/{global.ts → polyfill.ts} +0 -0
package/dist/node/cmd.js
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import { isNotUndefined, shouldNeverHappen } from '@livestore/utils';
|
|
3
|
-
import { Cause, Command, Effect, Fiber, FiberId, FiberRefs, HashMap, identity, List, LogLevel, Schema, Stream, } from '@livestore/utils/effect';
|
|
4
|
-
import { applyLoggingToCommand } from "./cmd-log.js";
|
|
5
|
-
import * as FileLogger from "./FileLogger.js";
|
|
6
|
-
// Branded zero value so we can compare exit codes without touching internals.
|
|
7
|
-
const SUCCESS_EXIT_CODE = 0;
|
|
8
|
-
export const cmd = Effect.fn('cmd')(function* (commandInput, options) {
|
|
9
|
-
const cwd = options?.cwd ?? process.env.WORKSPACE_ROOT ?? shouldNeverHappen('WORKSPACE_ROOT is not set');
|
|
10
|
-
const asArray = Array.isArray(commandInput);
|
|
11
|
-
const parts = asArray ? commandInput.filter(isNotUndefined) : undefined;
|
|
12
|
-
const [command, ...args] = asArray ? parts : commandInput.split(' ');
|
|
13
|
-
const debugEnvStr = Object.entries(options?.env ?? {})
|
|
14
|
-
.map(([key, value]) => `${key}='${value}' `)
|
|
15
|
-
.join('');
|
|
16
|
-
const loggingOpts = {
|
|
17
|
-
...(options?.logDir ? { logDir: options.logDir } : {}),
|
|
18
|
-
...(options?.logFileName ? { logFileName: options.logFileName } : {}),
|
|
19
|
-
...(options?.logRetention ? { logRetention: options.logRetention } : {}),
|
|
20
|
-
};
|
|
21
|
-
const { input: finalInput, subshell: needsShell, logPath } = yield* applyLoggingToCommand(commandInput, loggingOpts);
|
|
22
|
-
const stdoutMode = options?.stdout ?? 'inherit';
|
|
23
|
-
const stderrMode = options?.stderr ?? 'inherit';
|
|
24
|
-
const useShell = (options?.shell ? true : false) || needsShell;
|
|
25
|
-
const commandDebugStr = debugEnvStr + (Array.isArray(finalInput) ? finalInput.join(' ') : finalInput);
|
|
26
|
-
const subshellStr = useShell ? ' (in subshell)' : '';
|
|
27
|
-
yield* Effect.logDebug(`Running '${commandDebugStr}' in '${cwd}'${subshellStr}`);
|
|
28
|
-
yield* Effect.annotateCurrentSpan({
|
|
29
|
-
'span.label': commandDebugStr,
|
|
30
|
-
cwd,
|
|
31
|
-
command,
|
|
32
|
-
args,
|
|
33
|
-
logDir: options?.logDir,
|
|
34
|
-
});
|
|
35
|
-
const baseArgs = {
|
|
36
|
-
commandInput: finalInput,
|
|
37
|
-
cwd,
|
|
38
|
-
env: options?.env ?? {},
|
|
39
|
-
stdoutMode,
|
|
40
|
-
stderrMode,
|
|
41
|
-
useShell,
|
|
42
|
-
};
|
|
43
|
-
const exitCode = yield* isNotUndefined(logPath)
|
|
44
|
-
? Effect.gen(function* () {
|
|
45
|
-
yield* Effect.sync(() => console.log(`Logging output to ${logPath}`));
|
|
46
|
-
return yield* runWithLogging({ ...baseArgs, logPath, threadName: commandDebugStr });
|
|
47
|
-
})
|
|
48
|
-
: runWithoutLogging(baseArgs);
|
|
49
|
-
if (exitCode !== SUCCESS_EXIT_CODE) {
|
|
50
|
-
return yield* Effect.fail(CmdError.make({
|
|
51
|
-
command: command,
|
|
52
|
-
args,
|
|
53
|
-
cwd,
|
|
54
|
-
env: options?.env ?? {},
|
|
55
|
-
stderr: stderrMode,
|
|
56
|
-
}));
|
|
57
|
-
}
|
|
58
|
-
return exitCode;
|
|
59
|
-
});
|
|
60
|
-
export const cmdText = Effect.fn('cmdText')(function* (commandInput, options) {
|
|
61
|
-
const cwd = options?.cwd ?? process.env.WORKSPACE_ROOT ?? shouldNeverHappen('WORKSPACE_ROOT is not set');
|
|
62
|
-
const [command, ...args] = Array.isArray(commandInput)
|
|
63
|
-
? commandInput.filter(isNotUndefined)
|
|
64
|
-
: commandInput.split(' ');
|
|
65
|
-
const debugEnvStr = Object.entries(options?.env ?? {})
|
|
66
|
-
.map(([key, value]) => `${key}='${value}' `)
|
|
67
|
-
.join('');
|
|
68
|
-
const commandDebugStr = debugEnvStr + [command, ...args].join(' ');
|
|
69
|
-
const subshellStr = options?.runInShell ? ' (in subshell)' : '';
|
|
70
|
-
yield* Effect.logDebug(`Running '${commandDebugStr}' in '${cwd}'${subshellStr}`);
|
|
71
|
-
yield* Effect.annotateCurrentSpan({ 'span.label': commandDebugStr, command, cwd });
|
|
72
|
-
return yield* Command.make(command, ...args).pipe(
|
|
73
|
-
// inherit = Stream stderr to process.stderr, pipe = Stream stderr to process.stdout
|
|
74
|
-
Command.stderr(options?.stderr ?? 'inherit'), Command.workingDirectory(cwd), options?.runInShell ? Command.runInShell(true) : identity, Command.env(options?.env ?? {}), Command.string);
|
|
75
|
-
});
|
|
76
|
-
export class CmdError extends Schema.TaggedError()('CmdError', {
|
|
77
|
-
command: Schema.String,
|
|
78
|
-
args: Schema.Array(Schema.String),
|
|
79
|
-
cwd: Schema.String,
|
|
80
|
-
env: Schema.Record({ key: Schema.String, value: Schema.String.pipe(Schema.UndefinedOr) }),
|
|
81
|
-
stderr: Schema.Literal('inherit', 'pipe'),
|
|
82
|
-
}) {
|
|
83
|
-
}
|
|
84
|
-
const runWithoutLogging = ({ commandInput, cwd, env, stdoutMode, stderrMode, useShell }) => buildCommand(commandInput, useShell).pipe(Command.stdin('inherit'), Command.stdout(stdoutMode), Command.stderr(stderrMode), Command.workingDirectory(cwd), useShell ? Command.runInShell(true) : identity, Command.env(env), Command.exitCode);
|
|
85
|
-
const runWithLogging = ({ commandInput, cwd, env, stdoutMode, stderrMode, useShell, logPath, threadName, }) =>
|
|
86
|
-
// When logging is enabled we have to replace the `2>&1 | tee` pipeline the
|
|
87
|
-
// shell used to give us. We now pipe both streams through Effect so we can
|
|
88
|
-
// mirror to the terminal (only when requested) and append formatted entries
|
|
89
|
-
// into the canonical log ourselves.
|
|
90
|
-
Effect.scoped(Effect.gen(function* () {
|
|
91
|
-
const envWithColor = env.FORCE_COLOR === undefined ? { ...env, FORCE_COLOR: '1' } : env;
|
|
92
|
-
const logFile = yield* Effect.acquireRelease(Effect.sync(() => fs.openSync(logPath, 'a', 0o666)), (fd) => Effect.sync(() => fs.closeSync(fd)));
|
|
93
|
-
const prettyLogger = FileLogger.prettyLoggerTty({
|
|
94
|
-
colors: true,
|
|
95
|
-
stderr: false,
|
|
96
|
-
formatDate: (date) => `${FileLogger.defaultDateFormat(date)} ${threadName}`,
|
|
97
|
-
});
|
|
98
|
-
const appendLog = ({ channel, content }) => Effect.sync(() => {
|
|
99
|
-
const formatted = prettyLogger.log({
|
|
100
|
-
fiberId: FiberId.none,
|
|
101
|
-
logLevel: channel === 'stdout' ? LogLevel.Info : LogLevel.Warning,
|
|
102
|
-
message: [`[${channel}]${content.length > 0 ? ` ${content}` : ''}`],
|
|
103
|
-
cause: Cause.empty,
|
|
104
|
-
context: FiberRefs.empty(),
|
|
105
|
-
spans: List.empty(),
|
|
106
|
-
annotations: HashMap.empty(),
|
|
107
|
-
date: new Date(),
|
|
108
|
-
});
|
|
109
|
-
fs.writeSync(logFile, formatted);
|
|
110
|
-
});
|
|
111
|
-
const command = buildCommand(commandInput, useShell).pipe(Command.stdin('inherit'), Command.stdout('pipe'), Command.stderr('pipe'), Command.workingDirectory(cwd), useShell ? Command.runInShell(true) : identity, Command.env(envWithColor));
|
|
112
|
-
// Acquire/start the command and make sure we kill it on interruption.
|
|
113
|
-
const runningProcess = yield* Effect.acquireRelease(command.pipe(Command.start), (proc) => proc.isRunning.pipe(Effect.flatMap((running) => (running ? proc.kill().pipe(Effect.catchAll(() => Effect.void)) : Effect.void)), Effect.ignore));
|
|
114
|
-
const stdoutHandler = makeStreamHandler({
|
|
115
|
-
channel: 'stdout',
|
|
116
|
-
...(stdoutMode === 'inherit' ? { mirrorTarget: process.stdout } : {}),
|
|
117
|
-
appendLog,
|
|
118
|
-
});
|
|
119
|
-
const stderrHandler = makeStreamHandler({
|
|
120
|
-
channel: 'stderr',
|
|
121
|
-
...(stderrMode === 'inherit' ? { mirrorTarget: process.stderr } : {}),
|
|
122
|
-
appendLog,
|
|
123
|
-
});
|
|
124
|
-
const stdoutFiber = yield* runningProcess.stdout.pipe(Stream.decodeText('utf8'), Stream.runForEach((chunk) => stdoutHandler.onChunk(chunk)), Effect.forkScoped);
|
|
125
|
-
const stderrFiber = yield* runningProcess.stderr.pipe(Stream.decodeText('utf8'), Stream.runForEach((chunk) => stderrHandler.onChunk(chunk)), Effect.forkScoped);
|
|
126
|
-
// Dump any buffered data and finish both stream fibers before we return.
|
|
127
|
-
const flushOutputs = Effect.gen(function* () {
|
|
128
|
-
const stillRunning = yield* runningProcess.isRunning.pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
129
|
-
if (stillRunning) {
|
|
130
|
-
yield* Effect.ignore(runningProcess.kill());
|
|
131
|
-
}
|
|
132
|
-
yield* Effect.ignore(Fiber.join(stdoutFiber));
|
|
133
|
-
yield* Effect.ignore(Fiber.join(stderrFiber));
|
|
134
|
-
yield* stdoutHandler.flush();
|
|
135
|
-
yield* stderrHandler.flush();
|
|
136
|
-
});
|
|
137
|
-
const exitCode = yield* runningProcess.exitCode.pipe(Effect.ensuring(flushOutputs));
|
|
138
|
-
return exitCode;
|
|
139
|
-
}));
|
|
140
|
-
const buildCommand = (input, useShell) => {
|
|
141
|
-
if (Array.isArray(input)) {
|
|
142
|
-
const [c, ...a] = input;
|
|
143
|
-
return Command.make(c, ...a);
|
|
144
|
-
}
|
|
145
|
-
if (useShell) {
|
|
146
|
-
return Command.make(input);
|
|
147
|
-
}
|
|
148
|
-
const [c, ...a] = input.split(' ');
|
|
149
|
-
return Command.make(c, ...a);
|
|
150
|
-
};
|
|
151
|
-
const makeStreamHandler = ({ channel, mirrorTarget, appendLog, }) => {
|
|
152
|
-
let buffer = '';
|
|
153
|
-
// Effect's FileLogger expects line-oriented messages, but the subprocess
|
|
154
|
-
// gives us arbitrary UTF-8 chunks. We keep a tiny line splitter here so the
|
|
155
|
-
// log and console stay readable (and consistent with the previous `tee`
|
|
156
|
-
// behaviour).
|
|
157
|
-
const emit = (content, terminator) => emitSegment({
|
|
158
|
-
channel,
|
|
159
|
-
content,
|
|
160
|
-
terminator,
|
|
161
|
-
...(mirrorTarget ? { mirrorTarget } : {}),
|
|
162
|
-
appendLog,
|
|
163
|
-
});
|
|
164
|
-
const consumeBuffer = () => {
|
|
165
|
-
if (buffer.length === 0)
|
|
166
|
-
return Effect.void;
|
|
167
|
-
const lastChar = buffer[buffer.length - 1];
|
|
168
|
-
if (lastChar === '\r') {
|
|
169
|
-
const line = buffer.slice(0, -1);
|
|
170
|
-
buffer = '';
|
|
171
|
-
return emit(line, 'carriage-return');
|
|
172
|
-
}
|
|
173
|
-
const line = buffer;
|
|
174
|
-
buffer = '';
|
|
175
|
-
return line.length === 0 ? Effect.void : emit(line, 'none');
|
|
176
|
-
};
|
|
177
|
-
return {
|
|
178
|
-
onChunk: (chunk) => Effect.gen(function* () {
|
|
179
|
-
buffer += chunk;
|
|
180
|
-
while (buffer.length > 0) {
|
|
181
|
-
const newlineIndex = buffer.indexOf('\n');
|
|
182
|
-
const carriageIndex = buffer.indexOf('\r');
|
|
183
|
-
if (newlineIndex === -1 && carriageIndex === -1) {
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
let index;
|
|
187
|
-
let terminator;
|
|
188
|
-
let skip = 1;
|
|
189
|
-
if (carriageIndex !== -1 && (newlineIndex === -1 || carriageIndex < newlineIndex)) {
|
|
190
|
-
index = carriageIndex;
|
|
191
|
-
if (carriageIndex + 1 < buffer.length && buffer[carriageIndex + 1] === '\n') {
|
|
192
|
-
skip = 2;
|
|
193
|
-
terminator = 'newline';
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
terminator = 'carriage-return';
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
index = newlineIndex;
|
|
201
|
-
terminator = 'newline';
|
|
202
|
-
}
|
|
203
|
-
const line = buffer.slice(0, index);
|
|
204
|
-
buffer = buffer.slice(index + skip);
|
|
205
|
-
yield* emit(line, terminator);
|
|
206
|
-
}
|
|
207
|
-
}),
|
|
208
|
-
flush: () => consumeBuffer(),
|
|
209
|
-
};
|
|
210
|
-
};
|
|
211
|
-
const emitSegment = ({ channel, content, terminator, mirrorTarget, appendLog, }) => Effect.gen(function* () {
|
|
212
|
-
if (mirrorTarget) {
|
|
213
|
-
yield* Effect.sync(() => mirrorSegment(mirrorTarget, content, terminator));
|
|
214
|
-
}
|
|
215
|
-
const contentForLog = terminator === 'carriage-return' ? `${content}\r` : content;
|
|
216
|
-
yield* appendLog({ channel, content: contentForLog });
|
|
217
|
-
});
|
|
218
|
-
const mirrorSegment = (target, content, terminator) => {
|
|
219
|
-
switch (terminator) {
|
|
220
|
-
case 'newline': {
|
|
221
|
-
target.write(`${content}\n`);
|
|
222
|
-
break;
|
|
223
|
-
}
|
|
224
|
-
case 'carriage-return': {
|
|
225
|
-
target.write(`${content}\r`);
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
case 'none': {
|
|
229
|
-
target.write(content);
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
};
|
|
234
|
-
//# sourceMappingURL=cmd.js.map
|
package/dist/node/cmd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/node/cmd.ts"],"names":[],"mappings":"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"}
|
package/dist/node/cmd.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.test.d.ts","sourceRoot":"","sources":["../../src/node/cmd.test.ts"],"names":[],"mappings":""}
|
package/dist/node/cmd.test.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { CommandExecutor, Duration, Effect } from '@livestore/utils/effect';
|
|
4
|
-
import { PlatformNode } from '@livestore/utils/node';
|
|
5
|
-
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
6
|
-
import { expect } from 'vitest';
|
|
7
|
-
import { cmd } from "./cmd.js";
|
|
8
|
-
const withNode = Vitest.makeWithTestCtx({
|
|
9
|
-
makeLayer: () => PlatformNode.NodeContext.layer,
|
|
10
|
-
timeout: 20_000,
|
|
11
|
-
});
|
|
12
|
-
Vitest.describe('cmd helper', () => {
|
|
13
|
-
const ansiRegex = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, 'g');
|
|
14
|
-
Vitest.scopedLive('runs tokenized string without shell', (test) => Effect.gen(function* () {
|
|
15
|
-
const exit = yield* cmd('printf ok');
|
|
16
|
-
expect(exit).toBe(CommandExecutor.ExitCode(0));
|
|
17
|
-
}).pipe(withNode(test)));
|
|
18
|
-
Vitest.scopedLive('runs array input', (test) => Effect.gen(function* () {
|
|
19
|
-
const exit = yield* cmd(['printf', 'ok']);
|
|
20
|
-
expect(exit).toBe(CommandExecutor.ExitCode(0));
|
|
21
|
-
}).pipe(withNode(test)));
|
|
22
|
-
Vitest.scopedLive('supports logging with archive + retention', (test) => Effect.gen(function* () {
|
|
23
|
-
const workspace = process.env.WORKSPACE_ROOT;
|
|
24
|
-
const logsDir = path.join(workspace, 'tmp', 'cmd-tests', String(Date.now()));
|
|
25
|
-
// first run
|
|
26
|
-
const exit1 = yield* cmd('printf first', { logDir: logsDir });
|
|
27
|
-
expect(exit1).toBe(CommandExecutor.ExitCode(0));
|
|
28
|
-
const current = path.join(logsDir, 'dev.log');
|
|
29
|
-
expect(fs.existsSync(current)).toBe(true);
|
|
30
|
-
const firstLog = fs.readFileSync(current, 'utf8');
|
|
31
|
-
const firstStdoutLines = firstLog.split('\n').filter((line) => line.includes('[stdout]'));
|
|
32
|
-
expect(firstStdoutLines.length).toBeGreaterThan(0);
|
|
33
|
-
for (const line of firstStdoutLines) {
|
|
34
|
-
expect(line).toContain('[stdout] first');
|
|
35
|
-
expect(line).toContain('INFO');
|
|
36
|
-
expect(line).toContain('printf first');
|
|
37
|
-
}
|
|
38
|
-
// second run — archives previous
|
|
39
|
-
const exit2 = yield* cmd('printf second', { logDir: logsDir });
|
|
40
|
-
expect(exit2).toBe(CommandExecutor.ExitCode(0));
|
|
41
|
-
const archiveDir = path.join(logsDir, 'archive');
|
|
42
|
-
const archives = fs.readdirSync(archiveDir).filter((f) => f.endsWith('.log'));
|
|
43
|
-
expect(archives.length).toBe(1);
|
|
44
|
-
const archivedPath = path.join(archiveDir, archives[0]);
|
|
45
|
-
const archivedLog = fs.readFileSync(archivedPath, 'utf8');
|
|
46
|
-
const archivedStdoutLines = archivedLog.split('\n').filter((line) => line.includes('[stdout]'));
|
|
47
|
-
expect(archivedStdoutLines.length).toBeGreaterThan(0);
|
|
48
|
-
for (const line of archivedStdoutLines) {
|
|
49
|
-
expect(line).toContain('[stdout] first');
|
|
50
|
-
}
|
|
51
|
-
const secondLog = fs.readFileSync(current, 'utf8');
|
|
52
|
-
const secondStdoutLines = secondLog.split('\n').filter((line) => line.includes('[stdout]'));
|
|
53
|
-
expect(secondStdoutLines.length).toBeGreaterThan(0);
|
|
54
|
-
for (const line of secondStdoutLines) {
|
|
55
|
-
expect(line).toContain('[stdout] second');
|
|
56
|
-
expect(line).toContain('INFO');
|
|
57
|
-
}
|
|
58
|
-
// generate many archives to exercise retention (keep 50)
|
|
59
|
-
for (let i = 0; i < 60; i++) {
|
|
60
|
-
// Use small unique payloads
|
|
61
|
-
yield* cmd(['printf', String(i)], { logDir: logsDir });
|
|
62
|
-
}
|
|
63
|
-
const archivesAfter = fs.readdirSync(archiveDir).filter((f) => f.endsWith('.log'));
|
|
64
|
-
expect(archivesAfter.length).toBeLessThanOrEqual(50);
|
|
65
|
-
}).pipe(withNode(test)));
|
|
66
|
-
Vitest.scopedLive('streams stdout and stderr with logger formatting', (test) => Effect.gen(function* () {
|
|
67
|
-
const workspace = process.env.WORKSPACE_ROOT;
|
|
68
|
-
const logsDir = path.join(workspace, 'tmp', 'cmd-tests', `format-${Date.now()}`);
|
|
69
|
-
const exit = yield* cmd(['node', '-e', "console.log('out'); console.error('err')"], {
|
|
70
|
-
logDir: logsDir,
|
|
71
|
-
});
|
|
72
|
-
expect(exit).toBe(CommandExecutor.ExitCode(0));
|
|
73
|
-
const current = path.join(logsDir, 'dev.log');
|
|
74
|
-
const logContent = fs.readFileSync(current, 'utf8');
|
|
75
|
-
expect(logContent).toMatch(/\[stdout] out/);
|
|
76
|
-
expect(logContent).toMatch(/\[stderr] err/);
|
|
77
|
-
const relevantLines = logContent
|
|
78
|
-
.split('\n')
|
|
79
|
-
.map((line) => line.trim())
|
|
80
|
-
.filter((line) => line.includes('[stdout]') || line.includes('[stderr]'));
|
|
81
|
-
expect(relevantLines.length).toBeGreaterThanOrEqual(2);
|
|
82
|
-
for (const line of relevantLines) {
|
|
83
|
-
const stripped = line.replace(ansiRegex, '');
|
|
84
|
-
expect(stripped.startsWith('[')).toBe(true);
|
|
85
|
-
expect(stripped).toMatch(/(INFO|WARN)/);
|
|
86
|
-
expect(stripped).toMatch(/\[(stdout|stderr)]/);
|
|
87
|
-
}
|
|
88
|
-
}).pipe(withNode(test)));
|
|
89
|
-
Vitest.scopedLive('cleans up logged child process when interrupted', (test) => Effect.gen(function* () {
|
|
90
|
-
const workspace = process.env.WORKSPACE_ROOT;
|
|
91
|
-
const logsDir = path.join(workspace, 'tmp', 'cmd-tests', `timeout-${Date.now()}`);
|
|
92
|
-
const result = yield* cmd(['node', '-e', 'setTimeout(() => {}, 5000)'], {
|
|
93
|
-
logDir: logsDir,
|
|
94
|
-
stdout: 'pipe',
|
|
95
|
-
stderr: 'pipe',
|
|
96
|
-
}).pipe(Effect.timeoutOption(Duration.millis(200)));
|
|
97
|
-
expect(result._tag).toBe('None');
|
|
98
|
-
expect(fs.existsSync(path.join(logsDir, 'dev.log'))).toBe(true);
|
|
99
|
-
}).pipe(withNode(test)));
|
|
100
|
-
});
|
|
101
|
-
//# sourceMappingURL=cmd.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.test.js","sourceRoot":"","sources":["../../src/node/cmd.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type * as Vitest from '@effect/vitest';
|
|
2
|
-
import { type Cause, Duration, Effect, type FastCheck as FC, Layer, type OtelTracer, type Schema, type Scope } from '@livestore/utils/effect';
|
|
3
|
-
export * from '@effect/vitest';
|
|
4
|
-
export declare const DEBUGGER_ACTIVE: boolean;
|
|
5
|
-
export declare const makeWithTestCtx: <ROut = never, E1 = never, RIn = never>(ctxParams: WithTestCtxParams<ROut, E1, RIn>) => (testContext: Vitest.TestContext) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E1 | Cause.TimeoutException, Exclude<RIn, OtelTracer.OtelTracer | Scope.Scope> | Exclude<R, ROut | OtelTracer.OtelTracer | Scope.Scope>>;
|
|
6
|
-
export type WithTestCtxParams<ROut, E1, RIn> = {
|
|
7
|
-
suffix?: string;
|
|
8
|
-
makeLayer?: (testContext: Vitest.TestContext) => Layer.Layer<ROut, E1, RIn | Scope.Scope>;
|
|
9
|
-
timeout?: Duration.DurationInput;
|
|
10
|
-
forceOtel?: boolean;
|
|
11
|
-
};
|
|
12
|
-
export declare const withTestCtx: <ROut = never, E1 = never, RIn = never>(testContext: Vitest.TestContext, { suffix, makeLayer, timeout, forceOtel, }?: {
|
|
13
|
-
suffix?: string;
|
|
14
|
-
makeLayer?: (testContext: Vitest.TestContext) => Layer.Layer<ROut, E1, RIn>;
|
|
15
|
-
timeout?: Duration.DurationInput;
|
|
16
|
-
forceOtel?: boolean;
|
|
17
|
-
}) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E1 | Cause.TimeoutException, Exclude<RIn, OtelTracer.OtelTracer | Scope.Scope> | Exclude<R, ROut | OtelTracer.OtelTracer | Scope.Scope>>;
|
|
18
|
-
/**
|
|
19
|
-
* Shared properties for all enhanced test context phases
|
|
20
|
-
*/
|
|
21
|
-
export interface EnhancedTestContextBase {
|
|
22
|
-
numRuns: number;
|
|
23
|
-
/** 0-based index */
|
|
24
|
-
runIndex: number;
|
|
25
|
-
/** Total number of executions including initial runs and shrinking attempts */
|
|
26
|
-
totalExecutions: number;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Enhanced context for property-based tests that includes shrinking phase information
|
|
30
|
-
*/
|
|
31
|
-
export type EnhancedTestContext = (EnhancedTestContextBase & {
|
|
32
|
-
_tag: 'initial';
|
|
33
|
-
}) | (EnhancedTestContextBase & {
|
|
34
|
-
_tag: 'shrinking';
|
|
35
|
-
/** Number of shrinking attempts */
|
|
36
|
-
shrinkAttempt: number;
|
|
37
|
-
});
|
|
38
|
-
/**
|
|
39
|
-
* Equivalent to Vitest.prop but provides enhanced context including shrinking progress visibility
|
|
40
|
-
*
|
|
41
|
-
* This function enhances the standard property-based testing by providing clear information about
|
|
42
|
-
* whether FastCheck is in the initial testing phase or the shrinking phase, solving the confusion
|
|
43
|
-
* where tests show "Run 26/6" when FastCheck's shrinking algorithm is active.
|
|
44
|
-
*
|
|
45
|
-
* TODO: allow for upper timelimit instead of / additional to `numRuns`
|
|
46
|
-
*
|
|
47
|
-
* TODO: Upstream to Effect
|
|
48
|
-
*/
|
|
49
|
-
export declare const asProp: <Arbs extends Vitest.Vitest.Arbitraries, A, E, R>(api: Vitest.Vitest.Tester<R>, name: string, arbitraries: Arbs, test: Vitest.Vitest.TestFunction<A, E, R, [{ [K in keyof Arbs]: Arbs[K] extends FC.Arbitrary<infer T> ? T : Schema.Schema.Type<Arbs[K]>; }, Vitest.TestContext, EnhancedTestContext]>, propOptions: number | (Vitest.TestOptions & {
|
|
50
|
-
fastCheck?: FC.Parameters<{ [K in keyof Arbs]: Arbs[K] extends FC.Arbitrary<infer T> ? T : Schema.Schema.Type<Arbs[K]>; }>;
|
|
51
|
-
})) => void;
|
|
52
|
-
//# sourceMappingURL=Vitest.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Vitest.d.ts","sourceRoot":"","sources":["../../src/node-vitest/Vitest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import * as inspector from 'node:inspector';
|
|
2
|
-
import { IS_CI } from '@livestore/utils';
|
|
3
|
-
import { Duration, Effect, identity, Layer, Predicate, } from '@livestore/utils/effect';
|
|
4
|
-
import { OtelLiveDummy } from '@livestore/utils/node';
|
|
5
|
-
import { OtelLiveHttp } from "../node/mod.js";
|
|
6
|
-
export * from '@effect/vitest';
|
|
7
|
-
export const DEBUGGER_ACTIVE = Boolean(process.env.DEBUGGER_ACTIVE ?? inspector.url() !== undefined);
|
|
8
|
-
export const makeWithTestCtx = (ctxParams) => (testContext) => withTestCtx(testContext, ctxParams);
|
|
9
|
-
export const withTestCtx = (testContext, { suffix, makeLayer, timeout = IS_CI ? 60_000 : 10_000, forceOtel = false, } = {}) => (self) => {
|
|
10
|
-
const spanName = `${testContext.task.suite?.name}:${testContext.task.name}${suffix ? `:${suffix}` : ''}`;
|
|
11
|
-
const layer = makeLayer?.(testContext) ?? Layer.empty;
|
|
12
|
-
const otelLayer = DEBUGGER_ACTIVE || forceOtel
|
|
13
|
-
? OtelLiveHttp({ rootSpanName: spanName, serviceName: 'vitest-runner', skipLogUrl: false })
|
|
14
|
-
: OtelLiveDummy;
|
|
15
|
-
const combinedLayer = layer.pipe(Layer.provideMerge(otelLayer));
|
|
16
|
-
return self.pipe(DEBUGGER_ACTIVE
|
|
17
|
-
? identity
|
|
18
|
-
: Effect.logWarnIfTakesLongerThan({
|
|
19
|
-
duration: Duration.toMillis(timeout) * 0.8,
|
|
20
|
-
label: `${spanName} approaching timeout (timeout: ${Duration.format(timeout)})`,
|
|
21
|
-
}), DEBUGGER_ACTIVE ? identity : Effect.timeout(timeout), Effect.provide(combinedLayer), Effect.scoped, // We need to scope the effect manually here because otherwise the span is not closed
|
|
22
|
-
Effect.annotateLogs({ suffix }));
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Normalizes propOptions to ensure @effect/vitest receives correct fastCheck structure
|
|
26
|
-
*/
|
|
27
|
-
const normalizePropOptions = (propOptions) => {
|
|
28
|
-
// If it's a number, treat as timeout and add our default fastCheck
|
|
29
|
-
if (!Predicate.isObject(propOptions)) {
|
|
30
|
-
return {
|
|
31
|
-
timeout: propOptions,
|
|
32
|
-
fastCheck: { numRuns: 100 },
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
// If no fastCheck property, add it with our default numRuns
|
|
36
|
-
if (!propOptions.fastCheck) {
|
|
37
|
-
return {
|
|
38
|
-
...propOptions,
|
|
39
|
-
fastCheck: { numRuns: 100 },
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
// If fastCheck exists but no numRuns, add our default
|
|
43
|
-
if (propOptions.fastCheck && !propOptions.fastCheck.numRuns) {
|
|
44
|
-
return {
|
|
45
|
-
...propOptions,
|
|
46
|
-
fastCheck: {
|
|
47
|
-
...propOptions.fastCheck,
|
|
48
|
-
numRuns: 100,
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
// If everything is properly structured, pass through
|
|
53
|
-
return propOptions;
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Equivalent to Vitest.prop but provides enhanced context including shrinking progress visibility
|
|
57
|
-
*
|
|
58
|
-
* This function enhances the standard property-based testing by providing clear information about
|
|
59
|
-
* whether FastCheck is in the initial testing phase or the shrinking phase, solving the confusion
|
|
60
|
-
* where tests show "Run 26/6" when FastCheck's shrinking algorithm is active.
|
|
61
|
-
*
|
|
62
|
-
* TODO: allow for upper timelimit instead of / additional to `numRuns`
|
|
63
|
-
*
|
|
64
|
-
* TODO: Upstream to Effect
|
|
65
|
-
*/
|
|
66
|
-
export const asProp = (api, name, arbitraries, test, propOptions) => {
|
|
67
|
-
const normalizedPropOptions = normalizePropOptions(propOptions);
|
|
68
|
-
const numRuns = normalizedPropOptions.fastCheck?.numRuns ?? 100;
|
|
69
|
-
let runIndex = 0;
|
|
70
|
-
let shrinkAttempts = 0;
|
|
71
|
-
let totalExecutions = 0;
|
|
72
|
-
return api.prop(name, arbitraries, (properties, ctx) => {
|
|
73
|
-
if (ctx.signal.aborted) {
|
|
74
|
-
return ctx.skip('Test aborted');
|
|
75
|
-
}
|
|
76
|
-
totalExecutions++;
|
|
77
|
-
const isInShrinkingPhase = runIndex >= numRuns;
|
|
78
|
-
if (isInShrinkingPhase) {
|
|
79
|
-
shrinkAttempts++;
|
|
80
|
-
}
|
|
81
|
-
const enhancedContext = isInShrinkingPhase
|
|
82
|
-
? {
|
|
83
|
-
_tag: 'shrinking',
|
|
84
|
-
numRuns,
|
|
85
|
-
runIndex: runIndex++,
|
|
86
|
-
shrinkAttempt: shrinkAttempts,
|
|
87
|
-
totalExecutions,
|
|
88
|
-
}
|
|
89
|
-
: {
|
|
90
|
-
_tag: 'initial',
|
|
91
|
-
numRuns,
|
|
92
|
-
runIndex: runIndex++,
|
|
93
|
-
totalExecutions,
|
|
94
|
-
};
|
|
95
|
-
return test(properties, ctx, enhancedContext);
|
|
96
|
-
}, normalizedPropOptions);
|
|
97
|
-
};
|
|
98
|
-
//# sourceMappingURL=Vitest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Vitest.js","sourceRoot":"","sources":["../../src/node-vitest/Vitest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Vitest.test.d.ts","sourceRoot":"","sources":["../../src/node-vitest/Vitest.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Effect, FastCheck } from '@livestore/utils/effect';
|
|
2
|
-
import * as Vitest from "./Vitest.js";
|
|
3
|
-
// Demonstrate enhanced asProp functionality with clear shrinking progress
|
|
4
|
-
// This showcases the fix for the "Run 26/6" bug and accurate shrinking detection
|
|
5
|
-
Vitest.describe('Vitest.asProp', () => {
|
|
6
|
-
const IntArbitrary = FastCheck.integer({ min: 1, max: 100 });
|
|
7
|
-
// Always-passing test - should only show initial phase
|
|
8
|
-
Vitest.asProp(Vitest.scopedLive, 'always-pass test (shows only initial runs)', [IntArbitrary], (properties, _ctx, enhanced) => Effect.gen(function* () {
|
|
9
|
-
const [value] = properties;
|
|
10
|
-
if (value === undefined) {
|
|
11
|
-
return yield* Effect.fail(new Error('Value is undefined'));
|
|
12
|
-
}
|
|
13
|
-
console.log(`✅ ALWAYS-PASS [${enhanced._tag.toUpperCase()}]: ` +
|
|
14
|
-
(enhanced._tag === 'initial'
|
|
15
|
-
? `Run ${enhanced.runIndex + 1}/${enhanced.numRuns}`
|
|
16
|
-
: `Shrink #${enhanced.shrinkAttempt} (finding minimal counterexample)`) +
|
|
17
|
-
`, value=${value}, total=${enhanced.totalExecutions}`);
|
|
18
|
-
// This test always passes, so no shrinking will occur
|
|
19
|
-
return;
|
|
20
|
-
}), { fastCheck: { numRuns: 4 } });
|
|
21
|
-
// Failing test - should show initial + shrinking phases
|
|
22
|
-
let alreadyFailed = false;
|
|
23
|
-
Vitest.asProp(Vitest.scopedLive, 'failing test (shows initial runs + shrinking)', [IntArbitrary], (properties, ctx, enhanced) => Effect.gen(function* () {
|
|
24
|
-
const [value] = properties;
|
|
25
|
-
if (value === undefined) {
|
|
26
|
-
return yield* Effect.fail(new Error('Value is undefined'));
|
|
27
|
-
}
|
|
28
|
-
const displayInfo = enhanced._tag === 'initial'
|
|
29
|
-
? `Run ${enhanced.runIndex + 1}/${enhanced.numRuns}`
|
|
30
|
-
: `Shrink #${enhanced.shrinkAttempt} (finding minimal counterexample)`;
|
|
31
|
-
const status = value > 80 ? '💥' : '✅';
|
|
32
|
-
console.log(`${status} FAILING-TEST [${enhanced._tag.toUpperCase()}]: ${displayInfo}, value=${value}, total=${enhanced.totalExecutions}`);
|
|
33
|
-
// Fail when value is greater than 80 to trigger shrinking
|
|
34
|
-
if (value > 80) {
|
|
35
|
-
alreadyFailed = true;
|
|
36
|
-
return yield* Effect.fail(new Error(`Value ${value} is too large (> 80)`));
|
|
37
|
-
}
|
|
38
|
-
if (alreadyFailed && enhanced._tag === 'shrinking') {
|
|
39
|
-
ctx.skip("For the sake of this test, we don't want to fail but want to skip");
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
return;
|
|
43
|
-
}), { fastCheck: { numRuns: 3 } });
|
|
44
|
-
// Test with endOnFailure: true - should not show shrinking
|
|
45
|
-
Vitest.asProp(Vitest.scopedLive, 'failing test with endOnFailure (no shrinking)', [IntArbitrary], (properties, _ctx, enhanced) => Effect.gen(function* () {
|
|
46
|
-
const [value] = properties;
|
|
47
|
-
if (value === undefined) {
|
|
48
|
-
return yield* Effect.fail(new Error('Value is undefined'));
|
|
49
|
-
}
|
|
50
|
-
console.log(`🚫 END-ON-FAILURE [${enhanced._tag.toUpperCase()}]: ` +
|
|
51
|
-
`Run ${enhanced.runIndex + 1}/${enhanced.numRuns}, value=${value}, total=${enhanced.totalExecutions}`);
|
|
52
|
-
// This will fail but shrinking is disabled
|
|
53
|
-
if (value > 50) {
|
|
54
|
-
return yield* Effect.fail(new Error(`Value ${value} is too large (> 50) - but no shrinking!`));
|
|
55
|
-
}
|
|
56
|
-
return;
|
|
57
|
-
}), {
|
|
58
|
-
fastCheck: {
|
|
59
|
-
numRuns: 5,
|
|
60
|
-
endOnFailure: true,
|
|
61
|
-
// Provide explicit samples so the second run crosses >50. Randomly drawing five
|
|
62
|
-
// integers has ~3% chance to stay ≤ 50, which would break the `fails: true`
|
|
63
|
-
// expectation even though shrinking remains disabled. The examples keep the
|
|
64
|
-
// demo readable while leaving the remaining runs to FastCheck.
|
|
65
|
-
examples: [[5], [66]],
|
|
66
|
-
},
|
|
67
|
-
fails: true,
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
//# sourceMappingURL=Vitest.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Vitest.test.js","sourceRoot":"","sources":["../../src/node-vitest/Vitest.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,0EAA0E;AAC1E,iFAAiF;AAEjF,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IACpC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IAE5D,uDAAuD;IACvD,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,UAAU,EACjB,4CAA4C,EAC5C,CAAC,YAAY,CAAC,EACd,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAC7B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,CAAC,GAAG,CACT,kBAAkB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK;YAChD,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;gBAC1B,CAAC,CAAC,OAAO,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpD,CAAC,CAAC,WAAW,QAAQ,CAAC,aAAa,mCAAmC,CAAC;YACzE,WAAW,KAAK,WAAW,QAAQ,CAAC,eAAe,EAAE,CACxD,CAAA;QAED,sDAAsD;QACtD,OAAM;IACR,CAAC,CAAC,EACJ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAC9B,CAAA;IAED,wDAAwD;IACxD,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,UAAU,EACjB,+CAA+C,EAC/C,CAAC,YAAY,CAAC,EACd,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,MAAM,WAAW,GACf,QAAQ,CAAC,IAAI,KAAK,SAAS;YACzB,CAAC,CAAC,OAAO,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpD,CAAC,CAAC,WAAW,QAAQ,CAAC,aAAa,mCAAmC,CAAA;QAE1E,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;QACtC,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,kBAAkB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,WAAW,WAAW,KAAK,WAAW,QAAQ,CAAC,eAAe,EAAE,CAC7H,CAAA;QAED,0DAA0D;QAC1D,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,aAAa,GAAG,IAAI,CAAA;YACpB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,sBAAsB,CAAC,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,aAAa,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;YAC7E,OAAM;QACR,CAAC;QAED,OAAM;IACR,CAAC,CAAC,EACJ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAC9B,CAAA;IAED,2DAA2D;IAC3D,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,UAAU,EACjB,+CAA+C,EAC/C,CAAC,YAAY,CAAC,EACd,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAC7B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,CAAC,GAAG,CACT,sBAAsB,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK;YACpD,OAAO,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,WAAW,KAAK,WAAW,QAAQ,CAAC,eAAe,EAAE,CACxG,CAAA;QAED,2CAA2C;QAC3C,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,0CAA0C,CAAC,CAAC,CAAA;QAChG,CAAC;QAED,OAAM;IACR,CAAC,CAAC,EACJ;QACE,SAAS,EAAE;YACT,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,IAAI;YAClB,gFAAgF;YAChF,4EAA4E;YAC5E,4EAA4E;YAC5E,+DAA+D;YAC/D,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACtB;QACD,KAAK,EAAE,IAAI;KACZ,CACF,CAAA;AACH,CAAC,CAAC,CAAA"}
|