Files
2023-08-01 13:49:46 +02:00

103 lines
4.0 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
var intrinsicName = 'process.binding("fs")';
var nativeFS = process.binding("fs");
// fs
var obj = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype, intrinsicName);
obj.defineNativeMethod("FSInitialize", 0, function (context, args) {
// TODO: Implement the native implementation.
return realm.intrinsics.undefined;
});
obj.defineNativeMethod("internalModuleStat", 0, function (context, args) {
var fileName = _singletons.To.ToString(realm, args[0]);
return new _index.NumberValue(realm, nativeFS.internalModuleStat(fileName));
});
obj.defineNativeMethod("lstat", 0, function (context, args) {
var path = _singletons.To.ToString(realm, args[0]);
(0, _invariant2.default)(args[1] instanceof _index.ObjectValue);
var buffer = (0, _utils.getNodeBufferFromTypedArray)(realm, args[1]);
var float64buffer = new Float64Array(buffer.buffer);
nativeFS.lstat(path, float64buffer);
return args[1];
});
obj.defineNativeMethod("fstat", 0, function (context, args) {
var fd = _singletons.To.ToNumber(realm, args[0]);
(0, _invariant2.default)(args[1] instanceof _index.ObjectValue);
var buffer = (0, _utils.getNodeBufferFromTypedArray)(realm, args[1]);
var float64buffer = new Float64Array(buffer.buffer);
nativeFS.fstat(fd, float64buffer);
return args[1];
});
obj.defineNativeMethod("open", 0, function (context, args) {
var path = _singletons.To.ToString(realm, args[0]);
var flags = _singletons.To.ToNumber(realm, args[1]);
var mode = _singletons.To.ToNumber(realm, args[2]);
var fd = nativeFS.open(path, flags, mode);
return new _index.NumberValue(realm, fd);
});
obj.defineNativeMethod("close", 0, function (context, args) {
var fd = _singletons.To.ToNumber(realm, args[0]);
nativeFS.close(fd);
return realm.intrinsics.undefined;
});
obj.defineNativeMethod("read", 0, function (context, args) {
var fd = _singletons.To.ToNumber(realm, args[0]);
(0, _invariant2.default)(args[1] instanceof _index.ObjectValue);
var buffer = (0, _utils.getNodeBufferFromTypedArray)(realm, args[1]);
var offset = _singletons.To.ToNumber(realm, args[2]);
var length = _singletons.To.ToNumber(realm, args[3]);
var position = args[4] === realm.intrinsics.undefined ? undefined : _singletons.To.ToNumber(realm, args[4]);
var bytesRead = nativeFS.read(fd, buffer, offset, length, position);
return new _index.NumberValue(realm, bytesRead);
});
obj.defineNativeMethod("internalModuleReadFile", 0, function (context, args) {
var path = _singletons.To.ToString(realm, args[0]);
var result = nativeFS.internalModuleReadFile(path);
if (result === undefined) {
return realm.intrinsics.undefined;
}
return new _index.StringValue(realm, result);
});
var FSReqWrapTemplateSrc = intrinsicName + ".FSReqWrap";
var FSReqWrapTemplate = (0, _builder2.default)(FSReqWrapTemplateSrc);
var val = _index.AbstractValue.createFromTemplate(realm, FSReqWrapTemplate, _index.ObjectValue, [], FSReqWrapTemplateSrc);
val.values = new _index2.ValuesDomain(new Set([new _index.ObjectValue(realm)]));
val.intrinsicName = FSReqWrapTemplateSrc;
_singletons.Properties.DefinePropertyOrThrow(realm, obj, "FSReqWrap", {
value: val,
writable: true,
configurable: true,
enumerable: true
});
// TODO: Implement more of the native methods here. Ideally all of them should
// just be automatically proxied.
return obj;
};
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
var _index = require("../../values/index.js");
var _index2 = require("../../domains/index.js");
var _builder = require("../../utils/builder.js");
var _builder2 = _interopRequireDefault(_builder);
var _utils = require("./utils.js");
var _singletons = require("../../singletons.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=fs.js.map