Skip to content

Instantly share code, notes, and snippets.

@arthurdapaz
Forked from uchcode/FileManager.js
Created July 16, 2021 01:33
Show Gist options
  • Select an option

  • Save arthurdapaz/cd3dca57ed9412b01a41e348e1f608c8 to your computer and use it in GitHub Desktop.

Select an option

Save arthurdapaz/cd3dca57ed9412b01a41e348e1f608c8 to your computer and use it in GitHub Desktop.

Revisions

  1. @uchcode uchcode created this gist Jul 12, 2017.
    297 changes: 297 additions & 0 deletions FileManager.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,297 @@
    const FileManager = (()=>{

    function pwd() {
    return $.NSFileManager.defaultManager.currentDirectoryPath.js
    }

    function cd(path='~') {
    if (path==='') path = '.'
    let p = $(path).stringByStandardizingPath
    let r = $.NSFileManager.defaultManager
    .changeCurrentDirectoryPath(p)
    if (!r) {
    throw `cd(): No such file or directory: "${path}"`
    }
    return r
    }

    function read(path) {
    let p = $(path).stringByStandardizingPath
    let d = $.NSFileManager.defaultManager.contentsAtPath(p)
    if(d.isNil()) throw `read(): No such file: ${path}`
    return d
    }

    function write(contents, path) {
    let p = $(path).stringByStandardizingPath
    let c = contents
    let a = $()
    let r = $.NSFileManager.defaultManager
    .createFileAtPathContentsAttributes(p,c,a)
    if (!r) {
    throw `write(): Create file failed: ${path}, ${contents}`
    }
    return r
    }

    function mkfile(path) {
    let p = $(path).stringByStandardizingPath
    if ($.NSFileManager.defaultManager.fileExistsAtPath(p)) {
    throw `mkfile(): Path is exists: "${path}"`
    }
    let c = $.NSData.data //zero data
    let a = $()
    let r = $.NSFileManager.defaultManager
    .createFileAtPathContentsAttributes(p, c, a)
    if (!r) {
    throw `mkfile(): Create file failed: "${path}"`
    }
    return r
    }

    function mkdir(path, createIntermediatesFlag=1) {
    let p = $(path).stringByStandardizingPath
    let i = createIntermediatesFlag ? 1 : 0
    let a = $()
    let e = $()
    let r = $.NSFileManager.defaultManager
    .createDirectoryAtPathWithIntermediateDirectoriesAttributesError(p, i, a, e)
    if (!e.isNil()) {
    let s1 = 'mkdir(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function rm(path) {
    let p = $(path).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .removeItemAtPathError(p, e)
    if (!e.isNil()) {
    let s1 = 'rm(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function mv(at, to) {
    let a = $(at).stringByStandardizingPath
    let t = $(to).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .moveItemAtPathToPathError(a, t, e)
    if (!e.isNil()) {
    let s1 = 'mv(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function cp(at, to) {
    let a = $(at).stringByStandardizingPath
    let t = $(to).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .copyItemAtPathToPathError(a, t, e)
    if (!e.isNil()) {
    let s1 = 'cp(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function link(at, to) {
    let a = $(at).stringByStandardizingPath
    let t = $(to).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .linkItemAtPathToPathError(a, t, e)
    if (!e.isNil()) {
    let s1 = 'link(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function ln(at, to) {
    let a = $(to).stringByStandardizingPath
    let w = $(at).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .createSymbolicLinkAtPathWithDestinationPathError(a, w, e)
    if (!e.isNil()) {
    let s1 = 'ln(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function readlink(path) {
    let p = $(path).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .destinationOfSymbolicLinkAtPathError(p, e)
    if (!e.isNil()) {
    let s1 = 'readlink(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r.isNil() ? '' : r.js
    }

    function chmod(value, path) {
    let a = $({NSFilePosixPermissions:value})
    let p = $(path).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .setAttributesOfItemAtPathError(a, p, e)
    if (!e.isNil()) {
    let s1 = 'chmod(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function chown(user, path) {
    let u = user.split(':')
    let d = {NSFileOwnerAccountName:u[0]}
    if (u[1]) d.NSFileGroupOwnerAccountName = u[1]
    let a = $(d)
    let p = $(path).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .setAttributesOfItemAtPathError(a, p, e)
    if (!e.isNil()) {
    let s1 = 'chown(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function chgrp(group, path) {
    let a = $({NSFileGroupOwnerAccountName:group})
    let p = $(path).stringByStandardizingPath
    let e = $()
    let r = $.NSFileManager.defaultManager
    .setAttributesOfItemAtPathError(a, p, e)
    if (!e.isNil()) {
    let s1 = 'chgrp(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return r
    }

    function isExists(path) {
    return $.NSFileManager.defaultManager
    .fileExistsAtPath($(path).stringByStandardizingPath)
    }

    function isDir(path) {
    let p = $(path).stringByStandardizingPath
    let e = $()
    let a = $.NSFileManager.defaultManager
    .attributesOfItemAtPathError(p, e)
    if (!e.isNil()) {
    let s1 = 'isDir(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return a.objectForKey($.NSFileType).js === $.NSFileTypeDirectory.js
    }

    function isFile(path) {
    let p = $(path).stringByStandardizingPath
    let e = $()
    let a = $.NSFileManager.defaultManager
    .attributesOfItemAtPathError(p, e)
    if (!e.isNil()) {
    let s1 = 'isFile(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return !(a.objectForKey($.NSFileType).js === $.NSFileTypeDirectory.js)
    }

    function isSymbolicLink(path) {
    let p = $(path).stringByStandardizingPath
    let e = $()
    let a = $.NSFileManager.defaultManager
    .attributesOfItemAtPathError(p, e)
    if (!e.isNil()) {
    let s1 = 'isSymbolicLink(): '
    let s2 = e.localizedDescription.js
    let s3 = e.localizedRecoverySuggestion.js || ''
    throw s1+s2+s3
    }
    return a.objectForKey($.NSFileType).js === $.NSFileTypeSymbolicLink.js
    }

    function isReadable(path) {
    return $.NSFileManager.defaultManager
    .isReadableFileAtPath($(path).stringByStandardizingPath)
    }

    function isWritable(path) {
    return $.NSFileManager.defaultManager
    .isWritableFileAtPath($(path).stringByStandardizingPath)
    }

    function isDeletable(path) {
    return $.NSFileManager.defaultManager
    .isDeletableFileAtPath($(path).stringByStandardizingPath)
    }

    function isExecutable(path) {
    return $.NSFileManager.defaultManager
    .isExecutableFileAtPath($(path).stringByStandardizingPath)
    }

    return {
    pwd: pwd,
    cd: cd,
    read: read,
    write: write,
    mkfile: mkfile,
    mkdir: mkdir,
    rm: rm,
    mv: mv,
    cp: cp,
    link: link,
    ln: ln,
    readlink: readlink,
    chmod: chmod,
    chown: chown,
    chgrp: chgrp,
    isExists: isExists,
    isDir: isDir,
    isFile: isFile,
    isSymbolicLink: isSymbolicLink,
    isReadable: isReadable,
    isWritable: isWritable,
    isDeletable: isDeletable,
    isExecutable: isExecutable,
    }

    })()