Skip to content

Commit

Permalink
Set up J2CL JavaScript build (#64)
Browse files Browse the repository at this point in the history
  • Loading branch information
travisbrown authored Apr 26, 2020
1 parent 6b35cea commit 9a1aa33
Show file tree
Hide file tree
Showing 16 changed files with 276 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ tmp/
.bloop/
.metals/
project/metals.sbt
bazel-bin
bazel-dhallj
bazel-out
bazel-testlogs
18 changes: 18 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
workspace(name = "org_dhallj")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Load j2cl repository
http_archive(
name = "com_google_j2cl",
strip_prefix = "j2cl-master",
url = "https://github.com/google/j2cl/archive/master.zip",
)

load("@com_google_j2cl//build_defs:repository.bzl", "load_j2cl_repo_deps")

load_j2cl_repo_deps()

load("@com_google_j2cl//build_defs:rules.bzl", "setup_j2cl_workspace")

setup_j2cl_workspace()
9 changes: 9 additions & 0 deletions javascript/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
load("@com_google_j2cl//build_defs:rules.bzl", "j2cl_application")

j2cl_application(
name = "dhall",
closure_defines = {"jre.classMetadata": "'STRIPPED'"},
entry_points = ["dhall.js"],
jre_checks_check_level = "MINIMAL",
deps = ["//javascript/api:dhall_js"],
)
21 changes: 21 additions & 0 deletions javascript/api/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_library")
load("@com_google_j2cl//build_defs:rules.bzl", "j2cl_library")

package(
default_visibility = ["//visibility:public"],
)

j2cl_library(
name = "dhall_js_java",
srcs = ["DhallJs.java"],
deps = [
"//modules/core",
"//modules/parser",
],
)

closure_js_library(
name = "dhall_js",
srcs = ["dhall.js"],
deps = [":dhall_js_java"],
)
20 changes: 20 additions & 0 deletions javascript/api/DhallJs.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.dhallj.js;

import org.dhallj.core.Expr;
import org.dhallj.parser.DhallParser;
import jsinterop.annotations.JsType;

@JsType
public class DhallJs {
public static String parse(String input) {
return DhallParser.parse(input).toString();
}

public static String normalize(String input) {
return DhallParser.parse(input).normalize().toString();
}

public static String typeCheck(String input) {
return Expr.Util.typeCheck(DhallParser.parse(input)).toString();
}
}
36 changes: 36 additions & 0 deletions javascript/api/dhall.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
goog.module('dhall.js');

var DhallJs = goog.require('org.dhallj.js.DhallJs');

/**
* @param {string} input
* @return {null|string}
*/
function parse(input) {
return DhallJs.parse(input);
}

/**
* @param {string} input
* @return {null|string}
*/
function typeCheck(input) {
return DhallJs.typeCheck(input);
}

/**
* @param {string} input
* @return {null|string}
*/
function normalize(input) {
return DhallJs.normalize(input);
}

// Otherwise we seem to lose stuff with some configurations?
parse("1");
typeCheck("1");
normalize("1");

goog.exportSymbol("parse", parse);
goog.exportSymbol("typeCheck", typeCheck);
goog.exportSymbol("normalize", normalize);
30 changes: 30 additions & 0 deletions javascript/jre/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
load("@com_google_j2cl//build_defs:rules.bzl", "j2cl_library")

package(
default_visibility = ["//visibility:public"],
)

j2cl_library(
name = "java_io",
srcs = [
"BufferedReader.java",
"InputStreamReader.java",
],
)

j2cl_library(
name = "java_net",
srcs = [
"URI.java",
"URISyntaxException.java",
],
)

j2cl_library(
name = "java_nio_file",
srcs = [
"InvalidPathException.java",
"Path.java",
"Paths.java",
],
)
11 changes: 11 additions & 0 deletions javascript/jre/BufferedReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package java.io;

public class BufferedReader extends Reader {
public BufferedReader(InputStreamReader stream) {}

public int read(char[] cbuf, int off, int len) {
return -1;
}

public void close() {}
}
11 changes: 11 additions & 0 deletions javascript/jre/InputStreamReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package java.io;

public class InputStreamReader extends Reader {
public InputStreamReader(InputStream in) {}
public InputStreamReader(InputStream in, String charsetName) {}
public int read(char[] cbuf, int off, int len) {
return -1;
}

public void close() {}
}
3 changes: 3 additions & 0 deletions javascript/jre/InvalidPathException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package java.nio.file;

public class InvalidPathException extends IllegalArgumentException {}
27 changes: 27 additions & 0 deletions javascript/jre/Path.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package java.nio.file;

import java.util.Iterator;

public class Path {
private final String input;

public Path(String input) {
this.input = input;
}

public final boolean isAbsolute() {
return this.input.charAt(0) == '/';
}

public final Iterator<Path> iterator() {
return null;
}

public final int getNameCount() {
return 0;
}

public Path resolve(String other) {
return this;
}
}
11 changes: 11 additions & 0 deletions javascript/jre/Paths.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package java.nio.file;

public class Paths {
/**
* @throws InvalidPathException
* if the path string cannot be converted to a {@code Path}
*/
public static final Path get(String input) {
return new Path(input);
}
}
25 changes: 25 additions & 0 deletions javascript/jre/URI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package java.net;

public class URI {
private final String input;

public URI(String input) throws URISyntaxException {
this.input = input;
}

public final String getScheme() {
return "";
}

public final String getAuthority() {
return "";
}

public final String getPath() {
return "";
}

public final String getQuery() {
return "";
}
}
3 changes: 3 additions & 0 deletions javascript/jre/URISyntaxException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package java.net;

public class URISyntaxException extends Throwable {}
27 changes: 27 additions & 0 deletions modules/core/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
load("@com_google_j2cl//build_defs:rules.bzl", "j2cl_library")

package(
default_visibility = ["//visibility:public"],
)

j2cl_library(
name = "cbor",
srcs = glob([
"src/main/java/org/dhallj/cbor/*.java",
]),
)

j2cl_library(
name = "core",
srcs = glob([
"src/main/java/org/dhallj/core/*.java",
"src/main/java/org/dhallj/core/binary/*.java",
"src/main/java/org/dhallj/core/normalization/*.java",
"src/main/java/org/dhallj/core/typechecking/*.java",
]),
deps = [
":cbor",
"//javascript/jre:java_net",
"//javascript/jre:java_nio_file",
],
)
20 changes: 20 additions & 0 deletions modules/parser/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
load("@com_google_j2cl//build_defs:rules.bzl", "j2cl_library")

package(
default_visibility = ["//visibility:public"],
)

j2cl_library(
name = "parser",
srcs = glob([
"src/main/java/org/dhallj/parser/*.java",
"src/main/java/org/dhallj/parser/support/*.java",
"target/javacc/*.java",
]),
deps = [
"//javascript/jre:java_io",
"//javascript/jre:java_net",
"//javascript/jre:java_nio_file",
"//modules/core",
],
)

0 comments on commit 9a1aa33

Please sign in to comment.