pyfig 0.3.0 → 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.
- package/README.md +112 -121
- package/SECURITY.md +1 -1
- package/dist/cjs/index.js +469 -871
- package/dist/cjs/index.js.map +14 -15
- package/dist/cjs/sync-resolver.js +426 -657
- package/dist/cjs/sync-resolver.js.map +12 -12
- package/dist/cli.js +5 -8
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +3 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -11
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +4 -13
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -51
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/package-target.d.ts +7 -11
- package/dist/package-target.d.ts.map +1 -1
- package/dist/package-target.js +41 -57
- package/dist/package-target.js.map +1 -1
- package/dist/probes.d.ts +0 -18
- package/dist/probes.d.ts.map +1 -1
- package/dist/probes.js +0 -70
- package/dist/probes.js.map +1 -1
- package/dist/process.d.ts +1 -1
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +2 -1
- package/dist/process.js.map +1 -1
- package/dist/project-root.d.ts +1 -1
- package/dist/project-root.d.ts.map +1 -1
- package/dist/project-root.js +3 -64
- package/dist/project-root.js.map +1 -1
- package/dist/provision-lock.d.ts +10 -0
- package/dist/provision-lock.d.ts.map +1 -0
- package/dist/provision-lock.js +24 -0
- package/dist/provision-lock.js.map +1 -0
- package/dist/provision.d.ts +18 -6
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +273 -228
- package/dist/provision.js.map +1 -1
- package/dist/runners.d.ts +3 -7
- package/dist/runners.d.ts.map +1 -1
- package/dist/runners.js +35 -115
- package/dist/runners.js.map +1 -1
- package/dist/sync-resolver.js +4 -13
- package/dist/sync-resolver.js.map +1 -1
- package/dist/virtual-environment.d.ts +3 -1
- package/dist/virtual-environment.d.ts.map +1 -1
- package/dist/virtual-environment.js +8 -1
- package/dist/virtual-environment.js.map +1 -1
- package/package.json +6 -8
- package/dist/coordination.d.ts +0 -25
- package/dist/coordination.d.ts.map +0 -1
- package/dist/coordination.js +0 -187
- package/dist/coordination.js.map +0 -1
- package/dist/state.d.ts +0 -10
- package/dist/state.d.ts.map +0 -1
- package/dist/state.js +0 -62
- package/dist/state.js.map +0 -1
package/dist/client.js
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { memoize } from 'loqkit';
|
|
2
|
+
import { ensureEnvironment, ensureUv, } from './provision.js';
|
|
3
|
+
import { uvSpawn, uvSpawnSync } from './runners.js';
|
|
4
4
|
/** Bind configuration once so consumers cannot accidentally diverge between calls. */
|
|
5
5
|
export function createPyfig(options = {}) {
|
|
6
6
|
const scopedOptions = {
|
|
7
7
|
...options,
|
|
8
8
|
env: options.env ? { ...options.env } : undefined,
|
|
9
9
|
};
|
|
10
|
+
const baseEnvironment = memoize(() => ensureEnvironment(scopedOptions));
|
|
11
|
+
const uvInfo = memoize(() => ensureUv(scopedOptions));
|
|
10
12
|
return {
|
|
11
|
-
prepare: () =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
prepare: (requirements = [], dependencyOptions = {}) => requirements.length === 0 &&
|
|
14
|
+
!dependencyOptions.allExtras &&
|
|
15
|
+
(dependencyOptions.extras?.length ?? 0) === 0 &&
|
|
16
|
+
(dependencyOptions.groups?.length ?? 0) === 0
|
|
17
|
+
? baseEnvironment()
|
|
18
|
+
: ensureEnvironment(scopedOptions, requirements, dependencyOptions),
|
|
19
|
+
pythonInfo: async () => (await baseEnvironment()).python,
|
|
20
|
+
uvInfo,
|
|
18
21
|
uv: (args = [], spawnOptions = {}) => uvSpawn(args, spawnOptions, scopedOptions),
|
|
19
22
|
uvSync: (args = [], spawnOptions = {}) => uvSpawnSync(args, spawnOptions, scopedOptions),
|
|
20
|
-
clearCache: clearPyfigCaches,
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC,OAAO,EACL,iBAAiB,EACjB,QAAQ,GAGT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAiBpD,sFAAsF;AACtF,MAAM,UAAU,WAAW,CAAC,OAAO,GAAiB,EAAE;IACpD,MAAM,aAAa,GAAiB;QAClC,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;KAClD,CAAC;IACF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACtD,OAAO;QACL,OAAO,EAAE,CAAC,YAAY,GAAG,EAAE,EAAE,iBAAiB,GAAG,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAC/E,CAAC,iBAAiB,CAAC,SAAS;YAC5B,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;YAC7C,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;YAC7C,CAAC,CAAC,eAAe,EAAE;YACnB,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,iBAAiB,CAAC;QACrE,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,MAAM;QACxD,MAAM;QACN,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC;QAChF,MAAM,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC;KACzF,CAAC;AACJ,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
export declare const DEFAULT_PYTHON_RANGE = ">=3.10.0 <4.0.0";
|
|
2
|
-
export declare const DEFAULT_PIP_RANGE = ">=20.3.0";
|
|
3
2
|
export declare const DEFAULT_MANAGED_PYTHON = "3.12";
|
|
4
3
|
export declare const DEFAULT_UV_VERSION = "0.13.6";
|
|
5
|
-
export declare const DEFAULT_UV_RANGE = ">=0.
|
|
4
|
+
export declare const DEFAULT_UV_RANGE = ">=0.10.0 <1.0.0";
|
|
6
5
|
export interface PyfigOptions {
|
|
7
6
|
/** Exact interpreter path that an existing or newly created venv must derive from. */
|
|
8
7
|
python?: string;
|
|
9
8
|
/** Accepted Python language-version range. */
|
|
10
9
|
pythonRange?: string;
|
|
11
|
-
/** Accepted python -m pip version when uv installation is disabled. */
|
|
12
|
-
pipRange?: string;
|
|
13
10
|
/** uv Python request used only when no compatible interpreter exists. */
|
|
14
11
|
managedPython?: string;
|
|
15
12
|
/** Exact uv release installed into Pyfig's private cache. */
|
|
@@ -26,11 +23,11 @@ export interface PyfigOptions {
|
|
|
26
23
|
installPython?: boolean;
|
|
27
24
|
/** Allow Pyfig to install its pinned, checksum-verified uv executable. */
|
|
28
25
|
installUv?: boolean;
|
|
29
|
-
/** Allow creation of
|
|
26
|
+
/** Allow creation of Pyfig's private environment under node_modules. */
|
|
30
27
|
createVirtualEnvironment?: boolean;
|
|
31
28
|
/** Private cache root for uv, managed Python, downloads, and coordination. */
|
|
32
29
|
cacheDir?: string;
|
|
33
|
-
/** Repository root that owns
|
|
30
|
+
/** Repository root that owns node_modules/.pyfig. */
|
|
34
31
|
projectRoot?: string;
|
|
35
32
|
/** Maximum duration of one executable capability probe. */
|
|
36
33
|
probeTimeoutMs?: number;
|
|
@@ -40,15 +37,12 @@ export interface PyfigOptions {
|
|
|
40
37
|
downloadTimeoutMs?: number;
|
|
41
38
|
/** Maximum wait for another worker or process provisioning the same resource. */
|
|
42
39
|
coordinationTimeoutMs?: number;
|
|
43
|
-
/** Lifetime of validated realm-local resolution results; zero disables completed caching. */
|
|
44
|
-
cacheTtlMs?: number;
|
|
45
40
|
/** Complete child environment and configuration source for this invocation. */
|
|
46
41
|
env?: NodeJS.ProcessEnv;
|
|
47
42
|
}
|
|
48
43
|
export interface ResolvedPyfigOptions {
|
|
49
44
|
python: string;
|
|
50
45
|
pythonRange: string;
|
|
51
|
-
pipRange: string;
|
|
52
46
|
managedPython: string;
|
|
53
47
|
uvVersion: string;
|
|
54
48
|
uvRange: string;
|
|
@@ -64,12 +58,9 @@ export interface ResolvedPyfigOptions {
|
|
|
64
58
|
installTimeoutMs: number;
|
|
65
59
|
downloadTimeoutMs: number;
|
|
66
60
|
coordinationTimeoutMs: number;
|
|
67
|
-
cacheTtlMs: number;
|
|
68
61
|
env: NodeJS.ProcessEnv;
|
|
69
62
|
}
|
|
70
63
|
export declare function resolveOptions(options?: PyfigOptions): ResolvedPyfigOptions;
|
|
71
|
-
/**
|
|
72
|
-
export declare function configurationFingerprint(options: ResolvedPyfigOptions): string;
|
|
73
|
-
/** Keep uv-managed Python and cache data inside pyfig's configured cache root. */
|
|
64
|
+
/** Keep uv data private while preferring a compatible system interpreter. */
|
|
74
65
|
export declare function uvEnvironment(options: ResolvedPyfigOptions): NodeJS.ProcessEnv;
|
|
75
66
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAG3C,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAkBlD,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB,EAAE,OAAO,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,YAAiB,GAAG,oBAAoB,CAsE/E;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAQ9E"}
|
package/dist/config.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
1
|
import path from 'node:path';
|
|
3
2
|
import * as envPaths from 'env-paths';
|
|
4
3
|
import semver from 'semver';
|
|
5
4
|
import { resolveProjectRoot } from './project-root.js';
|
|
6
5
|
export const DEFAULT_PYTHON_RANGE = '>=3.10.0 <4.0.0';
|
|
7
|
-
export const DEFAULT_PIP_RANGE = '>=20.3.0';
|
|
8
6
|
export const DEFAULT_MANAGED_PYTHON = '3.12';
|
|
9
7
|
export const DEFAULT_UV_VERSION = '0.13.6';
|
|
10
|
-
|
|
8
|
+
// External uv only needs to support the command and isolation flags Pyfig uses.
|
|
9
|
+
// Keep that compatibility floor separate from the newer version Pyfig installs.
|
|
10
|
+
export const DEFAULT_UV_RANGE = '>=0.10.0 <1.0.0';
|
|
11
11
|
const DEFAULT_PROBE_TIMEOUT_MS = 10_000;
|
|
12
12
|
const DEFAULT_INSTALL_TIMEOUT_MS = 10 * 60_000;
|
|
13
13
|
const DEFAULT_DOWNLOAD_TIMEOUT_MS = 5 * 60_000;
|
|
14
|
-
const DEFAULT_CACHE_TTL_MS = 30_000;
|
|
15
14
|
// Bun's CommonJS bundler wraps an external ESM default one level deeper than
|
|
16
15
|
// Node.js. Normalize that boundary once instead of leaking runtime checks into
|
|
17
16
|
// configuration resolution.
|
|
@@ -27,10 +26,8 @@ export function resolveOptions(options = {}) {
|
|
|
27
26
|
// mutating process.env or a reused options object after resolution.
|
|
28
27
|
const env = { ...(options.env ?? process.env) };
|
|
29
28
|
const pythonRange = options.pythonRange ?? env['PYFIG_PYTHON_RANGE'] ?? DEFAULT_PYTHON_RANGE;
|
|
30
|
-
const pipRange = options.pipRange ?? env['PYFIG_PIP_RANGE'] ?? DEFAULT_PIP_RANGE;
|
|
31
29
|
const uvRange = options.uvRange ?? env['PYFIG_UV_RANGE'] ?? DEFAULT_UV_RANGE;
|
|
32
30
|
assertRange('Python', pythonRange);
|
|
33
|
-
assertRange('pip', pipRange);
|
|
34
31
|
assertRange('uv', uvRange);
|
|
35
32
|
const managedPython = options.managedPython ??
|
|
36
33
|
env['PYFIG_MANAGED_PYTHON'] ?? DEFAULT_MANAGED_PYTHON;
|
|
@@ -41,7 +38,6 @@ export function resolveOptions(options = {}) {
|
|
|
41
38
|
const installTimeoutMs = resolveDuration('installTimeoutMs', options.installTimeoutMs, env['PYFIG_INSTALL_TIMEOUT_MS'], DEFAULT_INSTALL_TIMEOUT_MS);
|
|
42
39
|
const downloadTimeoutMs = resolveDuration('downloadTimeoutMs', options.downloadTimeoutMs, env['PYFIG_DOWNLOAD_TIMEOUT_MS'], DEFAULT_DOWNLOAD_TIMEOUT_MS);
|
|
43
40
|
const coordinationTimeoutMs = resolveDuration('coordinationTimeoutMs', options.coordinationTimeoutMs, env['PYFIG_COORDINATION_TIMEOUT_MS'], installTimeoutMs + downloadTimeoutMs + 60_000);
|
|
44
|
-
const cacheTtlMs = resolveDuration('cacheTtlMs', options.cacheTtlMs, env['PYFIG_CACHE_TTL_MS'], DEFAULT_CACHE_TTL_MS, true);
|
|
45
41
|
const configuredHome = options.cacheDir ?? env['PYFIG_HOME'];
|
|
46
42
|
const cacheDir = configuredHome
|
|
47
43
|
? path.resolve(configuredHome)
|
|
@@ -49,12 +45,11 @@ export function resolveOptions(options = {}) {
|
|
|
49
45
|
const configuredProjectRoot = options.projectRoot ?? env['PYFIG_PROJECT_ROOT'];
|
|
50
46
|
const projectRoot = configuredProjectRoot
|
|
51
47
|
? path.resolve(configuredProjectRoot)
|
|
52
|
-
: resolveProjectRoot();
|
|
48
|
+
: resolveProjectRoot(env['INIT_CWD'] ?? process.cwd());
|
|
53
49
|
const autoInstall = options.autoInstall ?? parseBoolean(env['PYFIG_AUTO_INSTALL'], true);
|
|
54
50
|
return {
|
|
55
51
|
python: options.python ?? env['PYFIG_PYTHON'] ?? '',
|
|
56
52
|
pythonRange,
|
|
57
|
-
pipRange,
|
|
58
53
|
managedPython,
|
|
59
54
|
uvVersion,
|
|
60
55
|
uvRange,
|
|
@@ -71,42 +66,17 @@ export function resolveOptions(options = {}) {
|
|
|
71
66
|
installTimeoutMs,
|
|
72
67
|
downloadTimeoutMs,
|
|
73
68
|
coordinationTimeoutMs,
|
|
74
|
-
cacheTtlMs,
|
|
75
69
|
env,
|
|
76
70
|
};
|
|
77
71
|
}
|
|
78
|
-
/**
|
|
79
|
-
export function configurationFingerprint(options) {
|
|
80
|
-
const policy = [
|
|
81
|
-
normalizedPath(options.projectRoot),
|
|
82
|
-
normalizedPath(options.cacheDir),
|
|
83
|
-
options.python,
|
|
84
|
-
options.pythonRange,
|
|
85
|
-
options.pipRange,
|
|
86
|
-
options.managedPython,
|
|
87
|
-
options.uvVersion,
|
|
88
|
-
options.uvRange,
|
|
89
|
-
options.requireEmbedding,
|
|
90
|
-
options.requireGil,
|
|
91
|
-
options.autoInstall,
|
|
92
|
-
options.installPython,
|
|
93
|
-
options.installUv,
|
|
94
|
-
options.createVirtualEnvironment,
|
|
95
|
-
options.probeTimeoutMs,
|
|
96
|
-
options.installTimeoutMs,
|
|
97
|
-
options.downloadTimeoutMs,
|
|
98
|
-
options.coordinationTimeoutMs,
|
|
99
|
-
options.cacheTtlMs,
|
|
100
|
-
environmentFingerprint(options.env),
|
|
101
|
-
];
|
|
102
|
-
return createHash('sha256').update(JSON.stringify(policy)).digest('hex');
|
|
103
|
-
}
|
|
104
|
-
/** Keep uv-managed Python and cache data inside pyfig's configured cache root. */
|
|
72
|
+
/** Keep uv data private while preferring a compatible system interpreter. */
|
|
105
73
|
export function uvEnvironment(options) {
|
|
106
74
|
return {
|
|
107
75
|
...options.env,
|
|
108
76
|
UV_PYTHON_INSTALL_DIR: path.join(options.cacheDir, 'python'),
|
|
109
77
|
UV_CACHE_DIR: path.join(options.cacheDir, 'uv-cache'),
|
|
78
|
+
UV_PYTHON_PREFERENCE: 'system',
|
|
79
|
+
UV_NO_CONFIG: '1',
|
|
110
80
|
};
|
|
111
81
|
}
|
|
112
82
|
function assertRange(tool, range) {
|
|
@@ -150,18 +120,4 @@ function parseBoolean(value, fallback) {
|
|
|
150
120
|
return false;
|
|
151
121
|
throw new TypeError(`Invalid boolean value: ${value}`);
|
|
152
122
|
}
|
|
153
|
-
function environmentFingerprint(env) {
|
|
154
|
-
const entries = Object.entries(env)
|
|
155
|
-
.filter((entry) => entry[1] !== undefined)
|
|
156
|
-
.map(([key, value]) => [
|
|
157
|
-
process.platform === 'win32' ? key.toUpperCase() : key,
|
|
158
|
-
value,
|
|
159
|
-
])
|
|
160
|
-
.sort(([left], [right]) => left.localeCompare(right));
|
|
161
|
-
return createHash('sha256').update(JSON.stringify(entries)).digest('hex');
|
|
162
|
-
}
|
|
163
|
-
function normalizedPath(value) {
|
|
164
|
-
const resolved = path.resolve(value);
|
|
165
|
-
return process.platform === 'win32' ? resolved.toLowerCase() : resolved;
|
|
166
|
-
}
|
|
167
123
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
export { DEFAULT_MANAGED_PYTHON,
|
|
1
|
+
export { DEFAULT_MANAGED_PYTHON, DEFAULT_PYTHON_RANGE, DEFAULT_UV_RANGE, DEFAULT_UV_VERSION, } from './config.js';
|
|
2
2
|
export type { PyfigOptions } from './config.js';
|
|
3
3
|
export { createPyfig } from './client.js';
|
|
4
4
|
export type { PyfigClient } from './client.js';
|
|
5
5
|
export { resolveProjectRoot } from './project-root.js';
|
|
6
|
-
export type {
|
|
7
|
-
export { ensureEnvironment, ensureUv,
|
|
8
|
-
export type { PythonEnvironment } from './provision.js';
|
|
9
|
-
export {
|
|
10
|
-
export { clearPyfigCaches } from './state.js';
|
|
6
|
+
export type { PythonEmbeddingInfo, PythonInfo, UvInfo, } from './probes.js';
|
|
7
|
+
export { ensureEnvironment, ensureUv, } from './provision.js';
|
|
8
|
+
export type { PythonEnvironment, RuntimeDependencyOptions } from './provision.js';
|
|
9
|
+
export { uvSpawn, uvSpawnSync, } from './runners.js';
|
|
11
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,MAAM,GACP,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EACL,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export { DEFAULT_MANAGED_PYTHON,
|
|
1
|
+
export { DEFAULT_MANAGED_PYTHON, DEFAULT_PYTHON_RANGE, DEFAULT_UV_RANGE, DEFAULT_UV_VERSION, } from './config.js';
|
|
2
2
|
export { createPyfig } from './client.js';
|
|
3
3
|
export { resolveProjectRoot } from './project-root.js';
|
|
4
|
-
export { ensureEnvironment, ensureUv,
|
|
5
|
-
export {
|
|
6
|
-
export { clearPyfigCaches } from './state.js';
|
|
4
|
+
export { ensureEnvironment, ensureUv, } from './provision.js';
|
|
5
|
+
export { uvSpawn, uvSpawnSync, } from './runners.js';
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAMvD,OAAO,EACL,iBAAiB,EACjB,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC"}
|
package/dist/package-target.d.ts
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
6
|
-
/**
|
|
7
|
-
export declare function
|
|
8
|
-
/** Package installation and removal must use uv so its target-environment lock is authoritative. */
|
|
9
|
-
export declare function assertMutationUsesUv(packageManager: PackageManagerInfo, args: readonly string[]): void;
|
|
10
|
-
export declare function isPackageMutation(args: readonly string[]): boolean;
|
|
11
|
-
export declare function isUvPipCommand(args: readonly string[]): boolean;
|
|
1
|
+
import type { PythonInfo } from './probes.js';
|
|
2
|
+
export declare function uvCommandNeedsEnvironment(args: readonly string[]): boolean;
|
|
3
|
+
/** Pin uv pip and uv run to the environment selected by Pyfig. */
|
|
4
|
+
export declare function targetUvArguments(args: readonly string[], python: PythonInfo): string[];
|
|
5
|
+
export declare function uvCommandEnvironment(env: NodeJS.ProcessEnv, python?: PythonInfo): NodeJS.ProcessEnv;
|
|
6
|
+
/** Remove inherited values that could redirect uv away from an explicit target. */
|
|
7
|
+
export declare function sanitizeUvEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
12
8
|
//# sourceMappingURL=package-target.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-target.d.ts","sourceRoot":"","sources":["../src/package-target.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-target.d.ts","sourceRoot":"","sources":["../src/package-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoC9C,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE1E;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,UAAU,GACjB,MAAM,EAAE,CAYV;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,CAAC,EAAE,UAAU,GAClB,MAAM,CAAC,UAAU,CAWnB;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAM/E"}
|
package/dist/package-target.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import os from 'node:os';
|
|
2
1
|
import { activateVirtualEnvironment } from './virtual-environment.js';
|
|
3
|
-
const
|
|
2
|
+
const TARGET_OPTIONS = new Set([
|
|
3
|
+
'--active',
|
|
4
4
|
'--config-file',
|
|
5
|
+
'--directory',
|
|
6
|
+
'--isolated',
|
|
5
7
|
'--prefix',
|
|
8
|
+
'--project',
|
|
6
9
|
'--python',
|
|
7
10
|
'--root',
|
|
8
11
|
'--system',
|
|
9
12
|
'--target',
|
|
10
13
|
'--user',
|
|
11
14
|
]);
|
|
12
|
-
const TARGET_CHANGING_SHORT_OPTIONS = new Set(['-p', '-t']);
|
|
13
15
|
const TARGET_ENVIRONMENT_VARIABLES = new Set([
|
|
14
16
|
'CONDA_PREFIX',
|
|
15
|
-
'PIP_CONFIG_FILE',
|
|
16
17
|
'PIP_PREFIX',
|
|
17
18
|
'PIP_PYTHON',
|
|
18
19
|
'PIP_ROOT',
|
|
@@ -21,72 +22,42 @@ const TARGET_ENVIRONMENT_VARIABLES = new Set([
|
|
|
21
22
|
'PYTHONHOME',
|
|
22
23
|
'PYTHONUSERBASE',
|
|
23
24
|
'UV_CONFIG_FILE',
|
|
25
|
+
'UV_PROJECT',
|
|
24
26
|
'UV_PROJECT_ENVIRONMENT',
|
|
25
|
-
'UV_PREFIX',
|
|
26
27
|
'UV_PYTHON',
|
|
28
|
+
'UV_PREFIX',
|
|
27
29
|
'UV_ROOT',
|
|
28
30
|
'UV_SYSTEM_PYTHON',
|
|
29
31
|
'UV_TARGET',
|
|
30
32
|
]);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
for (const argument of args) {
|
|
34
|
-
if (argument === '--')
|
|
35
|
-
break;
|
|
36
|
-
const [name] = argument.split('=', 1);
|
|
37
|
-
if (name && TARGET_CHANGING_OPTIONS.has(name)) {
|
|
38
|
-
throw new Error(`${name} is not allowed because Pyfig package commands are pinned to the repository .venv.`);
|
|
39
|
-
}
|
|
40
|
-
const shortName = argument.slice(0, 2);
|
|
41
|
-
if (TARGET_CHANGING_SHORT_OPTIONS.has(shortName)) {
|
|
42
|
-
throw new Error(`${shortName} is not allowed because Pyfig package commands are pinned to the repository .venv.`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/** Build a package-manager environment whose target cannot be inherited or configured elsewhere. */
|
|
47
|
-
export function packageManagerEnvironment(env, packageManager) {
|
|
48
|
-
const active = sanitizedTargetEnvironment(env);
|
|
49
|
-
const activated = activateVirtualEnvironment(active, packageManager.virtualEnvironment, packageManager.pythonExecutable);
|
|
50
|
-
return packageManager.kind === 'uv'
|
|
51
|
-
? {
|
|
52
|
-
...activated,
|
|
53
|
-
UV_NO_CONFIG: '1',
|
|
54
|
-
UV_PYTHON: packageManager.pythonExecutable,
|
|
55
|
-
}
|
|
56
|
-
: {
|
|
57
|
-
...activated,
|
|
58
|
-
PIP_CONFIG_FILE: os.devNull,
|
|
59
|
-
PIP_REQUIRE_VIRTUALENV: '1',
|
|
60
|
-
PYTHONNOUSERSITE: '1',
|
|
61
|
-
};
|
|
33
|
+
export function uvCommandNeedsEnvironment(args) {
|
|
34
|
+
return args[0] === 'pip' || args[0] === 'run';
|
|
62
35
|
}
|
|
63
|
-
/**
|
|
64
|
-
export function
|
|
36
|
+
/** Pin uv pip and uv run to the environment selected by Pyfig. */
|
|
37
|
+
export function targetUvArguments(args, python) {
|
|
65
38
|
if (!python.virtualEnvironment) {
|
|
66
|
-
throw new Error('uv
|
|
39
|
+
throw new Error('Targeted uv commands require a virtual environment.');
|
|
40
|
+
}
|
|
41
|
+
assertNoTargetOverride(args);
|
|
42
|
+
if (args[0] === 'run') {
|
|
43
|
+
return ['run', '--no-project', '--python', python.executable, ...args.slice(1)];
|
|
44
|
+
}
|
|
45
|
+
if (args[0] === 'pip' && args[1]) {
|
|
46
|
+
return ['pip', args[1], '--python', python.executable, ...args.slice(2)];
|
|
67
47
|
}
|
|
48
|
+
return [...args];
|
|
49
|
+
}
|
|
50
|
+
export function uvCommandEnvironment(env, python) {
|
|
51
|
+
const sanitized = sanitizeUvEnvironment(env);
|
|
52
|
+
if (!python?.virtualEnvironment)
|
|
53
|
+
return sanitized;
|
|
68
54
|
return {
|
|
69
|
-
...activateVirtualEnvironment(
|
|
70
|
-
UV_NO_CONFIG: '1',
|
|
55
|
+
...activateVirtualEnvironment(sanitized, python.virtualEnvironment, python.executable),
|
|
71
56
|
UV_PYTHON: python.executable,
|
|
72
57
|
};
|
|
73
58
|
}
|
|
74
|
-
/**
|
|
75
|
-
export function
|
|
76
|
-
if (packageManager.kind === 'pip' && isPackageMutation(args)) {
|
|
77
|
-
throw new Error('Package mutation requires uv so the repository environment is locked across processes. ' +
|
|
78
|
-
'Enable uv installation or use a read-only pip command.');
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
export function isPackageMutation(args) {
|
|
82
|
-
return args.some((argument) => argument === 'install' || argument === 'sync' || argument === 'uninstall');
|
|
83
|
-
}
|
|
84
|
-
export function isUvPipCommand(args) {
|
|
85
|
-
const separator = args.indexOf('--');
|
|
86
|
-
const commandArguments = separator === -1 ? args : args.slice(0, separator);
|
|
87
|
-
return commandArguments.includes('pip');
|
|
88
|
-
}
|
|
89
|
-
function sanitizedTargetEnvironment(env) {
|
|
59
|
+
/** Remove inherited values that could redirect uv away from an explicit target. */
|
|
60
|
+
export function sanitizeUvEnvironment(env) {
|
|
90
61
|
const sanitized = { ...env };
|
|
91
62
|
for (const key of Object.keys(sanitized)) {
|
|
92
63
|
if (TARGET_ENVIRONMENT_VARIABLES.has(key.toUpperCase()))
|
|
@@ -94,4 +65,17 @@ function sanitizedTargetEnvironment(env) {
|
|
|
94
65
|
}
|
|
95
66
|
return sanitized;
|
|
96
67
|
}
|
|
68
|
+
function assertNoTargetOverride(args) {
|
|
69
|
+
for (const argument of args.slice(1)) {
|
|
70
|
+
if (argument === '--')
|
|
71
|
+
return;
|
|
72
|
+
const [name] = argument.split('=', 1);
|
|
73
|
+
if (name && TARGET_OPTIONS.has(name)) {
|
|
74
|
+
throw new Error(`${name} cannot override the environment selected by Pyfig.`);
|
|
75
|
+
}
|
|
76
|
+
if (argument === '-p' || argument.startsWith('-p=') || /^-p[^-]/u.test(argument)) {
|
|
77
|
+
throw new Error('-p cannot override the environment selected by Pyfig.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
97
81
|
//# sourceMappingURL=package-target.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-target.js","sourceRoot":"","sources":["../src/package-target.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-target.js","sourceRoot":"","sources":["../src/package-target.ts"],"names":[],"mappings":"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"}
|
package/dist/probes.d.ts
CHANGED
|
@@ -25,30 +25,12 @@ export interface PythonEmbeddingInfo {
|
|
|
25
25
|
libraryName: string;
|
|
26
26
|
libraryKind: 'import' | 'shared' | 'static';
|
|
27
27
|
}
|
|
28
|
-
export interface PackageManagerInfo {
|
|
29
|
-
kind: 'pip' | 'uv';
|
|
30
|
-
executable: string;
|
|
31
|
-
prefixArgs: string[];
|
|
32
|
-
version: string;
|
|
33
|
-
pythonExecutable: string;
|
|
34
|
-
virtualEnvironment: string;
|
|
35
|
-
}
|
|
36
28
|
export interface UvInfo {
|
|
37
29
|
executable: string;
|
|
38
30
|
version: string;
|
|
39
31
|
}
|
|
40
|
-
export declare function findPython(options: ResolvedPyfigOptions): Promise<PythonInfo | null>;
|
|
41
32
|
export declare function pythonSatisfiesRequirements(python: PythonInfo, options: Pick<ResolvedPyfigOptions, 'pythonRange' | 'requireEmbedding' | 'requireGil'>): boolean;
|
|
42
33
|
export declare function probePython(candidate: CommandSpec, options: ResolvedPyfigOptions): Promise<PythonInfo | null>;
|
|
43
|
-
export declare function findPip(python: PythonInfo, options: ResolvedPyfigOptions): Promise<PackageManagerInfo | null>;
|
|
44
|
-
export interface PipVersionDetails {
|
|
45
|
-
version: string;
|
|
46
|
-
location: string;
|
|
47
|
-
pythonMajor: number;
|
|
48
|
-
pythonMinor: number;
|
|
49
|
-
}
|
|
50
|
-
export declare function parsePipVersionOutput(output: string): PipVersionDetails | null;
|
|
51
|
-
export declare function pipBelongsToPython(pip: PipVersionDetails, python: PythonInfo): boolean;
|
|
52
34
|
export declare function findUv(options: ResolvedPyfigOptions): Promise<UvInfo | null>;
|
|
53
35
|
export declare function probeUv(executable: string, options: ResolvedPyfigOptions): UvInfo | null;
|
|
54
36
|
//# sourceMappingURL=probes.d.ts.map
|
package/dist/probes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC7C;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAuED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,GAAG,kBAAkB,GAAG,YAAY,CAAC,GACrF,OAAO,CAQT;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAe5B;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKlF;AAED,wBAAgB,OAAO,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,GAAG,IAAI,CAQf"}
|