sproutit-narwhal 0.1.106
Sign up to get free protection for your applications and to get access to all the features.
- data/DISTRIBUTION.yml +15 -0
- data/README.md +86 -0
- data/Rakefile +349 -0
- data/VERSION.yml +7 -0
- data/bin/activate +50 -0
- data/bin/activate.bash +50 -0
- data/bin/activate.cmd +3 -0
- data/bin/js +67 -0
- data/bin/json +2 -0
- data/bin/narwhal +67 -0
- data/bin/narwhal.cmd +29 -0
- data/bin/sea +45 -0
- data/bin/sea.cmd +25 -0
- data/bin/tusk +2 -0
- data/bin/tusk.cmd +5 -0
- data/catalog.json +902 -0
- data/docs/available-packages.md +32 -0
- data/docs/browser-api-plan.md +290 -0
- data/docs/browser-api.md +153 -0
- data/docs/download.md +25 -0
- data/docs/engines.md +32 -0
- data/docs/json-tool.md +121 -0
- data/docs/lib/binary.wiki +242 -0
- data/docs/lib/file.wiki +325 -0
- data/docs/lib/os/popen.md +70 -0
- data/docs/modules.md +38 -0
- data/docs/narwhal.md +487 -0
- data/docs/packages-howto.md +32 -0
- data/docs/packages.md +30 -0
- data/docs/posts/2009-07-29-hello-0.1.md +19 -0
- data/docs/quick-start.md +69 -0
- data/docs/sea.md +49 -0
- data/engines/browser/lib/binary.js +2 -0
- data/engines/browser/lib/reactor.js +21 -0
- data/engines/browser/lib/system.js +3 -0
- data/engines/default/lib/array.js +164 -0
- data/engines/default/lib/binary-engine.js +53 -0
- data/engines/default/lib/binary.js +755 -0
- data/engines/default/lib/date.js +8 -0
- data/engines/default/lib/file-engine.js +119 -0
- data/engines/default/lib/function.js +119 -0
- data/engines/default/lib/global.js +11 -0
- data/engines/default/lib/io-engine.js +26 -0
- data/engines/default/lib/json.js +488 -0
- data/engines/default/lib/object.js +69 -0
- data/engines/default/lib/os-engine.js +3 -0
- data/engines/default/lib/reactor.js +12 -0
- data/engines/default/lib/string.js +84 -0
- data/engines/default/lib/system.js +20 -0
- data/engines/default/lib/worker.js +133 -0
- data/engines/jsc/README.md +18 -0
- data/engines/jsc/bootstrap.js +53 -0
- data/engines/jsc/deps/http-parser/LICENSE +77 -0
- data/engines/jsc/deps/http-parser/README.md +145 -0
- data/engines/jsc/deps/http-parser/http_parser.c +6087 -0
- data/engines/jsc/deps/http-parser/http_parser.h +141 -0
- data/engines/jsc/deps/http-parser/http_parser.rl +500 -0
- data/engines/jsc/deps/http-parser/test.c +858 -0
- data/engines/jsc/include/binary-engine.h +11 -0
- data/engines/jsc/include/io-engine.h +23 -0
- data/engines/jsc/include/narwhal.h +427 -0
- data/engines/jsc/lib/file-engine.js +31 -0
- data/engines/jsc/lib/http.js +1 -0
- data/engines/jsc/lib/io-engine.js +202 -0
- data/engines/jsc/lib/os-engine.js +25 -0
- data/engines/jsc/lib/system.js +18 -0
- data/engines/jsc/lib/zip.js +1 -0
- data/engines/jsc/narwhal-jsc.c +273 -0
- data/engines/jsc/narwhal.c +29 -0
- data/engines/jsc/package.json +8 -0
- data/engines/jsc/src/binary-engine.cc +290 -0
- data/engines/jsc/src/file-engine.cc +405 -0
- data/engines/jsc/src/io-engine.cc +423 -0
- data/engines/jsc/src/jack/handler/jill.cc +710 -0
- data/engines/jsc/src/os-engine.cc +210 -0
- data/engines/rhino/bin/narwhal-rhino +68 -0
- data/engines/rhino/bin/narwhal-rhino.cmd +34 -0
- data/engines/rhino/bootstrap.js +119 -0
- data/engines/rhino/jars/jline.jar +0 -0
- data/engines/rhino/jars/jna.jar +0 -0
- data/engines/rhino/jars/js.jar +0 -0
- data/engines/rhino/lib/binary-engine.js +83 -0
- data/engines/rhino/lib/concurrency.js +6 -0
- data/engines/rhino/lib/event-queue.js +18 -0
- data/engines/rhino/lib/file-engine.js +216 -0
- data/engines/rhino/lib/http-client-engine.js +90 -0
- data/engines/rhino/lib/http-engine.js +10 -0
- data/engines/rhino/lib/io-engine.js +347 -0
- data/engines/rhino/lib/md5-engine.js +40 -0
- data/engines/rhino/lib/os-engine.js +150 -0
- data/engines/rhino/lib/packages-engine.js +71 -0
- data/engines/rhino/lib/sandbox-engine.js +70 -0
- data/engines/rhino/lib/system.js +38 -0
- data/engines/rhino/lib/worker-engine.js +23 -0
- data/engines/rhino/lib/zip.js +78 -0
- data/engines/rhino/package.json +4 -0
- data/engines/secure/lib/file.js +6 -0
- data/engines/secure/lib/system.js +6 -0
- data/engines/template/bin/narwhal-engine-name +32 -0
- data/engines/template/bootstrap.js +40 -0
- data/engines/template/lib/file-engine.js +118 -0
- data/engines/template/lib/system.js +17 -0
- data/examples/browser-deployment-jackconfig.js +35 -0
- data/examples/fibonacci-worker.js +35 -0
- data/examples/fibonacci.js +19 -0
- data/examples/hello +2 -0
- data/examples/narwhal +3 -0
- data/examples/not-quite-a-quine.js +1 -0
- data/extconf.rb +44 -0
- data/gem_bin/narwhal +5 -0
- data/gem_bin/sea +4 -0
- data/gem_bin/tusk +4 -0
- data/lib/args.js +849 -0
- data/lib/base16.js +16 -0
- data/lib/base64.js +120 -0
- data/lib/codec/base64.js +8 -0
- data/lib/crc32.js +60 -0
- data/lib/file-bootstrap.js +187 -0
- data/lib/file.js +659 -0
- data/lib/hash.js +28 -0
- data/lib/hashp.js +65 -0
- data/lib/html.js +16 -0
- data/lib/http-client.js +134 -0
- data/lib/http.js +17 -0
- data/lib/io.js +98 -0
- data/lib/jsmin.js +315 -0
- data/lib/jsonpath.js +89 -0
- data/lib/logger.js +55 -0
- data/lib/md4.js +146 -0
- data/lib/md5.js +164 -0
- data/lib/mime.js +166 -0
- data/lib/narwhal.js +102 -0
- data/lib/narwhal/client.js +261 -0
- data/lib/narwhal/compile.js +99 -0
- data/lib/narwhal/env.js +140 -0
- data/lib/narwhal/inline.js +106 -0
- data/lib/narwhal/json.js +324 -0
- data/lib/narwhal/json.md +178 -0
- data/lib/narwhal/repl.js +96 -0
- data/lib/narwhal/server-test.js +6 -0
- data/lib/narwhal/server.js +270 -0
- data/lib/narwhal/tusk.js +170 -0
- data/lib/narwhal/tusk/bin.js +13 -0
- data/lib/narwhal/tusk/bundle.js +0 -0
- data/lib/narwhal/tusk/catalog.js +22 -0
- data/lib/narwhal/tusk/clone.js +66 -0
- data/lib/narwhal/tusk/consolidate.js +25 -0
- data/lib/narwhal/tusk/create-catalog.js +80 -0
- data/lib/narwhal/tusk/engine.js +42 -0
- data/lib/narwhal/tusk/freeze.js +0 -0
- data/lib/narwhal/tusk/init.js +56 -0
- data/lib/narwhal/tusk/install.js +288 -0
- data/lib/narwhal/tusk/list.js +20 -0
- data/lib/narwhal/tusk/orphans.js +0 -0
- data/lib/narwhal/tusk/reheat.js +15 -0
- data/lib/narwhal/tusk/remove.js +15 -0
- data/lib/narwhal/tusk/search.js +145 -0
- data/lib/narwhal/tusk/update.js +21 -0
- data/lib/narwhal/tusk/upgrade.js +0 -0
- data/lib/os.js +33 -0
- data/lib/packages.js +423 -0
- data/lib/printf.js +169 -0
- data/lib/promise.js +352 -0
- data/lib/querystring.js +176 -0
- data/lib/ref-send.js +257 -0
- data/lib/regexp.js +12 -0
- data/lib/sandbox.js +422 -0
- data/lib/sha.js +112 -0
- data/lib/sha256.js +102 -0
- data/lib/struct.js +228 -0
- data/lib/term.js +179 -0
- data/lib/test/assert.js +95 -0
- data/lib/test/equiv.js +188 -0
- data/lib/test/jsdump.js +165 -0
- data/lib/test/runner.js +129 -0
- data/lib/unload.js +13 -0
- data/lib/uri.js +378 -0
- data/lib/url.js +5 -0
- data/lib/utf8.js +64 -0
- data/lib/util.js +985 -0
- data/lib/uuid.js +89 -0
- data/lib/xregexp.js +521 -0
- data/local.json.template +1 -0
- data/narwhal.gemspec +105 -0
- data/narwhal.js +213 -0
- data/package.json +26 -0
- data/packages/readline/engines/default/lib/readline.js +4 -0
- data/packages/readline/engines/rhino/lib/readline.js +6 -0
- data/packages/readline/package.json +5 -0
- data/sources.json +207 -0
- data/tests/all-tests.js +17 -0
- data/tests/args.js +31 -0
- data/tests/args/domain.js +215 -0
- data/tests/args/options.js +36 -0
- data/tests/args/shifting.js +92 -0
- data/tests/args/validation.js +31 -0
- data/tests/base64.js +23 -0
- data/tests/commonjs.js +3 -0
- data/tests/commonjs/all-tests.js +12 -0
- data/tests/commonjs/bytearray-encodings-tests.js +69 -0
- data/tests/commonjs/bytearray-tests.js +465 -0
- data/tests/commonjs/bytestring-encodings-tests.js +89 -0
- data/tests/commonjs/bytestring-tests.js +263 -0
- data/tests/commonjs/es5/all-tests.js +3 -0
- data/tests/commonjs/es5/bind.js +29 -0
- data/tests/commonjs/file-tests.js +315 -0
- data/tests/commonjs/file/dirname.js +31 -0
- data/tests/commonjs/file/extension.js +45 -0
- data/tests/commonjs/file/is-absolute.js +11 -0
- data/tests/commonjs/file/iterator.js +101 -0
- data/tests/commonjs/file/normal.js +27 -0
- data/tests/commonjs/file/path.js +17 -0
- data/tests/commonjs/file/relative.js +42 -0
- data/tests/commonjs/file/resolve.js +44 -0
- data/tests/commonjs/module-tests.js +9 -0
- data/tests/commonjs/modules/absolute/b.js +1 -0
- data/tests/commonjs/modules/absolute/program.js +5 -0
- data/tests/commonjs/modules/absolute/submodule/a.js +3 -0
- data/tests/commonjs/modules/absolute/test.js +9 -0
- data/tests/commonjs/modules/all-tests.js +47 -0
- data/tests/commonjs/modules/config.js +11 -0
- data/tests/commonjs/modules/cyclic/a.js +4 -0
- data/tests/commonjs/modules/cyclic/b.js +4 -0
- data/tests/commonjs/modules/cyclic/program.js +10 -0
- data/tests/commonjs/modules/cyclic/test.js +9 -0
- data/tests/commonjs/modules/determinism/program.js +3 -0
- data/tests/commonjs/modules/determinism/submodule/a.js +8 -0
- data/tests/commonjs/modules/determinism/submodule/b.js +2 -0
- data/tests/commonjs/modules/determinism/test.js +9 -0
- data/tests/commonjs/modules/exactExports/a.js +3 -0
- data/tests/commonjs/modules/exactExports/program.js +4 -0
- data/tests/commonjs/modules/exactExports/test.js +9 -0
- data/tests/commonjs/modules/hasOwnProperty/hasOwnProperty.js +0 -0
- data/tests/commonjs/modules/hasOwnProperty/program.js +3 -0
- data/tests/commonjs/modules/hasOwnProperty/test.js +9 -0
- data/tests/commonjs/modules/hasOwnProperty/toString.js +0 -0
- data/tests/commonjs/modules/method/a.js +12 -0
- data/tests/commonjs/modules/method/program.js +8 -0
- data/tests/commonjs/modules/method/test.js +9 -0
- data/tests/commonjs/modules/missing/program.js +8 -0
- data/tests/commonjs/modules/missing/test.js +9 -0
- data/tests/commonjs/modules/monkeys/a.js +1 -0
- data/tests/commonjs/modules/monkeys/program.js +4 -0
- data/tests/commonjs/modules/monkeys/test.js +9 -0
- data/tests/commonjs/modules/nested/a/b/c/d.js +3 -0
- data/tests/commonjs/modules/nested/program.js +3 -0
- data/tests/commonjs/modules/nested/test.js +9 -0
- data/tests/commonjs/modules/relative/program.js +5 -0
- data/tests/commonjs/modules/relative/submodule/a.js +1 -0
- data/tests/commonjs/modules/relative/submodule/b.js +2 -0
- data/tests/commonjs/modules/relative/test.js +9 -0
- data/tests/commonjs/modules/transitive/a.js +1 -0
- data/tests/commonjs/modules/transitive/b.js +1 -0
- data/tests/commonjs/modules/transitive/c.js +3 -0
- data/tests/commonjs/modules/transitive/program.js +3 -0
- data/tests/commonjs/modules/transitive/test.js +9 -0
- data/tests/file/all-tests.js +61 -0
- data/tests/file/fnmatch.js +102 -0
- data/tests/file/glob.js +466 -0
- data/tests/file/match.js +102 -0
- data/tests/global.js +6 -0
- data/tests/global/array.js +19 -0
- data/tests/hashes.js +94 -0
- data/tests/html.js +13 -0
- data/tests/io/stringio.js +21 -0
- data/tests/os/all-tests.js +4 -0
- data/tests/os/popen.js +41 -0
- data/tests/os/system.js +22 -0
- data/tests/printf.js +123 -0
- data/tests/query-string.js +87 -0
- data/tests/sandbox/byte-io.js +20 -0
- data/tests/sandbox/fileName.js +3 -0
- data/tests/sandbox/foo.js +0 -0
- data/tests/sandbox/reload.js +79 -0
- data/tests/string.js +35 -0
- data/tests/uri.js +41 -0
- data/tests/util/all-tests.js +79 -0
- data/tests/util/array.js +207 -0
- data/tests/util/array/is-arguments.js +29 -0
- data/tests/util/array/is-array-like.js +29 -0
- data/tests/util/case.js +9 -0
- data/tests/util/collection.js +104 -0
- data/tests/util/eq.js +57 -0
- data/tests/util/expand.js +45 -0
- data/tests/util/object.js +125 -0
- data/tests/util/operator.js +25 -0
- data/tests/util/range.js +19 -0
- data/tests/util/repr.js +26 -0
- data/tests/util/string.js +34 -0
- data/tests/util/unique.js +12 -0
- metadata +434 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
var binary = require("./binary");
|
3
|
+
|
4
|
+
var JString = Packages.java.lang.String,
|
5
|
+
JInteger = Packages.java.lang.Integer,
|
6
|
+
JStringBuffer = Packages.java.lang.StringBuffer,
|
7
|
+
JMessageDigest = Packages.java.security.MessageDigest;
|
8
|
+
|
9
|
+
exports.hash = function (str) {
|
10
|
+
var jstr = new JString(str);
|
11
|
+
var algorithm = JMessageDigest.getInstance("MD5");
|
12
|
+
algorithm.reset();
|
13
|
+
algorithm.update(jstr.getBytes());
|
14
|
+
var bytes = algorithm.digest();
|
15
|
+
return binary.ByteString(bytes);
|
16
|
+
};
|
17
|
+
|
18
|
+
// deprecated
|
19
|
+
//
|
20
|
+
|
21
|
+
var MD5 = exports.MD5 = {};
|
22
|
+
|
23
|
+
MD5.hexdigest = function(str) {
|
24
|
+
system.log.warn('hexdigest is depreacted, use md5.hash().toString(16)');
|
25
|
+
var jstr = new JString(str);
|
26
|
+
var algorithm = JMessageDigest.getInstance("MD5");
|
27
|
+
|
28
|
+
algorithm.reset();
|
29
|
+
algorithm.update(jstr.getBytes());
|
30
|
+
|
31
|
+
var messageDigest = algorithm.digest();
|
32
|
+
|
33
|
+
var hexString = new JStringBuffer();
|
34
|
+
for (var i = 0; i < messageDigest.length; i++) {
|
35
|
+
hexString.append(JInteger.toHexString(0xFF & messageDigest[i]));
|
36
|
+
}
|
37
|
+
|
38
|
+
return String(hexString.toString());
|
39
|
+
};
|
40
|
+
|
@@ -0,0 +1,150 @@
|
|
1
|
+
|
2
|
+
var io = require('io');
|
3
|
+
|
4
|
+
var cLib;
|
5
|
+
var getCLib = function () {
|
6
|
+
var jna = Packages.com.sun.jna;
|
7
|
+
cLib = jna.NativeLibrary.getInstance(
|
8
|
+
jna.Platform.isWindows() ? "msvcrt" : "c"
|
9
|
+
);
|
10
|
+
getCLib = function () {
|
11
|
+
return cLib;
|
12
|
+
};
|
13
|
+
return cLib;
|
14
|
+
};
|
15
|
+
|
16
|
+
exports.exit = function (status) {
|
17
|
+
Packages.java.lang.System.exit(status << 0);
|
18
|
+
};
|
19
|
+
|
20
|
+
exports.sleep = function (seconds) {
|
21
|
+
Packages.java.lang.Thread.sleep((seconds * 1000) >>> 0);
|
22
|
+
};
|
23
|
+
|
24
|
+
exports.fork = function () {
|
25
|
+
};
|
26
|
+
|
27
|
+
exports.exec = function () {
|
28
|
+
};
|
29
|
+
|
30
|
+
var cSystem;
|
31
|
+
var getCSystem = function () {
|
32
|
+
cSystem = getCLib().getFunction("system");
|
33
|
+
getCSystem = function () {
|
34
|
+
return cSystem;
|
35
|
+
};
|
36
|
+
return cSystem;
|
37
|
+
};
|
38
|
+
|
39
|
+
exports.system = function (command) {
|
40
|
+
if (Array.isArray(command)) {
|
41
|
+
command = command.map(function (arg) {
|
42
|
+
return require("os").enquote(arg);
|
43
|
+
}).join(" ");
|
44
|
+
}
|
45
|
+
return getCSystem().invokeInt([command]) >> 8;
|
46
|
+
};
|
47
|
+
|
48
|
+
exports.dup = function () {
|
49
|
+
};
|
50
|
+
|
51
|
+
exports.dup2 = function () {
|
52
|
+
};
|
53
|
+
|
54
|
+
exports.setsid = function () {
|
55
|
+
};
|
56
|
+
|
57
|
+
exports.getpid = function () {
|
58
|
+
};
|
59
|
+
|
60
|
+
var javaRuntime = function () {
|
61
|
+
return Packages.java.lang.Runtime.getRuntime();
|
62
|
+
};
|
63
|
+
|
64
|
+
var javaPopen = function (command) {
|
65
|
+
return javaRuntime().exec(command);
|
66
|
+
};
|
67
|
+
|
68
|
+
exports.popen = function (command, options) {
|
69
|
+
// todo options: "b", {charset, shell}
|
70
|
+
if (!options)
|
71
|
+
options = {};
|
72
|
+
if (typeof command == "string")
|
73
|
+
command = ["sh", "-c", command];
|
74
|
+
|
75
|
+
var process = javaPopen(command);
|
76
|
+
|
77
|
+
var stdin = new io.TextOutputStream(new io.IO(null, process.getOutputStream()));
|
78
|
+
var stdout = new io.TextInputStream(new io.IO(process.getInputStream()));
|
79
|
+
var stderr = new io.TextInputStream(new io.IO(process.getErrorStream()));
|
80
|
+
|
81
|
+
return {
|
82
|
+
wait: function () {
|
83
|
+
return process.waitFor();
|
84
|
+
},
|
85
|
+
stdin: stdin,
|
86
|
+
stdout: stdout,
|
87
|
+
stderr: stderr,
|
88
|
+
communicate: function (input, output, errput) {
|
89
|
+
|
90
|
+
if (typeof stdin == "string")
|
91
|
+
stdin = new io.StringIO(input);
|
92
|
+
else if (!stdin)
|
93
|
+
stdin = new io.StringIO();
|
94
|
+
|
95
|
+
if (typeof input == "string")
|
96
|
+
input = new io.StringIO(input);
|
97
|
+
else if (!input)
|
98
|
+
input = new io.StringIO();
|
99
|
+
if (!output)
|
100
|
+
output = new io.StringIO();
|
101
|
+
if (!errput)
|
102
|
+
errput = new io.StringIO();
|
103
|
+
|
104
|
+
var inThread = new JavaAdapter(Packages.java.lang.Thread, {
|
105
|
+
"run": function () {
|
106
|
+
input.copy(stdin);
|
107
|
+
stdin.close();
|
108
|
+
}
|
109
|
+
});
|
110
|
+
|
111
|
+
var outThread = new JavaAdapter(Packages.java.lang.Thread, {
|
112
|
+
"run": function () {
|
113
|
+
stdout.copy(output);
|
114
|
+
stdout.close();
|
115
|
+
}
|
116
|
+
});
|
117
|
+
|
118
|
+
var errThread = new JavaAdapter(Packages.java.lang.Thread, {
|
119
|
+
"run": function () {
|
120
|
+
stderr.copy(errput);
|
121
|
+
stderr.close();
|
122
|
+
}
|
123
|
+
});
|
124
|
+
|
125
|
+
inThread.setDaemon(true);
|
126
|
+
inThread.start();
|
127
|
+
errThread.setDaemon(true);
|
128
|
+
errThread.start();
|
129
|
+
outThread.setDaemon(true);
|
130
|
+
outThread.start();
|
131
|
+
|
132
|
+
inThread.join();
|
133
|
+
outThread.join();
|
134
|
+
errThread.join();
|
135
|
+
|
136
|
+
var status = process.waitFor();
|
137
|
+
stdin.close();
|
138
|
+
stdout.close();
|
139
|
+
stderr.close();
|
140
|
+
|
141
|
+
return {
|
142
|
+
status: status,
|
143
|
+
stdin: input,
|
144
|
+
stdout: output,
|
145
|
+
stderr: errput
|
146
|
+
};
|
147
|
+
}
|
148
|
+
}
|
149
|
+
};
|
150
|
+
|
@@ -0,0 +1,71 @@
|
|
1
|
+
|
2
|
+
var fs = require('./file');
|
3
|
+
var system = require('./system');
|
4
|
+
|
5
|
+
/*** analyze
|
6
|
+
*/
|
7
|
+
exports.analyze = function (analysis, sortedPackages) {
|
8
|
+
var javaPaths = analysis.javaPaths = []
|
9
|
+
sortedPackages.forEach(function (packageData) {
|
10
|
+
/* migration */
|
11
|
+
if (packageData.jars)
|
12
|
+
packageData.java = packageData.jars;
|
13
|
+
/* /migration */
|
14
|
+
if (typeof packageData.java == 'string')
|
15
|
+
packageData.java = [packageData.java];
|
16
|
+
if (!packageData.java)
|
17
|
+
packageData.java = [];
|
18
|
+
for (var i = 0; i < packageData.java.length; i++)
|
19
|
+
packageData.java[i] = packageData.directory.resolve(packageData.java[i]);
|
20
|
+
/* new approach */
|
21
|
+
var jarsDirectory = packageData.directory.join('jars');
|
22
|
+
if (jarsDirectory.isDirectory()) {
|
23
|
+
jarsDirectory.listPaths().forEach(function (jarDirectory) {
|
24
|
+
packageData.java.push(jarDirectory);
|
25
|
+
});
|
26
|
+
}
|
27
|
+
javaPaths.unshift.apply(javaPaths, packageData.java);
|
28
|
+
});
|
29
|
+
};
|
30
|
+
|
31
|
+
/*** synthesize
|
32
|
+
*/
|
33
|
+
exports.synthesize = function (analysis) {
|
34
|
+
exports.addJavaPaths(analysis.javaPaths);
|
35
|
+
};
|
36
|
+
|
37
|
+
var loader = Packages.java.lang.ClassLoader.getSystemClassLoader();
|
38
|
+
// so that replacing Packages does not implicitly dispose of the
|
39
|
+
// only means of creating new Packages objects.
|
40
|
+
|
41
|
+
/*** addJavaPaths
|
42
|
+
*/
|
43
|
+
exports.addJavaPaths = function addJavaPaths(javaPaths) {
|
44
|
+
if (!javaPaths || javaPaths.length === 0)
|
45
|
+
return;
|
46
|
+
// after reinstalling Packages once, the Packages object
|
47
|
+
// is no longer a Packages constructor function.
|
48
|
+
// If that's the case, abandone hope.
|
49
|
+
if (typeof Packages == "object" || system.appEngine)
|
50
|
+
return;
|
51
|
+
|
52
|
+
/* set up jar loader */
|
53
|
+
var urls = Packages.java.lang.reflect.Array.newInstance(java.net.URL, javaPaths.length);
|
54
|
+
for (var i = 0; i < javaPaths.length; i++) {
|
55
|
+
urls[i] = new Packages.java.net.URL('file://' + javaPaths[i]);
|
56
|
+
};
|
57
|
+
loader = new Packages.java.net.URLClassLoader(urls, loader);
|
58
|
+
|
59
|
+
try {
|
60
|
+
/* intall jar loader */
|
61
|
+
//Packages.java.lang.Thread.currentThread().setContextClassLoader(loader);
|
62
|
+
var context = Packages.org.mozilla.javascript.Context.getCurrentContext();
|
63
|
+
context.setApplicationClassLoader(loader);
|
64
|
+
// must explicitly be made global when each module has it's own scope
|
65
|
+
global.Packages = new Packages(loader);
|
66
|
+
installed = true;
|
67
|
+
} catch (e) {
|
68
|
+
print("warning: couldn't install jar loader: " + e);
|
69
|
+
}
|
70
|
+
};
|
71
|
+
|
@@ -0,0 +1,70 @@
|
|
1
|
+
|
2
|
+
/* shared, sealed global context */
|
3
|
+
|
4
|
+
var blacklist = [
|
5
|
+
'Packages',
|
6
|
+
'java',
|
7
|
+
'javax',
|
8
|
+
'org',
|
9
|
+
'net',
|
10
|
+
'com',
|
11
|
+
'edu',
|
12
|
+
'JavaAdapter',
|
13
|
+
'JavaImporter',
|
14
|
+
'getClass'
|
15
|
+
];
|
16
|
+
|
17
|
+
var whitelist = [
|
18
|
+
'Array',
|
19
|
+
'Boolean',
|
20
|
+
'Date',
|
21
|
+
'Error',
|
22
|
+
'EvalError',
|
23
|
+
'Function',
|
24
|
+
'Math',
|
25
|
+
'Number',
|
26
|
+
'Object',
|
27
|
+
'RangeError',
|
28
|
+
'ReferenceError',
|
29
|
+
'InternalError',
|
30
|
+
'RegExp',
|
31
|
+
'String',
|
32
|
+
'SyntaxError',
|
33
|
+
'TypeError',
|
34
|
+
'URIError',
|
35
|
+
'Infinity',
|
36
|
+
'NaN',
|
37
|
+
'undefined',
|
38
|
+
'decodeURI',
|
39
|
+
'decodeURIComponent',
|
40
|
+
'encodeURI',
|
41
|
+
'encodeURIComponent',
|
42
|
+
'eval',
|
43
|
+
'isFinite',
|
44
|
+
'isNaN',
|
45
|
+
'parseFloat',
|
46
|
+
'parseInt'
|
47
|
+
];
|
48
|
+
|
49
|
+
var context = new Packages.org.mozilla.javascript.Context();
|
50
|
+
var global = context.initStandardObjects(null, true);
|
51
|
+
for (var i = 0; i < blacklist.length; i++)
|
52
|
+
delete global[blacklist[i]];
|
53
|
+
seal(global);
|
54
|
+
|
55
|
+
|
56
|
+
/* create module factories */
|
57
|
+
|
58
|
+
exports.evaluate = function (text, id) {
|
59
|
+
// verify that the script is a program by compiling it as such
|
60
|
+
context.compileString(text, id, 1, null);
|
61
|
+
// return a module factory function instead though.
|
62
|
+
return context.compileFunction(
|
63
|
+
global,
|
64
|
+
"function(require,exports,module,system,print){"+text+"}",
|
65
|
+
id,
|
66
|
+
1,
|
67
|
+
null
|
68
|
+
);
|
69
|
+
};
|
70
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
var io = require("./io");
|
3
|
+
|
4
|
+
exports.print = function () {
|
5
|
+
exports.stdout.write(Array.prototype.join.call(arguments, ' ') + "\n").flush();
|
6
|
+
};
|
7
|
+
|
8
|
+
exports.stdin = new io.TextInputStream(new io.IO(Packages.java.lang.System['in'], null));
|
9
|
+
exports.stdout = new io.TextOutputStream(new io.IO(null, Packages.java.lang.System.out));
|
10
|
+
exports.stderr = new io.TextOutputStream(new io.IO(null, Packages.java.lang.System.err));
|
11
|
+
|
12
|
+
exports.args = global.arguments || [];
|
13
|
+
exports.originalArgs = exports.args.slice(0);
|
14
|
+
|
15
|
+
exports.env = {};
|
16
|
+
|
17
|
+
var env = Packages.java.lang.System.getenv(),
|
18
|
+
keyIterator = env.keySet().iterator();
|
19
|
+
while (keyIterator.hasNext()) {
|
20
|
+
var key = keyIterator.next();
|
21
|
+
exports.env[String(key)] = String(env.get(key));
|
22
|
+
}
|
23
|
+
|
24
|
+
var securityManager = Packages.java.lang.System.getSecurityManager()
|
25
|
+
if (securityManager) {
|
26
|
+
var securityManagerName = securityManager.getClass().getName();
|
27
|
+
if (/^com.google.app(engine|hosting)./.test(securityManagerName))
|
28
|
+
exports.appEngine = true;
|
29
|
+
if (/^com.google.apphosting\./.test(securityManagerName))
|
30
|
+
exports.appEngineHosting = true;
|
31
|
+
}
|
32
|
+
|
33
|
+
exports.fs = require('./file');
|
34
|
+
|
35
|
+
// default logger
|
36
|
+
var Logger = require("./logger").Logger;
|
37
|
+
exports.log = new Logger(exports.stderr);
|
38
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
exports.createEnvironment = function(){
|
2
|
+
var workerQueue,
|
3
|
+
workerGlobal = new org.mozilla.javascript.tools.shell.Global();
|
4
|
+
javaWorkerGlobal = new org.mozilla.javascript.NativeJavaObject(global, workerGlobal, null);
|
5
|
+
javaWorkerGlobal.init(org.mozilla.javascript.tools.shell.Main.shellContextFactory);
|
6
|
+
workerGlobal.NARWHAL_HOME = system.prefix;
|
7
|
+
workerGlobal.NARWHAL_ENGINE_HOME = system.enginePrefix;
|
8
|
+
// get the path to the bootstrap.js file
|
9
|
+
var bootstrapPath = system.enginePrefix + "/bootstrap.js";
|
10
|
+
org.mozilla.javascript.tools.shell.Main.processFile(
|
11
|
+
org.mozilla.javascript.Context.enter(),
|
12
|
+
workerGlobal,
|
13
|
+
bootstrapPath);
|
14
|
+
return workerGlobal;
|
15
|
+
};
|
16
|
+
|
17
|
+
exports.spawn = function(functionToRun, threadName){
|
18
|
+
(new java.lang.Thread(functionToRun, threadName)).start();
|
19
|
+
};
|
20
|
+
|
21
|
+
exports.defaultErrorReporter = function(e){
|
22
|
+
print((e.rhinoException && e.rhinoException.printStackTrace()) || (e.name + ": " + e.message));
|
23
|
+
};
|
@@ -0,0 +1,78 @@
|
|
1
|
+
|
2
|
+
var io = require('io');
|
3
|
+
|
4
|
+
var javaZip = Packages.java.util.zip;
|
5
|
+
var JavaZipFile = javaZip.ZipFile;
|
6
|
+
var JavaZipEntry = javaZip.ZipEntry;
|
7
|
+
|
8
|
+
exports.unzip = function (source, target) {
|
9
|
+
if (!target)
|
10
|
+
target = system.fs.path(source).absolute().dirname();
|
11
|
+
target = system.fs.path(target);
|
12
|
+
return new exports.Unzip(source).forEach(function (entry) {
|
13
|
+
var targetPath = target.join(entry.getName());
|
14
|
+
if (entry.isDirectory())
|
15
|
+
return;
|
16
|
+
targetPath.dirname().mkdirs();
|
17
|
+
targetPath.write(entry.read('b'), 'b');
|
18
|
+
});
|
19
|
+
};
|
20
|
+
|
21
|
+
exports.Unzip = function (path) {
|
22
|
+
this._javaZipFile = JavaZipFile(path);
|
23
|
+
};
|
24
|
+
|
25
|
+
exports.Unzip.prototype.iterator = function () {
|
26
|
+
var self = this;
|
27
|
+
var enumeration = this._javaZipFile.entries();
|
28
|
+
return {
|
29
|
+
next: function () {
|
30
|
+
if (!enumeration.hasMoreElements())
|
31
|
+
throw new StopIteration();
|
32
|
+
return new exports.Entry(
|
33
|
+
self._javaZipFile,
|
34
|
+
enumeration.nextElement()
|
35
|
+
);
|
36
|
+
}
|
37
|
+
};
|
38
|
+
};
|
39
|
+
|
40
|
+
exports.Unzip.prototype.forEach = function (block, context) {
|
41
|
+
var iterator = this.iterator();
|
42
|
+
var next;
|
43
|
+
while (true) {
|
44
|
+
try {
|
45
|
+
next = iterator.next();
|
46
|
+
} catch (exception) {
|
47
|
+
break;
|
48
|
+
}
|
49
|
+
block.call(context, next);
|
50
|
+
}
|
51
|
+
};
|
52
|
+
|
53
|
+
exports.Entry = function (javaZipFile, javaZipEntry) {
|
54
|
+
this._javaZipFile = javaZipFile;
|
55
|
+
this._javaZipEntry = javaZipEntry;
|
56
|
+
};
|
57
|
+
|
58
|
+
exports.Entry.prototype.getName = function () {
|
59
|
+
return String(this._javaZipEntry.getName());
|
60
|
+
};
|
61
|
+
|
62
|
+
exports.Entry.prototype.isDirectory = function () {
|
63
|
+
return Boolean(this._javaZipEntry.isDirectory());
|
64
|
+
};
|
65
|
+
|
66
|
+
exports.Entry.prototype.open = function (mode, options) {
|
67
|
+
// TODO mode and options negotiation
|
68
|
+
return new io.IO(this._javaZipFile.getInputStream(this._javaZipEntry));
|
69
|
+
};
|
70
|
+
|
71
|
+
exports.Entry.prototype.read = function () {
|
72
|
+
return this.open().read();
|
73
|
+
};
|
74
|
+
|
75
|
+
exports.Entry.prototype.copy = function (output, mode, options) {
|
76
|
+
return this.open().copy(output);
|
77
|
+
};
|
78
|
+
|