functype-os 0.60.6 → 0.60.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,6 +22,7 @@ declare const Fs: {
22
22
  readdir: (p: string) => TaskResult<List<string>>;
23
23
  glob: (dir: string, pattern: string) => TaskResult<List<string>>;
24
24
  writeFile: (p: string, data: string, encoding?: BufferEncoding) => TaskResult<void>;
25
+ appendFile: (p: string, data: string, encoding?: BufferEncoding) => TaskResult<void>;
25
26
  mkdir: (p: string, options?: {
26
27
  recursive?: boolean;
27
28
  }) => TaskResult<void>;
@@ -33,6 +34,7 @@ declare const Fs: {
33
34
  renameSync: (oldPath: string, newPath: string) => Either<FsError, void>;
34
35
  readdirSync: (p: string) => Either<FsError, List<string>>;
35
36
  writeFileSync: (p: string, data: string, encoding?: BufferEncoding) => Either<FsError, void>;
37
+ appendFileSync: (p: string, data: string, encoding?: BufferEncoding) => Either<FsError, void>;
36
38
  mkdirSync: (p: string, options?: {
37
39
  recursive?: boolean;
38
40
  }) => Either<FsError, void>;
@@ -41,4 +43,4 @@ declare const Fs: {
41
43
  };
42
44
  //#endregion
43
45
  export { Fs as n, FileInfo as t };
44
- //# sourceMappingURL=Fs-DOShlUR7.d.ts.map
46
+ //# sourceMappingURL=Fs-C6s_6aFz.d.ts.map
package/dist/fs/Fs.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { n as Fs, t as FileInfo } from "../Fs-DOShlUR7.js";
1
+ import { n as Fs, t as FileInfo } from "../Fs-C6s_6aFz.js";
2
2
  export { FileInfo, Fs };
package/dist/fs/Fs.js CHANGED
@@ -1,2 +1,2 @@
1
- import{FsError as e}from"../errors/errors.js";import{Err as t,Left as n,List as r,Ok as i,Option as a,Right as o}from"functype";import*as s from"node:fs";import*as c from"node:fs/promises";const l=e=>({size:e.size,isFile:e.isFile(),isDirectory:e.isDirectory(),isSymbolicLink:e.isSymbolicLink(),createdAt:e.birthtime,modifiedAt:e.mtime,accessedAt:e.atime,permissions:e.mode}),u=(t,n,r)=>e(t,n,r instanceof Error?r:Error(String(r))),d=(e,t)=>{let n=t.replace(/[\\^$+?.()|[\]{}]/g,`\\$&`).replace(/\*\*\//g,`{{GLOBSTAR}}`).replace(/\*\*/g,`{{GLOBSTAR}}`).replace(/\*/g,`[^/]*`).replace(/\{\{GLOBSTAR\}\}/g,`(?:.*/)?`);return RegExp(`^${n}$`).test(e)},f={exists:async e=>{try{return await c.access(e),i(!0)}catch{return i(!1)}},readFile:async(e,n=`utf8`)=>{try{return i(await c.readFile(e,{encoding:n}))}catch(n){return t(u(e,`readFile`,n))}},readFileOpt:async(e,n=`utf8`)=>{try{return i(a(await c.readFile(e,{encoding:n})))}catch(n){return n instanceof Error&&`code`in n&&n.code===`ENOENT`?i(a(void 0)):t(u(e,`readFile`,n))}},stat:async e=>{try{return i(l(await c.stat(e)))}catch(n){return t(u(e,`stat`,n))}},copyFile:async(e,n)=>{try{return await c.copyFile(e,n),i(void 0)}catch(n){return t(u(e,`copyFile`,n))}},rename:async(e,n)=>{try{return await c.rename(e,n),i(void 0)}catch(n){return t(u(e,`rename`,n))}},readdir:async e=>{try{return i(r(await c.readdir(e)))}catch(n){return t(u(e,`readdir`,n))}},glob:async(e,n)=>{try{return i(r((await c.readdir(e,{recursive:!0,encoding:`utf8`})).filter(e=>d(e,n))))}catch(n){return t(u(e,`glob`,n))}},writeFile:async(e,n,r=`utf8`)=>{try{return await c.writeFile(e,n,{encoding:r}),i(void 0)}catch(n){return t(u(e,`writeFile`,n))}},mkdir:async(e,n)=>{try{return await c.mkdir(e,n),i(void 0)}catch(n){return t(u(e,`mkdir`,n))}},existsSync:e=>{try{return s.accessSync(e),!0}catch{return!1}},readFileSync:(e,t=`utf8`)=>{try{return o(s.readFileSync(e,{encoding:t}))}catch(t){return n(u(e,`readFileSync`,t))}},readFileOptSync:(e,t=`utf8`)=>{try{return o(a(s.readFileSync(e,{encoding:t})))}catch(t){return t instanceof Error&&`code`in t&&t.code===`ENOENT`?o(a(void 0)):n(u(e,`readFileOptSync`,t))}},statSync:e=>{try{return o(l(s.statSync(e)))}catch(t){return n(u(e,`statSync`,t))}},copyFileSync:(e,t)=>{try{return s.copyFileSync(e,t),o(void 0)}catch(t){return n(u(e,`copyFileSync`,t))}},renameSync:(e,t)=>{try{return s.renameSync(e,t),o(void 0)}catch(t){return n(u(e,`renameSync`,t))}},readdirSync:e=>{try{return o(r(s.readdirSync(e)))}catch(t){return n(u(e,`readdirSync`,t))}},writeFileSync:(e,t,r=`utf8`)=>{try{return s.writeFileSync(e,t,{encoding:r}),o(void 0)}catch(t){return n(u(e,`writeFileSync`,t))}},mkdirSync:(e,t)=>{try{return s.mkdirSync(e,t),o(void 0)}catch(t){return n(u(e,`mkdirSync`,t))}},unlink:async e=>{try{return await c.unlink(e),i(void 0)}catch(n){return t(u(e,`unlink`,n))}},unlinkSync:e=>{try{return s.unlinkSync(e),o(void 0)}catch(t){return n(u(e,`unlinkSync`,t))}}};export{f as Fs};
1
+ import{FsError as e}from"../errors/errors.js";import{Err as t,Left as n,List as r,Ok as i,Option as a,Right as o}from"functype";import*as s from"node:fs";import*as c from"node:fs/promises";const l=e=>({size:e.size,isFile:e.isFile(),isDirectory:e.isDirectory(),isSymbolicLink:e.isSymbolicLink(),createdAt:e.birthtime,modifiedAt:e.mtime,accessedAt:e.atime,permissions:e.mode}),u=(t,n,r)=>e(t,n,r instanceof Error?r:Error(String(r))),d=(e,t)=>{let n=t.replace(/[\\^$+?.()|[\]{}]/g,`\\$&`).replace(/\*\*\//g,`{{GLOBSTAR}}`).replace(/\*\*/g,`{{GLOBSTAR}}`).replace(/\*/g,`[^/]*`).replace(/\{\{GLOBSTAR\}\}/g,`(?:.*/)?`);return RegExp(`^${n}$`).test(e)},f={exists:async e=>{try{return await c.access(e),i(!0)}catch{return i(!1)}},readFile:async(e,n=`utf8`)=>{try{return i(await c.readFile(e,{encoding:n}))}catch(n){return t(u(e,`readFile`,n))}},readFileOpt:async(e,n=`utf8`)=>{try{return i(a(await c.readFile(e,{encoding:n})))}catch(n){return n instanceof Error&&`code`in n&&n.code===`ENOENT`?i(a(void 0)):t(u(e,`readFile`,n))}},stat:async e=>{try{return i(l(await c.stat(e)))}catch(n){return t(u(e,`stat`,n))}},copyFile:async(e,n)=>{try{return await c.copyFile(e,n),i(void 0)}catch(n){return t(u(e,`copyFile`,n))}},rename:async(e,n)=>{try{return await c.rename(e,n),i(void 0)}catch(n){return t(u(e,`rename`,n))}},readdir:async e=>{try{return i(r(await c.readdir(e)))}catch(n){return t(u(e,`readdir`,n))}},glob:async(e,n)=>{try{return i(r((await c.readdir(e,{recursive:!0,encoding:`utf8`})).filter(e=>d(e,n))))}catch(n){return t(u(e,`glob`,n))}},writeFile:async(e,n,r=`utf8`)=>{try{return await c.writeFile(e,n,{encoding:r}),i(void 0)}catch(n){return t(u(e,`writeFile`,n))}},appendFile:async(e,n,r=`utf8`)=>{try{return await c.appendFile(e,n,{encoding:r}),i(void 0)}catch(n){return t(u(e,`appendFile`,n))}},mkdir:async(e,n)=>{try{return await c.mkdir(e,n),i(void 0)}catch(n){return t(u(e,`mkdir`,n))}},existsSync:e=>{try{return s.accessSync(e),!0}catch{return!1}},readFileSync:(e,t=`utf8`)=>{try{return o(s.readFileSync(e,{encoding:t}))}catch(t){return n(u(e,`readFileSync`,t))}},readFileOptSync:(e,t=`utf8`)=>{try{return o(a(s.readFileSync(e,{encoding:t})))}catch(t){return t instanceof Error&&`code`in t&&t.code===`ENOENT`?o(a(void 0)):n(u(e,`readFileOptSync`,t))}},statSync:e=>{try{return o(l(s.statSync(e)))}catch(t){return n(u(e,`statSync`,t))}},copyFileSync:(e,t)=>{try{return s.copyFileSync(e,t),o(void 0)}catch(t){return n(u(e,`copyFileSync`,t))}},renameSync:(e,t)=>{try{return s.renameSync(e,t),o(void 0)}catch(t){return n(u(e,`renameSync`,t))}},readdirSync:e=>{try{return o(r(s.readdirSync(e)))}catch(t){return n(u(e,`readdirSync`,t))}},writeFileSync:(e,t,r=`utf8`)=>{try{return s.writeFileSync(e,t,{encoding:r}),o(void 0)}catch(t){return n(u(e,`writeFileSync`,t))}},appendFileSync:(e,t,r=`utf8`)=>{try{return s.appendFileSync(e,t,{encoding:r}),o(void 0)}catch(t){return n(u(e,`appendFileSync`,t))}},mkdirSync:(e,t)=>{try{return s.mkdirSync(e,t),o(void 0)}catch(t){return n(u(e,`mkdirSync`,t))}},unlink:async e=>{try{return await c.unlink(e),i(void 0)}catch(n){return t(u(e,`unlink`,n))}},unlinkSync:e=>{try{return s.unlinkSync(e),o(void 0)}catch(t){return n(u(e,`unlinkSync`,t))}}};export{f as Fs};
2
2
  //# sourceMappingURL=Fs.js.map
package/dist/fs/Fs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Fs.js","names":[],"sources":["../../src/fs/Fs.ts"],"sourcesContent":["import * as fsSync from \"node:fs\"\nimport * as fs from \"node:fs/promises\"\n\nimport type { Either, TaskResult } from \"functype\"\nimport { Err, Left, List, Ok, Option, Right } from \"functype\"\n\nimport { FsError } from \"../errors/errors\"\n\nexport type FileInfo = {\n readonly size: number\n readonly isFile: boolean\n readonly isDirectory: boolean\n readonly isSymbolicLink: boolean\n readonly createdAt: Date\n readonly modifiedAt: Date\n readonly accessedAt: Date\n readonly permissions: number\n}\n\nconst toFileInfo = (stats: fsSync.Stats): FileInfo => ({\n size: stats.size,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n isSymbolicLink: stats.isSymbolicLink(),\n createdAt: stats.birthtime,\n modifiedAt: stats.mtime,\n accessedAt: stats.atime,\n permissions: stats.mode,\n})\n\nconst toFsError = (p: string, op: string, error: unknown): FsError =>\n FsError(p, op, error instanceof Error ? error : new Error(String(error)))\n\nconst matchGlob = (filePath: string, pattern: string): boolean => {\n // Escape every regex metachar EXCEPT '*' first, so the subsequent\n // '*' transformations are the only special characters in the output.\n // Order matters: backslashes must be escaped before any '\\\\' insertion below.\n const escaped = pattern.replace(/[\\\\^$+?.()|[\\]{}]/g, \"\\\\$&\")\n const regex = escaped\n .replace(/\\*\\*\\//g, \"{{GLOBSTAR}}\")\n .replace(/\\*\\*/g, \"{{GLOBSTAR}}\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\{\\{GLOBSTAR\\}\\}/g, \"(?:.*/)?\")\n return new RegExp(`^${regex}$`).test(filePath)\n}\n\nexport const Fs = {\n // Async methods — return TaskResult<T>\n\n exists: async (p: string): TaskResult<boolean> => {\n try {\n await fs.access(p)\n return Ok(true)\n } catch {\n return Ok(false)\n }\n },\n\n readFile: async (p: string, encoding: BufferEncoding = \"utf8\"): TaskResult<string> => {\n try {\n return Ok(await fs.readFile(p, { encoding }))\n } catch (error) {\n return Err(toFsError(p, \"readFile\", error))\n }\n },\n\n readFileOpt: async (p: string, encoding: BufferEncoding = \"utf8\"): TaskResult<Option<string>> => {\n try {\n return Ok(Option(await fs.readFile(p, { encoding })))\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return Ok(Option<string>(undefined))\n }\n return Err(toFsError(p, \"readFile\", error))\n }\n },\n\n stat: async (p: string): TaskResult<FileInfo> => {\n try {\n return Ok(toFileInfo(await fs.stat(p)))\n } catch (error) {\n return Err(toFsError(p, \"stat\", error))\n }\n },\n\n copyFile: async (src: string, dest: string): TaskResult<void> => {\n try {\n await fs.copyFile(src, dest)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(src, \"copyFile\", error))\n }\n },\n\n rename: async (oldPath: string, newPath: string): TaskResult<void> => {\n try {\n await fs.rename(oldPath, newPath)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(oldPath, \"rename\", error))\n }\n },\n\n readdir: async (p: string): TaskResult<List<string>> => {\n try {\n return Ok(List(await fs.readdir(p)))\n } catch (error) {\n return Err(toFsError(p, \"readdir\", error))\n }\n },\n\n glob: async (dir: string, pattern: string): TaskResult<List<string>> => {\n try {\n const entries = await fs.readdir(dir, { recursive: true, encoding: \"utf8\" })\n const matched = entries.filter((entry) => matchGlob(entry, pattern))\n return Ok(List(matched))\n } catch (error) {\n return Err(toFsError(dir, \"glob\", error))\n }\n },\n\n writeFile: async (p: string, data: string, encoding: BufferEncoding = \"utf8\"): TaskResult<void> => {\n try {\n await fs.writeFile(p, data, { encoding })\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"writeFile\", error))\n }\n },\n\n mkdir: async (p: string, options?: { recursive?: boolean }): TaskResult<void> => {\n try {\n await fs.mkdir(p, options)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"mkdir\", error))\n }\n },\n\n // Sync methods — return Either<FsError, T>\n\n existsSync: (p: string): boolean => {\n try {\n fsSync.accessSync(p)\n return true\n } catch {\n return false\n }\n },\n\n readFileSync: (p: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, string> => {\n try {\n return Right(fsSync.readFileSync(p, { encoding }))\n } catch (error) {\n return Left(toFsError(p, \"readFileSync\", error))\n }\n },\n\n readFileOptSync: (p: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, Option<string>> => {\n try {\n return Right(Option(fsSync.readFileSync(p, { encoding })))\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return Right(Option<string>(undefined))\n }\n return Left(toFsError(p, \"readFileOptSync\", error))\n }\n },\n\n statSync: (p: string): Either<FsError, FileInfo> => {\n try {\n return Right(toFileInfo(fsSync.statSync(p)))\n } catch (error) {\n return Left(toFsError(p, \"statSync\", error))\n }\n },\n\n copyFileSync: (src: string, dest: string): Either<FsError, void> => {\n try {\n fsSync.copyFileSync(src, dest)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(src, \"copyFileSync\", error))\n }\n },\n\n renameSync: (oldPath: string, newPath: string): Either<FsError, void> => {\n try {\n fsSync.renameSync(oldPath, newPath)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(oldPath, \"renameSync\", error))\n }\n },\n\n readdirSync: (p: string): Either<FsError, List<string>> => {\n try {\n return Right(List(fsSync.readdirSync(p)))\n } catch (error) {\n return Left(toFsError(p, \"readdirSync\", error))\n }\n },\n\n writeFileSync: (p: string, data: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, void> => {\n try {\n fsSync.writeFileSync(p, data, { encoding })\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"writeFileSync\", error))\n }\n },\n\n mkdirSync: (p: string, options?: { recursive?: boolean }): Either<FsError, void> => {\n try {\n fsSync.mkdirSync(p, options)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"mkdirSync\", error))\n }\n },\n\n unlink: async (p: string): TaskResult<void> => {\n try {\n await fs.unlink(p)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"unlink\", error))\n }\n },\n\n unlinkSync: (p: string): Either<FsError, void> => {\n try {\n fsSync.unlinkSync(p)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"unlinkSync\", error))\n }\n },\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Fs.js","names":[],"sources":["../../src/fs/Fs.ts"],"sourcesContent":["import * as fsSync from \"node:fs\"\nimport * as fs from \"node:fs/promises\"\n\nimport type { Either, TaskResult } from \"functype\"\nimport { Err, Left, List, Ok, Option, Right } from \"functype\"\n\nimport { FsError } from \"../errors/errors\"\n\nexport type FileInfo = {\n readonly size: number\n readonly isFile: boolean\n readonly isDirectory: boolean\n readonly isSymbolicLink: boolean\n readonly createdAt: Date\n readonly modifiedAt: Date\n readonly accessedAt: Date\n readonly permissions: number\n}\n\nconst toFileInfo = (stats: fsSync.Stats): FileInfo => ({\n size: stats.size,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n isSymbolicLink: stats.isSymbolicLink(),\n createdAt: stats.birthtime,\n modifiedAt: stats.mtime,\n accessedAt: stats.atime,\n permissions: stats.mode,\n})\n\nconst toFsError = (p: string, op: string, error: unknown): FsError =>\n FsError(p, op, error instanceof Error ? error : new Error(String(error)))\n\nconst matchGlob = (filePath: string, pattern: string): boolean => {\n // Escape every regex metachar EXCEPT '*' first, so the subsequent\n // '*' transformations are the only special characters in the output.\n // Order matters: backslashes must be escaped before any '\\\\' insertion below.\n const escaped = pattern.replace(/[\\\\^$+?.()|[\\]{}]/g, \"\\\\$&\")\n const regex = escaped\n .replace(/\\*\\*\\//g, \"{{GLOBSTAR}}\")\n .replace(/\\*\\*/g, \"{{GLOBSTAR}}\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\{\\{GLOBSTAR\\}\\}/g, \"(?:.*/)?\")\n return new RegExp(`^${regex}$`).test(filePath)\n}\n\nexport const Fs = {\n // Async methods — return TaskResult<T>\n\n exists: async (p: string): TaskResult<boolean> => {\n try {\n await fs.access(p)\n return Ok(true)\n } catch {\n return Ok(false)\n }\n },\n\n readFile: async (p: string, encoding: BufferEncoding = \"utf8\"): TaskResult<string> => {\n try {\n return Ok(await fs.readFile(p, { encoding }))\n } catch (error) {\n return Err(toFsError(p, \"readFile\", error))\n }\n },\n\n readFileOpt: async (p: string, encoding: BufferEncoding = \"utf8\"): TaskResult<Option<string>> => {\n try {\n return Ok(Option(await fs.readFile(p, { encoding })))\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return Ok(Option<string>(undefined))\n }\n return Err(toFsError(p, \"readFile\", error))\n }\n },\n\n stat: async (p: string): TaskResult<FileInfo> => {\n try {\n return Ok(toFileInfo(await fs.stat(p)))\n } catch (error) {\n return Err(toFsError(p, \"stat\", error))\n }\n },\n\n copyFile: async (src: string, dest: string): TaskResult<void> => {\n try {\n await fs.copyFile(src, dest)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(src, \"copyFile\", error))\n }\n },\n\n rename: async (oldPath: string, newPath: string): TaskResult<void> => {\n try {\n await fs.rename(oldPath, newPath)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(oldPath, \"rename\", error))\n }\n },\n\n readdir: async (p: string): TaskResult<List<string>> => {\n try {\n return Ok(List(await fs.readdir(p)))\n } catch (error) {\n return Err(toFsError(p, \"readdir\", error))\n }\n },\n\n glob: async (dir: string, pattern: string): TaskResult<List<string>> => {\n try {\n const entries = await fs.readdir(dir, { recursive: true, encoding: \"utf8\" })\n const matched = entries.filter((entry) => matchGlob(entry, pattern))\n return Ok(List(matched))\n } catch (error) {\n return Err(toFsError(dir, \"glob\", error))\n }\n },\n\n writeFile: async (p: string, data: string, encoding: BufferEncoding = \"utf8\"): TaskResult<void> => {\n try {\n await fs.writeFile(p, data, { encoding })\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"writeFile\", error))\n }\n },\n\n appendFile: async (p: string, data: string, encoding: BufferEncoding = \"utf8\"): TaskResult<void> => {\n try {\n await fs.appendFile(p, data, { encoding })\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"appendFile\", error))\n }\n },\n\n mkdir: async (p: string, options?: { recursive?: boolean }): TaskResult<void> => {\n try {\n await fs.mkdir(p, options)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"mkdir\", error))\n }\n },\n\n // Sync methods — return Either<FsError, T>\n\n existsSync: (p: string): boolean => {\n try {\n fsSync.accessSync(p)\n return true\n } catch {\n return false\n }\n },\n\n readFileSync: (p: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, string> => {\n try {\n return Right(fsSync.readFileSync(p, { encoding }))\n } catch (error) {\n return Left(toFsError(p, \"readFileSync\", error))\n }\n },\n\n readFileOptSync: (p: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, Option<string>> => {\n try {\n return Right(Option(fsSync.readFileSync(p, { encoding })))\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return Right(Option<string>(undefined))\n }\n return Left(toFsError(p, \"readFileOptSync\", error))\n }\n },\n\n statSync: (p: string): Either<FsError, FileInfo> => {\n try {\n return Right(toFileInfo(fsSync.statSync(p)))\n } catch (error) {\n return Left(toFsError(p, \"statSync\", error))\n }\n },\n\n copyFileSync: (src: string, dest: string): Either<FsError, void> => {\n try {\n fsSync.copyFileSync(src, dest)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(src, \"copyFileSync\", error))\n }\n },\n\n renameSync: (oldPath: string, newPath: string): Either<FsError, void> => {\n try {\n fsSync.renameSync(oldPath, newPath)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(oldPath, \"renameSync\", error))\n }\n },\n\n readdirSync: (p: string): Either<FsError, List<string>> => {\n try {\n return Right(List(fsSync.readdirSync(p)))\n } catch (error) {\n return Left(toFsError(p, \"readdirSync\", error))\n }\n },\n\n writeFileSync: (p: string, data: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, void> => {\n try {\n fsSync.writeFileSync(p, data, { encoding })\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"writeFileSync\", error))\n }\n },\n\n appendFileSync: (p: string, data: string, encoding: BufferEncoding = \"utf8\"): Either<FsError, void> => {\n try {\n fsSync.appendFileSync(p, data, { encoding })\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"appendFileSync\", error))\n }\n },\n\n mkdirSync: (p: string, options?: { recursive?: boolean }): Either<FsError, void> => {\n try {\n fsSync.mkdirSync(p, options)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"mkdirSync\", error))\n }\n },\n\n unlink: async (p: string): TaskResult<void> => {\n try {\n await fs.unlink(p)\n return Ok(undefined as void)\n } catch (error) {\n return Err(toFsError(p, \"unlink\", error))\n }\n },\n\n unlinkSync: (p: string): Either<FsError, void> => {\n try {\n fsSync.unlinkSync(p)\n return Right(undefined as void)\n } catch (error) {\n return Left(toFsError(p, \"unlinkSync\", error))\n }\n },\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { n as Fs, t as FileInfo } from "../Fs-DOShlUR7.js";
1
+ import { n as Fs, t as FileInfo } from "../Fs-C6s_6aFz.js";
2
2
  export { type FileInfo, Fs };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as PathError, i as OsError, n as EnvError, o as ProcessError, r as FsError, t as ConfigError } from "./errors-BPpbT6Dy.js";
2
2
  import { t as ConfigResolver } from "./ConfigResolver-DZ1820lj.js";
3
3
  import { t as Env } from "./Env-DAqDxz-w.js";
4
- import { n as Fs, t as FileInfo } from "./Fs-DOShlUR7.js";
4
+ import { n as Fs, t as FileInfo } from "./Fs-C6s_6aFz.js";
5
5
  import { i as expandVars, n as expandPath, r as expandTilde, t as Path } from "./PathExpander-DTM74lhP.js";
6
6
  import { i as UserInfo, n as CloudStorageDir, r as Platform, t as CloudProvider } from "./Platform-CDBRIHxS.js";
7
7
  import { n as Process, t as ExecResult } from "./Process-CogfDqGc.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functype-os",
3
- "version": "0.60.6",
3
+ "version": "0.60.7",
4
4
  "description": "Functional OS utilities using functype data structures — env vars, path expansion, file ops, platform detection",
5
5
  "keywords": [
6
6
  "functype",
@@ -20,7 +20,7 @@
20
20
  "directory": "packages/functype-os"
21
21
  },
22
22
  "peerDependencies": {
23
- "functype": "^0.60.6"
23
+ "functype": "^0.60.7"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^24.12.4",
@@ -28,7 +28,7 @@
28
28
  "ts-builds": "^2.8.0",
29
29
  "tsdown": "^0.22.0",
30
30
  "vitest": "^4.1.6",
31
- "functype": "^0.60.6"
31
+ "functype": "^0.60.7"
32
32
  },
33
33
  "type": "module",
34
34
  "main": "./dist/index.js",