UNPKG

eff

Version:

An extensible effect monad based on the freer monad

100 lines (82 loc) 9.55 kB
"use strict"; 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