shared/resolvers/location.resolver.ts
shared/resolvers/location.resolver.ts is a file in GovLab Extension Host. 42 lines of code and 15 definitions.
import { PROJECT_ROOT, normalizePath } from "./anchor.resolver.ts";
import { existsSync, readdirSync } from "node:fs";
import { join } from "node:path";
import { jsonRecordAt } from "../loaders/manifest.loader.ts";
const MEMBER_MANIFEST = "_manifest.json";
const SELF_GOVERNED_KEY = "selfGoverned";
const PATHS_FIELD = "paths";
const WRITES_FIELD = "writes";
const declaredField = function declaredField(parsed: unknown, field: string): string | null {
if (typeof parsed !== "object" || parsed === null || !(SELF_GOVERNED_KEY in parsed)) {
return null;
}
const declared: unknown = parsed[SELF_GOVERNED_KEY];
if (typeof declared !== "object" || declared === null) {
return null;
}
const value: unknown = Object.entries(declared).find(([key]) => key === field)?.[1];
return typeof value === "string" ? value : null;
};
const memberDeclaration = function memberDeclaration(member: string, field: string): string | null {
const manifest = join(PROJECT_ROOT, member, MEMBER_MANIFEST);
if (!existsSync(manifest)) {
return null;
}
const declared = declaredField(jsonRecordAt(manifest), field);
return declared === null ? null : normalizePath(join(PROJECT_ROOT, member, declared));
};
const MEMBERS: readonly string[] = existsSync(PROJECT_ROOT) ? readdirSync(PROJECT_ROOT) : [];
export const MEMBER_PATHS_CONFIGS: ReadonlySet<string> = new Set(
MEMBERS.flatMap((member) => {
const declared = memberDeclaration(member, PATHS_FIELD);
return declared === null ? [] : [declared];
}),
);
export const WRITE_GOVERNED_MEMBERS: readonly string[] = MEMBERS.flatMap((member) => {
const gate = memberDeclaration(member, WRITES_FIELD);
return gate !== null && existsSync(gate) ? [normalizePath(join(PROJECT_ROOT, member))] : [];
});
export const governsOwnWrites = function governsOwnWrites(filename: string): boolean {
const posix = normalizePath(filename);
return WRITE_GOVERNED_MEMBERS.some((member) => posix.startsWith(`${member}/`));
};