@norescan/analyzer 0.0.0-stage → 0.1.2
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/README.md +39 -2
- package/dist/analyzer.d.ts +14 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +45 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/generic.d.ts +6 -0
- package/dist/parsers/generic.d.ts.map +1 -0
- package/dist/parsers/generic.js +89 -0
- package/dist/parsers/generic.js.map +1 -0
- package/dist/parsers/python.d.ts +6 -0
- package/dist/parsers/python.d.ts.map +1 -0
- package/dist/parsers/python.js +88 -0
- package/dist/parsers/python.js.map +1 -0
- package/dist/parsers/sql.d.ts +6 -0
- package/dist/parsers/sql.d.ts.map +1 -0
- package/dist/parsers/sql.js +44 -0
- package/dist/parsers/sql.js.map +1 -0
- package/dist/parsers/typescript.d.ts +6 -0
- package/dist/parsers/typescript.d.ts.map +1 -0
- package/dist/parsers/typescript.js +145 -0
- package/dist/parsers/typescript.js.map +1 -0
- package/package.json +40 -3
package/README.md
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @norescan/analyzer
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Multi-language AST and lexical structural code parsers (TypeScript, JavaScript, Python, SQL, JSON).
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@norescan/analyzer)
|
|
6
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
7
|
+
[](https://github.com/th3karn/NoReScan)
|
|
8
|
+
|
|
9
|
+
Part of the **[NoReScan](https://github.com/th3karn/NoReScan)** persistent codebase memory infrastructure for AI coding agents.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
### Installation
|
|
14
|
+
```bash
|
|
15
|
+
npm install @norescan/analyzer
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Usage
|
|
19
|
+
```typescript
|
|
20
|
+
import { CodeAnalyzer } from '@norescan/analyzer';
|
|
21
|
+
|
|
22
|
+
const analyzer = new CodeAnalyzer();
|
|
23
|
+
const output = await analyzer.analyzeFile('/path/to/server.ts', 'src/server.ts', 'typescript');
|
|
24
|
+
|
|
25
|
+
console.log('Exports:', output.astMetadata.exports);
|
|
26
|
+
console.log('HTTP Routes:', output.astMetadata.routes);
|
|
27
|
+
console.log('Summary:', output.summary);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Part of NoReScan
|
|
33
|
+
|
|
34
|
+
This package is part of the **NoReScan monorepo**. Learn more at:
|
|
35
|
+
- **GitHub Repository**: [https://github.com/th3karn/NoReScan](https://github.com/th3karn/NoReScan)
|
|
36
|
+
- **Main CLI**: [`@norescan/cli`](https://www.npmjs.com/package/@norescan/cli)
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
Apache-2.0 © LostGit Solutions
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AstMetadata } from '@norescan/shared';
|
|
2
|
+
export declare const CURRENT_ANALYZER_VERSION = "1.0.0";
|
|
3
|
+
export declare const CURRENT_SCHEMA_VERSION = 1;
|
|
4
|
+
export interface AnalysisOutput {
|
|
5
|
+
summary: string;
|
|
6
|
+
astMetadata: AstMetadata;
|
|
7
|
+
analyzerVersion: string;
|
|
8
|
+
schemaVersion: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class CodeAnalyzer {
|
|
11
|
+
analyzeFile(absolutePath: string, relativePath: string, language: string): Promise<AnalysisOutput>;
|
|
12
|
+
analyzeSource(sourceText: string, relativePath: string, language: string): AnalysisOutput;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAChD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACV,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAKxG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc;CA0BjG"}
|
package/dist/analyzer.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
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.CodeAnalyzer = exports.CURRENT_SCHEMA_VERSION = exports.CURRENT_ANALYZER_VERSION = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const typescript_js_1 = require("./parsers/typescript.js");
|
|
9
|
+
const python_js_1 = require("./parsers/python.js");
|
|
10
|
+
const sql_js_1 = require("./parsers/sql.js");
|
|
11
|
+
const generic_js_1 = require("./parsers/generic.js");
|
|
12
|
+
exports.CURRENT_ANALYZER_VERSION = '1.0.0';
|
|
13
|
+
exports.CURRENT_SCHEMA_VERSION = 1;
|
|
14
|
+
class CodeAnalyzer {
|
|
15
|
+
async analyzeFile(absolutePath, relativePath, language) {
|
|
16
|
+
const content = await promises_1.default.readFile(absolutePath, 'utf8');
|
|
17
|
+
return this.analyzeSource(content, relativePath, language);
|
|
18
|
+
}
|
|
19
|
+
analyzeSource(sourceText, relativePath, language) {
|
|
20
|
+
let result;
|
|
21
|
+
switch (language) {
|
|
22
|
+
case 'typescript':
|
|
23
|
+
case 'javascript':
|
|
24
|
+
result = (0, typescript_js_1.parseTypeScript)(sourceText, relativePath);
|
|
25
|
+
break;
|
|
26
|
+
case 'python':
|
|
27
|
+
result = (0, python_js_1.parsePython)(sourceText, relativePath);
|
|
28
|
+
break;
|
|
29
|
+
case 'sql':
|
|
30
|
+
result = (0, sql_js_1.parseSql)(sourceText, relativePath);
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
result = (0, generic_js_1.parseGeneric)(sourceText, relativePath, language);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
summary: result.summary,
|
|
38
|
+
astMetadata: result.metadata,
|
|
39
|
+
analyzerVersion: exports.CURRENT_ANALYZER_VERSION,
|
|
40
|
+
schemaVersion: exports.CURRENT_SCHEMA_VERSION,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.CodeAnalyzer = CodeAnalyzer;
|
|
45
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAkC;AAClC,2DAA0D;AAC1D,mDAAkD;AAClD,6CAA4C;AAC5C,qDAAoD;AAGvC,QAAA,wBAAwB,GAAG,OAAO,CAAC;AACnC,QAAA,sBAAsB,GAAG,CAAC,CAAC;AASxC,MAAa,YAAY;IAChB,KAAK,CAAC,WAAW,CAAC,YAAoB,EAAE,YAAoB,EAAE,QAAgB;QACnF,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,UAAkB,EAAE,YAAoB,EAAE,QAAgB;QAC7E,IAAI,MAAkD,CAAC;QAEvD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACf,MAAM,GAAG,IAAA,+BAAe,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,GAAG,IAAA,uBAAW,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBAC/C,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,IAAA,iBAAQ,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBAC5C,MAAM;YACR;gBACE,MAAM,GAAG,IAAA,yBAAY,EAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM;QACV,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,QAAQ;YAC5B,eAAe,EAAE,gCAAwB;YACzC,aAAa,EAAE,8BAAsB;SACtC,CAAC;IACJ,CAAC;CACF;AAhCD,oCAgCC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./analyzer.js"), exports);
|
|
18
|
+
__exportStar(require("./parsers/typescript.js"), exports);
|
|
19
|
+
__exportStar(require("./parsers/python.js"), exports);
|
|
20
|
+
__exportStar(require("./parsers/sql.js"), exports);
|
|
21
|
+
__exportStar(require("./parsers/generic.js"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,0DAAwC;AACxC,sDAAoC;AACpC,mDAAiC;AACjC,uDAAqC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/parsers/generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAsC,MAAM,kBAAkB,CAAC;AAEnF,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoF/H"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseGeneric = parseGeneric;
|
|
4
|
+
function parseGeneric(sourceText, fileName, language) {
|
|
5
|
+
const symbols = [];
|
|
6
|
+
const exports = [];
|
|
7
|
+
// JSON files
|
|
8
|
+
if (language === 'json') {
|
|
9
|
+
try {
|
|
10
|
+
const parsed = JSON.parse(sourceText);
|
|
11
|
+
const keys = Object.keys(parsed).slice(0, 10);
|
|
12
|
+
return {
|
|
13
|
+
metadata: {
|
|
14
|
+
symbols: keys.map((k) => ({ name: k, kind: 'property', line: 1, exported: true })),
|
|
15
|
+
imports: [],
|
|
16
|
+
exports: keys.map((k) => ({ name: k, kind: 'variable' })),
|
|
17
|
+
},
|
|
18
|
+
summary: `JSON configuration with keys: ${keys.join(', ')}`,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return { metadata: { symbols: [], imports: [], exports: [] }, summary: `JSON file ${fileName}` };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Go / Rust / Java symbol regex matching
|
|
26
|
+
const lines = sourceText.split(/\r?\n/);
|
|
27
|
+
for (let i = 0; i < lines.length; i++) {
|
|
28
|
+
const line = lines[i].trim();
|
|
29
|
+
const lineNum = i + 1;
|
|
30
|
+
// Go: func (r *Receiver) Name(...) or func Name(...)
|
|
31
|
+
if (language === 'go') {
|
|
32
|
+
const funcMatch = line.match(/^func\s+(?:\([^)]+\)\s+)?([A-Za-z0-9_]+)\s*\(/);
|
|
33
|
+
if (funcMatch) {
|
|
34
|
+
const name = funcMatch[1];
|
|
35
|
+
const isExported = /^[A-Z]/.test(name);
|
|
36
|
+
symbols.push({ name, kind: 'function', line: lineNum, exported: isExported });
|
|
37
|
+
if (isExported)
|
|
38
|
+
exports.push({ name, kind: 'function' });
|
|
39
|
+
}
|
|
40
|
+
const typeMatch = line.match(/^type\s+([A-Za-z0-9_]+)\s+(?:struct|interface)/);
|
|
41
|
+
if (typeMatch) {
|
|
42
|
+
const name = typeMatch[1];
|
|
43
|
+
const isExported = /^[A-Z]/.test(name);
|
|
44
|
+
symbols.push({ name, kind: 'type', line: lineNum, exported: isExported });
|
|
45
|
+
if (isExported)
|
|
46
|
+
exports.push({ name, kind: 'type' });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Rust: pub fn name(...) or fn name(...)
|
|
50
|
+
if (language === 'rust') {
|
|
51
|
+
const fnMatch = line.match(/^(?:pub\s+)?(?:async\s+)?fn\s+([A-Za-z0-9_]+)\s*\(/);
|
|
52
|
+
if (fnMatch) {
|
|
53
|
+
const name = fnMatch[1];
|
|
54
|
+
const isExported = line.startsWith('pub ');
|
|
55
|
+
symbols.push({ name, kind: 'function', line: lineNum, exported: isExported });
|
|
56
|
+
if (isExported)
|
|
57
|
+
exports.push({ name, kind: 'function' });
|
|
58
|
+
}
|
|
59
|
+
const structMatch = line.match(/^(?:pub\s+)?(?:struct|enum)\s+([A-Za-z0-9_]+)/);
|
|
60
|
+
if (structMatch) {
|
|
61
|
+
const name = structMatch[1];
|
|
62
|
+
const isExported = line.startsWith('pub ');
|
|
63
|
+
symbols.push({ name, kind: 'type', line: lineNum, exported: isExported });
|
|
64
|
+
if (isExported)
|
|
65
|
+
exports.push({ name, kind: 'type' });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Java: public class Name or public void name(...)
|
|
69
|
+
if (language === 'java') {
|
|
70
|
+
const classMatch = line.match(/^public\s+class\s+([A-Za-z0-9_]+)/);
|
|
71
|
+
if (classMatch) {
|
|
72
|
+
const name = classMatch[1];
|
|
73
|
+
symbols.push({ name, kind: 'class', line: lineNum, exported: true });
|
|
74
|
+
exports.push({ name, kind: 'class' });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const parts = [];
|
|
79
|
+
if (exports.length > 0)
|
|
80
|
+
parts.push(`Exports: ${exports.slice(0, 5).map((e) => e.name).join(', ')}`);
|
|
81
|
+
else if (symbols.length > 0)
|
|
82
|
+
parts.push(`Symbols: ${symbols.slice(0, 5).map((s) => s.name).join(', ')}`);
|
|
83
|
+
const summary = parts.length > 0 ? parts.join(' | ') : `${language} file ${fileName}`;
|
|
84
|
+
return {
|
|
85
|
+
metadata: { symbols, imports: [], exports },
|
|
86
|
+
summary,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=generic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/parsers/generic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/parsers/python.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyE,MAAM,kBAAkB,CAAC;AAEtH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAwF5G"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePython = parsePython;
|
|
4
|
+
function parsePython(sourceText, fileName) {
|
|
5
|
+
const lines = sourceText.split(/\r?\n/);
|
|
6
|
+
const imports = [];
|
|
7
|
+
const exports = [];
|
|
8
|
+
const symbols = [];
|
|
9
|
+
const routes = [];
|
|
10
|
+
let pendingDecorator = null;
|
|
11
|
+
for (let i = 0; i < lines.length; i++) {
|
|
12
|
+
const line = lines[i].trim();
|
|
13
|
+
const lineNum = i + 1;
|
|
14
|
+
// 1. Imports
|
|
15
|
+
// e.g. import os, sys
|
|
16
|
+
if (line.startsWith('import ')) {
|
|
17
|
+
const parts = line.slice(7).split(',').map((p) => p.trim());
|
|
18
|
+
for (const p of parts) {
|
|
19
|
+
imports.push({ source: p, specifiers: [p], isDynamic: false, isTypeOnly: false });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// e.g. from fastapi import FastAPI, Depends
|
|
23
|
+
if (line.startsWith('from ')) {
|
|
24
|
+
const match = line.match(/^from\s+([\w\.]+)\s+import\s+(.+)$/);
|
|
25
|
+
if (match) {
|
|
26
|
+
const source = match[1];
|
|
27
|
+
const specifiers = match[2].split(',').map((s) => s.trim().split(/\s+as\s+/)[0]);
|
|
28
|
+
imports.push({ source, specifiers, isDynamic: false, isTypeOnly: false });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// 2. Route decorators (FastAPI/Flask)
|
|
32
|
+
// e.g. @app.get("/users") or @router.post('/login')
|
|
33
|
+
const routeMatch = line.match(/^@(?:app|router)\.(get|post|put|delete|patch)\(\s*["']([^"']+)["']/i);
|
|
34
|
+
if (routeMatch) {
|
|
35
|
+
pendingDecorator = {
|
|
36
|
+
method: routeMatch[1].toUpperCase(),
|
|
37
|
+
path: routeMatch[2],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// 3. Classes
|
|
41
|
+
// e.g. class User(BaseModel):
|
|
42
|
+
const classMatch = line.match(/^class\s+([A-Za-z0-9_]+)(?:\(([^)]+)\))?:/);
|
|
43
|
+
if (classMatch) {
|
|
44
|
+
const name = classMatch[1];
|
|
45
|
+
symbols.push({ name, kind: 'class', line: lineNum, exported: !name.startsWith('_') });
|
|
46
|
+
if (!name.startsWith('_')) {
|
|
47
|
+
exports.push({ name, kind: 'class' });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// 4. Functions / async functions
|
|
51
|
+
// e.g. def get_user(id: int):
|
|
52
|
+
const funcMatch = line.match(/^(?:async\s+)?def\s+([A-Za-z0-9_]+)\s*\(([^)]*)\)/);
|
|
53
|
+
if (funcMatch) {
|
|
54
|
+
const name = funcMatch[1];
|
|
55
|
+
const isPublic = !name.startsWith('_');
|
|
56
|
+
symbols.push({ name, kind: 'function', line: lineNum, exported: isPublic });
|
|
57
|
+
if (isPublic) {
|
|
58
|
+
exports.push({ name, kind: 'function', signature: funcMatch[0] });
|
|
59
|
+
}
|
|
60
|
+
if (pendingDecorator) {
|
|
61
|
+
routes.push({
|
|
62
|
+
method: pendingDecorator.method,
|
|
63
|
+
path: pendingDecorator.path,
|
|
64
|
+
handler: name,
|
|
65
|
+
});
|
|
66
|
+
pendingDecorator = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const parts = [];
|
|
71
|
+
if (routes.length > 0)
|
|
72
|
+
parts.push(`Routes: ${routes.map((r) => `${r.method} ${r.path}`).join(', ')}`);
|
|
73
|
+
if (exports.length > 0)
|
|
74
|
+
parts.push(`Exports: ${exports.map((e) => `${e.kind} ${e.name}`).join(', ')}`);
|
|
75
|
+
if (imports.length > 0)
|
|
76
|
+
parts.push(`Imports: ${imports.length} modules`);
|
|
77
|
+
const summary = parts.length > 0 ? parts.join(' | ') : `Python module ${fileName}`;
|
|
78
|
+
return {
|
|
79
|
+
metadata: {
|
|
80
|
+
symbols,
|
|
81
|
+
imports,
|
|
82
|
+
exports,
|
|
83
|
+
routes: routes.length > 0 ? routes : undefined,
|
|
84
|
+
},
|
|
85
|
+
summary,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/parsers/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/parsers/sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqC,MAAM,kBAAkB,CAAC;AAElF,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8CzG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSql = parseSql;
|
|
4
|
+
function parseSql(sourceText, fileName) {
|
|
5
|
+
const models = [];
|
|
6
|
+
const symbols = [];
|
|
7
|
+
// Match CREATE TABLE [IF NOT EXISTS] tableName (...)
|
|
8
|
+
const tableRegex = /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?([A-Za-z0-9_"]+)\s*\(([\s\S]*?)\);/gi;
|
|
9
|
+
let match;
|
|
10
|
+
while ((match = tableRegex.exec(sourceText)) !== null) {
|
|
11
|
+
const rawTableName = match[1].replace(/["`]/g, '');
|
|
12
|
+
const body = match[2];
|
|
13
|
+
const fields = [];
|
|
14
|
+
const lines = body.split(',').map((l) => l.trim()).filter((l) => l.length > 0);
|
|
15
|
+
for (const l of lines) {
|
|
16
|
+
if (l.startsWith('PRIMARY KEY') || l.startsWith('FOREIGN KEY') || l.startsWith('CONSTRAINT') || l.startsWith('UNIQUE')) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const parts = l.split(/\s+/);
|
|
20
|
+
if (parts.length >= 2) {
|
|
21
|
+
fields.push({
|
|
22
|
+
name: parts[0].replace(/["`]/g, ''),
|
|
23
|
+
type: parts[1],
|
|
24
|
+
isOptional: !l.toUpperCase().includes('NOT NULL'),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
models.push({ name: rawTableName, fields });
|
|
29
|
+
symbols.push({ name: rawTableName, kind: 'table', line: 1, exported: true });
|
|
30
|
+
}
|
|
31
|
+
const summary = models.length > 0
|
|
32
|
+
? `Database tables: ${models.map((m) => m.name).join(', ')}`
|
|
33
|
+
: `SQL schema file ${fileName}`;
|
|
34
|
+
return {
|
|
35
|
+
metadata: {
|
|
36
|
+
symbols,
|
|
37
|
+
imports: [],
|
|
38
|
+
exports: models.map((m) => ({ name: m.name, kind: 'class' })),
|
|
39
|
+
models,
|
|
40
|
+
},
|
|
41
|
+
summary,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/parsers/sql.ts"],"names":[],"mappings":";;AAEA,4BA8CC;AA9CD,SAAgB,QAAQ,CAAC,UAAkB,EAAE,QAAgB;IAC3D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,qDAAqD;IACrD,MAAM,UAAU,GAAG,gFAAgF,CAAC;IACpG,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAgE,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvH,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,UAAU,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;iBAClD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;QAC/B,CAAC,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC5D,CAAC,CAAC,mBAAmB,QAAQ,EAAE,CAAC;IAElC,OAAO;QACL,QAAQ,EAAE;YACR,OAAO;YACP,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM;SACP;QACD,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/parsers/typescript.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAyE,MAAM,kBAAkB,CAAC;AAEtH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsIhH"}
|
|
@@ -0,0 +1,145 @@
|
|
|
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.parseTypeScript = parseTypeScript;
|
|
7
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
function parseTypeScript(sourceText, fileName) {
|
|
9
|
+
const isJsx = fileName.endsWith('.tsx') || fileName.endsWith('.jsx');
|
|
10
|
+
const sourceFile = typescript_1.default.createSourceFile(fileName, sourceText, typescript_1.default.ScriptTarget.Latest, true, isJsx ? typescript_1.default.ScriptKind.TSX : typescript_1.default.ScriptKind.TS);
|
|
11
|
+
const imports = [];
|
|
12
|
+
const exports = [];
|
|
13
|
+
const symbols = [];
|
|
14
|
+
const routes = [];
|
|
15
|
+
function visit(node) {
|
|
16
|
+
const line = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
|
|
17
|
+
// 1. Imports
|
|
18
|
+
if (typescript_1.default.isImportDeclaration(node)) {
|
|
19
|
+
const moduleSpecifier = node.moduleSpecifier.text;
|
|
20
|
+
const specifiers = [];
|
|
21
|
+
let isTypeOnly = node.importClause?.isTypeOnly ?? false;
|
|
22
|
+
if (node.importClause?.name) {
|
|
23
|
+
specifiers.push(node.importClause.name.text);
|
|
24
|
+
}
|
|
25
|
+
if (node.importClause?.namedBindings) {
|
|
26
|
+
if (typescript_1.default.isNamedImports(node.importClause.namedBindings)) {
|
|
27
|
+
for (const el of node.importClause.namedBindings.elements) {
|
|
28
|
+
specifiers.push(el.name.text);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else if (typescript_1.default.isNamespaceImport(node.importClause.namedBindings)) {
|
|
32
|
+
specifiers.push(`* as ${node.importClause.namedBindings.name.text}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
imports.push({
|
|
36
|
+
source: moduleSpecifier,
|
|
37
|
+
specifiers,
|
|
38
|
+
isTypeOnly,
|
|
39
|
+
isDynamic: false,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// 2. Call expressions (dynamic imports, routes, etc.)
|
|
43
|
+
if (typescript_1.default.isCallExpression(node)) {
|
|
44
|
+
const text = node.expression.getText(sourceFile);
|
|
45
|
+
// HTTP Route detection (e.g., app.get, router.post, route.delete)
|
|
46
|
+
const routeMatch = text.match(/(?:app|router|fastify|server)\.(get|post|put|delete|patch|all)$/i);
|
|
47
|
+
if (routeMatch && node.arguments.length > 0) {
|
|
48
|
+
const method = routeMatch[1].toUpperCase();
|
|
49
|
+
const firstArg = node.arguments[0];
|
|
50
|
+
if (typescript_1.default.isStringLiteral(firstArg)) {
|
|
51
|
+
routes.push({
|
|
52
|
+
method,
|
|
53
|
+
path: firstArg.text,
|
|
54
|
+
handler: text,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// 3. Functions
|
|
60
|
+
if (typescript_1.default.isFunctionDeclaration(node) && node.name) {
|
|
61
|
+
const isExported = hasExportModifier(node);
|
|
62
|
+
const name = node.name.text;
|
|
63
|
+
const signature = node.getText(sourceFile).split('{')[0].trim();
|
|
64
|
+
symbols.push({ name, kind: 'function', line, signature, exported: isExported });
|
|
65
|
+
if (isExported) {
|
|
66
|
+
exports.push({ name, kind: 'function', signature });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 4. Classes
|
|
70
|
+
if (typescript_1.default.isClassDeclaration(node) && node.name) {
|
|
71
|
+
const isExported = hasExportModifier(node);
|
|
72
|
+
const name = node.name.text;
|
|
73
|
+
symbols.push({ name, kind: 'class', line, exported: isExported });
|
|
74
|
+
if (isExported) {
|
|
75
|
+
exports.push({ name, kind: 'class' });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 5. Interfaces
|
|
79
|
+
if (typescript_1.default.isInterfaceDeclaration(node)) {
|
|
80
|
+
const isExported = hasExportModifier(node);
|
|
81
|
+
const name = node.name.text;
|
|
82
|
+
symbols.push({ name, kind: 'interface', line, exported: isExported });
|
|
83
|
+
if (isExported) {
|
|
84
|
+
exports.push({ name, kind: 'interface' });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// 6. Type Aliases
|
|
88
|
+
if (typescript_1.default.isTypeAliasDeclaration(node)) {
|
|
89
|
+
const isExported = hasExportModifier(node);
|
|
90
|
+
const name = node.name.text;
|
|
91
|
+
symbols.push({ name, kind: 'type', line, exported: isExported });
|
|
92
|
+
if (isExported) {
|
|
93
|
+
exports.push({ name, kind: 'type' });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// 7. Variable Statements (const foo = () => {}, export const x = 1)
|
|
97
|
+
if (typescript_1.default.isVariableStatement(node)) {
|
|
98
|
+
const isExported = hasExportModifier(node);
|
|
99
|
+
for (const decl of node.declarationList.declarations) {
|
|
100
|
+
if (typescript_1.default.isIdentifier(decl.name)) {
|
|
101
|
+
const name = decl.name.text;
|
|
102
|
+
const isFunc = decl.initializer && (typescript_1.default.isArrowFunction(decl.initializer) || typescript_1.default.isFunctionExpression(decl.initializer));
|
|
103
|
+
const kind = isFunc ? 'function' : 'variable';
|
|
104
|
+
symbols.push({ name, kind, line, exported: isExported });
|
|
105
|
+
if (isExported) {
|
|
106
|
+
exports.push({ name, kind });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
typescript_1.default.forEachChild(node, visit);
|
|
112
|
+
}
|
|
113
|
+
visit(sourceFile);
|
|
114
|
+
const summary = generateSummary(fileName, symbols, exports, routes, imports);
|
|
115
|
+
return {
|
|
116
|
+
metadata: {
|
|
117
|
+
symbols,
|
|
118
|
+
imports,
|
|
119
|
+
exports,
|
|
120
|
+
routes: routes.length > 0 ? routes : undefined,
|
|
121
|
+
},
|
|
122
|
+
summary,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function hasExportModifier(node) {
|
|
126
|
+
const modifiers = typescript_1.default.canHaveModifiers(node) ? typescript_1.default.getModifiers(node) : undefined;
|
|
127
|
+
return Boolean(modifiers?.some((m) => m.kind === typescript_1.default.SyntaxKind.ExportKeyword));
|
|
128
|
+
}
|
|
129
|
+
function generateSummary(fileName, symbols, exports, routes, imports) {
|
|
130
|
+
const parts = [];
|
|
131
|
+
if (routes.length > 0) {
|
|
132
|
+
parts.push(`Routes: ${routes.map((r) => `${r.method} ${r.path}`).join(', ')}`);
|
|
133
|
+
}
|
|
134
|
+
if (exports.length > 0) {
|
|
135
|
+
parts.push(`Exports: ${exports.map((e) => `${e.kind} ${e.name}`).join(', ')}`);
|
|
136
|
+
}
|
|
137
|
+
else if (symbols.length > 0) {
|
|
138
|
+
parts.push(`Symbols: ${symbols.slice(0, 5).map((s) => s.name).join(', ')}`);
|
|
139
|
+
}
|
|
140
|
+
if (imports.length > 0) {
|
|
141
|
+
parts.push(`Imports from ${imports.length} modules`);
|
|
142
|
+
}
|
|
143
|
+
return parts.length > 0 ? parts.join(' | ') : `Source file ${fileName}`;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/parsers/typescript.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@norescan/analyzer",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Multi-language AST and structural code analyzer for norescan",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@norescan/shared": "0.1.2",
|
|
9
|
+
"typescript": "^5.8.2"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@types/node": "^22.13.10",
|
|
13
|
+
"vitest": "^3.0.8"
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"license": "Apache-2.0",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"homepage": "https://github.com/th3karn/NoReScan#readme",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/th3karn/NoReScan.git",
|
|
26
|
+
"directory": "packages/analyzer"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"norescan",
|
|
30
|
+
"analyzer",
|
|
31
|
+
"ast",
|
|
32
|
+
"typescript-compiler",
|
|
33
|
+
"python-ast",
|
|
34
|
+
"symbols",
|
|
35
|
+
"routes"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc",
|
|
39
|
+
"clean": "rimraf dist",
|
|
40
|
+
"typecheck": "tsc --noEmit",
|
|
41
|
+
"test": "vitest run"
|
|
42
|
+
}
|
|
6
43
|
}
|