pyfig 0.2.0 → 0.3.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.
Files changed (64) hide show
  1. package/README.md +144 -22
  2. package/SECURITY.md +5 -3
  3. package/dist/cjs/index.js +1502 -0
  4. package/dist/cjs/index.js.map +21 -0
  5. package/dist/cjs/package.json +3 -0
  6. package/dist/cjs/sync-resolver.js +1242 -0
  7. package/dist/cjs/sync-resolver.js.map +18 -0
  8. package/dist/cli.js +17 -6
  9. package/dist/cli.js.map +1 -1
  10. package/dist/client.d.ts +20 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +23 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/config.d.ts +45 -2
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +130 -9
  17. package/dist/config.js.map +1 -1
  18. package/dist/coordination.d.ts +25 -0
  19. package/dist/coordination.d.ts.map +1 -0
  20. package/dist/coordination.js +187 -0
  21. package/dist/coordination.js.map +1 -0
  22. package/dist/index.d.ts +9 -6
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +6 -4
  25. package/dist/index.js.map +1 -1
  26. package/dist/package-target.d.ts +12 -0
  27. package/dist/package-target.d.ts.map +1 -0
  28. package/dist/package-target.js +97 -0
  29. package/dist/package-target.js.map +1 -0
  30. package/dist/probes.d.ts +19 -0
  31. package/dist/probes.d.ts.map +1 -1
  32. package/dist/probes.js +115 -36
  33. package/dist/probes.js.map +1 -1
  34. package/dist/process.d.ts +2 -0
  35. package/dist/process.d.ts.map +1 -1
  36. package/dist/process.js +63 -1
  37. package/dist/process.js.map +1 -1
  38. package/dist/project-root.d.ts +3 -0
  39. package/dist/project-root.d.ts.map +1 -0
  40. package/dist/project-root.js +83 -0
  41. package/dist/project-root.js.map +1 -0
  42. package/dist/provision.d.ts +3 -1
  43. package/dist/provision.d.ts.map +1 -1
  44. package/dist/provision.js +375 -97
  45. package/dist/provision.js.map +1 -1
  46. package/dist/runners.d.ts +5 -2
  47. package/dist/runners.d.ts.map +1 -1
  48. package/dist/runners.js +94 -28
  49. package/dist/runners.js.map +1 -1
  50. package/dist/runtime-files.d.ts +3 -0
  51. package/dist/runtime-files.d.ts.map +1 -0
  52. package/dist/runtime-files.js +12 -0
  53. package/dist/runtime-files.js.map +1 -0
  54. package/dist/state.d.ts +10 -0
  55. package/dist/state.d.ts.map +1 -0
  56. package/dist/state.js +62 -0
  57. package/dist/state.js.map +1 -0
  58. package/dist/sync-resolver.js +11 -2
  59. package/dist/sync-resolver.js.map +1 -1
  60. package/dist/virtual-environment.d.ts +9 -0
  61. package/dist/virtual-environment.d.ts.map +1 -0
  62. package/dist/virtual-environment.js +42 -0
  63. package/dist/virtual-environment.js.map +1 -0
  64. package/package.json +18 -7
package/dist/provision.js CHANGED
@@ -1,98 +1,250 @@
1
- import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { createReadStream, createWriteStream } from 'node:fs';
3
+ import { chmod, copyFile, mkdir, mkdtemp, readdir, rename, rm, } from 'node:fs/promises';
4
+ import fs from 'node:fs';
2
5
  import os from 'node:os';
3
6
  import path from 'node:path';
4
- import lockfile from 'proper-lockfile';
5
- import semver from 'semver';
6
- import { resolveOptions } from './config.js';
7
- import { findPip, findPython, findUv, probePython, probeUv, } from './probes.js';
8
- import { resolveExecutable, run } from './process.js';
9
- const LOCK_OPTIONS = {
10
- realpath: true,
11
- stale: 10 * 60_000,
12
- retries: { retries: 40, factor: 1.2, minTimeout: 100, maxTimeout: 1000 },
13
- };
7
+ import { Readable } from 'node:stream';
8
+ import { pipeline } from 'node:stream/promises';
9
+ import extractZip from 'extract-zip';
10
+ import * as tar from 'tar';
11
+ import { EnvHttpProxyAgent, fetch } from 'undici';
12
+ import { configurationFingerprint, resolveOptions, uvEnvironment, } from './config.js';
13
+ import { cacheLockTarget, withProvisioningLock } from './coordination.js';
14
+ import { findPip, findPython, findUv, probePython, probeUv, pythonSatisfiesRequirements, } from './probes.js';
15
+ import { runAsync } from './process.js';
16
+ import { memoizeAsync } from './state.js';
17
+ import { canonicalPath, pathsEqual, virtualEnvironmentDirectory, virtualEnvironmentPythonExecutable, } from './virtual-environment.js';
14
18
  export async function ensurePython(options = {}) {
15
- return ensurePythonResolved(resolveOptions(options));
19
+ const resolved = resolveOptions(options);
20
+ return memoizeAsync('python', configurationFingerprint(resolved), resolved.cacheTtlMs, pythonIsPresent, () => ensurePythonResolved(resolved));
16
21
  }
17
22
  export async function ensurePip(options = {}, python) {
18
23
  const resolved = resolveOptions(options);
19
- const selectedPython = python ?? await ensurePythonResolved(resolved);
24
+ const selectedPython = python?.virtualEnvironment
25
+ ? python
26
+ : await ensureVirtualEnvironmentResolved(resolved);
20
27
  return ensurePipResolved(selectedPython, resolved);
21
28
  }
29
+ export async function ensureVirtualEnvironment(options = {}) {
30
+ const resolved = resolveOptions(options);
31
+ return memoizeAsync('venv', configurationFingerprint(resolved), resolved.cacheTtlMs, (python) => pythonIsPresent(python) &&
32
+ Boolean(python.virtualEnvironment) &&
33
+ pathsEqual(python.virtualEnvironment, virtualEnvironmentDirectory(resolved.projectRoot)), () => ensureVirtualEnvironmentResolved(resolved));
34
+ }
35
+ export async function ensureUv(options = {}) {
36
+ const resolved = resolveOptions(options);
37
+ return memoizeAsync('uv', configurationFingerprint(resolved), resolved.cacheTtlMs, (uv) => fs.existsSync(uv.executable), () => ensureUvResolved(resolved));
38
+ }
22
39
  export async function ensureEnvironment(options = {}) {
23
40
  const resolved = resolveOptions(options);
24
- const python = await ensurePythonResolved(resolved);
25
- const packageManager = await ensurePipResolved(python, resolved);
26
- return { python, packageManager };
41
+ return memoizeAsync('environment', configurationFingerprint(resolved), resolved.cacheTtlMs, environmentIsPresent, async () => {
42
+ const python = await ensureVirtualEnvironmentResolved(resolved);
43
+ const packageManager = await ensurePipResolved(python, resolved);
44
+ return { python, packageManager };
45
+ });
27
46
  }
28
- async function ensurePythonResolved(options) {
29
- const existing = await findPython(options);
47
+ async function ensureVirtualEnvironmentResolved(options) {
48
+ const directory = virtualEnvironmentDirectory(options.projectRoot);
49
+ const check = async () => {
50
+ const existing = await inspectVirtualEnvironment(directory, options);
51
+ if (!existing)
52
+ return null;
53
+ if (pythonSatisfiesRequirements(existing, options) &&
54
+ await virtualEnvironmentMatchesConfiguredPython(existing, options)) {
55
+ return existing;
56
+ }
57
+ throw incompatibleVirtualEnvironmentError(directory, existing, options);
58
+ };
59
+ const existing = await check();
30
60
  if (existing)
31
61
  return existing;
32
- if (!options.autoInstall) {
33
- throw new Error(`No Python interpreter satisfies ${options.pythonRange}; automatic installation is disabled.`);
62
+ if (!options.createVirtualEnvironment) {
63
+ throw new Error(`No virtual environment at ${directory} satisfies the Python requirements; ` +
64
+ 'virtual-environment creation is disabled.');
34
65
  }
35
- const lockTarget = path.join(options.cacheDir, 'locks', 'python');
36
- await mkdir(lockTarget, { recursive: true });
37
- const release = await lockfile.lock(lockTarget, LOCK_OPTIONS);
38
- try {
39
- const rechecked = await findPython(options);
40
- if (rechecked)
41
- return rechecked;
42
- const uv = await ensureUv(options);
43
- const uvEnv = uvEnvironment(options);
44
- run(uv.executable, ['python', 'install', options.managedPython], uvEnv, options.installTimeoutMs);
45
- const { stdout } = run(uv.executable, ['python', 'find', '--python-preference', 'only-managed', options.managedPython], uvEnv, options.probeTimeoutMs);
46
- const installed = await probePython({ executable: stdout.trim(), args: [] }, { ...options, env: uvEnv });
47
- if (!installed || !semver.satisfies(installed.version, options.pythonRange)) {
48
- throw new Error(`uv installed Python ${options.managedPython}, but it does not satisfy ${options.pythonRange}.`);
66
+ // Base discovery happens before taking the venv lock, keeping the global lock
67
+ // order Python -> uv -> venv consistent across callers.
68
+ const basePython = await ensurePythonResolved(options);
69
+ const preferredUv = await findAvailableUv(options) ??
70
+ (options.installUv ? await ensureUvResolved(options) : null);
71
+ return withProvisioningLock({
72
+ key: `venv:${canonicalPath(directory)}`,
73
+ target: directory,
74
+ timeoutMs: options.coordinationTimeoutMs,
75
+ env: options.env,
76
+ check,
77
+ mutate: async (signal) => {
78
+ const entries = await readdir(directory);
79
+ const hasVenvConfiguration = fs.existsSync(path.join(directory, 'pyvenv.cfg'));
80
+ if (entries.length > 0 && !hasVenvConfiguration) {
81
+ throw new Error(`Refusing to replace non-virtual-environment contents at ${directory}.`);
82
+ }
83
+ await createVirtualEnvironment(directory, basePython, preferredUv, options, signal);
84
+ const installed = await inspectVirtualEnvironment(directory, options);
85
+ if (!installed || !pythonSatisfiesRequirements(installed, options)) {
86
+ throw new Error(`Python created ${directory}, but it does not satisfy the requested runtime capabilities.`);
87
+ }
88
+ return installed;
89
+ },
90
+ });
91
+ }
92
+ async function createVirtualEnvironment(directory, basePython, preferredUv, options, signal) {
93
+ if (preferredUv) {
94
+ try {
95
+ await createVirtualEnvironmentWithUv(preferredUv, directory, basePython, options, signal);
96
+ return;
97
+ }
98
+ catch {
99
+ // A usable Python may still provide its standard-library venv module.
49
100
  }
50
- return installed;
51
101
  }
52
- finally {
53
- await release();
102
+ try {
103
+ await runAsync(basePython.executable, ['-m', 'venv', directory], withoutActiveVirtualEnvironment(options.env), options.installTimeoutMs, signal);
104
+ return;
54
105
  }
106
+ catch (systemVenvError) {
107
+ if (preferredUv || !options.installUv)
108
+ throw systemVenvError;
109
+ }
110
+ throw new Error('Python could not create a virtual environment and uv installation is disabled.');
55
111
  }
56
- async function ensurePipResolved(python, options) {
57
- const existing = await findPip(python, options);
112
+ async function createVirtualEnvironmentWithUv(uv, directory, basePython, options, signal) {
113
+ await runAsync(uv.executable, [
114
+ 'venv',
115
+ '--no-project',
116
+ '--no-config',
117
+ '--no-python-downloads',
118
+ '--allow-existing',
119
+ '--python',
120
+ basePython.executable,
121
+ directory,
122
+ ], uvEnvironment(options), options.installTimeoutMs, signal);
123
+ }
124
+ async function inspectVirtualEnvironment(directory, options) {
125
+ const executable = virtualEnvironmentPythonExecutable(directory);
126
+ const info = await probePython({ executable, args: [] }, options);
127
+ return info?.virtualEnvironment && pathsEqual(info.virtualEnvironment, directory) ? info : null;
128
+ }
129
+ async function ensurePythonResolved(options) {
130
+ const existing = await discoverPython(options);
58
131
  if (existing)
59
132
  return existing;
133
+ if (!options.installPython) {
134
+ const capability = options.requireEmbedding
135
+ ? ' with compatible CPython development headers, architecture, and a linkable library'
136
+ : '';
137
+ throw new Error(`No Python interpreter satisfies ${options.pythonRange}${capability}; ` +
138
+ 'managed Python installation is disabled.');
139
+ }
140
+ const lockTarget = cacheLockTarget(options.cacheDir, 'python');
141
+ return withProvisioningLock({
142
+ key: `python:${canonicalPath(lockTarget)}`,
143
+ target: lockTarget,
144
+ timeoutMs: options.coordinationTimeoutMs,
145
+ env: options.env,
146
+ check: () => discoverPython(options),
147
+ mutate: async (signal) => {
148
+ const uv = await ensureUvResolved(options);
149
+ const uvEnv = uvEnvironment(options);
150
+ await runAsync(uv.executable, ['python', 'install', '--no-config', options.managedPython], uvEnv, options.installTimeoutMs, signal);
151
+ const installed = await findPythonWithUv(uv, options, signal);
152
+ if (!installed) {
153
+ throw new Error(`uv installed Python ${options.managedPython}, but it does not satisfy the requested ` +
154
+ 'runtime capabilities.');
155
+ }
156
+ return installed;
157
+ },
158
+ });
159
+ }
160
+ async function discoverPython(options) {
161
+ if (options.python) {
162
+ const configured = await probePython({ executable: options.python, args: [] }, options);
163
+ if (configured && pythonSatisfiesRequirements(configured, options))
164
+ return configured;
165
+ throw new Error(`Configured Python ${options.python} is unavailable or does not satisfy ${options.pythonRange}.`);
166
+ }
167
+ const existingUv = await findAvailableUv(options);
168
+ if (existingUv) {
169
+ const uvPython = await findPythonWithUv(existingUv, options);
170
+ if (uvPython)
171
+ return uvPython;
172
+ }
173
+ return findPython({ ...options, python: '' });
174
+ }
175
+ async function findPythonWithUv(uv, options, signal) {
176
+ const requests = [undefined, options.managedPython];
177
+ for (const requestedPython of requests) {
178
+ const args = [
179
+ 'python',
180
+ 'find',
181
+ '--no-project',
182
+ '--no-config',
183
+ '--managed-python',
184
+ '--no-python-downloads',
185
+ ];
186
+ if (requestedPython)
187
+ args.push(requestedPython);
188
+ try {
189
+ const { stdout } = await runAsync(uv.executable, args, uvEnvironment(options), options.probeTimeoutMs, signal);
190
+ const info = await probePython({ executable: stdout.trim(), args: [] }, options);
191
+ if (info && pythonSatisfiesRequirements(info, options))
192
+ return info;
193
+ }
194
+ catch (error) {
195
+ if (signal?.aborted)
196
+ throw signal.reason ?? error;
197
+ // Continue through the configured request and then normal system discovery.
198
+ }
199
+ }
200
+ return null;
201
+ }
202
+ async function ensurePipResolved(python, options) {
60
203
  const existingUv = await findAvailableUv(options);
61
204
  if (existingUv)
62
205
  return uvPackageManager(existingUv, python);
63
- if (!options.autoInstall) {
64
- throw new Error(`No pip executable satisfies ${options.pipRange}; automatic uv installation is disabled.`);
65
- }
66
- const uv = await ensureUv(options);
67
- return uvPackageManager(uv, python);
206
+ // Default package operations always use uv, which supplies its own robust
207
+ // target-venv lock. python -m pip remains a read-only fallback for check-only setups.
208
+ if (options.installUv)
209
+ return uvPackageManager(await ensureUvResolved(options), python);
210
+ const existingPip = await findPip(python, options);
211
+ if (existingPip)
212
+ return existingPip;
213
+ throw new Error(`The virtual environment's python -m pip does not satisfy ${options.pipRange}; ` +
214
+ 'uv installation is disabled.');
68
215
  }
69
- async function ensureUv(options) {
216
+ async function ensureUvResolved(options) {
70
217
  const existing = await findAvailableUv(options);
71
218
  if (existing)
72
219
  return existing;
73
- if (!options.autoInstall)
74
- throw new Error('uv is unavailable and automatic installation is disabled.');
220
+ if (!options.installUv) {
221
+ throw new Error(`Compatible uv is unavailable (required ${options.uvRange}), and uv installation is disabled.`);
222
+ }
75
223
  const installDir = uvInstallDirectory(options);
76
224
  const executable = uvExecutable(options);
77
- const lockTarget = path.join(options.cacheDir, 'locks', 'uv');
78
- await mkdir(lockTarget, { recursive: true });
79
- const release = await lockfile.lock(lockTarget, LOCK_OPTIONS);
80
- try {
81
- const rechecked = probeUv(executable, options);
82
- if (rechecked)
83
- return rechecked;
84
- await installUv(installDir, options);
85
- const result = probeUv(executable, options);
86
- if (!result)
87
- throw new Error('The uv installer completed, but the installed executable could not run.');
88
- return result;
89
- }
90
- finally {
91
- await release();
92
- }
225
+ const lockTarget = cacheLockTarget(options.cacheDir, 'uv');
226
+ return withProvisioningLock({
227
+ key: `uv:${canonicalPath(lockTarget)}`,
228
+ target: lockTarget,
229
+ timeoutMs: options.coordinationTimeoutMs,
230
+ env: options.env,
231
+ check: () => findAvailableUv(options),
232
+ mutate: async (signal) => {
233
+ await installUv(installDir, options, signal);
234
+ const result = probeUv(executable, options);
235
+ if (!result || result.version !== options.uvVersion) {
236
+ throw new Error(`Expected managed uv ${options.uvVersion}, but the installed executable did not match.`);
237
+ }
238
+ return result;
239
+ },
240
+ });
93
241
  }
94
242
  async function findAvailableUv(options) {
95
- return await findUv(options) ?? probeUv(uvExecutable(options), options);
243
+ const system = await findUv(options);
244
+ if (system)
245
+ return system;
246
+ const managed = probeUv(uvExecutable(options), options);
247
+ return managed?.version === options.uvVersion ? managed : null;
96
248
  }
97
249
  function uvInstallDirectory(options) {
98
250
  return path.join(options.cacheDir, 'tools', 'uv', options.uvVersion);
@@ -101,56 +253,182 @@ function uvExecutable(options) {
101
253
  return path.join(uvInstallDirectory(options), process.platform === 'win32' ? 'uv.exe' : 'uv');
102
254
  }
103
255
  function uvPackageManager(uv, python) {
256
+ if (!python.virtualEnvironment) {
257
+ throw new Error('uv pip commands require a virtual-environment Python interpreter.');
258
+ }
104
259
  return {
105
260
  kind: 'uv',
106
261
  executable: uv.executable,
107
262
  prefixArgs: ['pip'],
108
263
  version: uv.version,
109
264
  pythonExecutable: python.executable,
265
+ virtualEnvironment: python.virtualEnvironment,
110
266
  };
111
267
  }
112
- async function installUv(installDir, options) {
113
- const scriptName = process.platform === 'win32' ? 'install.ps1' : 'install.sh';
114
- const installerUrl = `https://astral.sh/uv/${options.uvVersion}/${scriptName}`;
268
+ function withoutActiveVirtualEnvironment(env) {
269
+ const result = { ...env };
270
+ for (const key of Object.keys(result)) {
271
+ const normalized = key.toUpperCase();
272
+ if (normalized === 'CONDA_PREFIX' || normalized === 'VIRTUAL_ENV' ||
273
+ normalized === 'PYTHONHOME') {
274
+ delete result[key];
275
+ }
276
+ }
277
+ return result;
278
+ }
279
+ async function installUv(installDir, options, signal) {
280
+ const asset = uvAsset();
281
+ const baseUrl = `https://github.com/astral-sh/uv/releases/download/${options.uvVersion}`;
115
282
  const temporary = await mkdtemp(path.join(os.tmpdir(), 'pyfig-uv-'));
283
+ const dispatcher = proxyDispatcher(options.env);
116
284
  try {
117
- const installer = path.join(temporary, scriptName);
118
- await download(installerUrl, installer);
119
- await mkdir(installDir, { recursive: true });
120
- const env = {
121
- ...options.env,
122
- UV_UNMANAGED_INSTALL: installDir,
123
- UV_NO_MODIFY_PATH: '1',
124
- };
125
- if (process.platform === 'win32') {
126
- const powershell = await resolveExecutable('powershell.exe', env) ??
127
- await resolveExecutable('pwsh', env);
128
- if (!powershell)
129
- throw new Error('The uv Windows installer requires PowerShell or pwsh.');
130
- run(powershell, ['-NoLogo', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', installer], env, options.installTimeoutMs);
131
- }
132
- else {
133
- const shell = await resolveExecutable('sh', env);
134
- if (!shell)
135
- throw new Error('The uv installer requires a POSIX sh executable.');
136
- run(shell, [installer], env, options.installTimeoutMs);
285
+ const archive = path.join(temporary, asset);
286
+ await download(`${baseUrl}/${asset}`, archive, options.downloadTimeoutMs, signal, dispatcher);
287
+ const expected = (await downloadText(`${baseUrl}/${asset}.sha256`, options.downloadTimeoutMs, signal, dispatcher)).trim().split(/\s+/u)[0];
288
+ const actual = await sha256File(archive);
289
+ if (!expected || expected.toLowerCase() !== actual.toLowerCase()) {
290
+ throw new Error(`uv archive checksum mismatch for ${asset}`);
137
291
  }
292
+ const extracted = path.join(temporary, 'extracted');
293
+ await mkdir(extracted, { recursive: true });
294
+ signal.throwIfAborted();
295
+ if (asset.endsWith('.zip'))
296
+ await extractZip(archive, { dir: extracted });
297
+ else
298
+ await tar.x({ file: archive, cwd: extracted, strict: true });
299
+ signal.throwIfAborted();
300
+ const source = await findFile(extracted, process.platform === 'win32' ? 'uv.exe' : 'uv');
301
+ if (!source)
302
+ throw new Error(`uv archive did not contain the expected executable: ${asset}`);
303
+ await publishUvAtomically(source, installDir, options);
138
304
  }
139
305
  finally {
306
+ await dispatcher?.close();
140
307
  await rm(temporary, { recursive: true, force: true });
141
308
  }
142
309
  }
143
- async function download(url, destination) {
144
- const response = await fetch(url, { redirect: 'follow' });
145
- if (!response.ok)
310
+ async function publishUvAtomically(source, installDir, options) {
311
+ await mkdir(installDir, { recursive: true });
312
+ const executable = uvExecutable(options);
313
+ const staged = path.join(installDir, `.${path.basename(executable)}.${process.pid}.${randomUUID()}.tmp`);
314
+ try {
315
+ await copyFile(source, staged);
316
+ if (process.platform !== 'win32')
317
+ await chmod(staged, 0o755);
318
+ const stagedUv = probeUv(staged, options);
319
+ if (!stagedUv || stagedUv.version !== options.uvVersion) {
320
+ throw new Error(`Downloaded uv executable is not version ${options.uvVersion}.`);
321
+ }
322
+ if (process.platform === 'win32')
323
+ await rm(executable, { force: true });
324
+ await rename(staged, executable);
325
+ }
326
+ finally {
327
+ await rm(staged, { force: true });
328
+ }
329
+ }
330
+ function uvAsset() {
331
+ const architecture = process.arch === 'x64'
332
+ ? 'x86_64'
333
+ : process.arch === 'arm64'
334
+ ? 'aarch64'
335
+ : null;
336
+ if (!architecture)
337
+ throw new Error(`uv bootstrap does not support architecture ${process.arch}.`);
338
+ if (process.platform === 'win32')
339
+ return `uv-${architecture}-pc-windows-msvc.zip`;
340
+ if (process.platform === 'darwin')
341
+ return `uv-${architecture}-apple-darwin.tar.gz`;
342
+ // Astral's musl artifacts are fully static and run on both musl and glibc Linux.
343
+ if (process.platform === 'linux')
344
+ return `uv-${architecture}-unknown-linux-musl.tar.gz`;
345
+ throw new Error(`uv bootstrap does not support platform ${process.platform}.`);
346
+ }
347
+ async function download(url, destination, timeoutMs, externalSignal, dispatcher) {
348
+ const response = await fetch(url, {
349
+ dispatcher,
350
+ redirect: 'follow',
351
+ signal: combinedSignal(timeoutMs, externalSignal),
352
+ });
353
+ if (!response.ok || !response.body) {
354
+ await response.body?.cancel();
355
+ throw new Error(`Could not download ${url}: HTTP ${response.status}`);
356
+ }
357
+ await pipeline(Readable.fromWeb(response.body), createWriteStream(destination, { flags: 'wx' }));
358
+ }
359
+ async function downloadText(url, timeoutMs, externalSignal, dispatcher) {
360
+ const response = await fetch(url, {
361
+ dispatcher,
362
+ redirect: 'follow',
363
+ signal: combinedSignal(timeoutMs, externalSignal),
364
+ });
365
+ if (!response.ok) {
366
+ await response.body?.cancel();
146
367
  throw new Error(`Could not download ${url}: HTTP ${response.status}`);
147
- await writeFile(destination, new Uint8Array(await response.arrayBuffer()));
368
+ }
369
+ return response.text();
148
370
  }
149
- function uvEnvironment(options) {
150
- return {
151
- ...options.env,
152
- UV_PYTHON_INSTALL_DIR: path.join(options.cacheDir, 'python'),
153
- UV_CACHE_DIR: path.join(options.cacheDir, 'uv-cache'),
154
- };
371
+ function proxyDispatcher(env) {
372
+ const httpProxy = environmentValue(env, 'http_proxy', 'HTTP_PROXY');
373
+ const httpsProxy = environmentValue(env, 'https_proxy', 'HTTPS_PROXY');
374
+ if (!httpProxy && !httpsProxy)
375
+ return undefined;
376
+ return new EnvHttpProxyAgent({
377
+ httpProxy,
378
+ httpsProxy,
379
+ noProxy: environmentValue(env, 'no_proxy', 'NO_PROXY'),
380
+ });
381
+ }
382
+ function environmentValue(env, lowercase, uppercase) {
383
+ return env[lowercase] ?? env[uppercase];
384
+ }
385
+ function combinedSignal(timeoutMs, externalSignal) {
386
+ return AbortSignal.any([externalSignal, AbortSignal.timeout(timeoutMs)]);
387
+ }
388
+ async function sha256File(file) {
389
+ const hash = createHash('sha256');
390
+ for await (const chunk of createReadStream(file))
391
+ hash.update(chunk);
392
+ return hash.digest('hex');
393
+ }
394
+ async function findFile(directory, name) {
395
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
396
+ const target = path.join(directory, entry.name);
397
+ if (entry.isFile() && entry.name === name)
398
+ return target;
399
+ if (entry.isDirectory()) {
400
+ const nested = await findFile(target, name);
401
+ if (nested)
402
+ return nested;
403
+ }
404
+ }
405
+ return null;
406
+ }
407
+ function incompatibleVirtualEnvironmentError(directory, python, options) {
408
+ const capabilities = options.requireEmbedding
409
+ ? ' or lacks compatible CPython embedding headers, library, or architecture'
410
+ : '';
411
+ return new Error(`The existing virtual environment at ${directory} uses Python ${python.version}, ` +
412
+ `which does not satisfy ${options.pythonRange}${capabilities}.`);
413
+ }
414
+ async function virtualEnvironmentMatchesConfiguredPython(virtualEnvironment, options) {
415
+ if (!options.python)
416
+ return true;
417
+ const configured = await probePython({ executable: options.python, args: [] }, options);
418
+ if (!configured || !pythonSatisfiesRequirements(configured, options))
419
+ return false;
420
+ if (configured.virtualEnvironment && pathsEqual(configured.executable, virtualEnvironment.executable)) {
421
+ return true;
422
+ }
423
+ const configuredBase = configured.virtualEnvironment
424
+ ? configured.baseExecutable
425
+ : configured.executable;
426
+ return pathsEqual(configuredBase, virtualEnvironment.baseExecutable);
427
+ }
428
+ function pythonIsPresent(python) {
429
+ return fs.existsSync(python.executable);
430
+ }
431
+ function environmentIsPresent(environment) {
432
+ return pythonIsPresent(environment.python) && fs.existsSync(environment.packageManager.executable);
155
433
  }
156
434
  //# sourceMappingURL=provision.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAgD,MAAM,aAAa,CAAC;AAC3F,OAAO,EACL,OAAO,EACP,UAAU,EACV,MAAM,EACN,WAAW,EACX,OAAO,GAIR,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAOtD,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,EAAE,GAAG,MAAM;IAClB,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;CAChE,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAO,GAAiB,EAAE;IAC3D,OAAO,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAO,GAAiB,EAAE,EAC1B,MAAmB;IAEnB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,MAAM,IAAI,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACtE,OAAO,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAO,GAAiB,EAAE;IAChE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IAC/D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,mCAAmC,OAAO,CAAC,WAAW,uCAAuC,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhC,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,GAAG,CACD,EAAE,CAAC,UAAU,EACb,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,EAC5C,KAAK,EACL,OAAO,CAAC,gBAAgB,CACzB,CAAC;QACF,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CACpB,EAAE,CAAC,UAAU,EACb,CAAC,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,EAChF,KAAK,EACL,OAAO,CAAC,cAAc,CACvB,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EACvC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAC3B,CAAC;QACF,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,CAAC,aAAa,6BAA6B,OAAO,CAAC,WAAW,GAAG,CAChG,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAkB,EAClB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,UAAU;QAAE,OAAO,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,QAAQ,0CAA0C,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,OAA6B;IACnD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAEvG,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QACxG,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B;IAC1D,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA6B;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,OAA6B;IACjD,OAAO,IAAI,CAAC,IAAI,CACd,kBAAkB,CAAC,OAAO,CAAC,EAC3B,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC/C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU,EAAE,MAAkB;IACtD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,gBAAgB,EAAE,MAAM,CAAC,UAAU;KACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,UAAkB,EAClB,OAA6B;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/E,MAAM,YAAY,GAAG,wBAAwB,OAAO,CAAC,SAAS,IAAI,UAAU,EAAE,CAAC;IAC/E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG;YACV,GAAG,OAAO,CAAC,GAAG;YACd,oBAAoB,EAAE,UAAU;YAChC,iBAAiB,EAAE,GAAG;SACvB,CAAC;QACF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,EAAE,GAAG,CAAC;gBAC/D,MAAM,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC1F,GAAG,CACD,UAAU,EACV,CAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAC9F,GAAG,EACH,OAAO,CAAC,gBAAgB,CACzB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAChF,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,WAAmB;IACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,OAA6B;IAClD,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5D,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;KACtD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,EAAE,GACH,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,aAAa,GAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,OAAO,EACP,UAAU,EACV,MAAM,EACN,WAAW,EACX,OAAO,EACP,2BAA2B,GAI5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,aAAa,EACb,UAAU,EACV,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAOlC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAO,GAAiB,EAAE;IAC3D,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,YAAY,CACjB,QAAQ,EACR,wBAAwB,CAAC,QAAQ,CAAC,EAClC,QAAQ,CAAC,UAAU,EACnB,eAAe,EACf,GAAG,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAO,GAAiB,EAAE,EAC1B,MAAmB;IAEnB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,MAAM,EAAE,kBAAkB;QAC/C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,gCAAgC,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAO,GAAiB,EAAE;IACvE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,YAAY,CACjB,MAAM,EACN,wBAAwB,CAAC,QAAQ,CAAC,EAClC,QAAQ,CAAC,UAAU,EACnB,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAClC,UAAU,CAAC,MAAM,CAAC,kBAAmB,EAAE,2BAA2B,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAC3F,GAAG,EAAE,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAO,GAAiB,EAAE;IACvD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,YAAY,CACjB,IAAI,EACJ,wBAAwB,CAAC,QAAQ,CAAC,EAClC,QAAQ,CAAC,UAAU,EACnB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EACpC,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAO,GAAiB,EAAE;IAChE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,YAAY,CACjB,aAAa,EACb,wBAAwB,CAAC,QAAQ,CAAC,EAClC,QAAQ,CAAC,UAAU,EACnB,oBAAoB,EACpB,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,gCAAgC,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACpC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,OAA6B;IAE7B,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,KAAK,IAAgC,EAAE;QACnD,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC9C,MAAM,yCAAyC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,mCAAmC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,EAAE,CAAC;IAC/B,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,6BAA6B,SAAS,sCAAsC;YAC5E,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,wDAAwD;IACxD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC;QAChD,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,QAAQ,aAAa,CAAC,SAAS,CAAC,EAAE;QACvC,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,OAAO,CAAC,qBAAqB;QACxC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK;QACL,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAC/E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CAAC,2DAA2D,SAAS,GAAG,CAAC,CAAC;YAC3F,CAAC;YAED,MAAM,wBAAwB,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACpF,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CACb,kBAAkB,SAAS,+DAA+D,CAC3F,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,SAAiB,EACjB,UAAsB,EACtB,WAA0B,EAC1B,OAA6B,EAC7B,MAAmB;IAEnB,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,8BAA8B,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,CACZ,UAAU,CAAC,UAAU,EACrB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EACzB,+BAA+B,CAAC,OAAO,CAAC,GAAG,CAAC,EAC5C,OAAO,CAAC,gBAAgB,EACxB,MAAM,CACP,CAAC;QACF,OAAO;IACT,CAAC;IAAC,OAAO,eAAe,EAAE,CAAC;QACzB,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,MAAM,eAAe,CAAC;IAC/D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;AACpG,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,EAAU,EACV,SAAiB,EACjB,UAAsB,EACtB,OAA6B,EAC7B,MAAmB;IAEnB,MAAM,QAAQ,CACZ,EAAE,CAAC,UAAU,EACb;QACE,MAAM;QACN,cAAc;QACd,aAAa;QACb,uBAAuB;QACvB,kBAAkB;QAClB,UAAU;QACV,UAAU,CAAC,UAAU;QACrB,SAAS;KACV,EACD,aAAa,CAAC,OAAO,CAAC,EACtB,OAAO,CAAC,gBAAgB,EACxB,MAAM,CACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,SAAiB,EACjB,OAA6B;IAE7B,MAAM,UAAU,GAAG,kCAAkC,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO,IAAI,EAAE,kBAAkB,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAClG,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IAC/D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB;YACzC,CAAC,CAAC,oFAAoF;YACtF,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CACb,mCAAmC,OAAO,CAAC,WAAW,GAAG,UAAU,IAAI;YACvE,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/D,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,UAAU,aAAa,CAAC,UAAU,CAAC,EAAE;QAC1C,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,OAAO,CAAC,qBAAqB;QACxC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;QACpC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvB,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,QAAQ,CACZ,EAAE,CAAC,UAAU,EACb,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAC3D,KAAK,EACL,OAAO,CAAC,gBAAgB,EACxB,MAAM,CACP,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,CAAC,aAAa,0CAA0C;oBACtF,uBAAuB,CACxB,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAA6B;IACzD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACxF,IAAI,UAAU,IAAI,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC;QACtF,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,CAAC,MAAM,uCAAuC,OAAO,CAAC,WAAW,GAAG,CACjG,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IACD,OAAO,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,EAAU,EACV,OAA6B,EAC7B,MAAoB;IAEpB,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAU,CAAC;IAC7D,KAAK,MAAM,eAAe,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,MAAM;YACN,cAAc;YACd,aAAa;YACb,kBAAkB;YAClB,uBAAuB;SACxB,CAAC;QACF,IAAI,eAAe;YAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAC/B,EAAE,CAAC,UAAU,EACb,IAAI,EACJ,aAAa,CAAC,OAAO,CAAC,EACtB,OAAO,CAAC,cAAc,EACtB,MAAM,CACP,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YACjF,IAAI,IAAI,IAAI,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;YAClD,4EAA4E;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAkB,EAClB,OAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,UAAU;QAAE,OAAO,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE5D,0EAA0E;IAC1E,sFAAsF;IACtF,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO,gBAAgB,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IAExF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,MAAM,IAAI,KAAK,CACb,4DAA4D,OAAO,CAAC,QAAQ,IAAI;QAChF,8BAA8B,CAC/B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAA6B;IAC3D,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,0CAA0C,OAAO,CAAC,OAAO,qCAAqC,CAC/F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,MAAM,aAAa,CAAC,UAAU,CAAC,EAAE;QACtC,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,OAAO,CAAC,qBAAqB;QACxC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;QACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvB,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,CAAC,SAAS,+CAA+C,CACxF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA6B;IAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA6B;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,OAA6B;IACjD,OAAO,IAAI,CAAC,IAAI,CACd,kBAAkB,CAAC,OAAO,CAAC,EAC3B,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC/C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU,EAAE,MAAkB;IACtD,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,UAAU,EAAE,CAAC,KAAK,CAAC;QACnB,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,gBAAgB,EAAE,MAAM,CAAC,UAAU;QACnC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAsB;IAC7D,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,UAAU,KAAK,cAAc,IAAI,UAAU,KAAK,aAAa;YAC7D,UAAU,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,UAAkB,EAClB,OAA6B,EAC7B,MAAmB;IAEnB,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,qDAAqD,OAAO,CAAC,SAAS,EAAE,CAAC;IACzF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,QAAQ,CACZ,GAAG,OAAO,IAAI,KAAK,EAAE,EACrB,OAAO,EACP,OAAO,CAAC,iBAAiB,EACzB,MAAM,EACN,UAAU,CACX,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,MAAM,YAAY,CAClC,GAAG,OAAO,IAAI,KAAK,SAAS,EAC5B,OAAO,CAAC,iBAAiB,EACzB,MAAM,EACN,UAAU,CACX,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;;YACrE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,cAAc,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,KAAK,EAAE,CAAC,CAAC;QAC7F,MAAM,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;YAAS,CAAC;QACT,MAAM,UAAU,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAAc,EACd,UAAkB,EAClB,OAA6B;IAE7B,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CACtB,UAAU,EACV,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CACnE,CAAC;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK;QACzC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAClG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,MAAM,YAAY,sBAAsB,CAAC;IAClF,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,MAAM,YAAY,sBAAsB,CAAC;IACnF,iFAAiF;IACjF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,MAAM,YAAY,4BAA4B,CAAC;IACxF,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,GAAW,EACX,WAAmB,EACnB,SAAiB,EACjB,cAA2B,EAC3B,UAAyC;IAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,UAAU;QACV,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC;KAClD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,QAAQ,CACZ,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC/B,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAW,EACX,SAAiB,EACjB,cAA2B,EAC3B,UAAyC;IAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,UAAU;QACV,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC;KAClD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB;IAC7C,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACvE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,IAAI,iBAAiB,CAAC;QAC3B,SAAS;QACT,UAAU;QACV,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAsB,EACtB,SAAiB,EACjB,SAAiB;IAEjB,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,cAA2B;IACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,IAAY;IACrD,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QACzD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mCAAmC,CAC1C,SAAiB,EACjB,MAAkB,EAClB,OAA6B;IAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB;QAC3C,CAAC,CAAC,0EAA0E;QAC5E,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,IAAI,KAAK,CACd,uCAAuC,SAAS,gBAAgB,MAAM,CAAC,OAAO,IAAI;QAClF,0BAA0B,OAAO,CAAC,WAAW,GAAG,YAAY,GAAG,CAChE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yCAAyC,CACtD,kBAA8B,EAC9B,OAA6B;IAE7B,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACxF,IAAI,CAAC,UAAU,IAAI,CAAC,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,UAAU,CAAC,kBAAkB,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,cAAc,GAAG,UAAU,CAAC,kBAAkB;QAClD,CAAC,CAAC,UAAU,CAAC,cAAc;QAC3B,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAC1B,OAAO,UAAU,CAAC,cAAc,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,WAA8B;IAC1D,OAAO,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACrG,CAAC"}
package/dist/runners.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { spawnSync, type ChildProcess, type SpawnOptions, type SpawnSyncOptions } from 'node:child_process';
2
- import { type PyfigOptions } from './config.js';
3
- import type { PackageManagerInfo, PythonInfo } from './probes.js';
2
+ import { type PyfigOptions, type ResolvedPyfigOptions } from './config.js';
3
+ import type { PackageManagerInfo, PythonInfo, UvInfo } from './probes.js';
4
4
  export interface ResolvedCommand {
5
5
  executable: string;
6
6
  args: string[];
@@ -10,6 +10,9 @@ export declare function pythonSpawn(args?: readonly string[], spawnOptions?: Spa
10
10
  export declare function pythonSpawnSync(args?: readonly string[], spawnOptions?: SpawnSyncOptions, pyfigOptions?: PyfigOptions): ReturnType<typeof spawnSync>;
11
11
  export declare function pipSpawn(args?: readonly string[], spawnOptions?: SpawnOptions, pyfigOptions?: PyfigOptions): Promise<ChildProcess>;
12
12
  export declare function pipSpawnSync(args?: readonly string[], spawnOptions?: SpawnSyncOptions, pyfigOptions?: PyfigOptions): ReturnType<typeof spawnSync>;
13
+ export declare function uvSpawn(args?: readonly string[], spawnOptions?: SpawnOptions, pyfigOptions?: PyfigOptions): Promise<ChildProcess>;
14
+ export declare function uvSpawnSync(args?: readonly string[], spawnOptions?: SpawnSyncOptions, pyfigOptions?: PyfigOptions): ReturnType<typeof spawnSync>;
13
15
  export declare function buildPythonCommand(python: PythonInfo, args: readonly string[], env: NodeJS.ProcessEnv): ResolvedCommand;
14
16
  export declare function buildPipCommand(packageManager: PackageManagerInfo, args: readonly string[], env: NodeJS.ProcessEnv): ResolvedCommand;
17
+ export declare function buildUvCommand(uv: UvInfo, args: readonly string[], options: ResolvedPyfigOptions, python?: PythonInfo): ResolvedCommand;
15
18
  //# sourceMappingURL=runners.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../src/runners.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAkB,KAAK,YAAY,EAA6B,MAAM,aAAa,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAOD,wBAAsB,WAAW,CAC/B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,YAAiB,EAC/B,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAQvB;AAED,wBAAgB,eAAe,CAC7B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,gBAAqB,EACnC,YAAY,GAAE,YAAiB,GAC9B,UAAU,CAAC,OAAO,SAAS,CAAC,CAQ9B;AAED,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,YAAiB,EAC/B,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED,wBAAgB,YAAY,CAC1B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,gBAAqB,EACnC,YAAY,GAAE,YAAiB,GAC9B,UAAU,CAAC,OAAO,SAAS,CAAC,CAY9B;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,eAAe,CAMjB;AAED,wBAAgB,eAAe,CAC7B,cAAc,EAAE,kBAAkB,EAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,eAAe,CAQjB"}
1
+ {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../src/runners.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAkB1E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAYD,wBAAsB,WAAW,CAC/B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,YAAiB,EAC/B,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAQvB;AAED,wBAAgB,eAAe,CAC7B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,gBAAqB,EACnC,YAAY,GAAE,YAAiB,GAC9B,UAAU,CAAC,OAAO,SAAS,CAAC,CAQ9B;AAED,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,YAAiB,EAC/B,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED,wBAAgB,YAAY,CAC1B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,gBAAqB,EACnC,YAAY,GAAE,YAAiB,GAC9B,UAAU,CAAC,OAAO,SAAS,CAAC,CAY9B;AAED,wBAAsB,OAAO,CAC3B,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,YAAiB,EAC/B,YAAY,GAAE,YAAiB,GAC9B,OAAO,CAAC,YAAY,CAAC,CAYvB;AAED,wBAAgB,WAAW,CACzB,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,YAAY,GAAE,gBAAqB,EACnC,YAAY,GAAE,YAAiB,GAC9B,UAAU,CAAC,OAAO,SAAS,CAAC,CAW9B;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,eAAe,CASjB;AAED,wBAAgB,eAAe,CAC7B,cAAc,EAAE,kBAAkB,EAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,eAAe,CAWjB;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,UAAU,GAClB,eAAe,CAcjB"}