init project
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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}`);
|
||||
}
|
||||
Reference in New Issue
Block a user