pyfig 0.4.0 → 0.6.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 +19 -16
- package/SECURITY.md +2 -2
- package/dist/cjs/index.js +282 -97
- package/dist/cjs/index.js.map +8 -7
- package/dist/cjs/sync-resolver.js +279 -93
- package/dist/cjs/sync-resolver.js.map +8 -7
- package/dist/cli.js +4 -6
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +2 -2
- package/dist/config.d.ts +10 -14
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -29
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pep440.d.ts +12 -0
- package/dist/pep440.d.ts.map +1 -0
- package/dist/pep440.js +21 -0
- package/dist/pep440.js.map +1 -0
- package/dist/probes.d.ts +1 -1
- package/dist/probes.d.ts.map +1 -1
- package/dist/probes.js +15 -7
- package/dist/probes.js.map +1 -1
- package/dist/provision.d.ts +2 -2
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +254 -58
- package/dist/provision.js.map +1 -1
- package/package.json +7 -6
package/dist/config.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import * as envPaths from 'env-paths';
|
|
3
|
-
import
|
|
3
|
+
import { isValidPep440Specifier, pep440VersionSatisfies, } from './pep440.js';
|
|
4
4
|
import { resolveProjectRoot } from './project-root.js';
|
|
5
|
-
export const
|
|
5
|
+
export const DEFAULT_REQUIRES_PYTHON = '>=3.10,<4';
|
|
6
6
|
export const DEFAULT_MANAGED_PYTHON = '3.12';
|
|
7
|
-
export const DEFAULT_UV_VERSION = '0.13.6';
|
|
8
7
|
// External uv only needs to support the command and isolation flags Pyfig uses.
|
|
9
|
-
//
|
|
10
|
-
export const
|
|
8
|
+
// The installer resolves the greatest published release allowed by this policy.
|
|
9
|
+
export const DEFAULT_REQUIRES_UV = '>=0.10,<1';
|
|
11
10
|
const DEFAULT_PROBE_TIMEOUT_MS = 10_000;
|
|
12
11
|
const DEFAULT_INSTALL_TIMEOUT_MS = 10 * 60_000;
|
|
13
12
|
const DEFAULT_DOWNLOAD_TIMEOUT_MS = 5 * 60_000;
|
|
@@ -25,15 +24,14 @@ export function resolveOptions(options = {}) {
|
|
|
25
24
|
// Snapshot the environment so callers cannot change an in-flight policy by
|
|
26
25
|
// mutating process.env or a reused options object after resolution.
|
|
27
26
|
const env = { ...(options.env ?? process.env) };
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
const requiresPython = options.requiresPython ??
|
|
28
|
+
env['PYFIG_REQUIRES_PYTHON'] ?? DEFAULT_REQUIRES_PYTHON;
|
|
29
|
+
const requiresUv = options.requiresUv ?? env['PYFIG_REQUIRES_UV'] ?? DEFAULT_REQUIRES_UV;
|
|
30
|
+
assertPep440Specifier('requires-python', requiresPython);
|
|
31
|
+
assertPep440Specifier('requires-uv', requiresUv);
|
|
32
32
|
const managedPython = options.managedPython ??
|
|
33
33
|
env['PYFIG_MANAGED_PYTHON'] ?? DEFAULT_MANAGED_PYTHON;
|
|
34
|
-
|
|
35
|
-
assertManagedPythonRequest(managedPython, pythonRange);
|
|
36
|
-
assertUvVersion(uvVersion, uvRange);
|
|
34
|
+
assertManagedPythonRequest(managedPython, requiresPython);
|
|
37
35
|
const probeTimeoutMs = resolveDuration('probeTimeoutMs', options.probeTimeoutMs, env['PYFIG_PROBE_TIMEOUT_MS'], DEFAULT_PROBE_TIMEOUT_MS);
|
|
38
36
|
const installTimeoutMs = resolveDuration('installTimeoutMs', options.installTimeoutMs, env['PYFIG_INSTALL_TIMEOUT_MS'], DEFAULT_INSTALL_TIMEOUT_MS);
|
|
39
37
|
const downloadTimeoutMs = resolveDuration('downloadTimeoutMs', options.downloadTimeoutMs, env['PYFIG_DOWNLOAD_TIMEOUT_MS'], DEFAULT_DOWNLOAD_TIMEOUT_MS);
|
|
@@ -49,10 +47,9 @@ export function resolveOptions(options = {}) {
|
|
|
49
47
|
const autoInstall = options.autoInstall ?? parseBoolean(env['PYFIG_AUTO_INSTALL'], true);
|
|
50
48
|
return {
|
|
51
49
|
python: options.python ?? env['PYFIG_PYTHON'] ?? '',
|
|
52
|
-
|
|
50
|
+
requiresPython,
|
|
53
51
|
managedPython,
|
|
54
|
-
|
|
55
|
-
uvRange,
|
|
52
|
+
requiresUv,
|
|
56
53
|
requireEmbedding: options.requireEmbedding ?? parseBoolean(env['PYFIG_REQUIRE_EMBEDDING'], false),
|
|
57
54
|
requireGil: options.requireGil ?? parseBoolean(env['PYFIG_REQUIRE_GIL'], false),
|
|
58
55
|
autoInstall,
|
|
@@ -79,27 +76,19 @@ export function uvEnvironment(options) {
|
|
|
79
76
|
UV_NO_CONFIG: '1',
|
|
80
77
|
};
|
|
81
78
|
}
|
|
82
|
-
function
|
|
83
|
-
if (!
|
|
84
|
-
throw new TypeError(`Invalid ${
|
|
79
|
+
function assertPep440Specifier(name, specifier) {
|
|
80
|
+
if (!isValidPep440Specifier(specifier)) {
|
|
81
|
+
throw new TypeError(`Invalid ${name} PEP 440 specifier: ${specifier}`);
|
|
85
82
|
}
|
|
86
83
|
}
|
|
87
|
-
function
|
|
88
|
-
if (!semver.valid(version)) {
|
|
89
|
-
throw new TypeError(`Invalid exact uv version: ${version}`);
|
|
90
|
-
}
|
|
91
|
-
if (!semver.satisfies(version, range)) {
|
|
92
|
-
throw new TypeError(`Pinned uv ${version} does not satisfy supported range ${range}.`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
function assertManagedPythonRequest(request, pythonRange) {
|
|
84
|
+
function assertManagedPythonRequest(request, requiresPython) {
|
|
96
85
|
if (!request || /[\\/\0\r\n]/u.test(request) || request.includes('..')) {
|
|
97
86
|
throw new TypeError(`Invalid managed Python request: ${request}`);
|
|
98
87
|
}
|
|
99
88
|
if (/^\d+\.\d+(?:\.\d+)?$/u.test(request)) {
|
|
100
89
|
const normalized = request.split('.').length === 2 ? `${request}.0` : request;
|
|
101
|
-
if (!
|
|
102
|
-
throw new TypeError(`Managed Python ${request} cannot satisfy
|
|
90
|
+
if (!pep440VersionSatisfies(normalized, requiresPython)) {
|
|
91
|
+
throw new TypeError(`Managed Python ${request} cannot satisfy requires-python ${requiresPython}.`);
|
|
103
92
|
}
|
|
104
93
|
}
|
|
105
94
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AACtC,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,4 +1,4 @@
|
|
|
1
|
-
export { DEFAULT_MANAGED_PYTHON,
|
|
1
|
+
export { DEFAULT_MANAGED_PYTHON, DEFAULT_REQUIRES_PYTHON, DEFAULT_REQUIRES_UV, } 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';
|
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,uBAAuB,EACvB,mBAAmB,GACpB,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,4 +1,4 @@
|
|
|
1
|
-
export { DEFAULT_MANAGED_PYTHON,
|
|
1
|
+
export { DEFAULT_MANAGED_PYTHON, DEFAULT_REQUIRES_PYTHON, DEFAULT_REQUIRES_UV, } from './config.js';
|
|
2
2
|
export { createPyfig } from './client.js';
|
|
3
3
|
export { resolveProjectRoot } from './project-root.js';
|
|
4
4
|
export { ensureEnvironment, ensureUv, } from './provision.js';
|
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,uBAAuB,EACvB,mBAAmB,GACpB,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/pep440.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Validate a PEP 440 version specifier used by a runtime policy. */
|
|
2
|
+
export declare function isValidPep440Specifier(specifier: string): boolean;
|
|
3
|
+
/** Normalize a PEP 440 version, or reject invalid input. */
|
|
4
|
+
export declare function normalizePep440Version(version: string): string | null;
|
|
5
|
+
/**
|
|
6
|
+
* Match a version using PEP 440 specifier-set behavior, including its
|
|
7
|
+
* pre-release fallback when the candidate set has no matching final release.
|
|
8
|
+
*/
|
|
9
|
+
export declare function pep440VersionSatisfies(version: string, specifier: string): boolean;
|
|
10
|
+
/** Select the greatest PEP 440 version allowed by a specifier. */
|
|
11
|
+
export declare function maxPep440Version(versions: readonly string[], specifier: string): string | null;
|
|
12
|
+
//# sourceMappingURL=pep440.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pep440.d.ts","sourceRoot":"","sources":["../src/pep440.ts"],"names":[],"mappings":"AAOA,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAElF;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAEf"}
|
package/dist/pep440.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { filter, maxSatisfying, valid as validPep440Version, validRange as validPep440Specifier, } from '@renovatebot/pep440';
|
|
2
|
+
/** Validate a PEP 440 version specifier used by a runtime policy. */
|
|
3
|
+
export function isValidPep440Specifier(specifier) {
|
|
4
|
+
return validPep440Specifier(specifier);
|
|
5
|
+
}
|
|
6
|
+
/** Normalize a PEP 440 version, or reject invalid input. */
|
|
7
|
+
export function normalizePep440Version(version) {
|
|
8
|
+
return validPep440Version(version);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Match a version using PEP 440 specifier-set behavior, including its
|
|
12
|
+
* pre-release fallback when the candidate set has no matching final release.
|
|
13
|
+
*/
|
|
14
|
+
export function pep440VersionSatisfies(version, specifier) {
|
|
15
|
+
return filter([version], specifier).length === 1;
|
|
16
|
+
}
|
|
17
|
+
/** Select the greatest PEP 440 version allowed by a specifier. */
|
|
18
|
+
export function maxPep440Version(versions, specifier) {
|
|
19
|
+
return maxSatisfying([...versions], specifier);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=pep440.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pep440.js","sourceRoot":"","sources":["../src/pep440.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,KAAK,IAAI,kBAAkB,EAC3B,UAAU,IAAI,oBAAoB,GACnC,MAAM,qBAAqB,CAAC;AAE7B,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,SAAiB;IACvE,OAAO,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAC9B,QAA2B,EAC3B,SAAiB;IAEjB,OAAO,aAAa,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/probes.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export interface UvInfo {
|
|
|
29
29
|
executable: string;
|
|
30
30
|
version: string;
|
|
31
31
|
}
|
|
32
|
-
export declare function
|
|
32
|
+
export declare function pythonSatisfiesPolicy(python: PythonInfo, options: Pick<ResolvedPyfigOptions, 'requiresPython' | 'requireEmbedding' | 'requireGil'>): boolean;
|
|
33
33
|
export declare function probePython(candidate: CommandSpec, options: ResolvedPyfigOptions): Promise<PythonInfo | null>;
|
|
34
34
|
export declare function findUv(options: ResolvedPyfigOptions): Promise<UvInfo | null>;
|
|
35
35
|
export declare function probeUv(executable: string, options: ResolvedPyfigOptions): UvInfo | null;
|
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":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,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;AA+ED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,YAAY,CAAC,GACxF,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"}
|
package/dist/probes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { normalizePep440Version, pep440VersionSatisfies } from './pep440.js';
|
|
2
2
|
import { resolveExecutable, run } from './process.js';
|
|
3
3
|
const PYTHON_PROBE = `
|
|
4
4
|
import json
|
|
@@ -48,7 +48,15 @@ if os.path.isfile(header_path) and library_path:
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
release_level = sys.version_info.releaselevel
|
|
51
|
-
|
|
51
|
+
release_suffixes = {
|
|
52
|
+
"alpha": "a",
|
|
53
|
+
"beta": "b",
|
|
54
|
+
"candidate": "rc",
|
|
55
|
+
"final": "",
|
|
56
|
+
}
|
|
57
|
+
release_suffix = release_suffixes[release_level]
|
|
58
|
+
if release_suffix:
|
|
59
|
+
release_suffix += str(sys.version_info.serial)
|
|
52
60
|
|
|
53
61
|
print(json.dumps({
|
|
54
62
|
"executable": sys.executable,
|
|
@@ -68,8 +76,8 @@ print(json.dumps({
|
|
|
68
76
|
"embedding": embedding,
|
|
69
77
|
}))
|
|
70
78
|
`;
|
|
71
|
-
export function
|
|
72
|
-
return
|
|
79
|
+
export function pythonSatisfiesPolicy(python, options) {
|
|
80
|
+
return pep440VersionSatisfies(python.version, options.requiresPython) &&
|
|
73
81
|
(!options.requireEmbedding || (python.implementation === 'cpython' &&
|
|
74
82
|
python.embedding !== null &&
|
|
75
83
|
pythonArchitectureMatchesRuntime(python))) &&
|
|
@@ -82,7 +90,7 @@ export async function probePython(candidate, options) {
|
|
|
82
90
|
try {
|
|
83
91
|
const { stdout } = run(executable, [...candidate.args, '-c', PYTHON_PROBE], options.env, options.probeTimeoutMs);
|
|
84
92
|
const info = JSON.parse(stdout.trim());
|
|
85
|
-
return
|
|
93
|
+
return normalizePep440Version(info.version) ? info : null;
|
|
86
94
|
}
|
|
87
95
|
catch {
|
|
88
96
|
return null;
|
|
@@ -92,7 +100,7 @@ export async function findUv(options) {
|
|
|
92
100
|
const configured = options.env['PYFIG_UV'] ?? 'uv';
|
|
93
101
|
const executable = await resolveExecutable(configured, options.env);
|
|
94
102
|
const uv = executable ? probeUv(executable, options) : null;
|
|
95
|
-
return uv &&
|
|
103
|
+
return uv && pep440VersionSatisfies(uv.version, options.requiresUv) ? uv : null;
|
|
96
104
|
}
|
|
97
105
|
export function probeUv(executable, options) {
|
|
98
106
|
try {
|
|
@@ -107,7 +115,7 @@ export function probeUv(executable, options) {
|
|
|
107
115
|
function normalizeVersion(value) {
|
|
108
116
|
if (!value)
|
|
109
117
|
return null;
|
|
110
|
-
return
|
|
118
|
+
return normalizePep440Version(value);
|
|
111
119
|
}
|
|
112
120
|
function pythonArchitectureMatchesRuntime(python) {
|
|
113
121
|
const architecture = python.architecture.toLowerCase();
|
package/dist/probes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../src/probes.ts"],"names":[],"mappings":"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"}
|
package/dist/provision.d.ts
CHANGED
|
@@ -17,8 +17,8 @@ export interface RuntimeDependencyOptions {
|
|
|
17
17
|
/** Ensure a compatible uv executable, preferring an existing installation. */
|
|
18
18
|
export declare function ensureUv(options?: PyfigOptions): Promise<UvInfo>;
|
|
19
19
|
/**
|
|
20
|
-
* Select a compatible environment and optionally add runtime
|
|
20
|
+
* Select a compatible environment and optionally add runtime dependencies.
|
|
21
21
|
* Project dependency files are inputs only and are never changed.
|
|
22
22
|
*/
|
|
23
|
-
export declare function ensureEnvironment(options?: PyfigOptions,
|
|
23
|
+
export declare function ensureEnvironment(options?: PyfigOptions, dependencies?: readonly string[], dependencyOptions?: RuntimeDependencyOptions): Promise<PythonEnvironment>;
|
|
24
24
|
//# sourceMappingURL=provision.d.ts.map
|
package/dist/provision.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AAOrB,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AAUrB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,8EAA8E;AAC9E,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,YAAiB,EAC1B,YAAY,GAAE,SAAS,MAAM,EAAO,EACpC,iBAAiB,GAAE,wBAA6B,GAC/C,OAAO,CAAC,iBAAiB,CAAC,CAe5B"}
|