@paparats/shared 0.2.22 → 0.2.24
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/language-detect.d.ts +6 -0
- package/dist/language-detect.d.ts.map +1 -0
- package/dist/language-detect.js +62 -0
- package/dist/language-detect.js.map +1 -0
- package/dist/language-detect.test.d.ts +2 -0
- package/dist/language-detect.test.d.ts.map +1 -0
- package/dist/language-detect.test.js +49 -0
- package/dist/language-detect.test.js.map +1 -0
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { validateIndexingPaths } from './path-validation.js';
|
|
|
2
2
|
export { normalizeExcludePatterns } from './exclude-patterns.js';
|
|
3
3
|
export { LANGUAGE_EXCLUDE_DEFAULTS, COMMON_EXCLUDE, DEFAULT_EXCLUDE_BARE, getDefaultExcludeForLanguages, } from './language-excludes.js';
|
|
4
4
|
export { createGitignoreFilter, filterFilesByGitignore } from './gitignore.js';
|
|
5
|
+
export { detectLanguageByPath } from './language-detect.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,4 +2,5 @@ export { validateIndexingPaths } from './path-validation.js';
|
|
|
2
2
|
export { normalizeExcludePatterns } from './exclude-patterns.js';
|
|
3
3
|
export { LANGUAGE_EXCLUDE_DEFAULTS, COMMON_EXCLUDE, DEFAULT_EXCLUDE_BARE, getDefaultExcludeForLanguages, } from './language-excludes.js';
|
|
4
4
|
export { createGitignoreFilter, filterFilesByGitignore } from './gitignore.js';
|
|
5
|
+
export { detectLanguageByPath } from './language-detect.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect language from a file path, optionally using its content for shebang
|
|
3
|
+
* detection when the extension is unknown.
|
|
4
|
+
*/
|
|
5
|
+
export declare function detectLanguageByPath(relPath: string, content?: string): string | null;
|
|
6
|
+
//# sourceMappingURL=language-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../src/language-detect.ts"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAerF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Per-file language detection.
|
|
4
|
+
*
|
|
5
|
+
* Returns a language key matching the server's LANGUAGE_PROFILES keys
|
|
6
|
+
* ('ruby', 'typescript', 'python', 'go', 'rust', 'java', 'c', 'cpp', 'csharp',
|
|
7
|
+
* 'javascript') or null if the file cannot be confidently classified.
|
|
8
|
+
*
|
|
9
|
+
* Strategy: extension table first, shebang fallback for files without a known
|
|
10
|
+
* extension. Ambiguous extensions are resolved conservatively:
|
|
11
|
+
* - `.h` → 'c' (C++ project should carry an explicit project-level fallback)
|
|
12
|
+
* - `.js` → 'typescript' (our TS profile already covers .js; keeps tree-sitter
|
|
13
|
+
* grammar selection sane in mixed TS/JS repos)
|
|
14
|
+
*/
|
|
15
|
+
const EXT_TO_LANGUAGE = {
|
|
16
|
+
'.rb': 'ruby',
|
|
17
|
+
'.rake': 'ruby',
|
|
18
|
+
'.rbs': 'ruby',
|
|
19
|
+
'.ts': 'typescript',
|
|
20
|
+
'.tsx': 'typescript',
|
|
21
|
+
'.js': 'typescript',
|
|
22
|
+
'.jsx': 'typescript',
|
|
23
|
+
'.mjs': 'typescript',
|
|
24
|
+
'.cjs': 'typescript',
|
|
25
|
+
'.py': 'python',
|
|
26
|
+
'.go': 'go',
|
|
27
|
+
'.rs': 'rust',
|
|
28
|
+
'.java': 'java',
|
|
29
|
+
'.c': 'c',
|
|
30
|
+
'.h': 'c',
|
|
31
|
+
'.cpp': 'cpp',
|
|
32
|
+
'.hpp': 'cpp',
|
|
33
|
+
'.cc': 'cpp',
|
|
34
|
+
'.hh': 'cpp',
|
|
35
|
+
'.cxx': 'cpp',
|
|
36
|
+
'.cs': 'csharp',
|
|
37
|
+
};
|
|
38
|
+
const SHEBANG_TO_LANGUAGE = [
|
|
39
|
+
{ pattern: /^#!.*\b(ruby)\b/, language: 'ruby' },
|
|
40
|
+
{ pattern: /^#!.*\b(python[0-9.]*)\b/, language: 'python' },
|
|
41
|
+
{ pattern: /^#!.*\b(node|deno|bun)\b/, language: 'typescript' },
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* Detect language from a file path, optionally using its content for shebang
|
|
45
|
+
* detection when the extension is unknown.
|
|
46
|
+
*/
|
|
47
|
+
export function detectLanguageByPath(relPath, content) {
|
|
48
|
+
const ext = path.extname(relPath).toLowerCase();
|
|
49
|
+
if (ext && EXT_TO_LANGUAGE[ext]) {
|
|
50
|
+
return EXT_TO_LANGUAGE[ext];
|
|
51
|
+
}
|
|
52
|
+
if (content) {
|
|
53
|
+
const nl = content.indexOf('\n');
|
|
54
|
+
const firstLine = nl === -1 ? content.slice(0, 200) : content.slice(0, nl);
|
|
55
|
+
for (const { pattern, language } of SHEBANG_TO_LANGUAGE) {
|
|
56
|
+
if (pattern.test(firstLine))
|
|
57
|
+
return language;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=language-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.js","sourceRoot":"","sources":["../src/language-detect.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;GAYG;AAEH,MAAM,eAAe,GAA2B;IAC9C,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,mBAAmB,GAAiD;IACxE,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE;IAChD,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC3D,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,YAAY,EAAE;CAChE,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,OAAgB;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,mBAAmB,EAAE,CAAC;YACxD,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,OAAO,QAAQ,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.test.d.ts","sourceRoot":"","sources":["../src/language-detect.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { detectLanguageByPath } from './language-detect.js';
|
|
3
|
+
describe('detectLanguageByPath', () => {
|
|
4
|
+
it('detects common extensions', () => {
|
|
5
|
+
expect(detectLanguageByPath('app/models/user.rb')).toBe('ruby');
|
|
6
|
+
expect(detectLanguageByPath('Rakefile.rake')).toBe('ruby');
|
|
7
|
+
expect(detectLanguageByPath('sig/user.rbs')).toBe('ruby');
|
|
8
|
+
expect(detectLanguageByPath('src/index.ts')).toBe('typescript');
|
|
9
|
+
expect(detectLanguageByPath('src/App.tsx')).toBe('typescript');
|
|
10
|
+
expect(detectLanguageByPath('script.js')).toBe('typescript');
|
|
11
|
+
expect(detectLanguageByPath('module.mjs')).toBe('typescript');
|
|
12
|
+
expect(detectLanguageByPath('main.py')).toBe('python');
|
|
13
|
+
expect(detectLanguageByPath('main.go')).toBe('go');
|
|
14
|
+
expect(detectLanguageByPath('lib.rs')).toBe('rust');
|
|
15
|
+
expect(detectLanguageByPath('App.java')).toBe('java');
|
|
16
|
+
expect(detectLanguageByPath('Program.cs')).toBe('csharp');
|
|
17
|
+
});
|
|
18
|
+
it('maps C/C++ extensions conservatively', () => {
|
|
19
|
+
expect(detectLanguageByPath('foo.c')).toBe('c');
|
|
20
|
+
expect(detectLanguageByPath('foo.h')).toBe('c');
|
|
21
|
+
expect(detectLanguageByPath('foo.cpp')).toBe('cpp');
|
|
22
|
+
expect(detectLanguageByPath('foo.hpp')).toBe('cpp');
|
|
23
|
+
expect(detectLanguageByPath('foo.cc')).toBe('cpp');
|
|
24
|
+
});
|
|
25
|
+
it('is case-insensitive on extension', () => {
|
|
26
|
+
expect(detectLanguageByPath('Foo.RB')).toBe('ruby');
|
|
27
|
+
expect(detectLanguageByPath('Main.JAVA')).toBe('java');
|
|
28
|
+
});
|
|
29
|
+
it('returns null for unknown extensions without content', () => {
|
|
30
|
+
expect(detectLanguageByPath('README.md')).toBeNull();
|
|
31
|
+
expect(detectLanguageByPath('config.yaml')).toBeNull();
|
|
32
|
+
expect(detectLanguageByPath('Dockerfile')).toBeNull();
|
|
33
|
+
});
|
|
34
|
+
it('detects language from shebang when extension is unknown', () => {
|
|
35
|
+
expect(detectLanguageByPath('bin/console', '#!/usr/bin/env ruby\nputs :hi\n')).toBe('ruby');
|
|
36
|
+
expect(detectLanguageByPath('bin/tool', '#!/usr/bin/python3\nprint(1)\n')).toBe('python');
|
|
37
|
+
expect(detectLanguageByPath('bin/run', '#!/usr/bin/env node\nconsole.log(1)\n')).toBe('typescript');
|
|
38
|
+
});
|
|
39
|
+
it('prefers extension over shebang when both are present', () => {
|
|
40
|
+
expect(detectLanguageByPath('app.rb', '#!/usr/bin/env python3\nputs :hi\n')).toBe('ruby');
|
|
41
|
+
});
|
|
42
|
+
it('returns null when content has no shebang and no extension', () => {
|
|
43
|
+
expect(detectLanguageByPath('LICENSE', 'MIT License\nCopyright ...\n')).toBeNull();
|
|
44
|
+
});
|
|
45
|
+
it('handles single-line content without newline', () => {
|
|
46
|
+
expect(detectLanguageByPath('bin/run', '#!/usr/bin/env ruby')).toBe('ruby');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=language-detect.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.test.js","sourceRoot":"","sources":["../src/language-detect.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paparats/shared",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.24",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Shared utilities for Paparats MCP - path validation, gitignore filtering, language-aware exclude patterns",
|
|
6
6
|
"license": "MIT",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"ignore": "^7.0.5"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@types/node": "^25.
|
|
59
|
+
"@types/node": "^25.6.0",
|
|
60
60
|
"typescript": "^5.9.3",
|
|
61
|
-
"vitest": "^4.1.
|
|
61
|
+
"vitest": "^4.1.4"
|
|
62
62
|
}
|
|
63
63
|
}
|