From 28e0d90719789349e64fd0900d12077929355a6d Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Sat, 31 Jul 2021 14:08:42 +0100 Subject: Hello, Joe! --- .gitignore | 3 ++ README.md | 3 ++ bin/run-tests.js | 48 ++++++++++++++++++++++++++ bin/test.sh | 62 ++++++++++++++++++++++++++++++++++ package.json | 6 ++++ src/ffi.js | 1 + src/main.gleam | 3 ++ test/gleam/javascript/array_test.gleam | 0 test/gleam/javascript_test.gleam | 0 9 files changed, 126 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 bin/run-tests.js create mode 100644 bin/test.sh create mode 100644 package.json create mode 100644 src/ffi.js create mode 100644 src/main.gleam create mode 100644 test/gleam/javascript/array_test.gleam create mode 100644 test/gleam/javascript_test.gleam diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a60093f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +out +lib +node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000..d650287 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Gleam JavaScript + +A library for making use of JavaScript specific code! diff --git a/bin/run-tests.js b/bin/run-tests.js new file mode 100644 index 0000000..b8ab5d0 --- /dev/null +++ b/bin/run-tests.js @@ -0,0 +1,48 @@ +import { readdir } from "fs/promises"; +import { resolve, relative, basename } from "path"; + +const dir = "node_modules/gleam_javascript"; + +async function getFiles(dir) { + const dirents = await readdir(dir, { withFileTypes: true }); + const files = await Promise.all( + dirents.map((dirent) => { + const res = resolve(dir, dirent.name); + return dirent.isDirectory() ? getFiles(res) : res; + }) + ); + return Array.prototype.concat(...files); +} + +async function main() { + console.log("Running tests..."); + + let passes = 0; + let failures = 0; + + for (let path of await getFiles(dir)) { + if (!path.endsWith("_test.js")) continue; + process.stdout.write("\n" + relative(dir, path).slice(0, -3) + ":\n "); + let module = await import(path); + for (let fnName of Object.keys(module)) { + if (!fnName.endsWith("_test")) continue; + try { + module[fnName](); + process.stdout.write("✨"); + passes++; + } catch (error) { + process.stdout.write(`❌ ${fnName}: ${error}\n `); + failures++; + } + } + } + + console.log(` + +${passes + failures} tests +${passes} passes +${failures} failures`); + process.exit(failures ? 1 : 0); +} + +main(); diff --git a/bin/test.sh b/bin/test.sh new file mode 100644 index 0000000..d5c28b1 --- /dev/null +++ b/bin/test.sh @@ -0,0 +1,62 @@ +#/bin/bash +set -eu + +library_dir() { + echo "lib/$1" +} + +library_out_dir() { + echo "node_modules/$1" +} + +clone_dep() { + local dir=$(library_dir "$1") + local tag="$2" + local url="$3" + + if [ ! -d "$dir" ] ; then + mkdir -p lib + git clone --depth=1 --branch="$tag" "$url" "$dir" + fi +} + +compile_library() { + local name="$1" + echo "Compiling $name" + + shift + local lib_flags=() + for dep in "$@"; do + lib_flags+=("--lib=$(library_out_dir $dep)") + done + + local dir=$(library_dir "$name") + local src="$dir/src" + local test="$dir/test" + local out=$(library_out_dir "$name") + rm -rf out + + gleam compile-package \ + --name "$name" \ + --target javascript \ + --src "$src" \ + --out $(library_out_dir "$name") \ + "${lib_flags[@]: }" + + cp "$src/"*.js "$out/" +} + +clone_dep gleam_stdlib main https://github.com/gleam-lang/stdlib.git +compile_library gleam_stdlib + +rm -rf node_modules/gleam_javascript +gleam compile-package \ + --name gleam_javascript \ + --target javascript \ + --src src \ + --test test \ + --out node_modules/gleam_javascript \ + --lib node_modules/gleam_stdlib +cp "src/"*.js "node_modules/gleam_javascript/" + +node bin/run-tests.js diff --git a/package.json b/package.json new file mode 100644 index 0000000..d7d3212 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "type": "module", + "scripts": { + "test": "bash bin/test.sh" + } +} diff --git a/src/ffi.js b/src/ffi.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/ffi.js @@ -0,0 +1 @@ +export {}; diff --git a/src/main.gleam b/src/main.gleam new file mode 100644 index 0000000..69d3bea --- /dev/null +++ b/src/main.gleam @@ -0,0 +1,3 @@ +pub fn yo() { + "yo" +} diff --git a/test/gleam/javascript/array_test.gleam b/test/gleam/javascript/array_test.gleam new file mode 100644 index 0000000..e69de29 diff --git a/test/gleam/javascript_test.gleam b/test/gleam/javascript_test.gleam new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3