Files
Rental-operations-platform/scripts/lib.mjs
T
2026-06-25 19:06:59 -04:00

47 lines
1.4 KiB
JavaScript

import { createHash } from 'node:crypto';
import { readFile, readdir, stat } from 'node:fs/promises';
import path from 'node:path';
export const repositoryRoot = path.resolve(import.meta.dirname, '..');
export async function sha256(filePath) {
const contents = await readFile(filePath);
return createHash('sha256').update(contents).digest('hex');
}
export async function walk(directory, predicate = () => true) {
const output = [];
for (const entry of await readdir(directory)) {
const fullPath = path.join(directory, entry);
const details = await stat(fullPath);
if (details.isDirectory()) output.push(...(await walk(fullPath, predicate)));
else if (predicate(fullPath)) output.push(fullPath);
}
return output;
}
export function flatten(value, prefix = '', output = new Map()) {
if (Array.isArray(value)) {
value.forEach((entry, index) => flatten(entry, `${prefix}[${index}]`, output));
if (value.length === 0) output.set(prefix, value);
return output;
}
if (value && typeof value === 'object') {
for (const [key, entry] of Object.entries(value)) {
flatten(entry, prefix ? `${prefix}.${key}` : key, output);
}
return output;
}
output.set(prefix, value);
return output;
}
export function fail(messages) {
for (const message of messages) console.error(`ERROR: ${message}`);
process.exitCode = 1;
}
export function pass(message) {
console.log(`PASS: ${message}`);
}