eff
Version:
An extensible effect monad based on the freer monad
100 lines (82 loc) • 9.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.interpretMockFileSystem = exports.interpretLocalFileSystem = exports.writeFile = exports.readFile = void 0;
var _daggy = require("daggy");
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _ramda = require("ramda");
var _eff = require("./eff");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var FileSystem = (0, _daggy.taggedSum)("FileSystem", {
readFile: ["path"],
writeFile: ["path", "content"]
});
var readFile = function readFile(path) {
return (0, _eff.send)(FileSystem.readFile(path));
};
exports.readFile = readFile;
var writeFile = function writeFile(path) {
return function (content) {
return (0, _eff.send)(FileSystem.writeFile(path, content));
};
};
exports.writeFile = writeFile;
var interpretLocalFileSystem = function interpretLocalFileSystem(fileSystemRoot) {
return (0, _eff.interpreter)({
predicate: function predicate(x) {
return FileSystem.is(x);
},
handler: function handler(fileSystemEffect) {
return fileSystemEffect.cata({
readFile: function readFile(filePath) {
return function (continuation) {
return _fs.default.readFile(_path.default.resolve(fileSystemRoot, filePath), "utf8", function (err, data) {
return continuation(data);
});
};
},
writeFile: function writeFile(filePath, content) {
return function (continuation) {
return _fs.default.writeFile(_path.default.resolve(fileSystemRoot, filePath), content, "utf8", function () {
return continuation(null);
});
};
}
});
}
});
};
exports.interpretLocalFileSystem = interpretLocalFileSystem;
var interpretMockFileSystem = function interpretMockFileSystem(_ref) {
var fileSystemRoot = _ref.fileSystemRoot,
startingFileSystem = _ref.startingFileSystem,
onUpdate = _ref.onUpdate;
var fileSystem = startingFileSystem;
return (0, _eff.interpreter)({
predicate: function predicate(x) {
return FileSystem.is(x);
},
handler: function handler(fileSystemEffect) {
return fileSystemEffect.cata({
readFile: function readFile(filePath) {
return function (continuation) {
return continuation(fileSystem[_path.default.resolve(fileSystemRoot, filePath)]);
};
},
writeFile: function writeFile(filePath, content) {
return function (continuation) {
fileSystem = (0, _ramda.assoc)(_path.default.resolve(fileSystemRoot, filePath))(content)(fileSystem);
if (onUpdate) onUpdate(_objectSpread({}, fileSystem));
return continuation(null);
};
}
});
}
});
};
exports.interpretMockFileSystem = interpretMockFileSystem;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvZmlsZVN5c3RlbS5qcyJdLCJuYW1lcyI6WyJGaWxlU3lzdGVtIiwicmVhZEZpbGUiLCJ3cml0ZUZpbGUiLCJwYXRoIiwiY29udGVudCIsImludGVycHJldExvY2FsRmlsZVN5c3RlbSIsImZpbGVTeXN0ZW1Sb290IiwicHJlZGljYXRlIiwieCIsImlzIiwiaGFuZGxlciIsImZpbGVTeXN0ZW1FZmZlY3QiLCJjYXRhIiwiZmlsZVBhdGgiLCJjb250aW51YXRpb24iLCJmcyIsInJlc29sdmUiLCJlcnIiLCJkYXRhIiwiaW50ZXJwcmV0TW9ja0ZpbGVTeXN0ZW0iLCJzdGFydGluZ0ZpbGVTeXN0ZW0iLCJvblVwZGF0ZSIsImZpbGVTeXN0ZW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7QUFFQSxJQUFNQSxVQUFVLEdBQUcsc0JBQVUsWUFBVixFQUF3QjtBQUMxQ0MsRUFBQUEsUUFBUSxFQUFFLENBQUMsTUFBRCxDQURnQztBQUUxQ0MsRUFBQUEsU0FBUyxFQUFFLENBQUMsTUFBRCxFQUFTLFNBQVQ7QUFGK0IsQ0FBeEIsQ0FBbkI7O0FBS08sSUFBTUQsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQ0UsSUFBRDtBQUFBLFNBQWtCLGVBQUtILFVBQVUsQ0FBQ0MsUUFBWCxDQUFvQkUsSUFBcEIsQ0FBTCxDQUFsQjtBQUFBLENBQWpCOzs7O0FBQ0EsSUFBTUQsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ0MsSUFBRDtBQUFBLFNBQWtCLFVBQzFDQyxPQUQwQztBQUFBLFdBRXRDLGVBQUtKLFVBQVUsQ0FBQ0UsU0FBWCxDQUFxQkMsSUFBckIsRUFBMkJDLE9BQTNCLENBQUwsQ0FGc0M7QUFBQSxHQUFsQjtBQUFBLENBQWxCOzs7O0FBSUEsSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUEyQixDQUFDQyxjQUFEO0FBQUEsU0FDdkMsc0JBQVk7QUFDWEMsSUFBQUEsU0FBUyxFQUFFLG1CQUFBQyxDQUFDO0FBQUEsYUFBSVIsVUFBVSxDQUFDUyxFQUFYLENBQWNELENBQWQsQ0FBSjtBQUFBLEtBREQ7QUFFWEUsSUFBQUEsT0FBTyxFQUFFLGlCQUFBQyxnQkFBZ0I7QUFBQSxhQUN4QkEsZ0JBQWdCLENBQUNDLElBQWpCLENBQXNCO0FBQ3JCWCxRQUFBQSxRQUFRLEVBQUUsa0JBQUFZLFFBQVE7QUFBQSxpQkFBSSxVQUFBQyxZQUFZO0FBQUEsbUJBQ2pDQyxZQUFHZCxRQUFILENBQ0NFLGNBQUthLE9BQUwsQ0FBYVYsY0FBYixFQUE2Qk8sUUFBN0IsQ0FERCxFQUVDLE1BRkQsRUFHQyxVQUFDSSxHQUFELEVBQU1DLElBQU47QUFBQSxxQkFBZUosWUFBWSxDQUFDSSxJQUFELENBQTNCO0FBQUEsYUFIRCxDQURpQztBQUFBLFdBQWhCO0FBQUEsU0FERztBQU9yQmhCLFFBQUFBLFNBQVMsRUFBRSxtQkFBQ1csUUFBRCxFQUFXVCxPQUFYO0FBQUEsaUJBQXVCLFVBQUFVLFlBQVk7QUFBQSxtQkFDN0NDLFlBQUdiLFNBQUgsQ0FDQ0MsY0FBS2EsT0FBTCxDQUFhVixjQUFiLEVBQTZCTyxRQUE3QixDQURELEVBRUNULE9BRkQsRUFHQyxNQUhELEVBSUM7QUFBQSxxQkFBTVUsWUFBWSxDQUFDLElBQUQsQ0FBbEI7QUFBQSxhQUpELENBRDZDO0FBQUEsV0FBbkM7QUFBQTtBQVBVLE9BQXRCLENBRHdCO0FBQUE7QUFGZCxHQUFaLENBRHVDO0FBQUEsQ0FBakM7Ozs7QUFxQkEsSUFBTUssdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUEwQixPQVFqQztBQUFBLE1BUExiLGNBT0ssUUFQTEEsY0FPSztBQUFBLE1BTkxjLGtCQU1LLFFBTkxBLGtCQU1LO0FBQUEsTUFMTEMsUUFLSyxRQUxMQSxRQUtLO0FBQ0wsTUFBSUMsVUFBVSxHQUFHRixrQkFBakI7QUFFQSxTQUFPLHNCQUFZO0FBQ2xCYixJQUFBQSxTQUFTLEVBQUUsbUJBQUFDLENBQUM7QUFBQSxhQUFJUixVQUFVLENBQUNTLEVBQVgsQ0FBY0QsQ0FBZCxDQUFKO0FBQUEsS0FETTtBQUVsQkUsSUFBQUEsT0FBTyxFQUFFLGlCQUFBQyxnQkFBZ0I7QUFBQSxhQUN4QkEsZ0JBQWdCLENBQUNDLElBQWpCLENBQXNCO0FBQ3JCWCxRQUFBQSxRQUFRLEVBQUUsa0JBQUFZLFFBQVE7QUFBQSxpQkFBSSxVQUFBQyxZQUFZO0FBQUEsbUJBQ2pDQSxZQUFZLENBQUNRLFVBQVUsQ0FBQ25CLGNBQUthLE9BQUwsQ0FBYVYsY0FBYixFQUE2Qk8sUUFBN0IsQ0FBRCxDQUFYLENBRHFCO0FBQUEsV0FBaEI7QUFBQSxTQURHO0FBR3JCWCxRQUFBQSxTQUFTLEVBQUUsbUJBQUNXLFFBQUQsRUFBV1QsT0FBWDtBQUFBLGlCQUF1QixVQUFBVSxZQUFZLEVBQUk7QUFDakRRLFlBQUFBLFVBQVUsR0FBRyxrQkFBTW5CLGNBQUthLE9BQUwsQ0FBYVYsY0FBYixFQUE2Qk8sUUFBN0IsQ0FBTixFQUE4Q1QsT0FBOUMsRUFDWmtCLFVBRFksQ0FBYjtBQUdBLGdCQUFJRCxRQUFKLEVBQWNBLFFBQVEsbUJBQU1DLFVBQU4sRUFBUjtBQUNkLG1CQUFPUixZQUFZLENBQUMsSUFBRCxDQUFuQjtBQUNBLFdBTlU7QUFBQTtBQUhVLE9BQXRCLENBRHdCO0FBQUE7QUFGUCxHQUFaLENBQVA7QUFlQSxDQTFCTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBmbG93ICovXG5cbmltcG9ydCB7IHRhZ2dlZFN1bSB9IGZyb20gXCJkYWdneVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGFzc29jIH0gZnJvbSBcInJhbWRhXCI7XG5cbmltcG9ydCB7IGludGVycHJldGVyLCBzZW5kIH0gZnJvbSBcIi4vZWZmXCI7XG5cbmNvbnN0IEZpbGVTeXN0ZW0gPSB0YWdnZWRTdW0oXCJGaWxlU3lzdGVtXCIsIHtcblx0cmVhZEZpbGU6IFtcInBhdGhcIl0sXG5cdHdyaXRlRmlsZTogW1wicGF0aFwiLCBcImNvbnRlbnRcIl0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlYWRGaWxlID0gKHBhdGg6IHN0cmluZykgPT4gc2VuZChGaWxlU3lzdGVtLnJlYWRGaWxlKHBhdGgpKTtcbmV4cG9ydCBjb25zdCB3cml0ZUZpbGUgPSAocGF0aDogc3RyaW5nKSA9PiAoXG5cdGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB8ICRUeXBlZEFycmF5IHwgRGF0YVZpZXcsXG4pID0+IHNlbmQoRmlsZVN5c3RlbS53cml0ZUZpbGUocGF0aCwgY29udGVudCkpO1xuXG5leHBvcnQgY29uc3QgaW50ZXJwcmV0TG9jYWxGaWxlU3lzdGVtID0gKGZpbGVTeXN0ZW1Sb290OiBzdHJpbmcpID0+XG5cdGludGVycHJldGVyKHtcblx0XHRwcmVkaWNhdGU6IHggPT4gRmlsZVN5c3RlbS5pcyh4KSxcblx0XHRoYW5kbGVyOiBmaWxlU3lzdGVtRWZmZWN0ID0+XG5cdFx0XHRmaWxlU3lzdGVtRWZmZWN0LmNhdGEoe1xuXHRcdFx0XHRyZWFkRmlsZTogZmlsZVBhdGggPT4gY29udGludWF0aW9uID0+XG5cdFx0XHRcdFx0ZnMucmVhZEZpbGUoXG5cdFx0XHRcdFx0XHRwYXRoLnJlc29sdmUoZmlsZVN5c3RlbVJvb3QsIGZpbGVQYXRoKSxcblx0XHRcdFx0XHRcdFwidXRmOFwiLFxuXHRcdFx0XHRcdFx0KGVyciwgZGF0YSkgPT4gY29udGludWF0aW9uKGRhdGEpLFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdHdyaXRlRmlsZTogKGZpbGVQYXRoLCBjb250ZW50KSA9PiBjb250aW51YXRpb24gPT5cblx0XHRcdFx0XHRmcy53cml0ZUZpbGUoXG5cdFx0XHRcdFx0XHRwYXRoLnJlc29sdmUoZmlsZVN5c3RlbVJvb3QsIGZpbGVQYXRoKSxcblx0XHRcdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHRcdFx0XHRcInV0ZjhcIixcblx0XHRcdFx0XHRcdCgpID0+IGNvbnRpbnVhdGlvbihudWxsKSxcblx0XHRcdFx0XHQpLFxuXHRcdFx0fSksXG5cdH0pO1xuXG5leHBvcnQgY29uc3QgaW50ZXJwcmV0TW9ja0ZpbGVTeXN0ZW0gPSAoe1xuXHRmaWxlU3lzdGVtUm9vdCxcblx0c3RhcnRpbmdGaWxlU3lzdGVtLFxuXHRvblVwZGF0ZSxcbn06IHtcblx0ZmlsZVN5c3RlbVJvb3Q6IHN0cmluZyxcblx0c3RhcnRpbmdGaWxlU3lzdGVtOiB7IC4uLiB9LFxuXHRvblVwZGF0ZT86ICh7IC4uLiB9KSA9PiB2b2lkLFxufSkgPT4ge1xuXHRsZXQgZmlsZVN5c3RlbSA9IHN0YXJ0aW5nRmlsZVN5c3RlbTtcblxuXHRyZXR1cm4gaW50ZXJwcmV0ZXIoe1xuXHRcdHByZWRpY2F0ZTogeCA9PiBGaWxlU3lzdGVtLmlzKHgpLFxuXHRcdGhhbmRsZXI6IGZpbGVTeXN0ZW1FZmZlY3QgPT5cblx0XHRcdGZpbGVTeXN0ZW1FZmZlY3QuY2F0YSh7XG5cdFx0XHRcdHJlYWRGaWxlOiBmaWxlUGF0aCA9PiBjb250aW51YXRpb24gPT5cblx0XHRcdFx0XHRjb250aW51YXRpb24oZmlsZVN5c3RlbVtwYXRoLnJlc29sdmUoZmlsZVN5c3RlbVJvb3QsIGZpbGVQYXRoKV0pLFxuXHRcdFx0XHR3cml0ZUZpbGU6IChmaWxlUGF0aCwgY29udGVudCkgPT4gY29udGludWF0aW9uID0+IHtcblx0XHRcdFx0XHRmaWxlU3lzdGVtID0gYXNzb2MocGF0aC5yZXNvbHZlKGZpbGVTeXN0ZW1Sb290LCBmaWxlUGF0aCkpKGNvbnRlbnQpKFxuXHRcdFx0XHRcdFx0ZmlsZVN5c3RlbSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvblVwZGF0ZSkgb25VcGRhdGUoeyAuLi5maWxlU3lzdGVtIH0pO1xuXHRcdFx0XHRcdHJldHVybiBjb250aW51YXRpb24obnVsbCk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KSxcblx0fSk7XG59O1xuIl19