Current section

Files

Jump to
gossamer src gossamer promise.ffi.mjs
Raw

src/gossamer/promise.ffi.mjs

// src/gossamer/promise.ffi.ts
import * as $promise from "./promise.mjs";
import * as $promiseSettledResult from "./promise_settled_result.mjs";
// src/utils/list.ts
import {
List$Empty,
List$isNonEmpty,
List$NonEmpty,
List$NonEmpty$first,
List$NonEmpty$rest
} from "../../prelude.mjs";
function fromArray(array) {
let list = List$Empty();
for (let i = array.length - 1; i >= 0; --i) {
list = List$NonEmpty(array[i], list);
}
return list;
}
// src/utils/result.ts
import { Result$Error, Result$Ok } from "../../prelude.mjs";
function toResult(value) {
return value === null || value === void 0 ? Result$Error(void 0) : Result$Ok(value);
}
toResult.fromThrows = function(throws) {
try {
return Result$Ok(throws());
} catch (error) {
return Result$Error(
error instanceof Error ? error.message : String(error)
);
}
};
toResult.fromPromise = function(promise) {
return promise.then(
(value) => Result$Ok(value),
(error) => Result$Error(error instanceof Error ? error.message : String(error))
);
};
// src/gossamer/promise.ffi.ts
var new_ = (executor) => {
return new Promise((resolve2, reject2) => {
executor(
(value) => {
resolve2(value);
},
(reason) => {
reject2(reason);
}
);
});
};
var all = async (values) => {
const results = await Promise.all(values);
return fromArray(results);
};
var race = (values) => {
return Promise.race(values);
};
var reject = (reason) => {
return Promise.reject(reason);
};
var resolve = (value) => {
return Promise.resolve(value);
};
var all_settled = async (values) => {
const results = await Promise.allSettled(values);
return fromArray(
results.map(
(result) => result.status === "fulfilled" ? $promiseSettledResult.PromiseSettledResult$Fulfilled(result.value) : $promiseSettledResult.PromiseSettledResult$Rejected(result.reason)
)
);
};
var any = (values) => {
return Promise.any(values);
};
var try_ = (func) => {
return toResult.fromPromise(Promise.try(func));
};
var with_resolvers = () => {
const { promise, resolve: resolve2, reject: reject2 } = Promise.withResolvers();
return $promise.PromiseWithResolvers$PromiseWithResolvers(
promise,
(value) => {
resolve2(value);
},
(reason) => {
reject2(reason);
}
);
};
var then = (promise, onfulfilled) => {
return promise.then(onfulfilled);
};
var catch_ = (promise, onrejected) => {
return promise.catch(onrejected);
};
var finally_ = (promise, onfinally) => {
return promise.finally(onfinally);
};
export {
all,
all_settled,
any,
catch_,
finally_,
new_,
race,
reject,
resolve,
then,
try_,
with_resolvers
};