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.
Files changed (63) hide show
  1. package/README.md +112 -121
  2. package/SECURITY.md +1 -1
  3. package/dist/cjs/index.js +469 -871
  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
package/dist/client.js CHANGED
@@ -1,23 +1,25 @@
1
- import { ensureEnvironment, ensureUv, ensureVirtualEnvironment, } from './provision.js';
2
- import { pipSpawn, pipSpawnSync, pythonSpawn, pythonSpawnSync, uvSpawn, uvSpawnSync, } from './runners.js';
3
- import { clearPyfigCaches } from './state.js';
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: () => ensureEnvironment(scopedOptions),
12
- pythonInfo: () => ensureVirtualEnvironment(scopedOptions),
13
- uvInfo: () => ensureUv(scopedOptions),
14
- python: (args = [], spawnOptions = {}) => pythonSpawn(args, spawnOptions, scopedOptions),
15
- pythonSync: (args = [], spawnOptions = {}) => pythonSpawnSync(args, spawnOptions, scopedOptions),
16
- pip: (args = [], spawnOptions = {}) => pipSpawn(args, spawnOptions, scopedOptions),
17
- pipSync: (args = [], spawnOptions = {}) => pipSpawnSync(args, spawnOptions, scopedOptions),
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
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,GAEzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAyB9C,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,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,aAAa,CAAC;QACzD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QACrC,MAAM,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC;QACxF,UAAU,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC;QAChG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC;QAClF,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC;QAC1F,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;QACxF,UAAU,EAAE,gBAAgB;KAC7B,CAAC;AACJ,CAAC"}
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.13.6 <1.0.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 the repository-root .venv. */
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 the single `.venv`. */
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
- /** Opaque identity shared by every async and sync resolution cache. */
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAC3C,eAAO,MAAM,gBAAgB,oBAAmC,CAAC;AAmBjE,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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,mDAAmD;IACnD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,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,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+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,QAAQ,EAAE,MAAM,CAAC;IACjB,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,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,YAAiB,GAAG,oBAAoB,CAkF/E;AAED,uEAAuE;AACvE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAwB9E;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAM9E"}
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
- export const DEFAULT_UV_RANGE = `>=${DEFAULT_UV_VERSION} <1.0.0`;
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
- /** Opaque identity shared by every async and sync resolution cache. */
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
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
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, DEFAULT_PIP_RANGE, DEFAULT_PYTHON_RANGE, DEFAULT_UV_RANGE, DEFAULT_UV_VERSION, } from './config.js';
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 { PackageManagerInfo, PythonEmbeddingInfo, PythonInfo, UvInfo, } from './probes.js';
7
- export { ensureEnvironment, ensureUv, ensureVirtualEnvironment, } from './provision.js';
8
- export type { PythonEnvironment } from './provision.js';
9
- export { pipSpawn, pipSpawnSync, pythonSpawn, pythonSpawnSync, uvSpawn, uvSpawnSync, } from './runners.js';
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,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,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,MAAM,GACP,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
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, DEFAULT_PIP_RANGE, DEFAULT_PYTHON_RANGE, DEFAULT_UV_RANGE, DEFAULT_UV_VERSION, } from './config.js';
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, ensureVirtualEnvironment, } from './provision.js';
5
- export { pipSpawn, pipSpawnSync, pythonSpawn, pythonSpawnSync, uvSpawn, uvSpawnSync, } from './runners.js';
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,iBAAiB,EACjB,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;AAOvD,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
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"}
@@ -1,12 +1,8 @@
1
- import type { PackageManagerInfo, PythonInfo } from './probes.js';
2
- /** Reject package-manager arguments that can escape the selected repository venv. */
3
- export declare function assertSafePackageArguments(args: readonly string[]): void;
4
- /** Build a package-manager environment whose target cannot be inherited or configured elsewhere. */
5
- export declare function packageManagerEnvironment(env: NodeJS.ProcessEnv, packageManager: PackageManagerInfo): NodeJS.ProcessEnv;
6
- /** Apply the same strict target policy to a direct `uv pip` invocation. */
7
- export declare function uvPipEnvironment(env: NodeJS.ProcessEnv, python: PythonInfo): NodeJS.ProcessEnv;
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":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkClE,qFAAqF;AACrF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAgBxE;AAED,oGAAoG;AACpG,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,cAAc,EAAE,kBAAkB,GACjC,MAAM,CAAC,UAAU,CAmBnB;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,EAAE,UAAU,GACjB,MAAM,CAAC,UAAU,CAanB;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,kBAAkB,EAClC,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,IAAI,CAON;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAGlE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAI/D"}
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"}
@@ -1,18 +1,19 @@
1
- import os from 'node:os';
2
1
  import { activateVirtualEnvironment } from './virtual-environment.js';
3
- const TARGET_CHANGING_OPTIONS = new Set([
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
- /** Reject package-manager arguments that can escape the selected repository venv. */
32
- export function assertSafePackageArguments(args) {
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
- /** Apply the same strict target policy to a direct `uv pip` invocation. */
64
- export function uvPipEnvironment(env, python) {
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 pip commands require the repository virtual environment.');
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(sanitizedTargetEnvironment(env), python.virtualEnvironment, python.executable),
70
- UV_NO_CONFIG: '1',
55
+ ...activateVirtualEnvironment(sanitized, python.virtualEnvironment, python.executable),
71
56
  UV_PYTHON: python.executable,
72
57
  };
73
58
  }
74
- /** Package installation and removal must use uv so its target-environment lock is authoritative. */
75
- export function assertMutationUsesUv(packageManager, args) {
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":"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"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGxE,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,kBAAkB;IACjC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAuED,wBAAsB,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAuB1F;AAED,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,OAAO,CAC3B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA+BpC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAW9E;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,UAAU,GACjB,OAAO,CAWT;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"}
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"}