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.
Files changed (167) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +113 -0
  3. package/bin/zuzu +17 -0
  4. package/bin/zuzu-build-browser-bundle +57 -0
  5. package/bin/zuzu-generate-browser-stdlib +584 -0
  6. package/bin/zuzu-js +23 -0
  7. package/bin/zuzu-js-compile +152 -0
  8. package/bin/zuzu-js-electron +19 -0
  9. package/dist/zuzu-browser-worker.js +45574 -0
  10. package/dist/zuzu-browser.js +45362 -0
  11. package/lib/browser-bundle-entry.js +160 -0
  12. package/lib/browser-gui-renderer.js +387 -0
  13. package/lib/browser-runtime.js +167 -0
  14. package/lib/browser-worker-entry.js +413 -0
  15. package/lib/browser-ztests/runner.html +103 -0
  16. package/lib/browser-ztests/runner.js +369 -0
  17. package/lib/cli.js +350 -0
  18. package/lib/collections.js +367 -0
  19. package/lib/compiler.js +303 -0
  20. package/lib/electron/launcher.js +70 -0
  21. package/lib/electron/main.js +956 -0
  22. package/lib/electron/preload.js +80 -0
  23. package/lib/electron/renderer.html +122 -0
  24. package/lib/electron/renderer.js +24 -0
  25. package/lib/execution-metadata.js +18 -0
  26. package/lib/gui/dom-renderer.js +778 -0
  27. package/lib/host/browser-host.js +278 -0
  28. package/lib/host/capabilities.js +47 -0
  29. package/lib/host/electron-host.js +15 -0
  30. package/lib/host/node-host.js +74 -0
  31. package/lib/paths.js +150 -0
  32. package/lib/runtime-entrypoints.js +60 -0
  33. package/lib/runtime-helpers.js +886 -0
  34. package/lib/runtime.js +3529 -0
  35. package/lib/tap.js +37 -0
  36. package/lib/transpiler-new/ast.js +23 -0
  37. package/lib/transpiler-new/codegen.js +2455 -0
  38. package/lib/transpiler-new/errors.js +28 -0
  39. package/lib/transpiler-new/index.js +26 -0
  40. package/lib/transpiler-new/lexer.js +834 -0
  41. package/lib/transpiler-new/parser.js +2332 -0
  42. package/lib/transpiler-new/validate-bindings.js +326 -0
  43. package/lib/transpiler-utils.js +95 -0
  44. package/lib/transpiler.js +33 -0
  45. package/lib/zuzu.js +53 -0
  46. package/modules/javascript.js +193 -0
  47. package/modules/std/archive.js +603 -0
  48. package/modules/std/clib.js +338 -0
  49. package/modules/std/data/csv.js +1331 -0
  50. package/modules/std/data/json.js +531 -0
  51. package/modules/std/data/xml.js +441 -0
  52. package/modules/std/data/yaml.js +256 -0
  53. package/modules/std/db-worker.js +250 -0
  54. package/modules/std/db.js +664 -0
  55. package/modules/std/digest/_hash.js +443 -0
  56. package/modules/std/digest/md5.js +26 -0
  57. package/modules/std/digest/sha.js +72 -0
  58. package/modules/std/eval.js +10 -0
  59. package/modules/std/gui/objects.js +1519 -0
  60. package/modules/std/internals.js +571 -0
  61. package/modules/std/io/socks-worker.js +318 -0
  62. package/modules/std/io/socks.js +186 -0
  63. package/modules/std/io.js +475 -0
  64. package/modules/std/marshal/cbor.js +463 -0
  65. package/modules/std/marshal/graph.js +1624 -0
  66. package/modules/std/marshal.js +87 -0
  67. package/modules/std/math/bignum.js +91 -0
  68. package/modules/std/math.js +79 -0
  69. package/modules/std/net/dns.js +306 -0
  70. package/modules/std/net/http.js +820 -0
  71. package/modules/std/net/smtp.js +943 -0
  72. package/modules/std/net/url.js +109 -0
  73. package/modules/std/proc.js +602 -0
  74. package/modules/std/secure.js +3724 -0
  75. package/modules/std/string/base64.js +138 -0
  76. package/modules/std/string.js +299 -0
  77. package/modules/std/task.js +914 -0
  78. package/modules/std/time.js +579 -0
  79. package/modules/std/tui.js +188 -0
  80. package/modules/std/worker-thread.js +246 -0
  81. package/modules/std/worker.js +790 -0
  82. package/package.json +67 -0
  83. package/stdlib/modules/javascript.zzm +99 -0
  84. package/stdlib/modules/perl.zzm +105 -0
  85. package/stdlib/modules/std/archive.zzm +132 -0
  86. package/stdlib/modules/std/cache/lru.zzm +174 -0
  87. package/stdlib/modules/std/clib.zzm +112 -0
  88. package/stdlib/modules/std/colour.zzm +220 -0
  89. package/stdlib/modules/std/config.zzm +818 -0
  90. package/stdlib/modules/std/data/cbor.zzm +497 -0
  91. package/stdlib/modules/std/data/csv.zzm +285 -0
  92. package/stdlib/modules/std/data/ini.zzm +472 -0
  93. package/stdlib/modules/std/data/json/schema/core.zzm +573 -0
  94. package/stdlib/modules/std/data/json/schema/format.zzm +581 -0
  95. package/stdlib/modules/std/data/json/schema/model.zzm +255 -0
  96. package/stdlib/modules/std/data/json/schema/output.zzm +272 -0
  97. package/stdlib/modules/std/data/json/schema/relative_pointer.zzm +299 -0
  98. package/stdlib/modules/std/data/json/schema/validation.zzm +1503 -0
  99. package/stdlib/modules/std/data/json/schema.zzm +306 -0
  100. package/stdlib/modules/std/data/json.zzm +102 -0
  101. package/stdlib/modules/std/data/kdl/json.zzm +460 -0
  102. package/stdlib/modules/std/data/kdl/xml.zzm +387 -0
  103. package/stdlib/modules/std/data/kdl.zzm +1631 -0
  104. package/stdlib/modules/std/data/toml.zzm +756 -0
  105. package/stdlib/modules/std/data/toon.zzm +1017 -0
  106. package/stdlib/modules/std/data/xml/escape.zzm +156 -0
  107. package/stdlib/modules/std/data/xml.zzm +276 -0
  108. package/stdlib/modules/std/data/yaml.zzm +94 -0
  109. package/stdlib/modules/std/db.zzm +173 -0
  110. package/stdlib/modules/std/defer.zzm +75 -0
  111. package/stdlib/modules/std/digest/crc32.zzm +196 -0
  112. package/stdlib/modules/std/digest/md5.zzm +54 -0
  113. package/stdlib/modules/std/digest/sha.zzm +83 -0
  114. package/stdlib/modules/std/dump.zzm +317 -0
  115. package/stdlib/modules/std/eval.zzm +63 -0
  116. package/stdlib/modules/std/getopt.zzm +432 -0
  117. package/stdlib/modules/std/gui/dialogue.zzm +592 -0
  118. package/stdlib/modules/std/gui/objects.zzm +123 -0
  119. package/stdlib/modules/std/gui.zzm +1914 -0
  120. package/stdlib/modules/std/internals.zzm +139 -0
  121. package/stdlib/modules/std/io/socks.zzm +139 -0
  122. package/stdlib/modules/std/io.zzm +157 -0
  123. package/stdlib/modules/std/lingua/en.zzm +347 -0
  124. package/stdlib/modules/std/log.zzm +169 -0
  125. package/stdlib/modules/std/mail.zzm +2726 -0
  126. package/stdlib/modules/std/marshal.zzm +138 -0
  127. package/stdlib/modules/std/math/bignum.zzm +98 -0
  128. package/stdlib/modules/std/math/range.zzm +116 -0
  129. package/stdlib/modules/std/math/roman.zzm +156 -0
  130. package/stdlib/modules/std/math.zzm +141 -0
  131. package/stdlib/modules/std/net/dns.zzm +93 -0
  132. package/stdlib/modules/std/net/http.zzm +278 -0
  133. package/stdlib/modules/std/net/smtp.zzm +257 -0
  134. package/stdlib/modules/std/net/url.zzm +69 -0
  135. package/stdlib/modules/std/path/jsonpointer.zzm +526 -0
  136. package/stdlib/modules/std/path/kdl.zzm +1003 -0
  137. package/stdlib/modules/std/path/simple.zzm +520 -0
  138. package/stdlib/modules/std/path/z/context.zzm +147 -0
  139. package/stdlib/modules/std/path/z/evaluate.zzm +549 -0
  140. package/stdlib/modules/std/path/z/functions.zzm +874 -0
  141. package/stdlib/modules/std/path/z/lexer.zzm +490 -0
  142. package/stdlib/modules/std/path/z/node.zzm +1455 -0
  143. package/stdlib/modules/std/path/z/operators.zzm +445 -0
  144. package/stdlib/modules/std/path/z/parser.zzm +359 -0
  145. package/stdlib/modules/std/path/z.zzm +403 -0
  146. package/stdlib/modules/std/path/zz/functions.zzm +828 -0
  147. package/stdlib/modules/std/path/zz/operators.zzm +1036 -0
  148. package/stdlib/modules/std/path/zz.zzm +100 -0
  149. package/stdlib/modules/std/proc.zzm +155 -0
  150. package/stdlib/modules/std/result.zzm +149 -0
  151. package/stdlib/modules/std/secure.zzm +606 -0
  152. package/stdlib/modules/std/string/base64.zzm +66 -0
  153. package/stdlib/modules/std/string/quoted_printable.zzm +485 -0
  154. package/stdlib/modules/std/string.zzm +179 -0
  155. package/stdlib/modules/std/task.zzm +221 -0
  156. package/stdlib/modules/std/template/z.zzm +531 -0
  157. package/stdlib/modules/std/template/zz.zzm +62 -0
  158. package/stdlib/modules/std/time.zzm +188 -0
  159. package/stdlib/modules/std/tui.zzm +89 -0
  160. package/stdlib/modules/std/uuid.zzm +223 -0
  161. package/stdlib/modules/std/web/session.zzm +388 -0
  162. package/stdlib/modules/std/web/static.zzm +329 -0
  163. package/stdlib/modules/std/web.zzm +1942 -0
  164. package/stdlib/modules/std/worker.zzm +202 -0
  165. package/stdlib/modules/std/zuzuzoo.zzm +3960 -0
  166. package/stdlib/modules/test/more.zzm +528 -0
  167. package/stdlib/modules/test/parser.zzm +209 -0
package/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ zuzu-js is free software; you may redistribute it and/or modify it
2
+ under the terms of either the Artistic License 1.0 or the GNU General
3
+ Public License version 2 or later.
4
+
5
+ SPDX-License-Identifier: Artistic-1.0 OR GPL-2.0-or-later
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"