@glimmer/compiler
Version:
152 lines (120 loc) • 11.5 kB
JavaScript
import { OptionalList } from './list';
class ResultImpl {
static all(...results) {
let out = [];
for (let result of results) {
if (result.isErr) {
return result.cast();
} else {
out.push(result.value);
}
}
return Ok(out);
}
}
export const Result = ResultImpl;
class OkImpl extends ResultImpl {
constructor(value) {
super();
this.value = value;
this.isOk = true;
this.isErr = false;
}
expect(_message) {
return this.value;
}
ifOk(callback) {
callback(this.value);
return this;
}
andThen(callback) {
return callback(this.value);
}
mapOk(callback) {
return Ok(callback(this.value));
}
ifErr(_callback) {
return this;
}
mapErr(_callback) {
return this;
}
}
class ErrImpl extends ResultImpl {
constructor(reason) {
super();
this.reason = reason;
this.isOk = false;
this.isErr = true;
}
expect(message) {
throw new Error(message || 'expected an Ok, got Err');
}
andThen(_callback) {
return this.cast();
}
mapOk(_callback) {
return this.cast();
}
ifOk(_callback) {
return this;
}
mapErr(callback) {
return Err(callback(this.reason));
}
ifErr(callback) {
callback(this.reason);
return this;
}
cast() {
return this;
}
}
export function isResult(input) {
return input instanceof ResultImpl;
}
export function intoResult(input) {
if (isResult(input)) {
return input;
} else {
return Ok(input);
}
}
export function Ok(value) {
return new OkImpl(value);
}
export function Err(reason) {
return new ErrImpl(reason);
}
export class MapIntoResultArray {
constructor(items) {
this.items = items;
}
map(callback) {
let out = new ResultArray();
for (let item of this.items) {
out.add(callback(item));
}
return out.toArray();
}
}
export class ResultArray {
constructor(items = []) {
this.items = items;
}
add(item) {
this.items.push(item);
}
toArray() {
let err = this.items.filter(item => item instanceof ErrImpl)[0];
if (err !== undefined) {
return err.cast();
} else {
return Ok(this.items.map(item => item.value));
}
}
toOptionalList() {
return this.toArray().mapOk(arr => OptionalList(arr));
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9zaGFyZWQvcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQTBCLFlBQTFCLFFBQThDLFFBQTlDOztBQUVBLE1BQWUsVUFBZixDQUF5QjtBQUN2QixTQUFPLEdBQVAsQ0FBd0MsR0FBRyxPQUEzQyxFQUFxRDtBQUNuRCxRQUFJLEdBQUcsR0FBYyxFQUFyQjs7QUFFQSxTQUFLLElBQUksTUFBVCxJQUFtQixPQUFuQixFQUE0QjtBQUMxQixVQUFJLE1BQU0sQ0FBQyxLQUFYLEVBQWtCO0FBQ2hCLGVBQU8sTUFBTSxDQUFDLElBQVAsRUFBUDtBQUNELE9BRkQsTUFFTztBQUNMLFFBQUEsR0FBRyxDQUFDLElBQUosQ0FBUyxNQUFNLENBQUMsS0FBaEI7QUFDRDtBQUNGOztBQUVELFdBQU8sRUFBRSxDQUFDLEdBQUQsQ0FBVDtBQUNEOztBQWJzQjs7QUFvQnpCLE9BQU8sTUFBTSxNQUFNLEdBQUcsVUFBZjs7QUFFUCxNQUFNLE1BQU4sU0FBd0IsVUFBeEIsQ0FBcUM7QUFJbkMsRUFBQSxXQUFBLENBQXFCLEtBQXJCLEVBQTZCO0FBQzNCO0FBRG1CLFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFIWixTQUFBLElBQUEsR0FBTyxJQUFQO0FBQ0EsU0FBQSxLQUFBLEdBQVEsS0FBUjtBQUlSOztBQUVELEVBQUEsTUFBTSxDQUFDLFFBQUQsRUFBa0I7QUFDdEIsV0FBTyxLQUFLLEtBQVo7QUFDRDs7QUFFRCxFQUFBLElBQUksQ0FBQyxRQUFELEVBQTZCO0FBQy9CLElBQUEsUUFBUSxDQUFDLEtBQUssS0FBTixDQUFSO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsRUFBQSxPQUFPLENBQUksUUFBSixFQUFxQztBQUMxQyxXQUFPLFFBQVEsQ0FBQyxLQUFLLEtBQU4sQ0FBZjtBQUNEOztBQUVELEVBQUEsS0FBSyxDQUFJLFFBQUosRUFBNkI7QUFDaEMsV0FBTyxFQUFF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QUF1QjtBQUNyQixhQUFPLEdBQUcsQ0FBQyxJQUFKLEVBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEVBQUUsQ0FBRSxLQUFLLEtBQUwsQ0FBMkIsR0FBM0IsQ0FBZ0MsSUFBRCxJQUFVLElBQUksQ0FBQyxLQUE5QyxDQUFGLENBQVQ7QUFDRDtBQUNGOztBQUVELEVBQUEsY0FBYyxHQUFBO0FBQ1osV0FBTyxLQUFLLE9BQUwsR0FBZSxLQUFmLENBQXNCLEdBQUQsSUFBUyxZQUFZLENBQUMsR0FBRCxDQUExQyxDQUFQO0FBQ0Q7O0FBbkJxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdsaW1tZXJTeW50YXhFcnJvciB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5cbmltcG9ydCB7IEFueU9wdGlvbmFsTGlzdCwgT3B0aW9uYWxMaXN0IH0gZnJvbSAnLi9saXN0JztcblxuYWJzdHJhY3QgY2xhc3MgUmVzdWx0SW1wbDxUPiB7XG4gIHN0YXRpYyBhbGw8VCBleHRlbmRzIFJlc3VsdDx1bmtub3duPltdPiguLi5yZXN1bHRzOiBUKTogTWFwQWxsPFQ+IHtcbiAgICBsZXQgb3V0OiB1bmtub3duW10gPSBbXTtcblxuICAgIGZvciAobGV0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBpZiAocmVzdWx0LmlzRXJyKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuY2FzdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0LnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2sob3V0IGFzIE1hcEFsbE9rPFQ+KTtcbiAgfVxuXG4gIGFic3RyYWN0IG1hcE9rPFU+KGNhbGxiYWNrOiAodmFsdWU6IFQpID0+IFUpOiBSZXN1bHQ8VT47XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzT2s6IGJvb2xlYW47XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzRXJyOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgUmVzdWx0ID0gUmVzdWx0SW1wbDtcblxuY2xhc3MgT2tJbXBsPFQ+IGV4dGVuZHMgUmVzdWx0SW1wbDxUPiB7XG4gIHJlYWRvbmx5IGlzT2sgPSB0cnVlO1xuICByZWFkb25seSBpc0VyciA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHZhbHVlOiBUKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV4cGVjdChfbWVzc2FnZT86IHN0cmluZyk6IFQge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgaWZPayhjYWxsYmFjazogKHZhbHVlOiBUKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgY2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbmRUaGVuPFU+KGNhbGxiYWNrOiAodmFsdWU6IFQpID0+IFJlc3VsdDxVPik6IFJlc3VsdDxVPiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbWFwT2s8VT4oY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gVSk6IFJlc3VsdDxVPiB7XG4gICAgcmV0dXJuIE9rKGNhbGxiYWNrKHRoaXMudmFsdWUpKTtcbiAgfVxuXG4gIGlmRXJyKF9jYWxsYmFjazogKHZhbHVlOiBHbGltbWVyU3ludGF4RXJyb3IpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1hcEVycihfY2FsbGJhY2s6ICh2YWx1ZTogR2xpbW1lclN5bnRheEVycm9yKSA9PiBHbGltbWVyU3ludGF4RXJyb3IpOiBSZXN1bHQ8VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmNsYXNzIEVyckltcGw8VD4gZXh0ZW5kcyBSZXN1bHRJbXBsPFQ+IHtcbiAgcmVhZG9ubHkgaXNPayA9IGZhbHNlO1xuICByZWFkb25seSBpc0VyciA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcmVhc29uOiBHbGltbWVyU3ludGF4RXJyb3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXhwZWN0KG1lc3NhZ2U/OiBzdHJpbmcpOiBUIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSB8fCAnZXhwZWN0ZWQgYW4gT2ssIGdvdCBFcnInKTtcbiAgfVxuXG4gIGFuZFRoZW48VT4oX2NhbGxiYWNrOiAodmFsdWU6IFQpID0+IFJlc3VsdDxVPik6IFJlc3VsdDxVPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzdDxVPigpO1xuICB9XG5cbiAgbWFwT2s8VT4oX2NhbGxiYWNrOiAodmFsdWU6IFQpID0+IFUpOiBSZXN1bHQ8VT4ge1xuICAgIHJldHVybiB0aGlzLmNhc3Q8VT4oKTtcbiAgfVxuXG4gIGlmT2soX2NhbGxiYWNrOiAodmFsdWU6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1hcEVycihjYWxsYmFjazogKHZhbHVlOiBHbGltbWVyU3ludGF4RXJyb3IpID0+IEdsaW1tZXJTeW50YXhFcnJvcik6IFJlc3VsdDxUPiB7XG4gICAgcmV0dXJuIEVycihjYWxsYmFjayh0aGlzLnJlYXNvbikpO1xuICB9XG5cbiAgaWZFcnIoY2FsbGJhY2s6ICh2YWx1ZTogR2xpbW1lclN5bnRheEVycm9yKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgY2FsbGJhY2sodGhpcy5yZWFzb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY2FzdDxVPigpOiBSZXN1bHQ8VT4ge1xuICAgIHJldHVybiAodGhpcyBhcyB1bmtub3duKSBhcyBSZXN1bHQ8VT47XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzdWx0PFQ+KGlucHV0OiBNYXliZVJlc3VsdDxUPik6IGlucHV0IGlzIFJlc3VsdDxUPiB7XG4gIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIFJlc3VsdEltcGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRvUmVzdWx0PFQ+KGlucHV0OiBNYXliZVJlc3VsdDxUPik6IFJlc3VsdDxUPiB7XG4gIGlmIChpc1Jlc3VsdChpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE9rKGlucHV0KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBSZXN1bHQ8VD4gPSBPa0ltcGw8VD4gfCBFcnJJbXBsPFQ+O1xuXG50eXBlIE1hcEFsbE9rPFQgZXh0ZW5kcyBSZXN1bHQ8dW5rbm93bj5bXT4gPSB7XG4gIFtQIGluIGtleW9mIFRdOiBUW1BdIGV4dGVuZHMgUmVzdWx0PGluZmVyIElubmVyPiA/IElubmVyIDogbmV2ZXI7XG59O1xuXG50eXBlIE1hcEFsbDxUIGV4dGVuZHMgUmVzdWx0PHVua25vd24+W10+ID0gUmVzdWx0PE1hcEFsbE9rPFQ+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIE9rPFQ+KHZhbHVlOiBUKTogUmVzdWx0PFQ+IHtcbiAgcmV0dXJuIG5ldyBPa0ltcGwodmFsdWUpO1xufVxuXG5leHBvcnQgdHlwZSBPazxUPiA9IE9rSW1wbDxUPjtcblxuZXhwb3J0IGZ1bmN0aW9uIEVycjxUPihyZWFzb246IEdsaW1tZXJTeW50YXhFcnJvcik6IFJlc3VsdDxUPiB7XG4gIHJldHVybiBuZXcgRXJySW1wbChyZWFzb24pO1xufVxuXG5leHBvcnQgdHlwZSBFcnI8VD4gPSBFcnJJbXBsPFQ+O1xuXG5leHBvcnQgdHlwZSBNYXliZVJlc3VsdDxUPiA9IFQgfCBSZXN1bHQ8VD47XG5cbmV4cG9ydCBjbGFzcyBNYXBJbnRvUmVzdWx0QXJyYXk8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGl0ZW1zOiBUW10pIHt9XG5cbiAgbWFwPFU+KGNhbGxiYWNrOiAoaXRlbTogVCkgPT4gUmVzdWx0PFU+KTogUmVzdWx0PFVbXT4ge1xuICAgIGxldCBvdXQgPSBuZXcgUmVzdWx0QXJyYXk8VT4oKTtcblxuICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgb3V0LmFkZChjYWxsYmFjayhpdGVtKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC50b0FycmF5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc3VsdEFycmF5PFQ+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpdGVtczogUmVzdWx0PFQ+W10gPSBbXSkge31cblxuICBhZGQoaXRlbTogUmVzdWx0PFQ+KTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgdG9BcnJheSgpOiBSZXN1bHQ8VFtdPiB7XG4gICAgbGV0IGVyciA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBFcnJJbXBsPFQ+ID0+IGl0ZW0gaW5zdGFuY2VvZiBFcnJJbXBsKVswXTtcblxuICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVyci5jYXN0PFRbXT4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9rKCh0aGlzLml0ZW1zIGFzIE9rSW1wbDxUPltdKS5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB0b09wdGlvbmFsTGlzdCgpOiBSZXN1bHQ8QW55T3B0aW9uYWxMaXN0PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpLm1hcE9rKChhcnIpID0+IE9wdGlvbmFsTGlzdChhcnIpKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==