pyfig 0.6.2 → 0.7.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 (44) hide show
  1. package/README.md +47 -34
  2. package/SECURITY.md +1 -1
  3. package/dist/cjs/index.js +409 -261
  4. package/dist/cjs/index.js.map +10 -9
  5. package/dist/cjs/sync-resolver.js +369 -236
  6. package/dist/cjs/sync-resolver.js.map +9 -8
  7. package/dist/cli.js +12 -3
  8. package/dist/cli.js.map +1 -1
  9. package/dist/client.d.ts +6 -6
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +31 -21
  12. package/dist/client.js.map +1 -1
  13. package/dist/config.d.ts +9 -2
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +48 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.d.ts +3 -4
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/package-target.d.ts +3 -3
  22. package/dist/package-target.d.ts.map +1 -1
  23. package/dist/package-target.js +6 -6
  24. package/dist/package-target.js.map +1 -1
  25. package/dist/provision.d.ts +8 -12
  26. package/dist/provision.d.ts.map +1 -1
  27. package/dist/provision.js +156 -158
  28. package/dist/provision.js.map +1 -1
  29. package/dist/python-venv.d.ts +12 -0
  30. package/dist/python-venv.d.ts.map +1 -0
  31. package/dist/{virtual-environment.js → python-venv.js} +12 -9
  32. package/dist/python-venv.js.map +1 -0
  33. package/dist/runners.js +12 -12
  34. package/dist/runners.js.map +1 -1
  35. package/dist/sync-resolver.js +2 -2
  36. package/dist/sync-resolver.js.map +1 -1
  37. package/dist/venv-identity.d.ts +36 -0
  38. package/dist/venv-identity.d.ts.map +1 -0
  39. package/dist/venv-identity.js +80 -0
  40. package/dist/venv-identity.js.map +1 -0
  41. package/package.json +2 -2
  42. package/dist/virtual-environment.d.ts +0 -11
  43. package/dist/virtual-environment.d.ts.map +0 -1
  44. package/dist/virtual-environment.js.map +0 -1
@@ -1,21 +1,24 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- export const VIRTUAL_ENV_DIRECTORY_NAME = path.join('node_modules', '.pyfig', 'venv');
4
- export function virtualEnvironmentDirectory(projectRoot) {
5
- return path.join(projectRoot, VIRTUAL_ENV_DIRECTORY_NAME);
3
+ export const VIRTUAL_ENV_ROOT_NAME = path.join('node_modules', '.pyfig', 'venvs');
4
+ export function pythonVenvRoot(projectRoot) {
5
+ return path.join(projectRoot, VIRTUAL_ENV_ROOT_NAME);
6
+ }
7
+ export function pythonVenvDirectory(projectRoot, venvDirectory) {
8
+ return path.join(pythonVenvRoot(projectRoot), venvDirectory);
6
9
  }
7
10
  /** Existing application environments are eligible for read-only reuse. */
8
- export function externalVirtualEnvironmentDirectories(projectRoot, env) {
11
+ export function externalPythonVenvDirectories(projectRoot, env) {
9
12
  const candidates = [env['VIRTUAL_ENV'], path.join(projectRoot, '.venv')]
10
13
  .filter((value) => Boolean(value))
11
14
  .map((value) => path.resolve(value));
12
15
  return [...new Map(candidates.map((value) => [canonicalPath(value), value])).values()];
13
16
  }
14
- export function virtualEnvironmentPythonExecutable(virtualEnvironment) {
15
- return path.join(virtualEnvironment, process.platform === 'win32' ? 'Scripts' : 'bin', process.platform === 'win32' ? 'python.exe' : 'python');
17
+ export function pythonVenvExecutable(pythonVenv) {
18
+ return path.join(pythonVenv, process.platform === 'win32' ? 'Scripts' : 'bin', process.platform === 'win32' ? 'python.exe' : 'python');
16
19
  }
17
20
  /** Apply the environment changes that shell activation scripts make for child processes. */
18
- export function activateVirtualEnvironment(env, virtualEnvironment, pythonExecutable) {
21
+ export function activatePythonVenv(env, pythonVenv, pythonExecutable) {
19
22
  const activated = { ...env };
20
23
  const pathEntry = Object.keys(activated).find((key) => key.toUpperCase() === 'PATH');
21
24
  const existingPath = pathEntry ? activated[pathEntry] : undefined;
@@ -28,7 +31,7 @@ export function activateVirtualEnvironment(env, virtualEnvironment, pythonExecut
28
31
  activated['PATH'] = [path.dirname(pythonExecutable), existingPath]
29
32
  .filter((value) => Boolean(value))
30
33
  .join(path.delimiter);
31
- activated['VIRTUAL_ENV'] = virtualEnvironment;
34
+ activated['VIRTUAL_ENV'] = pythonVenv;
32
35
  return activated;
33
36
  }
34
37
  export function pathsEqual(left, right) {
@@ -46,4 +49,4 @@ export function canonicalPath(value) {
46
49
  }
47
50
  return process.platform === 'win32' ? canonical.toLowerCase() : canonical;
48
51
  }
49
- //# sourceMappingURL=virtual-environment.js.map
52
+ //# sourceMappingURL=python-venv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-venv.js","sourceRoot":"","sources":["../src/python-venv.ts"],"names":[],"mappings":"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"}
package/dist/runners.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { spawn, spawnSync, } from 'node:child_process';
2
- import { resolveOptions, uvEnvironment, } from './config.js';
3
- import { targetUvArguments, uvCommandEnvironment, uvCommandNeedsEnvironment, } from './package-target.js';
4
- import { ensureEnvironment, ensureUv } from './provision.js';
2
+ import { resolveOptions, uvProcessEnvironment, } from './config.js';
3
+ import { targetUvArguments, uvCommandNeedsPython, uvCommandProcessEnvironment, } from './package-target.js';
4
+ import { ensurePython, ensureUv } from './provision.js';
5
5
  import { runtimeFile } from './runtime-files.js';
6
6
  /** Run uv, pinning uv pip and uv run to Pyfig's selected environment. */
7
7
  export async function uvSpawn(args = [], spawnOptions = {}, pyfigOptions = {}) {
8
8
  const options = optionsForInvocation(pyfigOptions, spawnOptions.env);
9
9
  const resolved = resolveOptions(options);
10
- const environment = uvCommandNeedsEnvironment(args)
11
- ? await ensureEnvironment(resolved)
10
+ const python = uvCommandNeedsPython(args)
11
+ ? await ensurePython(resolved)
12
12
  : undefined;
13
- const uv = environment?.uv ?? await ensureUv(resolved);
14
- const command = buildUvCommand(uv, args, resolved, environment?.python);
13
+ const uv = python?.uv ?? await ensureUv(resolved);
14
+ const command = buildUvCommand(uv, args, resolved, python?.python);
15
15
  return spawn(command.executable, command.args, {
16
16
  ...spawnOptions,
17
17
  env: command.env,
@@ -21,11 +21,11 @@ export async function uvSpawn(args = [], spawnOptions = {}, pyfigOptions = {}) {
21
21
  export function uvSpawnSync(args = [], spawnOptions = {}, pyfigOptions = {}) {
22
22
  const options = optionsForInvocation(pyfigOptions, spawnOptions.env);
23
23
  const resolved = resolveOptions(options);
24
- const environment = uvCommandNeedsEnvironment(args)
25
- ? resolveSynchronously('environment', resolved)
24
+ const python = uvCommandNeedsPython(args)
25
+ ? resolveSynchronously('python', resolved)
26
26
  : undefined;
27
- const uv = environment?.uv ?? resolveSynchronously('uv', resolved);
28
- const command = buildUvCommand(uv, args, resolved, environment?.python);
27
+ const uv = python?.uv ?? resolveSynchronously('uv', resolved);
28
+ const command = buildUvCommand(uv, args, resolved, python?.python);
29
29
  return spawnSync(command.executable, command.args, {
30
30
  ...spawnOptions,
31
31
  env: command.env,
@@ -35,7 +35,7 @@ export function buildUvCommand(uv, args, options, python) {
35
35
  return {
36
36
  executable: uv.executable,
37
37
  args: python ? targetUvArguments(args, python) : [...args],
38
- env: uvCommandEnvironment(uvEnvironment(options), python),
38
+ env: uvCommandProcessEnvironment(uvProcessEnvironment(options), python),
39
39
  };
40
40
  }
41
41
  function optionsForInvocation(pyfigOptions, spawnEnv) {
@@ -1 +1 @@
1
- {"version":3,"file":"runners.js","sourceRoot":"","sources":["../src/runners.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,SAAS,GAIV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,aAAa,GAGd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAA0B,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAajD,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAI,GAAsB,EAAE,EAC5B,YAAY,GAAiB,EAAE,EAC/B,YAAY,GAAiB,EAAE;IAE/B,MAAM,OAAO,GAAG,oBAAoB,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE;QAC7C,GAAG,YAAY;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;AACL,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW,CACzB,IAAI,GAAsB,EAAE,EAC5B,YAAY,GAAqB,EAAE,EACnC,YAAY,GAAiB,EAAE;IAE/B,MAAM,OAAO,GAAG,oBAAoB,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC;QACjD,CAAC,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,IAAI,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE;QACjD,GAAG,YAAY;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAU,EACV,IAAuB,EACvB,OAA6B,EAC7B,MAAmB;IAEnB,OAAO;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1D,GAAG,EAAE,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,YAA0B,EAC1B,QAAuC;IAEvC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACpF,CAAC;AAOD,SAAS,oBAAoB,CAC3B,MAAuC,EACvC,OAAqB;IAErB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAA0B,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE;QACzE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9B,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,OAAO,EAAE,4BAA4B,CAAC,QAAQ,CAAC;QAC/C,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;QAC1B,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,mBAAmB,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAA+B,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,OAA6B;IACjE,OAAO,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,iBAAiB;QAC9D,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"runners.js","sourceRoot":"","sources":["../src/runners.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { readFileSync } from 'node:fs';
2
- import { ensureEnvironment, ensureUv } from './provision.js';
2
+ import { ensurePython, ensureUv } from './provision.js';
3
3
  async function main() {
4
4
  const request = JSON.parse(readFileSync(0, 'utf8'));
5
5
  const result = request.target === 'uv'
6
6
  ? await ensureUv(request.options)
7
- : await ensureEnvironment(request.options);
7
+ : await ensurePython(request.options);
8
8
  process.stdout.write(JSON.stringify(result));
9
9
  }
10
10
  main().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-resolver.js","sourceRoot":"","sources":["../src/sync-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO7D,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI;QACpC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"sync-resolver.js","sourceRoot":"","sources":["../src/sync-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAOxD,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI;QACpC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { PythonInfo } from './probes.js';
2
+ export declare const VENV_SCHEMA = 1;
3
+ export declare const VENV_METADATA = ".pyfig-venv.json";
4
+ export interface VenvContract {
5
+ schema: typeof VENV_SCHEMA;
6
+ runtime: {
7
+ architecture: string;
8
+ platform: NodeJS.Platform;
9
+ };
10
+ python: {
11
+ architecture: string;
12
+ baseExecutable: string;
13
+ basePrefix: string;
14
+ embeddingHeader: string | null;
15
+ embeddingLibrary: string | null;
16
+ gilDisabled: boolean;
17
+ implementation: string;
18
+ pointerBits: number;
19
+ version: string;
20
+ };
21
+ requirementsSha256: string;
22
+ }
23
+ export interface VenvIdentity {
24
+ contract: VenvContract;
25
+ directoryName: string;
26
+ id: string;
27
+ }
28
+ /** Derive one stable venv identity from its interpreter and exact resolution. */
29
+ export declare function createVenvIdentity(python: PythonInfo, requirementsSha256: string): VenvIdentity;
30
+ export declare function requirementsDigest(content: string): string;
31
+ export declare function venvMetadataFile(directory: string): string;
32
+ /** Metadata is the publication marker; an environment without it is incomplete. */
33
+ export declare function venvMatches(directory: string, venv: VenvIdentity): Promise<boolean>;
34
+ /** Publish the venv marker atomically after creation and installation succeed. */
35
+ export declare function writeVenvMetadata(directory: string, venv: VenvIdentity): Promise<void>;
36
+ //# sourceMappingURL=venv-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venv-identity.d.ts","sourceRoot":"","sources":["../src/venv-identity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,WAAW,CAAC;IAC3B,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;CACZ;AAOD,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,MAAM,GACzB,YAAY,CA4Bd;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,mFAAmF;AACnF,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,80 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { canonicalPath } from './python-venv.js';
5
+ export const VENV_SCHEMA = 1;
6
+ export const VENV_METADATA = '.pyfig-venv.json';
7
+ /** Derive one stable venv identity from its interpreter and exact resolution. */
8
+ export function createVenvIdentity(python, requirementsSha256) {
9
+ const contract = {
10
+ schema: VENV_SCHEMA,
11
+ runtime: {
12
+ architecture: process.arch,
13
+ platform: process.platform,
14
+ },
15
+ python: {
16
+ architecture: python.architecture,
17
+ baseExecutable: canonicalPath(python.executable),
18
+ basePrefix: canonicalPath(python.basePrefix),
19
+ embeddingHeader: python.embedding ? canonicalPath(python.embedding.headerPath) : null,
20
+ embeddingLibrary: python.embedding ? canonicalPath(python.embedding.libraryPath) : null,
21
+ gilDisabled: python.gilDisabled,
22
+ implementation: python.implementation,
23
+ pointerBits: python.pointerBits,
24
+ version: python.version,
25
+ },
26
+ requirementsSha256,
27
+ };
28
+ const id = sha256(JSON.stringify(contract));
29
+ const implementation = safePathSegment(python.implementation);
30
+ const version = safePathSegment(python.version);
31
+ return {
32
+ contract,
33
+ directoryName: `${implementation}-${version}-${id.slice(0, 20)}`,
34
+ id,
35
+ };
36
+ }
37
+ export function requirementsDigest(content) {
38
+ return sha256(content);
39
+ }
40
+ export function venvMetadataFile(directory) {
41
+ return path.join(directory, VENV_METADATA);
42
+ }
43
+ /** Metadata is the publication marker; an environment without it is incomplete. */
44
+ export async function venvMatches(directory, venv) {
45
+ try {
46
+ const parsed = JSON.parse(await readFile(venvMetadataFile(directory), 'utf8'));
47
+ return parsed.venvId === venv.id &&
48
+ JSON.stringify(parsed.contract) === JSON.stringify(venv.contract);
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ /** Publish the venv marker atomically after creation and installation succeed. */
55
+ export async function writeVenvMetadata(directory, venv) {
56
+ await mkdir(directory, { recursive: true });
57
+ const file = venvMetadataFile(directory);
58
+ const staged = `${file}.${process.pid}.${randomUUID()}.tmp`;
59
+ const metadata = {
60
+ contract: venv.contract,
61
+ venvId: venv.id,
62
+ };
63
+ try {
64
+ await writeFile(staged, `${JSON.stringify(metadata, null, 2)}\n`, {
65
+ encoding: 'utf8',
66
+ flag: 'wx',
67
+ });
68
+ await rename(staged, file);
69
+ }
70
+ finally {
71
+ await rm(staged, { force: true });
72
+ }
73
+ }
74
+ function safePathSegment(value) {
75
+ return value.toLowerCase().replace(/[^a-z0-9.-]+/gu, '-').replace(/^-+|-+$/gu, '') || 'python';
76
+ }
77
+ function sha256(value) {
78
+ return createHash('sha256').update(value).digest('hex');
79
+ }
80
+ //# sourceMappingURL=venv-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venv-identity.js","sourceRoot":"","sources":["../src/venv-identity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pyfig",
3
- "version": "0.6.2",
4
- "description": "Prepare uv-first Python runtime environments without editing project files.",
3
+ "version": "0.7.0",
4
+ "description": "Prepare isolated, content-addressed Python venvs with uv.",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -1,11 +0,0 @@
1
- export declare const VIRTUAL_ENV_DIRECTORY_NAME: string;
2
- export declare function virtualEnvironmentDirectory(projectRoot: string): string;
3
- /** Existing application environments are eligible for read-only reuse. */
4
- export declare function externalVirtualEnvironmentDirectories(projectRoot: string, env: NodeJS.ProcessEnv): string[];
5
- export declare function virtualEnvironmentPythonExecutable(virtualEnvironment: string): string;
6
- /** Apply the environment changes that shell activation scripts make for child processes. */
7
- export declare function activateVirtualEnvironment(env: NodeJS.ProcessEnv, virtualEnvironment: string, pythonExecutable: string): NodeJS.ProcessEnv;
8
- export declare function pathsEqual(left: string, right: string): boolean;
9
- /** Canonicalize existing paths so symlink, junction, and filesystem casing aliases compare equally. */
10
- export declare function canonicalPath(value: string): string;
11
- //# sourceMappingURL=virtual-environment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"virtual-environment.d.ts","sourceRoot":"","sources":["../src/virtual-environment.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,0BAA0B,QAA8C,CAAC;AAEtF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,0EAA0E;AAC1E,wBAAgB,qCAAqC,CACnD,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,MAAM,EAAE,CAKV;AAED,wBAAgB,kCAAkC,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED,4FAA4F;AAC5F,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAAC,UAAU,CAenB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,uGAAuG;AACvG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASnD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"virtual-environment.js","sourceRoot":"","sources":["../src/virtual-environment.ts"],"names":[],"mappings":"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"}