pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
62 lines (59 loc) • 1.74 kB
JavaScript
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
// dist/scripts/lib/web-tree-sitter-dir.mjs
import * as fs from "node:fs";
import * as path from "node:path";
var WEB_TREE_SITTER = "web-tree-sitter";
var RUNTIME_WASM = "tree-sitter.wasm";
function isWebTreeSitterPackageDir(dir) {
try {
if (!fs.existsSync(path.join(dir, RUNTIME_WASM)))
return false;
const manifest = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf8"));
return manifest?.name === WEB_TREE_SITTER;
} catch {
return false;
}
}
function packageDirOf(resolvedFile) {
let dir = path.dirname(resolvedFile);
for (; ; ) {
if (isWebTreeSitterPackageDir(dir))
return dir;
const parent = path.dirname(dir);
if (parent === dir)
return void 0;
dir = parent;
}
}
function resolveWebTreeSitterPackageDir(deps) {
for (const specifier of [
`${WEB_TREE_SITTER}/${RUNTIME_WASM}`,
WEB_TREE_SITTER
]) {
try {
const dir = packageDirOf(deps.resolve(specifier));
if (dir)
return dir;
} catch {
}
}
for (const base of [deps.packageRoot, deps.cwd]) {
try {
const candidate = path.join(base(), "node_modules", WEB_TREE_SITTER);
if (isWebTreeSitterPackageDir(candidate))
return candidate;
} catch {
}
}
return void 0;
}
function findCoreGrammarDir({ packageRoot, webTreeSitterDir }) {
return [
path.join(packageRoot, "grammars"),
webTreeSitterDir && path.join(webTreeSitterDir, "grammars")
].find((dir) => dir && fs.existsSync(path.join(dir, "tree-sitter-typescript.wasm")));
}
export {
resolveWebTreeSitterPackageDir,
findCoreGrammarDir
};