core/loaders/system.loader.ts
core/loaders/system.loader.ts is a file in GovLab Docs. 72 lines of code and 23 definitions.
import { DISPATCH_TABLE, RUNTIME_DEFERRED } from "#configuration/strings/system.strings";
import type { DispatchEdge, SystemComponent, SystemModel, TrustBoundary } from "#types/system.types";
import { ROOT, absolutePath } from "@ssot/paths";
import { PACKAGE_FILE } from "#configuration/constants/document.constants";
import { isPlainRecord } from "#core/predicates/record.predicate";
import { join } from "node:path";
import { readJsonSafe } from "#core/loaders/base.loader";
import { workspaceMembers } from "#core/loaders/package.loader";
const SYSTEM_NAME = "banes-lab";
const SERVICE_KIND = "service";
const GROUP_PREFIX = "group-";
const POSIX_SEPARATOR = "/";
const RECORDS_KEY = "records";
const stringField = function stringField(value: unknown, key: string): string {
const field = isPlainRecord(value) ? value[key] : undefined;
return typeof field === "string" ? field : "";
};
const recordField = function recordField(value: unknown, key: string): Readonly<Record<string, unknown>> {
const field = isPlainRecord(value) ? value[key] : undefined;
return isPlainRecord(field) ? field : {};
};
const groupOf = function groupOf(dir: string): string {
const [head] = dir.split(POSIX_SEPARATOR);
return head ?? dir;
};
const componentsOf = function componentsOf(dirs: readonly string[]): SystemComponent[] {
return dirs.map((dir) => ({
boundary: groupOf(dir),
id: dir,
kind: SERVICE_KIND,
label: stringField(readJsonSafe(join(ROOT, dir, PACKAGE_FILE)), "name"),
}));
};
const boundariesOf = function boundariesOf(dirs: readonly string[]): TrustBoundary[] {
const groups = [...new Set(dirs.map(groupOf))].toSorted((left, right) => left.localeCompare(right));
return groups.map((group) => ({
components: dirs.filter((dir) => groupOf(dir) === group),
id: `${GROUP_PREFIX}${group}`,
label: group,
}));
};
const declaredTools = function declaredTools(): ReadonlySet<string> {
const manifest = readJsonSafe(join(ROOT, PACKAGE_FILE));
return new Set([
...Object.keys(recordField(manifest, "dependencies")),
...Object.keys(recordField(manifest, "devDependencies")),
]);
};
const dispatchOf = function dispatchOf(): DispatchEdge[] {
const registry = readJsonSafe(absolutePath("govlab.quality.data.registry"));
const records = isPlainRecord(registry) && Array.isArray(registry[RECORDS_KEY]) ? registry[RECORDS_KEY] : [];
const declared = declaredTools();
return records
.flatMap((record: unknown): DispatchEdge[] => {
const tool = stringField(record, "tool");
const ecosystem = stringField(record, "ecosystem");
return tool.length === 0 || ecosystem.length === 0 || !declared.has(tool)
? []
: [{ key: ecosystem, table: DISPATCH_TABLE, target: tool }];
})
.toSorted((left, right) => (left.key + left.target).localeCompare(right.key + right.target));
};
export const buildSystemModel = function buildSystemModel(): SystemModel {
const dirs = workspaceMembers(ROOT);
return {
components: componentsOf(dirs),
dispatch: dispatchOf(),
name: SYSTEM_NAME,
runtimeDeferred: RUNTIME_DEFERRED,
trustBoundaries: boundariesOf(dirs),
};
};