@vercel/python 4.0.2 → 4.1.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 (2) hide show
  1. package/dist/index.js +121 -7
  2. package/package.json +9 -5
package/dist/index.js CHANGED
@@ -174,8 +174,8 @@ var require_isexe = __commonJS({
174
174
  // ../../node_modules/.pnpm/which@1.3.1/node_modules/which/which.js
175
175
  var require_which = __commonJS({
176
176
  "../../node_modules/.pnpm/which@1.3.1/node_modules/which/which.js"(exports, module2) {
177
- module2.exports = which;
178
- which.sync = whichSync;
177
+ module2.exports = which2;
178
+ which2.sync = whichSync;
179
179
  var isWindows = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys";
180
180
  var path = require("path");
181
181
  var COLON = isWindows ? ";" : ":";
@@ -206,7 +206,7 @@ var require_which = __commonJS({
206
206
  extExe: pathExtExe
207
207
  };
208
208
  }
209
- function which(cmd, opt, cb) {
209
+ function which2(cmd, opt, cb) {
210
210
  if (typeof opt === "function") {
211
211
  cb = opt;
212
212
  opt = {};
@@ -307,7 +307,7 @@ var require_resolveCommand = __commonJS({
307
307
  "../../node_modules/.pnpm/cross-spawn@6.0.5/node_modules/cross-spawn/lib/util/resolveCommand.js"(exports, module2) {
308
308
  "use strict";
309
309
  var path = require("path");
310
- var which = require_which();
310
+ var which2 = require_which();
311
311
  var pathKey = require_path_key()();
312
312
  function resolveCommandAttempt(parsed, withoutPathExt) {
313
313
  const cwd = process.cwd();
@@ -320,7 +320,7 @@ var require_resolveCommand = __commonJS({
320
320
  }
321
321
  let resolved;
322
322
  try {
323
- resolved = which.sync(parsed.command, {
323
+ resolved = which2.sync(parsed.command, {
324
324
  path: (parsed.options.env || process.env)[pathKey],
325
325
  pathExt: withoutPathExt ? path.delimiter : void 0
326
326
  });
@@ -2643,6 +2643,94 @@ ${stderr}${stdout}`;
2643
2643
  }
2644
2644
  });
2645
2645
 
2646
+ // ../../node_modules/.pnpm/which@3.0.0/node_modules/which/lib/index.js
2647
+ var require_lib = __commonJS({
2648
+ "../../node_modules/.pnpm/which@3.0.0/node_modules/which/lib/index.js"(exports, module2) {
2649
+ var isexe = require_isexe();
2650
+ var { join: join2, delimiter, sep, posix } = require("path");
2651
+ var isWindows = process.platform === "win32";
2652
+ var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
2653
+ var rRel = new RegExp(`^\\.${rSlash.source}`);
2654
+ var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" });
2655
+ var getPathInfo = (cmd, {
2656
+ path: optPath = process.env.PATH,
2657
+ pathExt: optPathExt = process.env.PATHEXT,
2658
+ delimiter: optDelimiter = delimiter
2659
+ }) => {
2660
+ const pathEnv = cmd.match(rSlash) ? [""] : [
2661
+ // windows always checks the cwd first
2662
+ ...isWindows ? [process.cwd()] : [],
2663
+ ...(optPath || /* istanbul ignore next: very unusual */
2664
+ "").split(optDelimiter)
2665
+ ];
2666
+ if (isWindows) {
2667
+ const pathExtExe = optPathExt || [".EXE", ".CMD", ".BAT", ".COM"].join(optDelimiter);
2668
+ const pathExt = pathExtExe.split(optDelimiter);
2669
+ if (cmd.includes(".") && pathExt[0] !== "") {
2670
+ pathExt.unshift("");
2671
+ }
2672
+ return { pathEnv, pathExt, pathExtExe };
2673
+ }
2674
+ return { pathEnv, pathExt: [""] };
2675
+ };
2676
+ var getPathPart = (raw, cmd) => {
2677
+ const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
2678
+ const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
2679
+ return prefix + join2(pathPart, cmd);
2680
+ };
2681
+ var which2 = async (cmd, opt = {}) => {
2682
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
2683
+ const found = [];
2684
+ for (const envPart of pathEnv) {
2685
+ const p = getPathPart(envPart, cmd);
2686
+ for (const ext of pathExt) {
2687
+ const withExt = p + ext;
2688
+ const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });
2689
+ if (is) {
2690
+ if (!opt.all) {
2691
+ return withExt;
2692
+ }
2693
+ found.push(withExt);
2694
+ }
2695
+ }
2696
+ }
2697
+ if (opt.all && found.length) {
2698
+ return found;
2699
+ }
2700
+ if (opt.nothrow) {
2701
+ return null;
2702
+ }
2703
+ throw getNotFoundError(cmd);
2704
+ };
2705
+ var whichSync = (cmd, opt = {}) => {
2706
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
2707
+ const found = [];
2708
+ for (const pathEnvPart of pathEnv) {
2709
+ const p = getPathPart(pathEnvPart, cmd);
2710
+ for (const ext of pathExt) {
2711
+ const withExt = p + ext;
2712
+ const is = isexe.sync(withExt, { pathExt: pathExtExe, ignoreErrors: true });
2713
+ if (is) {
2714
+ if (!opt.all) {
2715
+ return withExt;
2716
+ }
2717
+ found.push(withExt);
2718
+ }
2719
+ }
2720
+ }
2721
+ if (opt.all && found.length) {
2722
+ return found;
2723
+ }
2724
+ if (opt.nothrow) {
2725
+ return null;
2726
+ }
2727
+ throw getNotFoundError(cmd);
2728
+ };
2729
+ module2.exports = which2;
2730
+ which2.sync = whichSync;
2731
+ }
2732
+ });
2733
+
2646
2734
  // src/index.ts
2647
2735
  var src_exports = {};
2648
2736
  __export(src_exports, {
@@ -2762,7 +2850,20 @@ async function installRequirementsFile({
2762
2850
 
2763
2851
  // src/version.ts
2764
2852
  var import_build_utils2 = require("@vercel/build-utils");
2853
+ var import_which = __toESM(require_lib());
2765
2854
  var allOptions = [
2855
+ {
2856
+ version: "3.11",
2857
+ pipPath: "pip3.11",
2858
+ pythonPath: "python3.11",
2859
+ runtime: "python3.11"
2860
+ },
2861
+ {
2862
+ version: "3.10",
2863
+ pipPath: "pip3.10",
2864
+ pythonPath: "python3.10",
2865
+ runtime: "python3.10"
2866
+ },
2766
2867
  {
2767
2868
  version: "3.9",
2768
2869
  pipPath: "pip3.9",
@@ -2791,7 +2892,15 @@ function getLatestPythonVersion({
2791
2892
  if (isDev) {
2792
2893
  return getDevPythonVersion();
2793
2894
  }
2794
- return allOptions[0];
2895
+ const selection = allOptions.find(isInstalled2);
2896
+ if (!selection) {
2897
+ throw new import_build_utils2.NowBuildError({
2898
+ code: "PYTHON_NOT_FOUND",
2899
+ link: "http://vercel.link/python-version",
2900
+ message: `Unable to find any supported Python versions.`
2901
+ });
2902
+ }
2903
+ return selection;
2795
2904
  }
2796
2905
  function getSupportedPythonVersion({
2797
2906
  isDev,
@@ -2802,7 +2911,9 @@ function getSupportedPythonVersion({
2802
2911
  }
2803
2912
  let selection = getLatestPythonVersion({ isDev: false });
2804
2913
  if (typeof pipLockPythonVersion === "string") {
2805
- const found = allOptions.find((o) => o.version === pipLockPythonVersion);
2914
+ const found = allOptions.find(
2915
+ (o) => o.version === pipLockPythonVersion && isInstalled2(o)
2916
+ );
2806
2917
  if (found) {
2807
2918
  selection = found;
2808
2919
  } else {
@@ -2830,6 +2941,9 @@ function isDiscontinued({ discontinueDate }) {
2830
2941
  const today = Date.now();
2831
2942
  return discontinueDate !== void 0 && discontinueDate.getTime() <= today;
2832
2943
  }
2944
+ function isInstalled2({ pipPath, pythonPath }) {
2945
+ return Boolean(import_which.default.sync(pipPath, { nothrow: true })) && Boolean(import_which.default.sync(pythonPath, { nothrow: true }));
2946
+ }
2833
2947
 
2834
2948
  // src/index.ts
2835
2949
  var readFile = (0, import_util.promisify)(import_fs.default.readFile);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/python",
3
- "version": "4.0.2",
3
+ "version": "4.1.0",
4
4
  "main": "./dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://vercel.com/docs/runtimes#official-runtimes/python",
@@ -15,17 +15,21 @@
15
15
  },
16
16
  "devDependencies": {
17
17
  "@types/execa": "^0.9.0",
18
+ "@types/fs-extra": "11.0.2",
18
19
  "@types/jest": "27.4.1",
19
20
  "@types/node": "14.18.33",
20
- "@vercel/build-utils": "7.2.1",
21
- "@vercel/ncc": "0.24.0",
21
+ "@types/which": "3.0.0",
22
+ "@vercel/build-utils": "7.2.2",
22
23
  "execa": "^1.0.0",
23
- "jest-junit": "16.0.0"
24
+ "fs-extra": "11.1.1",
25
+ "jest-junit": "16.0.0",
26
+ "which": "3.0.0"
24
27
  },
25
28
  "scripts": {
26
29
  "build": "node ../../utils/build-builder.mjs",
27
30
  "test": "jest --reporters=default --reporters=jest-junit --env node --verbose --runInBand --bail",
28
31
  "test-unit": "pnpm test test/unit.test.ts",
29
- "test-e2e": "pnpm test test/integration-*"
32
+ "test-e2e": "pnpm test test/integration-*",
33
+ "type-check": "tsc --noEmit"
30
34
  }
31
35
  }