diff options
author | Louis Pilfold <louis@lpil.uk> | 2022-01-11 20:14:30 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-01-11 20:14:30 +0000 |
commit | 4398f8989fb3daada7aba33ddb4c16d4ec1f5795 (patch) | |
tree | e8586a9507cd405e24b847dd46fba17d93b990c0 /src/ffi.js | |
parent | 0dc5e5234e14d915d61c75c36ddeae9e317bdd3c (diff) | |
download | javascript-4398f8989fb3daada7aba33ddb4c16d4ec1f5795.tar.gz javascript-4398f8989fb3daada7aba33ddb4c16d4ec1f5795.zip |
Latest Gleam
Diffstat (limited to 'src/ffi.js')
-rw-r--r-- | src/ffi.js | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/ffi.js b/src/ffi.js deleted file mode 100644 index ded63ae..0000000 --- a/src/ffi.js +++ /dev/null @@ -1,128 +0,0 @@ -import { Ok, Error } from "./gleam.js"; -import { - UndefinedType, - ObjectType, - BooleanType, - NumberType, - BigIntType, - StringType, - SymbolType, - FunctionType, -} from "./gleam/javascript.js"; - -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 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 all_promises(...promises) { - if (promises.length === 1) { - return Promise.all(promises[0]); - } else { - return Promise.all(promises); - } -} |