zuzu-js 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +5 -0
- package/README.md +113 -0
- package/bin/zuzu +17 -0
- package/bin/zuzu-build-browser-bundle +57 -0
- package/bin/zuzu-generate-browser-stdlib +584 -0
- package/bin/zuzu-js +23 -0
- package/bin/zuzu-js-compile +152 -0
- package/bin/zuzu-js-electron +19 -0
- package/dist/zuzu-browser-worker.js +45574 -0
- package/dist/zuzu-browser.js +45362 -0
- package/lib/browser-bundle-entry.js +160 -0
- package/lib/browser-gui-renderer.js +387 -0
- package/lib/browser-runtime.js +167 -0
- package/lib/browser-worker-entry.js +413 -0
- package/lib/browser-ztests/runner.html +103 -0
- package/lib/browser-ztests/runner.js +369 -0
- package/lib/cli.js +350 -0
- package/lib/collections.js +367 -0
- package/lib/compiler.js +303 -0
- package/lib/electron/launcher.js +70 -0
- package/lib/electron/main.js +956 -0
- package/lib/electron/preload.js +80 -0
- package/lib/electron/renderer.html +122 -0
- package/lib/electron/renderer.js +24 -0
- package/lib/execution-metadata.js +18 -0
- package/lib/gui/dom-renderer.js +778 -0
- package/lib/host/browser-host.js +278 -0
- package/lib/host/capabilities.js +47 -0
- package/lib/host/electron-host.js +15 -0
- package/lib/host/node-host.js +74 -0
- package/lib/paths.js +150 -0
- package/lib/runtime-entrypoints.js +60 -0
- package/lib/runtime-helpers.js +886 -0
- package/lib/runtime.js +3529 -0
- package/lib/tap.js +37 -0
- package/lib/transpiler-new/ast.js +23 -0
- package/lib/transpiler-new/codegen.js +2455 -0
- package/lib/transpiler-new/errors.js +28 -0
- package/lib/transpiler-new/index.js +26 -0
- package/lib/transpiler-new/lexer.js +834 -0
- package/lib/transpiler-new/parser.js +2332 -0
- package/lib/transpiler-new/validate-bindings.js +326 -0
- package/lib/transpiler-utils.js +95 -0
- package/lib/transpiler.js +33 -0
- package/lib/zuzu.js +53 -0
- package/modules/javascript.js +193 -0
- package/modules/std/archive.js +603 -0
- package/modules/std/clib.js +338 -0
- package/modules/std/data/csv.js +1331 -0
- package/modules/std/data/json.js +531 -0
- package/modules/std/data/xml.js +441 -0
- package/modules/std/data/yaml.js +256 -0
- package/modules/std/db-worker.js +250 -0
- package/modules/std/db.js +664 -0
- package/modules/std/digest/_hash.js +443 -0
- package/modules/std/digest/md5.js +26 -0
- package/modules/std/digest/sha.js +72 -0
- package/modules/std/eval.js +10 -0
- package/modules/std/gui/objects.js +1519 -0
- package/modules/std/internals.js +571 -0
- package/modules/std/io/socks-worker.js +318 -0
- package/modules/std/io/socks.js +186 -0
- package/modules/std/io.js +475 -0
- package/modules/std/marshal/cbor.js +463 -0
- package/modules/std/marshal/graph.js +1624 -0
- package/modules/std/marshal.js +87 -0
- package/modules/std/math/bignum.js +91 -0
- package/modules/std/math.js +79 -0
- package/modules/std/net/dns.js +306 -0
- package/modules/std/net/http.js +820 -0
- package/modules/std/net/smtp.js +943 -0
- package/modules/std/net/url.js +109 -0
- package/modules/std/proc.js +602 -0
- package/modules/std/secure.js +3724 -0
- package/modules/std/string/base64.js +138 -0
- package/modules/std/string.js +299 -0
- package/modules/std/task.js +914 -0
- package/modules/std/time.js +579 -0
- package/modules/std/tui.js +188 -0
- package/modules/std/worker-thread.js +246 -0
- package/modules/std/worker.js +790 -0
- package/package.json +67 -0
- package/stdlib/modules/javascript.zzm +99 -0
- package/stdlib/modules/perl.zzm +105 -0
- package/stdlib/modules/std/archive.zzm +132 -0
- package/stdlib/modules/std/cache/lru.zzm +174 -0
- package/stdlib/modules/std/clib.zzm +112 -0
- package/stdlib/modules/std/colour.zzm +220 -0
- package/stdlib/modules/std/config.zzm +818 -0
- package/stdlib/modules/std/data/cbor.zzm +497 -0
- package/stdlib/modules/std/data/csv.zzm +285 -0
- package/stdlib/modules/std/data/ini.zzm +472 -0
- package/stdlib/modules/std/data/json/schema/core.zzm +573 -0
- package/stdlib/modules/std/data/json/schema/format.zzm +581 -0
- package/stdlib/modules/std/data/json/schema/model.zzm +255 -0
- package/stdlib/modules/std/data/json/schema/output.zzm +272 -0
- package/stdlib/modules/std/data/json/schema/relative_pointer.zzm +299 -0
- package/stdlib/modules/std/data/json/schema/validation.zzm +1503 -0
- package/stdlib/modules/std/data/json/schema.zzm +306 -0
- package/stdlib/modules/std/data/json.zzm +102 -0
- package/stdlib/modules/std/data/kdl/json.zzm +460 -0
- package/stdlib/modules/std/data/kdl/xml.zzm +387 -0
- package/stdlib/modules/std/data/kdl.zzm +1631 -0
- package/stdlib/modules/std/data/toml.zzm +756 -0
- package/stdlib/modules/std/data/toon.zzm +1017 -0
- package/stdlib/modules/std/data/xml/escape.zzm +156 -0
- package/stdlib/modules/std/data/xml.zzm +276 -0
- package/stdlib/modules/std/data/yaml.zzm +94 -0
- package/stdlib/modules/std/db.zzm +173 -0
- package/stdlib/modules/std/defer.zzm +75 -0
- package/stdlib/modules/std/digest/crc32.zzm +196 -0
- package/stdlib/modules/std/digest/md5.zzm +54 -0
- package/stdlib/modules/std/digest/sha.zzm +83 -0
- package/stdlib/modules/std/dump.zzm +317 -0
- package/stdlib/modules/std/eval.zzm +63 -0
- package/stdlib/modules/std/getopt.zzm +432 -0
- package/stdlib/modules/std/gui/dialogue.zzm +592 -0
- package/stdlib/modules/std/gui/objects.zzm +123 -0
- package/stdlib/modules/std/gui.zzm +1914 -0
- package/stdlib/modules/std/internals.zzm +139 -0
- package/stdlib/modules/std/io/socks.zzm +139 -0
- package/stdlib/modules/std/io.zzm +157 -0
- package/stdlib/modules/std/lingua/en.zzm +347 -0
- package/stdlib/modules/std/log.zzm +169 -0
- package/stdlib/modules/std/mail.zzm +2726 -0
- package/stdlib/modules/std/marshal.zzm +138 -0
- package/stdlib/modules/std/math/bignum.zzm +98 -0
- package/stdlib/modules/std/math/range.zzm +116 -0
- package/stdlib/modules/std/math/roman.zzm +156 -0
- package/stdlib/modules/std/math.zzm +141 -0
- package/stdlib/modules/std/net/dns.zzm +93 -0
- package/stdlib/modules/std/net/http.zzm +278 -0
- package/stdlib/modules/std/net/smtp.zzm +257 -0
- package/stdlib/modules/std/net/url.zzm +69 -0
- package/stdlib/modules/std/path/jsonpointer.zzm +526 -0
- package/stdlib/modules/std/path/kdl.zzm +1003 -0
- package/stdlib/modules/std/path/simple.zzm +520 -0
- package/stdlib/modules/std/path/z/context.zzm +147 -0
- package/stdlib/modules/std/path/z/evaluate.zzm +549 -0
- package/stdlib/modules/std/path/z/functions.zzm +874 -0
- package/stdlib/modules/std/path/z/lexer.zzm +490 -0
- package/stdlib/modules/std/path/z/node.zzm +1455 -0
- package/stdlib/modules/std/path/z/operators.zzm +445 -0
- package/stdlib/modules/std/path/z/parser.zzm +359 -0
- package/stdlib/modules/std/path/z.zzm +403 -0
- package/stdlib/modules/std/path/zz/functions.zzm +828 -0
- package/stdlib/modules/std/path/zz/operators.zzm +1036 -0
- package/stdlib/modules/std/path/zz.zzm +100 -0
- package/stdlib/modules/std/proc.zzm +155 -0
- package/stdlib/modules/std/result.zzm +149 -0
- package/stdlib/modules/std/secure.zzm +606 -0
- package/stdlib/modules/std/string/base64.zzm +66 -0
- package/stdlib/modules/std/string/quoted_printable.zzm +485 -0
- package/stdlib/modules/std/string.zzm +179 -0
- package/stdlib/modules/std/task.zzm +221 -0
- package/stdlib/modules/std/template/z.zzm +531 -0
- package/stdlib/modules/std/template/zz.zzm +62 -0
- package/stdlib/modules/std/time.zzm +188 -0
- package/stdlib/modules/std/tui.zzm +89 -0
- package/stdlib/modules/std/uuid.zzm +223 -0
- package/stdlib/modules/std/web/session.zzm +388 -0
- package/stdlib/modules/std/web/static.zzm +329 -0
- package/stdlib/modules/std/web.zzm +1942 -0
- package/stdlib/modules/std/worker.zzm +202 -0
- package/stdlib/modules/std/zuzuzoo.zzm +3960 -0
- package/stdlib/modules/test/more.zzm +528 -0
- package/stdlib/modules/test/parser.zzm +209 -0
package/LICENSE
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# ZuzuScript JavaScript Runtime
|
|
2
|
+
|
|
3
|
+
`zuzu-js` is the JavaScript implementation of ZuzuScript. It provides a
|
|
4
|
+
Node command-line runtime, a browser bundle, an Electron launcher, and a
|
|
5
|
+
compiler that can emit standalone JavaScript from ZuzuScript source.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install -g zuzu-js
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The global npm bin directory must be in your `PATH`. After installation,
|
|
14
|
+
the package provides these commands:
|
|
15
|
+
|
|
16
|
+
- `zuzu`: dispatches to the first available ZuzuScript implementation in
|
|
17
|
+
`PATH`, checking `zuzu-rust`, `zuzu.pl`, then `zuzu-js`.
|
|
18
|
+
- `zuzu-js`: runs ZuzuScript with the JavaScript runtime.
|
|
19
|
+
- `zuzu-js-compile`: compiles a ZuzuScript program into standalone
|
|
20
|
+
JavaScript.
|
|
21
|
+
- `zuzu-js-electron`: runs GUI-oriented ZuzuScript programs through
|
|
22
|
+
Electron.
|
|
23
|
+
|
|
24
|
+
Set `ZUZU` to force the dispatcher to use a specific implementation:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
ZUZU=zuzu-js zuzu -e 'say("Hello from ZuzuScript");'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Command Line
|
|
31
|
+
|
|
32
|
+
Run inline source:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
zuzu-js -e 'say("Hello, world");'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Run a script:
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
zuzu-js path/to/script.zzs
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Compile a script:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
zuzu-js-compile path/to/script.zzs -o script.js
|
|
48
|
+
node script.js
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Use `zuzu` when you want the first installed ZuzuScript implementation
|
|
52
|
+
available on your `PATH`:
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
zuzu -e 'from std/string import kebab; say kebab("hello world");'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Browser Bundle
|
|
59
|
+
|
|
60
|
+
The package includes prebuilt browser assets:
|
|
61
|
+
|
|
62
|
+
- `dist/zuzu-browser.js`
|
|
63
|
+
- `dist/zuzu-browser-worker.js`
|
|
64
|
+
|
|
65
|
+
Load the browser bundle from an installed package, copied asset, or your
|
|
66
|
+
application bundler:
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<script src="dist/zuzu-browser.js"></script>
|
|
70
|
+
<script>
|
|
71
|
+
const runtime = ZuzuBrowser.createBrowserRuntime();
|
|
72
|
+
const result = runtime.zuzu_eval('say("Hello from the browser");');
|
|
73
|
+
console.log(result.stdout);
|
|
74
|
+
</script>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The package also contains internal browser bundle helper scripts under
|
|
78
|
+
`bin/`, but they are not installed as global npm commands.
|
|
79
|
+
|
|
80
|
+
## JavaScript API
|
|
81
|
+
|
|
82
|
+
```js
|
|
83
|
+
const { createNodeRuntime } = require('zuzu-js');
|
|
84
|
+
|
|
85
|
+
const runtime = createNodeRuntime();
|
|
86
|
+
runtime.runSource('say("Hello from JavaScript");').then((result) => {
|
|
87
|
+
process.stdout.write(result.stdout);
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The public API is still evolving. The command-line tools and bundled
|
|
92
|
+
runtime entry points are the most stable interfaces.
|
|
93
|
+
|
|
94
|
+
## Standard Library
|
|
95
|
+
|
|
96
|
+
The npm package includes JavaScript-backed runtime modules under
|
|
97
|
+
`modules/` and pure ZuzuScript standard-library modules under
|
|
98
|
+
`stdlib/modules/`. Pure ZuzuScript modules are loaded, parsed, and
|
|
99
|
+
evaluated through normal ZuzuScript runtime semantics.
|
|
100
|
+
|
|
101
|
+
## Status
|
|
102
|
+
|
|
103
|
+
This is an early npm release of the JavaScript runtime. It is useful for
|
|
104
|
+
running and compiling ZuzuScript programs, but language and standard
|
|
105
|
+
library compatibility are still under active development.
|
|
106
|
+
|
|
107
|
+
## Licence
|
|
108
|
+
|
|
109
|
+
`zuzu-js` is free software; you may redistribute it and/or modify it
|
|
110
|
+
under the terms of either the Artistic License 1.0 or the GNU General
|
|
111
|
+
Public License version 2 or later.
|
|
112
|
+
|
|
113
|
+
SPDX-License-Identifier: `Artistic-1.0 OR GPL-2.0-or-later`
|
package/bin/zuzu
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
if [ "${ZUZU+x}" = x ] && [ -n "$ZUZU" ]; then
|
|
5
|
+
export ZUZU
|
|
6
|
+
exec "$ZUZU" "$@"
|
|
7
|
+
fi
|
|
8
|
+
|
|
9
|
+
for ZUZU in zuzu-rust zuzu.pl zuzu-js; do
|
|
10
|
+
if command -v "$ZUZU" >/dev/null 2>&1; then
|
|
11
|
+
export ZUZU
|
|
12
|
+
exec "$ZUZU" "$@"
|
|
13
|
+
fi
|
|
14
|
+
done
|
|
15
|
+
|
|
16
|
+
echo "zuzu: no ZuzuScript implementation found in PATH" >&2
|
|
17
|
+
exit 127
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
5
|
+
ROOT_DIR="$( cd -- "${SCRIPT_DIR}/.." >/dev/null 2>&1 && pwd )"
|
|
6
|
+
|
|
7
|
+
for arg in "$@"; do
|
|
8
|
+
if [[ "${arg}" == "--help" ]]; then
|
|
9
|
+
printf '%s\n' \
|
|
10
|
+
"Usage: zuzu-build-browser-bundle [OPTIONS]" \
|
|
11
|
+
"" \
|
|
12
|
+
"Build dist/zuzu-browser.js and zuzu-browser-worker.js." \
|
|
13
|
+
"" \
|
|
14
|
+
"Options:" \
|
|
15
|
+
" -M DIR Add a pure ZuzuScript module directory." \
|
|
16
|
+
" -MDIR Add a pure ZuzuScript module directory." \
|
|
17
|
+
" --include MODULE Include an additional module." \
|
|
18
|
+
" --include=MODULE Include an additional module." \
|
|
19
|
+
" --exclude MODULE Exclude a bundled module." \
|
|
20
|
+
" --exclude=MODULE Exclude a bundled module." \
|
|
21
|
+
" --help Show this help text."
|
|
22
|
+
exit 0
|
|
23
|
+
fi
|
|
24
|
+
done
|
|
25
|
+
|
|
26
|
+
mkdir -p "${ROOT_DIR}/dist"
|
|
27
|
+
GEN_DIR="$( mktemp -d "${TMPDIR:-/tmp}/zuzu-browser-build.XXXXXX" )"
|
|
28
|
+
trap 'rm -rf "${GEN_DIR}"' EXIT
|
|
29
|
+
node "${ROOT_DIR}/bin/zuzu-generate-browser-stdlib" "${GEN_DIR}" "$@"
|
|
30
|
+
|
|
31
|
+
npx --yes esbuild \
|
|
32
|
+
"${GEN_DIR}/browser-worker-entry.generated.js" \
|
|
33
|
+
--bundle \
|
|
34
|
+
--format=iife \
|
|
35
|
+
--platform=browser \
|
|
36
|
+
--external:node:* \
|
|
37
|
+
--external:./host/node-host \
|
|
38
|
+
--external:./host/node-host.js \
|
|
39
|
+
--outfile="${ROOT_DIR}/dist/zuzu-browser-worker.js"
|
|
40
|
+
|
|
41
|
+
node -e 'const fs = require("node:fs"); const source = fs.readFileSync(process.argv[1], "utf8"); fs.writeFileSync(process.argv[2], `"use strict";\n\nmodule.exports = {\n\tbrowserWorkerSource: ${JSON.stringify(source)},\n};\n`, "utf8");' \
|
|
42
|
+
"${ROOT_DIR}/dist/zuzu-browser-worker.js" \
|
|
43
|
+
"${GEN_DIR}/browser-worker-source.generated.js"
|
|
44
|
+
|
|
45
|
+
npx --yes esbuild \
|
|
46
|
+
"${GEN_DIR}/browser-bundle-entry.generated.js" \
|
|
47
|
+
--bundle \
|
|
48
|
+
--format=iife \
|
|
49
|
+
--global-name=ZuzuBrowser \
|
|
50
|
+
--platform=browser \
|
|
51
|
+
--external:node:* \
|
|
52
|
+
--external:./host/node-host \
|
|
53
|
+
--external:./host/node-host.js \
|
|
54
|
+
--outfile="${ROOT_DIR}/dist/zuzu-browser.js"
|
|
55
|
+
|
|
56
|
+
echo "Built ${ROOT_DIR}/dist/zuzu-browser.js"
|
|
57
|
+
echo "Built ${ROOT_DIR}/dist/zuzu-browser-worker.js"
|