pyfig 0.3.1 → 0.4.0

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 (63) hide show
  1. package/README.md +112 -121
  2. package/SECURITY.md +1 -1
  3. package/dist/cjs/index.js +468 -868
  4. package/dist/cjs/index.js.map +14 -15
  5. package/dist/cjs/sync-resolver.js +426 -657
  6. package/dist/cjs/sync-resolver.js.map +12 -12
  7. package/dist/cli.js +5 -8
  8. package/dist/cli.js.map +1 -1
  9. package/dist/client.d.ts +3 -8
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +13 -11
  12. package/dist/client.js.map +1 -1
  13. package/dist/config.d.ts +4 -13
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +7 -51
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.d.ts +5 -6
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/package-target.d.ts +7 -11
  22. package/dist/package-target.d.ts.map +1 -1
  23. package/dist/package-target.js +41 -57
  24. package/dist/package-target.js.map +1 -1
  25. package/dist/probes.d.ts +0 -18
  26. package/dist/probes.d.ts.map +1 -1
  27. package/dist/probes.js +0 -70
  28. package/dist/probes.js.map +1 -1
  29. package/dist/process.d.ts +1 -1
  30. package/dist/process.d.ts.map +1 -1
  31. package/dist/process.js +2 -1
  32. package/dist/process.js.map +1 -1
  33. package/dist/project-root.d.ts +1 -1
  34. package/dist/project-root.d.ts.map +1 -1
  35. package/dist/project-root.js +3 -64
  36. package/dist/project-root.js.map +1 -1
  37. package/dist/provision-lock.d.ts +10 -0
  38. package/dist/provision-lock.d.ts.map +1 -0
  39. package/dist/provision-lock.js +24 -0
  40. package/dist/provision-lock.js.map +1 -0
  41. package/dist/provision.d.ts +18 -6
  42. package/dist/provision.d.ts.map +1 -1
  43. package/dist/provision.js +273 -228
  44. package/dist/provision.js.map +1 -1
  45. package/dist/runners.d.ts +3 -7
  46. package/dist/runners.d.ts.map +1 -1
  47. package/dist/runners.js +35 -115
  48. package/dist/runners.js.map +1 -1
  49. package/dist/sync-resolver.js +4 -13
  50. package/dist/sync-resolver.js.map +1 -1
  51. package/dist/virtual-environment.d.ts +3 -1
  52. package/dist/virtual-environment.d.ts.map +1 -1
  53. package/dist/virtual-environment.js +8 -1
  54. package/dist/virtual-environment.js.map +1 -1
  55. package/package.json +6 -8
  56. package/dist/coordination.d.ts +0 -25
  57. package/dist/coordination.d.ts.map +0 -1
  58. package/dist/coordination.js +0 -187
  59. package/dist/coordination.js.map +0 -1
  60. package/dist/state.d.ts +0 -10
  61. package/dist/state.d.ts.map +0 -1
  62. package/dist/state.js +0 -62
  63. package/dist/state.js.map +0 -1
@@ -1,21 +1,20 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/config.ts", "../../src/project-root.ts", "../../src/provision.ts", "../../src/coordination.ts", "../../src/process.ts", "../../src/probes.ts", "../../src/virtual-environment.ts", "../../src/state.ts", "../../src/runners.ts", "../../src/package-target.ts", "../../src/runtime-files.ts", "../../src/client.ts"],
3
+ "sources": ["../../src/config.ts", "../../src/project-root.ts", "../../src/client.ts", "../../src/provision.ts", "../../src/provision-lock.ts", "../../src/virtual-environment.ts", "../../src/package-target.ts", "../../src/probes.ts", "../../src/process.ts", "../../src/runners.ts", "../../src/runtime-files.ts"],
4
4
  "sourcesContent": [
5
- "import { createHash } from 'node:crypto';\nimport path from 'node:path';\nimport * as envPaths from 'env-paths';\nimport semver from 'semver';\nimport { resolveProjectRoot } from './project-root.js';\n\nexport const DEFAULT_PYTHON_RANGE = '>=3.10.0 <4.0.0';\nexport const DEFAULT_PIP_RANGE = '>=20.3.0';\nexport const DEFAULT_MANAGED_PYTHON = '3.12';\nexport const DEFAULT_UV_VERSION = '0.13.6';\nexport const DEFAULT_UV_RANGE = `>=${DEFAULT_UV_VERSION} <1.0.0`;\n\nconst DEFAULT_PROBE_TIMEOUT_MS = 10_000;\nconst DEFAULT_INSTALL_TIMEOUT_MS = 10 * 60_000;\nconst DEFAULT_DOWNLOAD_TIMEOUT_MS = 5 * 60_000;\nconst DEFAULT_CACHE_TTL_MS = 30_000;\n\n// Bun's CommonJS bundler wraps an external ESM default one level deeper than\n// Node.js. Normalize that boundary once instead of leaking runtime checks into\n// configuration resolution.\nconst envPathsFunction = (() => {\n const imported = envPaths.default as typeof envPaths.default | {\n default?: typeof envPaths.default;\n };\n const implementation = typeof imported === 'function' ? imported : imported.default;\n if (!implementation) throw new TypeError('env-paths did not expose its default function.');\n return implementation;\n})();\n\nexport interface PyfigOptions {\n /** Exact interpreter path that an existing or newly created venv must derive from. */\n python?: string;\n /** Accepted Python language-version range. */\n pythonRange?: string;\n /** Accepted python -m pip version when uv installation is disabled. */\n pipRange?: string;\n /** uv Python request used only when no compatible interpreter exists. */\n managedPython?: string;\n /** Exact uv release installed into Pyfig's private cache. */\n uvVersion?: string;\n /** Accepted range for an externally installed uv executable. */\n uvRange?: string;\n /** Require Python development headers and a linkable CPython library. */\n requireEmbedding?: boolean;\n /** Reject free-threaded CPython builds when the consumer requires the GIL ABI. */\n requireGil?: boolean;\n /** Backward-compatible default for the three specific setup policies. */\n autoInstall?: boolean;\n /** Allow uv to install a managed Python when no compatible interpreter exists. */\n installPython?: boolean;\n /** Allow Pyfig to install its pinned, checksum-verified uv executable. */\n installUv?: boolean;\n /** Allow creation of the repository-root .venv. */\n createVirtualEnvironment?: boolean;\n /** Private cache root for uv, managed Python, downloads, and coordination. */\n cacheDir?: string;\n /** Repository root that owns the single `.venv`. */\n projectRoot?: string;\n /** Maximum duration of one executable capability probe. */\n probeTimeoutMs?: number;\n /** Maximum duration of a Python, uv, or venv installation subprocess. */\n installTimeoutMs?: number;\n /** Maximum duration of one uv archive or checksum request. */\n downloadTimeoutMs?: number;\n /** Maximum wait for another worker or process provisioning the same resource. */\n coordinationTimeoutMs?: number;\n /** Lifetime of validated realm-local resolution results; zero disables completed caching. */\n cacheTtlMs?: number;\n /** Complete child environment and configuration source for this invocation. */\n env?: NodeJS.ProcessEnv;\n}\n\nexport interface ResolvedPyfigOptions {\n python: string;\n pythonRange: string;\n pipRange: string;\n managedPython: string;\n uvVersion: string;\n uvRange: string;\n requireEmbedding: boolean;\n requireGil: boolean;\n autoInstall: boolean;\n installPython: boolean;\n installUv: boolean;\n createVirtualEnvironment: boolean;\n cacheDir: string;\n projectRoot: string;\n probeTimeoutMs: number;\n installTimeoutMs: number;\n downloadTimeoutMs: number;\n coordinationTimeoutMs: number;\n cacheTtlMs: number;\n env: NodeJS.ProcessEnv;\n}\n\nexport function resolveOptions(options: PyfigOptions = {}): ResolvedPyfigOptions {\n // Snapshot the environment so callers cannot change an in-flight policy by\n // mutating process.env or a reused options object after resolution.\n const env = { ...(options.env ?? process.env) };\n const pythonRange = options.pythonRange ?? env['PYFIG_PYTHON_RANGE'] ?? DEFAULT_PYTHON_RANGE;\n const pipRange = options.pipRange ?? env['PYFIG_PIP_RANGE'] ?? DEFAULT_PIP_RANGE;\n const uvRange = options.uvRange ?? env['PYFIG_UV_RANGE'] ?? DEFAULT_UV_RANGE;\n assertRange('Python', pythonRange);\n assertRange('pip', pipRange);\n assertRange('uv', uvRange);\n\n const managedPython = options.managedPython ??\n env['PYFIG_MANAGED_PYTHON'] ?? DEFAULT_MANAGED_PYTHON;\n const uvVersion = options.uvVersion ?? env['PYFIG_UV_VERSION'] ?? DEFAULT_UV_VERSION;\n assertManagedPythonRequest(managedPython, pythonRange);\n assertUvVersion(uvVersion, uvRange);\n\n const probeTimeoutMs = resolveDuration(\n 'probeTimeoutMs',\n options.probeTimeoutMs,\n env['PYFIG_PROBE_TIMEOUT_MS'],\n DEFAULT_PROBE_TIMEOUT_MS,\n );\n const installTimeoutMs = resolveDuration(\n 'installTimeoutMs',\n options.installTimeoutMs,\n env['PYFIG_INSTALL_TIMEOUT_MS'],\n DEFAULT_INSTALL_TIMEOUT_MS,\n );\n const downloadTimeoutMs = resolveDuration(\n 'downloadTimeoutMs',\n options.downloadTimeoutMs,\n env['PYFIG_DOWNLOAD_TIMEOUT_MS'],\n DEFAULT_DOWNLOAD_TIMEOUT_MS,\n );\n const coordinationTimeoutMs = resolveDuration(\n 'coordinationTimeoutMs',\n options.coordinationTimeoutMs,\n env['PYFIG_COORDINATION_TIMEOUT_MS'],\n installTimeoutMs + downloadTimeoutMs + 60_000,\n );\n const cacheTtlMs = resolveDuration(\n 'cacheTtlMs',\n options.cacheTtlMs,\n env['PYFIG_CACHE_TTL_MS'],\n DEFAULT_CACHE_TTL_MS,\n true,\n );\n\n const configuredHome = options.cacheDir ?? env['PYFIG_HOME'];\n const cacheDir = configuredHome\n ? path.resolve(configuredHome)\n : envPathsFunction('pyfig', { suffix: '' }).cache;\n const configuredProjectRoot = options.projectRoot ?? env['PYFIG_PROJECT_ROOT'];\n const projectRoot = configuredProjectRoot\n ? path.resolve(configuredProjectRoot)\n : resolveProjectRoot();\n const autoInstall = options.autoInstall ?? parseBoolean(env['PYFIG_AUTO_INSTALL'], true);\n\n return {\n python: options.python ?? env['PYFIG_PYTHON'] ?? '',\n pythonRange,\n pipRange,\n managedPython,\n uvVersion,\n uvRange,\n requireEmbedding: options.requireEmbedding ?? parseBoolean(env['PYFIG_REQUIRE_EMBEDDING'], false),\n requireGil: options.requireGil ?? parseBoolean(env['PYFIG_REQUIRE_GIL'], false),\n autoInstall,\n installPython: options.installPython ?? parseBoolean(env['PYFIG_INSTALL_PYTHON'], autoInstall),\n installUv: options.installUv ?? parseBoolean(env['PYFIG_INSTALL_UV'], autoInstall),\n createVirtualEnvironment: options.createVirtualEnvironment ??\n parseBoolean(env['PYFIG_CREATE_VIRTUAL_ENVIRONMENT'], autoInstall),\n cacheDir,\n projectRoot,\n probeTimeoutMs,\n installTimeoutMs,\n downloadTimeoutMs,\n coordinationTimeoutMs,\n cacheTtlMs,\n env,\n };\n}\n\n/** Opaque identity shared by every async and sync resolution cache. */\nexport function configurationFingerprint(options: ResolvedPyfigOptions): string {\n const policy = [\n normalizedPath(options.projectRoot),\n normalizedPath(options.cacheDir),\n options.python,\n options.pythonRange,\n options.pipRange,\n options.managedPython,\n options.uvVersion,\n options.uvRange,\n options.requireEmbedding,\n options.requireGil,\n options.autoInstall,\n options.installPython,\n options.installUv,\n options.createVirtualEnvironment,\n options.probeTimeoutMs,\n options.installTimeoutMs,\n options.downloadTimeoutMs,\n options.coordinationTimeoutMs,\n options.cacheTtlMs,\n environmentFingerprint(options.env),\n ];\n return createHash('sha256').update(JSON.stringify(policy)).digest('hex');\n}\n\n/** Keep uv-managed Python and cache data inside pyfig's configured cache root. */\nexport function uvEnvironment(options: ResolvedPyfigOptions): NodeJS.ProcessEnv {\n return {\n ...options.env,\n UV_PYTHON_INSTALL_DIR: path.join(options.cacheDir, 'python'),\n UV_CACHE_DIR: path.join(options.cacheDir, 'uv-cache'),\n };\n}\n\nfunction assertRange(tool: string, range: string): void {\n if (!semver.validRange(range)) {\n throw new TypeError(`Invalid ${tool} SemVer range: ${range}`);\n }\n}\n\nfunction assertUvVersion(version: string, range: string): void {\n if (!semver.valid(version)) {\n throw new TypeError(`Invalid exact uv version: ${version}`);\n }\n if (!semver.satisfies(version, range)) {\n throw new TypeError(`Pinned uv ${version} does not satisfy supported range ${range}.`);\n }\n}\n\nfunction assertManagedPythonRequest(request: string, pythonRange: string): void {\n if (!request || /[\\\\/\\0\\r\\n]/u.test(request) || request.includes('..')) {\n throw new TypeError(`Invalid managed Python request: ${request}`);\n }\n if (/^\\d+\\.\\d+(?:\\.\\d+)?$/u.test(request)) {\n const normalized = request.split('.').length === 2 ? `${request}.0` : request;\n if (!semver.satisfies(normalized, pythonRange)) {\n throw new TypeError(\n `Managed Python ${request} cannot satisfy configured range ${pythonRange}.`,\n );\n }\n }\n}\n\nfunction resolveDuration(\n name: string,\n explicit: number | undefined,\n environment: string | undefined,\n fallback: number,\n allowZero = false,\n): number {\n const value = explicit ?? (environment === undefined ? fallback : Number(environment));\n const minimum = allowZero ? 0 : 1;\n if (!Number.isSafeInteger(value) || value < minimum) {\n throw new TypeError(`${name} must be ${allowZero ? 'a non-negative' : 'a positive'} integer.`);\n }\n return value;\n}\n\nfunction parseBoolean(value: string | undefined, fallback: boolean): boolean {\n if (value === undefined) return fallback;\n if (/^(1|true|yes|on)$/iu.test(value)) return true;\n if (/^(0|false|no|off)$/iu.test(value)) return false;\n throw new TypeError(`Invalid boolean value: ${value}`);\n}\n\nfunction environmentFingerprint(env: NodeJS.ProcessEnv): string {\n const entries = Object.entries(env)\n .filter((entry): entry is [string, string] => entry[1] !== undefined)\n .map(([key, value]): [string, string] => [\n process.platform === 'win32' ? key.toUpperCase() : key,\n value,\n ])\n .sort(([left], [right]) => left.localeCompare(right));\n return createHash('sha256').update(JSON.stringify(entries)).digest('hex');\n}\n\nfunction normalizedPath(value: string): string {\n const resolved = path.resolve(value);\n return process.platform === 'win32' ? resolved.toLowerCase() : resolved;\n}\n",
6
- "import fs from 'node:fs';\nimport path from 'node:path';\nimport { createFileSystemProject } from 'pacwich';\n\nconst PACKAGE_MANAGER_LOCKFILES = [\n 'bun.lock',\n 'bun.lockb',\n 'npm-shrinkwrap.json',\n 'package-lock.json',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n] as const;\n\nconst PYTHON_PROJECT_MARKERS = [\n 'pyproject.toml',\n 'uv.lock',\n] as const;\n\n/** Resolve the repository root from a working directory without requiring Git. */\nexport function resolveProjectRoot(startDirectory: string = process.cwd()): string {\n const start = path.resolve(startDirectory);\n const workspaceRoot = findWorkspaceProjectRoot(start);\n if (workspaceRoot) {\n try {\n return path.resolve(createFileSystemProject({\n rootDirectory: start,\n disableExecutableConfigs: true,\n }).rootDirectory);\n } catch {\n // Pacwich can reject an otherwise recognizable root when workspace metadata is incomplete.\n return workspaceRoot;\n }\n }\n\n return findConventionalProjectRoot(start);\n}\n\nfunction findWorkspaceProjectRoot(startDirectory: string): string | null {\n for (const directory of ancestors(startDirectory)) {\n const packageJson = path.join(directory, 'package.json');\n if (!fs.existsSync(packageJson)) continue;\n if (fs.existsSync(path.join(directory, 'pnpm-workspace.yaml'))) return directory;\n\n try {\n const manifest = JSON.parse(fs.readFileSync(packageJson, 'utf8')) as { workspaces?: unknown };\n if (hasWorkspaceDeclaration(manifest.workspaces)) return directory;\n } catch {\n // Keep walking so malformed nested package metadata cannot hide a valid ancestor.\n }\n }\n return null;\n}\n\nfunction findConventionalProjectRoot(startDirectory: string): string {\n let nearestPackageDirectory: string | null = null;\n let nearestPythonDirectory: string | null = null;\n for (const directory of ancestors(startDirectory)) {\n const hasPackage = fs.existsSync(path.join(directory, 'package.json'));\n if (hasPackage && !nearestPackageDirectory) nearestPackageDirectory = directory;\n if (!nearestPythonDirectory && PYTHON_PROJECT_MARKERS.some(\n (file) => fs.existsSync(path.join(directory, file)),\n )) {\n nearestPythonDirectory = directory;\n }\n if (hasPackage && PACKAGE_MANAGER_LOCKFILES.some((file) => fs.existsSync(path.join(directory, file)))) {\n return directory;\n }\n if (fs.existsSync(path.join(directory, '.git'))) return directory;\n }\n return nearestPackageDirectory ?? nearestPythonDirectory ?? startDirectory;\n}\n\nfunction hasWorkspaceDeclaration(value: unknown): boolean {\n return Array.isArray(value) || (value !== null && typeof value === 'object');\n}\n\nfunction* ancestors(startDirectory: string): Generator<string> {\n let directory = startDirectory;\n while (true) {\n yield directory;\n const parent = path.dirname(directory);\n if (parent === directory) return;\n directory = parent;\n }\n}\n",
7
- "import { createHash, randomUUID } from 'node:crypto';\nimport { createReadStream, createWriteStream } from 'node:fs';\nimport {\n chmod,\n copyFile,\n mkdir,\n mkdtemp,\n readdir,\n rename,\n rm,\n} from 'node:fs/promises';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport extractZip from 'extract-zip';\nimport * as tar from 'tar';\nimport { EnvHttpProxyAgent, fetch } from 'undici';\nimport {\n configurationFingerprint,\n resolveOptions,\n uvEnvironment,\n type PyfigOptions,\n type ResolvedPyfigOptions,\n} from './config.js';\nimport { cacheLockTarget, withProvisioningLock } from './coordination.js';\nimport {\n findPip,\n findPython,\n findUv,\n probePython,\n probeUv,\n pythonSatisfiesRequirements,\n type PackageManagerInfo,\n type PythonInfo,\n type UvInfo,\n} from './probes.js';\nimport { runAsync } from './process.js';\nimport { memoizeAsync } from './state.js';\nimport {\n canonicalPath,\n pathsEqual,\n virtualEnvironmentDirectory,\n virtualEnvironmentPythonExecutable,\n} from './virtual-environment.js';\n\nexport interface PythonEnvironment {\n python: PythonInfo;\n packageManager: PackageManagerInfo;\n}\n\nexport async function ensurePython(options: PyfigOptions = {}): Promise<PythonInfo> {\n const resolved = resolveOptions(options);\n return memoizeAsync(\n 'python',\n configurationFingerprint(resolved),\n resolved.cacheTtlMs,\n pythonIsPresent,\n () => ensurePythonResolved(resolved),\n );\n}\n\nexport async function ensurePip(\n options: PyfigOptions = {},\n python?: PythonInfo,\n): Promise<PackageManagerInfo> {\n const resolved = resolveOptions(options);\n const selectedPython = python?.virtualEnvironment\n ? python\n : await ensureVirtualEnvironmentResolved(resolved);\n return ensurePipResolved(selectedPython, resolved);\n}\n\nexport async function ensureVirtualEnvironment(options: PyfigOptions = {}): Promise<PythonInfo> {\n const resolved = resolveOptions(options);\n return memoizeAsync(\n 'venv',\n configurationFingerprint(resolved),\n resolved.cacheTtlMs,\n (python) => pythonIsPresent(python) &&\n Boolean(python.virtualEnvironment) &&\n pathsEqual(python.virtualEnvironment!, virtualEnvironmentDirectory(resolved.projectRoot)),\n () => ensureVirtualEnvironmentResolved(resolved),\n );\n}\n\nexport async function ensureUv(options: PyfigOptions = {}): Promise<UvInfo> {\n const resolved = resolveOptions(options);\n return memoizeAsync(\n 'uv',\n configurationFingerprint(resolved),\n resolved.cacheTtlMs,\n (uv) => fs.existsSync(uv.executable),\n () => ensureUvResolved(resolved),\n );\n}\n\nexport async function ensureEnvironment(options: PyfigOptions = {}): Promise<PythonEnvironment> {\n const resolved = resolveOptions(options);\n return memoizeAsync(\n 'environment',\n configurationFingerprint(resolved),\n resolved.cacheTtlMs,\n environmentIsPresent,\n async () => {\n const python = await ensureVirtualEnvironmentResolved(resolved);\n const packageManager = await ensurePipResolved(python, resolved);\n return { python, packageManager };\n },\n );\n}\n\nasync function ensureVirtualEnvironmentResolved(\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo> {\n const directory = virtualEnvironmentDirectory(options.projectRoot);\n const check = async (): Promise<PythonInfo | null> => {\n const existing = await inspectVirtualEnvironment(directory, options);\n if (!existing) return null;\n if (pythonSatisfiesRequirements(existing, options) &&\n await virtualEnvironmentMatchesConfiguredPython(existing, options)) {\n return existing;\n }\n throw incompatibleVirtualEnvironmentError(directory, existing, options);\n };\n\n const existing = await check();\n if (existing) return existing;\n if (!options.createVirtualEnvironment) {\n throw new Error(\n `No virtual environment at ${directory} satisfies the Python requirements; ` +\n 'virtual-environment creation is disabled.',\n );\n }\n\n // Base discovery happens before taking the venv lock, keeping the global lock\n // order Python -> uv -> venv consistent across callers.\n const basePython = await ensurePythonResolved(options);\n const preferredUv = await findAvailableUv(options) ??\n (options.installUv ? await ensureUvResolved(options) : null);\n return withProvisioningLock({\n key: `venv:${canonicalPath(directory)}`,\n target: directory,\n timeoutMs: options.coordinationTimeoutMs,\n env: options.env,\n check,\n mutate: async (signal) => {\n const entries = await readdir(directory);\n const hasVenvConfiguration = fs.existsSync(path.join(directory, 'pyvenv.cfg'));\n if (entries.length > 0 && !hasVenvConfiguration) {\n throw new Error(`Refusing to replace non-virtual-environment contents at ${directory}.`);\n }\n\n await createVirtualEnvironment(directory, basePython, preferredUv, options, signal);\n const installed = await inspectVirtualEnvironment(directory, options);\n if (!installed || !pythonSatisfiesRequirements(installed, options)) {\n throw new Error(\n `Python created ${directory}, but it does not satisfy the requested runtime capabilities.`,\n );\n }\n return installed;\n },\n });\n}\n\nasync function createVirtualEnvironment(\n directory: string,\n basePython: PythonInfo,\n preferredUv: UvInfo | null,\n options: ResolvedPyfigOptions,\n signal: AbortSignal,\n): Promise<void> {\n if (preferredUv) {\n try {\n await createVirtualEnvironmentWithUv(preferredUv, directory, basePython, options, signal);\n return;\n } catch {\n // A usable Python may still provide its standard-library venv module.\n }\n }\n\n try {\n await runAsync(\n basePython.executable,\n ['-m', 'venv', directory],\n withoutActiveVirtualEnvironment(options.env),\n options.installTimeoutMs,\n signal,\n );\n return;\n } catch (systemVenvError) {\n if (preferredUv || !options.installUv) throw systemVenvError;\n }\n throw new Error('Python could not create a virtual environment and uv installation is disabled.');\n}\n\nasync function createVirtualEnvironmentWithUv(\n uv: UvInfo,\n directory: string,\n basePython: PythonInfo,\n options: ResolvedPyfigOptions,\n signal: AbortSignal,\n): Promise<void> {\n await runAsync(\n uv.executable,\n [\n 'venv',\n '--no-project',\n '--no-config',\n '--no-python-downloads',\n '--allow-existing',\n '--python',\n basePython.executable,\n directory,\n ],\n uvEnvironment(options),\n options.installTimeoutMs,\n signal,\n );\n}\n\nasync function inspectVirtualEnvironment(\n directory: string,\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo | null> {\n const executable = virtualEnvironmentPythonExecutable(directory);\n const info = await probePython({ executable, args: [] }, options);\n return info?.virtualEnvironment && pathsEqual(info.virtualEnvironment, directory) ? info : null;\n}\n\nasync function ensurePythonResolved(options: ResolvedPyfigOptions): Promise<PythonInfo> {\n const existing = await discoverPython(options);\n if (existing) return existing;\n if (!options.installPython) {\n const capability = options.requireEmbedding\n ? ' with compatible CPython development headers, architecture, and a linkable library'\n : '';\n throw new Error(\n `No Python interpreter satisfies ${options.pythonRange}${capability}; ` +\n 'managed Python installation is disabled.',\n );\n }\n\n const lockTarget = cacheLockTarget(options.cacheDir, 'python');\n return withProvisioningLock({\n key: `python:${canonicalPath(lockTarget)}`,\n target: lockTarget,\n timeoutMs: options.coordinationTimeoutMs,\n env: options.env,\n check: () => discoverPython(options),\n mutate: async (signal) => {\n const uv = await ensureUvResolved(options);\n const uvEnv = uvEnvironment(options);\n await runAsync(\n uv.executable,\n ['python', 'install', '--no-config', options.managedPython],\n uvEnv,\n options.installTimeoutMs,\n signal,\n );\n const installed = await findPythonWithUv(uv, options, signal);\n if (!installed) {\n throw new Error(\n `uv installed Python ${options.managedPython}, but it does not satisfy the requested ` +\n 'runtime capabilities.',\n );\n }\n return installed;\n },\n });\n}\n\nasync function discoverPython(options: ResolvedPyfigOptions): Promise<PythonInfo | null> {\n if (options.python) {\n const configured = await probePython({ executable: options.python, args: [] }, options);\n if (configured && pythonSatisfiesRequirements(configured, options)) return configured;\n throw new Error(\n `Configured Python ${options.python} is unavailable or does not satisfy ${options.pythonRange}.`,\n );\n }\n\n const existingUv = await findAvailableUv(options);\n if (existingUv) {\n const uvPython = await findPythonWithUv(existingUv, options);\n if (uvPython) return uvPython;\n }\n return findPython({ ...options, python: '' });\n}\n\nasync function findPythonWithUv(\n uv: UvInfo,\n options: ResolvedPyfigOptions,\n signal?: AbortSignal,\n): Promise<PythonInfo | null> {\n const requests = [undefined, options.managedPython] as const;\n for (const requestedPython of requests) {\n const args = [\n 'python',\n 'find',\n '--no-project',\n '--no-config',\n '--managed-python',\n '--no-python-downloads',\n ];\n if (requestedPython) args.push(requestedPython);\n try {\n const { stdout } = await runAsync(\n uv.executable,\n args,\n uvEnvironment(options),\n options.probeTimeoutMs,\n signal,\n );\n const info = await probePython({ executable: stdout.trim(), args: [] }, options);\n if (info && pythonSatisfiesRequirements(info, options)) return info;\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n // Continue through the configured request and then normal system discovery.\n }\n }\n return null;\n}\n\nasync function ensurePipResolved(\n python: PythonInfo,\n options: ResolvedPyfigOptions,\n): Promise<PackageManagerInfo> {\n const existingUv = await findAvailableUv(options);\n if (existingUv) return uvPackageManager(existingUv, python);\n\n // Default package operations always use uv, which supplies its own robust\n // target-venv lock. python -m pip remains a read-only fallback for check-only setups.\n if (options.installUv) return uvPackageManager(await ensureUvResolved(options), python);\n\n const existingPip = await findPip(python, options);\n if (existingPip) return existingPip;\n throw new Error(\n `The virtual environment's python -m pip does not satisfy ${options.pipRange}; ` +\n 'uv installation is disabled.',\n );\n}\n\nasync function ensureUvResolved(options: ResolvedPyfigOptions): Promise<UvInfo> {\n const existing = await findAvailableUv(options);\n if (existing) return existing;\n if (!options.installUv) {\n throw new Error(\n `Compatible uv is unavailable (required ${options.uvRange}), and uv installation is disabled.`,\n );\n }\n\n const installDir = uvInstallDirectory(options);\n const executable = uvExecutable(options);\n const lockTarget = cacheLockTarget(options.cacheDir, 'uv');\n return withProvisioningLock({\n key: `uv:${canonicalPath(lockTarget)}`,\n target: lockTarget,\n timeoutMs: options.coordinationTimeoutMs,\n env: options.env,\n check: () => findAvailableUv(options),\n mutate: async (signal) => {\n await installUv(installDir, options, signal);\n const result = probeUv(executable, options);\n if (!result || result.version !== options.uvVersion) {\n throw new Error(\n `Expected managed uv ${options.uvVersion}, but the installed executable did not match.`,\n );\n }\n return result;\n },\n });\n}\n\nasync function findAvailableUv(options: ResolvedPyfigOptions): Promise<UvInfo | null> {\n const system = await findUv(options);\n if (system) return system;\n const managed = probeUv(uvExecutable(options), options);\n return managed?.version === options.uvVersion ? managed : null;\n}\n\nfunction uvInstallDirectory(options: ResolvedPyfigOptions): string {\n return path.join(options.cacheDir, 'tools', 'uv', options.uvVersion);\n}\n\nfunction uvExecutable(options: ResolvedPyfigOptions): string {\n return path.join(\n uvInstallDirectory(options),\n process.platform === 'win32' ? 'uv.exe' : 'uv',\n );\n}\n\nfunction uvPackageManager(uv: UvInfo, python: PythonInfo): PackageManagerInfo {\n if (!python.virtualEnvironment) {\n throw new Error('uv pip commands require a virtual-environment Python interpreter.');\n }\n return {\n kind: 'uv',\n executable: uv.executable,\n prefixArgs: ['pip'],\n version: uv.version,\n pythonExecutable: python.executable,\n virtualEnvironment: python.virtualEnvironment,\n };\n}\n\nfunction withoutActiveVirtualEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const result = { ...env };\n for (const key of Object.keys(result)) {\n const normalized = key.toUpperCase();\n if (normalized === 'CONDA_PREFIX' || normalized === 'VIRTUAL_ENV' ||\n normalized === 'PYTHONHOME') {\n delete result[key];\n }\n }\n return result;\n}\n\nasync function installUv(\n installDir: string,\n options: ResolvedPyfigOptions,\n signal: AbortSignal,\n): Promise<void> {\n const asset = uvAsset();\n const baseUrl = `https://github.com/astral-sh/uv/releases/download/${options.uvVersion}`;\n const temporary = await mkdtemp(path.join(os.tmpdir(), 'pyfig-uv-'));\n const dispatcher = proxyDispatcher(options.env);\n try {\n const archive = path.join(temporary, asset);\n await download(\n `${baseUrl}/${asset}`,\n archive,\n options.downloadTimeoutMs,\n signal,\n dispatcher,\n );\n const expected = (await downloadText(\n `${baseUrl}/${asset}.sha256`,\n options.downloadTimeoutMs,\n signal,\n dispatcher,\n )).trim().split(/\\s+/u)[0];\n const actual = await sha256File(archive);\n if (!expected || expected.toLowerCase() !== actual.toLowerCase()) {\n throw new Error(`uv archive checksum mismatch for ${asset}`);\n }\n\n const extracted = path.join(temporary, 'extracted');\n await mkdir(extracted, { recursive: true });\n signal.throwIfAborted();\n if (asset.endsWith('.zip')) await extractZip(archive, { dir: extracted });\n else await tar.x({ file: archive, cwd: extracted, strict: true });\n signal.throwIfAborted();\n\n const source = await findFile(extracted, process.platform === 'win32' ? 'uv.exe' : 'uv');\n if (!source) throw new Error(`uv archive did not contain the expected executable: ${asset}`);\n await publishUvAtomically(source, installDir, options);\n } finally {\n await dispatcher?.close();\n await rm(temporary, { recursive: true, force: true });\n }\n}\n\nasync function publishUvAtomically(\n source: string,\n installDir: string,\n options: ResolvedPyfigOptions,\n): Promise<void> {\n await mkdir(installDir, { recursive: true });\n const executable = uvExecutable(options);\n const staged = path.join(\n installDir,\n `.${path.basename(executable)}.${process.pid}.${randomUUID()}.tmp`,\n );\n try {\n await copyFile(source, staged);\n if (process.platform !== 'win32') await chmod(staged, 0o755);\n const stagedUv = probeUv(staged, options);\n if (!stagedUv || stagedUv.version !== options.uvVersion) {\n throw new Error(`Downloaded uv executable is not version ${options.uvVersion}.`);\n }\n if (process.platform === 'win32') await rm(executable, { force: true });\n await rename(staged, executable);\n } finally {\n await rm(staged, { force: true });\n }\n}\n\nfunction uvAsset(): string {\n const architecture = process.arch === 'x64'\n ? 'x86_64'\n : process.arch === 'arm64'\n ? 'aarch64'\n : null;\n if (!architecture) throw new Error(`uv bootstrap does not support architecture ${process.arch}.`);\n if (process.platform === 'win32') return `uv-${architecture}-pc-windows-msvc.zip`;\n if (process.platform === 'darwin') return `uv-${architecture}-apple-darwin.tar.gz`;\n // Astral's musl artifacts are fully static and run on both musl and glibc Linux.\n if (process.platform === 'linux') return `uv-${architecture}-unknown-linux-musl.tar.gz`;\n throw new Error(`uv bootstrap does not support platform ${process.platform}.`);\n}\n\nasync function download(\n url: string,\n destination: string,\n timeoutMs: number,\n externalSignal: AbortSignal,\n dispatcher: EnvHttpProxyAgent | undefined,\n): Promise<void> {\n const response = await fetch(url, {\n dispatcher,\n redirect: 'follow',\n signal: combinedSignal(timeoutMs, externalSignal),\n });\n if (!response.ok || !response.body) {\n await response.body?.cancel();\n throw new Error(`Could not download ${url}: HTTP ${response.status}`);\n }\n await pipeline(\n Readable.fromWeb(response.body),\n createWriteStream(destination, { flags: 'wx' }),\n );\n}\n\nasync function downloadText(\n url: string,\n timeoutMs: number,\n externalSignal: AbortSignal,\n dispatcher: EnvHttpProxyAgent | undefined,\n): Promise<string> {\n const response = await fetch(url, {\n dispatcher,\n redirect: 'follow',\n signal: combinedSignal(timeoutMs, externalSignal),\n });\n if (!response.ok) {\n await response.body?.cancel();\n throw new Error(`Could not download ${url}: HTTP ${response.status}`);\n }\n return response.text();\n}\n\nfunction proxyDispatcher(env: NodeJS.ProcessEnv): EnvHttpProxyAgent | undefined {\n const httpProxy = environmentValue(env, 'http_proxy', 'HTTP_PROXY');\n const httpsProxy = environmentValue(env, 'https_proxy', 'HTTPS_PROXY');\n if (!httpProxy && !httpsProxy) return undefined;\n return new EnvHttpProxyAgent({\n httpProxy,\n httpsProxy,\n noProxy: environmentValue(env, 'no_proxy', 'NO_PROXY'),\n });\n}\n\nfunction environmentValue(\n env: NodeJS.ProcessEnv,\n lowercase: string,\n uppercase: string,\n): string | undefined {\n return env[lowercase] ?? env[uppercase];\n}\n\nfunction combinedSignal(timeoutMs: number, externalSignal: AbortSignal): AbortSignal {\n return AbortSignal.any([externalSignal, AbortSignal.timeout(timeoutMs)]);\n}\n\nasync function sha256File(file: string): Promise<string> {\n const hash = createHash('sha256');\n for await (const chunk of createReadStream(file)) hash.update(chunk);\n return hash.digest('hex');\n}\n\nasync function findFile(directory: string, name: string): Promise<string | null> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const target = path.join(directory, entry.name);\n if (entry.isFile() && entry.name === name) return target;\n if (entry.isDirectory()) {\n const nested = await findFile(target, name);\n if (nested) return nested;\n }\n }\n return null;\n}\n\nfunction incompatibleVirtualEnvironmentError(\n directory: string,\n python: PythonInfo,\n options: ResolvedPyfigOptions,\n): Error {\n const capabilities = options.requireEmbedding\n ? ' or lacks compatible CPython embedding headers, library, or architecture'\n : '';\n return new Error(\n `The existing virtual environment at ${directory} uses Python ${python.version}, ` +\n `which does not satisfy ${options.pythonRange}${capabilities}.`,\n );\n}\n\nasync function virtualEnvironmentMatchesConfiguredPython(\n virtualEnvironment: PythonInfo,\n options: ResolvedPyfigOptions,\n): Promise<boolean> {\n if (!options.python) return true;\n const configured = await probePython({ executable: options.python, args: [] }, options);\n if (!configured || !pythonSatisfiesRequirements(configured, options)) return false;\n if (configured.virtualEnvironment && pathsEqual(configured.executable, virtualEnvironment.executable)) {\n return true;\n }\n const configuredBase = configured.virtualEnvironment\n ? configured.baseExecutable\n : configured.executable;\n return pathsEqual(configuredBase, virtualEnvironment.baseExecutable);\n}\n\nfunction pythonIsPresent(python: PythonInfo): boolean {\n return fs.existsSync(python.executable);\n}\n\nfunction environmentIsPresent(environment: PythonEnvironment): boolean {\n return pythonIsPresent(environment.python) && fs.existsSync(environment.packageManager.executable);\n}\n",
8
- "import { createHash } from 'node:crypto';\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { mkdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport * as workerThreads from 'node:worker_threads';\nimport lockfile from 'proper-lockfile';\nimport { resolveExecutable } from './process.js';\n\ninterface LockManagerLike {\n request<T>(\n name: string,\n options: { mode: 'exclusive'; signal: AbortSignal },\n callback: () => Promise<T>,\n ): Promise<T>;\n}\n\nexport interface ResourceLockOptions {\n /** Stable logical identity shared by every caller of the protected resource. */\n key: string;\n /** Existing directory used by the portable cross-process lease. */\n target: string;\n timeoutMs: number;\n env: NodeJS.ProcessEnv;\n}\n\nexport interface ProvisioningLockOptions<T> extends ResourceLockOptions {\n check: () => Promise<T | null>;\n mutate: (signal: AbortSignal) => Promise<T>;\n}\n\nconst realmMutexTails = new Map<string, Promise<void>>();\nconst flockLookups = new Map<string, Promise<string | null>>();\nconst FLOCK_READY = 'PYFIG_FLOCK_READY';\nconst FLOCK_HOLDER = [\n `process.stdout.write('${FLOCK_READY}\\\\n')`,\n 'process.stdin.resume()',\n 'process.stdin.once(\"end\",()=>process.exit(0))',\n].join(';');\n\n/**\n * Apply check-lock-check around an idempotent provisioning mutation. The lock\n * stack is ordered identically everywhere to prevent lock-order inversions.\n */\nexport async function withProvisioningLock<T>(\n options: ProvisioningLockOptions<T>,\n): Promise<T> {\n const existing = await options.check();\n if (existing !== null) return existing;\n\n return withResourceLock(options, async (signal) => {\n const rechecked = await options.check();\n return rechecked ?? options.mutate(signal);\n });\n}\n\n/**\n * Serialize a resource in the current realm, across supported Node workers,\n * through native flock when present, and finally through a portable file lease.\n */\nexport async function withResourceLock<T>(\n options: ResourceLockOptions,\n operation: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n await mkdir(options.target, { recursive: true });\n return withRealmMutex(options.key, () =>\n withWorkerLock(options, () =>\n withNativeFlock(options, () =>\n withPortableLease(options, operation))));\n}\n\nasync function withRealmMutex<T>(key: string, operation: () => Promise<T>): Promise<T> {\n const previous = realmMutexTails.get(key) ?? Promise.resolve();\n let releaseGate!: () => void;\n const gate = new Promise<void>((resolve) => {\n releaseGate = resolve;\n });\n const tail = previous.catch(() => undefined).then(() => gate);\n realmMutexTails.set(key, tail);\n\n await previous.catch(() => undefined);\n try {\n return await operation();\n } finally {\n releaseGate();\n if (realmMutexTails.get(key) === tail) realmMutexTails.delete(key);\n }\n}\n\nasync function withWorkerLock<T>(\n options: ResourceLockOptions,\n operation: () => Promise<T>,\n): Promise<T> {\n const manager = (workerThreads as unknown as { locks?: LockManagerLike }).locks;\n if (!manager?.request) return operation();\n\n const controller = new AbortController();\n const timeout = setTimeout(\n () => controller.abort(new Error(`Timed out waiting for worker lock ${options.key}.`)),\n options.timeoutMs,\n );\n let entered = false;\n try {\n return await manager.request(\n workerLockName(options.key),\n { mode: 'exclusive', signal: controller.signal },\n async () => {\n entered = true;\n return operation();\n },\n );\n } catch (error) {\n // Worker locks are an optimization on runtimes that expose the experimental\n // API. The portable lease remains authoritative when acquisition is absent.\n if (entered) throw error;\n return operation();\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function withNativeFlock<T>(\n options: ResourceLockOptions,\n operation: () => Promise<T>,\n): Promise<T> {\n if (process.platform === 'win32') return operation();\n // Coordination helpers belong to the host runtime, not the child discovery\n // environment, which callers may intentionally strip of Python and uv paths.\n const executable = await findFlock(process.env);\n if (!executable) return operation();\n\n const child = await acquireFlock(executable, `${options.target}.flock`, options.timeoutMs);\n if (!child) return operation();\n try {\n return await operation();\n } finally {\n await releaseFlock(child);\n }\n}\n\nasync function findFlock(env: NodeJS.ProcessEnv): Promise<string | null> {\n const lookupKey = `${env['PATH'] ?? ''}\\0${env['PATHEXT'] ?? ''}`;\n let lookup = flockLookups.get(lookupKey);\n if (!lookup) {\n lookup = resolveExecutable('flock', env);\n flockLookups.set(lookupKey, lookup);\n }\n return lookup;\n}\n\nasync function acquireFlock(\n executable: string,\n lockPath: string,\n timeoutMs: number,\n): Promise<ChildProcessWithoutNullStreams | null> {\n const waitSeconds = Math.max(1, Math.ceil(Math.min(timeoutMs, 30_000) / 1000));\n const child = spawn(\n executable,\n ['-x', '-w', String(waitSeconds), lockPath, process.execPath, '-e', FLOCK_HOLDER],\n { stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true },\n );\n child.stderr.resume();\n let output = '';\n const acquired = await new Promise<boolean>((resolve) => {\n let settled = false;\n const finish = (value: boolean): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(value);\n };\n const timer = setTimeout(() => finish(false), Math.min(timeoutMs, 30_000) + 5_000);\n child.once('error', () => finish(false));\n child.once('exit', () => finish(false));\n child.stdout.setEncoding('utf8');\n child.stdout.on('data', (chunk: string) => {\n output += chunk;\n if (output.includes(FLOCK_READY)) finish(true);\n });\n });\n if (acquired) return child;\n child.kill();\n return null;\n}\n\nasync function releaseFlock(child: ChildProcessWithoutNullStreams): Promise<void> {\n if (child.exitCode !== null) return;\n child.stdin.end();\n await new Promise<void>((resolve) => {\n const timer = setTimeout(() => {\n child.kill();\n resolve();\n }, 5_000);\n child.once('exit', () => {\n clearTimeout(timer);\n resolve();\n });\n });\n}\n\nasync function withPortableLease<T>(\n options: ResourceLockOptions,\n operation: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n const controller = new AbortController();\n let compromised: Error | null = null;\n const retryIntervalMs = 500;\n const release = await lockfile.lock(options.target, {\n realpath: true,\n stale: 120_000,\n update: 15_000,\n retries: {\n retries: Math.ceil(options.timeoutMs / retryIntervalMs),\n factor: 1,\n minTimeout: retryIntervalMs,\n maxTimeout: retryIntervalMs,\n },\n onCompromised: (error) => {\n compromised = error;\n controller.abort(error);\n },\n });\n try {\n const result = await operation(controller.signal);\n if (compromised) throw compromised;\n return result;\n } finally {\n controller.abort();\n await release();\n }\n}\n\nfunction workerLockName(key: string): string {\n return `pyfig:${createHash('sha256').update(key).digest('hex')}`;\n}\n\n/** Create a canonical lock target below a configured cache directory. */\nexport function cacheLockTarget(cacheDirectory: string, name: string): string {\n return path.join(cacheDirectory, 'locks', name);\n}\n",
9
- "import { spawn, spawnSync } from 'node:child_process';\nimport path from 'node:path';\nimport which from 'which';\n\nexport interface CommandSpec {\n executable: string;\n args: string[];\n}\n\nexport interface RunResult {\n stdout: string;\n stderr: string;\n}\n\nexport async function resolveExecutable(\n value: string,\n env: NodeJS.ProcessEnv,\n): Promise<string | null> {\n if (!value) return null;\n if (path.isAbsolute(value)) {\n return await which(value, { nothrow: true, path: env['PATH'], pathExt: env['PATHEXT'] });\n }\n if (!/^[A-Za-z0-9_.-]+$/u.test(value)) return null;\n return await which(value, { nothrow: true, path: env['PATH'], pathExt: env['PATHEXT'] });\n}\n\nexport function run(\n executable: string,\n args: string[],\n env: NodeJS.ProcessEnv,\n timeoutMs: number,\n): RunResult {\n const result = spawnSync(executable, args, {\n encoding: 'utf8',\n env,\n timeout: timeoutMs,\n maxBuffer: 4 * 1024 * 1024,\n windowsHide: true,\n });\n if (result.status !== 0 || result.error) {\n const detail = result.stderr?.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`${path.basename(executable)} ${args.slice(0, 3).join(' ')} failed: ${detail}`);\n }\n return { stdout: result.stdout, stderr: result.stderr };\n}\n\n/** Run a child without blocking lock heartbeats or other coordination timers. */\nexport async function runAsync(\n executable: string,\n args: string[],\n env: NodeJS.ProcessEnv,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<RunResult> {\n return new Promise<RunResult>((resolve, reject) => {\n const child = spawn(executable, args, {\n env,\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsHide: true,\n });\n let stdout = '';\n let stderr = '';\n let settled = false;\n const finish = (error?: Error, result?: RunResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener('abort', abort);\n if (error) reject(error);\n else if (result) resolve(result);\n };\n const abort = (): void => {\n child.kill();\n const reason = signal?.reason;\n finish(reason instanceof Error ? reason : new Error(`${path.basename(executable)} was aborted.`));\n };\n const timer = setTimeout(() => {\n child.kill();\n finish(new Error(`${path.basename(executable)} timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n if (stdout.length > 4 * 1024 * 1024) {\n child.kill();\n finish(new Error(`${path.basename(executable)} exceeded the output limit.`));\n }\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n if (stderr.length > 4 * 1024 * 1024) {\n child.kill();\n finish(new Error(`${path.basename(executable)} exceeded the error-output limit.`));\n }\n });\n child.once('error', (error) => finish(error));\n child.once('close', (code, childSignal) => {\n if (code !== 0) {\n const detail = stderr.trim() || (childSignal ? `signal ${childSignal}` : `exit ${code}`);\n finish(new Error(`${path.basename(executable)} ${args.slice(0, 3).join(' ')} failed: ${detail}`));\n return;\n }\n finish(undefined, { stdout, stderr });\n });\n\n if (signal?.aborted) abort();\n else signal?.addEventListener('abort', abort, { once: true });\n });\n}\n",
10
- "import path from 'node:path';\nimport semver from 'semver';\nimport type { ResolvedPyfigOptions } from './config.js';\nimport { resolveExecutable, run, type CommandSpec } from './process.js';\nimport { activateVirtualEnvironment } from './virtual-environment.js';\n\nexport interface PythonInfo {\n executable: string;\n baseExecutable: string;\n version: string;\n major: number;\n minor: number;\n patch: number;\n releaseLevel: string;\n implementation: string;\n architecture: string;\n pointerBits: number;\n prefix: string;\n basePrefix: string;\n virtualEnvironment: string | null;\n gilDisabled: boolean;\n embedding: PythonEmbeddingInfo | null;\n}\n\nexport interface PythonEmbeddingInfo {\n includeDirectory: string;\n headerPath: string;\n libraryPath: string;\n libraryDirectory: string;\n libraryName: string;\n libraryKind: 'import' | 'shared' | 'static';\n}\n\nexport interface PackageManagerInfo {\n kind: 'pip' | 'uv';\n executable: string;\n prefixArgs: string[];\n version: string;\n pythonExecutable: string;\n virtualEnvironment: string;\n}\n\nexport interface UvInfo {\n executable: string;\n version: string;\n}\n\nconst PYTHON_PROBE = `\nimport json\nimport os\nimport platform\nimport struct\nimport sys\nimport sysconfig\n\nbase_prefix = getattr(sys, \"base_prefix\", sys.prefix)\ninclude_directory = sysconfig.get_path(\"include\") or \"\"\nheader_path = os.path.join(include_directory, \"Python.h\") if include_directory else \"\"\nlibrary_candidates = []\nif os.name == \"nt\":\n library_directory = sysconfig.get_config_var(\"LIBDIR\") or os.path.join(base_prefix, \"libs\")\n configured_library = sysconfig.get_config_var(\"LDLIBRARY\") or \"\"\n if configured_library:\n library_candidates.append(os.path.join(library_directory, os.path.splitext(configured_library)[0] + \".lib\"))\n library_candidates.append(os.path.join(library_directory, f\"python{sys.version_info.major}{sys.version_info.minor}.lib\"))\nelse:\n library_directories = [\n sysconfig.get_config_var(\"LIBDIR\"),\n sysconfig.get_config_var(\"LIBPL\"),\n os.path.join(base_prefix, \"lib\"),\n ]\n library_names = [\n sysconfig.get_config_var(\"LDLIBRARY\"),\n sysconfig.get_config_var(\"LIBRARY\"),\n ]\n for directory in library_directories:\n for name in library_names:\n if directory and name:\n library_candidates.append(os.path.join(directory, name))\n\nlibrary_path = next((candidate for candidate in library_candidates if os.path.isfile(candidate)), \"\")\nembedding = None\nif os.path.isfile(header_path) and library_path:\n library_name = os.path.basename(library_path)\n library_kind = \"import\" if os.name == \"nt\" else (\"static\" if library_name.endswith(\".a\") else \"shared\")\n embedding = {\n \"includeDirectory\": include_directory,\n \"headerPath\": header_path,\n \"libraryPath\": library_path,\n \"libraryDirectory\": os.path.dirname(library_path),\n \"libraryName\": library_name,\n \"libraryKind\": library_kind,\n }\n\nrelease_level = sys.version_info.releaselevel\nrelease_suffix = \"\" if release_level == \"final\" else f\"-{release_level}.{sys.version_info.serial}\"\n\nprint(json.dumps({\n \"executable\": sys.executable,\n \"baseExecutable\": getattr(sys, \"_base_executable\", sys.executable),\n \"version\": \".\".join(map(str, sys.version_info[:3])) + release_suffix,\n \"major\": sys.version_info.major,\n \"minor\": sys.version_info.minor,\n \"patch\": sys.version_info.micro,\n \"releaseLevel\": release_level,\n \"implementation\": sys.implementation.name,\n \"architecture\": platform.machine().lower(),\n \"pointerBits\": struct.calcsize(\"P\") * 8,\n \"prefix\": sys.prefix,\n \"basePrefix\": base_prefix,\n \"virtualEnvironment\": sys.prefix if sys.prefix != base_prefix else None,\n \"gilDisabled\": bool(sysconfig.get_config_var(\"Py_GIL_DISABLED\")),\n \"embedding\": embedding,\n}))\n`;\n\nexport async function findPython(options: ResolvedPyfigOptions): Promise<PythonInfo | null> {\n const candidates: CommandSpec[] = [];\n if (options.python) candidates.push({ executable: options.python, args: [] });\n if (process.platform === 'win32') {\n candidates.push(\n { executable: 'python', args: [] },\n { executable: 'python3', args: [] },\n { executable: 'py', args: ['-3'] },\n );\n } else {\n candidates.push(\n ...['python3.15', 'python3.14', 'python3.13', 'python3.12', 'python3.11', 'python3.10']\n .map((executable) => ({ executable, args: [] })),\n { executable: 'python3', args: [] },\n { executable: 'python', args: [] },\n );\n }\n\n for (const candidate of candidates) {\n const info = await probePython(candidate, options);\n if (info && pythonSatisfiesRequirements(info, options)) return info;\n }\n return null;\n}\n\nexport function pythonSatisfiesRequirements(\n python: PythonInfo,\n options: Pick<ResolvedPyfigOptions, 'pythonRange' | 'requireEmbedding' | 'requireGil'>,\n): boolean {\n return semver.satisfies(python.version, options.pythonRange) &&\n (!options.requireEmbedding || (\n python.implementation === 'cpython' &&\n python.embedding !== null &&\n pythonArchitectureMatchesRuntime(python)\n )) &&\n (!options.requireGil || !python.gilDisabled);\n}\n\nexport async function probePython(\n candidate: CommandSpec,\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo | null> {\n const executable = await resolveExecutable(candidate.executable, options.env);\n if (!executable) return null;\n try {\n const { stdout } = run(\n executable,\n [...candidate.args, '-c', PYTHON_PROBE],\n options.env,\n options.probeTimeoutMs,\n );\n const info = JSON.parse(stdout.trim()) as PythonInfo;\n return semver.valid(info.version) ? info : null;\n } catch {\n return null;\n }\n}\n\nexport async function findPip(\n python: PythonInfo,\n options: ResolvedPyfigOptions,\n): Promise<PackageManagerInfo | null> {\n if (!python.virtualEnvironment) {\n throw new Error('pip discovery requires a virtual-environment Python interpreter.');\n }\n const activeEnv = activateVirtualEnvironment(\n options.env,\n python.virtualEnvironment,\n python.executable,\n );\n try {\n const { stdout } = run(\n python.executable,\n ['-m', 'pip', '--version'],\n activeEnv,\n options.probeTimeoutMs,\n );\n const details = parsePipVersionOutput(stdout);\n const version = normalizeVersion(details?.version);\n if (!version || !semver.satisfies(version, options.pipRange)) return null;\n if (!details || !pipBelongsToPython(details, python)) return null;\n return {\n kind: 'pip',\n executable: python.executable,\n prefixArgs: ['-m', 'pip'],\n version,\n pythonExecutable: python.executable,\n virtualEnvironment: python.virtualEnvironment,\n };\n } catch {\n return null;\n }\n}\n\nexport interface PipVersionDetails {\n version: string;\n location: string;\n pythonMajor: number;\n pythonMinor: number;\n}\n\nexport function parsePipVersionOutput(output: string): PipVersionDetails | null {\n const match = output.trim().match(\n /^pip\\s+(\\S+)\\s+from\\s+(.+?)\\s+\\(python\\s+(\\d+)\\.(\\d+)(?:\\.\\d+)?\\)$/iu,\n );\n if (!match?.[1] || !match[2] || !match[3] || !match[4]) return null;\n return {\n version: match[1],\n location: match[2],\n pythonMajor: Number.parseInt(match[3], 10),\n pythonMinor: Number.parseInt(match[4], 10),\n };\n}\n\nexport function pipBelongsToPython(\n pip: PipVersionDetails,\n python: PythonInfo,\n): boolean {\n if (pip.pythonMajor !== python.major || pip.pythonMinor !== python.minor) return false;\n\n const prefix = normalizePathForComparison(path.resolve(python.prefix));\n const location = normalizePathForComparison(path.resolve(pip.location));\n const relative = path.relative(prefix, location);\n return relative === '' || (\n relative !== '..' &&\n !relative.startsWith(`..${path.sep}`) &&\n !path.isAbsolute(relative)\n );\n}\n\nexport async function findUv(options: ResolvedPyfigOptions): Promise<UvInfo | null> {\n const configured = options.env['PYFIG_UV'] ?? 'uv';\n const executable = await resolveExecutable(configured, options.env);\n const uv = executable ? probeUv(executable, options) : null;\n return uv && semver.satisfies(uv.version, options.uvRange) ? uv : null;\n}\n\nexport function probeUv(\n executable: string,\n options: ResolvedPyfigOptions,\n): UvInfo | null {\n try {\n const { stdout } = run(executable, ['--version'], options.env, options.probeTimeoutMs);\n const version = normalizeVersion(stdout.match(/^uv\\s+(\\S+)/iu)?.[1]);\n return version ? { executable, version } : null;\n } catch {\n return null;\n }\n}\n\nfunction normalizeVersion(value: string | undefined): string | null {\n if (!value) return null;\n return semver.valid(value) ?? semver.coerce(value)?.version ?? null;\n}\n\nfunction normalizePathForComparison(value: string): string {\n return process.platform === 'win32' ? value.toLowerCase() : value;\n}\n\nfunction pythonArchitectureMatchesRuntime(python: PythonInfo): boolean {\n const architecture = python.architecture.toLowerCase();\n if (python.pointerBits !== (process.arch === 'ia32' ? 32 : 64)) return false;\n if (process.arch === 'x64') return architecture === 'x86_64' || architecture === 'amd64';\n if (process.arch === 'arm64') return architecture === 'aarch64' || architecture === 'arm64';\n if (process.arch === 'ia32') {\n return architecture === 'x86' || architecture === 'i386' || architecture === 'i686';\n }\n return architecture === process.arch;\n}\n",
11
- "import fs from 'node:fs';\nimport path from 'node:path';\n\nexport const VIRTUAL_ENV_DIRECTORY_NAME = '.venv';\n\nexport function virtualEnvironmentDirectory(projectRoot: string): string {\n return path.join(projectRoot, VIRTUAL_ENV_DIRECTORY_NAME);\n}\n\nexport function virtualEnvironmentPythonExecutable(virtualEnvironment: string): string {\n return path.join(\n virtualEnvironment,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python',\n );\n}\n\n/** Apply the environment changes that shell activation scripts make for child processes. */\nexport function activateVirtualEnvironment(\n env: NodeJS.ProcessEnv,\n virtualEnvironment: string,\n pythonExecutable: string,\n): NodeJS.ProcessEnv {\n const activated = { ...env };\n const pathEntry = Object.keys(activated).find((key) => key.toUpperCase() === 'PATH');\n const existingPath = pathEntry ? activated[pathEntry] : undefined;\n for (const key of Object.keys(activated)) {\n const normalized = key.toUpperCase();\n if (normalized === 'PATH' || normalized === 'PYTHONHOME' || normalized === 'VIRTUAL_ENV') {\n delete activated[key];\n }\n }\n activated['PATH'] = [path.dirname(pythonExecutable), existingPath]\n .filter((value): value is string => Boolean(value))\n .join(path.delimiter);\n activated['VIRTUAL_ENV'] = virtualEnvironment;\n return activated;\n}\n\nexport function pathsEqual(left: string, right: string): boolean {\n return canonicalPath(left) === canonicalPath(right);\n}\n\n/** Canonicalize existing paths so symlink, junction, and filesystem casing aliases compare equally. */\nexport function canonicalPath(value: string): string {\n const resolved = path.resolve(value);\n let canonical = resolved;\n try {\n canonical = fs.realpathSync.native(resolved);\n } catch {\n // Paths being provisioned do not exist yet; the absolute spelling is the best stable key.\n }\n return process.platform === 'win32' ? canonical.toLowerCase() : canonical;\n}\n",
12
- "interface CacheEntry {\n expiresAt: number;\n value: unknown;\n}\n\nconst completed = new Map<string, CacheEntry>();\nconst inFlight = new Map<string, Promise<unknown>>();\nlet cacheGeneration = 0;\n\n/**\n * Share expensive resolution work within one JavaScript realm without treating\n * cached filesystem state as permanent truth.\n */\nexport async function memoizeAsync<T>(\n namespace: string,\n key: string,\n ttlMs: number,\n validate: (value: T) => boolean | Promise<boolean>,\n load: () => Promise<T>,\n): Promise<T> {\n const cacheKey = `${namespace}\\0${key}`;\n const cached = completed.get(cacheKey);\n if (cached && cached.expiresAt >= Date.now()) {\n try {\n if (await validate(cached.value as T)) return cached.value as T;\n } catch {\n // Invalid or inaccessible external state is refreshed below.\n }\n completed.delete(cacheKey);\n }\n\n const pending = inFlight.get(cacheKey);\n if (pending) return pending as Promise<T>;\n\n const generation = cacheGeneration;\n const loading = load().then((value) => {\n if (ttlMs > 0 && generation === cacheGeneration) {\n completed.set(cacheKey, { expiresAt: Date.now() + ttlMs, value });\n }\n return value;\n }).finally(() => {\n if (inFlight.get(cacheKey) === loading) inFlight.delete(cacheKey);\n });\n inFlight.set(cacheKey, loading);\n return loading;\n}\n\n/** Synchronous counterpart used by spawnSync bridges in the caller realm. */\nexport function memoizeSync<T>(\n namespace: string,\n key: string,\n ttlMs: number,\n validate: (value: T) => boolean,\n load: () => T,\n): T {\n const cacheKey = `${namespace}\\0${key}`;\n const cached = completed.get(cacheKey);\n if (cached && cached.expiresAt >= Date.now()) {\n try {\n if (validate(cached.value as T)) return cached.value as T;\n } catch {\n // Refresh invalid external state below.\n }\n completed.delete(cacheKey);\n }\n const value = load();\n if (ttlMs > 0) completed.set(cacheKey, { expiresAt: Date.now() + ttlMs, value });\n return value;\n}\n\n/** Clear completed and in-flight lookup references after external toolchain changes. */\nexport function clearPyfigCaches(): void {\n cacheGeneration += 1;\n completed.clear();\n inFlight.clear();\n}\n",
13
- "import {\n spawn,\n spawnSync,\n type ChildProcess,\n type SpawnOptions,\n type SpawnSyncOptions,\n} from 'node:child_process';\nimport fs from 'node:fs';\nimport {\n configurationFingerprint,\n resolveOptions,\n uvEnvironment,\n type PyfigOptions,\n type ResolvedPyfigOptions,\n} from './config.js';\nimport type { PackageManagerInfo, PythonInfo, UvInfo } from './probes.js';\nimport {\n assertMutationUsesUv,\n assertSafePackageArguments,\n isUvPipCommand,\n packageManagerEnvironment,\n uvPipEnvironment,\n} from './package-target.js';\nimport {\n ensureEnvironment,\n ensureUv,\n ensureVirtualEnvironment,\n type PythonEnvironment,\n} from './provision.js';\nimport { runtimeFile } from './runtime-files.js';\nimport { memoizeSync } from './state.js';\nimport { activateVirtualEnvironment } from './virtual-environment.js';\n\nexport interface ResolvedCommand {\n executable: string;\n args: string[];\n env: NodeJS.ProcessEnv;\n}\n\ninterface SyncResolutionRequest {\n target: 'python' | 'venv' | 'environment' | 'uv' | 'uv-pip';\n options: ResolvedPyfigOptions;\n}\n\ninterface UvPipResolution {\n uv: UvInfo;\n python: PythonInfo;\n}\n\nexport async function pythonSpawn(\n args: readonly string[] = [],\n spawnOptions: SpawnOptions = {},\n pyfigOptions: PyfigOptions = {},\n): Promise<ChildProcess> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const python = await ensureVirtualEnvironment(options);\n const command = buildPythonCommand(python, args, resolveOptions(options).env);\n return spawn(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport function pythonSpawnSync(\n args: readonly string[] = [],\n spawnOptions: SpawnSyncOptions = {},\n pyfigOptions: PyfigOptions = {},\n): ReturnType<typeof spawnSync> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const python = resolveSynchronously('venv', options);\n const command = buildPythonCommand(python, args, resolveOptions(options).env);\n return spawnSync(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport async function pipSpawn(\n args: readonly string[] = [],\n spawnOptions: SpawnOptions = {},\n pyfigOptions: PyfigOptions = {},\n): Promise<ChildProcess> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const environment = await ensureEnvironment(options);\n const command = buildPipCommand(\n environment.packageManager,\n args,\n resolveOptions(options).env,\n );\n return spawn(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport function pipSpawnSync(\n args: readonly string[] = [],\n spawnOptions: SpawnSyncOptions = {},\n pyfigOptions: PyfigOptions = {},\n): ReturnType<typeof spawnSync> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const environment = resolveSynchronously('environment', options);\n const command = buildPipCommand(\n environment.packageManager,\n args,\n resolveOptions(options).env,\n );\n return spawnSync(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport async function uvSpawn(\n args: readonly string[] = [],\n spawnOptions: SpawnOptions = {},\n pyfigOptions: PyfigOptions = {},\n): Promise<ChildProcess> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const resolved = resolveOptions(options);\n const uv = await ensureUv(resolved);\n const python = isUvPipCommand(args)\n ? await ensureVirtualEnvironment(resolved)\n : undefined;\n const command = buildUvCommand(uv, args, resolved, python);\n return spawn(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport function uvSpawnSync(\n args: readonly string[] = [],\n spawnOptions: SpawnSyncOptions = {},\n pyfigOptions: PyfigOptions = {},\n): ReturnType<typeof spawnSync> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const resolved = resolveOptions(options);\n const resolution = isUvPipCommand(args)\n ? resolveSynchronously('uv-pip', resolved)\n : { uv: resolveSynchronously('uv', resolved), python: undefined };\n const command = buildUvCommand(resolution.uv, args, resolved, resolution.python);\n return spawnSync(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport function buildPythonCommand(\n python: PythonInfo,\n args: readonly string[],\n env: NodeJS.ProcessEnv,\n): ResolvedCommand {\n const commandEnv = python.virtualEnvironment\n ? activateVirtualEnvironment(env, python.virtualEnvironment, python.executable)\n : env;\n return {\n executable: python.executable,\n args: [...args],\n env: commandEnv,\n };\n}\n\nexport function buildPipCommand(\n packageManager: PackageManagerInfo,\n args: readonly string[],\n env: NodeJS.ProcessEnv,\n): ResolvedCommand {\n if (!packageManager.virtualEnvironment) {\n throw new Error('pip commands require an active virtual environment.');\n }\n assertSafePackageArguments(args);\n assertMutationUsesUv(packageManager, args);\n return {\n executable: packageManager.executable,\n args: [...packageManager.prefixArgs, ...args],\n env: packageManagerEnvironment(env, packageManager),\n };\n}\n\nexport function buildUvCommand(\n uv: UvInfo,\n args: readonly string[],\n options: ResolvedPyfigOptions,\n python?: PythonInfo,\n): ResolvedCommand {\n const isPip = isUvPipCommand(args);\n if (isPip && !python?.virtualEnvironment) {\n throw new Error('uv pip commands require the repo virtual-environment Python interpreter.');\n }\n if (isPip) assertSafePackageArguments(args);\n const env = isPip && python\n ? uvPipEnvironment(uvEnvironment(options), python)\n : uvEnvironment(options);\n return {\n executable: uv.executable,\n args: [...args],\n env,\n };\n}\n\nfunction optionsForInvocation(\n pyfigOptions: PyfigOptions,\n spawnEnv: NodeJS.ProcessEnv | undefined,\n): PyfigOptions {\n return spawnEnv === undefined ? pyfigOptions : { ...pyfigOptions, env: spawnEnv };\n}\n\nfunction resolveSynchronously(\n target: 'python',\n options: PyfigOptions,\n): PythonInfo;\nfunction resolveSynchronously(\n target: 'venv',\n options: PyfigOptions,\n): PythonInfo;\nfunction resolveSynchronously(\n target: 'environment',\n options: PyfigOptions,\n): PythonEnvironment;\nfunction resolveSynchronously(\n target: 'uv',\n options: PyfigOptions,\n): UvInfo;\nfunction resolveSynchronously(\n target: 'uv-pip',\n options: PyfigOptions,\n): UvPipResolution;\nfunction resolveSynchronously(\n target: SyncResolutionRequest['target'],\n options: PyfigOptions,\n): PythonInfo | PythonEnvironment | UvInfo | UvPipResolution {\n const resolved = resolveOptions(options);\n const cacheKey = `${target}:${configurationFingerprint(resolved)}`;\n return memoizeSync(\n 'sync-resolution',\n cacheKey,\n resolved.cacheTtlMs,\n synchronousResolutionIsPresent,\n () => {\n const request: SyncResolutionRequest = { target, options: resolved };\n const result = spawnSync(process.execPath, [runtimeFile('sync-resolver')], {\n input: JSON.stringify(request),\n encoding: 'utf8',\n env: resolved.env,\n timeout: synchronousResolutionTimeout(resolved),\n maxBuffer: 4 * 1024 * 1024,\n windowsHide: true,\n });\n if (result.status !== 0 || result.error) {\n const detail = result.stderr.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`Could not resolve ${target} synchronously: ${detail}`);\n }\n try {\n return JSON.parse(result.stdout) as PythonInfo | PythonEnvironment | UvInfo | UvPipResolution;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Could not parse synchronous ${target} resolution: ${detail}`);\n }\n },\n );\n}\n\nfunction synchronousResolutionTimeout(options: ResolvedPyfigOptions): number {\n return options.coordinationTimeoutMs + options.downloadTimeoutMs +\n (2 * options.installTimeoutMs) + (4 * options.probeTimeoutMs) + 60_000;\n}\n\nfunction synchronousResolutionIsPresent(\n resolution: PythonInfo | PythonEnvironment | UvInfo | UvPipResolution,\n): boolean {\n if ('packageManager' in resolution) {\n return fs.existsSync(resolution.python.executable) &&\n fs.existsSync(resolution.packageManager.executable);\n }\n if ('uv' in resolution) {\n return fs.existsSync(resolution.uv.executable) && fs.existsSync(resolution.python.executable);\n }\n return fs.existsSync(resolution.executable);\n}\n",
14
- "import os from 'node:os';\nimport type { PackageManagerInfo, PythonInfo } from './probes.js';\nimport { activateVirtualEnvironment } from './virtual-environment.js';\n\nconst TARGET_CHANGING_OPTIONS = new Set([\n '--config-file',\n '--prefix',\n '--python',\n '--root',\n '--system',\n '--target',\n '--user',\n]);\n\nconst TARGET_CHANGING_SHORT_OPTIONS = new Set(['-p', '-t']);\n\nconst TARGET_ENVIRONMENT_VARIABLES = new Set([\n 'CONDA_PREFIX',\n 'PIP_CONFIG_FILE',\n 'PIP_PREFIX',\n 'PIP_PYTHON',\n 'PIP_ROOT',\n 'PIP_TARGET',\n 'PIP_USER',\n 'PYTHONHOME',\n 'PYTHONUSERBASE',\n 'UV_CONFIG_FILE',\n 'UV_PROJECT_ENVIRONMENT',\n 'UV_PREFIX',\n 'UV_PYTHON',\n 'UV_ROOT',\n 'UV_SYSTEM_PYTHON',\n 'UV_TARGET',\n]);\n\n/** Reject package-manager arguments that can escape the selected repository venv. */\nexport function assertSafePackageArguments(args: readonly string[]): void {\n for (const argument of args) {\n if (argument === '--') break;\n const [name] = argument.split('=', 1);\n if (name && TARGET_CHANGING_OPTIONS.has(name)) {\n throw new Error(\n `${name} is not allowed because Pyfig package commands are pinned to the repository .venv.`,\n );\n }\n const shortName = argument.slice(0, 2);\n if (TARGET_CHANGING_SHORT_OPTIONS.has(shortName)) {\n throw new Error(\n `${shortName} is not allowed because Pyfig package commands are pinned to the repository .venv.`,\n );\n }\n }\n}\n\n/** Build a package-manager environment whose target cannot be inherited or configured elsewhere. */\nexport function packageManagerEnvironment(\n env: NodeJS.ProcessEnv,\n packageManager: PackageManagerInfo,\n): NodeJS.ProcessEnv {\n const active = sanitizedTargetEnvironment(env);\n const activated = activateVirtualEnvironment(\n active,\n packageManager.virtualEnvironment,\n packageManager.pythonExecutable,\n );\n return packageManager.kind === 'uv'\n ? {\n ...activated,\n UV_NO_CONFIG: '1',\n UV_PYTHON: packageManager.pythonExecutable,\n }\n : {\n ...activated,\n PIP_CONFIG_FILE: os.devNull,\n PIP_REQUIRE_VIRTUALENV: '1',\n PYTHONNOUSERSITE: '1',\n };\n}\n\n/** Apply the same strict target policy to a direct `uv pip` invocation. */\nexport function uvPipEnvironment(\n env: NodeJS.ProcessEnv,\n python: PythonInfo,\n): NodeJS.ProcessEnv {\n if (!python.virtualEnvironment) {\n throw new Error('uv pip commands require the repository virtual environment.');\n }\n return {\n ...activateVirtualEnvironment(\n sanitizedTargetEnvironment(env),\n python.virtualEnvironment,\n python.executable,\n ),\n UV_NO_CONFIG: '1',\n UV_PYTHON: python.executable,\n };\n}\n\n/** Package installation and removal must use uv so its target-environment lock is authoritative. */\nexport function assertMutationUsesUv(\n packageManager: PackageManagerInfo,\n args: readonly string[],\n): void {\n if (packageManager.kind === 'pip' && isPackageMutation(args)) {\n throw new Error(\n 'Package mutation requires uv so the repository environment is locked across processes. ' +\n 'Enable uv installation or use a read-only pip command.',\n );\n }\n}\n\nexport function isPackageMutation(args: readonly string[]): boolean {\n return args.some((argument) =>\n argument === 'install' || argument === 'sync' || argument === 'uninstall');\n}\n\nexport function isUvPipCommand(args: readonly string[]): boolean {\n const separator = args.indexOf('--');\n const commandArguments = separator === -1 ? args : args.slice(0, separator);\n return commandArguments.includes('pip');\n}\n\nfunction sanitizedTargetEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const sanitized = { ...env };\n for (const key of Object.keys(sanitized)) {\n if (TARGET_ENVIRONMENT_VARIABLES.has(key.toUpperCase())) delete sanitized[key];\n }\n return sanitized;\n}\n",
15
- "import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\ndeclare const PYFIG_CJS_DIRECTORY: string | undefined;\n\n/** Resolve a compiled runtime helper beside either the ESM files or the CJS bundle. */\nexport function runtimeFile(name: string): string {\n const moduleDirectory = typeof PYFIG_CJS_DIRECTORY === 'string'\n ? PYFIG_CJS_DIRECTORY\n : path.dirname(fileURLToPath(import.meta.url));\n const compiled = path.join(moduleDirectory, `${name}.js`);\n return fs.existsSync(compiled) ? compiled : path.join(moduleDirectory, `${name}.ts`);\n}\n",
16
- "import type {\n ChildProcess,\n SpawnOptions,\n SpawnSyncOptions,\n spawnSync,\n} from 'node:child_process';\nimport type { PyfigOptions } from './config.js';\nimport type { PythonInfo, UvInfo } from './probes.js';\nimport {\n ensureEnvironment,\n ensureUv,\n ensureVirtualEnvironment,\n type PythonEnvironment,\n} from './provision.js';\nimport {\n pipSpawn,\n pipSpawnSync,\n pythonSpawn,\n pythonSpawnSync,\n uvSpawn,\n uvSpawnSync,\n} from './runners.js';\nimport { clearPyfigCaches } from './state.js';\n\n/** A scoped Pyfig API that keeps one policy object consistent across every operation. */\nexport interface PyfigClient {\n prepare(): Promise<PythonEnvironment>;\n pythonInfo(): Promise<PythonInfo>;\n uvInfo(): Promise<UvInfo>;\n python(args?: readonly string[], options?: SpawnOptions): Promise<ChildProcess>;\n pythonSync(\n args?: readonly string[],\n options?: SpawnSyncOptions,\n ): ReturnType<typeof spawnSync>;\n pip(args?: readonly string[], options?: SpawnOptions): Promise<ChildProcess>;\n pipSync(\n args?: readonly string[],\n options?: SpawnSyncOptions,\n ): ReturnType<typeof spawnSync>;\n uv(args?: readonly string[], options?: SpawnOptions): Promise<ChildProcess>;\n uvSync(\n args?: readonly string[],\n options?: SpawnSyncOptions,\n ): ReturnType<typeof spawnSync>;\n clearCache(): void;\n}\n\n/** Bind configuration once so consumers cannot accidentally diverge between calls. */\nexport function createPyfig(options: PyfigOptions = {}): PyfigClient {\n const scopedOptions: PyfigOptions = {\n ...options,\n env: options.env ? { ...options.env } : undefined,\n };\n return {\n prepare: () => ensureEnvironment(scopedOptions),\n pythonInfo: () => ensureVirtualEnvironment(scopedOptions),\n uvInfo: () => ensureUv(scopedOptions),\n python: (args = [], spawnOptions = {}) => pythonSpawn(args, spawnOptions, scopedOptions),\n pythonSync: (args = [], spawnOptions = {}) => pythonSpawnSync(args, spawnOptions, scopedOptions),\n pip: (args = [], spawnOptions = {}) => pipSpawn(args, spawnOptions, scopedOptions),\n pipSync: (args = [], spawnOptions = {}) => pipSpawnSync(args, spawnOptions, scopedOptions),\n uv: (args = [], spawnOptions = {}) => uvSpawn(args, spawnOptions, scopedOptions),\n uvSync: (args = [], spawnOptions = {}) => uvSpawnSync(args, spawnOptions, scopedOptions),\n clearCache: clearPyfigCaches,\n };\n}\n"
5
+ "import path from 'node:path';\nimport * as envPaths from 'env-paths';\nimport semver from 'semver';\nimport { resolveProjectRoot } from './project-root.js';\n\nexport const DEFAULT_PYTHON_RANGE = '>=3.10.0 <4.0.0';\nexport const DEFAULT_MANAGED_PYTHON = '3.12';\nexport const DEFAULT_UV_VERSION = '0.13.6';\n// External uv only needs to support the command and isolation flags Pyfig uses.\n// Keep that compatibility floor separate from the newer version Pyfig installs.\nexport const DEFAULT_UV_RANGE = '>=0.10.0 <1.0.0';\n\nconst DEFAULT_PROBE_TIMEOUT_MS = 10_000;\nconst DEFAULT_INSTALL_TIMEOUT_MS = 10 * 60_000;\nconst DEFAULT_DOWNLOAD_TIMEOUT_MS = 5 * 60_000;\n\n// Bun's CommonJS bundler wraps an external ESM default one level deeper than\n// Node.js. Normalize that boundary once instead of leaking runtime checks into\n// configuration resolution.\nconst envPathsFunction = (() => {\n const imported = envPaths.default as typeof envPaths.default | {\n default?: typeof envPaths.default;\n };\n const implementation = typeof imported === 'function' ? imported : imported.default;\n if (!implementation) throw new TypeError('env-paths did not expose its default function.');\n return implementation;\n})();\n\nexport interface PyfigOptions {\n /** Exact interpreter path that an existing or newly created venv must derive from. */\n python?: string;\n /** Accepted Python language-version range. */\n pythonRange?: string;\n /** uv Python request used only when no compatible interpreter exists. */\n managedPython?: string;\n /** Exact uv release installed into Pyfig's private cache. */\n uvVersion?: string;\n /** Accepted range for an externally installed uv executable. */\n uvRange?: string;\n /** Require Python development headers and a linkable CPython library. */\n requireEmbedding?: boolean;\n /** Reject free-threaded CPython builds when the consumer requires the GIL ABI. */\n requireGil?: boolean;\n /** Backward-compatible default for the three specific setup policies. */\n autoInstall?: boolean;\n /** Allow uv to install a managed Python when no compatible interpreter exists. */\n installPython?: boolean;\n /** Allow Pyfig to install its pinned, checksum-verified uv executable. */\n installUv?: boolean;\n /** Allow creation of Pyfig's private environment under node_modules. */\n createVirtualEnvironment?: boolean;\n /** Private cache root for uv, managed Python, downloads, and coordination. */\n cacheDir?: string;\n /** Repository root that owns node_modules/.pyfig. */\n projectRoot?: string;\n /** Maximum duration of one executable capability probe. */\n probeTimeoutMs?: number;\n /** Maximum duration of a Python, uv, or venv installation subprocess. */\n installTimeoutMs?: number;\n /** Maximum duration of one uv archive or checksum request. */\n downloadTimeoutMs?: number;\n /** Maximum wait for another worker or process provisioning the same resource. */\n coordinationTimeoutMs?: number;\n /** Complete child environment and configuration source for this invocation. */\n env?: NodeJS.ProcessEnv;\n}\n\nexport interface ResolvedPyfigOptions {\n python: string;\n pythonRange: string;\n managedPython: string;\n uvVersion: string;\n uvRange: string;\n requireEmbedding: boolean;\n requireGil: boolean;\n autoInstall: boolean;\n installPython: boolean;\n installUv: boolean;\n createVirtualEnvironment: boolean;\n cacheDir: string;\n projectRoot: string;\n probeTimeoutMs: number;\n installTimeoutMs: number;\n downloadTimeoutMs: number;\n coordinationTimeoutMs: number;\n env: NodeJS.ProcessEnv;\n}\n\nexport function resolveOptions(options: PyfigOptions = {}): ResolvedPyfigOptions {\n // Snapshot the environment so callers cannot change an in-flight policy by\n // mutating process.env or a reused options object after resolution.\n const env = { ...(options.env ?? process.env) };\n const pythonRange = options.pythonRange ?? env['PYFIG_PYTHON_RANGE'] ?? DEFAULT_PYTHON_RANGE;\n const uvRange = options.uvRange ?? env['PYFIG_UV_RANGE'] ?? DEFAULT_UV_RANGE;\n assertRange('Python', pythonRange);\n assertRange('uv', uvRange);\n\n const managedPython = options.managedPython ??\n env['PYFIG_MANAGED_PYTHON'] ?? DEFAULT_MANAGED_PYTHON;\n const uvVersion = options.uvVersion ?? env['PYFIG_UV_VERSION'] ?? DEFAULT_UV_VERSION;\n assertManagedPythonRequest(managedPython, pythonRange);\n assertUvVersion(uvVersion, uvRange);\n\n const probeTimeoutMs = resolveDuration(\n 'probeTimeoutMs',\n options.probeTimeoutMs,\n env['PYFIG_PROBE_TIMEOUT_MS'],\n DEFAULT_PROBE_TIMEOUT_MS,\n );\n const installTimeoutMs = resolveDuration(\n 'installTimeoutMs',\n options.installTimeoutMs,\n env['PYFIG_INSTALL_TIMEOUT_MS'],\n DEFAULT_INSTALL_TIMEOUT_MS,\n );\n const downloadTimeoutMs = resolveDuration(\n 'downloadTimeoutMs',\n options.downloadTimeoutMs,\n env['PYFIG_DOWNLOAD_TIMEOUT_MS'],\n DEFAULT_DOWNLOAD_TIMEOUT_MS,\n );\n const coordinationTimeoutMs = resolveDuration(\n 'coordinationTimeoutMs',\n options.coordinationTimeoutMs,\n env['PYFIG_COORDINATION_TIMEOUT_MS'],\n installTimeoutMs + downloadTimeoutMs + 60_000,\n );\n const configuredHome = options.cacheDir ?? env['PYFIG_HOME'];\n const cacheDir = configuredHome\n ? path.resolve(configuredHome)\n : envPathsFunction('pyfig', { suffix: '' }).cache;\n const configuredProjectRoot = options.projectRoot ?? env['PYFIG_PROJECT_ROOT'];\n const projectRoot = configuredProjectRoot\n ? path.resolve(configuredProjectRoot)\n : resolveProjectRoot(env['INIT_CWD'] ?? process.cwd());\n const autoInstall = options.autoInstall ?? parseBoolean(env['PYFIG_AUTO_INSTALL'], true);\n\n return {\n python: options.python ?? env['PYFIG_PYTHON'] ?? '',\n pythonRange,\n managedPython,\n uvVersion,\n uvRange,\n requireEmbedding: options.requireEmbedding ?? parseBoolean(env['PYFIG_REQUIRE_EMBEDDING'], false),\n requireGil: options.requireGil ?? parseBoolean(env['PYFIG_REQUIRE_GIL'], false),\n autoInstall,\n installPython: options.installPython ?? parseBoolean(env['PYFIG_INSTALL_PYTHON'], autoInstall),\n installUv: options.installUv ?? parseBoolean(env['PYFIG_INSTALL_UV'], autoInstall),\n createVirtualEnvironment: options.createVirtualEnvironment ??\n parseBoolean(env['PYFIG_CREATE_VIRTUAL_ENVIRONMENT'], autoInstall),\n cacheDir,\n projectRoot,\n probeTimeoutMs,\n installTimeoutMs,\n downloadTimeoutMs,\n coordinationTimeoutMs,\n env,\n };\n}\n\n/** Keep uv data private while preferring a compatible system interpreter. */\nexport function uvEnvironment(options: ResolvedPyfigOptions): NodeJS.ProcessEnv {\n return {\n ...options.env,\n UV_PYTHON_INSTALL_DIR: path.join(options.cacheDir, 'python'),\n UV_CACHE_DIR: path.join(options.cacheDir, 'uv-cache'),\n UV_PYTHON_PREFERENCE: 'system',\n UV_NO_CONFIG: '1',\n };\n}\n\nfunction assertRange(tool: string, range: string): void {\n if (!semver.validRange(range)) {\n throw new TypeError(`Invalid ${tool} SemVer range: ${range}`);\n }\n}\n\nfunction assertUvVersion(version: string, range: string): void {\n if (!semver.valid(version)) {\n throw new TypeError(`Invalid exact uv version: ${version}`);\n }\n if (!semver.satisfies(version, range)) {\n throw new TypeError(`Pinned uv ${version} does not satisfy supported range ${range}.`);\n }\n}\n\nfunction assertManagedPythonRequest(request: string, pythonRange: string): void {\n if (!request || /[\\\\/\\0\\r\\n]/u.test(request) || request.includes('..')) {\n throw new TypeError(`Invalid managed Python request: ${request}`);\n }\n if (/^\\d+\\.\\d+(?:\\.\\d+)?$/u.test(request)) {\n const normalized = request.split('.').length === 2 ? `${request}.0` : request;\n if (!semver.satisfies(normalized, pythonRange)) {\n throw new TypeError(\n `Managed Python ${request} cannot satisfy configured range ${pythonRange}.`,\n );\n }\n }\n}\n\nfunction resolveDuration(\n name: string,\n explicit: number | undefined,\n environment: string | undefined,\n fallback: number,\n allowZero = false,\n): number {\n const value = explicit ?? (environment === undefined ? fallback : Number(environment));\n const minimum = allowZero ? 0 : 1;\n if (!Number.isSafeInteger(value) || value < minimum) {\n throw new TypeError(`${name} must be ${allowZero ? 'a non-negative' : 'a positive'} integer.`);\n }\n return value;\n}\n\nfunction parseBoolean(value: string | undefined, fallback: boolean): boolean {\n if (value === undefined) return fallback;\n if (/^(1|true|yes|on)$/iu.test(value)) return true;\n if (/^(0|false|no|off)$/iu.test(value)) return false;\n throw new TypeError(`Invalid boolean value: ${value}`);\n}\n",
6
+ "import fs from 'node:fs';\nimport path from 'node:path';\n\n/** Resolve the nearest Git worktree without interpreting project manifests. */\nexport function resolveProjectRoot(startDirectory: string = process.cwd()): string {\n const start = path.resolve(startDirectory);\n for (const directory of ancestors(start)) {\n if (fs.existsSync(path.join(directory, '.git'))) return directory;\n }\n return start;\n}\n\nfunction* ancestors(startDirectory: string): Generator<string> {\n let directory = startDirectory;\n while (true) {\n yield directory;\n const parent = path.dirname(directory);\n if (parent === directory) return;\n directory = parent;\n }\n}\n",
7
+ "import type {\n ChildProcess,\n SpawnOptions,\n SpawnSyncOptions,\n spawnSync,\n} from 'node:child_process';\nimport { memoize } from 'loqkit';\nimport type { PyfigOptions } from './config.js';\nimport type { PythonInfo, UvInfo } from './probes.js';\nimport {\n ensureEnvironment,\n ensureUv,\n type PythonEnvironment,\n type RuntimeDependencyOptions,\n} from './provision.js';\nimport { uvSpawn, uvSpawnSync } from './runners.js';\n\n/** A scoped uv-first API with one consistent environment policy. */\nexport interface PyfigClient {\n prepare(\n requirements?: readonly string[],\n options?: RuntimeDependencyOptions,\n ): Promise<PythonEnvironment>;\n pythonInfo(): Promise<PythonInfo>;\n uvInfo(): Promise<UvInfo>;\n uv(args?: readonly string[], options?: SpawnOptions): Promise<ChildProcess>;\n uvSync(\n args?: readonly string[],\n options?: SpawnSyncOptions,\n ): ReturnType<typeof spawnSync>;\n}\n\n/** Bind configuration once so consumers cannot accidentally diverge between calls. */\nexport function createPyfig(options: PyfigOptions = {}): PyfigClient {\n const scopedOptions: PyfigOptions = {\n ...options,\n env: options.env ? { ...options.env } : undefined,\n };\n const baseEnvironment = memoize(() => ensureEnvironment(scopedOptions));\n const uvInfo = memoize(() => ensureUv(scopedOptions));\n return {\n prepare: (requirements = [], dependencyOptions = {}) => requirements.length === 0 &&\n !dependencyOptions.allExtras &&\n (dependencyOptions.extras?.length ?? 0) === 0 &&\n (dependencyOptions.groups?.length ?? 0) === 0\n ? baseEnvironment()\n : ensureEnvironment(scopedOptions, requirements, dependencyOptions),\n pythonInfo: async () => (await baseEnvironment()).python,\n uvInfo,\n uv: (args = [], spawnOptions = {}) => uvSpawn(args, spawnOptions, scopedOptions),\n uvSync: (args = [], spawnOptions = {}) => uvSpawnSync(args, spawnOptions, scopedOptions),\n };\n}\n",
8
+ "import { createHash, randomUUID } from 'node:crypto';\nimport { createReadStream, createWriteStream } from 'node:fs';\nimport {\n chmod,\n copyFile,\n mkdir,\n mkdtemp,\n readdir,\n rename,\n rm,\n writeFile,\n} from 'node:fs/promises';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport extractZip from 'extract-zip';\nimport * as tar from 'tar';\nimport { EnvHttpProxyAgent, fetch } from 'undici';\nimport {\n resolveOptions,\n uvEnvironment,\n type PyfigOptions,\n type ResolvedPyfigOptions,\n} from './config.js';\nimport { withProvisioningLock } from './provision-lock.js';\nimport { sanitizeUvEnvironment, uvCommandEnvironment } from './package-target.js';\nimport {\n findUv,\n probePython,\n probeUv,\n pythonSatisfiesRequirements,\n type PythonInfo,\n type UvInfo,\n} from './probes.js';\nimport { runAsync } from './process.js';\nimport {\n canonicalPath,\n externalVirtualEnvironmentDirectories,\n pathsEqual,\n virtualEnvironmentDirectory,\n virtualEnvironmentPythonExecutable,\n} from './virtual-environment.js';\n\nexport interface PythonEnvironment {\n python: PythonInfo;\n uv: UvInfo;\n /** True when the environment lives in node_modules/.pyfig/venv. */\n managed: boolean;\n}\n\nexport interface RuntimeDependencyOptions {\n /** Optional-dependency extras read from an existing pyproject.toml. */\n extras?: readonly string[];\n /** Include every optional-dependency extra from an existing pyproject.toml. */\n allExtras?: boolean;\n /** Dependency groups read from an existing pyproject.toml. */\n groups?: readonly string[];\n}\n\n/** Ensure a compatible uv executable, preferring an existing installation. */\nexport async function ensureUv(options: PyfigOptions = {}): Promise<UvInfo> {\n return ensureUvResolved(resolveOptions(options));\n}\n\n/**\n * Select a compatible environment and optionally add runtime requirements.\n * Project dependency files are inputs only and are never changed.\n */\nexport async function ensureEnvironment(\n options: PyfigOptions = {},\n requirements: readonly string[] = [],\n dependencyOptions: RuntimeDependencyOptions = {},\n): Promise<PythonEnvironment> {\n const resolved = resolveOptions(options);\n const normalized = normalizeRequirements(requirements);\n const selections = normalizeDependencyOptions(dependencyOptions);\n const uv = await ensureUvResolved(resolved);\n const python = await ensureVirtualEnvironmentResolved(resolved, uv);\n if (normalized.length > 0 || selections.extras.length > 0 ||\n selections.groups.length > 0 || selections.allExtras) {\n await installRuntimeRequirements(uv, python, normalized, selections, resolved);\n }\n return {\n python,\n uv,\n managed: isManagedEnvironment(python, resolved),\n };\n}\n\nasync function ensureVirtualEnvironmentResolved(\n options: ResolvedPyfigOptions,\n uv: UvInfo,\n): Promise<PythonInfo> {\n const existing = await findReusableEnvironment(options);\n if (existing) return existing;\n\n const directory = virtualEnvironmentDirectory(options.projectRoot);\n const check = async (): Promise<PythonInfo | null> => {\n const candidate = await inspectVirtualEnvironment(directory, options);\n return candidate && pythonSatisfiesRequirements(candidate, options) &&\n await virtualEnvironmentMatchesConfiguredPython(candidate, options)\n ? candidate\n : null;\n };\n if (!options.createVirtualEnvironment) {\n throw new Error(\n `No compatible environment is available and creation is disabled. ` +\n `Pyfig would create ${directory}.`,\n );\n }\n\n const basePython = await ensureBasePythonResolved(uv, options);\n return withProvisioningLock({\n key: `venv:${canonicalPath(directory)}`,\n timeoutMs: options.coordinationTimeoutMs,\n check,\n mutate: async () => {\n // Only Pyfig's private path is replaceable. Active and repository-root\n // environments are preserved when incompatible.\n await rm(directory, { recursive: true, force: true });\n await mkdir(path.dirname(directory), { recursive: true });\n await runAsync(\n uv.executable,\n [\n 'venv',\n '--no-project',\n '--no-config',\n '--no-python-downloads',\n '--python',\n basePython.executable,\n directory,\n ],\n isolatedUvEnvironment(options),\n options.installTimeoutMs,\n );\n const installed = await check();\n if (!installed) {\n throw new Error(\n `uv created ${directory}, but its Python does not satisfy the requested capabilities.`,\n );\n }\n return installed;\n },\n });\n}\n\nasync function findReusableEnvironment(\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo | null> {\n if (options.python) {\n const configured = await probePython({ executable: options.python, args: [] }, options);\n if (!configured || !pythonSatisfiesRequirements(configured, options)) {\n throw incompatibleConfiguredPython(options);\n }\n if (configured.virtualEnvironment) return configured;\n }\n\n for (const directory of [\n ...externalVirtualEnvironmentDirectories(options.projectRoot, options.env),\n virtualEnvironmentDirectory(options.projectRoot),\n ]) {\n const info = await inspectVirtualEnvironment(directory, options);\n if (info && pythonSatisfiesRequirements(info, options) &&\n await virtualEnvironmentMatchesConfiguredPython(info, options)) {\n return info;\n }\n }\n return null;\n}\n\nasync function ensureBasePythonResolved(\n uv: UvInfo,\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo> {\n if (options.python) {\n const configured = await probePython({ executable: options.python, args: [] }, options);\n if (!configured || !pythonSatisfiesRequirements(configured, options)) {\n throw incompatibleConfiguredPython(options);\n }\n if (!configured.virtualEnvironment) return configured;\n const base = await probePython({ executable: configured.baseExecutable, args: [] }, options);\n if (base && pythonSatisfiesRequirements(base, options)) return base;\n throw incompatibleConfiguredPython(options);\n }\n\n // Corporate and offline hosts get a strict system-only pass before Pyfig\n // considers any already-managed interpreter or network installation.\n const system = await findPythonWithUv(uv, options, 'system');\n if (system) return system;\n const cachedManaged = await findPythonWithUv(uv, options, 'managed');\n if (cachedManaged) return cachedManaged;\n if (!options.installPython) {\n throw new Error(missingPythonMessage(options, 'managed Python installation is disabled'));\n }\n\n return withProvisioningLock({\n key: `python:${canonicalPath(path.join(options.cacheDir, 'python'))}`,\n timeoutMs: options.coordinationTimeoutMs,\n check: () => findPythonWithUv(uv, options, 'managed'),\n mutate: async () => {\n await runAsync(\n uv.executable,\n ['python', 'install', '--no-config', options.managedPython],\n isolatedUvEnvironment(options),\n options.installTimeoutMs,\n );\n const installed = await findPythonWithUv(uv, options, 'managed');\n if (!installed) {\n throw new Error(missingPythonMessage(\n options,\n `uv installed ${options.managedPython}, but it remains incompatible`,\n ));\n }\n return installed;\n },\n });\n}\n\nasync function findPythonWithUv(\n uv: UvInfo,\n options: ResolvedPyfigOptions,\n source: 'system' | 'managed',\n): Promise<PythonInfo | null> {\n for (const request of ['', options.managedPython]) {\n const args = [\n 'python',\n 'find',\n '--no-project',\n '--no-config',\n '--no-python-downloads',\n source === 'system' ? '--system' : '--managed-python',\n ];\n if (request) args.push(request);\n try {\n const { stdout } = await runAsync(\n uv.executable,\n args,\n explicitPythonSourceEnvironment(options),\n options.probeTimeoutMs,\n );\n const info = await probePython({ executable: stdout.trim(), args: [] }, options);\n if (info && pythonSatisfiesRequirements(info, options)) return info;\n } catch {\n // Continue through the generic and configured version requests.\n }\n }\n\n // `uv python find` returns one match. That match can lack development\n // headers even when another installed interpreter satisfies every requested\n // capability, so inspect uv's complete installed-only inventory before\n // moving from system Python to managed Python or from cache to download.\n try {\n const { stdout } = await runAsync(\n uv.executable,\n [\n 'python',\n 'list',\n '--no-config',\n '--no-python-downloads',\n '--only-installed',\n '--output-format',\n 'json',\n source === 'system' ? '--no-managed-python' : '--managed-python',\n ],\n explicitPythonSourceEnvironment(options),\n options.probeTimeoutMs,\n );\n const candidates = installedPythonPaths(stdout);\n for (const executable of candidates) {\n const info = await probePython({ executable, args: [] }, options);\n if (info && !info.virtualEnvironment && pythonSatisfiesRequirements(info, options)) {\n return info;\n }\n }\n } catch {\n // Older compatible uv releases can still use the find-based fallback.\n }\n return null;\n}\n\nfunction installedPythonPaths(output: string): string[] {\n const parsed = JSON.parse(output) as unknown;\n if (!Array.isArray(parsed)) return [];\n const paths = parsed.flatMap((entry) => {\n if (!entry || typeof entry !== 'object' || !('path' in entry)) return [];\n const candidate = (entry as { path?: unknown }).path;\n return typeof candidate === 'string' && candidate ? [candidate] : [];\n });\n return [...new Map(paths.map((candidate) => [canonicalPath(candidate), candidate])).values()];\n}\n\nasync function inspectVirtualEnvironment(\n directory: string,\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo | null> {\n const executable = virtualEnvironmentPythonExecutable(directory);\n const info = await probePython({ executable, args: [] }, options);\n return info?.virtualEnvironment && pathsEqual(info.virtualEnvironment, directory) ? info : null;\n}\n\nasync function installRuntimeRequirements(\n uv: UvInfo,\n python: PythonInfo,\n requirements: readonly string[],\n dependencyOptions: Required<RuntimeDependencyOptions>,\n options: ResolvedPyfigOptions,\n): Promise<void> {\n if (!python.virtualEnvironment) {\n throw new Error('Runtime dependency installation requires a virtual environment.');\n }\n await withProvisioningLock({\n key: `dependencies:${canonicalPath(python.virtualEnvironment)}`,\n timeoutMs: options.coordinationTimeoutMs,\n check: async () => null,\n mutate: async () => {\n const temporary = await mkdtemp(path.join(os.tmpdir(), 'pyfig-requirements-'));\n try {\n const additions = path.join(temporary, 'runtime-requirements.txt');\n const resolved = path.join(temporary, 'resolved-requirements.txt');\n const pyproject = path.join(options.projectRoot, 'pyproject.toml');\n const hasPyproject = fs.existsSync(pyproject);\n if (!hasPyproject && (\n dependencyOptions.extras.length > 0 ||\n dependencyOptions.groups.length > 0 ||\n dependencyOptions.allExtras\n )) {\n throw new Error('Runtime extras and groups require an existing pyproject.toml.');\n }\n const sources = hasPyproject ? [pyproject] : [];\n if (requirements.length > 0) {\n await writeFile(additions, `${requirements.join('\\n')}\\n`, 'utf8');\n sources.push(additions);\n }\n const selectionArgs = [\n ...dependencyOptions.extras.flatMap((extra) => ['--extra', extra]),\n ...dependencyOptions.groups.flatMap((group) => ['--group', group]),\n ...(dependencyOptions.allExtras ? ['--all-extras'] : []),\n ];\n await runAsync(\n uv.executable,\n [\n 'pip', 'compile', '--no-config', '--python', python.executable, ...selectionArgs,\n ...sources, '--output-file', resolved,\n ],\n targetUvEnvironment(options, python),\n options.installTimeoutMs,\n undefined,\n options.projectRoot,\n );\n // install preserves unrelated packages; sync would remove anything not\n // represented in this temporary resolution.\n await runAsync(\n uv.executable,\n ['pip', 'install', '--no-config', '--python', python.executable, '-r', resolved],\n targetUvEnvironment(options, python),\n options.installTimeoutMs,\n undefined,\n options.projectRoot,\n );\n } finally {\n await rm(temporary, { recursive: true, force: true });\n }\n return true;\n },\n });\n}\n\nasync function ensureUvResolved(options: ResolvedPyfigOptions): Promise<UvInfo> {\n const existing = await findAvailableUv(options);\n if (existing) return existing;\n if (!options.installUv) {\n throw new Error(\n `Compatible uv is unavailable (required ${options.uvRange}), and uv installation is disabled.`,\n );\n }\n\n const installDir = uvInstallDirectory(options);\n const executable = uvExecutable(options);\n return withProvisioningLock({\n key: `uv:${canonicalPath(installDir)}`,\n timeoutMs: options.coordinationTimeoutMs,\n check: () => findAvailableUv(options),\n mutate: async () => {\n await installUv(installDir, options);\n const result = probeUv(executable, options);\n if (!result || result.version !== options.uvVersion) {\n throw new Error(\n `Expected managed uv ${options.uvVersion}, but the installed executable did not match.`,\n );\n }\n return result;\n },\n });\n}\n\nasync function findAvailableUv(options: ResolvedPyfigOptions): Promise<UvInfo | null> {\n const external = await findUv(options);\n if (external) return external;\n const managed = probeUv(uvExecutable(options), options);\n return managed?.version === options.uvVersion ? managed : null;\n}\n\nfunction normalizeRequirements(requirements: readonly string[]): string[] {\n const normalized = requirements.map((requirement) => requirement.trim());\n for (const requirement of normalized) {\n if (!requirement || /[\\0\\r\\n]/u.test(requirement)) {\n throw new TypeError(`Invalid runtime requirement: ${JSON.stringify(requirement)}`);\n }\n }\n return [...new Set(normalized)];\n}\n\nfunction normalizeDependencyOptions(\n options: RuntimeDependencyOptions,\n): Required<RuntimeDependencyOptions> {\n const extras = normalizeNames('extra', options.extras ?? []);\n const groups = normalizeNames('dependency group', options.groups ?? []);\n if (options.allExtras && extras.length > 0) {\n throw new TypeError('allExtras cannot be combined with explicit extras.');\n }\n return { extras, groups, allExtras: options.allExtras ?? false };\n}\n\nfunction normalizeNames(kind: string, names: readonly string[]): string[] {\n const normalized = names.map((name) => name.trim());\n for (const name of normalized) {\n if (!name || !/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(name)) {\n throw new TypeError(`Invalid ${kind}: ${JSON.stringify(name)}`);\n }\n }\n return [...new Set(normalized)];\n}\n\nfunction isManagedEnvironment(\n python: PythonInfo,\n options: ResolvedPyfigOptions,\n): boolean {\n return Boolean(python.virtualEnvironment) && pathsEqual(\n python.virtualEnvironment as string,\n virtualEnvironmentDirectory(options.projectRoot),\n );\n}\n\nfunction isolatedUvEnvironment(options: ResolvedPyfigOptions): NodeJS.ProcessEnv {\n return sanitizeUvEnvironment(uvEnvironment(options));\n}\n\n/** Explicit --system/--managed-python selectors cannot be combined with uv's preference setting. */\nfunction explicitPythonSourceEnvironment(\n options: ResolvedPyfigOptions,\n): NodeJS.ProcessEnv {\n const env = isolatedUvEnvironment(options);\n delete env['UV_PYTHON_PREFERENCE'];\n return env;\n}\n\nfunction targetUvEnvironment(\n options: ResolvedPyfigOptions,\n python: PythonInfo,\n): NodeJS.ProcessEnv {\n return uvCommandEnvironment(uvEnvironment(options), python);\n}\n\nfunction incompatibleConfiguredPython(options: ResolvedPyfigOptions): Error {\n return new Error(\n `Configured Python ${options.python} is unavailable or does not satisfy ` +\n `${options.pythonRange}${options.requireEmbedding ? ' with CPython embedding files' : ''}.`,\n );\n}\n\nfunction missingPythonMessage(options: ResolvedPyfigOptions, reason: string): string {\n const embedding = options.requireEmbedding\n ? ' with compatible CPython headers, library, architecture, and GIL ABI'\n : '';\n return `No Python satisfies ${options.pythonRange}${embedding}; ${reason}.`;\n}\n\nasync function virtualEnvironmentMatchesConfiguredPython(\n virtualEnvironment: PythonInfo,\n options: ResolvedPyfigOptions,\n): Promise<boolean> {\n if (!options.python) return true;\n const configured = await probePython({ executable: options.python, args: [] }, options);\n if (!configured || !pythonSatisfiesRequirements(configured, options)) return false;\n if (configured.virtualEnvironment && pathsEqual(configured.executable, virtualEnvironment.executable)) {\n return true;\n }\n const configuredBase = configured.virtualEnvironment\n ? configured.baseExecutable\n : configured.executable;\n return pathsEqual(configuredBase, virtualEnvironment.baseExecutable);\n}\n\nfunction uvInstallDirectory(options: ResolvedPyfigOptions): string {\n return path.join(options.cacheDir, 'tools', 'uv', options.uvVersion);\n}\n\nfunction uvExecutable(options: ResolvedPyfigOptions): string {\n return path.join(uvInstallDirectory(options), process.platform === 'win32' ? 'uv.exe' : 'uv');\n}\n\nasync function installUv(\n installDir: string,\n options: ResolvedPyfigOptions,\n): Promise<void> {\n const asset = uvAsset();\n const baseUrl = `https://github.com/astral-sh/uv/releases/download/${options.uvVersion}`;\n const temporary = await mkdtemp(path.join(os.tmpdir(), 'pyfig-uv-'));\n const dispatcher = proxyDispatcher(options.env);\n try {\n const archive = path.join(temporary, asset);\n await download(`${baseUrl}/${asset}`, archive, options.downloadTimeoutMs, dispatcher);\n const expected = (await downloadText(\n `${baseUrl}/${asset}.sha256`,\n options.downloadTimeoutMs,\n dispatcher,\n )).trim().split(/\\s+/u)[0];\n const actual = await sha256File(archive);\n if (!expected || expected.toLowerCase() !== actual.toLowerCase()) {\n throw new Error(`uv archive checksum mismatch for ${asset}`);\n }\n\n const extracted = path.join(temporary, 'extracted');\n await mkdir(extracted, { recursive: true });\n if (asset.endsWith('.zip')) await extractZip(archive, { dir: extracted });\n else await tar.x({ file: archive, cwd: extracted, strict: true });\n const source = await findFile(extracted, process.platform === 'win32' ? 'uv.exe' : 'uv');\n if (!source) throw new Error(`uv archive did not contain the expected executable: ${asset}`);\n await publishUvAtomically(source, installDir, options);\n } finally {\n await dispatcher?.close();\n await rm(temporary, { recursive: true, force: true });\n }\n}\n\nasync function publishUvAtomically(\n source: string,\n installDir: string,\n options: ResolvedPyfigOptions,\n): Promise<void> {\n await mkdir(installDir, { recursive: true });\n const executable = uvExecutable(options);\n const staged = path.join(\n installDir,\n `.${path.basename(executable)}.${process.pid}.${randomUUID()}.tmp`,\n );\n try {\n await copyFile(source, staged);\n if (process.platform !== 'win32') await chmod(staged, 0o755);\n const stagedUv = probeUv(staged, options);\n if (!stagedUv || stagedUv.version !== options.uvVersion) {\n throw new Error(`Downloaded uv executable is not version ${options.uvVersion}.`);\n }\n if (process.platform === 'win32') await rm(executable, { force: true });\n await rename(staged, executable);\n } finally {\n await rm(staged, { force: true });\n }\n}\n\nfunction uvAsset(): string {\n const architecture = process.arch === 'x64'\n ? 'x86_64'\n : process.arch === 'arm64'\n ? 'aarch64'\n : null;\n if (!architecture) throw new Error(`uv bootstrap does not support architecture ${process.arch}.`);\n if (process.platform === 'win32') return `uv-${architecture}-pc-windows-msvc.zip`;\n if (process.platform === 'darwin') return `uv-${architecture}-apple-darwin.tar.gz`;\n if (process.platform === 'linux') return `uv-${architecture}-unknown-linux-musl.tar.gz`;\n throw new Error(`uv bootstrap does not support platform ${process.platform}.`);\n}\n\nasync function download(\n url: string,\n destination: string,\n timeoutMs: number,\n dispatcher: EnvHttpProxyAgent | undefined,\n): Promise<void> {\n const response = await fetch(url, {\n dispatcher,\n redirect: 'follow',\n signal: AbortSignal.timeout(timeoutMs),\n });\n if (!response.ok || !response.body) {\n await response.body?.cancel();\n throw new Error(`Could not download ${url}: HTTP ${response.status}`);\n }\n await pipeline(\n Readable.fromWeb(response.body),\n createWriteStream(destination, { flags: 'wx' }),\n );\n}\n\nasync function downloadText(\n url: string,\n timeoutMs: number,\n dispatcher: EnvHttpProxyAgent | undefined,\n): Promise<string> {\n const response = await fetch(url, {\n dispatcher,\n redirect: 'follow',\n signal: AbortSignal.timeout(timeoutMs),\n });\n if (!response.ok) {\n await response.body?.cancel();\n throw new Error(`Could not download ${url}: HTTP ${response.status}`);\n }\n return response.text();\n}\n\nfunction proxyDispatcher(env: NodeJS.ProcessEnv): EnvHttpProxyAgent | undefined {\n const httpProxy = environmentValue(env, 'http_proxy', 'HTTP_PROXY');\n const httpsProxy = environmentValue(env, 'https_proxy', 'HTTPS_PROXY');\n if (!httpProxy && !httpsProxy) return undefined;\n return new EnvHttpProxyAgent({\n httpProxy,\n httpsProxy,\n noProxy: environmentValue(env, 'no_proxy', 'NO_PROXY'),\n });\n}\n\nfunction environmentValue(\n env: NodeJS.ProcessEnv,\n lowercase: string,\n uppercase: string,\n): string | undefined {\n return env[lowercase] ?? env[uppercase];\n}\n\nasync function sha256File(file: string): Promise<string> {\n const hash = createHash('sha256');\n for await (const chunk of createReadStream(file)) hash.update(chunk);\n return hash.digest('hex');\n}\n\nasync function findFile(directory: string, name: string): Promise<string | null> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const target = path.join(directory, entry.name);\n if (entry.isFile() && entry.name === name) return target;\n if (entry.isDirectory()) {\n const nested = await findFile(target, name);\n if (nested) return nested;\n }\n }\n return null;\n}\n",
9
+ "import { withLock } from 'loqkit';\n\nexport interface ProvisioningLockOptions<T> {\n /** Stable logical identity shared by every caller of the protected resource. */\n key: string;\n timeoutMs: number;\n check: () => Promise<T | null>;\n mutate: () => Promise<T>;\n}\n\n/** Use Loqkit's layered lock and predicate checks for one idempotent mutation. */\nexport async function withProvisioningLock<T>(\n options: ProvisioningLockOptions<T>,\n): Promise<T> {\n let existing: { value: T } | undefined;\n const result = await withLock(\n { resource: options.key },\n options.mutate,\n {\n key: options.key,\n name: 'Pyfig provisioning',\n namespace: 'pyfig',\n timeout: options.timeoutMs,\n predicate: async () => {\n const value = await options.check();\n if (value === null) return true;\n existing = { value };\n return false;\n },\n },\n );\n\n if (result.context.state === 'executed') return result.value as T;\n if (existing) return existing.value;\n throw new Error(`Provisioning check for ${options.key} did not produce a resource.`);\n}\n",
10
+ "import fs from 'node:fs';\nimport path from 'node:path';\n\nexport const VIRTUAL_ENV_DIRECTORY_NAME = path.join('node_modules', '.pyfig', 'venv');\n\nexport function virtualEnvironmentDirectory(projectRoot: string): string {\n return path.join(projectRoot, VIRTUAL_ENV_DIRECTORY_NAME);\n}\n\n/** Existing application environments are eligible for read-only reuse. */\nexport function externalVirtualEnvironmentDirectories(\n projectRoot: string,\n env: NodeJS.ProcessEnv,\n): string[] {\n const candidates = [env['VIRTUAL_ENV'], path.join(projectRoot, '.venv')]\n .filter((value): value is string => Boolean(value))\n .map((value) => path.resolve(value));\n return [...new Map(candidates.map((value) => [canonicalPath(value), value])).values()];\n}\n\nexport function virtualEnvironmentPythonExecutable(virtualEnvironment: string): string {\n return path.join(\n virtualEnvironment,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python',\n );\n}\n\n/** Apply the environment changes that shell activation scripts make for child processes. */\nexport function activateVirtualEnvironment(\n env: NodeJS.ProcessEnv,\n virtualEnvironment: string,\n pythonExecutable: string,\n): NodeJS.ProcessEnv {\n const activated = { ...env };\n const pathEntry = Object.keys(activated).find((key) => key.toUpperCase() === 'PATH');\n const existingPath = pathEntry ? activated[pathEntry] : undefined;\n for (const key of Object.keys(activated)) {\n const normalized = key.toUpperCase();\n if (normalized === 'PATH' || normalized === 'PYTHONHOME' || normalized === 'VIRTUAL_ENV') {\n delete activated[key];\n }\n }\n activated['PATH'] = [path.dirname(pythonExecutable), existingPath]\n .filter((value): value is string => Boolean(value))\n .join(path.delimiter);\n activated['VIRTUAL_ENV'] = virtualEnvironment;\n return activated;\n}\n\nexport function pathsEqual(left: string, right: string): boolean {\n return canonicalPath(left) === canonicalPath(right);\n}\n\n/** Canonicalize existing paths so symlink, junction, and filesystem casing aliases compare equally. */\nexport function canonicalPath(value: string): string {\n const resolved = path.resolve(value);\n let canonical = resolved;\n try {\n canonical = fs.realpathSync.native(resolved);\n } catch {\n // Paths being provisioned do not exist yet; the absolute spelling is the best stable key.\n }\n return process.platform === 'win32' ? canonical.toLowerCase() : canonical;\n}\n",
11
+ "import type { PythonInfo } from './probes.js';\nimport { activateVirtualEnvironment } from './virtual-environment.js';\n\nconst TARGET_OPTIONS = new Set([\n '--active',\n '--config-file',\n '--directory',\n '--isolated',\n '--prefix',\n '--project',\n '--python',\n '--root',\n '--system',\n '--target',\n '--user',\n]);\n\nconst TARGET_ENVIRONMENT_VARIABLES = new Set([\n 'CONDA_PREFIX',\n 'PIP_PREFIX',\n 'PIP_PYTHON',\n 'PIP_ROOT',\n 'PIP_TARGET',\n 'PIP_USER',\n 'PYTHONHOME',\n 'PYTHONUSERBASE',\n 'UV_CONFIG_FILE',\n 'UV_PROJECT',\n 'UV_PROJECT_ENVIRONMENT',\n 'UV_PYTHON',\n 'UV_PREFIX',\n 'UV_ROOT',\n 'UV_SYSTEM_PYTHON',\n 'UV_TARGET',\n]);\n\nexport function uvCommandNeedsEnvironment(args: readonly string[]): boolean {\n return args[0] === 'pip' || args[0] === 'run';\n}\n\n/** Pin uv pip and uv run to the environment selected by Pyfig. */\nexport function targetUvArguments(\n args: readonly string[],\n python: PythonInfo,\n): string[] {\n if (!python.virtualEnvironment) {\n throw new Error('Targeted uv commands require a virtual environment.');\n }\n assertNoTargetOverride(args);\n if (args[0] === 'run') {\n return ['run', '--no-project', '--python', python.executable, ...args.slice(1)];\n }\n if (args[0] === 'pip' && args[1]) {\n return ['pip', args[1], '--python', python.executable, ...args.slice(2)];\n }\n return [...args];\n}\n\nexport function uvCommandEnvironment(\n env: NodeJS.ProcessEnv,\n python?: PythonInfo,\n): NodeJS.ProcessEnv {\n const sanitized = sanitizeUvEnvironment(env);\n if (!python?.virtualEnvironment) return sanitized;\n return {\n ...activateVirtualEnvironment(\n sanitized,\n python.virtualEnvironment,\n python.executable,\n ),\n UV_PYTHON: python.executable,\n };\n}\n\n/** Remove inherited values that could redirect uv away from an explicit target. */\nexport function sanitizeUvEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const sanitized = { ...env };\n for (const key of Object.keys(sanitized)) {\n if (TARGET_ENVIRONMENT_VARIABLES.has(key.toUpperCase())) delete sanitized[key];\n }\n return sanitized;\n}\n\nfunction assertNoTargetOverride(args: readonly string[]): void {\n for (const argument of args.slice(1)) {\n if (argument === '--') return;\n const [name] = argument.split('=', 1);\n if (name && TARGET_OPTIONS.has(name)) {\n throw new Error(`${name} cannot override the environment selected by Pyfig.`);\n }\n if (argument === '-p' || argument.startsWith('-p=') || /^-p[^-]/u.test(argument)) {\n throw new Error('-p cannot override the environment selected by Pyfig.');\n }\n }\n}\n",
12
+ "import semver from 'semver';\nimport type { ResolvedPyfigOptions } from './config.js';\nimport { resolveExecutable, run, type CommandSpec } from './process.js';\n\nexport interface PythonInfo {\n executable: string;\n baseExecutable: string;\n version: string;\n major: number;\n minor: number;\n patch: number;\n releaseLevel: string;\n implementation: string;\n architecture: string;\n pointerBits: number;\n prefix: string;\n basePrefix: string;\n virtualEnvironment: string | null;\n gilDisabled: boolean;\n embedding: PythonEmbeddingInfo | null;\n}\n\nexport interface PythonEmbeddingInfo {\n includeDirectory: string;\n headerPath: string;\n libraryPath: string;\n libraryDirectory: string;\n libraryName: string;\n libraryKind: 'import' | 'shared' | 'static';\n}\n\nexport interface UvInfo {\n executable: string;\n version: string;\n}\n\nconst PYTHON_PROBE = `\nimport json\nimport os\nimport platform\nimport struct\nimport sys\nimport sysconfig\n\nbase_prefix = getattr(sys, \"base_prefix\", sys.prefix)\ninclude_directory = sysconfig.get_path(\"include\") or \"\"\nheader_path = os.path.join(include_directory, \"Python.h\") if include_directory else \"\"\nlibrary_candidates = []\nif os.name == \"nt\":\n library_directory = sysconfig.get_config_var(\"LIBDIR\") or os.path.join(base_prefix, \"libs\")\n configured_library = sysconfig.get_config_var(\"LDLIBRARY\") or \"\"\n if configured_library:\n library_candidates.append(os.path.join(library_directory, os.path.splitext(configured_library)[0] + \".lib\"))\n library_candidates.append(os.path.join(library_directory, f\"python{sys.version_info.major}{sys.version_info.minor}.lib\"))\nelse:\n library_directories = [\n sysconfig.get_config_var(\"LIBDIR\"),\n sysconfig.get_config_var(\"LIBPL\"),\n os.path.join(base_prefix, \"lib\"),\n ]\n library_names = [\n sysconfig.get_config_var(\"LDLIBRARY\"),\n sysconfig.get_config_var(\"LIBRARY\"),\n ]\n for directory in library_directories:\n for name in library_names:\n if directory and name:\n library_candidates.append(os.path.join(directory, name))\n\nlibrary_path = next((candidate for candidate in library_candidates if os.path.isfile(candidate)), \"\")\nembedding = None\nif os.path.isfile(header_path) and library_path:\n library_name = os.path.basename(library_path)\n library_kind = \"import\" if os.name == \"nt\" else (\"static\" if library_name.endswith(\".a\") else \"shared\")\n embedding = {\n \"includeDirectory\": include_directory,\n \"headerPath\": header_path,\n \"libraryPath\": library_path,\n \"libraryDirectory\": os.path.dirname(library_path),\n \"libraryName\": library_name,\n \"libraryKind\": library_kind,\n }\n\nrelease_level = sys.version_info.releaselevel\nrelease_suffix = \"\" if release_level == \"final\" else f\"-{release_level}.{sys.version_info.serial}\"\n\nprint(json.dumps({\n \"executable\": sys.executable,\n \"baseExecutable\": getattr(sys, \"_base_executable\", sys.executable),\n \"version\": \".\".join(map(str, sys.version_info[:3])) + release_suffix,\n \"major\": sys.version_info.major,\n \"minor\": sys.version_info.minor,\n \"patch\": sys.version_info.micro,\n \"releaseLevel\": release_level,\n \"implementation\": sys.implementation.name,\n \"architecture\": platform.machine().lower(),\n \"pointerBits\": struct.calcsize(\"P\") * 8,\n \"prefix\": sys.prefix,\n \"basePrefix\": base_prefix,\n \"virtualEnvironment\": sys.prefix if sys.prefix != base_prefix else None,\n \"gilDisabled\": bool(sysconfig.get_config_var(\"Py_GIL_DISABLED\")),\n \"embedding\": embedding,\n}))\n`;\n\nexport function pythonSatisfiesRequirements(\n python: PythonInfo,\n options: Pick<ResolvedPyfigOptions, 'pythonRange' | 'requireEmbedding' | 'requireGil'>,\n): boolean {\n return semver.satisfies(python.version, options.pythonRange) &&\n (!options.requireEmbedding || (\n python.implementation === 'cpython' &&\n python.embedding !== null &&\n pythonArchitectureMatchesRuntime(python)\n )) &&\n (!options.requireGil || !python.gilDisabled);\n}\n\nexport async function probePython(\n candidate: CommandSpec,\n options: ResolvedPyfigOptions,\n): Promise<PythonInfo | null> {\n const executable = await resolveExecutable(candidate.executable, options.env);\n if (!executable) return null;\n try {\n const { stdout } = run(\n executable,\n [...candidate.args, '-c', PYTHON_PROBE],\n options.env,\n options.probeTimeoutMs,\n );\n const info = JSON.parse(stdout.trim()) as PythonInfo;\n return semver.valid(info.version) ? info : null;\n } catch {\n return null;\n }\n}\n\nexport async function findUv(options: ResolvedPyfigOptions): Promise<UvInfo | null> {\n const configured = options.env['PYFIG_UV'] ?? 'uv';\n const executable = await resolveExecutable(configured, options.env);\n const uv = executable ? probeUv(executable, options) : null;\n return uv && semver.satisfies(uv.version, options.uvRange) ? uv : null;\n}\n\nexport function probeUv(\n executable: string,\n options: ResolvedPyfigOptions,\n): UvInfo | null {\n try {\n const { stdout } = run(executable, ['--version'], options.env, options.probeTimeoutMs);\n const version = normalizeVersion(stdout.match(/^uv\\s+(\\S+)/iu)?.[1]);\n return version ? { executable, version } : null;\n } catch {\n return null;\n }\n}\n\nfunction normalizeVersion(value: string | undefined): string | null {\n if (!value) return null;\n return semver.valid(value) ?? semver.coerce(value)?.version ?? null;\n}\n\nfunction pythonArchitectureMatchesRuntime(python: PythonInfo): boolean {\n const architecture = python.architecture.toLowerCase();\n if (python.pointerBits !== (process.arch === 'ia32' ? 32 : 64)) return false;\n if (process.arch === 'x64') return architecture === 'x86_64' || architecture === 'amd64';\n if (process.arch === 'arm64') return architecture === 'aarch64' || architecture === 'arm64';\n if (process.arch === 'ia32') {\n return architecture === 'x86' || architecture === 'i386' || architecture === 'i686';\n }\n return architecture === process.arch;\n}\n",
13
+ "import { spawn, spawnSync } from 'node:child_process';\nimport path from 'node:path';\nimport which from 'which';\n\nexport interface CommandSpec {\n executable: string;\n args: string[];\n}\n\nexport interface RunResult {\n stdout: string;\n stderr: string;\n}\n\nexport async function resolveExecutable(\n value: string,\n env: NodeJS.ProcessEnv,\n): Promise<string | null> {\n if (!value) return null;\n if (path.isAbsolute(value)) {\n return await which(value, { nothrow: true, path: env['PATH'], pathExt: env['PATHEXT'] });\n }\n if (!/^[A-Za-z0-9_.-]+$/u.test(value)) return null;\n return await which(value, { nothrow: true, path: env['PATH'], pathExt: env['PATHEXT'] });\n}\n\nexport function run(\n executable: string,\n args: string[],\n env: NodeJS.ProcessEnv,\n timeoutMs: number,\n): RunResult {\n const result = spawnSync(executable, args, {\n encoding: 'utf8',\n env,\n timeout: timeoutMs,\n maxBuffer: 4 * 1024 * 1024,\n windowsHide: true,\n });\n if (result.status !== 0 || result.error) {\n const detail = result.stderr?.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`${path.basename(executable)} ${args.slice(0, 3).join(' ')} failed: ${detail}`);\n }\n return { stdout: result.stdout, stderr: result.stderr };\n}\n\n/** Run a child without blocking lock heartbeats or other coordination timers. */\nexport async function runAsync(\n executable: string,\n args: string[],\n env: NodeJS.ProcessEnv,\n timeoutMs: number,\n signal?: AbortSignal,\n cwd?: string,\n): Promise<RunResult> {\n return new Promise<RunResult>((resolve, reject) => {\n const child = spawn(executable, args, {\n env,\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsHide: true,\n });\n let stdout = '';\n let stderr = '';\n let settled = false;\n const finish = (error?: Error, result?: RunResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener('abort', abort);\n if (error) reject(error);\n else if (result) resolve(result);\n };\n const abort = (): void => {\n child.kill();\n const reason = signal?.reason;\n finish(reason instanceof Error ? reason : new Error(`${path.basename(executable)} was aborted.`));\n };\n const timer = setTimeout(() => {\n child.kill();\n finish(new Error(`${path.basename(executable)} timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n if (stdout.length > 4 * 1024 * 1024) {\n child.kill();\n finish(new Error(`${path.basename(executable)} exceeded the output limit.`));\n }\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n if (stderr.length > 4 * 1024 * 1024) {\n child.kill();\n finish(new Error(`${path.basename(executable)} exceeded the error-output limit.`));\n }\n });\n child.once('error', (error) => finish(error));\n child.once('close', (code, childSignal) => {\n if (code !== 0) {\n const detail = stderr.trim() || (childSignal ? `signal ${childSignal}` : `exit ${code}`);\n finish(new Error(`${path.basename(executable)} ${args.slice(0, 3).join(' ')} failed: ${detail}`));\n return;\n }\n finish(undefined, { stdout, stderr });\n });\n\n if (signal?.aborted) abort();\n else signal?.addEventListener('abort', abort, { once: true });\n });\n}\n",
14
+ "import {\n spawn,\n spawnSync,\n type ChildProcess,\n type SpawnOptions,\n type SpawnSyncOptions,\n} from 'node:child_process';\nimport {\n resolveOptions,\n uvEnvironment,\n type PyfigOptions,\n type ResolvedPyfigOptions,\n} from './config.js';\nimport type { PythonInfo, UvInfo } from './probes.js';\nimport {\n targetUvArguments,\n uvCommandEnvironment,\n uvCommandNeedsEnvironment,\n} from './package-target.js';\nimport { ensureEnvironment, ensureUv, type PythonEnvironment } from './provision.js';\nimport { runtimeFile } from './runtime-files.js';\n\nexport interface ResolvedCommand {\n executable: string;\n args: string[];\n env: NodeJS.ProcessEnv;\n}\n\ninterface SyncResolutionRequest {\n target: 'environment' | 'uv';\n options: ResolvedPyfigOptions;\n}\n\n/** Run uv, pinning uv pip and uv run to Pyfig's selected environment. */\nexport async function uvSpawn(\n args: readonly string[] = [],\n spawnOptions: SpawnOptions = {},\n pyfigOptions: PyfigOptions = {},\n): Promise<ChildProcess> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const resolved = resolveOptions(options);\n const environment = uvCommandNeedsEnvironment(args)\n ? await ensureEnvironment(resolved)\n : undefined;\n const uv = environment?.uv ?? await ensureUv(resolved);\n const command = buildUvCommand(uv, args, resolved, environment?.python);\n return spawn(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\n/** Synchronous counterpart to uvSpawn for build and CommonJS hooks. */\nexport function uvSpawnSync(\n args: readonly string[] = [],\n spawnOptions: SpawnSyncOptions = {},\n pyfigOptions: PyfigOptions = {},\n): ReturnType<typeof spawnSync> {\n const options = optionsForInvocation(pyfigOptions, spawnOptions.env);\n const resolved = resolveOptions(options);\n const environment = uvCommandNeedsEnvironment(args)\n ? resolveSynchronously('environment', resolved)\n : undefined;\n const uv = environment?.uv ?? resolveSynchronously('uv', resolved);\n const command = buildUvCommand(uv, args, resolved, environment?.python);\n return spawnSync(command.executable, command.args, {\n ...spawnOptions,\n env: command.env,\n });\n}\n\nexport function buildUvCommand(\n uv: UvInfo,\n args: readonly string[],\n options: ResolvedPyfigOptions,\n python?: PythonInfo,\n): ResolvedCommand {\n return {\n executable: uv.executable,\n args: python ? targetUvArguments(args, python) : [...args],\n env: uvCommandEnvironment(uvEnvironment(options), python),\n };\n}\n\nfunction optionsForInvocation(\n pyfigOptions: PyfigOptions,\n spawnEnv: NodeJS.ProcessEnv | undefined,\n): PyfigOptions {\n return spawnEnv === undefined ? pyfigOptions : { ...pyfigOptions, env: spawnEnv };\n}\n\nfunction resolveSynchronously(\n target: 'environment',\n options: PyfigOptions,\n): PythonEnvironment;\nfunction resolveSynchronously(target: 'uv', options: PyfigOptions): UvInfo;\nfunction resolveSynchronously(\n target: SyncResolutionRequest['target'],\n options: PyfigOptions,\n): PythonEnvironment | UvInfo {\n const resolved = resolveOptions(options);\n const request: SyncResolutionRequest = { target, options: resolved };\n const result = spawnSync(process.execPath, [runtimeFile('sync-resolver')], {\n input: JSON.stringify(request),\n encoding: 'utf8',\n env: resolved.env,\n timeout: synchronousResolutionTimeout(resolved),\n maxBuffer: 4 * 1024 * 1024,\n windowsHide: true,\n });\n if (result.status !== 0 || result.error) {\n const detail = result.stderr.trim() || result.error?.message || `exit ${result.status}`;\n throw new Error(`Could not resolve ${target} synchronously: ${detail}`);\n }\n try {\n return JSON.parse(result.stdout) as PythonEnvironment | UvInfo;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Could not parse synchronous ${target} resolution: ${detail}`);\n }\n}\n\nfunction synchronousResolutionTimeout(options: ResolvedPyfigOptions): number {\n return options.coordinationTimeoutMs + options.downloadTimeoutMs +\n (2 * options.installTimeoutMs) + (4 * options.probeTimeoutMs) + 60_000;\n}\n",
15
+ "import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\ndeclare const PYFIG_CJS_DIRECTORY: string | undefined;\n\n/** Resolve a compiled runtime helper beside either the ESM files or the CJS bundle. */\nexport function runtimeFile(name: string): string {\n const moduleDirectory = typeof PYFIG_CJS_DIRECTORY === 'string'\n ? PYFIG_CJS_DIRECTORY\n : path.dirname(fileURLToPath(import.meta.url));\n const compiled = path.join(moduleDirectory, `${name}.js`);\n return fs.existsSync(compiled) ? compiled : path.join(moduleDirectory, `${name}.ts`);\n}\n"
17
16
  ],
18
- "mappings": "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",
19
- "debugId": "940E4B4A4836D48C64756E2164756E21",
17
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAiB,IAAjB;AAC0B,IAA1B;AACmB,IAAnB;;;ACFe,IAAf;AACiB,IAAjB;AAGO,SAAS,kBAAkB,CAAC,iBAAyB,QAAQ,IAAI,GAAW;AAAA,EACjF,MAAM,QAAQ,yBAAK,QAAQ,cAAc;AAAA,EACzC,WAAW,aAAa,UAAU,KAAK,GAAG;AAAA,IACxC,IAAI,uBAAG,WAAW,yBAAK,KAAK,WAAW,MAAM,CAAC;AAAA,MAAG,OAAO;AAAA,EAC1D;AAAA,EACA,OAAO;AAAA;AAGT,UAAU,SAAS,CAAC,gBAA2C;AAAA,EAC7D,IAAI,YAAY;AAAA,EAChB,OAAO,MAAM;AAAA,IACX,MAAM;AAAA,IACN,MAAM,SAAS,yBAAK,QAAQ,SAAS;AAAA,IACrC,IAAI,WAAW;AAAA,MAAW;AAAA,IAC1B,YAAY;AAAA,EACd;AAAA;;;ADdK,IAAM,uBAAuB;AAC7B,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAG3B,IAAM,mBAAmB;AAEhC,IAAM,2BAA2B;AACjC,IAAM,6BAA6B,KAAK;AACxC,IAAM,8BAA8B,IAAI;AAKxC,IAAM,oBAAoB,MAAM;AAAA,EAC9B,MAAM,WAAoB;AAAA,EAG1B,MAAM,iBAAiB,OAAO,aAAa,aAAa,WAAW,SAAS;AAAA,EAC5E,IAAI,CAAC;AAAA,IAAgB,MAAM,IAAI,UAAU,gDAAgD;AAAA,EACzF,OAAO;AAAA,GACN;AA8DI,SAAS,cAAc,CAAC,UAAwB,CAAC,GAAyB;AAAA,EAG/E,MAAM,MAAM,KAAM,QAAQ,OAAO,QAAQ,IAAK;AAAA,EAC9C,MAAM,cAAc,QAAQ,eAAe,IAAI,yBAAyB;AAAA,EACxE,MAAM,UAAU,QAAQ,WAAW,IAAI,qBAAqB;AAAA,EAC5D,YAAY,UAAU,WAAW;AAAA,EACjC,YAAY,MAAM,OAAO;AAAA,EAEzB,MAAM,gBAAgB,QAAQ,iBAC5B,IAAI,2BAA2B;AAAA,EACjC,MAAM,YAAY,QAAQ,aAAa,IAAI,uBAAuB;AAAA,EAClE,2BAA2B,eAAe,WAAW;AAAA,EACrD,gBAAgB,WAAW,OAAO;AAAA,EAElC,MAAM,iBAAiB,gBACrB,kBACA,QAAQ,gBACR,IAAI,2BACJ,wBACF;AAAA,EACA,MAAM,mBAAmB,gBACvB,oBACA,QAAQ,kBACR,IAAI,6BACJ,0BACF;AAAA,EACA,MAAM,oBAAoB,gBACxB,qBACA,QAAQ,mBACR,IAAI,8BACJ,2BACF;AAAA,EACA,MAAM,wBAAwB,gBAC5B,yBACA,QAAQ,uBACR,IAAI,kCACJ,mBAAmB,oBAAoB,KACzC;AAAA,EACA,MAAM,iBAAiB,QAAQ,YAAY,IAAI;AAAA,EAC/C,MAAM,WAAW,iBACb,0BAAK,QAAQ,cAAc,IAC3B,iBAAiB,SAAS,EAAE,QAAQ,GAAG,CAAC,EAAE;AAAA,EAC9C,MAAM,wBAAwB,QAAQ,eAAe,IAAI;AAAA,EACzD,MAAM,cAAc,wBAChB,0BAAK,QAAQ,qBAAqB,IAClC,mBAAmB,IAAI,eAAe,QAAQ,IAAI,CAAC;AAAA,EACvD,MAAM,cAAc,QAAQ,eAAe,aAAa,IAAI,uBAAuB,IAAI;AAAA,EAEvF,OAAO;AAAA,IACL,QAAQ,QAAQ,UAAU,IAAI,mBAAmB;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB,QAAQ,oBAAoB,aAAa,IAAI,4BAA4B,KAAK;AAAA,IAChG,YAAY,QAAQ,cAAc,aAAa,IAAI,sBAAsB,KAAK;AAAA,IAC9E;AAAA,IACA,eAAe,QAAQ,iBAAiB,aAAa,IAAI,yBAAyB,WAAW;AAAA,IAC7F,WAAW,QAAQ,aAAa,aAAa,IAAI,qBAAqB,WAAW;AAAA,IACjF,0BAA0B,QAAQ,4BAChC,aAAa,IAAI,qCAAqC,WAAW;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAIK,SAAS,aAAa,CAAC,SAAkD;AAAA,EAC9E,OAAO;AAAA,OACF,QAAQ;AAAA,IACX,uBAAuB,0BAAK,KAAK,QAAQ,UAAU,QAAQ;AAAA,IAC3D,cAAc,0BAAK,KAAK,QAAQ,UAAU,UAAU;AAAA,IACpD,sBAAsB;AAAA,IACtB,cAAc;AAAA,EAChB;AAAA;AAGF,SAAS,WAAW,CAAC,MAAc,OAAqB;AAAA,EACtD,IAAI,CAAC,sBAAO,WAAW,KAAK,GAAG;AAAA,IAC7B,MAAM,IAAI,UAAU,WAAW,sBAAsB,OAAO;AAAA,EAC9D;AAAA;AAGF,SAAS,eAAe,CAAC,SAAiB,OAAqB;AAAA,EAC7D,IAAI,CAAC,sBAAO,MAAM,OAAO,GAAG;AAAA,IAC1B,MAAM,IAAI,UAAU,6BAA6B,SAAS;AAAA,EAC5D;AAAA,EACA,IAAI,CAAC,sBAAO,UAAU,SAAS,KAAK,GAAG;AAAA,IACrC,MAAM,IAAI,UAAU,aAAa,4CAA4C,QAAQ;AAAA,EACvF;AAAA;AAGF,SAAS,0BAA0B,CAAC,SAAiB,aAA2B;AAAA,EAC9E,IAAI,CAAC,WAAW,eAAe,KAAK,OAAO,KAAK,QAAQ,SAAS,IAAI,GAAG;AAAA,IACtE,MAAM,IAAI,UAAU,mCAAmC,SAAS;AAAA,EAClE;AAAA,EACA,IAAI,wBAAwB,KAAK,OAAO,GAAG;AAAA,IACzC,MAAM,aAAa,QAAQ,MAAM,GAAG,EAAE,WAAW,IAAI,GAAG,cAAc;AAAA,IACtE,IAAI,CAAC,sBAAO,UAAU,YAAY,WAAW,GAAG;AAAA,MAC9C,MAAM,IAAI,UACR,kBAAkB,2CAA2C,cAC/D;AAAA,IACF;AAAA,EACF;AAAA;AAGF,SAAS,eAAe,CACtB,MACA,UACA,aACA,UACA,YAAY,OACJ;AAAA,EACR,MAAM,QAAQ,aAAa,gBAAgB,YAAY,WAAW,OAAO,WAAW;AAAA,EACpF,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,SAAS;AAAA,IACnD,MAAM,IAAI,UAAU,GAAG,gBAAgB,YAAY,mBAAmB,uBAAuB;AAAA,EAC/F;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,YAAY,CAAC,OAA2B,UAA4B;AAAA,EAC3E,IAAI,UAAU;AAAA,IAAW,OAAO;AAAA,EAChC,IAAI,sBAAsB,KAAK,KAAK;AAAA,IAAG,OAAO;AAAA,EAC9C,IAAI,uBAAuB,KAAK,KAAK;AAAA,IAAG,OAAO;AAAA,EAC/C,MAAM,IAAI,UAAU,0BAA0B,OAAO;AAAA;;AErN/B,IAAxB;;;ACNuC,IAAvC;AACoD,IAApD;AAUO,IATP;AAUe,IAAf;AACe,IAAf;AACiB,IAAjB;AACyB,IAAzB;AACyB,IAAzB;AACuB,IAAvB;AACqB,IAArB;AACyC,IAAzC;;;ACnByB,IAAzB;AAWO,eAAe,oBAAuB,CAC3C,SACY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM,SAAS,MAAM,uBACnB,EAAE,UAAU,QAAQ,IAAI,GACxB,QAAQ,QACR;AAAA,IACE,KAAK,QAAQ;AAAA,IACb,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS,QAAQ;AAAA,IACjB,WAAW,YAAY;AAAA,MACrB,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAAA,MAClC,IAAI,UAAU;AAAA,QAAM,OAAO;AAAA,MAC3B,WAAW,EAAE,MAAM;AAAA,MACnB,OAAO;AAAA;AAAA,EAEX,CACF;AAAA,EAEA,IAAI,OAAO,QAAQ,UAAU;AAAA,IAAY,OAAO,OAAO;AAAA,EACvD,IAAI;AAAA,IAAU,OAAO,SAAS;AAAA,EAC9B,MAAM,IAAI,MAAM,0BAA0B,QAAQ,iCAAiC;AAAA;;;AClCtE,IAAf;AACiB,IAAjB;AAEO,IAAM,6BAA6B,0BAAK,KAAK,gBAAgB,UAAU,MAAM;AAE7E,SAAS,2BAA2B,CAAC,aAA6B;AAAA,EACvE,OAAO,0BAAK,KAAK,aAAa,0BAA0B;AAAA;AAInD,SAAS,qCAAqC,CACnD,aACA,KACU;AAAA,EACV,MAAM,aAAa,CAAC,IAAI,gBAAgB,0BAAK,KAAK,aAAa,OAAO,CAAC,EACpE,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,EACjD,IAAI,CAAC,UAAU,0BAAK,QAAQ,KAAK,CAAC;AAAA,EACrC,OAAO,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA;AAGhF,SAAS,kCAAkC,CAAC,oBAAoC;AAAA,EACrF,OAAO,0BAAK,KACV,oBACA,QAAQ,aAAa,UAAU,YAAY,OAC3C,QAAQ,aAAa,UAAU,eAAe,QAChD;AAAA;AAIK,SAAS,0BAA0B,CACxC,KACA,oBACA,kBACmB;AAAA,EACnB,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,MAAM,YAAY,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,IAAI,YAAY,MAAM,MAAM;AAAA,EACnF,MAAM,eAAe,YAAY,UAAU,aAAa;AAAA,EACxD,WAAW,OAAO,OAAO,KAAK,SAAS,GAAG;AAAA,IACxC,MAAM,aAAa,IAAI,YAAY;AAAA,IACnC,IAAI,eAAe,UAAU,eAAe,gBAAgB,eAAe,eAAe;AAAA,MACxF,OAAO,UAAU;AAAA,IACnB;AAAA,EACF;AAAA,EACA,UAAU,UAAU,CAAC,0BAAK,QAAQ,gBAAgB,GAAG,YAAY,EAC9D,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,EACjD,KAAK,0BAAK,SAAS;AAAA,EACtB,UAAU,iBAAiB;AAAA,EAC3B,OAAO;AAAA;AAGF,SAAS,UAAU,CAAC,MAAc,OAAwB;AAAA,EAC/D,OAAO,cAAc,IAAI,MAAM,cAAc,KAAK;AAAA;AAI7C,SAAS,aAAa,CAAC,OAAuB;AAAA,EACnD,MAAM,WAAW,0BAAK,QAAQ,KAAK;AAAA,EACnC,IAAI,YAAY;AAAA,EAChB,IAAI;AAAA,IACF,YAAY,wBAAG,aAAa,OAAO,QAAQ;AAAA,IAC3C,MAAM;AAAA,EAGR,OAAO,QAAQ,aAAa,UAAU,UAAU,YAAY,IAAI;AAAA;;;AC5DlE,IAAM,iBAAiB,IAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,+BAA+B,IAAI,IAAI;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,yBAAyB,CAAC,MAAkC;AAAA,EAC1E,OAAO,KAAK,OAAO,SAAS,KAAK,OAAO;AAAA;AAInC,SAAS,iBAAiB,CAC/B,MACA,QACU;AAAA,EACV,IAAI,CAAC,OAAO,oBAAoB;AAAA,IAC9B,MAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAAA,EACA,uBAAuB,IAAI;AAAA,EAC3B,IAAI,KAAK,OAAO,OAAO;AAAA,IACrB,OAAO,CAAC,OAAO,gBAAgB,YAAY,OAAO,YAAY,GAAG,KAAK,MAAM,CAAC,CAAC;AAAA,EAChF;AAAA,EACA,IAAI,KAAK,OAAO,SAAS,KAAK,IAAI;AAAA,IAChC,OAAO,CAAC,OAAO,KAAK,IAAI,YAAY,OAAO,YAAY,GAAG,KAAK,MAAM,CAAC,CAAC;AAAA,EACzE;AAAA,EACA,OAAO,CAAC,GAAG,IAAI;AAAA;AAGV,SAAS,oBAAoB,CAClC,KACA,QACmB;AAAA,EACnB,MAAM,YAAY,sBAAsB,GAAG;AAAA,EAC3C,IAAI,CAAC,QAAQ;AAAA,IAAoB,OAAO;AAAA,EACxC,OAAO;AAAA,OACF,2BACD,WACA,OAAO,oBACP,OAAO,UACT;AAAA,IACA,WAAW,OAAO;AAAA,EACpB;AAAA;AAIK,SAAS,qBAAqB,CAAC,KAA2C;AAAA,EAC/E,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,WAAW,OAAO,OAAO,KAAK,SAAS,GAAG;AAAA,IACxC,IAAI,6BAA6B,IAAI,IAAI,YAAY,CAAC;AAAA,MAAG,OAAO,UAAU;AAAA,EAC5E;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,sBAAsB,CAAC,MAA+B;AAAA,EAC7D,WAAW,YAAY,KAAK,MAAM,CAAC,GAAG;AAAA,IACpC,IAAI,aAAa;AAAA,MAAM;AAAA,IACvB,OAAO,QAAQ,SAAS,MAAM,KAAK,CAAC;AAAA,IACpC,IAAI,QAAQ,eAAe,IAAI,IAAI,GAAG;AAAA,MACpC,MAAM,IAAI,MAAM,GAAG,yDAAyD;AAAA,IAC9E;AAAA,IACA,IAAI,aAAa,QAAQ,SAAS,WAAW,KAAK,KAAK,WAAW,KAAK,QAAQ,GAAG;AAAA,MAChF,MAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AAAA,EACF;AAAA;;;AC7FiB,IAAnB;;;ACAiC,IAAjC;AACiB,IAAjB;AACkB,IAAlB;AAYO,eAAe,iBAAiB,CACrC,OACA,KACwB;AAAA,EACxB,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,IAAI,0BAAK,WAAW,KAAK,GAAG;AAAA,IAC1B,OAAO,MAAM,qBAAM,OAAO,EAAE,SAAS,MAAM,MAAM,IAAI,SAAS,SAAS,IAAI,WAAW,CAAC;AAAA,EACzF;AAAA,EACA,IAAI,CAAC,qBAAqB,KAAK,KAAK;AAAA,IAAG,OAAO;AAAA,EAC9C,OAAO,MAAM,qBAAM,OAAO,EAAE,SAAS,MAAM,MAAM,IAAI,SAAS,SAAS,IAAI,WAAW,CAAC;AAAA;AAGlF,SAAS,GAAG,CACjB,YACA,MACA,KACA,WACW;AAAA,EACX,MAAM,SAAS,oCAAU,YAAY,MAAM;AAAA,IACzC,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,WAAW,IAAI,OAAO;AAAA,IACtB,aAAa;AAAA,EACf,CAAC;AAAA,EACD,IAAI,OAAO,WAAW,KAAK,OAAO,OAAO;AAAA,IACvC,MAAM,SAAS,OAAO,QAAQ,KAAK,KAAK,OAAO,OAAO,WAAW,QAAQ,OAAO;AAAA,IAChF,MAAM,IAAI,MAAM,GAAG,0BAAK,SAAS,UAAU,KAAK,KAAK,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,QAAQ;AAAA,EAChG;AAAA,EACA,OAAO,EAAE,QAAQ,OAAO,QAAQ,QAAQ,OAAO,OAAO;AAAA;AAIjD,eAAe,QAAQ,CAC5B,YACA,MACA,KACA,WACA,QACA,KACoB;AAAA,EACpB,OAAO,IAAI,QAAmB,CAAC,SAAS,WAAW;AAAA,IACjD,MAAM,QAAQ,gCAAM,YAAY,MAAM;AAAA,MACpC;AAAA,MACA;AAAA,MACA,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,MAChC,aAAa;AAAA,IACf,CAAC;AAAA,IACD,IAAI,SAAS;AAAA,IACb,IAAI,SAAS;AAAA,IACb,IAAI,UAAU;AAAA,IACd,MAAM,SAAS,CAAC,OAAe,WAA6B;AAAA,MAC1D,IAAI;AAAA,QAAS;AAAA,MACb,UAAU;AAAA,MACV,aAAa,KAAK;AAAA,MAClB,QAAQ,oBAAoB,SAAS,KAAK;AAAA,MAC1C,IAAI;AAAA,QAAO,OAAO,KAAK;AAAA,MACvB,KAAK,IAAI;AAAA,QAAQ,QAAQ,MAAM;AAAA;AAAA,IAEjC,MAAM,QAAQ,MAAY;AAAA,MACxB,MAAM,KAAK;AAAA,MACX,MAAM,SAAS,QAAQ;AAAA,MACvB,OAAO,kBAAkB,QAAQ,SAAS,IAAI,MAAM,GAAG,0BAAK,SAAS,UAAU,gBAAgB,CAAC;AAAA;AAAA,IAElG,MAAM,QAAQ,WAAW,MAAM;AAAA,MAC7B,MAAM,KAAK;AAAA,MACX,OAAO,IAAI,MAAM,GAAG,0BAAK,SAAS,UAAU,qBAAqB,cAAc,CAAC;AAAA,OAC/E,SAAS;AAAA,IAEZ,MAAM,OAAO,YAAY,MAAM;AAAA,IAC/B,MAAM,OAAO,YAAY,MAAM;AAAA,IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAkB;AAAA,MACzC,UAAU;AAAA,MACV,IAAI,OAAO,SAAS,IAAI,OAAO,MAAM;AAAA,QACnC,MAAM,KAAK;AAAA,QACX,OAAO,IAAI,MAAM,GAAG,0BAAK,SAAS,UAAU,8BAA8B,CAAC;AAAA,MAC7E;AAAA,KACD;AAAA,IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAkB;AAAA,MACzC,UAAU;AAAA,MACV,IAAI,OAAO,SAAS,IAAI,OAAO,MAAM;AAAA,QACnC,MAAM,KAAK;AAAA,QACX,OAAO,IAAI,MAAM,GAAG,0BAAK,SAAS,UAAU,oCAAoC,CAAC;AAAA,MACnF;AAAA,KACD;AAAA,IACD,MAAM,KAAK,SAAS,CAAC,UAAU,OAAO,KAAK,CAAC;AAAA,IAC5C,MAAM,KAAK,SAAS,CAAC,MAAM,gBAAgB;AAAA,MACzC,IAAI,SAAS,GAAG;AAAA,QACd,MAAM,SAAS,OAAO,KAAK,MAAM,cAAc,UAAU,gBAAgB,QAAQ;AAAA,QACjF,OAAO,IAAI,MAAM,GAAG,0BAAK,SAAS,UAAU,KAAK,KAAK,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,QAAQ,CAAC;AAAA,QAChG;AAAA,MACF;AAAA,MACA,OAAO,WAAW,EAAE,QAAQ,OAAO,CAAC;AAAA,KACrC;AAAA,IAED,IAAI,QAAQ;AAAA,MAAS,MAAM;AAAA,IAC3B;AAAA,MAAK,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,GAC7D;AAAA;;;AD3EH,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqEd,SAAS,2BAA2B,CACzC,QACA,SACS;AAAA,EACT,OAAO,uBAAO,UAAU,OAAO,SAAS,QAAQ,WAAW,MACxD,CAAC,QAAQ,oBACR,OAAO,mBAAmB,aAC1B,OAAO,cAAc,QACrB,iCAAiC,MAAM,OAExC,CAAC,QAAQ,cAAc,CAAC,OAAO;AAAA;AAG7B,eAAe,WAAW,CAC/B,WACA,SAC4B;AAAA,EAC5B,MAAM,aAAa,MAAM,kBAAkB,UAAU,YAAY,QAAQ,GAAG;AAAA,EAC5E,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,IAAI;AAAA,IACF,QAAQ,WAAW,IACjB,YACA,CAAC,GAAG,UAAU,MAAM,MAAM,YAAY,GACtC,QAAQ,KACR,QAAQ,cACV;AAAA,IACA,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC;AAAA,IACrC,OAAO,uBAAO,MAAM,KAAK,OAAO,IAAI,OAAO;AAAA,IAC3C,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIJ,eAAe,MAAM,CAAC,SAAuD;AAAA,EAClF,MAAM,aAAa,QAAQ,IAAI,eAAe;AAAA,EAC9C,MAAM,aAAa,MAAM,kBAAkB,YAAY,QAAQ,GAAG;AAAA,EAClE,MAAM,KAAK,aAAa,QAAQ,YAAY,OAAO,IAAI;AAAA,EACvD,OAAO,MAAM,uBAAO,UAAU,GAAG,SAAS,QAAQ,OAAO,IAAI,KAAK;AAAA;AAG7D,SAAS,OAAO,CACrB,YACA,SACe;AAAA,EACf,IAAI;AAAA,IACF,QAAQ,WAAW,IAAI,YAAY,CAAC,WAAW,GAAG,QAAQ,KAAK,QAAQ,cAAc;AAAA,IACrF,MAAM,UAAU,iBAAiB,OAAO,MAAM,eAAe,IAAI,EAAE;AAAA,IACnE,OAAO,UAAU,EAAE,YAAY,QAAQ,IAAI;AAAA,IAC3C,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,SAAS,gBAAgB,CAAC,OAA0C;AAAA,EAClE,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,OAAO,uBAAO,MAAM,KAAK,KAAK,uBAAO,OAAO,KAAK,GAAG,WAAW;AAAA;AAGjE,SAAS,gCAAgC,CAAC,QAA6B;AAAA,EACrE,MAAM,eAAe,OAAO,aAAa,YAAY;AAAA,EACrD,IAAI,OAAO,iBAAiB,QAAQ,SAAS,SAAS,KAAK;AAAA,IAAK,OAAO;AAAA,EACvE,IAAI,QAAQ,SAAS;AAAA,IAAO,OAAO,iBAAiB,YAAY,iBAAiB;AAAA,EACjF,IAAI,QAAQ,SAAS;AAAA,IAAS,OAAO,iBAAiB,aAAa,iBAAiB;AAAA,EACpF,IAAI,QAAQ,SAAS,QAAQ;AAAA,IAC3B,OAAO,iBAAiB,SAAS,iBAAiB,UAAU,iBAAiB;AAAA,EAC/E;AAAA,EACA,OAAO,iBAAiB,QAAQ;AAAA;;;AJ7G3B,eAAe,QAAQ,CAAC,UAAwB,CAAC,GAAoB;AAAA,EAC1E,OAAO,iBAAiB,eAAe,OAAO,CAAC;AAAA;AAO1C,eAAe,iBAAiB,CACrC,UAAwB,CAAC,GACzB,eAAkC,CAAC,GACnC,oBAA8C,CAAC,GACnB;AAAA,EAC5B,MAAM,WAAW,eAAe,OAAO;AAAA,EACvC,MAAM,aAAa,sBAAsB,YAAY;AAAA,EACrD,MAAM,aAAa,2BAA2B,iBAAiB;AAAA,EAC/D,MAAM,KAAK,MAAM,iBAAiB,QAAQ;AAAA,EAC1C,MAAM,SAAS,MAAM,iCAAiC,UAAU,EAAE;AAAA,EAClE,IAAI,WAAW,SAAS,KAAK,WAAW,OAAO,SAAS,KACpD,WAAW,OAAO,SAAS,KAAK,WAAW,WAAW;AAAA,IACxD,MAAM,2BAA2B,IAAI,QAAQ,YAAY,YAAY,QAAQ;AAAA,EAC/E;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,qBAAqB,QAAQ,QAAQ;AAAA,EAChD;AAAA;AAGF,eAAe,gCAAgC,CAC7C,SACA,IACqB;AAAA,EACrB,MAAM,WAAW,MAAM,wBAAwB,OAAO;AAAA,EACtD,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,MAAM,YAAY,4BAA4B,QAAQ,WAAW;AAAA,EACjE,MAAM,QAAQ,YAAwC;AAAA,IACpD,MAAM,YAAY,MAAM,0BAA0B,WAAW,OAAO;AAAA,IACpE,OAAO,aAAa,4BAA4B,WAAW,OAAO,KAChE,MAAM,0CAA0C,WAAW,OAAO,IAChE,YACA;AAAA;AAAA,EAEN,IAAI,CAAC,QAAQ,0BAA0B;AAAA,IACrC,MAAM,IAAI,MACR,sEACA,sBAAsB,YACxB;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAM,yBAAyB,IAAI,OAAO;AAAA,EAC7D,OAAO,qBAAqB;AAAA,IAC1B,KAAK,QAAQ,cAAc,SAAS;AAAA,IACpC,WAAW,QAAQ;AAAA,IACnB;AAAA,IACA,QAAQ,YAAY;AAAA,MAGlB,MAAM,mBAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACpD,MAAM,sBAAM,0BAAK,QAAQ,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,MACxD,MAAM,SACJ,GAAG,YACH;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF,GACA,sBAAsB,OAAO,GAC7B,QAAQ,gBACV;AAAA,MACA,MAAM,YAAY,MAAM,MAAM;AAAA,MAC9B,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,IAAI,MACR,cAAc,wEAChB;AAAA,MACF;AAAA,MACA,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA;AAGH,eAAe,uBAAuB,CACpC,SAC4B;AAAA,EAC5B,IAAI,QAAQ,QAAQ;AAAA,IAClB,MAAM,aAAa,MAAM,YAAY,EAAE,YAAY,QAAQ,QAAQ,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,IACtF,IAAI,CAAC,cAAc,CAAC,4BAA4B,YAAY,OAAO,GAAG;AAAA,MACpE,MAAM,6BAA6B,OAAO;AAAA,IAC5C;AAAA,IACA,IAAI,WAAW;AAAA,MAAoB,OAAO;AAAA,EAC5C;AAAA,EAEA,WAAW,aAAa;AAAA,IACtB,GAAG,sCAAsC,QAAQ,aAAa,QAAQ,GAAG;AAAA,IACzE,4BAA4B,QAAQ,WAAW;AAAA,EACjD,GAAG;AAAA,IACD,MAAM,OAAO,MAAM,0BAA0B,WAAW,OAAO;AAAA,IAC/D,IAAI,QAAQ,4BAA4B,MAAM,OAAO,KACjD,MAAM,0CAA0C,MAAM,OAAO,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,wBAAwB,CACrC,IACA,SACqB;AAAA,EACrB,IAAI,QAAQ,QAAQ;AAAA,IAClB,MAAM,aAAa,MAAM,YAAY,EAAE,YAAY,QAAQ,QAAQ,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,IACtF,IAAI,CAAC,cAAc,CAAC,4BAA4B,YAAY,OAAO,GAAG;AAAA,MACpE,MAAM,6BAA6B,OAAO;AAAA,IAC5C;AAAA,IACA,IAAI,CAAC,WAAW;AAAA,MAAoB,OAAO;AAAA,IAC3C,MAAM,OAAO,MAAM,YAAY,EAAE,YAAY,WAAW,gBAAgB,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,IAC3F,IAAI,QAAQ,4BAA4B,MAAM,OAAO;AAAA,MAAG,OAAO;AAAA,IAC/D,MAAM,6BAA6B,OAAO;AAAA,EAC5C;AAAA,EAIA,MAAM,SAAS,MAAM,iBAAiB,IAAI,SAAS,QAAQ;AAAA,EAC3D,IAAI;AAAA,IAAQ,OAAO;AAAA,EACnB,MAAM,gBAAgB,MAAM,iBAAiB,IAAI,SAAS,SAAS;AAAA,EACnE,IAAI;AAAA,IAAe,OAAO;AAAA,EAC1B,IAAI,CAAC,QAAQ,eAAe;AAAA,IAC1B,MAAM,IAAI,MAAM,qBAAqB,SAAS,yCAAyC,CAAC;AAAA,EAC1F;AAAA,EAEA,OAAO,qBAAqB;AAAA,IAC1B,KAAK,UAAU,cAAc,0BAAK,KAAK,QAAQ,UAAU,QAAQ,CAAC;AAAA,IAClE,WAAW,QAAQ;AAAA,IACnB,OAAO,MAAM,iBAAiB,IAAI,SAAS,SAAS;AAAA,IACpD,QAAQ,YAAY;AAAA,MAClB,MAAM,SACJ,GAAG,YACH,CAAC,UAAU,WAAW,eAAe,QAAQ,aAAa,GAC1D,sBAAsB,OAAO,GAC7B,QAAQ,gBACV;AAAA,MACA,MAAM,YAAY,MAAM,iBAAiB,IAAI,SAAS,SAAS;AAAA,MAC/D,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,IAAI,MAAM,qBACd,SACA,gBAAgB,QAAQ,4CAC1B,CAAC;AAAA,MACH;AAAA,MACA,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA;AAGH,eAAe,gBAAgB,CAC7B,IACA,SACA,QAC4B;AAAA,EAC5B,WAAW,WAAW,CAAC,IAAI,QAAQ,aAAa,GAAG;AAAA,IACjD,MAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,WAAW,aAAa;AAAA,IACrC;AAAA,IACA,IAAI;AAAA,MAAS,KAAK,KAAK,OAAO;AAAA,IAC9B,IAAI;AAAA,MACF,QAAQ,WAAW,MAAM,SACvB,GAAG,YACH,MACA,gCAAgC,OAAO,GACvC,QAAQ,cACV;AAAA,MACA,MAAM,OAAO,MAAM,YAAY,EAAE,YAAY,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,MAC/E,IAAI,QAAQ,4BAA4B,MAAM,OAAO;AAAA,QAAG,OAAO;AAAA,MAC/D,MAAM;AAAA,EAGV;AAAA,EAMA,IAAI;AAAA,IACF,QAAQ,WAAW,MAAM,SACvB,GAAG,YACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,WAAW,wBAAwB;AAAA,IAChD,GACA,gCAAgC,OAAO,GACvC,QAAQ,cACV;AAAA,IACA,MAAM,aAAa,qBAAqB,MAAM;AAAA,IAC9C,WAAW,cAAc,YAAY;AAAA,MACnC,MAAM,OAAO,MAAM,YAAY,EAAE,YAAY,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,MAChE,IAAI,QAAQ,CAAC,KAAK,sBAAsB,4BAA4B,MAAM,OAAO,GAAG;AAAA,QAClF,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EAGR,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAAC,QAA0B;AAAA,EACtD,MAAM,SAAS,KAAK,MAAM,MAAM;AAAA,EAChC,IAAI,CAAC,MAAM,QAAQ,MAAM;AAAA,IAAG,OAAO,CAAC;AAAA,EACpC,MAAM,QAAQ,OAAO,QAAQ,CAAC,UAAU;AAAA,IACtC,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,UAAU;AAAA,MAAQ,OAAO,CAAC;AAAA,IACvE,MAAM,YAAa,MAA6B;AAAA,IAChD,OAAO,OAAO,cAAc,YAAY,YAAY,CAAC,SAAS,IAAI,CAAC;AAAA,GACpE;AAAA,EACD,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,SAAS,GAAG,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA;AAG9F,eAAe,yBAAyB,CACtC,WACA,SAC4B;AAAA,EAC5B,MAAM,aAAa,mCAAmC,SAAS;AAAA,EAC/D,MAAM,OAAO,MAAM,YAAY,EAAE,YAAY,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,EAChE,OAAO,MAAM,sBAAsB,WAAW,KAAK,oBAAoB,SAAS,IAAI,OAAO;AAAA;AAG7F,eAAe,0BAA0B,CACvC,IACA,QACA,cACA,mBACA,SACe;AAAA,EACf,IAAI,CAAC,OAAO,oBAAoB;AAAA,IAC9B,MAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AAAA,EACA,MAAM,qBAAqB;AAAA,IACzB,KAAK,gBAAgB,cAAc,OAAO,kBAAkB;AAAA,IAC5D,WAAW,QAAQ;AAAA,IACnB,OAAO,YAAY;AAAA,IACnB,QAAQ,YAAY;AAAA,MAClB,MAAM,YAAY,MAAM,wBAAQ,0BAAK,KAAK,uBAAG,OAAO,GAAG,qBAAqB,CAAC;AAAA,MAC7E,IAAI;AAAA,QACF,MAAM,YAAY,0BAAK,KAAK,WAAW,0BAA0B;AAAA,QACjE,MAAM,WAAW,0BAAK,KAAK,WAAW,2BAA2B;AAAA,QACjE,MAAM,YAAY,0BAAK,KAAK,QAAQ,aAAa,gBAAgB;AAAA,QACjE,MAAM,eAAe,wBAAG,WAAW,SAAS;AAAA,QAC5C,IAAI,CAAC,iBACH,kBAAkB,OAAO,SAAS,KAClC,kBAAkB,OAAO,SAAS,KAClC,kBAAkB,YACjB;AAAA,UACD,MAAM,IAAI,MAAM,+DAA+D;AAAA,QACjF;AAAA,QACA,MAAM,UAAU,eAAe,CAAC,SAAS,IAAI,CAAC;AAAA,QAC9C,IAAI,aAAa,SAAS,GAAG;AAAA,UAC3B,MAAM,0BAAU,WAAW,GAAG,aAAa,KAAK;AAAA,CAAI;AAAA,GAAO,MAAM;AAAA,UACjE,QAAQ,KAAK,SAAS;AAAA,QACxB;AAAA,QACA,MAAM,gBAAgB;AAAA,UACpB,GAAG,kBAAkB,OAAO,QAAQ,CAAC,UAAU,CAAC,WAAW,KAAK,CAAC;AAAA,UACjE,GAAG,kBAAkB,OAAO,QAAQ,CAAC,UAAU,CAAC,WAAW,KAAK,CAAC;AAAA,UACjE,GAAI,kBAAkB,YAAY,CAAC,cAAc,IAAI,CAAC;AAAA,QACxD;AAAA,QACA,MAAM,SACJ,GAAG,YACH;AAAA,UACE;AAAA,UAAO;AAAA,UAAW;AAAA,UAAe;AAAA,UAAY,OAAO;AAAA,UAAY,GAAG;AAAA,UACnE,GAAG;AAAA,UAAS;AAAA,UAAiB;AAAA,QAC/B,GACA,oBAAoB,SAAS,MAAM,GACnC,QAAQ,kBACR,WACA,QAAQ,WACV;AAAA,QAGA,MAAM,SACJ,GAAG,YACH,CAAC,OAAO,WAAW,eAAe,YAAY,OAAO,YAAY,MAAM,QAAQ,GAC/E,oBAAoB,SAAS,MAAM,GACnC,QAAQ,kBACR,WACA,QAAQ,WACV;AAAA,QACA,QAAQ;AAAA,QACR,MAAM,mBAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA;AAAA,MAEtD,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA;AAGH,eAAe,gBAAgB,CAAC,SAAgD;AAAA,EAC9E,MAAM,WAAW,MAAM,gBAAgB,OAAO;AAAA,EAC9C,IAAI;AAAA,IAAU,OAAO;AAAA,EACrB,IAAI,CAAC,QAAQ,WAAW;AAAA,IACtB,MAAM,IAAI,MACR,0CAA0C,QAAQ,4CACpD;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,mBAAmB,OAAO;AAAA,EAC7C,MAAM,aAAa,aAAa,OAAO;AAAA,EACvC,OAAO,qBAAqB;AAAA,IAC1B,KAAK,MAAM,cAAc,UAAU;AAAA,IACnC,WAAW,QAAQ;AAAA,IACnB,OAAO,MAAM,gBAAgB,OAAO;AAAA,IACpC,QAAQ,YAAY;AAAA,MAClB,MAAM,UAAU,YAAY,OAAO;AAAA,MACnC,MAAM,SAAS,QAAQ,YAAY,OAAO;AAAA,MAC1C,IAAI,CAAC,UAAU,OAAO,YAAY,QAAQ,WAAW;AAAA,QACnD,MAAM,IAAI,MACR,uBAAuB,QAAQ,wDACjC;AAAA,MACF;AAAA,MACA,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA;AAGH,eAAe,eAAe,CAAC,SAAuD;AAAA,EACpF,MAAM,WAAW,MAAM,OAAO,OAAO;AAAA,EACrC,IAAI;AAAA,IAAU,OAAO;AAAA,EACrB,MAAM,UAAU,QAAQ,aAAa,OAAO,GAAG,OAAO;AAAA,EACtD,OAAO,SAAS,YAAY,QAAQ,YAAY,UAAU;AAAA;AAG5D,SAAS,qBAAqB,CAAC,cAA2C;AAAA,EACxE,MAAM,aAAa,aAAa,IAAI,CAAC,gBAAgB,YAAY,KAAK,CAAC;AAAA,EACvE,WAAW,eAAe,YAAY;AAAA,IACpC,IAAI,CAAC,eAAe,YAAY,KAAK,WAAW,GAAG;AAAA,MACjD,MAAM,IAAI,UAAU,gCAAgC,KAAK,UAAU,WAAW,GAAG;AAAA,IACnF;AAAA,EACF;AAAA,EACA,OAAO,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAAA;AAGhC,SAAS,0BAA0B,CACjC,SACoC;AAAA,EACpC,MAAM,SAAS,eAAe,SAAS,QAAQ,UAAU,CAAC,CAAC;AAAA,EAC3D,MAAM,SAAS,eAAe,oBAAoB,QAAQ,UAAU,CAAC,CAAC;AAAA,EACtE,IAAI,QAAQ,aAAa,OAAO,SAAS,GAAG;AAAA,IAC1C,MAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AAAA,EACA,OAAO,EAAE,QAAQ,QAAQ,WAAW,QAAQ,aAAa,MAAM;AAAA;AAGjE,SAAS,cAAc,CAAC,MAAc,OAAoC;AAAA,EACxE,MAAM,aAAa,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAAA,EAClD,WAAW,QAAQ,YAAY;AAAA,IAC7B,IAAI,CAAC,QAAQ,CAAC,gCAAgC,KAAK,IAAI,GAAG;AAAA,MACxD,MAAM,IAAI,UAAU,WAAW,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,IAChE;AAAA,EACF;AAAA,EACA,OAAO,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAAA;AAGhC,SAAS,oBAAoB,CAC3B,QACA,SACS;AAAA,EACT,OAAO,QAAQ,OAAO,kBAAkB,KAAK,WAC3C,OAAO,oBACP,4BAA4B,QAAQ,WAAW,CACjD;AAAA;AAGF,SAAS,qBAAqB,CAAC,SAAkD;AAAA,EAC/E,OAAO,sBAAsB,cAAc,OAAO,CAAC;AAAA;AAIrD,SAAS,+BAA+B,CACtC,SACmB;AAAA,EACnB,MAAM,MAAM,sBAAsB,OAAO;AAAA,EACzC,OAAO,IAAI;AAAA,EACX,OAAO;AAAA;AAGT,SAAS,mBAAmB,CAC1B,SACA,QACmB;AAAA,EACnB,OAAO,qBAAqB,cAAc,OAAO,GAAG,MAAM;AAAA;AAG5D,SAAS,4BAA4B,CAAC,SAAsC;AAAA,EAC1E,OAAO,IAAI,MACT,qBAAqB,QAAQ,+CAC7B,GAAG,QAAQ,cAAc,QAAQ,mBAAmB,kCAAkC,KACxF;AAAA;AAGF,SAAS,oBAAoB,CAAC,SAA+B,QAAwB;AAAA,EACnF,MAAM,YAAY,QAAQ,mBACtB,yEACA;AAAA,EACJ,OAAO,uBAAuB,QAAQ,cAAc,cAAc;AAAA;AAGpE,eAAe,yCAAyC,CACtD,oBACA,SACkB;AAAA,EAClB,IAAI,CAAC,QAAQ;AAAA,IAAQ,OAAO;AAAA,EAC5B,MAAM,aAAa,MAAM,YAAY,EAAE,YAAY,QAAQ,QAAQ,MAAM,CAAC,EAAE,GAAG,OAAO;AAAA,EACtF,IAAI,CAAC,cAAc,CAAC,4BAA4B,YAAY,OAAO;AAAA,IAAG,OAAO;AAAA,EAC7E,IAAI,WAAW,sBAAsB,WAAW,WAAW,YAAY,mBAAmB,UAAU,GAAG;AAAA,IACrG,OAAO;AAAA,EACT;AAAA,EACA,MAAM,iBAAiB,WAAW,qBAC9B,WAAW,iBACX,WAAW;AAAA,EACf,OAAO,WAAW,gBAAgB,mBAAmB,cAAc;AAAA;AAGrE,SAAS,kBAAkB,CAAC,SAAuC;AAAA,EACjE,OAAO,0BAAK,KAAK,QAAQ,UAAU,SAAS,MAAM,QAAQ,SAAS;AAAA;AAGrE,SAAS,YAAY,CAAC,SAAuC;AAAA,EAC3D,OAAO,0BAAK,KAAK,mBAAmB,OAAO,GAAG,QAAQ,aAAa,UAAU,WAAW,IAAI;AAAA;AAG9F,eAAe,SAAS,CACtB,YACA,SACe;AAAA,EACf,MAAM,QAAQ,QAAQ;AAAA,EACtB,MAAM,UAAU,qDAAqD,QAAQ;AAAA,EAC7E,MAAM,YAAY,MAAM,wBAAQ,0BAAK,KAAK,uBAAG,OAAO,GAAG,WAAW,CAAC;AAAA,EACnE,MAAM,aAAa,gBAAgB,QAAQ,GAAG;AAAA,EAC9C,IAAI;AAAA,IACF,MAAM,UAAU,0BAAK,KAAK,WAAW,KAAK;AAAA,IAC1C,MAAM,SAAS,GAAG,WAAW,SAAS,SAAS,QAAQ,mBAAmB,UAAU;AAAA,IACpF,MAAM,YAAY,MAAM,aACtB,GAAG,WAAW,gBACd,QAAQ,mBACR,UACF,GAAG,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IACxB,MAAM,SAAS,MAAM,WAAW,OAAO;AAAA,IACvC,IAAI,CAAC,YAAY,SAAS,YAAY,MAAM,OAAO,YAAY,GAAG;AAAA,MAChE,MAAM,IAAI,MAAM,oCAAoC,OAAO;AAAA,IAC7D;AAAA,IAEA,MAAM,YAAY,0BAAK,KAAK,WAAW,WAAW;AAAA,IAClD,MAAM,sBAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC1C,IAAI,MAAM,SAAS,MAAM;AAAA,MAAG,MAAM,2BAAW,SAAS,EAAE,KAAK,UAAU,CAAC;AAAA,IACxE;AAAA,MAAK,MAAU,MAAE,EAAE,MAAM,SAAS,KAAK,WAAW,QAAQ,KAAK,CAAC;AAAA,IAChE,MAAM,SAAS,MAAM,SAAS,WAAW,QAAQ,aAAa,UAAU,WAAW,IAAI;AAAA,IACvF,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,MAAM,uDAAuD,OAAO;AAAA,IAC3F,MAAM,oBAAoB,QAAQ,YAAY,OAAO;AAAA,IACrD,QAAQ;AAAA,IACR,MAAM,YAAY,MAAM;AAAA,IACxB,MAAM,mBAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA;AAAA;AAIxD,eAAe,mBAAmB,CAChC,QACA,YACA,SACe;AAAA,EACf,MAAM,sBAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,EAC3C,MAAM,aAAa,aAAa,OAAO;AAAA,EACvC,MAAM,SAAS,0BAAK,KAClB,YACA,IAAI,0BAAK,SAAS,UAAU,KAAK,QAAQ,OAAO,8BAAW,OAC7D;AAAA,EACA,IAAI;AAAA,IACF,MAAM,yBAAS,QAAQ,MAAM;AAAA,IAC7B,IAAI,QAAQ,aAAa;AAAA,MAAS,MAAM,sBAAM,QAAQ,GAAK;AAAA,IAC3D,MAAM,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxC,IAAI,CAAC,YAAY,SAAS,YAAY,QAAQ,WAAW;AAAA,MACvD,MAAM,IAAI,MAAM,2CAA2C,QAAQ,YAAY;AAAA,IACjF;AAAA,IACA,IAAI,QAAQ,aAAa;AAAA,MAAS,MAAM,mBAAG,YAAY,EAAE,OAAO,KAAK,CAAC;AAAA,IACtE,MAAM,uBAAO,QAAQ,UAAU;AAAA,IAC/B,QAAQ;AAAA,IACR,MAAM,mBAAG,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA;AAAA;AAIpC,SAAS,OAAO,GAAW;AAAA,EACzB,MAAM,eAAe,QAAQ,SAAS,QAClC,WACA,QAAQ,SAAS,UACf,YACA;AAAA,EACN,IAAI,CAAC;AAAA,IAAc,MAAM,IAAI,MAAM,8CAA8C,QAAQ,OAAO;AAAA,EAChG,IAAI,QAAQ,aAAa;AAAA,IAAS,OAAO,MAAM;AAAA,EAC/C,IAAI,QAAQ,aAAa;AAAA,IAAU,OAAO,MAAM;AAAA,EAChD,IAAI,QAAQ,aAAa;AAAA,IAAS,OAAO,MAAM;AAAA,EAC/C,MAAM,IAAI,MAAM,0CAA0C,QAAQ,WAAW;AAAA;AAG/E,eAAe,QAAQ,CACrB,KACA,aACA,WACA,YACe;AAAA,EACf,MAAM,WAAW,MAAM,oBAAM,KAAK;AAAA,IAChC;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,YAAY,QAAQ,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,IAAI,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM;AAAA,IAClC,MAAM,SAAS,MAAM,OAAO;AAAA,IAC5B,MAAM,IAAI,MAAM,sBAAsB,aAAa,SAAS,QAAQ;AAAA,EACtE;AAAA,EACA,MAAM,0BACJ,4BAAS,QAAQ,SAAS,IAAI,GAC9B,kCAAkB,aAAa,EAAE,OAAO,KAAK,CAAC,CAChD;AAAA;AAGF,eAAe,YAAY,CACzB,KACA,WACA,YACiB;AAAA,EACjB,MAAM,WAAW,MAAM,oBAAM,KAAK;AAAA,IAChC;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,YAAY,QAAQ,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,SAAS,MAAM,OAAO;AAAA,IAC5B,MAAM,IAAI,MAAM,sBAAsB,aAAa,SAAS,QAAQ;AAAA,EACtE;AAAA,EACA,OAAO,SAAS,KAAK;AAAA;AAGvB,SAAS,eAAe,CAAC,KAAuD;AAAA,EAC9E,MAAM,YAAY,iBAAiB,KAAK,cAAc,YAAY;AAAA,EAClE,MAAM,aAAa,iBAAiB,KAAK,eAAe,aAAa;AAAA,EACrE,IAAI,CAAC,aAAa,CAAC;AAAA,IAAY;AAAA,EAC/B,OAAO,IAAI,gCAAkB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,SAAS,iBAAiB,KAAK,YAAY,UAAU;AAAA,EACvD,CAAC;AAAA;AAGH,SAAS,gBAAgB,CACvB,KACA,WACA,WACoB;AAAA,EACpB,OAAO,IAAI,cAAc,IAAI;AAAA;AAG/B,eAAe,UAAU,CAAC,MAA+B;AAAA,EACvD,MAAM,OAAO,8BAAW,QAAQ;AAAA,EAChC,iBAAiB,SAAS,iCAAiB,IAAI;AAAA,IAAG,KAAK,OAAO,KAAK;AAAA,EACnE,OAAO,KAAK,OAAO,KAAK;AAAA;AAG1B,eAAe,QAAQ,CAAC,WAAmB,MAAsC;AAAA,EAC/E,WAAW,SAAS,MAAM,wBAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG;AAAA,IACrE,MAAM,SAAS,0BAAK,KAAK,WAAW,MAAM,IAAI;AAAA,IAC9C,IAAI,MAAM,OAAO,KAAK,MAAM,SAAS;AAAA,MAAM,OAAO;AAAA,IAClD,IAAI,MAAM,YAAY,GAAG;AAAA,MACvB,MAAM,SAAS,MAAM,SAAS,QAAQ,IAAI;AAAA,MAC1C,IAAI;AAAA,QAAQ,OAAO;AAAA,IACrB;AAAA,EACF;AAAA,EACA,OAAO;AAAA;;;AMjoBF,IANP;;;ACAe,IAAf;AACiB,IAAjB;AAMO,SAAS,WAAW,CAAC,MAAsB;AAAA,EAChD,MAAM,kBACF;AAAA,EAEJ,MAAM,WAAW,0BAAK,KAAK,iBAAiB,GAAG,SAAS;AAAA,EACxD,OAAO,wBAAG,WAAW,QAAQ,IAAI,WAAW,0BAAK,KAAK,iBAAiB,GAAG,SAAS;AAAA;;;ADsB9E,eAAe,OAAO,CAC3B,OAA0B,CAAC,GAC3B,eAA6B,CAAC,GAC9B,eAA6B,CAAC,GACP;AAAA,EACvB,MAAM,UAAU,qBAAqB,cAAc,aAAa,GAAG;AAAA,EACnE,MAAM,WAAW,eAAe,OAAO;AAAA,EACvC,MAAM,cAAc,0BAA0B,IAAI,IAC9C,MAAM,kBAAkB,QAAQ,IAChC;AAAA,EACJ,MAAM,KAAK,aAAa,MAAM,MAAM,SAAS,QAAQ;AAAA,EACrD,MAAM,UAAU,eAAe,IAAI,MAAM,UAAU,aAAa,MAAM;AAAA,EACtE,OAAO,iCAAM,QAAQ,YAAY,QAAQ,MAAM;AAAA,OAC1C;AAAA,IACH,KAAK,QAAQ;AAAA,EACf,CAAC;AAAA;AAII,SAAS,WAAW,CACzB,OAA0B,CAAC,GAC3B,eAAiC,CAAC,GAClC,eAA6B,CAAC,GACA;AAAA,EAC9B,MAAM,UAAU,qBAAqB,cAAc,aAAa,GAAG;AAAA,EACnE,MAAM,WAAW,eAAe,OAAO;AAAA,EACvC,MAAM,cAAc,0BAA0B,IAAI,IAC9C,qBAAqB,eAAe,QAAQ,IAC5C;AAAA,EACJ,MAAM,KAAK,aAAa,MAAM,qBAAqB,MAAM,QAAQ;AAAA,EACjE,MAAM,UAAU,eAAe,IAAI,MAAM,UAAU,aAAa,MAAM;AAAA,EACtE,OAAO,qCAAU,QAAQ,YAAY,QAAQ,MAAM;AAAA,OAC9C;AAAA,IACH,KAAK,QAAQ;AAAA,EACf,CAAC;AAAA;AAGI,SAAS,cAAc,CAC5B,IACA,MACA,SACA,QACiB;AAAA,EACjB,OAAO;AAAA,IACL,YAAY,GAAG;AAAA,IACf,MAAM,SAAS,kBAAkB,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI;AAAA,IACzD,KAAK,qBAAqB,cAAc,OAAO,GAAG,MAAM;AAAA,EAC1D;AAAA;AAGF,SAAS,oBAAoB,CAC3B,cACA,UACc;AAAA,EACd,OAAO,aAAa,YAAY,eAAe,KAAK,cAAc,KAAK,SAAS;AAAA;AAQlF,SAAS,oBAAoB,CAC3B,QACA,SAC4B;AAAA,EAC5B,MAAM,WAAW,eAAe,OAAO;AAAA,EACvC,MAAM,UAAiC,EAAE,QAAQ,SAAS,SAAS;AAAA,EACnE,MAAM,SAAS,qCAAU,QAAQ,UAAU,CAAC,YAAY,eAAe,CAAC,GAAG;AAAA,IACzE,OAAO,KAAK,UAAU,OAAO;AAAA,IAC7B,UAAU;AAAA,IACV,KAAK,SAAS;AAAA,IACd,SAAS,6BAA6B,QAAQ;AAAA,IAC9C,WAAW,IAAI,OAAO;AAAA,IACtB,aAAa;AAAA,EACf,CAAC;AAAA,EACD,IAAI,OAAO,WAAW,KAAK,OAAO,OAAO;AAAA,IACvC,MAAM,SAAS,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,WAAW,QAAQ,OAAO;AAAA,IAC/E,MAAM,IAAI,MAAM,qBAAqB,yBAAyB,QAAQ;AAAA,EACxE;AAAA,EACA,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,OAAO,MAAM;AAAA,IAC/B,OAAO,OAAO;AAAA,IACd,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACpE,MAAM,IAAI,MAAM,+BAA+B,sBAAsB,QAAQ;AAAA;AAAA;AAIjF,SAAS,4BAA4B,CAAC,SAAuC;AAAA,EAC3E,OAAO,QAAQ,wBAAwB,QAAQ,oBAC5C,IAAI,QAAQ,mBAAqB,IAAI,QAAQ,iBAAkB;AAAA;;;AP3F7D,SAAS,WAAW,CAAC,UAAwB,CAAC,GAAgB;AAAA,EACnE,MAAM,gBAA8B;AAAA,OAC/B;AAAA,IACH,KAAK,QAAQ,MAAM,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC1C;AAAA,EACA,MAAM,kBAAkB,uBAAQ,MAAM,kBAAkB,aAAa,CAAC;AAAA,EACtE,MAAM,SAAS,uBAAQ,MAAM,SAAS,aAAa,CAAC;AAAA,EACpD,OAAO;AAAA,IACL,SAAS,CAAC,eAAe,CAAC,GAAG,oBAAoB,CAAC,MAAM,aAAa,WAAW,KAC9E,CAAC,kBAAkB,cAClB,kBAAkB,QAAQ,UAAU,OAAO,MAC3C,kBAAkB,QAAQ,UAAU,OAAO,IAC1C,gBAAgB,IAChB,kBAAkB,eAAe,cAAc,iBAAiB;AAAA,IACpE,YAAY,aAAa,MAAM,gBAAgB,GAAG;AAAA,IAClD;AAAA,IACA,IAAI,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM,QAAQ,MAAM,cAAc,aAAa;AAAA,IAC/E,QAAQ,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM,YAAY,MAAM,cAAc,aAAa;AAAA,EACzF;AAAA;",
18
+ "debugId": "B84AA2037417535D64756E2164756E21",
20
19
  "names": []
21
20
  }