Spaces:
Running
Running
function patchSqueakForNode(root) { | |
var fs = require("fs"); | |
var Squeak = window.Squeak; | |
Object.extend(Squeak, { | |
fileGet: (filepath, thenDo, errorDo) => { | |
fs.readFile(root + filepath, (err, data) => { | |
if (err) { | |
errorDo(err); | |
} else { | |
thenDo((data instanceof ArrayBuffer) ? data : data.buffer); | |
} | |
}); | |
}, | |
filePut: (filepath, contents, optSuccess) => { | |
var path = Squeak.splitFilePath(filepath); if (!path.basename) return null; | |
var now = Squeak.totalSeconds(); | |
var entry = [path.basename, now, 0, false, contents.byteLength || contents.length || 0]; | |
fs.writeFileSync(root + filepath, contents); | |
if (optSuccess) optSuccess(); | |
return entry; | |
}, | |
fileDelete: (filepath, entryOnly) => { | |
fs.unlinkSync(root + filepath); | |
}, | |
fileRename: (from, to) => { | |
fs.renameSync(root + from, root + to); | |
}, | |
fileExists: (filepath) => { | |
try { | |
fs.accessSync(root + filepath); | |
return true; | |
} catch(e) { | |
return false; | |
} | |
}, | |
dirCreate: (dirpath, withParents) => { | |
var path = Squeak.splitFilePath(dirpath); if (!path.basename) return false; | |
if (withParents && !Squeak.fileExists(path.dirname)) { | |
Squeak.dirCreate(path.dirname, true); | |
} | |
try { | |
fs.mkdirSync(root + dirpath); | |
return true; | |
} catch(e) { | |
return false; | |
} | |
}, | |
dirDelete: (dirpath) => { | |
try { | |
fs.rmdirSync(root + dirpath); | |
return true; | |
} catch(e) { | |
return false; | |
} | |
}, | |
dirList: (dirpath, includeTemplates) => { | |
try { | |
var dir = {}; | |
var files = fs.readdirSync(root + dirpath); | |
files.forEach(f => { | |
var stats = fs.statSync(root + dirpath + f); | |
dir[f] = [f, stats.ctime, stats.mtime, stats.isDirectory(), stats.size]; | |
}); | |
return dir; | |
} catch(e) { | |
return null; | |
} | |
}, | |
primitiveQuit: (argCount) => { | |
Squeak.flushAllFiles(); | |
nw.App.quit(); | |
}, | |
}); | |
} | |