@untangle-code/scanner 0.0.0-stage → 0.1.0
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/LICENSE +661 -0
- package/NOTICE +90 -0
- package/README.md +303 -2
- package/THIRD_PARTY_LICENSES.md +24 -0
- package/dist/binary-classifier.d.ts +45 -0
- package/dist/binary-classifier.d.ts.map +1 -0
- package/dist/binary-classifier.js +296 -0
- package/dist/binary-classifier.js.map +1 -0
- package/dist/concurrency.d.ts +8 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +64 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/discovery.d.ts +9 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +254 -0
- package/dist/discovery.js.map +1 -0
- package/dist/gitignore-pattern.d.ts +35 -0
- package/dist/gitignore-pattern.d.ts.map +1 -0
- package/dist/gitignore-pattern.js +155 -0
- package/dist/gitignore-pattern.js.map +1 -0
- package/dist/hashing.d.ts +14 -0
- package/dist/hashing.d.ts.map +1 -0
- package/dist/hashing.js +32 -0
- package/dist/hashing.js.map +1 -0
- package/dist/ignore-engine.d.ts +27 -0
- package/dist/ignore-engine.d.ts.map +1 -0
- package/dist/ignore-engine.js +130 -0
- package/dist/ignore-engine.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/language-classifier.d.ts +19 -0
- package/dist/language-classifier.d.ts.map +1 -0
- package/dist/language-classifier.js +114 -0
- package/dist/language-classifier.js.map +1 -0
- package/dist/node-fs/index.d.ts +10 -0
- package/dist/node-fs/index.d.ts.map +1 -0
- package/dist/node-fs/index.js +10 -0
- package/dist/node-fs/index.js.map +1 -0
- package/dist/node-fs/node-file-system.d.ts +19 -0
- package/dist/node-fs/node-file-system.d.ts.map +1 -0
- package/dist/node-fs/node-file-system.js +104 -0
- package/dist/node-fs/node-file-system.js.map +1 -0
- package/dist/node-fs/node-streaming-hasher.d.ts +4 -0
- package/dist/node-fs/node-streaming-hasher.d.ts.map +1 -0
- package/dist/node-fs/node-streaming-hasher.js +33 -0
- package/dist/node-fs/node-streaming-hasher.js.map +1 -0
- package/dist/port-options.d.ts +8 -0
- package/dist/port-options.d.ts.map +1 -0
- package/dist/port-options.js +4 -0
- package/dist/port-options.js.map +1 -0
- package/dist/semaphore.d.ts +18 -0
- package/dist/semaphore.d.ts.map +1 -0
- package/dist/semaphore.js +42 -0
- package/dist/semaphore.js.map +1 -0
- package/dist/types.d.ts +102 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +63 -3
- package/src/binary-classifier.ts +365 -0
- package/src/concurrency.ts +78 -0
- package/src/discovery.ts +362 -0
- package/src/gitignore-pattern.ts +170 -0
- package/src/hashing.ts +37 -0
- package/src/ignore-engine.ts +157 -0
- package/src/index.ts +48 -0
- package/src/language-classifier.ts +137 -0
- package/src/node-fs/index.ts +9 -0
- package/src/node-fs/node-file-system.ts +137 -0
- package/src/node-fs/node-streaming-hasher.ts +35 -0
- package/src/port-options.ts +10 -0
- package/src/semaphore.ts +45 -0
- package/src/types.ts +121 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small, self-contained gitignore-pattern compiler (spec.md §6.2:
|
|
3
|
+
* "Gitignore-Semantik selbst implementieren oder ueber die ignore-Bibliothek").
|
|
4
|
+
* Supports negation (`!pattern`), directory-only patterns (`pattern/`),
|
|
5
|
+
* root anchors (`/pattern`), `**`, `*`, `?` and `[...]` character classes.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately self-implemented (no dependency) to keep full control over
|
|
8
|
+
* how multiple layers compose (see `ignore-engine.ts`), which the spec's
|
|
9
|
+
* multi-source priority model (§6.2) needs more of than a single
|
|
10
|
+
* `.gitignore` parser typically exposes.
|
|
11
|
+
*/
|
|
12
|
+
export interface CompiledPattern {
|
|
13
|
+
regex: RegExp;
|
|
14
|
+
negate: boolean;
|
|
15
|
+
dirOnly: boolean;
|
|
16
|
+
raw: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compiles one gitignore-style line, scoped to `baseDir` (the "/"-relative
|
|
20
|
+
* directory the source `.gitignore`/`.untangleignore` file lives in, `""`
|
|
21
|
+
* for the workspace/repo root). Returns `null` for blank lines and comments.
|
|
22
|
+
*/
|
|
23
|
+
export declare function compilePattern(rawLine: string, baseDir: string): CompiledPattern | null;
|
|
24
|
+
/** Compiles every line of a `.gitignore`/`.untangleignore`-style file. */
|
|
25
|
+
export declare function compilePatterns(content: string, baseDir: string): CompiledPattern[];
|
|
26
|
+
/** Compiles a flat list of plain glob strings (e.g. config include/exclude), all rooted at "". */
|
|
27
|
+
export declare function compileGlobList(patterns: readonly string[]): CompiledPattern[];
|
|
28
|
+
/**
|
|
29
|
+
* Evaluates one layer's patterns against a path (standard gitignore
|
|
30
|
+
* semantics: later patterns override earlier ones within the same layer).
|
|
31
|
+
* Returns `undefined` when no pattern in the layer applies at all — that is
|
|
32
|
+
* the signal for callers to defer to a lower-priority layer's decision.
|
|
33
|
+
*/
|
|
34
|
+
export declare function evaluateLayer(patterns: readonly CompiledPattern[], relativePath: string, isDirectory: boolean): boolean | undefined;
|
|
35
|
+
//# sourceMappingURL=gitignore-pattern.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore-pattern.d.ts","sourceRoot":"","sources":["../src/gitignore-pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AA0DD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA0CvF;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CASnF;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,EAAE,CAS9E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,OAAO,GACnB,OAAO,GAAG,SAAS,CAWrB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small, self-contained gitignore-pattern compiler (spec.md §6.2:
|
|
3
|
+
* "Gitignore-Semantik selbst implementieren oder ueber die ignore-Bibliothek").
|
|
4
|
+
* Supports negation (`!pattern`), directory-only patterns (`pattern/`),
|
|
5
|
+
* root anchors (`/pattern`), `**`, `*`, `?` and `[...]` character classes.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately self-implemented (no dependency) to keep full control over
|
|
8
|
+
* how multiple layers compose (see `ignore-engine.ts`), which the spec's
|
|
9
|
+
* multi-source priority model (§6.2) needs more of than a single
|
|
10
|
+
* `.gitignore` parser typically exposes.
|
|
11
|
+
*/
|
|
12
|
+
function escapeRegexLiteral(char) {
|
|
13
|
+
return /[.+^${}()|[\]\\]/.test(char) ? `\\${char}` : char;
|
|
14
|
+
}
|
|
15
|
+
function escapeBaseDir(baseDir) {
|
|
16
|
+
return baseDir.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
17
|
+
}
|
|
18
|
+
/** Translates one gitignore glob (no leading `/`, no trailing `/`) into a regex source string. */
|
|
19
|
+
function globToRegexSource(pattern) {
|
|
20
|
+
let out = "";
|
|
21
|
+
for (let i = 0; i < pattern.length; i += 1) {
|
|
22
|
+
const ch = pattern[i];
|
|
23
|
+
if (ch === "*") {
|
|
24
|
+
if (pattern[i + 1] === "*") {
|
|
25
|
+
if (pattern[i + 2] === "/") {
|
|
26
|
+
out += "(?:.*/)?";
|
|
27
|
+
i += 2;
|
|
28
|
+
}
|
|
29
|
+
else if (i + 2 >= pattern.length) {
|
|
30
|
+
out += ".*";
|
|
31
|
+
i += 1;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// "**" not followed by "/" and not at the end: treat as a plain "*".
|
|
35
|
+
out += "[^/]*";
|
|
36
|
+
i += 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
out += "[^/]*";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else if (ch === "?") {
|
|
44
|
+
out += "[^/]";
|
|
45
|
+
}
|
|
46
|
+
else if (ch === "[") {
|
|
47
|
+
let j = i + 1;
|
|
48
|
+
let cls = "[";
|
|
49
|
+
if (pattern[j] === "!" || pattern[j] === "^") {
|
|
50
|
+
cls += "^";
|
|
51
|
+
j += 1;
|
|
52
|
+
}
|
|
53
|
+
while (j < pattern.length && pattern[j] !== "]") {
|
|
54
|
+
const c = pattern[j];
|
|
55
|
+
cls += c === "\\" ? "\\\\" : c;
|
|
56
|
+
j += 1;
|
|
57
|
+
}
|
|
58
|
+
cls += "]";
|
|
59
|
+
out += cls;
|
|
60
|
+
i = j;
|
|
61
|
+
}
|
|
62
|
+
else if (ch === "\\" && i + 1 < pattern.length) {
|
|
63
|
+
out += escapeRegexLiteral(pattern[i + 1]);
|
|
64
|
+
i += 1;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
out += escapeRegexLiteral(ch);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Compiles one gitignore-style line, scoped to `baseDir` (the "/"-relative
|
|
74
|
+
* directory the source `.gitignore`/`.untangleignore` file lives in, `""`
|
|
75
|
+
* for the workspace/repo root). Returns `null` for blank lines and comments.
|
|
76
|
+
*/
|
|
77
|
+
export function compilePattern(rawLine, baseDir) {
|
|
78
|
+
const trimmed = rawLine.replace(/\s+$/, "");
|
|
79
|
+
if (trimmed.length === 0) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (trimmed.startsWith("#")) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
let pattern = trimmed;
|
|
86
|
+
let negate = false;
|
|
87
|
+
if (pattern.startsWith("!")) {
|
|
88
|
+
negate = true;
|
|
89
|
+
pattern = pattern.slice(1);
|
|
90
|
+
}
|
|
91
|
+
else if (pattern.startsWith("\\!") || pattern.startsWith("\\#")) {
|
|
92
|
+
pattern = pattern.slice(1);
|
|
93
|
+
}
|
|
94
|
+
let dirOnly = false;
|
|
95
|
+
if (pattern.endsWith("/")) {
|
|
96
|
+
dirOnly = true;
|
|
97
|
+
pattern = pattern.slice(0, -1);
|
|
98
|
+
}
|
|
99
|
+
if (pattern.length === 0) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
let anchored = pattern.includes("/");
|
|
103
|
+
if (pattern.startsWith("/")) {
|
|
104
|
+
pattern = pattern.slice(1);
|
|
105
|
+
anchored = true;
|
|
106
|
+
}
|
|
107
|
+
const base = escapeBaseDir(baseDir);
|
|
108
|
+
const basePrefix = baseDir.length > 0 ? `${base}/` : "";
|
|
109
|
+
const body = globToRegexSource(pattern);
|
|
110
|
+
const source = anchored
|
|
111
|
+
? `^${basePrefix}${body}(?:/.*)?$`
|
|
112
|
+
: `^${basePrefix}(?:.*/)?${body}(?:/.*)?$`;
|
|
113
|
+
return { regex: new RegExp(source), negate, dirOnly, raw: rawLine };
|
|
114
|
+
}
|
|
115
|
+
/** Compiles every line of a `.gitignore`/`.untangleignore`-style file. */
|
|
116
|
+
export function compilePatterns(content, baseDir) {
|
|
117
|
+
const patterns = [];
|
|
118
|
+
for (const line of content.split(/\r\n|\r|\n/)) {
|
|
119
|
+
const compiled = compilePattern(line, baseDir);
|
|
120
|
+
if (compiled !== null) {
|
|
121
|
+
patterns.push(compiled);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return patterns;
|
|
125
|
+
}
|
|
126
|
+
/** Compiles a flat list of plain glob strings (e.g. config include/exclude), all rooted at "". */
|
|
127
|
+
export function compileGlobList(patterns) {
|
|
128
|
+
const compiled = [];
|
|
129
|
+
for (const pattern of patterns) {
|
|
130
|
+
const result = compilePattern(pattern, "");
|
|
131
|
+
if (result !== null) {
|
|
132
|
+
compiled.push(result);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return compiled;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Evaluates one layer's patterns against a path (standard gitignore
|
|
139
|
+
* semantics: later patterns override earlier ones within the same layer).
|
|
140
|
+
* Returns `undefined` when no pattern in the layer applies at all — that is
|
|
141
|
+
* the signal for callers to defer to a lower-priority layer's decision.
|
|
142
|
+
*/
|
|
143
|
+
export function evaluateLayer(patterns, relativePath, isDirectory) {
|
|
144
|
+
let result;
|
|
145
|
+
for (const pattern of patterns) {
|
|
146
|
+
if (pattern.dirOnly && !isDirectory) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (pattern.regex.test(relativePath)) {
|
|
150
|
+
result = !pattern.negate;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=gitignore-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore-pattern.js","sourceRoot":"","sources":["../src/gitignore-pattern.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FileSystemPort } from "@untangle-code/domain";
|
|
2
|
+
import type { ContentHasher } from "./types.js";
|
|
3
|
+
/** SHA-256 hex digest of raw bytes already held in memory. */
|
|
4
|
+
export declare function hashBytes(bytes: Uint8Array): string;
|
|
5
|
+
/**
|
|
6
|
+
* Default `ContentHasher`: reads the whole file through `FileSystemPort`
|
|
7
|
+
* and hashes the resulting buffer. This is the only option available
|
|
8
|
+
* against the abstract port (it exposes no range/stream read), so it is
|
|
9
|
+
* what every non-Node adapter (in-memory test doubles included) gets by
|
|
10
|
+
* default. Real streaming is available from `./node-fs` for the Node
|
|
11
|
+
* adapter (see README, "Entscheidungen").
|
|
12
|
+
*/
|
|
13
|
+
export declare function createPortContentHasher(fs: FileSystemPort): ContentHasher;
|
|
14
|
+
//# sourceMappingURL=hashing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,cAAc,GAAG,aAAa,CAOzE"}
|
package/dist/hashing.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-hash pipeline (spec.md §12.1): SHA-256 of the raw file bytes is
|
|
3
|
+
* the sole source of truth for "unchanged" decisions; path/size/mtime are
|
|
4
|
+
* fast hints only.
|
|
5
|
+
*
|
|
6
|
+
* `node:crypto` is used directly here — the "no direct node I/O in the
|
|
7
|
+
* core" rule (WP-05 order) is about the *file system* (`node:fs`), so the
|
|
8
|
+
* scanner reads bytes exclusively through `FileSystemPort`. Hashing pure
|
|
9
|
+
* in-memory bytes with `node:crypto` is not I/O.
|
|
10
|
+
*/
|
|
11
|
+
import { createHash } from "node:crypto";
|
|
12
|
+
/** SHA-256 hex digest of raw bytes already held in memory. */
|
|
13
|
+
export function hashBytes(bytes) {
|
|
14
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Default `ContentHasher`: reads the whole file through `FileSystemPort`
|
|
18
|
+
* and hashes the resulting buffer. This is the only option available
|
|
19
|
+
* against the abstract port (it exposes no range/stream read), so it is
|
|
20
|
+
* what every non-Node adapter (in-memory test doubles included) gets by
|
|
21
|
+
* default. Real streaming is available from `./node-fs` for the Node
|
|
22
|
+
* adapter (see README, "Entscheidungen").
|
|
23
|
+
*/
|
|
24
|
+
export function createPortContentHasher(fs) {
|
|
25
|
+
return {
|
|
26
|
+
async hashFile(absolutePath, _sizeBytes, options) {
|
|
27
|
+
const bytes = await fs.readFile(absolutePath, options);
|
|
28
|
+
return hashBytes(bytes);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAkB;IACxD,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,YAAoB,EAAE,UAAkB,EAAE,OAAyB;YAChF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IgnoreConfig, IgnoreDecision } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Stateful ignore evaluator. `pushGitignoreLayer`/`popGitignoreLayer` (and
|
|
4
|
+
* the `untangleignore` equivalents) let a directory walker maintain, as a
|
|
5
|
+
* stack, exactly the nested-ignore-file patterns that apply along the
|
|
6
|
+
* current root-to-here path — deeper files are pushed later and therefore
|
|
7
|
+
* win ties within their own layer, matching git's "nearer file wins"
|
|
8
|
+
* behavior.
|
|
9
|
+
*/
|
|
10
|
+
export declare class IgnoreEngine {
|
|
11
|
+
private readonly securityPatterns;
|
|
12
|
+
private readonly defaultPatterns;
|
|
13
|
+
private readonly configIncludePatterns;
|
|
14
|
+
private readonly configExcludePatterns;
|
|
15
|
+
private readonly gitignoreStack;
|
|
16
|
+
private readonly gitignoreFrames;
|
|
17
|
+
private readonly untangleignoreStack;
|
|
18
|
+
private readonly untangleignoreFrames;
|
|
19
|
+
constructor(config?: IgnoreConfig);
|
|
20
|
+
pushGitignoreLayer(baseDir: string, content: string): void;
|
|
21
|
+
popGitignoreLayer(): void;
|
|
22
|
+
pushUntangleIgnoreLayer(baseDir: string, content: string): void;
|
|
23
|
+
popUntangleIgnoreLayer(): void;
|
|
24
|
+
decide(relativePath: string, isDirectory: boolean): IgnoreDecision;
|
|
25
|
+
}
|
|
26
|
+
export declare function createIgnoreEngine(config?: IgnoreConfig): IgnoreEngine;
|
|
27
|
+
//# sourceMappingURL=ignore-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-engine.d.ts","sourceRoot":"","sources":["../src/ignore-engine.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAmB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkChF;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IAE1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAC7D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAoB;gBAEtC,MAAM,CAAC,EAAE,YAAY;IAWjC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAM1D,iBAAiB,IAAI,IAAI;IAOzB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAM/D,sBAAsB,IAAI,IAAI;IAO9B,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,cAAc;CAiC1E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAEtE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ignore engine implementing the priority order of spec.md §6.2:
|
|
3
|
+
*
|
|
4
|
+
* 1. security/system excludes — never overridable
|
|
5
|
+
* 2. explicit config excludes — `RepositoryConfig.exclude`
|
|
6
|
+
* 3. `.untangleignore`
|
|
7
|
+
* 4. `.gitignore`
|
|
8
|
+
* 5. default excludes — spec.md §6.3
|
|
9
|
+
* 6. config includes override (5) only, never (1)-(4)
|
|
10
|
+
*
|
|
11
|
+
* Implementation model: layers are applied from lowest to highest priority
|
|
12
|
+
* (5 → 6 → 4 → 3 → 2 → 1); a layer only changes the running decision when
|
|
13
|
+
* it actually has an opinion (some pattern in it matched), otherwise the
|
|
14
|
+
* decision made by a lower-priority layer is kept. This makes "higher
|
|
15
|
+
* priority" mean exactly "wins whenever it has an opinion", matching the
|
|
16
|
+
* spec text without requiring gitignore-style whole-tree renegotiation.
|
|
17
|
+
*
|
|
18
|
+
* See README, "Entscheidungen" for the two points spec.md leaves implicit
|
|
19
|
+
* and that this engine fixes: (a) which of the §6.3 default-exclude names
|
|
20
|
+
* are promoted to the non-overridable "security/system" tier, and (b) that
|
|
21
|
+
* config includes are read as overriding *only* the default-exclude layer,
|
|
22
|
+
* per the literal wording of §6.2 item 6.
|
|
23
|
+
*/
|
|
24
|
+
import { compileGlobList, compilePatterns, evaluateLayer, } from "./gitignore-pattern.js";
|
|
25
|
+
/**
|
|
26
|
+
* Non-overridable system/VCS directories (spec.md §6.2 item 1). A subset of
|
|
27
|
+
* §6.3's list is promoted here rather than left in the overridable default
|
|
28
|
+
* tier — see README, "Entscheidungen" (decision 1).
|
|
29
|
+
*/
|
|
30
|
+
const SECURITY_EXCLUDE_NAMES = [".git", ".svn", ".hg"];
|
|
31
|
+
/** Overridable default excludes (spec.md §6.3), minus the security/system tier above. */
|
|
32
|
+
const DEFAULT_EXCLUDE_NAMES = [
|
|
33
|
+
"node_modules",
|
|
34
|
+
"vendor",
|
|
35
|
+
"dist",
|
|
36
|
+
"build",
|
|
37
|
+
"out",
|
|
38
|
+
"coverage",
|
|
39
|
+
".cache",
|
|
40
|
+
".next",
|
|
41
|
+
".nuxt",
|
|
42
|
+
"target",
|
|
43
|
+
".gradle",
|
|
44
|
+
".venv",
|
|
45
|
+
"venv",
|
|
46
|
+
"__pycache__",
|
|
47
|
+
];
|
|
48
|
+
/** "generated assets" (spec.md §6.3) — common generated/minified/output file patterns. */
|
|
49
|
+
const DEFAULT_GENERATED_ASSET_PATTERNS = ["**/*.min.js", "**/*.min.css", "**/*.map"];
|
|
50
|
+
/**
|
|
51
|
+
* Stateful ignore evaluator. `pushGitignoreLayer`/`popGitignoreLayer` (and
|
|
52
|
+
* the `untangleignore` equivalents) let a directory walker maintain, as a
|
|
53
|
+
* stack, exactly the nested-ignore-file patterns that apply along the
|
|
54
|
+
* current root-to-here path — deeper files are pushed later and therefore
|
|
55
|
+
* win ties within their own layer, matching git's "nearer file wins"
|
|
56
|
+
* behavior.
|
|
57
|
+
*/
|
|
58
|
+
export class IgnoreEngine {
|
|
59
|
+
securityPatterns;
|
|
60
|
+
defaultPatterns;
|
|
61
|
+
configIncludePatterns;
|
|
62
|
+
configExcludePatterns;
|
|
63
|
+
gitignoreStack = [];
|
|
64
|
+
gitignoreFrames = [];
|
|
65
|
+
untangleignoreStack = [];
|
|
66
|
+
untangleignoreFrames = [];
|
|
67
|
+
constructor(config) {
|
|
68
|
+
this.securityPatterns = compileGlobList(SECURITY_EXCLUDE_NAMES);
|
|
69
|
+
this.defaultPatterns = compileGlobList([
|
|
70
|
+
...DEFAULT_EXCLUDE_NAMES,
|
|
71
|
+
...DEFAULT_GENERATED_ASSET_PATTERNS,
|
|
72
|
+
...(config?.additionalDefaultExcludes ?? []),
|
|
73
|
+
]);
|
|
74
|
+
this.configIncludePatterns = compileGlobList(config?.configInclude ?? []);
|
|
75
|
+
this.configExcludePatterns = compileGlobList(config?.configExclude ?? []);
|
|
76
|
+
}
|
|
77
|
+
pushGitignoreLayer(baseDir, content) {
|
|
78
|
+
const patterns = compilePatterns(content, baseDir);
|
|
79
|
+
this.gitignoreFrames.push({ size: patterns.length });
|
|
80
|
+
this.gitignoreStack.push(...patterns);
|
|
81
|
+
}
|
|
82
|
+
popGitignoreLayer() {
|
|
83
|
+
const frame = this.gitignoreFrames.pop();
|
|
84
|
+
if (frame !== undefined) {
|
|
85
|
+
this.gitignoreStack.length -= frame.size;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
pushUntangleIgnoreLayer(baseDir, content) {
|
|
89
|
+
const patterns = compilePatterns(content, baseDir);
|
|
90
|
+
this.untangleignoreFrames.push({ size: patterns.length });
|
|
91
|
+
this.untangleignoreStack.push(...patterns);
|
|
92
|
+
}
|
|
93
|
+
popUntangleIgnoreLayer() {
|
|
94
|
+
const frame = this.untangleignoreFrames.pop();
|
|
95
|
+
if (frame !== undefined) {
|
|
96
|
+
this.untangleignoreStack.length -= frame.size;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
decide(relativePath, isDirectory) {
|
|
100
|
+
let ignored = evaluateLayer(this.defaultPatterns, relativePath, isDirectory) ?? false;
|
|
101
|
+
let reason = ignored ? "default-exclude" : undefined;
|
|
102
|
+
if (evaluateLayer(this.configIncludePatterns, relativePath, isDirectory) === true) {
|
|
103
|
+
ignored = false;
|
|
104
|
+
reason = undefined;
|
|
105
|
+
}
|
|
106
|
+
const gitDecision = evaluateLayer(this.gitignoreStack, relativePath, isDirectory);
|
|
107
|
+
if (gitDecision !== undefined) {
|
|
108
|
+
ignored = gitDecision;
|
|
109
|
+
reason = gitDecision ? "gitignore" : undefined;
|
|
110
|
+
}
|
|
111
|
+
const untangleDecision = evaluateLayer(this.untangleignoreStack, relativePath, isDirectory);
|
|
112
|
+
if (untangleDecision !== undefined) {
|
|
113
|
+
ignored = untangleDecision;
|
|
114
|
+
reason = untangleDecision ? "untangleignore" : undefined;
|
|
115
|
+
}
|
|
116
|
+
if (evaluateLayer(this.configExcludePatterns, relativePath, isDirectory) === true) {
|
|
117
|
+
ignored = true;
|
|
118
|
+
reason = "config-exclude";
|
|
119
|
+
}
|
|
120
|
+
if (evaluateLayer(this.securityPatterns, relativePath, isDirectory) === true) {
|
|
121
|
+
ignored = true;
|
|
122
|
+
reason = "security";
|
|
123
|
+
}
|
|
124
|
+
return reason === undefined ? { ignored } : { ignored, reason };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export function createIgnoreEngine(config) {
|
|
128
|
+
return new IgnoreEngine(config);
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=ignore-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-engine.js","sourceRoot":"","sources":["../src/ignore-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @untangle-code/scanner — recursive discovery, ignore rules, symlink
|
|
3
|
+
* safety, binary/language classification and the content-hash pipeline
|
|
4
|
+
* (spec.md §6.1–§6.3, §12.1; architecture.md §6.4, §23.1).
|
|
5
|
+
*
|
|
6
|
+
* Pure core: reads only through `FileSystemPort` (domain), never
|
|
7
|
+
* `node:fs`. A concrete Node adapter is published separately from
|
|
8
|
+
* `@untangle-code/scanner/node-fs` (see that module's docs) — importing it
|
|
9
|
+
* here would make this entry point Node-specific and untestable against
|
|
10
|
+
* arbitrary `FileSystemPort` implementations (e.g. an in-memory one).
|
|
11
|
+
*/
|
|
12
|
+
export * from "./types.js";
|
|
13
|
+
export { discoverFiles } from "./discovery.js";
|
|
14
|
+
export { IgnoreEngine, createIgnoreEngine } from "./ignore-engine.js";
|
|
15
|
+
export { compilePattern, compilePatterns, compileGlobList, evaluateLayer, type CompiledPattern, } from "./gitignore-pattern.js";
|
|
16
|
+
export { classifyBinarySample, detectMinified, type MinifiedHeuristics, } from "./binary-classifier.js";
|
|
17
|
+
export { detectLanguage, detectLanguageByExtension, detectLanguageFromContent, type LanguageDetectionResult, } from "./language-classifier.js";
|
|
18
|
+
export { hashBytes, createPortContentHasher } from "./hashing.js";
|
|
19
|
+
export { Semaphore } from "./semaphore.js";
|
|
20
|
+
export { mapConcurrent } from "./concurrency.js";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @untangle-code/scanner — recursive discovery, ignore rules, symlink
|
|
3
|
+
* safety, binary/language classification and the content-hash pipeline
|
|
4
|
+
* (spec.md §6.1–§6.3, §12.1; architecture.md §6.4, §23.1).
|
|
5
|
+
*
|
|
6
|
+
* Pure core: reads only through `FileSystemPort` (domain), never
|
|
7
|
+
* `node:fs`. A concrete Node adapter is published separately from
|
|
8
|
+
* `@untangle-code/scanner/node-fs` (see that module's docs) — importing it
|
|
9
|
+
* here would make this entry point Node-specific and untestable against
|
|
10
|
+
* arbitrary `FileSystemPort` implementations (e.g. an in-memory one).
|
|
11
|
+
*/
|
|
12
|
+
// Scanner-local contracts (not domain contracts — see README, "Entscheidungen").
|
|
13
|
+
export * from "./types.js";
|
|
14
|
+
// Discovery entry point.
|
|
15
|
+
export { discoverFiles } from "./discovery.js";
|
|
16
|
+
// Ignore engine (spec.md §6.2 priority layering).
|
|
17
|
+
export { IgnoreEngine, createIgnoreEngine } from "./ignore-engine.js";
|
|
18
|
+
export { compilePattern, compilePatterns, compileGlobList, evaluateLayer, } from "./gitignore-pattern.js";
|
|
19
|
+
// Content classification, usable standalone (e.g. for re-classifying a
|
|
20
|
+
// buffer already in memory, without going through discovery).
|
|
21
|
+
export { classifyBinarySample, detectMinified, } from "./binary-classifier.js";
|
|
22
|
+
export { detectLanguage, detectLanguageByExtension, detectLanguageFromContent, } from "./language-classifier.js";
|
|
23
|
+
// Hash pipeline (spec.md §12.1).
|
|
24
|
+
export { hashBytes, createPortContentHasher } from "./hashing.js";
|
|
25
|
+
// Bounded-concurrency primitives (architecture.md §13.1–§13.2).
|
|
26
|
+
export { Semaphore } from "./semaphore.js";
|
|
27
|
+
export { mapConcurrent } from "./concurrency.js";
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,iFAAiF;AACjF,cAAc,YAAY,CAAC;AAE3B,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,kDAAkD;AAClD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,GAEd,MAAM,wBAAwB,CAAC;AAEhC,uEAAuE;AACvE,8DAA8D;AAC9D,OAAO,EACL,oBAAoB,EACpB,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,0BAA0B,CAAC;AAElC,iCAAiC;AACjC,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAElE,gEAAgE;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coarse language classification (spec.md §6.1, §7.2): an extension map for
|
|
3
|
+
* the normal case, plus a shebang/marker content sniff for extensionless
|
|
4
|
+
* files. This is a fast pre-classification for the scanner's own output —
|
|
5
|
+
* the authoritative language/adapter dispatch belongs to parser-registry
|
|
6
|
+
* (architecture.md §6.5), which is free to disagree.
|
|
7
|
+
*/
|
|
8
|
+
import type { LanguageDetectionSource } from "./types.js";
|
|
9
|
+
/** Extension-based language guess; `undefined` for extensionless or unknown extensions. */
|
|
10
|
+
export declare function detectLanguageByExtension(relativePath: string): string | undefined;
|
|
11
|
+
/** Content-based language guess for extensionless files (shebang or leading markers). */
|
|
12
|
+
export declare function detectLanguageFromContent(text: string): string | undefined;
|
|
13
|
+
export interface LanguageDetectionResult {
|
|
14
|
+
languageId: string;
|
|
15
|
+
detectedBy: LanguageDetectionSource;
|
|
16
|
+
}
|
|
17
|
+
/** Combines extension and content sniffing; `languageId` is "unknown" if neither matches. */
|
|
18
|
+
export declare function detectLanguage(relativePath: string, sampleText: string): LanguageDetectionResult;
|
|
19
|
+
//# sourceMappingURL=language-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-classifier.d.ts","sourceRoot":"","sources":["../src/language-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAiE1D,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASlF;AAsBD,yFAAyF;AACzF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAa1E;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,uBAAuB,CAAC;CACrC;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,uBAAuB,CAUhG"}
|