@colbymchenry/codegraph-darwin-x64 0.9.8 → 1.0.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/lib/dist/bin/codegraph.d.ts +1 -0
- package/lib/dist/bin/codegraph.d.ts.map +1 -1
- package/lib/dist/bin/codegraph.js +247 -39
- package/lib/dist/bin/codegraph.js.map +1 -1
- package/lib/dist/context/index.d.ts +9 -0
- package/lib/dist/context/index.d.ts.map +1 -1
- package/lib/dist/context/index.js +102 -6
- package/lib/dist/context/index.js.map +1 -1
- package/lib/dist/context/markers.d.ts +19 -0
- package/lib/dist/context/markers.d.ts.map +1 -0
- package/lib/dist/context/markers.js +22 -0
- package/lib/dist/context/markers.js.map +1 -0
- package/lib/dist/db/index.d.ts.map +1 -1
- package/lib/dist/db/index.js +2 -1
- package/lib/dist/db/index.js.map +1 -1
- package/lib/dist/db/migrations.d.ts +1 -1
- package/lib/dist/db/migrations.d.ts.map +1 -1
- package/lib/dist/db/migrations.js +10 -1
- package/lib/dist/db/migrations.js.map +1 -1
- package/lib/dist/db/queries.d.ts +43 -0
- package/lib/dist/db/queries.d.ts.map +1 -1
- package/lib/dist/db/queries.js +103 -7
- package/lib/dist/db/queries.js.map +1 -1
- package/lib/dist/db/schema.sql +1 -0
- package/lib/dist/db/sqlite-adapter.d.ts +7 -0
- package/lib/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/lib/dist/db/sqlite-adapter.js +3 -0
- package/lib/dist/db/sqlite-adapter.js.map +1 -1
- package/lib/dist/directory.d.ts +34 -2
- package/lib/dist/directory.d.ts.map +1 -1
- package/lib/dist/directory.js +129 -35
- package/lib/dist/directory.js.map +1 -1
- package/lib/dist/extraction/astro-extractor.d.ts +79 -0
- package/lib/dist/extraction/astro-extractor.d.ts.map +1 -0
- package/lib/dist/extraction/astro-extractor.js +320 -0
- package/lib/dist/extraction/astro-extractor.js.map +1 -0
- package/lib/dist/extraction/extraction-version.d.ts +25 -0
- package/lib/dist/extraction/extraction-version.d.ts.map +1 -0
- package/lib/dist/extraction/extraction-version.js +28 -0
- package/lib/dist/extraction/extraction-version.js.map +1 -0
- package/lib/dist/extraction/function-ref.d.ts +118 -0
- package/lib/dist/extraction/function-ref.d.ts.map +1 -0
- package/lib/dist/extraction/function-ref.js +727 -0
- package/lib/dist/extraction/function-ref.js.map +1 -0
- package/lib/dist/extraction/generated-detection.d.ts.map +1 -1
- package/lib/dist/extraction/generated-detection.js +3 -0
- package/lib/dist/extraction/generated-detection.js.map +1 -1
- package/lib/dist/extraction/grammars.d.ts +7 -1
- package/lib/dist/extraction/grammars.d.ts.map +1 -1
- package/lib/dist/extraction/grammars.js +52 -4
- package/lib/dist/extraction/grammars.js.map +1 -1
- package/lib/dist/extraction/index.d.ts +34 -0
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js +346 -62
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/languages/c-cpp.d.ts +8 -0
- package/lib/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/lib/dist/extraction/languages/c-cpp.js +87 -28
- package/lib/dist/extraction/languages/c-cpp.js.map +1 -1
- package/lib/dist/extraction/languages/csharp.d.ts +22 -0
- package/lib/dist/extraction/languages/csharp.d.ts.map +1 -1
- package/lib/dist/extraction/languages/csharp.js +84 -2
- package/lib/dist/extraction/languages/csharp.js.map +1 -1
- package/lib/dist/extraction/languages/dart.d.ts.map +1 -1
- package/lib/dist/extraction/languages/dart.js +161 -1
- package/lib/dist/extraction/languages/dart.js.map +1 -1
- package/lib/dist/extraction/languages/go.d.ts.map +1 -1
- package/lib/dist/extraction/languages/go.js +43 -2
- package/lib/dist/extraction/languages/go.js.map +1 -1
- package/lib/dist/extraction/languages/index.d.ts.map +1 -1
- package/lib/dist/extraction/languages/index.js +2 -0
- package/lib/dist/extraction/languages/index.js.map +1 -1
- package/lib/dist/extraction/languages/java.d.ts.map +1 -1
- package/lib/dist/extraction/languages/java.js +42 -1
- package/lib/dist/extraction/languages/java.js.map +1 -1
- package/lib/dist/extraction/languages/javascript.d.ts.map +1 -1
- package/lib/dist/extraction/languages/javascript.js +16 -0
- package/lib/dist/extraction/languages/javascript.js.map +1 -1
- package/lib/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/lib/dist/extraction/languages/kotlin.js +69 -0
- package/lib/dist/extraction/languages/kotlin.js.map +1 -1
- package/lib/dist/extraction/languages/objc.d.ts.map +1 -1
- package/lib/dist/extraction/languages/objc.js +42 -0
- package/lib/dist/extraction/languages/objc.js.map +1 -1
- package/lib/dist/extraction/languages/pascal.d.ts.map +1 -1
- package/lib/dist/extraction/languages/pascal.js +11 -0
- package/lib/dist/extraction/languages/pascal.js.map +1 -1
- package/lib/dist/extraction/languages/php.d.ts.map +1 -1
- package/lib/dist/extraction/languages/php.js +90 -1
- package/lib/dist/extraction/languages/php.js.map +1 -1
- package/lib/dist/extraction/languages/r.d.ts +3 -0
- package/lib/dist/extraction/languages/r.d.ts.map +1 -0
- package/lib/dist/extraction/languages/r.js +314 -0
- package/lib/dist/extraction/languages/r.js.map +1 -0
- package/lib/dist/extraction/languages/ruby.d.ts.map +1 -1
- package/lib/dist/extraction/languages/ruby.js +35 -0
- package/lib/dist/extraction/languages/ruby.js.map +1 -1
- package/lib/dist/extraction/languages/rust.d.ts.map +1 -1
- package/lib/dist/extraction/languages/rust.js +35 -2
- package/lib/dist/extraction/languages/rust.js.map +1 -1
- package/lib/dist/extraction/languages/scala.d.ts.map +1 -1
- package/lib/dist/extraction/languages/scala.js +61 -1
- package/lib/dist/extraction/languages/scala.js.map +1 -1
- package/lib/dist/extraction/languages/swift.d.ts.map +1 -1
- package/lib/dist/extraction/languages/swift.js +61 -0
- package/lib/dist/extraction/languages/swift.js.map +1 -1
- package/lib/dist/extraction/languages/typescript.d.ts +13 -0
- package/lib/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/lib/dist/extraction/languages/typescript.js +38 -0
- package/lib/dist/extraction/languages/typescript.js.map +1 -1
- package/lib/dist/extraction/liquid-extractor.d.ts +7 -0
- package/lib/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/liquid-extractor.js +53 -9
- package/lib/dist/extraction/liquid-extractor.js.map +1 -1
- package/lib/dist/extraction/razor-extractor.d.ts +42 -0
- package/lib/dist/extraction/razor-extractor.d.ts.map +1 -0
- package/lib/dist/extraction/razor-extractor.js +285 -0
- package/lib/dist/extraction/razor-extractor.js.map +1 -0
- package/lib/dist/extraction/svelte-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/svelte-extractor.js +6 -3
- package/lib/dist/extraction/svelte-extractor.js.map +1 -1
- package/lib/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter-helpers.js +59 -10
- package/lib/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/lib/dist/extraction/tree-sitter-types.d.ts +33 -0
- package/lib/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.d.ts +237 -0
- package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.js +1820 -68
- package/lib/dist/extraction/tree-sitter.js.map +1 -1
- package/lib/dist/extraction/vue-extractor.d.ts +15 -0
- package/lib/dist/extraction/vue-extractor.d.ts.map +1 -1
- package/lib/dist/extraction/vue-extractor.js +94 -3
- package/lib/dist/extraction/vue-extractor.js.map +1 -1
- package/lib/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/lib/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/lib/dist/graph/queries.d.ts.map +1 -1
- package/lib/dist/graph/queries.js +13 -40
- package/lib/dist/graph/queries.js.map +1 -1
- package/lib/dist/graph/traversal.d.ts.map +1 -1
- package/lib/dist/graph/traversal.js +16 -4
- package/lib/dist/graph/traversal.js.map +1 -1
- package/lib/dist/index.d.ts +41 -3
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +99 -9
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/installer/index.d.ts.map +1 -1
- package/lib/dist/installer/index.js +52 -2
- package/lib/dist/installer/index.js.map +1 -1
- package/lib/dist/installer/instructions-template.d.ts +34 -11
- package/lib/dist/installer/instructions-template.d.ts.map +1 -1
- package/lib/dist/installer/instructions-template.js +44 -12
- package/lib/dist/installer/instructions-template.js.map +1 -1
- package/lib/dist/installer/targets/claude.d.ts.map +1 -1
- package/lib/dist/installer/targets/claude.js +6 -10
- package/lib/dist/installer/targets/claude.js.map +1 -1
- package/lib/dist/installer/targets/codex.js +4 -6
- package/lib/dist/installer/targets/codex.js.map +1 -1
- package/lib/dist/installer/targets/gemini.js +4 -6
- package/lib/dist/installer/targets/gemini.js.map +1 -1
- package/lib/dist/installer/targets/opencode.d.ts +9 -1
- package/lib/dist/installer/targets/opencode.d.ts.map +1 -1
- package/lib/dist/installer/targets/opencode.js +91 -40
- package/lib/dist/installer/targets/opencode.js.map +1 -1
- package/lib/dist/installer/targets/shared.d.ts +14 -0
- package/lib/dist/installer/targets/shared.d.ts.map +1 -1
- package/lib/dist/installer/targets/shared.js +19 -2
- package/lib/dist/installer/targets/shared.js.map +1 -1
- package/lib/dist/mcp/daemon.d.ts +60 -1
- package/lib/dist/mcp/daemon.d.ts.map +1 -1
- package/lib/dist/mcp/daemon.js +221 -8
- package/lib/dist/mcp/daemon.js.map +1 -1
- package/lib/dist/mcp/dynamic-boundaries.d.ts +41 -0
- package/lib/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
- package/lib/dist/mcp/dynamic-boundaries.js +359 -0
- package/lib/dist/mcp/dynamic-boundaries.js.map +1 -0
- package/lib/dist/mcp/index.d.ts.map +1 -1
- package/lib/dist/mcp/index.js +18 -9
- package/lib/dist/mcp/index.js.map +1 -1
- package/lib/dist/mcp/ppid-watchdog.d.ts +44 -0
- package/lib/dist/mcp/ppid-watchdog.d.ts.map +1 -0
- package/lib/dist/mcp/ppid-watchdog.js +27 -0
- package/lib/dist/mcp/ppid-watchdog.js.map +1 -0
- package/lib/dist/mcp/proxy.d.ts +6 -0
- package/lib/dist/mcp/proxy.d.ts.map +1 -1
- package/lib/dist/mcp/proxy.js +153 -24
- package/lib/dist/mcp/proxy.js.map +1 -1
- package/lib/dist/mcp/server-instructions.d.ts +12 -1
- package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
- package/lib/dist/mcp/server-instructions.js +58 -32
- package/lib/dist/mcp/server-instructions.js.map +1 -1
- package/lib/dist/mcp/session.d.ts +2 -0
- package/lib/dist/mcp/session.d.ts.map +1 -1
- package/lib/dist/mcp/session.js +49 -2
- package/lib/dist/mcp/session.js.map +1 -1
- package/lib/dist/mcp/stdin-teardown.d.ts +27 -0
- package/lib/dist/mcp/stdin-teardown.d.ts.map +1 -0
- package/lib/dist/mcp/stdin-teardown.js +49 -0
- package/lib/dist/mcp/stdin-teardown.js.map +1 -0
- package/lib/dist/mcp/tools.d.ts +110 -49
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +1222 -972
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/mcp/transport.d.ts.map +1 -1
- package/lib/dist/mcp/transport.js +18 -2
- package/lib/dist/mcp/transport.js.map +1 -1
- package/lib/dist/resolution/callback-synthesizer.d.ts +3 -3
- package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/lib/dist/resolution/callback-synthesizer.js +549 -21
- package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
- package/lib/dist/resolution/frameworks/astro.d.ts +9 -0
- package/lib/dist/resolution/frameworks/astro.d.ts.map +1 -0
- package/lib/dist/resolution/frameworks/astro.js +169 -0
- package/lib/dist/resolution/frameworks/astro.js.map +1 -0
- package/lib/dist/resolution/frameworks/expo-modules.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/expo-modules.js +6 -1
- package/lib/dist/resolution/frameworks/expo-modules.js.map +1 -1
- package/lib/dist/resolution/frameworks/index.d.ts +1 -0
- package/lib/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/index.js +5 -1
- package/lib/dist/resolution/frameworks/index.js.map +1 -1
- package/lib/dist/resolution/frameworks/java.js +6 -1
- package/lib/dist/resolution/frameworks/java.js.map +1 -1
- package/lib/dist/resolution/frameworks/python.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/python.js +7 -3
- package/lib/dist/resolution/frameworks/python.js.map +1 -1
- package/lib/dist/resolution/frameworks/react-native.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/react-native.js +53 -3
- package/lib/dist/resolution/frameworks/react-native.js.map +1 -1
- package/lib/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/lib/dist/resolution/frameworks/react.js +15 -3
- package/lib/dist/resolution/frameworks/react.js.map +1 -1
- package/lib/dist/resolution/frameworks/svelte.js +5 -1
- package/lib/dist/resolution/frameworks/svelte.js.map +1 -1
- package/lib/dist/resolution/frameworks/vue.js +24 -27
- package/lib/dist/resolution/frameworks/vue.js.map +1 -1
- package/lib/dist/resolution/import-resolver.d.ts +10 -0
- package/lib/dist/resolution/import-resolver.d.ts.map +1 -1
- package/lib/dist/resolution/import-resolver.js +564 -2
- package/lib/dist/resolution/import-resolver.js.map +1 -1
- package/lib/dist/resolution/index.d.ts +80 -0
- package/lib/dist/resolution/index.d.ts.map +1 -1
- package/lib/dist/resolution/index.js +457 -7
- package/lib/dist/resolution/index.js.map +1 -1
- package/lib/dist/resolution/name-matcher.d.ts +61 -0
- package/lib/dist/resolution/name-matcher.d.ts.map +1 -1
- package/lib/dist/resolution/name-matcher.js +590 -14
- package/lib/dist/resolution/name-matcher.js.map +1 -1
- package/lib/dist/resolution/types.d.ts +27 -3
- package/lib/dist/resolution/types.d.ts.map +1 -1
- package/lib/dist/resolution/workspace-packages.d.ts +48 -0
- package/lib/dist/resolution/workspace-packages.d.ts.map +1 -0
- package/lib/dist/resolution/workspace-packages.js +208 -0
- package/lib/dist/resolution/workspace-packages.js.map +1 -0
- package/lib/dist/search/query-utils.d.ts +35 -1
- package/lib/dist/search/query-utils.d.ts.map +1 -1
- package/lib/dist/search/query-utils.js +109 -10
- package/lib/dist/search/query-utils.js.map +1 -1
- package/lib/dist/sync/watcher.d.ts +124 -32
- package/lib/dist/sync/watcher.d.ts.map +1 -1
- package/lib/dist/sync/watcher.js +326 -111
- package/lib/dist/sync/watcher.js.map +1 -1
- package/lib/dist/telemetry/index.d.ts +146 -0
- package/lib/dist/telemetry/index.d.ts.map +1 -0
- package/lib/dist/telemetry/index.js +544 -0
- package/lib/dist/telemetry/index.js.map +1 -0
- package/lib/dist/types.d.ts +25 -2
- package/lib/dist/types.d.ts.map +1 -1
- package/lib/dist/types.js +3 -0
- package/lib/dist/types.js.map +1 -1
- package/lib/dist/upgrade/index.d.ts +132 -0
- package/lib/dist/upgrade/index.d.ts.map +1 -0
- package/lib/dist/upgrade/index.js +462 -0
- package/lib/dist/upgrade/index.js.map +1 -0
- package/lib/dist/utils.d.ts +30 -24
- package/lib/dist/utils.d.ts.map +1 -1
- package/lib/dist/utils.js +64 -48
- package/lib/dist/utils.js.map +1 -1
- package/lib/node_modules/.package-lock.json +1 -29
- package/lib/package.json +1 -2
- package/package.json +1 -1
- package/lib/node_modules/chokidar/LICENSE +0 -21
- package/lib/node_modules/chokidar/README.md +0 -305
- package/lib/node_modules/chokidar/esm/handler.d.ts +0 -90
- package/lib/node_modules/chokidar/esm/handler.js +0 -629
- package/lib/node_modules/chokidar/esm/index.d.ts +0 -215
- package/lib/node_modules/chokidar/esm/index.js +0 -798
- package/lib/node_modules/chokidar/esm/package.json +0 -1
- package/lib/node_modules/chokidar/handler.d.ts +0 -90
- package/lib/node_modules/chokidar/handler.js +0 -635
- package/lib/node_modules/chokidar/index.d.ts +0 -215
- package/lib/node_modules/chokidar/index.js +0 -804
- package/lib/node_modules/chokidar/package.json +0 -69
- package/lib/node_modules/readdirp/LICENSE +0 -21
- package/lib/node_modules/readdirp/README.md +0 -120
- package/lib/node_modules/readdirp/esm/index.d.ts +0 -108
- package/lib/node_modules/readdirp/esm/index.js +0 -257
- package/lib/node_modules/readdirp/esm/package.json +0 -1
- package/lib/node_modules/readdirp/index.d.ts +0 -108
- package/lib/node_modules/readdirp/index.js +0 -263
- package/lib/node_modules/readdirp/package.json +0 -70
package/lib/dist/sync/watcher.js
CHANGED
|
@@ -5,14 +5,31 @@
|
|
|
5
5
|
* Watches the project directory for file changes and triggers debounced sync
|
|
6
6
|
* operations to keep the code graph up-to-date.
|
|
7
7
|
*
|
|
8
|
-
* Uses
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* .
|
|
8
|
+
* Uses Node's built-in `fs.watch` directly (no third-party watcher, no native
|
|
9
|
+
* addon) with a per-platform strategy chosen to keep the open-descriptor /
|
|
10
|
+
* kernel-watch cost BOUNDED rather than growing with the number of files:
|
|
11
|
+
*
|
|
12
|
+
* - macOS / Windows: a SINGLE recursive `fs.watch(root, {recursive:true})`.
|
|
13
|
+
* libuv maps this to one FSEvents stream (macOS) / one
|
|
14
|
+
* ReadDirectoryChangesW handle (Windows), so it costs O(1) descriptors no
|
|
15
|
+
* matter how large the tree. This is the fix for the macOS file-table
|
|
16
|
+
* exhaustion (#644 / #496 / #555 / #628): the previous watcher held one
|
|
17
|
+
* open fd PER WATCHED FILE on macOS (tens of thousands of REG fds), which
|
|
18
|
+
* exhausted `kern.maxfiles` and crashed unrelated processes system-wide.
|
|
19
|
+
*
|
|
20
|
+
* - Linux: recursive `fs.watch` is unsupported, so we watch each (non-ignored)
|
|
21
|
+
* DIRECTORY with one inotify watch — O(directories), NOT O(files). New
|
|
22
|
+
* directories are picked up dynamically and an overall watch cap bounds
|
|
23
|
+
* inotify usage on pathological monorepos (#579). A single inotify watch on
|
|
24
|
+
* a directory already reports create/modify/delete for its children, so
|
|
25
|
+
* per-file watches are never needed.
|
|
26
|
+
*
|
|
27
|
+
* Excluded trees (node_modules/, dist/, .git/, …) are filtered via the
|
|
28
|
+
* indexer's `buildScopeIgnore` (built-in default-ignore dirs + the project's
|
|
29
|
+
* .gitignore) — on Linux they're never descended into (so they cost no watch),
|
|
30
|
+
* and on macOS/Windows the single recursive stream still covers them but their
|
|
31
|
+
* events are dropped before any sync is scheduled. Either way the watcher's
|
|
32
|
+
* scope matches the indexer's (#276 / #407).
|
|
16
33
|
*/
|
|
17
34
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
35
|
if (k2 === undefined) k2 = k;
|
|
@@ -47,17 +64,51 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
47
64
|
return result;
|
|
48
65
|
};
|
|
49
66
|
})();
|
|
50
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
51
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
52
|
-
};
|
|
53
67
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
68
|
exports.FileWatcher = exports.LockUnavailableError = void 0;
|
|
69
|
+
exports.__emitWatchEventForTests = __emitWatchEventForTests;
|
|
70
|
+
const fs = __importStar(require("fs"));
|
|
55
71
|
const path = __importStar(require("path"));
|
|
56
|
-
const chokidar_1 = __importDefault(require("chokidar"));
|
|
57
72
|
const extraction_1 = require("../extraction");
|
|
58
73
|
const errors_1 = require("../errors");
|
|
59
74
|
const utils_1 = require("../utils");
|
|
75
|
+
const directory_1 = require("../directory");
|
|
60
76
|
const watch_policy_1 = require("./watch-policy");
|
|
77
|
+
/**
|
|
78
|
+
* Native recursive `fs.watch` is only reliable on macOS and Windows; on Linux
|
|
79
|
+
* (and AIX) it throws `ERR_FEATURE_UNAVAILABLE_ON_PLATFORM`. We branch on this
|
|
80
|
+
* to pick the recursive vs per-directory strategy.
|
|
81
|
+
*/
|
|
82
|
+
function supportsRecursiveWatch() {
|
|
83
|
+
return process.platform === 'darwin' || process.platform === 'win32';
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Upper bound on simultaneously-watched directories on the Linux per-directory
|
|
87
|
+
* path. Each is one inotify watch; the kernel's `fs.inotify.max_user_watches`
|
|
88
|
+
* is the hard limit (commonly 8k–128k). We stop adding watches past this and
|
|
89
|
+
* log once — partial live-watch (with `codegraph sync` as the backstop) is far
|
|
90
|
+
* better than exhausting the user's inotify budget and breaking watching
|
|
91
|
+
* system-wide (#579). Tunable via CODEGRAPH_MAX_DIR_WATCHES.
|
|
92
|
+
*/
|
|
93
|
+
const DEFAULT_MAX_DIR_WATCHES = 50_000;
|
|
94
|
+
function maxDirWatches() {
|
|
95
|
+
const raw = process.env.CODEGRAPH_MAX_DIR_WATCHES;
|
|
96
|
+
if (raw && /^\d+$/.test(raw)) {
|
|
97
|
+
const n = Number(raw);
|
|
98
|
+
if (n > 0)
|
|
99
|
+
return n;
|
|
100
|
+
}
|
|
101
|
+
return DEFAULT_MAX_DIR_WATCHES;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Test seam (see {@link __emitWatchEventForTests}). Maps a watcher's project
|
|
105
|
+
* root to its live instance so tests can synthesize a change event
|
|
106
|
+
* deterministically — real fs.watch delivery latency races under parallel
|
|
107
|
+
* vitest (the reason the previous chokidar mock existed). Only populated under
|
|
108
|
+
* a test runner, so production carries no bookkeeping or retained references.
|
|
109
|
+
*/
|
|
110
|
+
const liveWatchersForTests = new Map();
|
|
111
|
+
const IS_TEST_RUNTIME = !!(process.env.VITEST || process.env.NODE_ENV === 'test');
|
|
61
112
|
/**
|
|
62
113
|
* Thrown by a `syncFn` to signal that the underlying sync couldn't acquire
|
|
63
114
|
* the cross-process write lock (#449). The watcher treats this as "no
|
|
@@ -77,8 +128,9 @@ exports.LockUnavailableError = LockUnavailableError;
|
|
|
77
128
|
* debounced sync operations via a provided callback.
|
|
78
129
|
*
|
|
79
130
|
* Design goals:
|
|
80
|
-
* -
|
|
81
|
-
*
|
|
131
|
+
* - Bounded resource usage: O(1) descriptors on macOS/Windows (one recursive
|
|
132
|
+
* watch), O(directories) inotify watches on Linux — never O(files), which
|
|
133
|
+
* was the system-crashing fd leak on macOS (#644/#496/#555/#628).
|
|
82
134
|
* - Debounced to avoid thrashing on rapid saves
|
|
83
135
|
* - Filters to supported source files by extension
|
|
84
136
|
* - Ignores .codegraph/ and .git/ regardless of .gitignore
|
|
@@ -86,11 +138,18 @@ exports.LockUnavailableError = LockUnavailableError;
|
|
|
86
138
|
* without blocking on a sync (issue #403)
|
|
87
139
|
*/
|
|
88
140
|
class FileWatcher {
|
|
89
|
-
watcher
|
|
141
|
+
/** macOS/Windows: the single recursive watcher. Null on Linux. */
|
|
142
|
+
recursiveWatcher = null;
|
|
143
|
+
/** Linux: one watcher per watched directory (keyed by absolute path). */
|
|
144
|
+
dirWatchers = new Map();
|
|
145
|
+
/** Set once the per-directory watch cap is hit, so we log only once. */
|
|
146
|
+
dirCapWarned = false;
|
|
147
|
+
/** Test-only inert mode: started, but with no OS watcher installed. */
|
|
148
|
+
inert = false;
|
|
90
149
|
debounceTimer = null;
|
|
91
150
|
/**
|
|
92
151
|
* Files seen by the watcher since the last successful sync — populated on
|
|
93
|
-
* every
|
|
152
|
+
* every change event, cleared at the start of a sync, and re-populated by
|
|
94
153
|
* events that arrive mid-sync (or restored on sync failure). Keyed by the
|
|
95
154
|
* same project-relative POSIX path the rest of the codebase uses, so a
|
|
96
155
|
* caller can intersect tool-response file paths against this map cheaply.
|
|
@@ -106,41 +165,46 @@ class FileWatcher {
|
|
|
106
165
|
syncing = false;
|
|
107
166
|
stopped = false;
|
|
108
167
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
168
|
+
* True once the initial watch set is established. Unlike the previous
|
|
169
|
+
* chokidar implementation there is no asynchronous initial "crawl" emitting
|
|
170
|
+
* an `add` per existing file — `fs.watch` only reports changes from the
|
|
171
|
+
* moment it's installed — so this flips to true synchronously at the end of
|
|
172
|
+
* `start()`. The startup reconcile against on-disk state is handled
|
|
173
|
+
* separately by the engine's catch-up sync, not by the watcher.
|
|
114
174
|
*/
|
|
115
|
-
|
|
175
|
+
ready = false;
|
|
116
176
|
/**
|
|
117
|
-
* Callbacks that resolve when
|
|
118
|
-
* any production caller that cares about a clean baseline) to
|
|
119
|
-
* gate on
|
|
177
|
+
* Callbacks that resolve when the watch set is established. Used by tests
|
|
178
|
+
* (and any production caller that cares about a clean baseline) to
|
|
179
|
+
* deterministically gate on watcher readiness.
|
|
120
180
|
*/
|
|
121
181
|
readyWaiters = [];
|
|
122
|
-
// The shared
|
|
123
|
-
//
|
|
124
|
-
//
|
|
182
|
+
// The shared scope matcher (built-in defaults + project .gitignore, with
|
|
183
|
+
// embedded child repos matched by their OWN rules — #514), built once at
|
|
184
|
+
// start(). Same source of truth the indexer uses, so watcher scope can
|
|
185
|
+
// never diverge from index scope. An embedded repo created after start()
|
|
186
|
+
// joins the scope on the next watcher restart / re-index.
|
|
125
187
|
ignoreMatcher = null;
|
|
126
188
|
projectRoot;
|
|
127
189
|
debounceMs;
|
|
128
190
|
syncFn;
|
|
129
191
|
onSyncComplete;
|
|
130
192
|
onSyncError;
|
|
193
|
+
inertForTests;
|
|
131
194
|
constructor(projectRoot, syncFn, options = {}) {
|
|
132
195
|
this.projectRoot = projectRoot;
|
|
133
196
|
this.syncFn = syncFn;
|
|
134
197
|
this.debounceMs = options.debounceMs ?? 2000;
|
|
135
198
|
this.onSyncComplete = options.onSyncComplete;
|
|
136
199
|
this.onSyncError = options.onSyncError;
|
|
200
|
+
this.inertForTests = options.inertForTests ?? false;
|
|
137
201
|
}
|
|
138
202
|
/**
|
|
139
203
|
* Start watching for file changes.
|
|
140
204
|
* Returns true if watching started successfully, false otherwise.
|
|
141
205
|
*/
|
|
142
206
|
start() {
|
|
143
|
-
if (this.
|
|
207
|
+
if (this.recursiveWatcher || this.dirWatchers.size > 0 || this.inert)
|
|
144
208
|
return true; // Already watching
|
|
145
209
|
this.stopped = false;
|
|
146
210
|
// Some environments make filesystem watching unusable — most notably
|
|
@@ -153,97 +217,207 @@ class FileWatcher {
|
|
|
153
217
|
return false;
|
|
154
218
|
}
|
|
155
219
|
// Reuse the indexer's ignore set so the watcher and indexer agree on scope.
|
|
156
|
-
|
|
157
|
-
// filter — that's the #276 fix.
|
|
158
|
-
this.ignoreMatcher = (0, extraction_1.buildDefaultIgnore)(this.projectRoot);
|
|
220
|
+
this.ignoreMatcher = (0, extraction_1.buildScopeIgnore)(this.projectRoot);
|
|
159
221
|
try {
|
|
160
|
-
|
|
161
|
-
//
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
this.
|
|
185
|
-
});
|
|
186
|
-
// chokidar emits 'all' for every event type; we only sync source files.
|
|
187
|
-
this.watcher.on('all', (_event, filePath) => {
|
|
188
|
-
if (this.stopped)
|
|
189
|
-
return;
|
|
190
|
-
const normalized = (0, utils_1.normalizePath)(path.relative(this.projectRoot, filePath));
|
|
191
|
-
// Defense in depth: `ignored` should already keep these out, but events
|
|
192
|
-
// can still arrive during setup or via symlink traversal.
|
|
193
|
-
if (this.isAlwaysIgnored(normalized))
|
|
194
|
-
return;
|
|
195
|
-
if (!(0, extraction_1.isSourceFile)(normalized))
|
|
196
|
-
return;
|
|
197
|
-
(0, errors_1.logDebug)('File change detected', { file: normalized });
|
|
198
|
-
// Only track events from after chokidar's initial scan as pending
|
|
199
|
-
// edits — pre-existing files on disk are already represented by
|
|
200
|
-
// (or about to be reconciled by) the index, not a user edit.
|
|
201
|
-
if (this.chokidarReady) {
|
|
202
|
-
const now = Date.now();
|
|
203
|
-
const existing = this.pendingFiles.get(normalized);
|
|
204
|
-
this.pendingFiles.set(normalized, {
|
|
205
|
-
firstSeenMs: existing?.firstSeenMs ?? now,
|
|
206
|
-
lastSeenMs: now,
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
this.scheduleSync();
|
|
210
|
-
});
|
|
211
|
-
// Handle watcher errors gracefully — don't crash, the user can restart.
|
|
212
|
-
this.watcher.on('error', (err) => {
|
|
213
|
-
(0, errors_1.logWarn)('File watcher error', { error: String(err) });
|
|
222
|
+
if (this.inertForTests) {
|
|
223
|
+
// Test-only: install no OS watcher; the seam drives events instead.
|
|
224
|
+
this.inert = true;
|
|
225
|
+
}
|
|
226
|
+
else if (supportsRecursiveWatch()) {
|
|
227
|
+
this.startRecursive();
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
this.startPerDirectory();
|
|
231
|
+
}
|
|
232
|
+
// No async crawl to wait on: as soon as the watch set is installed we
|
|
233
|
+
// have a clean baseline (pendingFiles is only populated by post-start
|
|
234
|
+
// events). Clear defensively and flip ready.
|
|
235
|
+
this.pendingFiles.clear();
|
|
236
|
+
this.ready = true;
|
|
237
|
+
for (const cb of this.readyWaiters)
|
|
238
|
+
cb();
|
|
239
|
+
this.readyWaiters.length = 0;
|
|
240
|
+
if (IS_TEST_RUNTIME)
|
|
241
|
+
liveWatchersForTests.set(this.projectRoot, this);
|
|
242
|
+
(0, errors_1.logDebug)('File watcher started', {
|
|
243
|
+
projectRoot: this.projectRoot,
|
|
244
|
+
debounceMs: this.debounceMs,
|
|
245
|
+
mode: this.inertForTests ? 'inert' : supportsRecursiveWatch() ? 'recursive' : 'per-directory',
|
|
246
|
+
watchedDirs: this.dirWatchers.size || undefined,
|
|
214
247
|
});
|
|
215
|
-
(0, errors_1.logDebug)('File watcher started', { projectRoot: this.projectRoot, debounceMs: this.debounceMs });
|
|
216
248
|
return true;
|
|
217
249
|
}
|
|
218
250
|
catch (err) {
|
|
219
251
|
// Watcher setup failed (e.g., permission denied, missing directory).
|
|
220
252
|
(0, errors_1.logWarn)('Could not start file watcher', { error: String(err) });
|
|
253
|
+
this.stop();
|
|
221
254
|
return false;
|
|
222
255
|
}
|
|
223
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* macOS/Windows: one recursive watcher for the whole tree. O(1) descriptors.
|
|
259
|
+
* `filename` arrives relative to the project root (with subdirectories), so
|
|
260
|
+
* it maps straight to a project-relative path.
|
|
261
|
+
*/
|
|
262
|
+
startRecursive() {
|
|
263
|
+
this.recursiveWatcher = fs.watch(this.projectRoot, { recursive: true, persistent: true }, (_event, filename) => {
|
|
264
|
+
if (this.stopped || filename == null)
|
|
265
|
+
return;
|
|
266
|
+
this.handleChange((0, utils_1.normalizePath)(String(filename)));
|
|
267
|
+
});
|
|
268
|
+
this.recursiveWatcher.on('error', (err) => {
|
|
269
|
+
(0, errors_1.logWarn)('File watcher error', { error: String(err) });
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Linux: walk the (non-ignored) tree and watch each directory. One inotify
|
|
274
|
+
* watch per directory reports create/modify/delete for that directory's
|
|
275
|
+
* direct children, so we never watch individual files.
|
|
276
|
+
*/
|
|
277
|
+
startPerDirectory() {
|
|
278
|
+
this.watchTree(this.projectRoot, /* markExisting */ false);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Add an inotify watch for `dir` and recurse into its non-ignored
|
|
282
|
+
* subdirectories. When `markExisting` is true (a directory that appeared
|
|
283
|
+
* AFTER startup), the source files already inside it are recorded as pending
|
|
284
|
+
* — this closes the `mkdir + write` race where files created before the new
|
|
285
|
+
* directory's watch is installed would otherwise be missed until the next
|
|
286
|
+
* full sync. The initial startup walk passes false (the engine's catch-up
|
|
287
|
+
* sync owns the baseline).
|
|
288
|
+
*/
|
|
289
|
+
watchTree(dir, markExisting) {
|
|
290
|
+
if (this.dirWatchers.has(dir))
|
|
291
|
+
return;
|
|
292
|
+
if (this.dirWatchers.size >= maxDirWatches()) {
|
|
293
|
+
if (!this.dirCapWarned) {
|
|
294
|
+
this.dirCapWarned = true;
|
|
295
|
+
(0, errors_1.logWarn)('File watcher hit directory-watch cap; remaining subtrees rely on manual/periodic sync', {
|
|
296
|
+
cap: maxDirWatches(),
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
let w;
|
|
302
|
+
try {
|
|
303
|
+
w = fs.watch(dir, { persistent: true }, (_event, filename) => this.handleDirEvent(dir, filename));
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// ENOENT / EACCES / too-many-open-files — skip this directory quietly.
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
w.on('error', () => this.unwatchDir(dir));
|
|
310
|
+
this.dirWatchers.set(dir, w);
|
|
311
|
+
let entries;
|
|
312
|
+
try {
|
|
313
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
for (const entry of entries) {
|
|
319
|
+
const child = path.join(dir, entry.name);
|
|
320
|
+
if (entry.isDirectory()) {
|
|
321
|
+
if (this.shouldIgnoreDir(child))
|
|
322
|
+
continue;
|
|
323
|
+
this.watchTree(child, markExisting);
|
|
324
|
+
}
|
|
325
|
+
else if (markExisting && entry.isFile()) {
|
|
326
|
+
this.handleChange((0, utils_1.normalizePath)(path.relative(this.projectRoot, child)));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Linux per-directory event handler. `filename` is relative to `dir`. A new
|
|
332
|
+
* sub-directory is picked up by extending the watch tree; everything else is
|
|
333
|
+
* routed through the shared change handler.
|
|
334
|
+
*/
|
|
335
|
+
handleDirEvent(dir, filename) {
|
|
336
|
+
if (this.stopped || filename == null)
|
|
337
|
+
return;
|
|
338
|
+
const full = path.join(dir, String(filename));
|
|
339
|
+
// A newly-created directory needs its own watch (recursive isn't available
|
|
340
|
+
// on Linux). statSync is cheap and these events are rare relative to file
|
|
341
|
+
// edits. If the path vanished (rapid create/delete) the stat throws and we
|
|
342
|
+
// fall through to the change handler, which no-ops on a non-source path.
|
|
343
|
+
try {
|
|
344
|
+
if (fs.statSync(full).isDirectory()) {
|
|
345
|
+
if (!this.shouldIgnoreDir(full))
|
|
346
|
+
this.watchTree(full, /* markExisting */ true);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// deleted/inaccessible — treat as a normal change below
|
|
352
|
+
}
|
|
353
|
+
this.handleChange((0, utils_1.normalizePath)(path.relative(this.projectRoot, full)));
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Shared change handler for both watch strategies. `rel` is a
|
|
357
|
+
* project-relative POSIX path. Applies the ignore + source-file filters and,
|
|
358
|
+
* for a real source change, records it as pending (#403) and schedules a
|
|
359
|
+
* debounced sync.
|
|
360
|
+
*
|
|
361
|
+
* The recursive (macOS/Windows) watcher reports events for ignored trees too
|
|
362
|
+
* (one stream covers the whole repo), so the ignore check here is load-bearing
|
|
363
|
+
* — it drops node_modules/dist/.git churn before any sync is scheduled.
|
|
364
|
+
*/
|
|
365
|
+
handleChange(rel) {
|
|
366
|
+
if (!rel || rel === '.' || rel.startsWith('..'))
|
|
367
|
+
return;
|
|
368
|
+
if (this.isAlwaysIgnored(rel))
|
|
369
|
+
return;
|
|
370
|
+
if (this.ignoreMatcher && this.ignoreMatcher.ignores(rel))
|
|
371
|
+
return;
|
|
372
|
+
if (!(0, extraction_1.isSourceFile)(rel))
|
|
373
|
+
return;
|
|
374
|
+
(0, errors_1.logDebug)('File change detected', { file: rel });
|
|
375
|
+
if (this.ready) {
|
|
376
|
+
const now = Date.now();
|
|
377
|
+
const existing = this.pendingFiles.get(rel);
|
|
378
|
+
this.pendingFiles.set(rel, {
|
|
379
|
+
firstSeenMs: existing?.firstSeenMs ?? now,
|
|
380
|
+
lastSeenMs: now,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
this.scheduleSync();
|
|
384
|
+
}
|
|
385
|
+
/** Close and forget the watch for a directory that errored/was removed. */
|
|
386
|
+
unwatchDir(dir) {
|
|
387
|
+
const w = this.dirWatchers.get(dir);
|
|
388
|
+
if (w) {
|
|
389
|
+
try {
|
|
390
|
+
w.close();
|
|
391
|
+
}
|
|
392
|
+
catch {
|
|
393
|
+
/* already closed */
|
|
394
|
+
}
|
|
395
|
+
this.dirWatchers.delete(dir);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
224
398
|
/** Our own dirs are always ignored, regardless of .gitignore. */
|
|
225
399
|
isAlwaysIgnored(rel) {
|
|
226
|
-
|
|
400
|
+
// First path segment. Ignore any CodeGraph data dir — the active one AND a
|
|
401
|
+
// sibling like `.codegraph-win` a second environment (Windows/WSL) created
|
|
402
|
+
// in the same tree, so neither side watches the other's index (#636).
|
|
403
|
+
const top = rel.split('/')[0] ?? rel;
|
|
404
|
+
return ((0, directory_1.isCodeGraphDataDir)(top) ||
|
|
227
405
|
rel === '.git' || rel.startsWith('.git/'));
|
|
228
406
|
}
|
|
229
407
|
/**
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
* rule like `build/` matches
|
|
408
|
+
* True for any directory that should NOT be watched (used while building the
|
|
409
|
+
* Linux per-directory watch tree). Tests the directory form of the path so a
|
|
410
|
+
* dir-only ignore rule like `build/` matches.
|
|
233
411
|
*/
|
|
234
|
-
|
|
235
|
-
const rel = (0, utils_1.normalizePath)(path.relative(this.projectRoot,
|
|
412
|
+
shouldIgnoreDir(dirPath) {
|
|
413
|
+
const rel = (0, utils_1.normalizePath)(path.relative(this.projectRoot, dirPath));
|
|
236
414
|
if (!rel || rel === '.' || rel.startsWith('..'))
|
|
237
415
|
return false; // root / outside
|
|
238
416
|
if (this.isAlwaysIgnored(rel))
|
|
239
417
|
return true;
|
|
240
418
|
if (!this.ignoreMatcher)
|
|
241
419
|
return false;
|
|
242
|
-
|
|
243
|
-
return this.ignoreMatcher.ignores(stats.isDirectory() ? rel + '/' : rel);
|
|
244
|
-
}
|
|
245
|
-
// Stats unknown: test both forms so a directory match isn't missed.
|
|
246
|
-
return this.ignoreMatcher.ignores(rel) || this.ignoreMatcher.ignores(rel + '/');
|
|
420
|
+
return this.ignoreMatcher.ignores(rel + '/');
|
|
247
421
|
}
|
|
248
422
|
/**
|
|
249
423
|
* Stop watching for file changes.
|
|
@@ -254,34 +428,60 @@ class FileWatcher {
|
|
|
254
428
|
clearTimeout(this.debounceTimer);
|
|
255
429
|
this.debounceTimer = null;
|
|
256
430
|
}
|
|
257
|
-
if (this.
|
|
258
|
-
|
|
259
|
-
|
|
431
|
+
if (this.recursiveWatcher) {
|
|
432
|
+
try {
|
|
433
|
+
this.recursiveWatcher.close();
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
/* already closed */
|
|
437
|
+
}
|
|
438
|
+
this.recursiveWatcher = null;
|
|
260
439
|
}
|
|
440
|
+
for (const w of this.dirWatchers.values()) {
|
|
441
|
+
try {
|
|
442
|
+
w.close();
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
/* already closed */
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
this.dirWatchers.clear();
|
|
449
|
+
this.dirCapWarned = false;
|
|
450
|
+
this.inert = false;
|
|
261
451
|
this.pendingFiles.clear();
|
|
262
|
-
this.
|
|
452
|
+
this.ready = false;
|
|
263
453
|
this.ignoreMatcher = null;
|
|
454
|
+
if (IS_TEST_RUNTIME)
|
|
455
|
+
liveWatchersForTests.delete(this.projectRoot);
|
|
264
456
|
(0, errors_1.logDebug)('File watcher stopped');
|
|
265
457
|
}
|
|
458
|
+
/**
|
|
459
|
+
* @internal Test-only: feed a synthetic project-relative change through the
|
|
460
|
+
* same filter → pendingFiles → debounced-sync path a real fs.watch event
|
|
461
|
+
* takes. Lets the watcher / staleness-banner suites stay deterministic
|
|
462
|
+
* instead of racing on OS watch-delivery latency. See
|
|
463
|
+
* {@link __emitWatchEventForTests}.
|
|
464
|
+
*/
|
|
465
|
+
ingestEventForTests(relPath) {
|
|
466
|
+
this.handleChange((0, utils_1.normalizePath)(relPath));
|
|
467
|
+
}
|
|
266
468
|
/**
|
|
267
469
|
* Whether the watcher is currently active.
|
|
268
470
|
*/
|
|
269
471
|
isActive() {
|
|
270
|
-
return this.
|
|
472
|
+
return (this.recursiveWatcher !== null || this.dirWatchers.size > 0 || this.inert) && !this.stopped;
|
|
271
473
|
}
|
|
272
474
|
/**
|
|
273
|
-
* Resolves once
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
* is flaky under load because chokidar can take longer than expected to
|
|
277
|
-
* finish its initial crawl on slow filesystems / parallel test runs.
|
|
475
|
+
* Resolves once the watch set has been installed (or immediately if it
|
|
476
|
+
* already has). Useful for tests that need a deterministic boundary before
|
|
477
|
+
* asserting on `pendingFiles`.
|
|
278
478
|
*
|
|
279
479
|
* Production callers don't need this: `pendingFiles` is read continuously,
|
|
280
|
-
* the staleness banner is always correct (empty or populated), and
|
|
281
|
-
* initial-scan window
|
|
480
|
+
* the staleness banner is always correct (empty or populated), and there is
|
|
481
|
+
* no asynchronous initial-scan window with `fs.watch`.
|
|
282
482
|
*/
|
|
283
483
|
waitUntilReady(timeoutMs = 10000) {
|
|
284
|
-
if (this.
|
|
484
|
+
if (this.ready)
|
|
285
485
|
return Promise.resolve();
|
|
286
486
|
return new Promise((resolve, reject) => {
|
|
287
487
|
const t = setTimeout(() => {
|
|
@@ -395,4 +595,19 @@ class FileWatcher {
|
|
|
395
595
|
}
|
|
396
596
|
}
|
|
397
597
|
exports.FileWatcher = FileWatcher;
|
|
598
|
+
/**
|
|
599
|
+
* Test-only: synthesize a source-file change for the live watcher running at
|
|
600
|
+
* `projectRoot`, exercising the real filter → pendingFiles → debounced-sync
|
|
601
|
+
* logic without depending on fs.watch delivery timing (which races under
|
|
602
|
+
* parallel vitest). `relPath` is project-relative POSIX (e.g. "src/foo.ts").
|
|
603
|
+
* Returns false if no live watcher is registered for that root (e.g. outside a
|
|
604
|
+
* test runtime, where the registry is intentionally not populated).
|
|
605
|
+
*/
|
|
606
|
+
function __emitWatchEventForTests(projectRoot, relPath) {
|
|
607
|
+
const w = liveWatchersForTests.get(projectRoot);
|
|
608
|
+
if (!w)
|
|
609
|
+
return false;
|
|
610
|
+
w.ingestEventForTests(relPath);
|
|
611
|
+
return true;
|
|
612
|
+
}
|
|
398
613
|
//# sourceMappingURL=watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/sync/watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/sync/watcher.ts"],"names":[],"mappings":"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"}
|