vectra 0.14.0 → 0.15.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/README.md +93 -92
- package/lib/FolderWatcher.d.ts +21 -1
- package/lib/FolderWatcher.d.ts.map +1 -1
- package/lib/FolderWatcher.js +135 -8
- package/lib/FolderWatcher.js.map +1 -1
- package/lib/FolderWatcher.spec.js +235 -1
- package/lib/FolderWatcher.spec.js.map +1 -1
- package/lib/LocalDocumentIndex.d.ts +9 -3
- package/lib/LocalDocumentIndex.d.ts.map +1 -1
- package/lib/LocalDocumentIndex.js +26 -8
- package/lib/LocalDocumentIndex.js.map +1 -1
- package/lib/LocalDocumentIndex.spec.js +120 -2
- package/lib/LocalDocumentIndex.spec.js.map +1 -1
- package/lib/LocalIndex.d.ts +10 -0
- package/lib/LocalIndex.d.ts.map +1 -1
- package/lib/LocalIndex.js +97 -26
- package/lib/LocalIndex.js.map +1 -1
- package/lib/LocalIndex.spec.js +85 -0
- package/lib/LocalIndex.spec.js.map +1 -1
- package/lib/TransformersEmbeddings.d.ts.map +1 -1
- package/lib/TransformersEmbeddings.js +5 -42
- package/lib/TransformersEmbeddings.js.map +1 -1
- package/lib/TransformersEmbeddings.spec.js +8 -4
- package/lib/TransformersEmbeddings.spec.js.map +1 -1
- package/lib/codecs/IndexCodec.d.ts +10 -0
- package/lib/codecs/IndexCodec.d.ts.map +1 -1
- package/lib/codecs/JsonCodec.spec.js +21 -0
- package/lib/codecs/JsonCodec.spec.js.map +1 -1
- package/lib/codecs/ProtobufCodec.d.ts.map +1 -1
- package/lib/codecs/ProtobufCodec.js +8 -1
- package/lib/codecs/ProtobufCodec.js.map +1 -1
- package/lib/codecs/ProtobufCodec.spec.js +21 -0
- package/lib/codecs/ProtobufCodec.spec.js.map +1 -1
- package/lib/codecs/schemas/index.proto +1 -0
- package/lib/internals/contentHash.d.ts +14 -0
- package/lib/internals/contentHash.d.ts.map +1 -0
- package/lib/internals/contentHash.js +39 -0
- package/lib/internals/contentHash.js.map +1 -0
- package/lib/internals/contentHash.spec.d.ts +2 -0
- package/lib/internals/contentHash.spec.d.ts.map +1 -0
- package/lib/internals/contentHash.spec.js +53 -0
- package/lib/internals/contentHash.spec.js.map +1 -0
- package/lib/internals/transformersLoader.d.ts +25 -0
- package/lib/internals/transformersLoader.d.ts.map +1 -0
- package/lib/internals/transformersLoader.js +86 -0
- package/lib/internals/transformersLoader.js.map +1 -0
- package/lib/server/IndexManager.spec.d.ts +2 -0
- package/lib/server/IndexManager.spec.d.ts.map +1 -0
- package/lib/server/IndexManager.spec.js +303 -0
- package/lib/server/IndexManager.spec.js.map +1 -0
- package/lib/server/VectraServer.spec.js +98 -0
- package/lib/server/VectraServer.spec.js.map +1 -1
- package/lib/server/handlers/documentHandlers.spec.d.ts +2 -0
- package/lib/server/handlers/documentHandlers.spec.d.ts.map +1 -0
- package/lib/server/handlers/documentHandlers.spec.js +227 -0
- package/lib/server/handlers/documentHandlers.spec.js.map +1 -0
- package/lib/server/handlers/helpers.spec.d.ts +2 -0
- package/lib/server/handlers/helpers.spec.d.ts.map +1 -0
- package/lib/server/handlers/helpers.spec.js +241 -0
- package/lib/server/handlers/helpers.spec.js.map +1 -0
- package/lib/server/handlers/itemHandlers.spec.d.ts +2 -0
- package/lib/server/handlers/itemHandlers.spec.d.ts.map +1 -0
- package/lib/server/handlers/itemHandlers.spec.js +366 -0
- package/lib/server/handlers/itemHandlers.spec.js.map +1 -0
- package/lib/server/handlers/lifecycleHandlers.spec.d.ts +2 -0
- package/lib/server/handlers/lifecycleHandlers.spec.d.ts.map +1 -0
- package/lib/server/handlers/lifecycleHandlers.spec.js +97 -0
- package/lib/server/handlers/lifecycleHandlers.spec.js.map +1 -0
- package/lib/server/handlers/queryHandlers.spec.d.ts +2 -0
- package/lib/server/handlers/queryHandlers.spec.d.ts.map +1 -0
- package/lib/server/handlers/queryHandlers.spec.js +296 -0
- package/lib/server/handlers/queryHandlers.spec.js.map +1 -0
- package/lib/server/handlers/statsHandlers.spec.d.ts +2 -0
- package/lib/server/handlers/statsHandlers.spec.d.ts.map +1 -0
- package/lib/server/handlers/statsHandlers.spec.js +138 -0
- package/lib/server/handlers/statsHandlers.spec.js.map +1 -0
- package/lib/utils/pathUtils.spec.d.ts +2 -0
- package/lib/utils/pathUtils.spec.d.ts.map +1 -0
- package/lib/utils/pathUtils.spec.js +152 -0
- package/lib/utils/pathUtils.spec.js.map +1 -0
- package/package.json +17 -17
- package/src/FolderWatcher.spec.ts +255 -1
- package/src/FolderWatcher.ts +121 -7
- package/src/LocalDocumentIndex.spec.ts +134 -2
- package/src/LocalDocumentIndex.ts +26 -8
- package/src/LocalIndex.spec.ts +900 -807
- package/src/LocalIndex.ts +91 -25
- package/src/TransformersEmbeddings.spec.ts +8 -4
- package/src/TransformersEmbeddings.ts +5 -18
- package/src/codecs/IndexCodec.ts +8 -0
- package/src/codecs/JsonCodec.spec.ts +23 -0
- package/src/codecs/ProtobufCodec.spec.ts +23 -0
- package/src/codecs/ProtobufCodec.ts +9 -2
- package/src/codecs/schemas/index.proto +1 -0
- package/src/internals/contentHash.spec.ts +59 -0
- package/src/internals/contentHash.ts +42 -0
- package/src/internals/transformersLoader.ts +55 -0
- package/src/server/IndexManager.spec.ts +278 -0
- package/src/server/VectraServer.spec.ts +96 -0
- package/src/server/handlers/documentHandlers.spec.ts +202 -0
- package/src/server/handlers/helpers.spec.ts +234 -0
- package/src/server/handlers/itemHandlers.spec.ts +358 -0
- package/src/server/handlers/lifecycleHandlers.spec.ts +60 -0
- package/src/server/handlers/queryHandlers.spec.ts +280 -0
- package/src/server/handlers/statsHandlers.spec.ts +104 -0
- package/src/utils/pathUtils.spec.ts +148 -0
package/README.md
CHANGED
|
@@ -1,92 +1,93 @@
|
|
|
1
|
-
# Vectra: a local vector database
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/vectra)
|
|
4
|
-
[](https://github.com/Stevenic/vectra/actions/workflows/ci.yml)
|
|
5
|
-
[](https://coveralls.io/github/Stevenic/vectra?branch=main)
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
7
|
-
[](#agent-ready)
|
|
8
|
-
|
|
9
|
-
Vectra is a local, file-backed, in-memory vector database with an optional gRPC server for cross-language access. Each index is a folder on disk — queries use MongoDB-style metadata filtering and cosine similarity ranking, with sub-millisecond latency for small indexes.
|
|
10
|
-
|
|
11
|
-
## What's New in Vectra 0.14
|
|
12
|
-
|
|
13
|
-
- **Browser & Electron support** — `vectra/browser` entry point with `IndexedDBStorage` and `TransformersEmbeddings`
|
|
14
|
-
- **Local embeddings** — `LocalEmbeddings` and `TransformersEmbeddings` run HuggingFace models with no API key
|
|
15
|
-
- **Protocol Buffers** — opt-in binary format, 40-50% smaller files
|
|
16
|
-
- **gRPC server** — `vectra serve` exposes 19 RPCs for cross-language access
|
|
17
|
-
- **FolderWatcher** — auto-sync directories into a document index
|
|
18
|
-
- **Language bindings** — `vectra generate` scaffolds clients for 6 languages
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
| [
|
|
63
|
-
| [
|
|
64
|
-
| [
|
|
65
|
-
| [
|
|
66
|
-
| [
|
|
67
|
-
| [
|
|
68
|
-
| [
|
|
69
|
-
| [
|
|
70
|
-
| [
|
|
71
|
-
| [
|
|
72
|
-
| [
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
1
|
+
# Vectra: a local vector database
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/vectra)
|
|
4
|
+
[](https://github.com/Stevenic/vectra/actions/workflows/ci.yml)
|
|
5
|
+
[](https://coveralls.io/github/Stevenic/vectra?branch=main)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](#agent-ready)
|
|
8
|
+
|
|
9
|
+
Vectra is a local, file-backed, in-memory vector database with an optional gRPC server for cross-language access. Each index is a folder on disk — queries use MongoDB-style metadata filtering and cosine similarity ranking, with sub-millisecond latency for small indexes.
|
|
10
|
+
|
|
11
|
+
## What's New in Vectra 0.14+
|
|
12
|
+
|
|
13
|
+
- **Browser & Electron support** — `vectra/browser` entry point with `IndexedDBStorage` and `TransformersEmbeddings`
|
|
14
|
+
- **Local embeddings** — `LocalEmbeddings` and `TransformersEmbeddings` run HuggingFace models with no API key
|
|
15
|
+
- **Protocol Buffers** — opt-in binary format, 40-50% smaller files
|
|
16
|
+
- **gRPC server** — `vectra serve` exposes 19 RPCs for cross-language access
|
|
17
|
+
- **FolderWatcher** — auto-sync directories into a document index
|
|
18
|
+
- **Language bindings** — `vectra generate` scaffolds clients for 6 languages
|
|
19
|
+
- **0.15: Performance improvements** — skip-if-unchanged document upserts, shallow-clone transactional snapshots, heap-based top-K query ranking, parallel metadata loads, and O(N) batch chunk deletion
|
|
20
|
+
|
|
21
|
+
See the [Changelog](https://stevenic.github.io/vectra/changelog) for breaking changes and migration details.
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npm install vectra
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Quick Example
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { LocalDocumentIndex, OpenAIEmbeddings } from 'vectra';
|
|
33
|
+
|
|
34
|
+
const docs = new LocalDocumentIndex({
|
|
35
|
+
folderPath: './my-index',
|
|
36
|
+
embeddings: new OpenAIEmbeddings({
|
|
37
|
+
apiKey: process.env.OPENAI_API_KEY!,
|
|
38
|
+
model: 'text-embedding-3-small',
|
|
39
|
+
maxTokens: 8000,
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (!(await docs.isIndexCreated())) {
|
|
44
|
+
await docs.createIndex({ version: 1 });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
await docs.upsertDocument('doc://readme', 'Vectra is a local vector database...', 'md');
|
|
48
|
+
|
|
49
|
+
const results = await docs.queryDocuments('What is Vectra?', { maxDocuments: 5 });
|
|
50
|
+
if (results.length > 0) {
|
|
51
|
+
const sections = await results[0].renderSections(2000, 1, true);
|
|
52
|
+
console.log(sections[0].text);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Documentation
|
|
57
|
+
|
|
58
|
+
Full docs at **[stevenic.github.io/vectra](https://stevenic.github.io/vectra/)**:
|
|
59
|
+
|
|
60
|
+
| Guide | Description |
|
|
61
|
+
|-------|-------------|
|
|
62
|
+
| [Getting Started](https://stevenic.github.io/vectra/getting-started) | Install, requirements, quick start with both index types |
|
|
63
|
+
| [Core Concepts](https://stevenic.github.io/vectra/core-concepts) | Index types, metadata filtering, on-disk layout |
|
|
64
|
+
| [Embeddings Guide](https://stevenic.github.io/vectra/embeddings) | Choose and configure an embeddings provider |
|
|
65
|
+
| [Document Indexing](https://stevenic.github.io/vectra/documents) | Chunking, retrieval, hybrid search, FolderWatcher |
|
|
66
|
+
| [CLI Reference](https://stevenic.github.io/vectra/cli) | All CLI commands, flags, and provider config |
|
|
67
|
+
| [API Reference](https://stevenic.github.io/vectra/api-reference) | TypeScript API overview |
|
|
68
|
+
| [Best Practices](https://stevenic.github.io/vectra/best-practices) | Performance tuning, troubleshooting |
|
|
69
|
+
| [Storage](https://stevenic.github.io/vectra/storage) | Pluggable backends, browser/IndexedDB, serialization formats |
|
|
70
|
+
| [gRPC Server](https://stevenic.github.io/vectra/grpc) | Cross-language access and language bindings |
|
|
71
|
+
| [Changelog](https://stevenic.github.io/vectra/changelog) | Breaking changes and migration guides |
|
|
72
|
+
| [Tutorials](https://stevenic.github.io/vectra/tutorials/) | RAG pipeline, browser app, gRPC, custom storage, folder sync |
|
|
73
|
+
| [Samples](./samples/) | Runnable examples: quickstart, RAG, browser, SQLite storage, gRPC, folder watcher |
|
|
74
|
+
|
|
75
|
+
## Agent Ready
|
|
76
|
+
|
|
77
|
+
Vectra ships an [`llms.txt`](https://github.com/Stevenic/vectra/blob/main/llms.txt) file that gives coding agents everything they need to integrate Vectra into your project. Point your agent at it and let it do the work:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Read the llms.txt file at https://raw.githubusercontent.com/Stevenic/vectra/main/llms.txt
|
|
81
|
+
and then add Vectra support to this project. Use LocalDocumentIndex for document
|
|
82
|
+
storage and retrieval.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The `llms.txt` file covers all exports, index types, CLI commands, gRPC bindings, and on-disk format — enough for any coding agent to scaffold a working integration without browsing docs.
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
MIT License. See [LICENSE](LICENSE).
|
|
90
|
+
|
|
91
|
+
## Contributing
|
|
92
|
+
|
|
93
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Please review our [Code of Conduct](CODE_OF_CONDUCT.md).
|
package/lib/FolderWatcher.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ export declare class FolderWatcher extends EventEmitter {
|
|
|
52
52
|
private readonly _tracked;
|
|
53
53
|
private readonly _pending;
|
|
54
54
|
private readonly _watchers;
|
|
55
|
+
private readonly _dirWatchers;
|
|
55
56
|
private _running;
|
|
56
57
|
/**
|
|
57
58
|
* Creates a new FolderWatcher instance.
|
|
@@ -84,7 +85,26 @@ export declare class FolderWatcher extends EventEmitter {
|
|
|
84
85
|
private _collectFiles;
|
|
85
86
|
private _syncFile;
|
|
86
87
|
private _deleteFile;
|
|
87
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Walks a directory tree and installs a non-recursive `fs.watch` on every
|
|
90
|
+
* directory it contains. Non-recursive watching avoids a known libuv bug on
|
|
91
|
+
* Windows (`Assertion failed: !_wcsnicmp` in `fs-event.c`) that fires when
|
|
92
|
+
* `fs.watch(..., { recursive: true })` receives events whose paths libuv's
|
|
93
|
+
* Windows backend can't normalize back to the watch root.
|
|
94
|
+
*/
|
|
95
|
+
private _watchDirectoryTree;
|
|
96
|
+
private _addDirectoryWatch;
|
|
97
|
+
/**
|
|
98
|
+
* Dispatch a single change event from one of the per-directory watchers.
|
|
99
|
+
* - File path: feed to the existing debounced file-sync pipeline.
|
|
100
|
+
* - New subdirectory: install watchers for it and sync its contents.
|
|
101
|
+
* - Path that used to be a watched subdirectory and no longer exists:
|
|
102
|
+
* tear down its watchers (and any descendants) and mark affected
|
|
103
|
+
* tracked files for deletion.
|
|
104
|
+
*/
|
|
105
|
+
private _handleEvent;
|
|
106
|
+
private _processEvent;
|
|
107
|
+
private _stopWatchingDir;
|
|
88
108
|
private _watchFile;
|
|
89
109
|
private _debouncedSync;
|
|
90
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderWatcher.d.ts","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;IAE1B;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC7D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,EAAE,CAAC;CACb;AAOD;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAkB;IAElC;;;OAGG;gBACgB,MAAM,EAAE,mBAAmB;IAU9C;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FolderWatcher.d.ts","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;IAE1B;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC7D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,EAAE,CAAC;CACb;AAOD;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,OAAO,CAAC,QAAQ,CAAkB;IAElC;;;OAGG;gBACgB,MAAM,EAAE,mBAAmB;IAU9C;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;YA+BtB,YAAY;IAI1B,OAAO,CAAC,cAAc;YAMR,aAAa;YAoBb,SAAS;YAiBT,WAAW;IAkBzB;;;;;;OAMG;YACW,mBAAmB;IAiBjC,OAAO,CAAC,kBAAkB;IAoB1B;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;YAQN,aAAa;IAmC3B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,cAAc;CA0BzB"}
|
package/lib/FolderWatcher.js
CHANGED
|
@@ -67,6 +67,7 @@ class FolderWatcher extends events_1.EventEmitter {
|
|
|
67
67
|
this._tracked = new Map();
|
|
68
68
|
this._pending = new Map();
|
|
69
69
|
this._watchers = [];
|
|
70
|
+
this._dirWatchers = new Map();
|
|
70
71
|
this._running = false;
|
|
71
72
|
this._index = config.index;
|
|
72
73
|
this._paths = config.paths.map(p => path.resolve(p));
|
|
@@ -96,6 +97,22 @@ class FolderWatcher extends events_1.EventEmitter {
|
|
|
96
97
|
throw new Error('FolderWatcher is already running');
|
|
97
98
|
}
|
|
98
99
|
this._running = true;
|
|
100
|
+
// Canonicalize watched paths. Windows `fs.watch` will crash inside
|
|
101
|
+
// libuv with a `!_wcsnicmp` assertion in `fs-event.c` when given a
|
|
102
|
+
// path containing an 8.3 short name (e.g., `STEVEN~1`) because
|
|
103
|
+
// ReadDirectoryChangesW reports event filenames with their long-name
|
|
104
|
+
// expansion and libuv's prefix check fails. `os.tmpdir()` is a common
|
|
105
|
+
// source of short names in the wild. Resolving up front keeps the
|
|
106
|
+
// tracked URIs, the initial sync, and the per-directory watchers all
|
|
107
|
+
// consistent on the long-name form.
|
|
108
|
+
for (let i = 0; i < this._paths.length; i++) {
|
|
109
|
+
try {
|
|
110
|
+
this._paths[i] = yield node_fs_1.default.promises.realpath(this._paths[i]);
|
|
111
|
+
}
|
|
112
|
+
catch (_a) {
|
|
113
|
+
// Path doesn't exist yet — leave as-is; the watch loop will skip it.
|
|
114
|
+
}
|
|
115
|
+
}
|
|
99
116
|
// Initial sync
|
|
100
117
|
yield this._initialSync();
|
|
101
118
|
this.emit('ready');
|
|
@@ -104,13 +121,13 @@ class FolderWatcher extends events_1.EventEmitter {
|
|
|
104
121
|
try {
|
|
105
122
|
const stat = yield node_fs_1.default.promises.stat(watchPath);
|
|
106
123
|
if (stat.isDirectory()) {
|
|
107
|
-
this.
|
|
124
|
+
yield this._watchDirectoryTree(watchPath);
|
|
108
125
|
}
|
|
109
126
|
else if (stat.isFile()) {
|
|
110
127
|
this._watchFile(watchPath);
|
|
111
128
|
}
|
|
112
129
|
}
|
|
113
|
-
catch (
|
|
130
|
+
catch (_b) {
|
|
114
131
|
// Path doesn't exist — skip
|
|
115
132
|
}
|
|
116
133
|
}
|
|
@@ -124,9 +141,13 @@ class FolderWatcher extends events_1.EventEmitter {
|
|
|
124
141
|
this._running = false;
|
|
125
142
|
// Close all watchers
|
|
126
143
|
for (const watcher of this._watchers) {
|
|
127
|
-
|
|
144
|
+
try {
|
|
145
|
+
watcher.close();
|
|
146
|
+
}
|
|
147
|
+
catch ( /* ignore */_a) { /* ignore */ }
|
|
128
148
|
}
|
|
129
149
|
this._watchers.length = 0;
|
|
150
|
+
this._dirWatchers.clear();
|
|
130
151
|
// Clear pending debounced operations
|
|
131
152
|
for (const timeout of this._pending.values()) {
|
|
132
153
|
clearTimeout(timeout);
|
|
@@ -239,25 +260,131 @@ class FolderWatcher extends events_1.EventEmitter {
|
|
|
239
260
|
}
|
|
240
261
|
});
|
|
241
262
|
}
|
|
242
|
-
|
|
263
|
+
/**
|
|
264
|
+
* Walks a directory tree and installs a non-recursive `fs.watch` on every
|
|
265
|
+
* directory it contains. Non-recursive watching avoids a known libuv bug on
|
|
266
|
+
* Windows (`Assertion failed: !_wcsnicmp` in `fs-event.c`) that fires when
|
|
267
|
+
* `fs.watch(..., { recursive: true })` receives events whose paths libuv's
|
|
268
|
+
* Windows backend can't normalize back to the watch root.
|
|
269
|
+
*/
|
|
270
|
+
_watchDirectoryTree(rootDir) {
|
|
271
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
272
|
+
if (!this._running)
|
|
273
|
+
return;
|
|
274
|
+
this._addDirectoryWatch(rootDir);
|
|
275
|
+
let entries;
|
|
276
|
+
try {
|
|
277
|
+
entries = yield node_fs_1.default.promises.readdir(rootDir, { withFileTypes: true });
|
|
278
|
+
}
|
|
279
|
+
catch (_a) {
|
|
280
|
+
// Dir may have been removed mid-walk; nothing to recurse into.
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
for (const entry of entries) {
|
|
284
|
+
if (entry.isDirectory()) {
|
|
285
|
+
yield this._watchDirectoryTree(path.join(rootDir, entry.name));
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
_addDirectoryWatch(dirPath) {
|
|
291
|
+
if (this._dirWatchers.has(dirPath))
|
|
292
|
+
return;
|
|
243
293
|
try {
|
|
244
|
-
const watcher = node_fs_1.default.watch(dirPath,
|
|
294
|
+
const watcher = node_fs_1.default.watch(dirPath, (_eventType, filename) => {
|
|
245
295
|
if (!this._running || !filename)
|
|
246
296
|
return;
|
|
247
297
|
const fullPath = path.join(dirPath, filename);
|
|
248
|
-
|
|
249
|
-
this._debouncedSync(fullPath);
|
|
250
|
-
}
|
|
298
|
+
this._handleEvent(fullPath);
|
|
251
299
|
});
|
|
252
300
|
watcher.on('error', (err) => {
|
|
253
301
|
this.emit('error', err, dirPath);
|
|
302
|
+
// Clean up so we don't leak a dead handle in our maps.
|
|
303
|
+
this._stopWatchingDir(dirPath);
|
|
254
304
|
});
|
|
305
|
+
this._dirWatchers.set(dirPath, watcher);
|
|
255
306
|
this._watchers.push(watcher);
|
|
256
307
|
}
|
|
257
308
|
catch (err) {
|
|
258
309
|
this.emit('error', err instanceof Error ? err : new Error(String(err)), dirPath);
|
|
259
310
|
}
|
|
260
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Dispatch a single change event from one of the per-directory watchers.
|
|
314
|
+
* - File path: feed to the existing debounced file-sync pipeline.
|
|
315
|
+
* - New subdirectory: install watchers for it and sync its contents.
|
|
316
|
+
* - Path that used to be a watched subdirectory and no longer exists:
|
|
317
|
+
* tear down its watchers (and any descendants) and mark affected
|
|
318
|
+
* tracked files for deletion.
|
|
319
|
+
*/
|
|
320
|
+
_handleEvent(fullPath) {
|
|
321
|
+
// fs.watch callbacks must return quickly; do the work async without
|
|
322
|
+
// awaiting and route exceptions to the error event.
|
|
323
|
+
void this._processEvent(fullPath).catch((err) => {
|
|
324
|
+
this.emit('error', err instanceof Error ? err : new Error(String(err)), fullPath);
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
_processEvent(fullPath) {
|
|
328
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
329
|
+
if (!this._running)
|
|
330
|
+
return;
|
|
331
|
+
let stat;
|
|
332
|
+
try {
|
|
333
|
+
stat = yield node_fs_1.default.promises.stat(fullPath);
|
|
334
|
+
}
|
|
335
|
+
catch (_a) {
|
|
336
|
+
// Path no longer exists. If it was a watched subdir, tear down.
|
|
337
|
+
if (this._dirWatchers.has(fullPath)) {
|
|
338
|
+
this._stopWatchingDir(fullPath);
|
|
339
|
+
}
|
|
340
|
+
// If a tracked file disappeared, debouncedSync will pick it up
|
|
341
|
+
// (its timer stats, fails, and calls _deleteFile).
|
|
342
|
+
if (this._tracked.has(fullPath)) {
|
|
343
|
+
this._debouncedSync(fullPath);
|
|
344
|
+
}
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (stat.isDirectory()) {
|
|
348
|
+
if (!this._dirWatchers.has(fullPath)) {
|
|
349
|
+
// New subdirectory: watch it (and any descendants) and sync
|
|
350
|
+
// files that already exist inside it.
|
|
351
|
+
yield this._watchDirectoryTree(fullPath);
|
|
352
|
+
const files = new Map();
|
|
353
|
+
yield this._collectFiles(fullPath, files);
|
|
354
|
+
for (const [filePath, mtimeMs] of files) {
|
|
355
|
+
if (!this._running)
|
|
356
|
+
return;
|
|
357
|
+
yield this._syncFile(filePath, mtimeMs);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else if (stat.isFile() && this._shouldInclude(fullPath)) {
|
|
362
|
+
this._debouncedSync(fullPath);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
_stopWatchingDir(dirPath) {
|
|
367
|
+
const prefix = dirPath + path.sep;
|
|
368
|
+
const doomed = [];
|
|
369
|
+
for (const watched of this._dirWatchers.keys()) {
|
|
370
|
+
if (watched === dirPath || watched.startsWith(prefix)) {
|
|
371
|
+
doomed.push(watched);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
for (const watched of doomed) {
|
|
375
|
+
const watcher = this._dirWatchers.get(watched);
|
|
376
|
+
if (watcher) {
|
|
377
|
+
try {
|
|
378
|
+
watcher.close();
|
|
379
|
+
}
|
|
380
|
+
catch ( /* ignore */_a) { /* ignore */ }
|
|
381
|
+
this._dirWatchers.delete(watched);
|
|
382
|
+
const idx = this._watchers.indexOf(watcher);
|
|
383
|
+
if (idx >= 0)
|
|
384
|
+
this._watchers.splice(idx, 1);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
261
388
|
_watchFile(filePath) {
|
|
262
389
|
try {
|
|
263
390
|
const watcher = node_fs_1.default.watch(filePath, (eventType) => {
|
package/lib/FolderWatcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FolderWatcher.js","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FolderWatcher.js","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"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"}
|