diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-07-31 14:08:42 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-07-31 14:10:32 +0100 |
commit | 28e0d90719789349e64fd0900d12077929355a6d (patch) | |
tree | 9f81b441e6f271abae42c17cb0d2d8cd0ed2faed | |
download | javascript-28e0d90719789349e64fd0900d12077929355a6d.tar.gz javascript-28e0d90719789349e64fd0900d12077929355a6d.zip |
Hello, Joe!
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | bin/run-tests.js | 48 | ||||
-rw-r--r-- | bin/test.sh | 62 | ||||
-rw-r--r-- | package.json | 6 | ||||
-rw-r--r-- | src/ffi.js | 1 | ||||
-rw-r--r-- | src/main.gleam | 3 | ||||
-rw-r--r-- | test/gleam/javascript/array_test.gleam | 0 | ||||
-rw-r--r-- | test/gleam/javascript_test.gleam | 0 |
9 files changed, 126 insertions, 0 deletions
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 --- /dev/null +++ b/test/gleam/javascript/array_test.gleam diff --git a/test/gleam/javascript_test.gleam b/test/gleam/javascript_test.gleam new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/gleam/javascript_test.gleam |