aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-07-31 14:08:42 +0100
committerLouis Pilfold <louis@lpil.uk>2021-07-31 14:10:32 +0100
commit28e0d90719789349e64fd0900d12077929355a6d (patch)
tree9f81b441e6f271abae42c17cb0d2d8cd0ed2faed
downloadjavascript-28e0d90719789349e64fd0900d12077929355a6d.tar.gz
javascript-28e0d90719789349e64fd0900d12077929355a6d.zip
Hello, Joe!
-rw-r--r--.gitignore3
-rw-r--r--README.md3
-rw-r--r--bin/run-tests.js48
-rw-r--r--bin/test.sh62
-rw-r--r--package.json6
-rw-r--r--src/ffi.js1
-rw-r--r--src/main.gleam3
-rw-r--r--test/gleam/javascript/array_test.gleam0
-rw-r--r--test/gleam/javascript_test.gleam0
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