aboutsummaryrefslogtreecommitdiff
path: root/src/ffi.mjs
diff options
context:
space:
mode:
authorPeter Saxton <peterhsaxton@gmail.com>2024-06-10 16:08:24 +0200
committerLouis Pilfold <louis@lpil.uk>2024-06-26 11:38:41 +0100
commit426e92ee9872d67661ac6e35548b7e555b6aba4b (patch)
tree5cde266666f400832b0c8dd8879c458450cacc89 /src/ffi.mjs
parent2cf699d9c4cd4ac99924bb05bb7c07931eebfe1b (diff)
downloadjavascript-426e92ee9872d67661ac6e35548b7e555b6aba4b.tar.gz
javascript-426e92ee9872d67661ac6e35548b7e555b6aba4b.zip
rename ffi file
Diffstat (limited to 'src/ffi.mjs')
-rw-r--r--src/ffi.mjs167
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;
-}