aboutsummaryrefslogtreecommitdiff
path: root/aoc2023/build/packages/simplifile/src/simplifile_js.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'aoc2023/build/packages/simplifile/src/simplifile_js.mjs')
-rw-r--r--aoc2023/build/packages/simplifile/src/simplifile_js.mjs102
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