UNPKG

2.91 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const fs_1 = __importDefault(require("fs"));
7/**
8 * Parses a value and converts it to a Map (recursively) if it is a plain JavaScript object, otherwise just return the
9 * value
10 */
11function valueToMap(value) {
12 if (!Array.isArray(value) && typeof value === 'object') {
13 let m = new Map();
14 for (let key in value) {
15 if (!value.hasOwnProperty(key)) {
16 continue;
17 }
18 m.set(key, valueToMap(value[key]));
19 }
20 return m;
21 }
22 return value;
23}
24/**
25 * An object that looks up if any system packages are required for a Python package.
26 * The lookup is in the format {packageName: pythonVersion: systemPackageType: systemVersion: [sysPackage, sysPackage...]}
27 */
28class PythonSystemPackageLookup {
29 /**
30 * @param packageLookup: PythonSystemPackageLookupMap the Map
31 */
32 constructor(packageLookup) {
33 this.packageLookup = packageLookup;
34 }
35 /**
36 * Construct a `PythonSystemPackageLookup` by parsing a JSON representation of the package map from `path`
37 */
38 static fromFile(path) {
39 const dependencyLookupRaw = JSON.parse(fs_1.default.readFileSync(path, 'utf8'));
40 return new PythonSystemPackageLookup(valueToMap(dependencyLookupRaw));
41 }
42 /**
43 * Look up the system package required for a python package given python version, package type and system version.
44 * Will always return an Array, which will be empty if there are no packages to install.
45 */
46 lookupSystemPackage(pythonPackage, pythonMajorVersion, systemPackageType, systemVersion) {
47 const pyPackageMap = this.packageLookup.get(pythonPackage);
48 if (!pyPackageMap) {
49 return [];
50 }
51 const pyVersionStr = `${pythonMajorVersion}`;
52 let pyVersionMap;
53 if (pyPackageMap.has(pyVersionStr)) {
54 pyVersionMap = pyPackageMap.get(pyVersionStr);
55 }
56 else {
57 pyVersionMap = pyPackageMap.get('default');
58 }
59 if (!pyVersionMap) {
60 return [];
61 }
62 let systemVersionMap;
63 if (pyVersionMap.has(systemPackageType)) {
64 systemVersionMap = pyVersionMap.get(systemPackageType);
65 }
66 else {
67 systemVersionMap = pyVersionMap.get('default');
68 }
69 if (!systemVersionMap) {
70 return [];
71 }
72 let systemPackages;
73 if (systemVersionMap.has(systemVersion)) {
74 systemPackages = systemVersionMap.get(systemVersion);
75 }
76 else {
77 systemPackages = systemVersionMap.get('default');
78 }
79 return systemPackages || [];
80 }
81}
82exports.default = PythonSystemPackageLookup;