@glimmer/compiler
Version:
265 lines (203 loc) • 16.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isResult = isResult;
exports.intoResult = intoResult;
exports.Ok = Ok;
exports.Err = Err;
exports.ResultArray = exports.MapIntoResultArray = exports.Result = void 0;
var _list = require("./list");
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
var it;
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it) o = it;
var i = 0;
return function () {
if (i >= o.length) return {
done: true
};
return {
done: false,
value: o[i++]
};
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
it = o[Symbol.iterator]();
return it.next.bind(it);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) {
arr2[i] = arr[i];
}
return arr2;
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
var ResultImpl = /*#__PURE__*/function () {
function ResultImpl() {}
ResultImpl.all = function all() {
var out = [];
for (var _len = arguments.length, results = new Array(_len), _key = 0; _key < _len; _key++) {
results[_key] = arguments[_key];
}
for (var _i = 0, _results = results; _i < _results.length; _i++) {
var result = _results[_i];
if (result.isErr) {
return result.cast();
} else {
out.push(result.value);
}
}
return Ok(out);
};
return ResultImpl;
}();
var Result = ResultImpl;
exports.Result = Result;
var OkImpl = /*#__PURE__*/function (_ResultImpl) {
_inheritsLoose(OkImpl, _ResultImpl);
function OkImpl(value) {
var _this;
_this = _ResultImpl.call(this) || this;
_this.value = value;
_this.isOk = true;
_this.isErr = false;
return _this;
}
var _proto = OkImpl.prototype;
_proto.expect = function expect(_message) {
return this.value;
};
_proto.ifOk = function ifOk(callback) {
callback(this.value);
return this;
};
_proto.andThen = function andThen(callback) {
return callback(this.value);
};
_proto.mapOk = function mapOk(callback) {
return Ok(callback(this.value));
};
_proto.ifErr = function ifErr(_callback) {
return this;
};
_proto.mapErr = function mapErr(_callback) {
return this;
};
return OkImpl;
}(ResultImpl);
var ErrImpl = /*#__PURE__*/function (_ResultImpl2) {
_inheritsLoose(ErrImpl, _ResultImpl2);
function ErrImpl(reason) {
var _this2;
_this2 = _ResultImpl2.call(this) || this;
_this2.reason = reason;
_this2.isOk = false;
_this2.isErr = true;
return _this2;
}
var _proto2 = ErrImpl.prototype;
_proto2.expect = function expect(message) {
throw new Error(message || 'expected an Ok, got Err');
};
_proto2.andThen = function andThen(_callback) {
return this.cast();
};
_proto2.mapOk = function mapOk(_callback) {
return this.cast();
};
_proto2.ifOk = function ifOk(_callback) {
return this;
};
_proto2.mapErr = function mapErr(callback) {
return Err(callback(this.reason));
};
_proto2.ifErr = function ifErr(callback) {
callback(this.reason);
return this;
};
_proto2.cast = function cast() {
return this;
};
return ErrImpl;
}(ResultImpl);
function isResult(input) {
return input instanceof ResultImpl;
}
function intoResult(input) {
if (isResult(input)) {
return input;
} else {
return Ok(input);
}
}
function Ok(value) {
return new OkImpl(value);
}
function Err(reason) {
return new ErrImpl(reason);
}
var MapIntoResultArray = /*#__PURE__*/function () {
function MapIntoResultArray(items) {
this.items = items;
}
var _proto3 = MapIntoResultArray.prototype;
_proto3.map = function map(callback) {
var out = new ResultArray();
for (var _iterator = _createForOfIteratorHelperLoose(this.items), _step; !(_step = _iterator()).done;) {
var item = _step.value;
out.add(callback(item));
}
return out.toArray();
};
return MapIntoResultArray;
}();
exports.MapIntoResultArray = MapIntoResultArray;
var ResultArray = /*#__PURE__*/function () {
function ResultArray(items) {
if (items === void 0) {
items = [];
}
this.items = items;
}
var _proto4 = ResultArray.prototype;
_proto4.add = function add(item) {
this.items.push(item);
};
_proto4.toArray = function toArray() {
var err = this.items.filter(function (item) {
return item instanceof ErrImpl;
})[0];
if (err !== undefined) {
return err.cast();
} else {
return Ok(this.items.map(function (item) {
return item.value;
}));
}
};
_proto4.toOptionalList = function toOptionalList() {
return this.toArray().mapOk(function (arr) {
return (0, _list.OptionalList)(arr);
});
};
return ResultArray;
}();
exports.ResultArray = ResultArray;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9zaGFyZWQvcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFQSxVOzs7YUFDRSxHLEdBQUEsU0FBQSxHQUFBLEdBQXFEO0FBQ25ELFFBQUksR0FBRyxHQUFQLEVBQUE7O0FBRG1ELFNBQUEsSUFBQSxJQUFBLEdBQUEsU0FBQSxDQUFBLE1BQUEsRUFBckQsT0FBcUQsR0FBQSxJQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxJQUFBLEdBQUEsQ0FBQSxFQUFBLElBQUEsR0FBQSxJQUFBLEVBQUEsSUFBQSxFQUFBLEVBQUE7QUFBckQsTUFBQSxPQUFxRCxDQUFBLElBQUEsQ0FBckQsR0FBcUQsU0FBQSxDQUFBLElBQUEsQ0FBckQ7QUFBcUQ7O0FBR25ELFNBQUEsSUFBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLFFBQUEsR0FBQSxPQUFBLEVBQUEsRUFBQSxHQUFBLFFBQUEsQ0FBQSxNQUFBLEVBQUEsRUFBQSxFQUFBLEVBQTRCO0FBQXZCLFVBQUksTUFBVCxHQUFBLFFBQUEsQ0FBQSxFQUFBLENBQUs7O0FBQ0gsVUFBSSxNQUFNLENBQVYsS0FBQSxFQUFrQjtBQUNoQixlQUFPLE1BQU0sQ0FBYixJQUFPLEVBQVA7QUFERixPQUFBLE1BRU87QUFDTCxRQUFBLEdBQUcsQ0FBSCxJQUFBLENBQVMsTUFBTSxDQUFmLEtBQUE7QUFDRDtBQUNGOztBQUVELFdBQU8sRUFBRSxDQUFULEdBQVMsQ0FBVDs7Ozs7O0FBUUcsSUFBTSxNQUFNLEdBQVosVUFBQTs7O0lBRVAsTTs7O0FBSUUsV0FBQSxNQUFBLENBQUEsS0FBQSxFQUE2QjtBQUFBLFFBQUEsS0FBQTs7QUFDM0IsSUFBQSxLQUFBLEdBQUEsV0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEtBQUEs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Q3JCLGFBQU8sR0FBRyxDQUFWLElBQU8sRUFBUDtBQURGLEtBQUEsTUFFTztBQUNMLGFBQU8sRUFBRSxDQUFFLEtBQUEsS0FBQSxDQUFBLEdBQUEsQ0FBZ0MsVUFBRCxJQUFDLEVBQUQ7QUFBQSxlQUFVLElBQUksQ0FBeEQsS0FBMEM7QUFBMUMsT0FBVyxDQUFGLENBQVQ7QUFDRDtBQWRMLEdBQUE7O0FBQUEsRUFBQSxPQUFBLENBQUEsY0FBQSxHQWlCRSxTQUFBLGNBQUEsR0FBYztBQUNaLFdBQU8sS0FBQSxPQUFBLEdBQUEsS0FBQSxDQUFzQixVQUFELEdBQUMsRUFBRDtBQUFBLGFBQVMsd0JBQXJDLEdBQXFDLENBQVQ7QUFBNUIsS0FBTyxDQUFQO0FBbEJKLEdBQUE7O0FBQUEsU0FBQSxXQUFBO0FBQUEsQ0FBQSxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2xpbW1lclN5bnRheEVycm9yIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcblxuaW1wb3J0IHsgQW55T3B0aW9uYWxMaXN0LCBPcHRpb25hbExpc3QgfSBmcm9tICcuL2xpc3QnO1xuXG5hYnN0cmFjdCBjbGFzcyBSZXN1bHRJbXBsPFQ+IHtcbiAgc3RhdGljIGFsbDxUIGV4dGVuZHMgUmVzdWx0PHVua25vd24+W10+KC4uLnJlc3VsdHM6IFQpOiBNYXBBbGw8VD4ge1xuICAgIGxldCBvdXQ6IHVua25vd25bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuaXNFcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jYXN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQucHVzaChyZXN1bHQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPayhvdXQgYXMgTWFwQWxsT2s8VD4pO1xuICB9XG5cbiAgYWJzdHJhY3QgbWFwT2s8VT4oY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gVSk6IFJlc3VsdDxVPjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNPazogYm9vbGVhbjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNFcnI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBSZXN1bHQgPSBSZXN1bHRJbXBsO1xuXG5jbGFzcyBPa0ltcGw8VD4gZXh0ZW5kcyBSZXN1bHRJbXBsPFQ+IHtcbiAgcmVhZG9ubHkgaXNPayA9IHRydWU7XG4gIHJlYWRvbmx5IGlzRXJyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IFQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXhwZWN0KF9tZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICBpZk9rKGNhbGxiYWNrOiAodmFsdWU6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICBjYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFuZFRoZW48VT4oY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gUmVzdWx0PFU+KTogUmVzdWx0PFU+IHtcbiAgICByZXR1cm4gY2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gIH1cblxuICBtYXBPazxVPihjYWxsYmFjazogKHZhbHVlOiBUKSA9PiBVKTogUmVzdWx0PFU+IHtcbiAgICByZXR1cm4gT2soY2FsbGJhY2sodGhpcy52YWx1ZSkpO1xuICB9XG5cbiAgaWZFcnIoX2NhbGxiYWNrOiAodmFsdWU6IEdsaW1tZXJTeW50YXhFcnJvcikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWFwRXJyKF9jYWxsYmFjazogKHZhbHVlOiBHbGltbWVyU3ludGF4RXJyb3IpID0+IEdsaW1tZXJTeW50YXhFcnJvcik6IFJlc3VsdDxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuY2xhc3MgRXJySW1wbDxUPiBleHRlbmRzIFJlc3VsdEltcGw8VD4ge1xuICByZWFkb25seSBpc09rID0gZmFsc2U7XG4gIHJlYWRvbmx5IGlzRXJyID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSByZWFzb246IEdsaW1tZXJTeW50YXhFcnJvcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBleHBlY3QobWVzc2FnZT86IHN0cmluZyk6IFQge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlIHx8ICdleHBlY3RlZCBhbiBPaywgZ290IEVycicpO1xuICB9XG5cbiAgYW5kVGhlbjxVPihfY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gUmVzdWx0PFU+KTogUmVzdWx0PFU+IHtcbiAgICByZXR1cm4gdGhpcy5jYXN0PFU+KCk7XG4gIH1cblxuICBtYXBPazxVPihfY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gVSk6IFJlc3VsdDxVPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzdDxVPigpO1xuICB9XG5cbiAgaWZPayhfY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbWFwRXJyKGNhbGxiYWNrOiAodmFsdWU6IEdsaW1tZXJTeW50YXhFcnJvcikgPT4gR2xpbW1lclN5bnRheEVycm9yKTogUmVzdWx0PFQ+IHtcbiAgICByZXR1cm4gRXJyKGNhbGxiYWNrKHRoaXMucmVhc29uKSk7XG4gIH1cblxuICBpZkVycihjYWxsYmFjazogKHZhbHVlOiBHbGltbWVyU3ludGF4RXJyb3IpID0+IHZvaWQpOiB0aGlzIHtcbiAgICBjYWxsYmFjayh0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjYXN0PFU+KCk6IFJlc3VsdDxVPiB7XG4gICAgcmV0dXJuICh0aGlzIGFzIHVua25vd24pIGFzIFJlc3VsdDxVPjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXN1bHQ8VD4oaW5wdXQ6IE1heWJlUmVzdWx0PFQ+KTogaW5wdXQgaXMgUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIGlucHV0IGluc3RhbmNlb2YgUmVzdWx0SW1wbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludG9SZXN1bHQ8VD4oaW5wdXQ6IE1heWJlUmVzdWx0PFQ+KTogUmVzdWx0PFQ+IHtcbiAgaWYgKGlzUmVzdWx0KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gT2soaW5wdXQpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlc3VsdDxUPiA9IE9rSW1wbDxUPiB8IEVyckltcGw8VD47XG5cbnR5cGUgTWFwQWxsT2s8VCBleHRlbmRzIFJlc3VsdDx1bmtub3duPltdPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF06IFRbUF0gZXh0ZW5kcyBSZXN1bHQ8aW5mZXIgSW5uZXI+ID8gSW5uZXIgOiBuZXZlcjtcbn07XG5cbnR5cGUgTWFwQWxsPFQgZXh0ZW5kcyBSZXN1bHQ8dW5rbm93bj5bXT4gPSBSZXN1bHQ8TWFwQWxsT2s8VD4+O1xuXG5leHBvcnQgZnVuY3Rpb24gT2s8VD4odmFsdWU6IFQpOiBSZXN1bHQ8VD4ge1xuICByZXR1cm4gbmV3IE9rSW1wbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCB0eXBlIE9rPFQ+ID0gT2tJbXBsPFQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gRXJyPFQ+KHJlYXNvbjogR2xpbW1lclN5bnRheEVycm9yKTogUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIG5ldyBFcnJJbXBsKHJlYXNvbik7XG59XG5cbmV4cG9ydCB0eXBlIEVycjxUPiA9IEVyckltcGw8VD47XG5cbmV4cG9ydCB0eXBlIE1heWJlUmVzdWx0PFQ+ID0gVCB8IFJlc3VsdDxUPjtcblxuZXhwb3J0IGNsYXNzIE1hcEludG9SZXN1bHRBcnJheTxUPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaXRlbXM6IFRbXSkge31cblxuICBtYXA8VT4oY2FsbGJhY2s6IChpdGVtOiBUKSA9PiBSZXN1bHQ8VT4pOiBSZXN1bHQ8VVtdPiB7XG4gICAgbGV0IG91dCA9IG5ldyBSZXN1bHRBcnJheTxVPigpO1xuXG4gICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICBvdXQuYWRkKGNhbGxiYWNrKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnRvQXJyYXkoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzdWx0QXJyYXk8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGl0ZW1zOiBSZXN1bHQ8VD5bXSA9IFtdKSB7fVxuXG4gIGFkZChpdGVtOiBSZXN1bHQ8VD4pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gIH1cblxuICB0b0FycmF5KCk6IFJlc3VsdDxUW10+IHtcbiAgICBsZXQgZXJyID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIEVyckltcGw8VD4gPT4gaXRlbSBpbnN0YW5jZW9mIEVyckltcGwpWzBdO1xuXG4gICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyLmNhc3Q8VFtdPigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT2soKHRoaXMuaXRlbXMgYXMgT2tJbXBsPFQ+W10pLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHRvT3B0aW9uYWxMaXN0KCk6IFJlc3VsdDxBbnlPcHRpb25hbExpc3Q8VD4+IHtcbiAgICByZXR1cm4gdGhpcy50b0FycmF5KCkubWFwT2soKGFycikgPT4gT3B0aW9uYWxMaXN0KGFycikpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9