Produce different output for Firefox and Firefox add-ons.
Firefox itself doesn't need `require("chrome")` to get access to Cu, and shouldn't touch the Add-on SDK at all.
This commit is contained in:
parent
d568977fa9
commit
2577e0d4a7
15 changed files with 128 additions and 41 deletions
36
project.clj
36
project.clj
|
@ -47,6 +47,31 @@
|
|||
}
|
||||
:notify-command ["release-node/wrap_bare.sh"]}
|
||||
|
||||
:release-addon
|
||||
;; Release builds for use in Firefox add-ons are much like the ones
|
||||
;; for Firefox itself, but they can freely use `console` and must
|
||||
;; `require("chrome")` to get access to Components.
|
||||
{
|
||||
:source-paths ["src/common" "src/browser-common" "src/addon"]
|
||||
:assert false
|
||||
:compiler
|
||||
{
|
||||
:elide-asserts true
|
||||
:externs ["src/browser-common/externs/datomish.js"]
|
||||
:language-in :ecmascript5
|
||||
:language-out :ecmascript5
|
||||
:optimizations :advanced
|
||||
:output-dir "target/release-addon"
|
||||
:output-to "target/release-addon/datomish.bare.js"
|
||||
:output-wrapper false
|
||||
:parallel-build true
|
||||
:preloads [datomish.preload]
|
||||
:pretty-print true
|
||||
:pseudo-names true
|
||||
:static-fns true
|
||||
}
|
||||
:notify-command ["release-addon/wrap_bare.sh"]}
|
||||
|
||||
:release-browser
|
||||
;; Release builds for use in Firefox must:
|
||||
;; * Use :optimizations > :none, so that a single file is generated
|
||||
|
@ -57,15 +82,16 @@
|
|||
;; There's no point in generating a source map -- it'll be wrong
|
||||
;; due to wrapping.
|
||||
{
|
||||
:source-paths ["src/common" "src/browser"]
|
||||
:source-paths ["src/common" "src/browser-common" "src/browser"]
|
||||
:assert false
|
||||
:compiler
|
||||
{
|
||||
:verbose true
|
||||
:elide-asserts true
|
||||
:externs ["src/browser/externs/datomish.js"]
|
||||
:language-in :ecmascript5
|
||||
:language-out :ecmascript5
|
||||
:optimizations :advanced
|
||||
:externs ["src/browser-common/externs/datomish.js"]
|
||||
:language-in :ecmascript5-strict
|
||||
:language-out :ecmascript5-strict
|
||||
:optimizations :simple
|
||||
:output-dir "target/release-browser"
|
||||
:output-to "target/release-browser/datomish.bare.js"
|
||||
:output-wrapper false
|
||||
|
|
5
release-addon/README.md
Normal file
5
release-addon/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).
|
7
release-addon/wrap_bare.sh
Executable file
7
release-addon/wrap_bare.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
(cat release-browser/wrapper.prefix; cat target/release-browser/datomish.bare.js; cat release-browser/wrapper.suffix) > target/release-browser/datomish.js
|
||||
|
||||
echo "Packed target/release-browser/datomish.js"
|
34
release-addon/wrapper.prefix
Normal file
34
release-addon/wrapper.prefix
Normal file
|
@ -0,0 +1,34 @@
|
|||
/* 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 {
|
||||
datomish = definition();
|
||||
}
|
||||
})(function () {
|
||||
return function () {
|
||||
|
||||
// Monkeypatch setTimeout so that the Closure Compiler
|
||||
// output can use it in a Sandbox context.
|
||||
var { setTimeout } = require("sdk/timers");
|
||||
this.setTimeout = setTimeout;
|
6
release-addon/wrapper.suffix
Normal file
6
release-addon/wrapper.suffix
Normal file
|
@ -0,0 +1,6 @@
|
|||
|
||||
;return this.datomish.js;
|
||||
|
||||
}.call({});
|
||||
|
||||
});
|
|
@ -2,33 +2,28 @@
|
|||
* 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
|
||||
this.EXPORTED_SYMBOLS = ["Datomish"];
|
||||
|
||||
(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
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
||||
|
||||
// CommonJS
|
||||
if (typeof exports === "object") {
|
||||
module.exports = definition();
|
||||
// So we can polyfill setImmediate.
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
// RequireJS
|
||||
} else if (typeof define === "function" && define.amd) {
|
||||
define(definition);
|
||||
|
||||
// <script>
|
||||
} else {
|
||||
datomish = definition();
|
||||
var setImmediate = function (callback) {
|
||||
let args = new Array(arguments.length - 1);
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
args[i] = arguments[i + 1];
|
||||
}
|
||||
})(function () {
|
||||
return function () {
|
||||
|
||||
// Monkeypatch setTimeout so that the Closure Compiler
|
||||
// output can use it in a Sandbox context.
|
||||
var { setTimeout } = require("sdk/timers");
|
||||
this.setTimeout = setTimeout;
|
||||
callback = callback.bind(callback, args);
|
||||
Services.tm.currentThread.dispatch(callback, Ci.nsIThread.DISPATCH_NORMAL);
|
||||
}
|
||||
|
||||
var console = {
|
||||
log: function (s) {
|
||||
dump(s);
|
||||
}
|
||||
};
|
||||
|
||||
this.Datomish = (function () {
|
||||
|
|
|
@ -1,6 +1,2 @@
|
|||
|
||||
;return this.datomish.js;
|
||||
|
||||
}.call({});
|
||||
|
||||
});
|
||||
return datomish.js;
|
||||
}).call(this);
|
||||
|
|
9
src/addon/datomish/sqlite_module.cljs
Normal file
9
src/addon/datomish/sqlite_module.cljs
Normal file
|
@ -0,0 +1,9 @@
|
|||
;; 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/.
|
||||
|
||||
(ns datomish.sqlite-module)
|
||||
|
||||
(def sqlite (.import (aget (js/require "chrome") "Cu") "resource://gre/modules/Sqlite.jsm"))
|
||||
|
||||
(println "Add-on code: sqlite is" (pr-str sqlite))
|
|
@ -10,4 +10,3 @@
|
|||
[datomish.js-sqlite :as js-sqlite]
|
||||
[datomish.sqlite :as sqlite]
|
||||
[datomish.transact :as transact]))
|
||||
|
|
@ -5,11 +5,8 @@
|
|||
(ns datomish.sqlitejsm-sqlite
|
||||
(:require
|
||||
[cljs-promises.async]
|
||||
[datomish.sqlite :as s]))
|
||||
|
||||
(def sqlite (.import (aget (js/require "chrome") "Cu") "resource://gre/modules/Sqlite.jsm"))
|
||||
|
||||
(println "sqlite is" (pr-str sqlite))
|
||||
[datomish.sqlite :as s]
|
||||
[datomish.sqlite-module :refer [sqlite]]))
|
||||
|
||||
;; mozIStorageRow instances expose two methods: getResultByIndex and getResultByName.
|
||||
;; Our code expects to treat rows as associative containers, from keyword to value.
|
|
@ -6,6 +6,10 @@ var Array = {};
|
|||
Array.length = 0;
|
||||
Array.isArray = function () {};
|
||||
|
||||
var Components = {};
|
||||
Components.utils = {};
|
||||
Components.utils.import = function (name, scope) {};
|
||||
|
||||
var SqliteStatic = {};
|
||||
|
||||
/**
|
9
src/browser/datomish/sqlite_module.cljs
Normal file
9
src/browser/datomish/sqlite_module.cljs
Normal file
|
@ -0,0 +1,9 @@
|
|||
;; 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/.
|
||||
|
||||
(ns datomish.sqlite-module)
|
||||
|
||||
(def sqlite (.import (aget js/Components "utils") "resource://gre/modules/Sqlite.jsm"))
|
||||
|
||||
(println "Browser code: sqlite is" (pr-str sqlite))
|
Loading…
Reference in a new issue