Add lein-cljsbuild and adapt datascript's release-js vehicle.
This commit is contained in:
parent
55baa1685d
commit
f2365646d2
12 changed files with 127 additions and 22 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -15,9 +15,11 @@
|
||||||
/.nrepl-port
|
/.nrepl-port
|
||||||
/checkouts/
|
/checkouts/
|
||||||
/classes/
|
/classes/
|
||||||
/lib/
|
/target/
|
||||||
/node_modules/
|
/node_modules/
|
||||||
/out/
|
|
||||||
/target/
|
/target/
|
||||||
pom.xml
|
pom.xml
|
||||||
pom.xml.asc
|
pom.xml.asc
|
||||||
|
/.cljs_node_repl/
|
||||||
|
/release-js/datomish.js
|
||||||
|
/release-js/datomish.bare.js
|
||||||
|
|
17
README.md
17
README.md
|
@ -80,6 +80,8 @@ npm install
|
||||||
brew install rlwrap
|
brew install rlwrap
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Run `lein cljsbuild auto advanced` to generate JavaScript into `target/`.
|
||||||
|
|
||||||
### Starting a ClojureScript REPL from the terminal
|
### Starting a ClojureScript REPL from the terminal
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -127,3 +129,18 @@ Now you can use `:Eval`, `cqc`, and friends to evaluate code. Fireplace should c
|
||||||
```
|
```
|
||||||
:Connect nrepl://localhost:62385
|
:Connect nrepl://localhost:62385
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Preparing an NPM release
|
||||||
|
|
||||||
|
The intention is that the `release-js/` directory is roughly the shape of an npm-ready JavaScript package.
|
||||||
|
|
||||||
|
To generate a require/import-ready `release-js/datomish.js`, run
|
||||||
|
```
|
||||||
|
lein cljsbuild once release
|
||||||
|
```
|
||||||
|
To verify that importing into Node.js succeeds, run
|
||||||
|
```
|
||||||
|
node release-js/test
|
||||||
|
```
|
||||||
|
|
||||||
|
Many thanks to ([David Nolen](https://github.com/swannodette)) and ([Nikita Prokopov](https://github.com/tonsky)) for demonstrating how to package ClojureScript for distribution via npm.
|
||||||
|
|
6
node.clj
6
node.clj
|
@ -1,6 +0,0 @@
|
||||||
(require 'cljs.build.api)
|
|
||||||
|
|
||||||
(cljs.build.api/build "src"
|
|
||||||
{:main 'datomish.core
|
|
||||||
:output-to "main.js"
|
|
||||||
:target :nodejs})
|
|
12
package.json
12
package.json
|
@ -6,19 +6,13 @@
|
||||||
},
|
},
|
||||||
"version": "0.1.0-SNAPSHOT",
|
"version": "0.1.0-SNAPSHOT",
|
||||||
"description": "A persistent, embedded knowledge base inspired by Datomic and DataScript.",
|
"description": "A persistent, embedded knowledge base inspired by Datomic and DataScript.",
|
||||||
"main": "index.js",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"source-map-support": "ncalexan/node-source-map-support#fileUrls-plus",
|
"source-map-support": "ncalexan/node-source-map-support#fileUrls-plus",
|
||||||
"sqlite3": "mossop/node-sqlite3#v3.1.4.1",
|
"sqlite3": "mossop/node-sqlite3#v3.1.4.1",
|
||||||
"thenify-all": "^1.6.0",
|
"thenify-all": "^1.6.0",
|
||||||
"ws": "1.1.1"
|
"ws": "1.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {
|
||||||
"directories": {
|
|
||||||
"test": "test"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -29,5 +23,7 @@
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/mozilla/datomish/issues"
|
"url": "https://github.com/mozilla/datomish/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/mozilla/datomish#readme"
|
"homepage": "https://github.com/mozilla/datomish#readme",
|
||||||
|
"main": "./datomish.js",
|
||||||
|
"files": ["datomish.js"]
|
||||||
}
|
}
|
||||||
|
|
38
project.clj
38
project.clj
|
@ -3,7 +3,41 @@
|
||||||
:url "https://github.com/mozilla/datomish"
|
:url "https://github.com/mozilla/datomish"
|
||||||
:license {:name "Mozilla Public License Version 2.0"
|
:license {:name "Mozilla Public License Version 2.0"
|
||||||
:url "https://github.com/mozilla/datomish/blob/master/LICENSE"}
|
:url "https://github.com/mozilla/datomish/blob/master/LICENSE"}
|
||||||
|
:dependencies [[org.clojure/clojurescript "1.9.89"]
|
||||||
|
[org.clojure/clojure "1.8.0"]]
|
||||||
|
|
||||||
|
:cljsbuild {:builds [{:id "release"
|
||||||
|
:source-paths ["src"]
|
||||||
|
:assert false
|
||||||
|
:compiler {:output-to "release-js/datomish.bare.js"
|
||||||
|
:optimizations :advanced
|
||||||
|
:pretty-print false
|
||||||
|
:elide-asserts true
|
||||||
|
:output-wrapper false
|
||||||
|
:parallel-build true}
|
||||||
|
:notify-command ["release-js/wrap_bare.sh"]}
|
||||||
|
]}
|
||||||
|
|
||||||
:profiles {:dev {:dependencies [[com.cemerick/piggieback "0.2.1"]
|
:profiles {:dev {:dependencies [[com.cemerick/piggieback "0.2.1"]
|
||||||
[org.clojure/tools.nrepl "0.2.10"]]
|
[org.clojure/tools.nrepl "0.2.10"]]
|
||||||
:repl-options {:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}}}
|
:repl-options {:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}
|
||||||
:dependencies [[org.clojure/clojurescript "1.9.89"]])
|
:source-paths []
|
||||||
|
:plugins [[lein-cljsbuild "1.1.2"]]
|
||||||
|
:cljsbuild {:builds [{:id "advanced"
|
||||||
|
:source-paths ["src"]
|
||||||
|
:compiler {
|
||||||
|
:output-to "target/datomish.js"
|
||||||
|
:optimizations :advanced
|
||||||
|
:source-map "target/datomish.js.map"
|
||||||
|
:pretty-print true
|
||||||
|
:recompile-dependents false
|
||||||
|
:parallel-build true
|
||||||
|
}}
|
||||||
|
]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:clean-targets ^{:protect false} ["target"
|
||||||
|
"release-js/datomish.bare.js"
|
||||||
|
"release-js/datomish.js"]
|
||||||
|
)
|
||||||
|
|
5
release-js/README.md
Normal file
5
release-js/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Datomish
|
||||||
|
|
||||||
|
Datomish is a persistent, embedded knowledge base. It's written in ClojureScript, and draws heavily on [DataScript](https://github.com/tonsky/datascript) and [Datomic](http://datomic.com).
|
||||||
|
|
||||||
|
For more info, check out the [project page](https://github.com/mozila/datomish).
|
2
release-js/test_include_node.js
Normal file
2
release-js/test_include_node.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
var d = require('./datomish');
|
||||||
|
console.log(d.q("[:find ?e ?v :where [?e \"name\" ?v] {:x :y}]"));
|
7
release-js/wrap_bare.sh
Executable file
7
release-js/wrap_bare.sh
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
(cat release-js/wrapper.prefix; cat release-js/datomish.bare.js; cat release-js/wrapper.suffix) > release-js/datomish.js
|
||||||
|
|
||||||
|
echo "Packed release-js/datomish.js"
|
29
release-js/wrapper.prefix
Normal file
29
release-js/wrapper.prefix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
// Datomish 0.1.0-SNAPSHOT
|
||||||
|
|
||||||
|
(function (definition) {
|
||||||
|
// This file will function properly as a <script> tag, or a module
|
||||||
|
// using CommonJS and NodeJS or RequireJS module formats.
|
||||||
|
|
||||||
|
// Wrapper gratefully adapted from:
|
||||||
|
// https://github.com/kriskowal/q/blob/v1/q.js
|
||||||
|
// https://github.com/swannodette/mori/blob/master/support/wrapper.js
|
||||||
|
// https://github.com/tonsky/datascript/blob/master/release-js/wrapper.js
|
||||||
|
|
||||||
|
// CommonJS
|
||||||
|
if (typeof exports === "object") {
|
||||||
|
module.exports = definition();
|
||||||
|
|
||||||
|
// RequireJS
|
||||||
|
} else if (typeof define === "function" && define.amd) {
|
||||||
|
define(definition);
|
||||||
|
|
||||||
|
// <script>
|
||||||
|
} else {
|
||||||
|
datascript = definition();
|
||||||
|
}
|
||||||
|
})(function () {
|
||||||
|
return function () {
|
6
release-js/wrapper.suffix
Normal file
6
release-js/wrapper.suffix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
;return this.datomish.js;
|
||||||
|
|
||||||
|
}.call({});
|
||||||
|
|
||||||
|
});
|
10
repl.clj
10
repl.clj
|
@ -2,11 +2,13 @@
|
||||||
(require 'cljs.build.api)
|
(require 'cljs.build.api)
|
||||||
(require 'cljs.repl.node)
|
(require 'cljs.repl.node)
|
||||||
|
|
||||||
(cljs.build.api/build "src"
|
(cljs.build.api/build
|
||||||
|
"src"
|
||||||
{:main 'datomish.core
|
{:main 'datomish.core
|
||||||
:output-to "out/main.js"
|
:output-to "target/datomish.js"
|
||||||
:verbose true})
|
:verbose true})
|
||||||
|
|
||||||
(cljs.repl/repl (cljs.repl.node/repl-env)
|
(cljs.repl/repl
|
||||||
|
(cljs.repl.node/repl-env)
|
||||||
:watch "src"
|
:watch "src"
|
||||||
:output-dir "out")
|
:output-dir "target")
|
||||||
|
|
11
src/datomish/js.cljs
Normal file
11
src/datomish/js.cljs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
(ns datomish.js
|
||||||
|
(:refer-clojure :exclude [])
|
||||||
|
(:require
|
||||||
|
[datomish.core :as d]
|
||||||
|
[cljs.reader]))
|
||||||
|
|
||||||
|
;; Public API.
|
||||||
|
|
||||||
|
(defn ^:export q [query & sources]
|
||||||
|
(let [query (cljs.reader/read-string query)]
|
||||||
|
(clj->js query)))
|
Loading…
Reference in a new issue