@dependabit/detector 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.
- package/CHANGELOG.md +10 -0
- package/LICENSE +21 -0
- package/README.md +32 -0
- package/dist/detector.d.ts +64 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +578 -0
- package/dist/detector.js.map +1 -0
- package/dist/diff-parser.d.ts +53 -0
- package/dist/diff-parser.d.ts.map +1 -0
- package/dist/diff-parser.js +203 -0
- package/dist/diff-parser.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/client.d.ts +65 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +12 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/copilot.d.ts +15 -0
- package/dist/llm/copilot.d.ts.map +1 -0
- package/dist/llm/copilot.js +119 -0
- package/dist/llm/copilot.js.map +1 -0
- package/dist/llm/prompts.d.ts +10 -0
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/llm/prompts.js +94 -0
- package/dist/llm/prompts.js.map +1 -0
- package/dist/parsers/code-comments.d.ts +23 -0
- package/dist/parsers/code-comments.d.ts.map +1 -0
- package/dist/parsers/code-comments.js +139 -0
- package/dist/parsers/code-comments.js.map +1 -0
- package/dist/parsers/package-files.d.ts +31 -0
- package/dist/parsers/package-files.d.ts.map +1 -0
- package/dist/parsers/package-files.js +130 -0
- package/dist/parsers/package-files.js.map +1 -0
- package/dist/parsers/readme.d.ts +23 -0
- package/dist/parsers/readme.d.ts.map +1 -0
- package/dist/parsers/readme.js +151 -0
- package/dist/parsers/readme.js.map +1 -0
- package/package.json +41 -0
- package/src/detector.ts +746 -0
- package/src/diff-parser.ts +257 -0
- package/src/index.ts +43 -0
- package/src/llm/client.ts +85 -0
- package/src/llm/copilot.ts +147 -0
- package/src/llm/prompts.ts +102 -0
- package/src/parsers/code-comments.ts +178 -0
- package/src/parsers/package-files.ts +156 -0
- package/src/parsers/readme.ts +185 -0
- package/test/detector.test.ts +102 -0
- package/test/diff-parser.test.ts +187 -0
- package/test/llm/client.test.ts +31 -0
- package/test/llm/copilot.test.ts +55 -0
- package/test/parsers/code-comments.test.ts +98 -0
- package/test/parsers/package-files.test.ts +52 -0
- package/test/parsers/readme.test.ts +52 -0
- package/tsconfig.json +10 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Comment Parser
|
|
3
|
+
* Extracts URLs and references from code comments
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse code files and extract references from comments
|
|
7
|
+
*/
|
|
8
|
+
export function parseCodeComments(content, filePath) {
|
|
9
|
+
const references = [];
|
|
10
|
+
const extension = getFileExtension(filePath);
|
|
11
|
+
const commentStyle = getCommentStyle(extension);
|
|
12
|
+
if (!commentStyle) {
|
|
13
|
+
return references; // Unsupported file type
|
|
14
|
+
}
|
|
15
|
+
const lines = content.split('\n');
|
|
16
|
+
let inMultiLineComment = false;
|
|
17
|
+
for (let i = 0; i < lines.length; i++) {
|
|
18
|
+
const line = lines[i];
|
|
19
|
+
if (!line)
|
|
20
|
+
continue;
|
|
21
|
+
const lineNumber = i + 1;
|
|
22
|
+
// Check for multi-line comment start/end
|
|
23
|
+
if (commentStyle.multiLine) {
|
|
24
|
+
if (line.includes(commentStyle.multiLine.start)) {
|
|
25
|
+
inMultiLineComment = true;
|
|
26
|
+
}
|
|
27
|
+
if (inMultiLineComment) {
|
|
28
|
+
const urls = extractUrls(line);
|
|
29
|
+
for (const url of urls) {
|
|
30
|
+
references.push({
|
|
31
|
+
url,
|
|
32
|
+
context: line.trim(),
|
|
33
|
+
file: filePath,
|
|
34
|
+
line: lineNumber,
|
|
35
|
+
commentType: line.includes('/**') ? 'jsdoc' : 'multi-line'
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (line.includes(commentStyle.multiLine.end)) {
|
|
40
|
+
inMultiLineComment = false;
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Check for single-line comments
|
|
45
|
+
if (commentStyle.singleLine) {
|
|
46
|
+
const commentStart = line.indexOf(commentStyle.singleLine);
|
|
47
|
+
if (commentStart !== -1) {
|
|
48
|
+
const comment = line.substring(commentStart);
|
|
49
|
+
const urls = extractUrls(comment);
|
|
50
|
+
for (const url of urls) {
|
|
51
|
+
references.push({
|
|
52
|
+
url,
|
|
53
|
+
context: comment.trim(),
|
|
54
|
+
file: filePath,
|
|
55
|
+
line: lineNumber,
|
|
56
|
+
commentType: 'single-line'
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return references;
|
|
63
|
+
}
|
|
64
|
+
function getFileExtension(filePath) {
|
|
65
|
+
const match = filePath.match(/\.([^.]+)$/);
|
|
66
|
+
const ext = match?.[1];
|
|
67
|
+
return ext ? ext.toLowerCase() : '';
|
|
68
|
+
}
|
|
69
|
+
function getCommentStyle(extension) {
|
|
70
|
+
const styles = {
|
|
71
|
+
// JavaScript/TypeScript
|
|
72
|
+
js: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
73
|
+
ts: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
74
|
+
jsx: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
75
|
+
tsx: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
76
|
+
// Python
|
|
77
|
+
py: { singleLine: '#' },
|
|
78
|
+
// Ruby
|
|
79
|
+
rb: { singleLine: '#', multiLine: { start: '=begin', end: '=end' } },
|
|
80
|
+
// Go
|
|
81
|
+
go: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
82
|
+
// Rust
|
|
83
|
+
rs: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
84
|
+
// C/C++
|
|
85
|
+
c: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
86
|
+
cpp: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
87
|
+
h: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
88
|
+
// Java/Kotlin
|
|
89
|
+
java: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
90
|
+
kt: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
91
|
+
// C#
|
|
92
|
+
cs: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
93
|
+
// PHP
|
|
94
|
+
php: { singleLine: '//', multiLine: { start: '/*', end: '*/' } },
|
|
95
|
+
// Shell
|
|
96
|
+
sh: { singleLine: '#' },
|
|
97
|
+
bash: { singleLine: '#' },
|
|
98
|
+
// YAML
|
|
99
|
+
yml: { singleLine: '#' },
|
|
100
|
+
yaml: { singleLine: '#' }
|
|
101
|
+
};
|
|
102
|
+
return styles[extension] || null;
|
|
103
|
+
}
|
|
104
|
+
function extractUrls(text) {
|
|
105
|
+
const urls = [];
|
|
106
|
+
const regex = /https?:\/\/[^\s<>()[\]'"]+/g;
|
|
107
|
+
let match;
|
|
108
|
+
while ((match = regex.exec(text)) !== null) {
|
|
109
|
+
urls.push(match[0]);
|
|
110
|
+
}
|
|
111
|
+
return urls;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract specification and RFC references from comments
|
|
115
|
+
*/
|
|
116
|
+
export function extractSpecReferences(content) {
|
|
117
|
+
const references = [];
|
|
118
|
+
const lines = content.split('\n');
|
|
119
|
+
for (const line of lines) {
|
|
120
|
+
// Match RFC references
|
|
121
|
+
const rfcMatch = /RFC\s*(\d+)/i.exec(line);
|
|
122
|
+
if (rfcMatch) {
|
|
123
|
+
references.push({
|
|
124
|
+
spec: `RFC ${rfcMatch[1]}`,
|
|
125
|
+
context: line.trim()
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Match standard references (ISO, IEEE, etc.)
|
|
129
|
+
const standardMatch = /(ISO|IEEE|ECMA|W3C)[\s-]*(\d+(?:[-.]\d+)*)/i.exec(line);
|
|
130
|
+
if (standardMatch) {
|
|
131
|
+
references.push({
|
|
132
|
+
spec: `${standardMatch[1]} ${standardMatch[2]}`,
|
|
133
|
+
context: line.trim()
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return references;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=code-comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-comments.js","sourceRoot":"","sources":["../../src/parsers/code-comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package File Parser
|
|
3
|
+
* Extracts metadata and references from package manager files
|
|
4
|
+
* EXCLUDES actual dependencies (handled by dependabot)
|
|
5
|
+
*/
|
|
6
|
+
export interface PackageMetadata {
|
|
7
|
+
repository?: string;
|
|
8
|
+
homepage?: string;
|
|
9
|
+
documentation?: string;
|
|
10
|
+
urls: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse package.json and extract metadata URLs (NOT dependencies)
|
|
14
|
+
*/
|
|
15
|
+
export declare function parsePackageJson(content: string): PackageMetadata;
|
|
16
|
+
/**
|
|
17
|
+
* Parse requirements.txt and extract URLs from comments
|
|
18
|
+
* EXCLUDES actual packages (handled by dependabot)
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseRequirementsTxt(content: string): PackageMetadata;
|
|
21
|
+
/**
|
|
22
|
+
* Parse Cargo.toml and extract metadata URLs
|
|
23
|
+
* EXCLUDES actual dependencies (handled by dependabot)
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseCargoToml(content: string): PackageMetadata;
|
|
26
|
+
/**
|
|
27
|
+
* Parse go.mod and extract URLs from comments
|
|
28
|
+
* EXCLUDES actual dependencies (handled by dependabot)
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseGoMod(content: string): PackageMetadata;
|
|
31
|
+
//# sourceMappingURL=package-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-files.d.ts","sourceRoot":"","sources":["../../src/parsers/package-files.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAqCjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAcrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA4C/D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAc3D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package File Parser
|
|
3
|
+
* Extracts metadata and references from package manager files
|
|
4
|
+
* EXCLUDES actual dependencies (handled by dependabot)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse package.json and extract metadata URLs (NOT dependencies)
|
|
8
|
+
*/
|
|
9
|
+
export function parsePackageJson(content) {
|
|
10
|
+
try {
|
|
11
|
+
const pkg = JSON.parse(content);
|
|
12
|
+
const urls = [];
|
|
13
|
+
// Extract repository URL
|
|
14
|
+
let repository = undefined;
|
|
15
|
+
if (typeof pkg.repository === 'string') {
|
|
16
|
+
repository = pkg.repository;
|
|
17
|
+
}
|
|
18
|
+
else if (pkg.repository && pkg.repository.url) {
|
|
19
|
+
repository = pkg.repository.url;
|
|
20
|
+
}
|
|
21
|
+
// Extract homepage
|
|
22
|
+
const homepage = pkg.homepage;
|
|
23
|
+
// Extract documentation (not standard but sometimes present)
|
|
24
|
+
const documentation = pkg.documentation || pkg.docs;
|
|
25
|
+
// Extract URLs from description
|
|
26
|
+
if (pkg.description) {
|
|
27
|
+
const descUrls = extractUrls(pkg.description);
|
|
28
|
+
urls.push(...descUrls);
|
|
29
|
+
}
|
|
30
|
+
// Note: We DO NOT extract dependencies/devDependencies
|
|
31
|
+
// Those are handled by dependabot
|
|
32
|
+
return {
|
|
33
|
+
...(repository !== undefined && { repository }),
|
|
34
|
+
...(homepage !== undefined && { homepage }),
|
|
35
|
+
...(documentation !== undefined && { documentation }),
|
|
36
|
+
urls
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { urls: [] };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse requirements.txt and extract URLs from comments
|
|
45
|
+
* EXCLUDES actual packages (handled by dependabot)
|
|
46
|
+
*/
|
|
47
|
+
export function parseRequirementsTxt(content) {
|
|
48
|
+
const urls = [];
|
|
49
|
+
const lines = content.split('\n');
|
|
50
|
+
for (const line of lines) {
|
|
51
|
+
// Only extract URLs from comments
|
|
52
|
+
if (line.trim().startsWith('#')) {
|
|
53
|
+
const commentUrls = extractUrls(line);
|
|
54
|
+
urls.push(...commentUrls);
|
|
55
|
+
}
|
|
56
|
+
// Skip actual package lines - dependabot handles those
|
|
57
|
+
}
|
|
58
|
+
return { urls };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse Cargo.toml and extract metadata URLs
|
|
62
|
+
* EXCLUDES actual dependencies (handled by dependabot)
|
|
63
|
+
*/
|
|
64
|
+
export function parseCargoToml(content) {
|
|
65
|
+
const urls = [];
|
|
66
|
+
let repository = undefined;
|
|
67
|
+
let homepage = undefined;
|
|
68
|
+
let documentation = undefined;
|
|
69
|
+
const lines = content.split('\n');
|
|
70
|
+
let inPackageSection = false;
|
|
71
|
+
for (const line of lines) {
|
|
72
|
+
if (line.trim() === '[package]') {
|
|
73
|
+
inPackageSection = true;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (line.trim().startsWith('[') && line.trim() !== '[package]') {
|
|
77
|
+
inPackageSection = false;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (inPackageSection) {
|
|
81
|
+
const repoMatch = /repository\s*=\s*"([^"]+)"/.exec(line);
|
|
82
|
+
if (repoMatch && repoMatch[1])
|
|
83
|
+
repository = repoMatch[1];
|
|
84
|
+
const homepageMatch = /homepage\s*=\s*"([^"]+)"/.exec(line);
|
|
85
|
+
if (homepageMatch && homepageMatch[1])
|
|
86
|
+
homepage = homepageMatch[1];
|
|
87
|
+
const docMatch = /documentation\s*=\s*"([^"]+)"/.exec(line);
|
|
88
|
+
if (docMatch && docMatch[1])
|
|
89
|
+
documentation = docMatch[1];
|
|
90
|
+
}
|
|
91
|
+
// Extract URLs from comments
|
|
92
|
+
if (line.trim().startsWith('#')) {
|
|
93
|
+
const commentUrls = extractUrls(line);
|
|
94
|
+
urls.push(...commentUrls);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...(repository !== undefined && { repository }),
|
|
99
|
+
...(homepage !== undefined && { homepage }),
|
|
100
|
+
...(documentation !== undefined && { documentation }),
|
|
101
|
+
urls
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse go.mod and extract URLs from comments
|
|
106
|
+
* EXCLUDES actual dependencies (handled by dependabot)
|
|
107
|
+
*/
|
|
108
|
+
export function parseGoMod(content) {
|
|
109
|
+
const urls = [];
|
|
110
|
+
const lines = content.split('\n');
|
|
111
|
+
for (const line of lines) {
|
|
112
|
+
// Only extract URLs from comments
|
|
113
|
+
if (line.trim().startsWith('//')) {
|
|
114
|
+
const commentUrls = extractUrls(line);
|
|
115
|
+
urls.push(...commentUrls);
|
|
116
|
+
}
|
|
117
|
+
// Skip actual require lines - dependabot handles those
|
|
118
|
+
}
|
|
119
|
+
return { urls };
|
|
120
|
+
}
|
|
121
|
+
function extractUrls(text) {
|
|
122
|
+
const urls = [];
|
|
123
|
+
const regex = /https?:\/\/[^\s<>()[\]'"]+/g;
|
|
124
|
+
let match;
|
|
125
|
+
while ((match = regex.exec(text)) !== null) {
|
|
126
|
+
urls.push(match[0]);
|
|
127
|
+
}
|
|
128
|
+
return urls;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=package-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-files.js","sourceRoot":"","sources":["../../src/parsers/package-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* README Parser
|
|
3
|
+
* Extracts URLs and references from README and markdown files
|
|
4
|
+
*/
|
|
5
|
+
export interface ExtractedReference {
|
|
6
|
+
url: string;
|
|
7
|
+
context: string;
|
|
8
|
+
line?: number;
|
|
9
|
+
type: 'markdown-link' | 'bare-url' | 'reference-link';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse README content and extract external references
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseReadme(content: string, filePath?: string): ExtractedReference[];
|
|
15
|
+
/**
|
|
16
|
+
* Extract GitHub repository mentions (owner/repo format)
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractGitHubReferences(content: string): Array<{
|
|
19
|
+
owner: string;
|
|
20
|
+
repo: string;
|
|
21
|
+
context: string;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=readme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../src/parsers/readme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,GAAG,UAAU,GAAG,gBAAgB,CAAC;CACvD;AAgBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAc,GAAG,kBAAkB,EAAE,CAoDzF;AA6DD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCzD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* README Parser
|
|
3
|
+
* Extracts URLs and references from README and markdown files
|
|
4
|
+
*/
|
|
5
|
+
// Patterns to skip (package managers, CI badges, shields.io)
|
|
6
|
+
const SKIP_PATTERNS = [
|
|
7
|
+
/npmjs\.com\/package/,
|
|
8
|
+
/pypi\.org\/project/,
|
|
9
|
+
/crates\.io\/crates/,
|
|
10
|
+
/rubygems\.org\/gems/,
|
|
11
|
+
/packagist\.org\/packages/,
|
|
12
|
+
/shields\.io/,
|
|
13
|
+
/badge(s)?\..*\.svg/,
|
|
14
|
+
/travis-ci\.(org|com)/,
|
|
15
|
+
/circleci\.com/,
|
|
16
|
+
/github\.com\/.*\/actions/ // GitHub Actions badges
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Parse README content and extract external references
|
|
20
|
+
*/
|
|
21
|
+
export function parseReadme(content, filePath = 'README.md') {
|
|
22
|
+
const references = [];
|
|
23
|
+
const lines = content.split('\n');
|
|
24
|
+
for (let i = 0; i < lines.length; i++) {
|
|
25
|
+
const line = lines[i];
|
|
26
|
+
if (!line)
|
|
27
|
+
continue; // Skip undefined or empty lines
|
|
28
|
+
const lineNumber = i + 1;
|
|
29
|
+
// Extract markdown links [text](url)
|
|
30
|
+
const markdownLinks = extractMarkdownLinks(line);
|
|
31
|
+
for (const { url, text } of markdownLinks) {
|
|
32
|
+
if (!shouldSkipUrl(url)) {
|
|
33
|
+
references.push({
|
|
34
|
+
url,
|
|
35
|
+
context: text || line.trim(),
|
|
36
|
+
line: lineNumber,
|
|
37
|
+
type: 'markdown-link'
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Extract reference-style links [text]: url
|
|
42
|
+
const referenceLinks = extractReferenceLinks(line);
|
|
43
|
+
for (const { url, text } of referenceLinks) {
|
|
44
|
+
if (!shouldSkipUrl(url)) {
|
|
45
|
+
references.push({
|
|
46
|
+
url,
|
|
47
|
+
context: text || line.trim(),
|
|
48
|
+
line: lineNumber,
|
|
49
|
+
type: 'reference-link'
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Extract bare URLs
|
|
54
|
+
const bareUrls = extractBareUrls(line);
|
|
55
|
+
for (const url of bareUrls) {
|
|
56
|
+
if (!shouldSkipUrl(url)) {
|
|
57
|
+
references.push({
|
|
58
|
+
url,
|
|
59
|
+
context: line.trim(),
|
|
60
|
+
line: lineNumber,
|
|
61
|
+
type: 'bare-url'
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Deduplicate by URL
|
|
67
|
+
return deduplicateReferences(references);
|
|
68
|
+
}
|
|
69
|
+
function extractMarkdownLinks(line) {
|
|
70
|
+
const links = [];
|
|
71
|
+
const regex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
72
|
+
let match;
|
|
73
|
+
while ((match = regex.exec(line)) !== null) {
|
|
74
|
+
const text = match[1];
|
|
75
|
+
const url = match[2];
|
|
76
|
+
if (text !== undefined && url !== undefined) {
|
|
77
|
+
links.push({ text, url });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return links;
|
|
81
|
+
}
|
|
82
|
+
function extractReferenceLinks(line) {
|
|
83
|
+
const links = [];
|
|
84
|
+
const regex = /^\[([^\]]+)\]:\s+(.+)$/;
|
|
85
|
+
const match = regex.exec(line);
|
|
86
|
+
if (match) {
|
|
87
|
+
const text = match[1];
|
|
88
|
+
const url = match[2];
|
|
89
|
+
if (text !== undefined && url !== undefined) {
|
|
90
|
+
links.push({ text, url });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return links;
|
|
94
|
+
}
|
|
95
|
+
function extractBareUrls(line) {
|
|
96
|
+
const urls = [];
|
|
97
|
+
const regex = /https?:\/\/[^\s<>()[\]]+/g;
|
|
98
|
+
let match;
|
|
99
|
+
while ((match = regex.exec(line)) !== null) {
|
|
100
|
+
urls.push(match[0]);
|
|
101
|
+
}
|
|
102
|
+
return urls;
|
|
103
|
+
}
|
|
104
|
+
function shouldSkipUrl(url) {
|
|
105
|
+
return SKIP_PATTERNS.some((pattern) => pattern.test(url));
|
|
106
|
+
}
|
|
107
|
+
function deduplicateReferences(references) {
|
|
108
|
+
const seen = new Set();
|
|
109
|
+
return references.filter((ref) => {
|
|
110
|
+
if (seen.has(ref.url)) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
seen.add(ref.url);
|
|
114
|
+
return true;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract GitHub repository mentions (owner/repo format)
|
|
119
|
+
*/
|
|
120
|
+
export function extractGitHubReferences(content) {
|
|
121
|
+
const references = [];
|
|
122
|
+
const lines = content.split('\n');
|
|
123
|
+
for (const line of lines) {
|
|
124
|
+
// Match owner/repo pattern not in URLs, with basic length and context constraints
|
|
125
|
+
const regex = /(?<!https?:\/\/github\.com\/)(?:^|[\s(])([a-zA-Z0-9_-]{2,}\/[a-zA-Z0-9_.-]{2,})(?=$|[\s),.;])/g;
|
|
126
|
+
let match;
|
|
127
|
+
while ((match = regex.exec(line)) !== null) {
|
|
128
|
+
const ownerRepo = match[1];
|
|
129
|
+
if (ownerRepo) {
|
|
130
|
+
const parts = ownerRepo.split('/');
|
|
131
|
+
const owner = parts[0];
|
|
132
|
+
const repo = parts[1];
|
|
133
|
+
if (owner &&
|
|
134
|
+
repo &&
|
|
135
|
+
owner.length >= 2 &&
|
|
136
|
+
repo.length >= 2 &&
|
|
137
|
+
owner !== 'owner' &&
|
|
138
|
+
repo !== 'repo' &&
|
|
139
|
+
!(/^\d+$/.test(owner) && /^\d+$/.test(repo))) {
|
|
140
|
+
references.push({
|
|
141
|
+
owner,
|
|
142
|
+
repo,
|
|
143
|
+
context: line.trim()
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return references;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=readme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../../src/parsers/readme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,6DAA6D;AAC7D,MAAM,aAAa,GAAG;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,0BAA0B;IAC1B,aAAa;IACb,oBAAoB;IACpB,sBAAsB;IACtB,eAAe;IACf,0BAA0B,CAAC,wBAAwB;CACpD,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,QAAQ,GAAG,WAAW,EAAwB;IACzF,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS,CAAC,gCAAgC;QAErD,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,qCAAqC;QACrC,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,IAAI,CAAC;oBACd,GAAG;oBACH,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;oBAC5B,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,eAAe;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACnD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,IAAI,CAAC;oBACd,GAAG;oBACH,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;oBAC5B,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,gBAAgB;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,IAAI,CAAC;oBACd,GAAG;oBACH,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;oBACpB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,OAAO,qBAAqB,CAAC,UAAU,CAAC,CAAC;AAAA,CAC1C;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAwC;IAChF,MAAM,KAAK,GAAyC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,0BAA0B,CAAC;IACzC,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACd;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAwC;IACjF,MAAM,KAAK,GAAyC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,wBAAwB,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACd;AAED,SAAS,eAAe,CAAC,IAAY,EAAY;IAC/C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,2BAA2B,CAAC;IAC1C,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACb;AAED,SAAS,aAAa,CAAC,GAAW,EAAW;IAC3C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,CAC3D;AAED,SAAS,qBAAqB,CAAC,UAAgC,EAAwB;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IAAA,CACb,CAAC,CAAC;AAAA,CACJ;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EAC0C;IACzD,MAAM,UAAU,GAA4D,EAAE,CAAC;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,kFAAkF;QAClF,MAAM,KAAK,GACT,gGAAgG,CAAC;QACnG,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEtB,IACE,KAAK;oBACL,IAAI;oBACJ,KAAK,CAAC,MAAM,IAAI,CAAC;oBACjB,IAAI,CAAC,MAAM,IAAI,CAAC;oBAChB,KAAK,KAAK,OAAO;oBACjB,IAAI,KAAK,MAAM;oBACf,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAC5C,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC;wBACd,KAAK;wBACL,IAAI;wBACJ,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AAAA,CACnB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dependabit/detector",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "LLM-based dependency detection for external resources",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@actions/core": "^3.0.0",
|
|
16
|
+
"zod": "^4.3.6",
|
|
17
|
+
"@dependabit/github-client": "0.1.1",
|
|
18
|
+
"@dependabit/manifest": "0.1.1"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^25.2.2",
|
|
22
|
+
"tsx": "^4.21.0",
|
|
23
|
+
"typescript": "^5.9.3",
|
|
24
|
+
"vitest": "^4.0.18"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"dependency",
|
|
28
|
+
"detection",
|
|
29
|
+
"llm",
|
|
30
|
+
"ai"
|
|
31
|
+
],
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsgo -p tsconfig.json",
|
|
35
|
+
"clean": "rm -rf dist",
|
|
36
|
+
"dev": "tsx watch src/index.ts",
|
|
37
|
+
"type-check": "tsgo --noEmit -p tsconfig.json",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"test:watch": "vitest"
|
|
40
|
+
}
|
|
41
|
+
}
|