diff options
Diffstat (limited to 'aoc2023/build/packages/simplifile/src/simplifile_js.mjs')
-rw-r--r-- | aoc2023/build/packages/simplifile/src/simplifile_js.mjs | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/aoc2023/build/packages/simplifile/src/simplifile_js.mjs b/aoc2023/build/packages/simplifile/src/simplifile_js.mjs new file mode 100644 index 0000000..faf4109 --- /dev/null +++ b/aoc2023/build/packages/simplifile/src/simplifile_js.mjs @@ -0,0 +1,102 @@ +import fs from "node:fs" +import path from "node:path" +import { BitArray, Ok, Error as GError, toList} from "./gleam.mjs"; + +export function readBits(filepath) { + try { + const contents = fs.readFileSync(path.normalize(filepath)) + return new Ok(new BitArray(new Uint8Array(contents))) + } catch(e) { + return new GError(stringifyError(e)) + } +} + +export function writeBits(contents, filepath) { + try { + fs.writeFileSync(path.normalize(filepath), contents.buffer) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function appendBits(contents, filepath) { + try { + fs.appendFileSync(path.normalize(filepath), contents.buffer) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +function stringifyError(e) { + return e.code +} + +export function isFile(filepath) { + let fp = path.normalize(filepath) + return fs.existsSync(fp) && fs.lstatSync(fp).isFile(); +} + +export function isDirectory(filepath) { + let fp = path.normalize(filepath) + return fs.existsSync(fp) && fs.lstatSync(fp).isDirectory(); +} + +export function makeDirectory(filepath) { + try { + fs.mkdirSync(path.normalize(filepath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function createDirAll(filepath) { + try { + fs.mkdirSync(filepath, { recursive: true }) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function deleteFileOrDirRecursive(fileOrDirPath) { + try { + if (isDirectory(fileOrDirPath)) { + fs.rmSync(path.normalize(fileOrDirPath), { recursive: true }) + } else { + fs.unlinkSync(path.normalize(fileOrDirPath)) + } + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function listContents(filepath) { + try { + const stuff = toList(fs.readdirSync(path.normalize(filepath))) + return new Ok(stuff) + } catch(e) { + return new GError(stringifyError(e)) + } +} + +export function copyFile(srcpath, destpath) { + try { + fs.copyFileSync(path.normalize(srcpath), path.normalize(destpath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +} + +export function renameFile(srcpath, destpath) { + try { + fs.renameSync(path.normalize(srcpath), path.normalize(destpath)) + return new Ok(undefined) + } catch (e) { + return new GError(stringifyError(e)) + } +}
\ No newline at end of file |