@bjia56/portable-python 0.1.63 → 0.1.65

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.
@@ -0,0 +1,11 @@
1
+ import { IInstaller, IPortablePython, IPortablePythonOptions } from './types';
2
+ export default class CPythonInstaller implements IInstaller {
3
+ private parent;
4
+ private options;
5
+ constructor(parent: IPortablePython, options: IPortablePythonOptions);
6
+ get relativeExecutablePath(): string;
7
+ get relativePipPath(): string;
8
+ get pythonDistributionName(): string;
9
+ validateOptions(): void;
10
+ postInstall(): Promise<void>;
11
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const os_1 = require("os");
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const DL_PLATFORM = (() => {
7
+ if ((0, os_1.platform)() == "win32") {
8
+ return "windows";
9
+ }
10
+ if ((0, os_1.platform)() == "freebsd") {
11
+ const releaseName = (0, os_1.release)();
12
+ const releaseMajor = parseInt(releaseName.split(".")[0]);
13
+ return `freebsd${releaseMajor}`;
14
+ }
15
+ return (0, os_1.platform)();
16
+ })();
17
+ const DL_ARCH = (() => {
18
+ if (DL_PLATFORM == "darwin") {
19
+ return "universal2";
20
+ }
21
+ switch ((0, os_1.arch)()) {
22
+ case "ia32":
23
+ return "i386";
24
+ case "x64":
25
+ return "x86_64";
26
+ case "arm64":
27
+ return "aarch64";
28
+ }
29
+ return (0, os_1.arch)();
30
+ })();
31
+ class CPythonInstaller {
32
+ parent;
33
+ options;
34
+ constructor(parent, options) {
35
+ this.parent = parent;
36
+ this.options = options;
37
+ }
38
+ get relativeExecutablePath() {
39
+ return (0, path_1.join)(this.pythonDistributionName, "bin", "python" + (this.options.distribution === "cosmo" ? ".com" :
40
+ ((0, os_1.platform)() === "win32" ? ".exe" : "")));
41
+ }
42
+ get relativePipPath() {
43
+ if (this.options.distribution != "cosmo" && (0, os_1.platform)() === "win32") {
44
+ return (0, path_1.join)(this.pythonDistributionName, "Scripts", `pip${this.parent.major}.exe`);
45
+ }
46
+ return (0, path_1.join)(this.pythonDistributionName, "bin", `pip${this.parent.major}`);
47
+ }
48
+ get pythonDistributionName() {
49
+ if (this.parent.distribution === "cosmo") {
50
+ return `python-${this.parent.version}-cosmo-unknown`;
51
+ }
52
+ return `python-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;
53
+ }
54
+ validateOptions() {
55
+ if (this.options.implementation !== "cpython") {
56
+ throw Error("expected cpython implementation");
57
+ }
58
+ if (!["auto", "cosmo"].includes(this.options.distribution)) {
59
+ throw Error("invalid distribution");
60
+ }
61
+ }
62
+ async postInstall() {
63
+ if (!this.parent.isInstalled()) {
64
+ throw Error("something went wrong and the installation failed");
65
+ }
66
+ await (0, promises_1.chmod)(this.parent.executablePath, 0o777);
67
+ if (this.options.distribution != "cosmo" && (0, os_1.platform)() != "win32") {
68
+ // node can't create symlinks over existing files, so we create symlinks with temp names,
69
+ // then rename to overwrite existing files
70
+ await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.parent.major}_`, "file");
71
+ await (0, promises_1.rename)(`${this.parent.executablePath}${this.parent.major}_`, `${this.parent.executablePath}${this.parent.major}`);
72
+ await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.parent.major}.${this.parent.minor}_`, "file");
73
+ await (0, promises_1.rename)(`${this.parent.executablePath}${this.parent.major}.${this.parent.minor}_`, `${this.parent.executablePath}${this.parent.major}.${this.parent.minor}`);
74
+ // ensure the pip script is executable
75
+ await (0, promises_1.chmod)(this.parent.pipPath, 0o777);
76
+ await (0, promises_1.chmod)(`${this.parent.pipPath}.${this.parent.minor}`, 0o777);
77
+ }
78
+ }
79
+ }
80
+ exports.default = CPythonInstaller;
81
+ //# sourceMappingURL=cpython.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpython.js","sourceRoot":"","sources":["../src/cpython.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { IInstaller, IPortablePython, IPortablePythonOptions } from './types';
2
+ export default class GraalPyInstaller implements IInstaller {
3
+ private parent;
4
+ private options;
5
+ private pythonMajor;
6
+ private pythonMinor;
7
+ constructor(parent: IPortablePython, options: IPortablePythonOptions);
8
+ get relativeExecutablePath(): string;
9
+ get relativePipPath(): string;
10
+ get pythonDistributionName(): string;
11
+ validateOptions(): void;
12
+ postInstall(): Promise<void>;
13
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const os_1 = require("os");
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const DL_PLATFORM = (() => {
7
+ if ((0, os_1.platform)() == "win32") {
8
+ return "windows";
9
+ }
10
+ if ((0, os_1.platform)() == "darwin") {
11
+ return "macos";
12
+ }
13
+ return (0, os_1.platform)();
14
+ })();
15
+ const DL_ARCH = (() => {
16
+ switch ((0, os_1.arch)()) {
17
+ case "x64":
18
+ return "x86_64";
19
+ case "arm64":
20
+ return "aarch64";
21
+ }
22
+ return (0, os_1.arch)();
23
+ })();
24
+ class GraalPyInstaller {
25
+ parent;
26
+ options;
27
+ pythonMajor = 3;
28
+ pythonMinor = 10;
29
+ constructor(parent, options) {
30
+ this.parent = parent;
31
+ this.options = options;
32
+ }
33
+ get relativeExecutablePath() {
34
+ return (0, path_1.join)(this.pythonDistributionName, "bin", "python" + ((0, os_1.platform)() === "win32" ? ".exe" : ""));
35
+ }
36
+ get relativePipPath() {
37
+ if ((0, os_1.platform)() === "win32") {
38
+ return (0, path_1.join)(this.pythonDistributionName, "Scripts", `pip${this.pythonMajor}.exe`);
39
+ }
40
+ return (0, path_1.join)(this.pythonDistributionName, "bin", `pip${this.pythonMajor}`);
41
+ }
42
+ get pythonDistributionName() {
43
+ return `graalpy-community-jvm-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;
44
+ }
45
+ validateOptions() {
46
+ if (this.options.implementation !== "graalpy") {
47
+ throw Error("expected graalpy implementation");
48
+ }
49
+ if (this.options.distribution !== "auto") {
50
+ throw Error("invalid distribution");
51
+ }
52
+ }
53
+ async postInstall() {
54
+ if (!this.parent.isInstalled()) {
55
+ throw Error("something went wrong and the installation failed");
56
+ }
57
+ await (0, promises_1.chmod)(this.parent.executablePath, 0o777);
58
+ if ((0, os_1.platform)() != "win32") {
59
+ // node can't create symlinks over existing files, so we create symlinks with temp names,
60
+ // then rename to overwrite existing files
61
+ await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.pythonMajor}_`, "file");
62
+ await (0, promises_1.rename)(`${this.parent.executablePath}${this.pythonMajor}_`, `${this.parent.executablePath}${this.pythonMajor}`);
63
+ await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, "file");
64
+ await (0, promises_1.rename)(`${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}`);
65
+ // ensure the pip script is executable
66
+ await (0, promises_1.chmod)(this.parent.pipPath, 0o777);
67
+ await (0, promises_1.chmod)(`${this.parent.pipPath}.${this.pythonMinor}`, 0o777);
68
+ }
69
+ }
70
+ }
71
+ exports.default = GraalPyInstaller;
72
+ //# sourceMappingURL=graalpy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graalpy.js","sourceRoot":"","sources":["../src/graalpy.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- export declare class PortablePython {
2
- _version: string;
1
+ import { IPortablePython, IPortablePythonOptions } from "./types";
2
+ export declare class PortablePython implements IPortablePython {
3
+ private _version;
4
+ private _installer;
3
5
  implementation: string;
4
6
  distribution: string;
5
7
  installDir: string;
6
- constructor(version: string, installDir?: string | null, options?: any);
7
- private validateOptions;
8
+ constructor(version: string, installDir?: string | null, options?: IPortablePythonOptions);
8
9
  /**
9
10
  * Contains the path to the Python executable.
10
11
  */
package/dist/index.js CHANGED
@@ -5,69 +5,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.PortablePython = void 0;
7
7
  const fs_1 = require("fs");
8
+ const promises_1 = require("fs/promises");
8
9
  const path_1 = require("path");
9
- const os_1 = require("os");
10
10
  const stream_1 = require("stream");
11
- const promises_1 = require("stream/promises");
11
+ const promises_2 = require("stream/promises");
12
12
  const adm_zip_1 = __importDefault(require("adm-zip"));
13
- const packageJson = require("../package.json");
14
- const DL_PLATFORM = (() => {
15
- if ((0, os_1.platform)() == "win32") {
16
- return "windows";
17
- }
18
- if ((0, os_1.platform)() == "freebsd") {
19
- const releaseName = (0, os_1.release)();
20
- const releaseMajor = parseInt(releaseName.split(".")[0]);
21
- return `freebsd${releaseMajor}`;
22
- }
23
- return (0, os_1.platform)();
24
- })();
25
- const DL_ARCH = (() => {
26
- if (DL_PLATFORM == "darwin") {
27
- return "universal2";
28
- }
29
- switch ((0, os_1.arch)()) {
30
- case "ia32":
31
- return "i386";
32
- case "x64":
33
- return "x86_64";
34
- case "arm64":
35
- return "aarch64";
36
- }
37
- return (0, os_1.arch)();
38
- })();
39
- const VERSIONS = packageJson.portablePython;
40
- function getVersions(implementation) {
41
- const versions = VERSIONS[implementation].versions;
42
- if (!versions) {
43
- throw Error("unknown implementation");
44
- }
45
- return versions;
46
- }
47
- function getVersionBuilds(implementation) {
48
- const versionBuilds = VERSIONS[implementation].versionBuilds;
49
- if (!versionBuilds) {
50
- throw Error("unknown implementation");
51
- }
52
- return versionBuilds;
53
- }
54
- function pickVersion(implementation, version) {
55
- const versions = getVersions(implementation);
56
- for (let i = 0; i < versions.length; ++i) {
57
- // TODO: This doesn't handle semver correctly, e.g. 3.8.17 will match 3.8.1
58
- if (versions[i].startsWith(version)) {
59
- return versions[i];
60
- }
61
- }
62
- return null;
63
- }
13
+ const versions_1 = require("./versions");
14
+ const cpython_1 = __importDefault(require("./cpython"));
15
+ const graalpy_1 = __importDefault(require("./graalpy"));
16
+ const INSTALLERS = new Map([
17
+ ["cpython", cpython_1.default],
18
+ ["graalpy", graalpy_1.default],
19
+ ]);
64
20
  async function download(url, dest) {
65
21
  const res = await fetch(url);
66
22
  const file = (0, fs_1.createWriteStream)(dest);
67
- await (0, promises_1.finished)(stream_1.Readable.fromWeb(res.body).pipe(file));
23
+ await (0, promises_2.finished)(stream_1.Readable.fromWeb(res.body).pipe(file));
68
24
  }
69
25
  class PortablePython {
70
26
  _version;
27
+ _installer;
71
28
  implementation = "cpython";
72
29
  distribution = "auto";
73
30
  installDir = (0, path_1.dirname)(__dirname);
@@ -81,11 +38,19 @@ class PortablePython {
81
38
  if (options.distribution) {
82
39
  this.distribution = options.distribution;
83
40
  }
84
- this.validateOptions();
41
+ if (!INSTALLERS.has(this.implementation)) {
42
+ throw Error("invalid implementation");
43
+ }
44
+ const ctor = INSTALLERS.get(this.implementation);
45
+ this._installer = new ctor(this, {
46
+ implementation: this.implementation,
47
+ distribution: this.distribution,
48
+ });
49
+ this._installer.validateOptions();
85
50
  if (installDir) {
86
51
  this.installDir = installDir;
87
52
  }
88
- this._version = pickVersion(this.implementation, version);
53
+ this._version = (0, versions_1.pickVersion)(this.implementation, version);
89
54
  if (!this._version) {
90
55
  throw Error(`unknown version: ${version}`);
91
56
  }
@@ -93,34 +58,17 @@ class PortablePython {
93
58
  throw Error("no releases available for this version");
94
59
  }
95
60
  }
96
- validateOptions() {
97
- if (!["cpython", "graalpy"].includes(this.implementation)) {
98
- throw Error("invalid implementation");
99
- }
100
- if (!["auto", "cosmo"].includes(this.distribution)) {
101
- throw Error("invalid distribution");
102
- }
103
- if (this.implementation === "graalpy") {
104
- if (this.distribution !== "auto") {
105
- throw Error("invalid distribution selected for graalpy");
106
- }
107
- }
108
- }
109
61
  /**
110
62
  * Contains the path to the Python executable.
111
63
  */
112
64
  get executablePath() {
113
- return (0, path_1.join)(this.installDir, this.pythonDistributionName, "bin", "python" + (this.distribution === "cosmo" ? ".com" :
114
- ((0, os_1.platform)() === "win32" ? ".exe" : "")));
65
+ return (0, path_1.join)(this.installDir, this._installer.relativeExecutablePath);
115
66
  }
116
67
  /**
117
68
  * Contains the path to the bundled pip executable.
118
69
  */
119
70
  get pipPath() {
120
- if (this.distribution != "cosmo" && (0, os_1.platform)() === "win32") {
121
- return (0, path_1.join)(this.installDir, this.pythonDistributionName, "Scripts", `pip${this.major}.exe`);
122
- }
123
- return (0, path_1.join)(this.installDir, this.pythonDistributionName, "bin", `pip${this.major}`);
71
+ return (0, path_1.join)(this.installDir, this._installer.relativePipPath);
124
72
  }
125
73
  /**
126
74
  * Contains the selected Python version.
@@ -150,16 +98,13 @@ class PortablePython {
150
98
  * Contains the release tag that will be downloaded.
151
99
  */
152
100
  get releaseTag() {
153
- return getVersionBuilds(this.implementation)[this.version];
101
+ return (0, versions_1.getVersionBuilds)(this.implementation)[this.version];
154
102
  }
155
103
  /**
156
104
  * Contains the full name of the Python distribution.
157
105
  */
158
106
  get pythonDistributionName() {
159
- if (this.distribution === "cosmo") {
160
- return `python-${this.version}-cosmo-unknown`;
161
- }
162
- return `python-${this.version}-${DL_PLATFORM}-${DL_ARCH}`;
107
+ return this._installer.pythonDistributionName;
163
108
  }
164
109
  /**
165
110
  * Contains the path to the extracted Python distribution folder.
@@ -183,28 +128,11 @@ class PortablePython {
183
128
  if (this.isInstalled()) {
184
129
  return;
185
130
  }
186
- const postProcess = () => {
187
- if (!this.isInstalled()) {
188
- throw Error("something went wrong and the installation failed");
189
- }
190
- (0, fs_1.chmodSync)(this.executablePath, 0o777);
191
- if (this.distribution != "cosmo" && (0, os_1.platform)() != "win32") {
192
- // node can't create symlinks over existing files, so we create symlinks with temp names,
193
- // then rename to overwrite existing files
194
- (0, fs_1.symlinkSync)("python", `${this.executablePath}${this.major}_`, "file");
195
- (0, fs_1.renameSync)(`${this.executablePath}${this.major}_`, `${this.executablePath}${this.major}`);
196
- (0, fs_1.symlinkSync)("python", `${this.executablePath}${this.major}.${this.minor}_`, "file");
197
- (0, fs_1.renameSync)(`${this.executablePath}${this.major}.${this.minor}_`, `${this.executablePath}${this.major}.${this.minor}`);
198
- // ensure the pip script is executable
199
- (0, fs_1.chmodSync)(this.pipPath, 0o777);
200
- (0, fs_1.chmodSync)(`${this.pipPath}.${this.minor}`, 0o777);
201
- }
202
- };
203
- (0, fs_1.mkdirSync)(this.installDir, { recursive: true });
131
+ await (0, promises_1.mkdir)(this.installDir, { recursive: true });
204
132
  if (zipFile) {
205
133
  const zip = new adm_zip_1.default(zipFile);
206
134
  zip.extractAllTo(this.installDir, true);
207
- postProcess();
135
+ await this._installer.postInstall();
208
136
  return;
209
137
  }
210
138
  const url = `https://github.com/bjia56/portable-python/releases/download/${this.releaseTag}/${this.pythonDistributionName}.zip`;
@@ -213,8 +141,8 @@ class PortablePython {
213
141
  await download(url, downloadPath);
214
142
  const zip = new adm_zip_1.default(downloadPath);
215
143
  zip.extractAllTo(installDir, true);
216
- (0, fs_1.rmSync)(downloadPath);
217
- postProcess();
144
+ await (0, promises_1.rm)(downloadPath);
145
+ await this._installer.postInstall();
218
146
  }
219
147
  /**
220
148
  * Uninstalls the Python distribution.
@@ -223,14 +151,7 @@ class PortablePython {
223
151
  if (!this.isInstalled()) {
224
152
  return;
225
153
  }
226
- await new Promise((resolve, reject) => (0, fs_1.rm)(this.extractPath, { force: true, recursive: true }, (e) => {
227
- if (e) {
228
- reject(e);
229
- }
230
- else {
231
- resolve();
232
- }
233
- }));
154
+ await (0, promises_1.rm)(this.extractPath, { force: true, recursive: true });
234
155
  }
235
156
  }
236
157
  exports.PortablePython = PortablePython;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,2BAA8G;AAC9G,+BAAqC;AACrC,2BAA6C;AAC7C,mCAAkC;AAClC,8CAA2C;AAE3C,sDAA6B;AAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;IACtB,IAAI,IAAA,aAAQ,GAAE,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,IAAA,aAAQ,GAAE,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAA,YAAO,GAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,UAAU,YAAY,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,IAAA,aAAQ,GAAE,CAAC;AACtB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;IAClB,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,QAAQ,IAAA,SAAI,GAAE,EAAE,CAAC;QACjB,KAAK,MAAM;YACP,OAAO,MAAM,CAAC;QAClB,KAAK,KAAK;YACN,OAAO,QAAQ,CAAC;QACpB,KAAK,OAAO;YACR,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAA,SAAI,GAAE,CAAC;AAClB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC;AAE5C,SAAS,WAAW,CAAC,cAAsB;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,cAAsB;IAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC;IAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,cAAsB,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACvC,2EAA2E;QAC3E,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAA,sBAAiB,EAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAA,mBAAQ,EAAC,iBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAa,cAAc;IACvB,QAAQ,CAAQ;IAChB,cAAc,GAAW,SAAS,CAAA;IAClC,YAAY,GAAW,MAAM,CAAA;IAC7B,UAAU,GAAG,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC;IAEhC,YAAY,OAAe,EAAE,aAA4B,IAAI,EAAE,UAAe,EAAE;QAC5E,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,QAAQ,GAAG,CACxE,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC,IAAA,aAAQ,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CACzC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE,CAAC;YACzD,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACV,OAAO,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAW,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,IAAI,sBAAsB;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO,UAAU,IAAI,CAAC,OAAO,gBAAgB,CAAC;QAClD,CAAC;QACD,OAAO,UAAU,IAAI,CAAC,OAAO,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACX,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,WAAW;QACP,OAAO,IAAA,eAAU,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,UAAyB,IAAI;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACpE,CAAC;YAED,IAAA,cAAS,EAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,IAAI,IAAA,aAAQ,GAAE,IAAI,OAAO,EAAE,CAAC;gBACxD,yFAAyF;gBACzF,0CAA0C;gBAC1C,IAAA,gBAAW,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC;gBACtE,IAAA,eAAU,EAAC,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1F,IAAA,gBAAW,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC;gBACpF,IAAA,eAAU,EAAC,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAEtH,sCAAsC;gBACtC,IAAA,cAAS,EAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/B,IAAA,cAAS,EAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;QACL,CAAC,CAAA;QAED,IAAA,cAAS,EAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,iBAAM,CAAC,OAAO,CAAC,CAAC;YAChC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACvC,WAAW,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,+DAA+D,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,sBAAsB,MAAM,CAAA;QAC/H,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,sBAAsB,MAAM,CAAC,CAAC;QAEjF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,IAAI,iBAAM,CAAC,YAAY,CAAC,CAAC;QACrC,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAElC,IAAA,WAAM,EAAC,YAAY,CAAC,CAAC;QACrB,WAAW,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAA,OAAE,EAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YACtG,IAAI,CAAC,EAAE,CAAC;gBACJ,MAAM,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACJ,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;CAEJ;AArMD,wCAqMC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAmD;AACnD,0CAAwC;AACxC,+BAAqC;AACrC,mCAAkC;AAClC,8CAA2C;AAE3C,sDAA6B;AAG7B,yCAA2D;AAC3D,wDAAyC;AACzC,wDAAyC;AAEzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAuF;IAC7G,CAAC,SAAS,EAAE,iBAAgB,CAAC;IAC7B,CAAC,SAAS,EAAE,iBAAgB,CAAC;CAChC,CAAC,CAAC;AAEH,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAA,sBAAiB,EAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAA,mBAAQ,EAAC,iBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAa,cAAc;IACf,QAAQ,CAAQ;IAChB,UAAU,CAAY;IAC9B,cAAc,GAAW,SAAS,CAAA;IAClC,YAAY,GAAW,MAAM,CAAA;IAC7B,UAAU,GAAG,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC;IAEhC,YAAY,OAAe,EAAE,aAA4B,IAAI,EAAE,UAAkC,EAAE;QAC/F,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACvC,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAE,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;QAElC,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAW,EAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACV,OAAO,IAAA,2BAAgB,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAW,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,IAAI,sBAAsB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACX,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,WAAW;QACP,OAAO,IAAA,eAAU,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,UAAyB,IAAI;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,iBAAM,CAAC,OAAO,CAAC,CAAC;YAChC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACvC,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAA;YACnC,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,+DAA+D,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,sBAAsB,MAAM,CAAA;QAC/H,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,sBAAsB,MAAM,CAAC,CAAC;QAEjF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,IAAI,iBAAM,CAAC,YAAY,CAAC,CAAC;QACrC,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAElC,MAAM,IAAA,aAAE,EAAC,YAAY,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QACD,MAAM,IAAA,aAAE,EAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;CAEJ;AA5JD,wCA4JC"}
@@ -0,0 +1,29 @@
1
+ export interface IInstallerProps {
2
+ pythonDistributionName: string;
3
+ }
4
+ export interface IInstaller extends IInstallerProps {
5
+ relativeExecutablePath: string;
6
+ relativePipPath: string;
7
+ validateOptions(): void;
8
+ postInstall(): Promise<void>;
9
+ }
10
+ export interface IPortablePython extends IInstallerProps {
11
+ version: string;
12
+ major: string;
13
+ minor: string;
14
+ patch: string;
15
+ releaseTag: string;
16
+ implementation: string;
17
+ distribution: string;
18
+ installDir: string;
19
+ extractPath: string;
20
+ executablePath: string;
21
+ pipPath: string;
22
+ isInstalled(): boolean;
23
+ install(zipFile: string | null): Promise<void>;
24
+ uninstall(): Promise<void>;
25
+ }
26
+ export interface IPortablePythonOptions {
27
+ implementation?: string;
28
+ distribution?: string;
29
+ }
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare function getVersions(implementation: string): any;
2
+ export declare function getVersionBuilds(implementation: string): any;
3
+ export declare function pickVersion(implementation: string, version: string): any;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pickVersion = exports.getVersionBuilds = exports.getVersions = void 0;
4
+ const packageJson = require("../package.json");
5
+ const VERSIONS = packageJson.portablePython;
6
+ function getVersions(implementation) {
7
+ const versions = VERSIONS[implementation].versions;
8
+ if (!versions) {
9
+ throw Error("unknown implementation");
10
+ }
11
+ return versions;
12
+ }
13
+ exports.getVersions = getVersions;
14
+ function getVersionBuilds(implementation) {
15
+ const versionBuilds = VERSIONS[implementation].versionBuilds;
16
+ if (!versionBuilds) {
17
+ throw Error("unknown implementation");
18
+ }
19
+ return versionBuilds;
20
+ }
21
+ exports.getVersionBuilds = getVersionBuilds;
22
+ function pickVersion(implementation, version) {
23
+ const versions = getVersions(implementation);
24
+ for (let i = 0; i < versions.length; ++i) {
25
+ // TODO: This doesn't handle semver correctly, e.g. 3.8.17 will match 3.8.1
26
+ if (versions[i].startsWith(version)) {
27
+ return versions[i];
28
+ }
29
+ }
30
+ return null;
31
+ }
32
+ exports.pickVersion = pickVersion;
33
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":";;;AAAA,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC;AAE5C,SAAgB,WAAW,CAAC,cAAsB;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAND,kCAMC;AAED,SAAgB,gBAAgB,CAAC,cAAsB;IACnD,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC;IAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,aAAa,CAAC;AACzB,CAAC;AAND,4CAMC;AAED,SAAgB,WAAW,CAAC,cAAsB,EAAE,OAAe;IAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACvC,2EAA2E;QAC3E,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AATD,kCASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bjia56/portable-python",
3
- "version": "0.1.63",
3
+ "version": "0.1.65",
4
4
  "description": "Portable Python",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -64,12 +64,16 @@
64
64
  "3.10.14": "cpython-v3.10.14-build.5",
65
65
  "3.11.9": "cpython-v3.11.9-build.5",
66
66
  "3.12.3": "v3.12.3-build.3",
67
- "3.12.4": "cpython-v3.12.4-beta.1"
67
+ "3.12.4": "cpython-v3.12.4-build.2"
68
68
  }
69
69
  },
70
70
  "graalpy": {
71
- "versions": [],
72
- "versionBuilds": {}
71
+ "versions": [
72
+ "24.0.2"
73
+ ],
74
+ "versionBuilds": {
75
+ "24.0.2": "graalpy-v24.0.2-beta.0"
76
+ }
73
77
  }
74
78
  }
75
79
  }