@sebastianwessel/quickjs
Version:
A typescript package to execute JavaScript and TypeScript code in a WebAssembly QuickJS sandbox
160 lines (159 loc) • 6.81 kB
JavaScript
import { expose } from '../expose/expose.js';
export const provideFs = (ctx, scope, runtimeOptions, fs) => {
const disabledFn = (..._params) => {
throw new Error('File access is disabled');
};
const enabledFileSystem = {
access: (...params) => fs.access(...params),
accessSync: (...params) => fs.accessSync(...params),
appendFile: (...params) => fs.appendFile(...params),
appendFileSync: (...params) => fs.appendFileSync(...params),
chmod: (...params) => fs.chmod(...params),
chmodSync: (...params) => fs.chmodSync(...params),
chown: (...params) => fs.chown(...params),
chownSync: (...params) => fs.chownSync(...params),
close: (...params) => fs.close(...params),
closeSync: (...params) => fs.closeSync(...params),
copyFile: (...params) => fs.copyFile(...params),
copyFileSync: (...params) => fs.copyFileSync(...params),
createReadStream: (...params) => fs.createReadStream(...params),
createWriteStream: (...params) => fs.createWriteStream(...params),
exists: (...params) => fs.exists(...params),
existsSync: (...params) => fs.existsSync(...params),
fchmod: (...params) => fs.fchmod(...params),
fchmodSync: (...params) => fs.fchmodSync(...params),
fchown: (...params) => fs.fchown(...params),
fchownSync: (...params) => fs.fchownSync(...params),
fdatasync: (...params) => fs.fdatasync(...params),
fdatasyncSync: (...params) => fs.fdatasyncSync(...params),
fstat: (...params) => fs.fstat(...params),
fstatSync: (...params) => fs.fstatSync(...params),
fsync: (...params) => fs.fsync(...params),
fsyncSync: (...params) => fs.fsyncSync(...params),
ftruncate: (...params) => fs.ftruncate(...params),
ftruncateSync: (...params) => fs.ftruncateSync(...params),
futimes: (...params) => fs.futimes(...params),
futimesSync: (...params) => fs.futimesSync(...params),
lchmod: (...params) => fs.lchmod(...params),
lchmodSync: (...params) => fs.lchmodSync(...params),
lchown: (...params) => fs.lchown(...params),
lchownSync: (...params) => fs.lchownSync(...params),
link: (...params) => fs.link(...params),
linkSync: (...params) => fs.linkSync(...params),
lstat: (...params) => fs.lstat(...params),
lstatSync: (...params) => fs.lstatSync(...params),
mkdir: (...params) => fs.mkdir(...params),
mkdirSync: (...params) => fs.mkdirSync(...params),
mkdtemp: (...params) => fs.mkdtemp(...params),
mkdtempSync: (...params) => fs.mkdtempSync(...params),
open: (...params) => fs.open(...params),
openSync: (...params) => fs.openSync(...params),
readdir: (...params) => fs.readdir(...params),
readdirSync: (...params) => fs.readdirSync(...params),
read: (...params) => fs.read(...params),
readSync: (...params) => fs.readSync(...params),
readFile: (...params) => fs.readFile(...params),
readFileSync: (...params) => fs.readFileSync(...params).toString(),
readlink: (...params) => fs.readlink(...params),
readlinkSync: (...params) => fs.readlinkSync(...params),
realpath: (...params) => fs.realpath(...params),
realpathSync: (...params) => fs.realpathSync(...params),
rename: (...params) => fs.rename(...params),
renameSync: (...params) => fs.renameSync(...params),
rmdir: (...params) => fs.rmdir(...params),
rmdirSync: (...params) => fs.rmdirSync(...params),
stat: (...params) => fs.stat(...params),
statSync: (...params) => fs.statSync(...params),
symlink: (...params) => fs.symlink(...params),
symlinkSync: (...params) => fs.symlinkSync(...params),
truncate: (...params) => fs.truncate(...params),
truncateSync: (...params) => fs.truncateSync(...params),
unlink: (...params) => fs.unlink(...params),
unlinkSync: (...params) => fs.unlinkSync(...params),
utimes: (...params) => fs.utimes(...params),
utimesSync: (...params) => fs.utimesSync(...params),
write: (...params) => fs.write(...params),
writeSync: (...params) => fs.writeSync(...params),
writeFile: (...params) => fs.writeFile(...params),
writeFileSync: (...params) => {
fs.writeFileSync(...params);
},
};
const disabledFileSystem = {
access: disabledFn,
accessSync: disabledFn,
appendFile: disabledFn,
appendFileSync: disabledFn,
chmod: disabledFn,
chmodSync: disabledFn,
chown: disabledFn,
chownSync: disabledFn,
close: disabledFn,
closeSync: disabledFn,
copyFile: disabledFn,
copyFileSync: disabledFn,
createReadStream: disabledFn,
createWriteStream: disabledFn,
exists: disabledFn,
existsSync: disabledFn,
fchmod: disabledFn,
fchmodSync: disabledFn,
fchown: disabledFn,
fchownSync: disabledFn,
fdatasync: disabledFn,
fdatasyncSync: disabledFn,
fstat: disabledFn,
fstatSync: disabledFn,
fsync: disabledFn,
fsyncSync: disabledFn,
ftruncate: disabledFn,
ftruncateSync: disabledFn,
futimes: disabledFn,
futimesSync: disabledFn,
lchmod: disabledFn,
lchmodSync: disabledFn,
lchown: disabledFn,
lchownSync: disabledFn,
link: disabledFn,
linkSync: disabledFn,
lstat: disabledFn,
lstatSync: disabledFn,
mkdir: disabledFn,
mkdirSync: disabledFn,
mkdtemp: disabledFn,
mkdtempSync: disabledFn,
open: disabledFn,
openSync: disabledFn,
readdir: disabledFn,
readdirSync: disabledFn,
read: disabledFn,
readSync: disabledFn,
readFile: disabledFn,
readFileSync: disabledFn,
readlink: disabledFn,
readlinkSync: disabledFn,
realpath: disabledFn,
realpathSync: disabledFn,
rename: disabledFn,
renameSync: disabledFn,
rmdir: disabledFn,
rmdirSync: disabledFn,
stat: disabledFn,
statSync: disabledFn,
symlink: disabledFn,
symlinkSync: disabledFn,
truncate: disabledFn,
truncateSync: disabledFn,
unlink: disabledFn,
unlinkSync: disabledFn,
utimes: disabledFn,
utimesSync: disabledFn,
write: disabledFn,
writeSync: disabledFn,
writeFile: disabledFn,
writeFileSync: disabledFn,
};
expose(ctx, scope, {
__fs: runtimeOptions.allowFs ? enabledFileSystem : disabledFileSystem,
});
};