@edxeth/fff-node 0.7.2-edxeth.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.
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Binary resolution utilities for fff-node
3
+ *
4
+ * Resolves the native library from:
5
+ * 1. Platform-specific npm package (e.g. @edxeth/fff-bin-darwin-arm64)
6
+ * 2. Local dev build (target/release or target/debug)
7
+ */
8
+ /**
9
+ * Check if the binary exists in any known location
10
+ */
11
+ export declare function binaryExists(): boolean;
12
+ /**
13
+ * Find the native library binary.
14
+ *
15
+ * Resolution order:
16
+ * - Dev workspace: local dev build first, then npm package
17
+ * - Production: npm package first, then dev build
18
+ *
19
+ * @returns Absolute path to the library, or null if not found
20
+ */
21
+ export declare function findBinary(): string | null;
22
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/binary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8CH;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AA0DD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAuB1C"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Binary resolution utilities for fff-node
3
+ *
4
+ * Resolves the native library from:
5
+ * 1. Platform-specific npm package (e.g. @edxeth/fff-bin-darwin-arm64)
6
+ * 2. Local dev build (target/release or target/debug)
7
+ */
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { createRequire } from "node:module";
10
+ import { dirname, join } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ import { getLibFilename, getNpmPackageName } from "./platform.js";
13
+ /**
14
+ * Get the current file's directory
15
+ */
16
+ function getCurrentDir() {
17
+ const url = import.meta.url;
18
+ if (url.startsWith("file://")) {
19
+ return dirname(fileURLToPath(url));
20
+ }
21
+ return dirname(url);
22
+ }
23
+ /**
24
+ * Get the package root directory
25
+ */
26
+ function getPackageDir() {
27
+ const currentDir = getCurrentDir();
28
+ // In dev: src/ -> package root
29
+ // In dist: dist/src/ -> package root
30
+ // We look for package.json to find the actual root
31
+ let dir = currentDir;
32
+ for (let i = 0; i < 5; i++) {
33
+ if (existsSync(join(dir, "package.json"))) {
34
+ try {
35
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
36
+ if (pkg.name === "@edxeth/fff-node") {
37
+ return dir;
38
+ }
39
+ }
40
+ catch {
41
+ // Not our package.json, keep going up
42
+ }
43
+ }
44
+ dir = dirname(dir);
45
+ }
46
+ // Fallback: assume we're one level deep in src/
47
+ return dirname(currentDir);
48
+ }
49
+ /**
50
+ * Check if the binary exists in any known location
51
+ */
52
+ export function binaryExists() {
53
+ return findBinary() !== null;
54
+ }
55
+ /**
56
+ * Try to resolve the binary from the platform-specific npm package.
57
+ *
58
+ * When users install @edxeth/fff-node, npm automatically installs the matching
59
+ * optionalDependency (e.g. @edxeth/fff-bin-darwin-arm64). We resolve the binary
60
+ * path by requiring that package's package.json and looking for the binary
61
+ * in the same directory.
62
+ */
63
+ function resolveFromNpmPackage() {
64
+ const packageName = getNpmPackageName();
65
+ try {
66
+ // Use createRequire to resolve the platform package's location
67
+ const require = createRequire(join(getPackageDir(), "package.json"));
68
+ const packageJsonPath = require.resolve(`${packageName}/package.json`);
69
+ const packageDir = dirname(packageJsonPath);
70
+ const binaryPath = join(packageDir, getLibFilename());
71
+ if (existsSync(binaryPath)) {
72
+ return binaryPath;
73
+ }
74
+ }
75
+ catch {
76
+ // Package not installed - this is expected on unsupported platforms
77
+ // or when installed without optional dependencies
78
+ }
79
+ return null;
80
+ }
81
+ /**
82
+ * Get the development binary path (for local development)
83
+ */
84
+ function getDevBinaryPath() {
85
+ const packageDir = getPackageDir();
86
+ const workspaceRoot = join(packageDir, "..", "..");
87
+ const possiblePaths = [
88
+ join(workspaceRoot, "target", "release", getLibFilename()),
89
+ join(workspaceRoot, "target", "debug", getLibFilename()),
90
+ ];
91
+ for (const path of possiblePaths) {
92
+ if (existsSync(path)) {
93
+ return path;
94
+ }
95
+ }
96
+ return null;
97
+ }
98
+ function isDevWorkspace() {
99
+ const packageDir = getPackageDir();
100
+ const workspaceRoot = join(packageDir, "..", "..");
101
+ return existsSync(join(workspaceRoot, "Cargo.toml"));
102
+ }
103
+ /**
104
+ * Find the native library binary.
105
+ *
106
+ * Resolution order:
107
+ * - Dev workspace: local dev build first, then npm package
108
+ * - Production: npm package first, then dev build
109
+ *
110
+ * @returns Absolute path to the library, or null if not found
111
+ */
112
+ export function findBinary() {
113
+ if (isDevWorkspace()) {
114
+ // 1. Local bin/ directory (populated by `make prepare-node`)
115
+ const binPath = join(getPackageDir(), "bin", getLibFilename());
116
+ if (existsSync(binPath))
117
+ return binPath;
118
+ // 2. Local dev build (target/release or target/debug)
119
+ const devPath = getDevBinaryPath();
120
+ if (devPath)
121
+ return devPath;
122
+ // 3. Fallback to npm package
123
+ const npmPath = resolveFromNpmPackage();
124
+ if (npmPath)
125
+ return npmPath;
126
+ return null;
127
+ }
128
+ // Production: npm package first
129
+ const npmPath = resolveFromNpmPackage();
130
+ if (npmPath)
131
+ return npmPath;
132
+ // Fallback: local dev build (e.g. user built from source)
133
+ return getDevBinaryPath();
134
+ }
135
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Node.js FFI bindings for the fff-c native library using ffi-rs
3
+ *
4
+ * This module uses ffi-rs to call into the Rust C library.
5
+ * All functions follow the Result pattern for error handling.
6
+ *
7
+ * The API is instance-based: `ffiCreate` returns an opaque handle that must
8
+ * be passed to all subsequent calls and freed with `ffiDestroy`.
9
+ *
10
+ * ## Memory management
11
+ *
12
+ * Every `fff_*` function returning `*mut FffResult` allocates with Rust's Box.
13
+ * We MUST call `fff_free_result` to properly deallocate (not libc::free).
14
+ *
15
+ * ## FffResult struct reading
16
+ *
17
+ * The FffResult struct layout (#[repr(C)]):
18
+ * offset 0: success (bool, 1 byte + 7 padding)
19
+ * offset 8: data pointer (8 bytes) - *mut c_char (JSON string or null)
20
+ * offset 16: error pointer (8 bytes) - *mut c_char (error message or null)
21
+ * offset 24: handle pointer (8 bytes) - *mut c_void (instance handle or null)
22
+ *
23
+ * ## Two-step approach for reading + freeing
24
+ *
25
+ * ffi-rs auto-dereferences struct retType pointers, losing the original pointer.
26
+ * We solve this by:
27
+ * 1. Calling the C function with `retType: DataType.External` to get the raw pointer
28
+ * 2. Using `restorePointer` to read the struct fields from the raw pointer
29
+ * 3. Calling `fff_free_result` with the original raw pointer
30
+ *
31
+ * ## Null pointer detection
32
+ *
33
+ * `isNullPointer` from ffi-rs correctly detects null C pointers wrapped as
34
+ * V8 External objects. We use this instead of truthy checks.
35
+ */
36
+ import { type JsExternal } from "ffi-rs";
37
+ import type { DirSearchResult, GrepResult, MixedSearchResult, Result, SearchResult } from "./types.js";
38
+ /**
39
+ * Opaque native handle type. Callers must not inspect or modify this value.
40
+ */
41
+ export type NativeHandle = JsExternal;
42
+ /**
43
+ * Create a new file finder instance.
44
+ */
45
+ export declare function ffiCreate(basePath: string, frecencyDbPath: string, historyDbPath: string, useUnsafeNoLock: boolean, enableMmapCache: boolean, enableContentIndexing: boolean, watch: boolean, aiMode: boolean, logFilePath: string, logLevel: string, cacheBudgetMaxFiles: number, cacheBudgetMaxBytes: number, cacheBudgetMaxFileSize: number): Result<NativeHandle>;
46
+ /**
47
+ * Destroy and clean up an instance.
48
+ */
49
+ export declare function ffiDestroy(handle: NativeHandle): void;
50
+ /**
51
+ * Perform fuzzy search.
52
+ */
53
+ export declare function ffiSearch(handle: NativeHandle, query: string, currentFile: string, maxThreads: number, pageIndex: number, pageSize: number, comboBoostMultiplier: number, minComboCount: number): Result<SearchResult>;
54
+ /**
55
+ * Perform fuzzy directory search.
56
+ */
57
+ export declare function ffiSearchDirectories(handle: NativeHandle, query: string, currentFile: string | null, maxThreads: number, pageIndex: number, pageSize: number): Result<DirSearchResult>;
58
+ /**
59
+ * Perform mixed (files + directories) fuzzy search.
60
+ */
61
+ export declare function ffiSearchMixed(handle: NativeHandle, query: string, currentFile: string, maxThreads: number, pageIndex: number, pageSize: number, comboBoostMultiplier: number, minComboCount: number): Result<MixedSearchResult>;
62
+ /**
63
+ * Live grep - search file contents.
64
+ */
65
+ export declare function ffiLiveGrep(handle: NativeHandle, query: string, mode: string, maxFileSize: number, maxMatchesPerFile: number, smartCase: boolean, fileOffset: number, pageLimit: number, timeBudgetMs: number, beforeContext: number, afterContext: number, classifyDefinitions: boolean): Result<GrepResult>;
66
+ /**
67
+ * Multi-pattern grep - Aho-Corasick multi-needle search.
68
+ */
69
+ export declare function ffiMultiGrep(handle: NativeHandle, patternsJoined: string, constraints: string, maxFileSize: number, maxMatchesPerFile: number, smartCase: boolean, fileOffset: number, pageLimit: number, timeBudgetMs: number, beforeContext: number, afterContext: number, classifyDefinitions: boolean): Result<GrepResult>;
70
+ /**
71
+ * Trigger file scan.
72
+ */
73
+ export declare function ffiScanFiles(handle: NativeHandle): Result<void>;
74
+ /**
75
+ * Check if scanning.
76
+ */
77
+ export declare function ffiIsScanning(handle: NativeHandle): boolean;
78
+ /**
79
+ * Get the base path of the file picker.
80
+ */
81
+ export declare function ffiGetBasePath(handle: NativeHandle): Result<string | null>;
82
+ /**
83
+ * Get scan progress.
84
+ */
85
+ export declare function ffiGetScanProgress(handle: NativeHandle): Result<{
86
+ scannedFilesCount: number;
87
+ isScanning: boolean;
88
+ }>;
89
+ /**
90
+ * Wait for a tree scan to complete.
91
+ */
92
+ export declare function ffiWaitForScan(handle: NativeHandle, timeoutMs: number): Result<boolean>;
93
+ /**
94
+ * Restart index in new path.
95
+ */
96
+ export declare function ffiRestartIndex(handle: NativeHandle, newPath: string): Result<void>;
97
+ /**
98
+ * Refresh git status.
99
+ */
100
+ export declare function ffiRefreshGitStatus(handle: NativeHandle): Result<number>;
101
+ /**
102
+ * Track query completion.
103
+ */
104
+ export declare function ffiTrackQuery(handle: NativeHandle, query: string, filePath: string): Result<boolean>;
105
+ /**
106
+ * Get historical query.
107
+ */
108
+ export declare function ffiGetHistoricalQuery(handle: NativeHandle, offset: number): Result<string | null>;
109
+ /**
110
+ * Health check.
111
+ *
112
+ * `handle` can be null for a limited check (version + git only).
113
+ * When null, we pass DataType.U64 with value 0 as a null pointer workaround
114
+ * since ffi-rs does not accept `null` for External parameters.
115
+ */
116
+ export declare function ffiHealthCheck(handle: NativeHandle | null, testPath: string): Result<unknown>;
117
+ /**
118
+ * Ensure the library is loaded.
119
+ *
120
+ * Loads the native library from the platform-specific npm package
121
+ * or a local dev build. Throws if the binary is not found.
122
+ */
123
+ export declare function ensureLoaded(): void;
124
+ /**
125
+ * Check if the library is available.
126
+ */
127
+ export declare function isAvailable(): boolean;
128
+ /**
129
+ * Close the library and release ffi-rs resources.
130
+ * Call this when completely done with the library.
131
+ */
132
+ export declare function closeLibrary(): void;
133
+ //# sourceMappingURL=ffi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffi.d.ts","sourceRoot":"","sources":["../../src/ffi.ts"],"names":[],"mappings":"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"}