Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
86 lines
4.1 KiB
Markdown
86 lines
4.1 KiB
Markdown
# Readdir-Glob
|
|
 [](https://coveralls.io/github/Yqnn/node-readdir-glob?branch=master)
|
|
|
|
Recursive version of fs.readdir wih stream API and glob filtering.
|
|
Uses the `minimatch` library to do its matching.
|
|
|
|
Requires Node.js 10.0 or later.
|
|
|
|
## Performances
|
|
|
|
Compared to `glob`, `readdir-glob` is memory efficient: no matter the file system size, or the number of returned files, the memory usage is constant.
|
|
|
|
The CPU cost is proportional to the number of files in `root` folder, minus the number files in `options.skip` folders.
|
|
|
|
**Advice**: For better performances use `options.skip` to restrict the search as much as possible.
|
|
|
|
## Usage
|
|
|
|
Install with npm
|
|
```
|
|
npm i readdir-glob
|
|
```
|
|
|
|
```javascript
|
|
const readdirGlob = require('readdir-glob');
|
|
const globber = readdirGlob('.', {pattern: '**/*.js'});
|
|
globber.on('match', match => {
|
|
// m.relative: relative path of the matched file
|
|
// m.absolute: absolute path of the matched file
|
|
// m.stat: stat of the matched file (only if stat:true option is used)
|
|
});
|
|
globber.on('error', err => {
|
|
console.error('fatal error', err);
|
|
});
|
|
globber.on('end', (m) => {
|
|
console.log('done');
|
|
});
|
|
```
|
|
|
|
## readdirGlob(root, [options])
|
|
|
|
* `root` `{String}` Path to be read recursively, *default*: `'.'`
|
|
* `options` `{Object}` Options, *default*: `{}`
|
|
|
|
Returns a EventEmitter reading given root recursively.
|
|
|
|
### Properties
|
|
|
|
* `options`: The options object passed in.
|
|
* `paused`: Boolean which is set to true when calling `pause()`.
|
|
* `aborted` Boolean which is set to true when calling `abort()`. There is no way at this time to continue a glob search after aborting.
|
|
|
|
### Events
|
|
|
|
* `match`: Every time a match is found, this is emitted with the specific thing that matched.
|
|
* `end`: When the matching is finished, this is emitted with all the matches found.
|
|
* `error`: Emitted when an unexpected error is encountered.
|
|
|
|
### Methods
|
|
|
|
* `pause()`: Temporarily stop the search
|
|
* `resume()`: Resume the search
|
|
* `abort()`: Stop the search forever
|
|
|
|
### Options
|
|
|
|
* `pattern`: Glob pattern or Array of Glob patterns to match the found files with. A file has to match at least one of the provided patterns to be returned.
|
|
* `ignore`: Glob pattern or Array of Glob patterns to exclude matches. If a file or a folder matches at least one of the provided patterns, it's not returned. It doesn't prevent files from folder content to be returned. Note: `ignore` patterns are *always* in `dot:true` mode.
|
|
* `skip`: Glob pattern or Array of Glob patterns to exclude folders. If a folder matches one of the provided patterns, it's not returned, and it's not explored: this prevents any of its children to be returned. Note: `skip` patterns are *always* in `dot:true` mode.
|
|
* `mark`: Add a `/` character to directory matches.
|
|
* `stat`: Set to true to stat *all* results. This reduces performance.
|
|
* `silent`: When an unusual error is encountered when attempting to read a directory, a warning will be printed to stderr. Set the `silent` option to true to suppress these warnings.
|
|
* `nodir`: Do not match directories, only files.
|
|
* `follow`: Follow symlinked directories. Note that requires to stat *all* results, and so reduces performance.
|
|
|
|
The following options apply only if `pattern` option is set, and are forwarded to `minimatch`:
|
|
* `dot`: Allow `pattern` to match filenames starting with a period, even if the pattern does not explicitly have a period in that spot.
|
|
* `noglobstar`: Disable `**` matching against multiple folder names.
|
|
* `nocase`: Perform a case-insensitive match. Note: on case-insensitive filesystems, non-magic patterns will match by default, since `stat` and `readdir` will not raise errors.
|
|
* `matchBase`: Perform a basename-only match if the pattern does not contain any slash characters. That is, `*.js` would be treated as equivalent to `**/*.js`, matching all js files in all directories.
|
|
|
|
|
|
## References
|
|
|
|
Unit-test set is based on [node-glob](https://www.npmjs.com/package/glob) tests.
|