diff options
author | Peter Saxton <peterhsaxton@gmail.com> | 2024-06-10 16:08:24 +0200 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2024-06-26 11:38:41 +0100 |
commit | 426e92ee9872d67661ac6e35548b7e555b6aba4b (patch) | |
tree | 5cde266666f400832b0c8dd8879c458450cacc89 /src/ffi.mjs | |
parent | 2cf699d9c4cd4ac99924bb05bb7c07931eebfe1b (diff) | |
download | javascript-426e92ee9872d67661ac6e35548b7e555b6aba4b.tar.gz javascript-426e92ee9872d67661ac6e35548b7e555b6aba4b.zip |
rename ffi file
Diffstat (limited to 'src/ffi.mjs')
-rw-r--r-- | src/ffi.mjs | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/src/ffi.mjs b/src/ffi.mjs deleted file mode 100644 index 7c14c10..0000000 --- a/src/ffi.mjs +++ /dev/null @@ -1,167 +0,0 @@ -import { Ok, Error } from "./gleam.mjs"; -import { - UndefinedType, - ObjectType, - BooleanType, - NumberType, - BigIntType, - StringType, - SymbolType, - FunctionType, -} from "./gleam/javascript.mjs"; - -export function toArray(list) { - return list.toArray(); -} - -export function map(thing, fn) { - return thing.map(fn); -} - -export function length(thing) { - return thing.length; -} - -export function reduce(thing, acc, fn) { - return thing.reduce(fn, acc); -} - -export function reduceRight(thing, acc, fn) { - return thing.reduceRight(fn, acc); -} - -export function index(thing, index) { - return index in thing ? new Ok(thing[index]) : new Error(undefined); -} - -export function object_from_entries(entries) { - return Object.fromEntries(entries); -} - -export function type_of(value) { - switch (typeof value) { - case "undefined": - return new UndefinedType(); - case "object": - return new ObjectType(); - case "boolean": - return new BooleanType(); - case "number": - return new NumberType(); - case "bigint": - return new BigIntType(); - case "string": - return new StringType(); - case "symbol": - return new SymbolType(); - case "function": - return new FunctionType(); - default: - throw new globalThis.Error(`Unexpected typeof ${typeof value}`); - } -} - -export function get_symbol(name) { - return Symbol.for(name); -} - -// A wrapper around a promise to prevent `Promise<Promise<T>>` collapsing into -// `Promise<T>`. -class PromiseLayer { - constructor(promise) { - this.promise = promise; - } - - static wrap(value) { - return value instanceof Promise ? new PromiseLayer(value) : value; - } - - static unwrap(value) { - return value instanceof PromiseLayer ? value.promise : value; - } -} - -export function newPromise(executor) { - return new Promise((resolve) => - executor((value) => { - resolve(PromiseLayer.wrap(value)); - }) - ); -} - -export function resolve(value) { - return Promise.resolve(PromiseLayer.wrap(value)); -} - -export function then(promise, fn) { - return promise.then((value) => fn(PromiseLayer.unwrap(value))); -} - -export function map_promise(promise, fn) { - return promise.then((value) => - PromiseLayer.wrap(fn(PromiseLayer.unwrap(value))) - ); -} - -export function rescue(promise, fn) { - return promise.catch((error) => fn(error)); -} - -class Reference { - constructor(value) { - this.value = value; - } -} - -export function dereference(reference) { - return reference.value; -} - -export function make_reference(value) { - return new Reference(value); -} - -export function set_reference(ref, value) { - let previous = ref.value; - ref.value = value; - return previous; -} - -export function reference_equal(a,b) { - return a === b -} - -export function all_promises(...promises) { - if (promises.length === 1) { - return Promise.all(promises[0]); - } else { - return Promise.all(promises); - } -} - -export function race_promises(...promises) { - if (promises.length === 1) { - return Promise.race(promises[0]); - } else { - return Promise.race(promises); - } -} - -export function map_new() { - return new Map(); -} - -export function map_set(map, key, value) { - return map.set(key, value); -} - -export function map_get(map, key) { - if (map.has(key)) { - return new Ok(map.get(key)); - } - return new Error(undefined); -} - -export function map_size(map) { - return map.size; -} |