@dxworks/depinder 0.1.1

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 (98) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -0
  3. package/dist/assets/.gitkeep +0 -0
  4. package/dist/assets/depinder.docker-compose.yml +68 -0
  5. package/dist/assets/init-mongo.d.ts +0 -0
  6. package/dist/assets/init-mongo.js +16 -0
  7. package/dist/assets/init-mongo.js.map +1 -0
  8. package/dist/cache/cache.d.ts +9 -0
  9. package/dist/cache/cache.js +18 -0
  10. package/dist/cache/cache.js.map +1 -0
  11. package/dist/cache/json-cache.d.ts +2 -0
  12. package/dist/cache/json-cache.js +45 -0
  13. package/dist/cache/json-cache.js.map +1 -0
  14. package/dist/cache/mongo-cache.d.ts +5 -0
  15. package/dist/cache/mongo-cache.js +97 -0
  16. package/dist/cache/mongo-cache.js.map +1 -0
  17. package/dist/commands/analyse.d.ts +8 -0
  18. package/dist/commands/analyse.js +215 -0
  19. package/dist/commands/analyse.js.map +1 -0
  20. package/dist/commands/cache.d.ts +11 -0
  21. package/dist/commands/cache.js +83 -0
  22. package/dist/commands/cache.js.map +1 -0
  23. package/dist/commands/info.d.ts +0 -0
  24. package/dist/commands/info.js +190 -0
  25. package/dist/commands/info.js.map +1 -0
  26. package/dist/commands/update.d.ts +3 -0
  27. package/dist/commands/update.js +85 -0
  28. package/dist/commands/update.js.map +1 -0
  29. package/dist/depinder.d.ts +2 -0
  30. package/dist/depinder.js +16 -0
  31. package/dist/depinder.js.map +1 -0
  32. package/dist/extension-points/code-impact.d.ts +14 -0
  33. package/dist/extension-points/code-impact.js +3 -0
  34. package/dist/extension-points/code-impact.js.map +1 -0
  35. package/dist/extension-points/extract.d.ts +36 -0
  36. package/dist/extension-points/extract.js +3 -0
  37. package/dist/extension-points/extract.js.map +1 -0
  38. package/dist/extension-points/plugin-loader.d.ts +2 -0
  39. package/dist/extension-points/plugin-loader.js +18 -0
  40. package/dist/extension-points/plugin-loader.js.map +1 -0
  41. package/dist/extension-points/plugin.d.ts +13 -0
  42. package/dist/extension-points/plugin.js +3 -0
  43. package/dist/extension-points/plugin.js.map +1 -0
  44. package/dist/extension-points/registrar.d.ts +41 -0
  45. package/dist/extension-points/registrar.js +59 -0
  46. package/dist/extension-points/registrar.js.map +1 -0
  47. package/dist/extension-points/vulnerability-checker.d.ts +21 -0
  48. package/dist/extension-points/vulnerability-checker.js +3 -0
  49. package/dist/extension-points/vulnerability-checker.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.js +7 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/info/php/parser.d.ts +80 -0
  54. package/dist/info/php/parser.js +61 -0
  55. package/dist/info/php/parser.js.map +1 -0
  56. package/dist/plugins/dotnet/index.d.ts +11 -0
  57. package/dist/plugins/dotnet/index.js +146 -0
  58. package/dist/plugins/dotnet/index.js.map +1 -0
  59. package/dist/plugins/index.d.ts +3 -0
  60. package/dist/plugins/index.js +35 -0
  61. package/dist/plugins/index.js.map +1 -0
  62. package/dist/plugins/java/google.registrar.d.ts +0 -0
  63. package/dist/plugins/java/google.registrar.js +59 -0
  64. package/dist/plugins/java/google.registrar.js.map +1 -0
  65. package/dist/plugins/java/index.d.ts +7 -0
  66. package/dist/plugins/java/index.js +152 -0
  67. package/dist/plugins/java/index.js.map +1 -0
  68. package/dist/plugins/java/parsers/maven.d.ts +2 -0
  69. package/dist/plugins/java/parsers/maven.js +51 -0
  70. package/dist/plugins/java/parsers/maven.js.map +1 -0
  71. package/dist/plugins/javascript/index.d.ts +4 -0
  72. package/dist/plugins/javascript/index.js +151 -0
  73. package/dist/plugins/javascript/index.js.map +1 -0
  74. package/dist/plugins/php/index.d.ts +9 -0
  75. package/dist/plugins/php/index.js +131 -0
  76. package/dist/plugins/php/index.js.map +1 -0
  77. package/dist/plugins/php/php-interfaces.d.ts +117 -0
  78. package/dist/plugins/php/php-interfaces.js +67 -0
  79. package/dist/plugins/php/php-interfaces.js.map +1 -0
  80. package/dist/plugins/python/index.d.ts +15 -0
  81. package/dist/plugins/python/index.js +235 -0
  82. package/dist/plugins/python/index.js.map +1 -0
  83. package/dist/plugins/ruby/index.d.ts +4 -0
  84. package/dist/plugins/ruby/index.js +142 -0
  85. package/dist/plugins/ruby/index.js.map +1 -0
  86. package/dist/utils/blacklist.d.ts +1 -0
  87. package/dist/utils/blacklist.js +13 -0
  88. package/dist/utils/blacklist.js.map +1 -0
  89. package/dist/utils/npm.d.ts +8 -0
  90. package/dist/utils/npm.js +19 -0
  91. package/dist/utils/npm.js.map +1 -0
  92. package/dist/utils/utils.d.ts +10 -0
  93. package/dist/utils/utils.js +58 -0
  94. package/dist/utils/utils.js.map +1 -0
  95. package/dist/utils/vulnerabilities.d.ts +5 -0
  96. package/dist/utils/vulnerabilities.js +103 -0
  97. package/dist/utils/vulnerabilities.js.map +1 -0
  98. package/package.json +109 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.php = exports.PackagistRegistrar = exports.parseComposerLockFile = exports.parseComposerFile = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const registrar_1 = require("../../extension-points/registrar");
10
+ const php_interfaces_1 = require("./php-interfaces");
11
+ const utils_1 = require("../../utils/utils");
12
+ const extractor = {
13
+ files: ['composer.json', 'composer.lock'],
14
+ createContexts: files => {
15
+ return files.filter(it => it.endsWith('composer.lock')).map(it => ({
16
+ root: path_1.default.dirname(it),
17
+ lockFile: path_1.default.basename(it),
18
+ manifestFile: 'composer.json',
19
+ }));
20
+ },
21
+ filter: it => !it.includes('/vendor'),
22
+ };
23
+ function parseComposerFile(file) {
24
+ return JSON.parse(fs_1.default.readFileSync(file).toString());
25
+ }
26
+ exports.parseComposerFile = parseComposerFile;
27
+ function parseComposerLockFile(file) {
28
+ return JSON.parse(fs_1.default.readFileSync(file).toString());
29
+ }
30
+ exports.parseComposerLockFile = parseComposerLockFile;
31
+ const parser = {
32
+ parseDependencyTree: parseLockFile,
33
+ };
34
+ async function parseLockFile({ root, manifestFile, lockFile }) {
35
+ var _a;
36
+ if (!manifestFile) {
37
+ throw new Error('No manifest file found!');
38
+ }
39
+ const composer = parseComposerFile(path_1.default.join(root, manifestFile));
40
+ let dependencies;
41
+ if (lockFile) {
42
+ const composerLock = parseComposerLockFile(path_1.default.join(root, lockFile));
43
+ dependencies = composerLock.packages.map(it => {
44
+ const name = it.name;
45
+ const version = it.version;
46
+ const id = `${name}@${version}`;
47
+ const semver = (0, utils_1.getPackageSemver)(version !== null && version !== void 0 ? version : '');
48
+ const type = 'prod';
49
+ const requestedBy = [];
50
+ return {
51
+ id,
52
+ name,
53
+ version,
54
+ semver,
55
+ type,
56
+ requestedBy,
57
+ };
58
+ }).reduce((acc, it) => {
59
+ acc[it.id] = it;
60
+ return acc;
61
+ }, {});
62
+ const allLibs = Object.values(dependencies);
63
+ composerLock.packages.forEach(it => {
64
+ var _a;
65
+ Object.keys((_a = it.require) !== null && _a !== void 0 ? _a : {}).forEach(name => {
66
+ const dep = allLibs.find(lib => lib.name === name);
67
+ if (dep) {
68
+ dep.requestedBy.push(it.name);
69
+ }
70
+ });
71
+ });
72
+ Object.keys((_a = composer.require) !== null && _a !== void 0 ? _a : {}).forEach(name => {
73
+ const dep = allLibs.find(lib => lib.name === name);
74
+ if (dep) {
75
+ dep.requestedBy.push(`${composer.name}@${composer.version}`);
76
+ }
77
+ });
78
+ }
79
+ if (dependencies == null) {
80
+ // get dependencies from composer.json
81
+ dependencies = {};
82
+ }
83
+ return {
84
+ name: composer.name,
85
+ version: composer.version || '',
86
+ path: root,
87
+ dependencies,
88
+ };
89
+ }
90
+ class PackagistRegistrar extends registrar_1.AbstractRegistrar {
91
+ async retrieveFromRegistry(libraryName) {
92
+ var _a;
93
+ const response = await (0, php_interfaces_1.getPackageDetails)(libraryName);
94
+ const latestVersion = (_a = Object.values(response.versions)
95
+ .filter((it) => !it.version.includes('dev'))
96
+ .sort((a, b) => {
97
+ return Date.parse(b.time) - Date.parse(a.time);
98
+ })[0]) === null || _a === void 0 ? void 0 : _a.version;
99
+ return {
100
+ name: response.name,
101
+ versions: Object.values(response.versions).map((it) => {
102
+ return {
103
+ version: it.version,
104
+ timestamp: Date.parse(it.time),
105
+ licenses: it.license,
106
+ latest: it.version === latestVersion,
107
+ };
108
+ }),
109
+ description: response.description,
110
+ issuesUrl: [],
111
+ licenses: [...new Set(Object.values(response.versions).flatMap((it) => it.license).filter((it) => it != null))],
112
+ reposUrl: [],
113
+ keywords: [],
114
+ };
115
+ }
116
+ }
117
+ exports.PackagistRegistrar = PackagistRegistrar;
118
+ const phpRegistrar = new PackagistRegistrar(new registrar_1.LibrariesIORegistrar('packagist'));
119
+ const checker = {
120
+ githubSecurityAdvisoryEcosystem: 'COMPOSER',
121
+ getPURL: (lib, ver) => `pkg:composer/${lib.replace('@', '%40')}@${ver}`,
122
+ };
123
+ exports.php = {
124
+ name: 'php',
125
+ aliases: ['composer'],
126
+ extractor,
127
+ parser,
128
+ registrar: phpRegistrar,
129
+ checker,
130
+ };
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/php/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ export interface IPackagistPackageSource {
2
+ type: string;
3
+ url: string;
4
+ reference: string;
5
+ shasum?: string;
6
+ }
7
+ export interface IPackagistPackageVersionDetails {
8
+ name: string;
9
+ description: string;
10
+ time: string;
11
+ keywords: [string];
12
+ homepage: string;
13
+ version: string;
14
+ version_normalzed: string;
15
+ license: string[];
16
+ authors: [
17
+ {
18
+ name: string;
19
+ email: string;
20
+ homepage?: string;
21
+ role?: string;
22
+ }
23
+ ];
24
+ source: IPackagistPackageSource;
25
+ dist: IPackagistPackageSource;
26
+ type: string;
27
+ uid: number;
28
+ autoload?: {
29
+ [key: string]: {
30
+ [key: string]: string;
31
+ };
32
+ };
33
+ require?: {
34
+ [key: string]: string;
35
+ };
36
+ 'require-dev'?: {
37
+ [key: string]: string;
38
+ };
39
+ suggest?: {
40
+ [key: string]: string;
41
+ };
42
+ extra?: {
43
+ [key: string]: string;
44
+ };
45
+ provide?: {
46
+ [key: string]: string;
47
+ };
48
+ [key: string]: any;
49
+ }
50
+ export interface IPackagistMetadataResponse {
51
+ packages?: {
52
+ [packageName: string]: {
53
+ [version: string]: IPackagistPackageVersionDetails;
54
+ };
55
+ };
56
+ }
57
+ export type VendorPackageInput = string | {
58
+ vendor: string;
59
+ package: string;
60
+ };
61
+ /**
62
+ * Checkout "Using the Composer metadata" @ {@link https://packagist.org/apidoc#get-package-data} for more info.
63
+ *
64
+ * @param vp VendorPackageInput
65
+ * @param ifModifiedSince If included the endpoint only returns data
66
+ * if it has changed since this date stamp in time.
67
+ *
68
+ */
69
+ export declare function getPackageMetadata(vp: VendorPackageInput, ifModifiedSince?: string): Promise<{
70
+ data: IPackagistMetadataResponse;
71
+ lastModified: string;
72
+ }>;
73
+ export interface IPackagistPackageDetails {
74
+ name: string;
75
+ description: string;
76
+ time: string;
77
+ maintainers: {
78
+ name: string;
79
+ avatar_url: string;
80
+ };
81
+ versions: {
82
+ [version: string]: IPackagistPackageVersionDetails;
83
+ };
84
+ type: string;
85
+ repository: string;
86
+ github_starts?: number;
87
+ github_watchers?: number;
88
+ github_forks?: number;
89
+ github_open_issues?: number;
90
+ language?: string;
91
+ dependents: number;
92
+ suggesters: number;
93
+ downloads: {
94
+ total: number;
95
+ monthly: number;
96
+ daily: number;
97
+ };
98
+ favers: number;
99
+ }
100
+ export interface IPackagistPackageDetailResponse {
101
+ package: IPackagistPackageDetails;
102
+ }
103
+ /**
104
+ * Checkout "Using the API" @ {@link https://packagist.org/apidoc#get-package-data} for more info.
105
+ */
106
+ export declare function getPackageDetails(vp: VendorPackageInput): Promise<IPackagistPackageDetails>;
107
+ export interface IPackagistStatistics {
108
+ totals: {
109
+ downloads: number;
110
+ packages: number;
111
+ version: number;
112
+ };
113
+ }
114
+ /**
115
+ * Checkout {@link https://packagist.org/apidoc#get-statistics} for more info.
116
+ */
117
+ export declare function getPackagistStats(): Promise<IPackagistStatistics>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPackagistStats = exports.getPackageDetails = exports.getPackageMetadata = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ /**
9
+ * Checkout "Using the Composer metadata" @ {@link https://packagist.org/apidoc#get-package-data} for more info.
10
+ *
11
+ * @param vp VendorPackageInput
12
+ * @param ifModifiedSince If included the endpoint only returns data
13
+ * if it has changed since this date stamp in time.
14
+ *
15
+ */
16
+ async function getPackageMetadata(vp, ifModifiedSince = '') {
17
+ try {
18
+ const response = await axios_1.default.get(`https://repo.packagist.org/p/${constructVPString(vp)}.json`, {
19
+ headers: { 'if-modified-since': ifModifiedSince },
20
+ });
21
+ return { data: response.data, lastModified: response.headers['last-modified'] };
22
+ }
23
+ catch (e) {
24
+ if (e && e.response && e.response.status === 304) {
25
+ return { data: {}, lastModified: e.response.headers['last-modified'] };
26
+ }
27
+ throw e;
28
+ }
29
+ }
30
+ exports.getPackageMetadata = getPackageMetadata;
31
+ /**
32
+ * Checkout "Using the API" @ {@link https://packagist.org/apidoc#get-package-data} for more info.
33
+ */
34
+ async function getPackageDetails(vp) {
35
+ var _a;
36
+ console.log(`Getting info for ${vp}`);
37
+ try {
38
+ const response = await axios_1.default.get(`https://packagist.org/packages/${constructVPString(vp)}.json`);
39
+ return (_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.package;
40
+ }
41
+ catch (e) {
42
+ console.warn(`Packagist could not find package ${constructVPString(vp)}`);
43
+ console.error(e.message, e.stack);
44
+ throw e;
45
+ }
46
+ }
47
+ exports.getPackageDetails = getPackageDetails;
48
+ function constructVPString(vp) {
49
+ if (typeof vp === 'string') {
50
+ return vp;
51
+ }
52
+ else if (typeof vp === 'object') {
53
+ return `${vp.vendor}/${vp.package}`;
54
+ }
55
+ else {
56
+ throw Error('Requires string ("[vendor]/[package]") or object({vendor: [vendor], package: [package]})');
57
+ }
58
+ }
59
+ /**
60
+ * Checkout {@link https://packagist.org/apidoc#get-statistics} for more info.
61
+ */
62
+ async function getPackagistStats() {
63
+ const response = await axios_1.default.get('https://packagist.org/statistics.json');
64
+ return response.data;
65
+ }
66
+ exports.getPackagistStats = getPackagistStats;
67
+ //# sourceMappingURL=php-interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php-interfaces.js","sourceRoot":"","sources":["../../../src/plugins/php/php-interfaces.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AA8DzB;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CACpC,EAAsB,EACtB,eAAe,GAAG,EAAE;IAEpB,IAAI;QACA,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,gCAAgC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE;YAC3F,OAAO,EAAE,EAAC,mBAAmB,EAAE,eAAe,EAAC;SAClD,CAAC,CAAA;QAEF,OAAO,EAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAC,CAAA;KAChF;IAAC,OAAO,CAAM,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC9C,OAAO,EAAC,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAC,CAAA;SACvE;QAED,MAAM,CAAC,CAAA;KACV;AACL,CAAC;AAjBD,gDAiBC;AAkCD;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACnC,EAAsB;;IAEtB,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;IACrC,IAAI;QACA,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,kCAAkC,iBAAiB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QAChG,OAAO,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,0CAAE,OAAO,CAAA;KACjC;IAAC,OAAO,CAAM,EAAE;QACb,OAAO,CAAC,IAAI,CAAC,oCAAoC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACzE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,CAAC,CAAA;KACV;AACL,CAAC;AAZD,8CAYC;AAED,SAAS,iBAAiB,CAAC,EAAsB;IAC7C,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QACxB,OAAO,EAAE,CAAA;KACZ;SAAM,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QAC/B,OAAO,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;KACtC;SAAM;QACH,MAAM,KAAK,CACP,0FAA0F,CAC7F,CAAA;KACJ;AACL,CAAC;AAUD;;GAEG;AACI,KAAK,UAAU,iBAAiB;IACnC,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;IAEzE,OAAO,QAAQ,CAAC,IAAI,CAAA;AACxB,CAAC;AAJD,8CAIC"}
@@ -0,0 +1,15 @@
1
+ import { Registrar } from '../../extension-points/registrar';
2
+ import { Plugin } from '../../extension-points/plugin';
3
+ interface DepTreeNode {
4
+ key: string;
5
+ package_name: string;
6
+ installed_version: string;
7
+ required_version?: string;
8
+ }
9
+ export interface DepTreeEntry {
10
+ package: DepTreeNode;
11
+ dependencies: DepTreeNode[];
12
+ }
13
+ export declare const pythonRegistrar: Registrar;
14
+ export declare const python: Plugin;
15
+ export {};
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.python = exports.pythonRegistrar = void 0;
30
+ // @ts-ignore
31
+ const path_1 = __importDefault(require("path"));
32
+ const registrar_1 = require("../../extension-points/registrar");
33
+ const node_fetch_1 = __importDefault(require("node-fetch"));
34
+ const fs_1 = __importDefault(require("fs"));
35
+ const moment_1 = __importDefault(require("moment"));
36
+ const cli_common_1 = require("@dxworks/cli-common");
37
+ const child_process_1 = require("child_process");
38
+ const toml = __importStar(require("toml"));
39
+ const utils_1 = require("../../utils/utils");
40
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
41
+ const extractor = {
42
+ files: ['requirements.txt', 'setup.py', 'Pipfile', 'Pipfile.lock', 'pyproject.toml', 'poetry.lock'],
43
+ createContexts: files => {
44
+ const pipEnvContexts = files.filter(it => it.endsWith('Pipfile.lock')).map(it => ({
45
+ root: path_1.default.dirname(it),
46
+ lockFile: path_1.default.basename(it),
47
+ manifestFile: 'Pipfile',
48
+ }));
49
+ const justPipFiles = files.filter(it => it.endsWith('Pipfile'))
50
+ .filter(packageFile => !pipEnvContexts.some(it => it.root == path_1.default.dirname(packageFile)))
51
+ .map(it => ({
52
+ root: path_1.default.dirname(it),
53
+ manifestFile: 'Pipfile',
54
+ }))
55
+ .map(context => {
56
+ try {
57
+ cli_common_1.log.info(`Trying to generate lock file for ${context.root}`);
58
+ (0, child_process_1.execSync)('pipenv lock', { cwd: context.root });
59
+ return Object.assign(Object.assign({}, context), { lockFile: path_1.default.resolve(context.root, 'Pipfile.lock') });
60
+ }
61
+ catch (e) {
62
+ cli_common_1.log.error(e);
63
+ return null;
64
+ }
65
+ })
66
+ .filter(it => it !== null)
67
+ .map(it => it);
68
+ return [...pipEnvContexts, ...justPipFiles].map(context => {
69
+ try {
70
+ if (!fs_1.default.existsSync(path_1.default.resolve(context.root, 'PipTree.json'))) {
71
+ (0, child_process_1.execSync)('pipenv install', { cwd: context.root });
72
+ const tree = (0, child_process_1.execSync)('pipenv graph --json', { cwd: context.root }).toString();
73
+ fs_1.default.writeFileSync(path_1.default.resolve(context.root, 'PipTree.json'), tree);
74
+ }
75
+ return Object.assign(Object.assign({}, context), { tree: path_1.default.resolve(context.root, 'PipTree.json') });
76
+ }
77
+ catch (e) {
78
+ cli_common_1.log.error(`Could not generate pipenv tree for project ${context.root}`, e);
79
+ return context;
80
+ }
81
+ });
82
+ },
83
+ };
84
+ const parser = {
85
+ parseDependencyTree: parseLockFile,
86
+ };
87
+ function transformDeps(tree) {
88
+ const cache = new Map();
89
+ function handleNode(node) {
90
+ const id = `${node.package_name}@${node.installed_version}`;
91
+ if (!cache.has(id)) {
92
+ const newNode = {
93
+ id,
94
+ version: node.installed_version,
95
+ name: node.package_name,
96
+ requestedBy: [],
97
+ semver: (0, utils_1.getPackageSemver)(node.installed_version),
98
+ };
99
+ cache.set(id, newNode);
100
+ return newNode;
101
+ }
102
+ else {
103
+ return cache.get(id);
104
+ }
105
+ }
106
+ tree.forEach(entry => {
107
+ const node = handleNode(entry.package);
108
+ entry.dependencies.forEach(dep => {
109
+ const depNode = handleNode(dep);
110
+ depNode.requestedBy.push(node.id);
111
+ });
112
+ });
113
+ return Object.fromEntries(cache);
114
+ }
115
+ function parseLockFile(context) {
116
+ const projName = path_1.default.basename(context.root);
117
+ let directDeps = [];
118
+ if (context.manifestFile === 'Pipfile') {
119
+ try {
120
+ const pipfile = toml.parse(fs_1.default.readFileSync(path_1.default.resolve(context.root, context.manifestFile)).toString());
121
+ directDeps = Object.keys(pipfile.packages);
122
+ }
123
+ catch (e) {
124
+ cli_common_1.log.error(e);
125
+ }
126
+ let dependencies = {};
127
+ // @ts-ignore
128
+ const treePath = context.tree;
129
+ if (treePath) {
130
+ const tree = JSON.parse(fs_1.default.readFileSync(treePath).toString());
131
+ dependencies = transformDeps(tree);
132
+ }
133
+ else {
134
+ const lockFile = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(context.root, context.lockFile)).toString());
135
+ dependencies = Object.entries(lockFile.default).map(([name, obj]) => {
136
+ var _a, _b;
137
+ const version = (_b = (_a = obj.version) === null || _a === void 0 ? void 0 : _a.replace('==', '')) !== null && _b !== void 0 ? _b : '';
138
+ return {
139
+ name,
140
+ id: `${name}@${version}`,
141
+ version: version,
142
+ path: context.root,
143
+ dependencies: {},
144
+ type: 'production',
145
+ requestedBy: [],
146
+ semver: (0, utils_1.getPackageSemver)(version),
147
+ };
148
+ }).reduce((acc, it) => {
149
+ acc[it.id] = it;
150
+ return acc;
151
+ }, {});
152
+ }
153
+ const allDeps = Object.keys(dependencies);
154
+ directDeps.forEach(dep => {
155
+ const directDep = allDeps.find(it => it.startsWith(`${dep}@`));
156
+ if (directDep) {
157
+ if (dependencies[directDep]) {
158
+ dependencies[directDep].requestedBy.push(`${projName}@`);
159
+ }
160
+ }
161
+ });
162
+ return {
163
+ name: projName,
164
+ version: '',
165
+ path: context.root,
166
+ dependencies,
167
+ };
168
+ }
169
+ else if (context.manifestFile === 'pyproject.toml') {
170
+ return {
171
+ name: projName,
172
+ version: '',
173
+ path: context.root,
174
+ dependencies: {},
175
+ };
176
+ }
177
+ else if (context.manifestFile === 'setup.py') {
178
+ return {
179
+ name: projName,
180
+ version: '',
181
+ path: context.root,
182
+ dependencies: {},
183
+ };
184
+ }
185
+ else if (context.manifestFile === 'requirements.txt') {
186
+ return {
187
+ name: projName,
188
+ version: '',
189
+ path: context.root,
190
+ dependencies: {},
191
+ };
192
+ }
193
+ throw new Error(`Unsupported manifest file ${JSON.stringify(context)}`);
194
+ }
195
+ const checker = {
196
+ githubSecurityAdvisoryEcosystem: 'PIP',
197
+ getPURL: (lib, ver) => `pkg:pypi/${lib.replace('@', '%40')}@${ver}`,
198
+ };
199
+ class PyPiRegistrar extends registrar_1.AbstractRegistrar {
200
+ async retrieveFromRegistry(libraryName) {
201
+ var _a, _b, _c, _d, _e, _f, _g, _h;
202
+ const pypiURL = `https://pypi.org/pypi/${libraryName}/json`;
203
+ const pypiResponse = await (0, node_fetch_1.default)(pypiURL);
204
+ const pypiData = await pypiResponse.json();
205
+ return {
206
+ name: libraryName,
207
+ versions: Object.entries(pypiData.releases).map(([ver, it]) => {
208
+ return {
209
+ version: ver,
210
+ timestamp: it.length > 0 ? (0, moment_1.default)(it[0].upload_time).valueOf() : 0,
211
+ latest: ver === pypiData.info.version,
212
+ licenses: [],
213
+ };
214
+ }),
215
+ description: (_b = (_a = pypiData.info.description) !== null && _a !== void 0 ? _a : pypiData.info.summary) !== null && _b !== void 0 ? _b : '',
216
+ licenses: pypiData.info.license ? [pypiData.info.license] : [],
217
+ homepageUrl: (_c = pypiData.info.home_page) !== null && _c !== void 0 ? _c : '',
218
+ keywords: (_d = pypiData.info.keywords) !== null && _d !== void 0 ? _d : [],
219
+ authors: pypiData.info.author ? [pypiData.info.author] : [],
220
+ issuesUrl: (_e = pypiData.info.bugtrack_url) !== null && _e !== void 0 ? _e : '',
221
+ downloads: (_g = (_f = pypiData.info.downloads) === null || _f === void 0 ? void 0 : _f.last_month) !== null && _g !== void 0 ? _g : 0,
222
+ packageUrl: (_h = pypiData.info.package_url) !== null && _h !== void 0 ? _h : '',
223
+ };
224
+ }
225
+ }
226
+ exports.pythonRegistrar = new PyPiRegistrar(new registrar_1.LibrariesIORegistrar('pypi'));
227
+ exports.python = {
228
+ name: 'python',
229
+ aliases: ['pip', 'pipenv', 'poetry'],
230
+ extractor,
231
+ parser,
232
+ registrar: exports.pythonRegistrar,
233
+ checker,
234
+ };
235
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/python/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { LibraryInfo } from '../../extension-points/registrar';
2
+ import { Plugin } from '../../extension-points/plugin';
3
+ export declare function retrieveFormRubyGems(libraryName: string): Promise<LibraryInfo>;
4
+ export declare const ruby: Plugin;