UNPKG

@typed/content-hash

Version:

Content hash a directory of HTML/JS/CSS files and other static assets

24 lines (17 loc) 922 B
import { Env, fromTask, zip } from '@typed/fp/Env' import { Do } from '@typed/fp/FxEnv' import { promises, statSync } from 'fs' import { posix } from 'path' import { debug, LoggerEnv } from '../application/services/logging' const readdir = (directory: string) => fromTask(() => promises.readdir(directory).then((paths) => paths.map((p) => posix.join(directory, p)))) const isFile = (path: string) => statSync(path).isFile() const isDirectory = (path: string) => statSync(path).isDirectory() export const fsReadDirectory = (directory: string): Env<LoggerEnv, readonly string[]> => Do(function* (_) { yield* _(debug(`Reading Directory ${directory}...`)) const paths = yield* _(readdir(directory)) const files = paths.filter(isFile) const directories: ReadonlyArray<readonly string[]> = yield* _(zip(paths.filter(isDirectory).map(fsReadDirectory))) return [...files, ...directories.flat()] })