@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,35 @@
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.getPluginsFromNames = exports.plugins = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const plugin_loader_1 = require("../extension-points/plugin-loader");
9
+ function loadDynamicPlugins(pluginsFile) {
10
+ try {
11
+ const pluginsJson = JSON.parse(fs_1.default.readFileSync(pluginsFile).toString());
12
+ return pluginsJson.map(it => {
13
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
14
+ const imported = require(it.path);
15
+ if (it.field)
16
+ return imported[it.field];
17
+ return imported;
18
+ });
19
+ }
20
+ catch (e) {
21
+ return [];
22
+ }
23
+ }
24
+ function loadPlugins() {
25
+ return [...plugin_loader_1.defaultPlugins, ...loadDynamicPlugins('plugins.json')]; // refactor to how dxworks cli does this when loading plugins
26
+ }
27
+ exports.plugins = loadPlugins();
28
+ function getPluginsFromNames(pluginNames) {
29
+ if (!pluginNames || pluginNames.length === 0) {
30
+ return exports.plugins;
31
+ }
32
+ return exports.plugins.filter(it => { var _a; return pluginNames.includes(it.name) || ((_a = it.aliases) === null || _a === void 0 ? void 0 : _a.some(alias => pluginNames.includes(alias))); });
33
+ }
34
+ exports.getPluginsFromNames = getPluginsFromNames;
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":";;;;;;AACA,4CAAmB;AACnB,qEAAgE;AAEhE,SAAS,kBAAkB,CAAC,WAAmB;IAC3C,IAAI;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAuC,CAAA;QAE7G,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,EAAE,CAAC,KAAK;gBACR,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAC7B,OAAO,QAAQ,CAAA;QACnB,CAAC,CAAC,CAAA;KACL;IAAC,OAAO,CAAM,EAAE;QACb,OAAO,EAAE,CAAA;KACZ;AACL,CAAC;AAED,SAAS,WAAW;IAChB,OAAO,CAAC,GAAG,8BAAc,EAAE,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAA,CAAC,6DAA6D;AACnI,CAAC;AAEY,QAAA,OAAO,GAAa,WAAW,EAAE,CAAA;AAE9C,SAAgB,mBAAmB,CAAC,WAAsB;IACtD,IAAG,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QACzC,OAAO,eAAO,CAAA;KACjB;IACD,OAAO,eAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,WAAC,OAAA,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAI,MAAA,EAAE,CAAC,OAAO,0CAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA,CAAA,EAAA,CAAC,CAAA;AACxH,CAAC;AALD,kDAKC"}
File without changes
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ // import {AbstractRegistrar, LibraryInfo} from '../../extension-points/registrar'
3
+ // import parse, {HTMLElement} from 'node-html-parser'
4
+ // import moment from 'moment/moment'
5
+ //
6
+ // export class GoogleMavenRegistrar extends AbstractRegistrar {
7
+ // // private browser: Browser | undefined
8
+ //
9
+ // async retrieveFromRegistry(libraryName: string): Promise<LibraryInfo> {
10
+ // const [groupId, artifactId] = libraryName.split(':')
11
+ // const root = await this.getParsedHtmlForLibrary(groupId, artifactId)
12
+ //
13
+ // const versionHTMLElements = root.querySelectorAll('div.artifact-child-item')
14
+ // const versions = await Promise.all(versionHTMLElements.map(async (it: HTMLElement) => {
15
+ // const version = it.querySelector('span')?.text ?? ''
16
+ // const versionDetails = await this.getParsedHtmlForLibrary(groupId, artifactId, version)
17
+ //
18
+ // const allKeys = versionDetails.querySelectorAll('td.gav-pom-key')
19
+ // if (allKeys.length === 0) {
20
+ // console.log('no keys')
21
+ // }
22
+ // const licensesElement = allKeys.find((it: HTMLElement) => it.text == 'License(s)')?.parentNode?.querySelector('td.gav-pom-value')
23
+ // const licenses = licensesElement?.querySelectorAll('a')?.map((it: HTMLElement) => it.text.trim()) ?? []
24
+ // const lastModifiedDate = allKeys.find((it: HTMLElement) => it.text == 'Last Updated Date')?.parentNode?.querySelector('td.gav-pom-value>span')?.text
25
+ // const timestamp = moment(lastModifiedDate, 'MM/DD/YYYY').valueOf()
26
+ // const description = allKeys.find((it: HTMLElement) => it.text == 'Description')?.parentNode?.querySelector('td.gav-pom-value>span')?.text
27
+ //
28
+ // return {
29
+ // version,
30
+ // timestamp,
31
+ // latest: versionHTMLElements[0].querySelector('span')?.text === version,
32
+ // licenses,
33
+ // description,
34
+ // }
35
+ // }))
36
+ //
37
+ // // await this.browser.close()
38
+ // return {
39
+ // name: libraryName,
40
+ // versions,
41
+ // description: versions[0]?.description ?? '',
42
+ // licenses: [...new Set(versions.map(it => it.licenses).flat())],
43
+ // reposUrl: [],
44
+ // issuesUrl: [],
45
+ // }
46
+ // }
47
+ //
48
+ // private async getParsedHtmlForLibrary(groupId: string, artifactId: string, version = ''): Promise<HTMLElement> {
49
+ // const mavenSearchURL = `https://maven.google.com/web/index.html#${groupId}:${artifactId}:${version}`
50
+ // const browser = await puppeteer.launch({headless: true})
51
+ // const page = await browser.newPage()
52
+ // await page.goto(mavenSearchURL, {waitUntil: ['domcontentloaded', 'networkidle2']})
53
+ // const mavenData = await page.content()
54
+ // await page.close()
55
+ // await browser.close()
56
+ // return parse(mavenData)
57
+ // }
58
+ // }
59
+ //# sourceMappingURL=google.registrar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.registrar.js","sourceRoot":"","sources":["../../../src/plugins/java/google.registrar.ts"],"names":[],"mappings":";AAAA,kFAAkF;AAClF,sDAAsD;AACtD,qCAAqC;AACrC,EAAE;AACF,gEAAgE;AAChE,8CAA8C;AAC9C,EAAE;AACF,8EAA8E;AAC9E,+DAA+D;AAC/D,+EAA+E;AAC/E,EAAE;AACF,uFAAuF;AACvF,kGAAkG;AAClG,mEAAmE;AACnE,sGAAsG;AACtG,EAAE;AACF,gFAAgF;AAChF,0CAA0C;AAC1C,yCAAyC;AACzC,gBAAgB;AAChB,gJAAgJ;AAChJ,sHAAsH;AACtH,mKAAmK;AACnK,iFAAiF;AACjF,wJAAwJ;AACxJ,EAAE;AACF,uBAAuB;AACvB,2BAA2B;AAC3B,6BAA6B;AAC7B,0FAA0F;AAC1F,4BAA4B;AAC5B,+BAA+B;AAC/B,gBAAgB;AAChB,cAAc;AACd,EAAE;AACF,wCAAwC;AACxC,mBAAmB;AACnB,iCAAiC;AACjC,wBAAwB;AACxB,2DAA2D;AAC3D,8EAA8E;AAC9E,4BAA4B;AAC5B,6BAA6B;AAC7B,YAAY;AACZ,QAAQ;AACR,EAAE;AACF,uHAAuH;AACvH,+GAA+G;AAC/G,mEAAmE;AACnE,+CAA+C;AAC/C,6FAA6F;AAC7F,iDAAiD;AACjD,6BAA6B;AAC7B,gCAAgC;AAChC,kCAAkC;AAClC,QAAQ;AACR,IAAI"}
@@ -0,0 +1,7 @@
1
+ import { AbstractRegistrar, LibraryInfo } from '../../extension-points/registrar';
2
+ import { Plugin } from '../../extension-points/plugin';
3
+ export declare class MavenCentralRegistrar extends AbstractRegistrar {
4
+ retrieveFromRegistry(libraryName: string): Promise<LibraryInfo>;
5
+ getPom(groupId: string, artifactId: string, docs: string[], libraryName: string): Promise<any>;
6
+ }
7
+ export declare const java: Plugin;
@@ -0,0 +1,152 @@
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.java = exports.MavenCentralRegistrar = void 0;
7
+ // @ts-ignore
8
+ const path_1 = __importDefault(require("path"));
9
+ const registrar_1 = require("../../extension-points/registrar");
10
+ const node_fetch_1 = __importDefault(require("node-fetch"));
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const utils_1 = require("../../utils/utils");
13
+ const cli_common_1 = require("@dxworks/cli-common");
14
+ const maven_1 = require("./parsers/maven");
15
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
16
+ const pomParser = require('pom-parser');
17
+ const extractor = {
18
+ files: ['pom.xml', 'build.gradle', 'build.gradle.kts'],
19
+ createContexts: files => {
20
+ const pomContexts = files.filter(it => it.endsWith('pom.xml')).map(it => ({
21
+ root: path_1.default.dirname(it),
22
+ lockFile: 'deptree.txt',
23
+ type: 'maven',
24
+ }));
25
+ const gradleContexts = files.filter(it => it.endsWith('build.gradle') || it.endsWith('build.gradle.kts')).map(it => ({
26
+ root: path_1.default.dirname(it),
27
+ manifestFile: path_1.default.basename(it),
28
+ lockFile: 'gradle.json',
29
+ type: 'gradle',
30
+ }));
31
+ return [...pomContexts, ...gradleContexts];
32
+ },
33
+ };
34
+ const parser = {
35
+ parseDependencyTree: parseLockFile,
36
+ };
37
+ function parseLockFile(context) {
38
+ var _a;
39
+ if (context.type === 'maven') {
40
+ if (!fs_1.default.existsSync(path_1.default.resolve(context.root, context.lockFile))) {
41
+ throw new Error(`Dependency tree file not found: ${path_1.default.resolve(context.root, context.lockFile)}`);
42
+ }
43
+ const depTreeContent = fs_1.default.readFileSync(path_1.default.resolve(context.root, context.lockFile)).toString();
44
+ const depinderProject = (0, maven_1.parseMavenDependencyTree)(depTreeContent);
45
+ depinderProject.path = path_1.default.resolve(context.root, (_a = context.manifestFile) !== null && _a !== void 0 ? _a : 'pom.xml');
46
+ return depinderProject;
47
+ }
48
+ else if (context.type === 'gradle') {
49
+ throw new Error(`Unsupported context type: ${context.type}. Gradle is not supported yet!`);
50
+ }
51
+ // if (context.type === 'maven-with-dep-tree') {
52
+ // return JSON.parse(fs.readFileSync(path.resolve(context.root, context.lockFile)).toString()) as DepinderProject
53
+ // }
54
+ //
55
+ // if (context.type === 'gradle') {
56
+ // if (fs.existsSync(path.resolve(context.root, context.lockFile))) {
57
+ // const proj = JSON.parse(fs.readFileSync(path.resolve(context.root, context.lockFile)).toString()) as DepinderProject
58
+ // return {
59
+ // ...proj,
60
+ // dependencies: Object.entries(proj.dependencies).filter(([, value]) =>
61
+ // value.requestedBy.includes(`${proj.name}@${proj.version}`)
62
+ // ).reduce((acc, [key, value]) => ({...acc, [key]: value}), {}),
63
+ // }
64
+ // }
65
+ // }
66
+ throw new Error(`Unsupported context type: ${context.type}`);
67
+ }
68
+ async function parsePomFile(pomFile) {
69
+ return new Promise((resolve, reject) => {
70
+ pomParser.parse({ filePath: pomFile }, (err, pom) => {
71
+ if (err) {
72
+ reject(err);
73
+ }
74
+ resolve(pom);
75
+ });
76
+ });
77
+ }
78
+ async function getLatestAvailablePom(groupId, artifactId, docs) {
79
+ for (let i = 0; i < docs.length; i++) {
80
+ const pomUrl = `https://search.maven.org/remotecontent?filepath=${groupId.replace(/\./g, '/')}/${artifactId}/${docs[i].v}/${artifactId}-${docs[i].v}.pom`;
81
+ const pomResponse = await (0, node_fetch_1.default)(pomUrl);
82
+ if (pomResponse.status === 200)
83
+ return pomResponse;
84
+ }
85
+ }
86
+ const checker = {
87
+ githubSecurityAdvisoryEcosystem: 'MAVEN',
88
+ getPURL: (lib, ver) => `pkg:maven/${lib.replace(':', '/')}@${ver}`,
89
+ };
90
+ class MavenCentralRegistrar extends registrar_1.AbstractRegistrar {
91
+ async retrieveFromRegistry(libraryName) {
92
+ var _a, _b, _c, _d, _e, _f, _g;
93
+ const [groupId, artifactId] = libraryName.split(':');
94
+ const abortController = new AbortController();
95
+ setTimeout(() => abortController.abort(), 10000);
96
+ const rows = 200;
97
+ let start = 0;
98
+ const mavenSearchURL = `https://search.maven.org/solrsearch/select?q=g:"${groupId}" AND a:"${artifactId}"&core=gav&wt=json&rows=${rows}&start=${start}`;
99
+ const mavenResponse = await (0, node_fetch_1.default)(mavenSearchURL, { signal: abortController.signal });
100
+ const mavenData = await mavenResponse.json();
101
+ let docs = mavenData.response.docs;
102
+ while (docs.length < mavenData.response.numFound) {
103
+ start += rows;
104
+ const mavenResponse = await (0, node_fetch_1.default)(mavenSearchURL, { signal: abortController.signal });
105
+ const mavenData = await mavenResponse.json();
106
+ docs = [...docs, ...mavenData.response.docs];
107
+ }
108
+ let pom;
109
+ try {
110
+ pom = (await this.getPom(groupId, artifactId, docs, libraryName)).pomObject;
111
+ }
112
+ catch (e) {
113
+ cli_common_1.log.warn(`Failed to get pom for ${libraryName}`);
114
+ throw e;
115
+ }
116
+ return {
117
+ name: libraryName,
118
+ versions: docs.map((it) => {
119
+ return {
120
+ version: it.v,
121
+ timestamp: it.timestamp,
122
+ latest: it.v === docs[0].v,
123
+ licenses: [],
124
+ };
125
+ }),
126
+ description: (_b = (_a = pom === null || pom === void 0 ? void 0 : pom.project) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : '',
127
+ licenses: ((_d = (_c = pom === null || pom === void 0 ? void 0 : pom.project) === null || _c === void 0 ? void 0 : _c.licenses) === null || _d === void 0 ? void 0 : _d.license) ? [pom === null || pom === void 0 ? void 0 : pom.project.licenses.license.name] : [],
128
+ reposUrl: ((_e = pom === null || pom === void 0 ? void 0 : pom.project) === null || _e === void 0 ? void 0 : _e.scm) ? [pom === null || pom === void 0 ? void 0 : pom.project.scm.connection] : [],
129
+ issuesUrl: ((_g = (_f = pom === null || pom === void 0 ? void 0 : pom.project) === null || _f === void 0 ? void 0 : _f.issueManagement) === null || _g === void 0 ? void 0 : _g.url) ? [pom === null || pom === void 0 ? void 0 : pom.project.issueManagement.url] : [],
130
+ };
131
+ }
132
+ async getPom(groupId, artifactId, docs, libraryName) {
133
+ const pomResponse = await getLatestAvailablePom(groupId, artifactId, docs);
134
+ const pomData = await pomResponse.text();
135
+ const pomFile = path_1.default.resolve(utils_1.depinderTempFolder, `${libraryName}.pom`);
136
+ fs_1.default.writeFileSync(pomFile, pomData);
137
+ const pom = await parsePomFile(pomFile);
138
+ fs_1.default.rmSync(pomFile);
139
+ return pom;
140
+ }
141
+ }
142
+ exports.MavenCentralRegistrar = MavenCentralRegistrar;
143
+ const javaRegistrar = new MavenCentralRegistrar(new registrar_1.LibrariesIORegistrar('maven'));
144
+ exports.java = {
145
+ name: 'java',
146
+ aliases: ['maven', 'gradle'],
147
+ extractor,
148
+ parser,
149
+ registrar: javaRegistrar,
150
+ checker,
151
+ };
152
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/java/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { DepinderProject } from '../../../extension-points/extract';
2
+ export declare function parseMavenDependencyTree(input: string): DepinderProject;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMavenDependencyTree = void 0;
4
+ const utils_1 = require("../../../utils/utils");
5
+ function parseMavenDependencyTree(input) {
6
+ var _a;
7
+ const lines = input.split('\n');
8
+ const rootLine = lines[0].split(':');
9
+ const root = {
10
+ name: `${rootLine[0]}:${rootLine[1]}`,
11
+ version: rootLine[3],
12
+ path: '',
13
+ dependencies: {},
14
+ };
15
+ const stack = [];
16
+ for (let i = 1; i < lines.length; i++) {
17
+ // Determine the level by counting leading plus signs, each representing one level of depth.
18
+ const level = getIndentLevel(lines[i]);
19
+ // Remove leading special characters from the line and split into parts.
20
+ const parts = lines[i].replaceAll('|', '').replaceAll('+-', '').replaceAll('\\-', '').trim().split(':');
21
+ const name = `${parts[0]}:${parts[1]}`;
22
+ const version = parts[3];
23
+ const id = `${name}@${version}`;
24
+ const type = (_a = parts[4]) === null || _a === void 0 ? void 0 : _a.split(' ')[0];
25
+ const optional = lines[i].includes('(optional)');
26
+ const semver = (0, utils_1.getPackageSemver)(version);
27
+ while (stack.length > 0 && stack[stack.length - 1].level >= level) {
28
+ stack.pop();
29
+ }
30
+ root.dependencies[id] = {
31
+ id,
32
+ name,
33
+ version,
34
+ semver,
35
+ type: optional ? undefined : type,
36
+ requestedBy: stack.length > 0 ? [stack[stack.length - 1].id] : [`${root.name}@${root.version}`],
37
+ };
38
+ stack.push({ id, level });
39
+ }
40
+ return root;
41
+ }
42
+ exports.parseMavenDependencyTree = parseMavenDependencyTree;
43
+ function getIndentLevel(line) {
44
+ let indentLevel = 0;
45
+ while (line.startsWith('| ') || line.startsWith(' ')) {
46
+ line = line.substring(3);
47
+ indentLevel++;
48
+ }
49
+ return indentLevel;
50
+ }
51
+ //# sourceMappingURL=maven.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maven.js","sourceRoot":"","sources":["../../../../src/plugins/java/parsers/maven.ts"],"names":[],"mappings":";;;AACA,gDAAqD;AAGrD,SAAgB,wBAAwB,CAAC,KAAa;;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,IAAI,GAAoB;QAC1B,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;QACrC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpB,IAAI,EAAE,EAAE;QACR,YAAY,EAAE,EAAE;KACnB,CAAA;IAED,MAAM,KAAK,GAAkC,EAAE,CAAA;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,4FAA4F;QAC5F,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtC,wEAAwE;QACxE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEvG,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAA;QAC/B,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAA;QAExC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE;YAC/D,KAAK,CAAC,GAAG,EAAE,CAAA;SACd;QAED,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG;YACpB,EAAE;YACF,IAAI;YACJ,OAAO;YACP,MAAM;YACN,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YACjC,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;SAClG,CAAA;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;KAC5B;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AA3CD,4DA2CC;AAED,SAAS,cAAc,CAAC,IAAY;IAChC,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACrD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACxB,WAAW,EAAE,CAAA;KAChB;IACD,OAAO,WAAW,CAAA;AACtB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { LibraryInfo } from '../../extension-points/registrar';
2
+ import { Plugin } from '../../extension-points/plugin';
3
+ export declare function retrieveFromNpm(libraryName: string): Promise<LibraryInfo>;
4
+ export declare const javascript: Plugin;
@@ -0,0 +1,151 @@
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.javascript = exports.retrieveFromNpm = void 0;
7
+ const snyk_nodejs_lockfile_parser_1 = require("snyk-nodejs-lockfile-parser");
8
+ const path_1 = __importDefault(require("path"));
9
+ const semver_1 = require("semver");
10
+ const cli_common_1 = require("@dxworks/cli-common");
11
+ const npm_registry_fetch_1 = require("npm-registry-fetch");
12
+ const npm_1 = require("../../utils/npm");
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const extractor = {
15
+ files: ['package.json', 'package-lock.json', 'yarn.lock'],
16
+ createContexts: files => {
17
+ const lockFileContexts = files.filter(it => it.endsWith('package-lock.json') || it.endsWith('yarn.lock')).map(it => ({
18
+ root: path_1.default.dirname(it),
19
+ lockFile: path_1.default.basename(it),
20
+ manifestFile: 'package.json',
21
+ }));
22
+ const packageJsonWithLockInParent = files.filter(it => it.endsWith('package.json'))
23
+ .filter(packageFile => !lockFileContexts.some(it => it.root == path_1.default.dirname(packageFile)))
24
+ .filter(packageFile => getParentLockFile(packageFile) !== null)
25
+ .map(it => ({
26
+ root: path_1.default.dirname(it),
27
+ manifestFile: 'package.json',
28
+ lockFile: getParentLockFile(it),
29
+ }));
30
+ const justPackageJson = files.filter(it => it.endsWith('package.json'))
31
+ .filter(packageFile => !lockFileContexts.some(it => it.root == path_1.default.dirname(packageFile)))
32
+ .filter(packageFile => !packageJsonWithLockInParent.some(it => it.root == path_1.default.dirname(packageFile)))
33
+ .map(it => ({
34
+ root: path_1.default.dirname(it),
35
+ manifestFile: 'package.json',
36
+ }))
37
+ .map(context => {
38
+ try {
39
+ cli_common_1.log.info(`Trying to generate lock file for ${context.root}`);
40
+ npm_1.npm.install('', '--package-lock-only', context.root);
41
+ return Object.assign(Object.assign({}, context), { lockFile: path_1.default.resolve(context.root, 'package-lock.json') });
42
+ }
43
+ catch (e) {
44
+ cli_common_1.log.error(e);
45
+ return null;
46
+ }
47
+ })
48
+ .filter(it => it !== null)
49
+ .map(it => it);
50
+ return [...lockFileContexts, ...justPackageJson, ...packageJsonWithLockInParent];
51
+ },
52
+ filter: it => !it.includes('node_modules'),
53
+ };
54
+ function getParentLockFile(packageFile, maxDepth = 5) {
55
+ const dir = path_1.default.dirname(packageFile);
56
+ if (maxDepth < 0)
57
+ return null;
58
+ if (fs_1.default.existsSync(path_1.default.resolve(dir, 'package-lock.json')))
59
+ return path_1.default.resolve(dir, 'package-lock.json');
60
+ if (fs_1.default.existsSync(path_1.default.resolve(dir, 'yarn.lock')))
61
+ return path_1.default.resolve(dir, 'yarn.lock');
62
+ return getParentLockFile(dir, maxDepth - 1);
63
+ }
64
+ const parser = {
65
+ parseDependencyTree: parseLockFile,
66
+ };
67
+ function recursivelyTransformDeps(tree, result) {
68
+ var _a;
69
+ const rootId = `${tree.name}@${tree.version}`;
70
+ Object.values((_a = tree.dependencies) !== null && _a !== void 0 ? _a : {}).forEach(dep => {
71
+ var _a;
72
+ const id = `${dep.name}@${dep.version}`;
73
+ const cachedVersion = result.get(id);
74
+ if (cachedVersion) {
75
+ cachedVersion.requestedBy = [rootId, ...cachedVersion.requestedBy];
76
+ }
77
+ else {
78
+ try {
79
+ const semver = new semver_1.SemVer((_a = dep.version) !== null && _a !== void 0 ? _a : '', true);
80
+ result.set(id, {
81
+ id,
82
+ version: dep.version,
83
+ name: dep.name,
84
+ semver: semver,
85
+ requestedBy: [rootId],
86
+ });
87
+ }
88
+ catch (e) {
89
+ cli_common_1.log.warn(`Invalid version! ${e}`);
90
+ }
91
+ }
92
+ recursivelyTransformDeps(dep, result);
93
+ });
94
+ }
95
+ function transformDeps(tree, root) {
96
+ cli_common_1.log.info(`Starting recursive transformation for ${root}`);
97
+ const result = new Map();
98
+ recursivelyTransformDeps(tree, result);
99
+ cli_common_1.log.info(`End recursive transformation for ${root}.`);
100
+ return result;
101
+ }
102
+ async function parseLockFile({ root, manifestFile, lockFile }) {
103
+ var _a, _b;
104
+ // const lockFileVersion = getLockfileVersionFromFile(lockFile)
105
+ // log.info(`parsing ${path.resolve(root, lockFile)}`)
106
+ const result = await (0, snyk_nodejs_lockfile_parser_1.buildDepTreeFromFiles)(root, manifestFile !== null && manifestFile !== void 0 ? manifestFile : 'package.json', lockFile !== null && lockFile !== void 0 ? lockFile : '', true, false);
107
+ const manifestJSON = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(root, manifestFile !== null && manifestFile !== void 0 ? manifestFile : 'package.json'), 'utf8'));
108
+ return {
109
+ path: path_1.default.resolve(root, manifestFile !== null && manifestFile !== void 0 ? manifestFile : 'package.json'),
110
+ name: (_a = result.name) !== null && _a !== void 0 ? _a : manifestJSON.name,
111
+ version: (_b = result.version) !== null && _b !== void 0 ? _b : manifestJSON.version,
112
+ dependencies: Object.fromEntries(transformDeps(result, root)),
113
+ };
114
+ }
115
+ async function retrieveFromNpm(libraryName) {
116
+ const response = await (0, npm_registry_fetch_1.json)(libraryName);
117
+ return {
118
+ name: response.name,
119
+ versions: Object.values(response.versions).map((it) => {
120
+ var _a;
121
+ return {
122
+ version: it.version,
123
+ timestamp: Date.parse(response.time[it.version]),
124
+ licenses: it.license,
125
+ latest: it.version == ((_a = response['dist-tags']) === null || _a === void 0 ? void 0 : _a.latest),
126
+ };
127
+ }),
128
+ description: response.description,
129
+ issuesUrl: [],
130
+ licenses: [response.license],
131
+ reposUrl: [],
132
+ keywords: response.keywords,
133
+ };
134
+ }
135
+ exports.retrieveFromNpm = retrieveFromNpm;
136
+ const registrar = {
137
+ retrieve: retrieveFromNpm,
138
+ };
139
+ const checker = {
140
+ githubSecurityAdvisoryEcosystem: 'NPM',
141
+ getPURL: (lib, ver) => `pkg:npm/${lib.replace('@', '%40')}@${ver}`,
142
+ };
143
+ exports.javascript = {
144
+ name: 'npm',
145
+ aliases: ['js', 'javascript', 'node', 'nodejs', 'yarn'],
146
+ extractor,
147
+ parser,
148
+ registrar,
149
+ checker,
150
+ };
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/javascript/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { AbstractRegistrar, LibraryInfo } from '../../extension-points/registrar';
2
+ import { Plugin } from '../../extension-points/plugin';
3
+ import { Composer, ComposerLock } from '../../info/php/parser';
4
+ export declare function parseComposerFile(file: string): Composer;
5
+ export declare function parseComposerLockFile(file: string): ComposerLock;
6
+ export declare class PackagistRegistrar extends AbstractRegistrar {
7
+ retrieveFromRegistry(libraryName: string): Promise<LibraryInfo>;
8
+ }
9
+ export declare const php: Plugin;