15 lines
991 B
JavaScript
15 lines
991 B
JavaScript
import { createRequire } from "node:module";
|
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
import { resolve } from "node:path";
|
|
const require = createRequire(import.meta.url);
|
|
const addon = require(resolve(process.cwd(), "native/workspace-fs-at/build/Release/workspace_fs_at.node"));
|
|
const fsExt = require("fs-ext");
|
|
let root = addon.openat({ parent: null, name: "/", kind: "directory", createMode: 0 }).handle;
|
|
for (const p of (process.env.WORKSPACE_ROOT ?? "").split("/").filter(Boolean)) root = addon.openat({ parent: root, name: p, kind: "directory", createMode: 0 }).handle;
|
|
const lockName = process.env.LOCK_NAME ?? "session-readers.lock";
|
|
const lock = addon.openat({ parent: root, name: lockName, kind: "regular_lock", createMode: 0o600 }).handle;
|
|
addon.withFd(lock, fd => fsExt.flockSync(fd, process.env.LOCK_MODE ?? "exnb"));
|
|
process.stdout.write(JSON.stringify({ ready: true }));
|
|
await sleep(Number(process.env.HOLD_MS ?? 100));
|
|
addon.close(lock); addon.close(root);
|