diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml
new file mode 100644
index 0000000..5ad8548
--- /dev/null
+++ b/.github/workflows/deploy.yaml
@@ -0,0 +1,50 @@
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - 'main'
+
+defaults:
+ run:
+ working-directory: belalang_web
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ environment: production
+ steps:
+ - name: checkout
+ uses: actions/checkout@v4
+
+ - name: install node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 21
+
+ - name: install wasm-pack
+ run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
+
+ - name: build wasm
+ run: wasm-pack build --release
+
+ - name: install pnpm
+ uses: pnpm/action-setup@v4
+ with:
+ version: 9
+ run_install: false
+
+ - name: install dependencies
+ run: pnpm install
+
+ - name: build project
+ run: pnpm build
+
+ - name: publish to cloudflare pages
+ uses: cloudflare/pages-action@v1
+ with:
+ apiToken: ${{ secrets.CF_API_TOKEN }}
+ accountId: ${{ secrets.CF_ACCOUNT_ID }}
+ projectName: ${{ secrets.CF_PROJECT_NAME }}
+ directory: dist
+ workingDirectory: belalang_web
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d600b6c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,25 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..7ad5c4a
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,169 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "belalang_core"
+version = "0.1.0"
+source = "git+https://github.com/secona/belalang?rev=678d9ade46d66eb8259083324cfea584cb7a2f25#678d9ade46d66eb8259083324cfea584cb7a2f25"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "belalang_eval"
+version = "0.1.0"
+source = "git+https://github.com/secona/belalang?rev=678d9ade46d66eb8259083324cfea584cb7a2f25#678d9ade46d66eb8259083324cfea584cb7a2f25"
+dependencies = [
+ "belalang_core",
+ "lazy_static",
+ "thiserror",
+]
+
+[[package]]
+name = "belalang_playground"
+version = "0.1.0"
+dependencies = [
+ "belalang_core",
+ "belalang_eval",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "log"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..00a14e8
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "belalang_playground"
+version = "0.1.0"
+edition = "2021"
+publish = false
+license = "Apache-2.0"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+belalang_core = { git = "https://github.com/secona/belalang", rev = "678d9ade46d66eb8259083324cfea584cb7a2f25" }
+belalang_eval = { git = "https://github.com/secona/belalang", rev = "678d9ade46d66eb8259083324cfea584cb7a2f25" }
+wasm-bindgen = "0.2.92"
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e9d074d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2024 Muhammad Vito Secona
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..58d35b3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+ Belalang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..c35ece8
--- /dev/null
+++ b/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "belalang-playground",
+ "private": true,
+ "license": "Apache-2.0",
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "build:rs": "wasm-pack build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.16.2",
+ "@codemirror/commands": "^6.6.0",
+ "@codemirror/language": "^6.10.2",
+ "@codemirror/state": "^6.4.1",
+ "@codemirror/view": "^6.28.0",
+ "rs": "file:pkg"
+ },
+ "devDependencies": {
+ "typescript": "^5.2.2",
+ "vite": "^5.2.0",
+ "vite-plugin-top-level-await": "^1.4.1",
+ "vite-plugin-wasm": "^3.3.0"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..61fc402
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,777 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@codemirror/autocomplete':
+ specifier: ^6.16.2
+ version: 6.16.2(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.0)(@lezer/common@1.2.1)
+ '@codemirror/commands':
+ specifier: ^6.6.0
+ version: 6.6.0
+ '@codemirror/language':
+ specifier: ^6.10.2
+ version: 6.10.2
+ '@codemirror/state':
+ specifier: ^6.4.1
+ version: 6.4.1
+ '@codemirror/view':
+ specifier: ^6.28.0
+ version: 6.28.0
+ rs:
+ specifier: file:pkg
+ version: belalang_web@file:pkg
+ devDependencies:
+ typescript:
+ specifier: ^5.2.2
+ version: 5.4.5
+ vite:
+ specifier: ^5.2.0
+ version: 5.2.13
+ vite-plugin-top-level-await:
+ specifier: ^1.4.1
+ version: 1.4.1(rollup@4.18.0)(vite@5.2.13)
+ vite-plugin-wasm:
+ specifier: ^3.3.0
+ version: 3.3.0(vite@5.2.13)
+
+packages:
+
+ '@codemirror/autocomplete@6.16.2':
+ resolution: {integrity: sha512-MjfDrHy0gHKlPWsvSsikhO1+BOh+eBHNgfH1OXs1+DAf30IonQldgMM3kxLDTG9ktE7kDLaA1j/l7KMPA4KNfw==}
+ peerDependencies:
+ '@codemirror/language': ^6.0.0
+ '@codemirror/state': ^6.0.0
+ '@codemirror/view': ^6.0.0
+ '@lezer/common': ^1.0.0
+
+ '@codemirror/commands@6.6.0':
+ resolution: {integrity: sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg==}
+
+ '@codemirror/language@6.10.2':
+ resolution: {integrity: sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==}
+
+ '@codemirror/state@6.4.1':
+ resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==}
+
+ '@codemirror/view@6.28.0':
+ resolution: {integrity: sha512-fo7CelaUDKWIyemw4b+J57cWuRkOu4SWCCPfNDkPvfWkGjM9D5racHQXr4EQeYCD6zEBIBxGCeaKkQo+ysl0gA==}
+
+ '@esbuild/aix-ppc64@0.20.2':
+ resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.20.2':
+ resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.20.2':
+ resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.20.2':
+ resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.20.2':
+ resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.20.2':
+ resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.20.2':
+ resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.20.2':
+ resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.20.2':
+ resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.20.2':
+ resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.20.2':
+ resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.20.2':
+ resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.20.2':
+ resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.20.2':
+ resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.20.2':
+ resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.20.2':
+ resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.20.2':
+ resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.20.2':
+ resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.20.2':
+ resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.20.2':
+ resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.20.2':
+ resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.20.2':
+ resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.20.2':
+ resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@lezer/common@1.2.1':
+ resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==}
+
+ '@lezer/highlight@1.2.0':
+ resolution: {integrity: sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==}
+
+ '@lezer/lr@1.4.1':
+ resolution: {integrity: sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw==}
+
+ '@rollup/plugin-virtual@3.0.2':
+ resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.18.0':
+ resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.18.0':
+ resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.18.0':
+ resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.18.0':
+ resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
+ resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.18.0':
+ resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.18.0':
+ resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.18.0':
+ resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
+ resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.18.0':
+ resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.18.0':
+ resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.18.0':
+ resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.18.0':
+ resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.18.0':
+ resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.18.0':
+ resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.18.0':
+ resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core-darwin-arm64@1.5.27':
+ resolution: {integrity: sha512-jyoygXBcUcwUya2BI7Uvl0jwcm4kd0RBDGGkWgcFAZmwucSuLT3EsbpWhOwlL3ACT4rpnRlvh+k8nJlq3+w2Aw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@swc/core-darwin-x64@1.5.27':
+ resolution: {integrity: sha512-eOC583D6b3MS9oODCcZUvAV7ajunjENAPVQL7aZaW+piERW+o4koZAiPlzFdMAUMj7UeVg+UN9sBBbTbJgruIA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@swc/core-linux-arm-gnueabihf@1.5.27':
+ resolution: {integrity: sha512-bMvX0yF7WYzn1K+s0JWJhvyA3OeZHVrdjka8eZ4LSeuLfC0ggJefo+klyeuN2szn/LYP6/3oByyrWNY8RSHB4w==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@swc/core-linux-arm64-gnu@1.5.27':
+ resolution: {integrity: sha512-KlkOcSPxrCqZTm4XrT/LT1o9gmyM2T6bw/hL6IwTYRBJg+sej4rc9iSfVRFZBfNuG3EVkFQSXxik+0yVOXR93Q==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-arm64-musl@1.5.27':
+ resolution: {integrity: sha512-EwdTt5qykxFXJu7kS+0X0Mp/IlwO8KJ6LVNak2+N8bt1J1q/nCdg1tRDOYQ1Z/MVa1Tm+lJ664Qs1y2NY2SDTw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-x64-gnu@1.5.27':
+ resolution: {integrity: sha512-RsBbxbiSNWLJ2jbAdITtv30J4eZw4O/JJ5zxYgWI54TdY7YrVsqIdzuX+ldximt+CYvO9irHm/mSr/IJY2YXrw==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-linux-x64-musl@1.5.27':
+ resolution: {integrity: sha512-XpRx0Kpy6JEi1WSMqUfR3k8hXLqNOkVqFcUfzvfQ4QNBX5Ek7ywh7WAxlPhCrFp+wAfNAqqUyRY1xZpLvRU51A==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-win32-arm64-msvc@1.5.27':
+ resolution: {integrity: sha512-pwSTUIokyIp+Ha1pur34qdYjxqL1QzhP/HM8anzsFs4yvV2LSI7c3qc4GWPNv2eQ9WiFXyo29uCEIRN6qig7wg==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@swc/core-win32-ia32-msvc@1.5.27':
+ resolution: {integrity: sha512-S0S6vqFscvmxPolwmpZvTRfTbYR+eGcyc0ge4x/+HcnBCm+m84rcGxmp3bBb1edNFaIV+X47BlGvvh85cJ4rkQ==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@swc/core-win32-x64-msvc@1.5.27':
+ resolution: {integrity: sha512-aem+BcNW42JPbvV6L3Jl3LLj6G80aYADzYenToYisy0Aop0XZAxL/0FbhV+xWORNFtIUKynNtaa1CK7w0UxehQ==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core@1.5.27':
+ resolution: {integrity: sha512-HmSSCBoUSRDFAd8aEB+WILkCofIp1c2OU6ZJWu1aCt6pijwQSkA4y51CTBcdvyy/+zX1W3cic7alfdhmQxxeEQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': '*'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+
+ '@swc/types@0.1.8':
+ resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==}
+
+ '@types/estree@1.0.5':
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+
+ belalang_web@file:pkg:
+ resolution: {directory: pkg, type: directory}
+
+ esbuild@0.20.2:
+ resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ rollup@4.18.0:
+ resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+ engines: {node: '>=0.10.0'}
+
+ style-mod@4.1.2:
+ resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
+
+ typescript@5.4.5:
+ resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ vite-plugin-top-level-await@1.4.1:
+ resolution: {integrity: sha512-hogbZ6yT7+AqBaV6lK9JRNvJDn4/IJvHLu6ET06arNfo0t2IsyCaon7el9Xa8OumH+ESuq//SDf8xscZFE0rWw==}
+ peerDependencies:
+ vite: '>=2.8'
+
+ vite-plugin-wasm@3.3.0:
+ resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==}
+ peerDependencies:
+ vite: ^2 || ^3 || ^4 || ^5
+
+ vite@5.2.13:
+ resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
+snapshots:
+
+ '@codemirror/autocomplete@6.16.2(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.0)(@lezer/common@1.2.1)':
+ dependencies:
+ '@codemirror/language': 6.10.2
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.28.0
+ '@lezer/common': 1.2.1
+
+ '@codemirror/commands@6.6.0':
+ dependencies:
+ '@codemirror/language': 6.10.2
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.28.0
+ '@lezer/common': 1.2.1
+
+ '@codemirror/language@6.10.2':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.28.0
+ '@lezer/common': 1.2.1
+ '@lezer/highlight': 1.2.0
+ '@lezer/lr': 1.4.1
+ style-mod: 4.1.2
+
+ '@codemirror/state@6.4.1': {}
+
+ '@codemirror/view@6.28.0':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ style-mod: 4.1.2
+ w3c-keyname: 2.2.8
+
+ '@esbuild/aix-ppc64@0.20.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/android-arm@0.20.2':
+ optional: true
+
+ '@esbuild/android-x64@0.20.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.20.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.20.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.20.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.20.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.20.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.20.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.20.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.20.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.20.2':
+ optional: true
+
+ '@lezer/common@1.2.1': {}
+
+ '@lezer/highlight@1.2.0':
+ dependencies:
+ '@lezer/common': 1.2.1
+
+ '@lezer/lr@1.4.1':
+ dependencies:
+ '@lezer/common': 1.2.1
+
+ '@rollup/plugin-virtual@3.0.2(rollup@4.18.0)':
+ optionalDependencies:
+ rollup: 4.18.0
+
+ '@rollup/rollup-android-arm-eabi@4.18.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.18.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.18.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.18.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.18.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.18.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.18.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.18.0':
+ optional: true
+
+ '@swc/core-darwin-arm64@1.5.27':
+ optional: true
+
+ '@swc/core-darwin-x64@1.5.27':
+ optional: true
+
+ '@swc/core-linux-arm-gnueabihf@1.5.27':
+ optional: true
+
+ '@swc/core-linux-arm64-gnu@1.5.27':
+ optional: true
+
+ '@swc/core-linux-arm64-musl@1.5.27':
+ optional: true
+
+ '@swc/core-linux-x64-gnu@1.5.27':
+ optional: true
+
+ '@swc/core-linux-x64-musl@1.5.27':
+ optional: true
+
+ '@swc/core-win32-arm64-msvc@1.5.27':
+ optional: true
+
+ '@swc/core-win32-ia32-msvc@1.5.27':
+ optional: true
+
+ '@swc/core-win32-x64-msvc@1.5.27':
+ optional: true
+
+ '@swc/core@1.5.27':
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.8
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.5.27
+ '@swc/core-darwin-x64': 1.5.27
+ '@swc/core-linux-arm-gnueabihf': 1.5.27
+ '@swc/core-linux-arm64-gnu': 1.5.27
+ '@swc/core-linux-arm64-musl': 1.5.27
+ '@swc/core-linux-x64-gnu': 1.5.27
+ '@swc/core-linux-x64-musl': 1.5.27
+ '@swc/core-win32-arm64-msvc': 1.5.27
+ '@swc/core-win32-ia32-msvc': 1.5.27
+ '@swc/core-win32-x64-msvc': 1.5.27
+
+ '@swc/counter@0.1.3': {}
+
+ '@swc/types@0.1.8':
+ dependencies:
+ '@swc/counter': 0.1.3
+
+ '@types/estree@1.0.5': {}
+
+ belalang_web@file:pkg: {}
+
+ esbuild@0.20.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.20.2
+ '@esbuild/android-arm': 0.20.2
+ '@esbuild/android-arm64': 0.20.2
+ '@esbuild/android-x64': 0.20.2
+ '@esbuild/darwin-arm64': 0.20.2
+ '@esbuild/darwin-x64': 0.20.2
+ '@esbuild/freebsd-arm64': 0.20.2
+ '@esbuild/freebsd-x64': 0.20.2
+ '@esbuild/linux-arm': 0.20.2
+ '@esbuild/linux-arm64': 0.20.2
+ '@esbuild/linux-ia32': 0.20.2
+ '@esbuild/linux-loong64': 0.20.2
+ '@esbuild/linux-mips64el': 0.20.2
+ '@esbuild/linux-ppc64': 0.20.2
+ '@esbuild/linux-riscv64': 0.20.2
+ '@esbuild/linux-s390x': 0.20.2
+ '@esbuild/linux-x64': 0.20.2
+ '@esbuild/netbsd-x64': 0.20.2
+ '@esbuild/openbsd-x64': 0.20.2
+ '@esbuild/sunos-x64': 0.20.2
+ '@esbuild/win32-arm64': 0.20.2
+ '@esbuild/win32-ia32': 0.20.2
+ '@esbuild/win32-x64': 0.20.2
+
+ fsevents@2.3.3:
+ optional: true
+
+ nanoid@3.3.7: {}
+
+ picocolors@1.0.1: {}
+
+ postcss@8.4.38:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
+
+ rollup@4.18.0:
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.18.0
+ '@rollup/rollup-android-arm64': 4.18.0
+ '@rollup/rollup-darwin-arm64': 4.18.0
+ '@rollup/rollup-darwin-x64': 4.18.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.18.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.18.0
+ '@rollup/rollup-linux-arm64-gnu': 4.18.0
+ '@rollup/rollup-linux-arm64-musl': 4.18.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.18.0
+ '@rollup/rollup-linux-s390x-gnu': 4.18.0
+ '@rollup/rollup-linux-x64-gnu': 4.18.0
+ '@rollup/rollup-linux-x64-musl': 4.18.0
+ '@rollup/rollup-win32-arm64-msvc': 4.18.0
+ '@rollup/rollup-win32-ia32-msvc': 4.18.0
+ '@rollup/rollup-win32-x64-msvc': 4.18.0
+ fsevents: 2.3.3
+
+ source-map-js@1.2.0: {}
+
+ style-mod@4.1.2: {}
+
+ typescript@5.4.5: {}
+
+ uuid@9.0.1: {}
+
+ vite-plugin-top-level-await@1.4.1(rollup@4.18.0)(vite@5.2.13):
+ dependencies:
+ '@rollup/plugin-virtual': 3.0.2(rollup@4.18.0)
+ '@swc/core': 1.5.27
+ uuid: 9.0.1
+ vite: 5.2.13
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ - rollup
+
+ vite-plugin-wasm@3.3.0(vite@5.2.13):
+ dependencies:
+ vite: 5.2.13
+
+ vite@5.2.13:
+ dependencies:
+ esbuild: 0.20.2
+ postcss: 8.4.38
+ rollup: 4.18.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ w3c-keyname@2.2.8: {}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..66fd8c0
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,53 @@
+use belalang_core::{lexer::Lexer, parser::Parser};
+use belalang_eval::{
+ builtins::{self, Builtins},
+ evaluator::Evaluator,
+ object::Object,
+};
+use wasm_bindgen::prelude::*;
+
+#[wasm_bindgen]
+extern "C" {
+ fn println(value: &str);
+}
+
+#[wasm_bindgen(start)]
+pub fn start() {
+ let mut fns = builtins::BUILTIN_FUNCTIONS.lock().unwrap();
+
+ fns.insert(
+ "println".into(),
+ Box::new(|args| {
+ println(
+ &args
+ .iter()
+ .map(|arg| arg.to_string())
+ .collect::>()
+ .join(" "),
+ );
+
+ Object::Null
+ }),
+ );
+}
+
+#[wasm_bindgen]
+pub fn run_code(input: String) {
+ let lexer = Lexer::new(input.as_bytes());
+ let mut parser = Parser::new(lexer);
+
+ match parser.parse_program() {
+ Ok(program) => {
+ let builtins = Builtins::default();
+ let mut ev = Evaluator::new(builtins);
+
+ if let Err(err) = ev.eval_program(program) {
+ println(&err.to_string());
+ }
+ }
+ Err(err) => {
+ println(&err.to_string());
+ return;
+ }
+ }
+}
diff --git a/src/main.css b/src/main.css
new file mode 100644
index 0000000..e72291c
--- /dev/null
+++ b/src/main.css
@@ -0,0 +1,76 @@
+@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk&display=swap');
+
+body, button, select, option {
+ font-family: "Space Grotesk";
+}
+
+nav {
+ display: flex;
+ flex-direction: row;
+ gap: 1rem;
+ padding: 1rem;
+}
+
+h1 {
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ display: flex;
+ align-items: stretch;
+ flex-direction: column;
+ margin: 0;
+ height: 100vh;
+ min-height: 0;
+}
+
+main {
+ display: flex;
+ flex-direction: row;
+ align-items: stretch;
+ height: 100%;
+ min-height: 0;
+}
+
+main #editor {
+ flex-grow: 1;
+ width: 50%;
+ overflow: auto;
+}
+
+main #handle {
+ width: 0.5rem;
+ background-color: #efefef;
+ cursor: e-resize;
+}
+
+main #out-wrapper {
+ flex-grow: 1;
+ width: 50%;
+ overflow: auto;
+}
+
+footer {
+ padding: 0.3rem;
+}
+
+/* CodeMirror styles */
+
+.cm-editor {
+ height: 100%;
+}
+
+.cm-editor .cm-content,
+.cm-editor .cm-gutter,
+#out p {
+ font-family: "JetBrains Mono", monospace;
+ font-size: 80%;
+}
+
+#out p {
+ padding: 0;
+ margin: 0;
+ white-space: pre;
+}
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..ebd743a
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,216 @@
+import './main.css'
+import * as rs from "rs";
+
+import { closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';
+import { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';
+import { bracketMatching, indentOnInput } from '@codemirror/language';
+import { EditorView, highlightActiveLine, highlightActiveLineGutter, keymap, lineNumbers } from '@codemirror/view';
+import { EditorState } from '@codemirror/state';
+
+function clamp(min: number, value: number, max: number): number {
+ return Math.max(min, Math.min(value, max));
+}
+
+const handle = document.getElementById("handle")!;
+const editor = document.getElementById("editor")!;
+const out = document.getElementById("out-wrapper")!;
+
+let dragging = false;
+
+handle.addEventListener("mousedown", _ => {
+ dragging = true;
+});
+
+document.addEventListener("mousemove", e => {
+ if (dragging) {
+ const editorWidth = clamp(20, (e.clientX / window.innerWidth) * 100, 80);
+ const outWidth = 100 - editorWidth;
+
+ editor.style.width = `${editorWidth}%`;
+ out.style.width = `${outWidth}%`;
+ }
+});
+
+document.addEventListener("mouseup", _ => {
+ dragging = false;
+})
+
+function runCode() {
+ rs.run_code(editorView.state.doc.toString());
+ return true;
+}
+(window as any).runCode = runCode;
+
+function clearConsole() {
+ const out = document.getElementById("out")!;
+
+ while (out.firstChild) {
+ out.removeChild(out.lastChild!);
+ }
+}
+(window as any).clearConsole = clearConsole;
+
+function println(value: string) {
+ let parent = document.getElementById("out")!;
+
+ let p = document.createElement("p");
+ p.textContent = value;
+
+ parent.appendChild(p);
+}
+(window as any).println = println;
+
+function exampleSelector() {
+ const selector = document.getElementById("example-selector")! as HTMLSelectElement;
+
+ editorView.dispatch(editorView.state.update({
+ changes: {
+ from: 0,
+ to: editorView.state.doc.length,
+ insert: examples[selector.value],
+ }
+ }));
+
+ editorView.focus();
+
+ selector.selectedIndex = 0;
+}
+(window as any).exampleSelector = exampleSelector;
+
+const examples: Record = {
+ "Hello World": `println("Hello, World!");`,
+
+ "Variables": `# Declare variables using the \`:=\` operator
+# Currently, Belalang only supports integers, floats, and strings
+int_var := 123;
+flo_var := 44.2;
+str_var := "Hello, World!";
+
+# Print variables to the console using the builtin \`println\` function
+println("the value of int_var is", int_var);
+println("the value of flo_var is", flo_var);
+println("the value of str_var is", str_var);
+
+# Assign new values to existing variables using the \`=\` operator
+int_var = 1;
+flo_var = 1.4;
+str_var = "Hello, Mom!";
+
+# Print the new values of the variables
+println("the new value of int_var is", int_var);
+println("the new value of flo_var is", flo_var);
+println("the new value of str_var is", str_var);`,
+
+ "If-Else If-Else": `# Variable declaration and assignment
+price := 50;
+
+# Conditional statement example
+if (price < 30) {
+ println("very cheap");
+} else if (price < 40) {
+ println("not so cheap");
+} else {
+ println("very not cheap");
+}
+
+# Using if as an expression
+status := if (price < 30) {
+ "very cheap"
+} else if (price < 40) {
+ "not so cheap"
+} else {
+ "very not cheap"
+};
+
+# Print the status
+println(status);`,
+
+ "Functions": `# Functions are declared like variables using the \`fn\` keyword
+# Define a function to add two numbers
+add := fn(x, y) {
+ return x + y;
+};
+
+# Call the add function and print the result
+println("1 + 2 =", add(1, 2));
+
+# You can also take advantage of expressions to return values
+# Define a function to multiply two numbers using an expression
+mul := fn(x, y) { x * y };
+
+# Call the mul function and print the result
+println("3 * 4 =", mul(3, 4));`,
+
+ "While Loops": `# While loops are declared with the \`while\` keyword.
+i := 0;
+while (i < 10) {
+ println("i =", i);
+ i = i + 1;
+}`,
+
+ "Closures": `# Closures!
+adder := fn() {
+ sum := 0;
+ return fn(n) {
+ sum = sum + n;
+ return sum;
+ };
+};
+
+# Each instance of adder has different
+# values of sum
+f := adder();
+g := adder();
+
+x := 1;
+while (x < 10) {
+ println("f =", f(1), "| g =", g(2));
+ x = x + 1;
+}`,
+
+ "Factorial": `# Recursions!
+fact := fn(n) {
+ # The base case
+ if (n < 2) {
+ return 1;
+ }
+
+ # The recursive case
+ return n * fact(n - 1);
+};
+
+println("5! =", fact(5));`
+}
+
+const exampleSelectorEl = document.getElementById("example-selector")! as HTMLSelectElement;
+
+for (const key in examples) {
+ const option = document.createElement("option");
+ option.value = key;
+ option.append(key);
+
+ exampleSelectorEl.appendChild(option);
+}
+
+const editorView = new EditorView({
+ parent: document.getElementById("editor")!,
+ state: EditorState.create({
+ doc: examples["Hello World"],
+ extensions: [
+ bracketMatching(),
+ closeBrackets(),
+ history(),
+ highlightActiveLine(),
+ highlightActiveLineGutter(),
+ indentOnInput(),
+ lineNumbers(),
+ keymap.of([
+ { key: "Mod-Enter", run: runCode },
+ indentWithTab,
+ ...defaultKeymap,
+ ...historyKeymap,
+ ...closeBracketsKeymap,
+ ]),
+ ],
+ }),
+});
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/target/.rustc_info.json b/target/.rustc_info.json
new file mode 100644
index 0000000..1e6a2ef
--- /dev/null
+++ b/target/.rustc_info.json
@@ -0,0 +1 @@
+{"rustc_fingerprint":16384128533357959574,"outputs":{"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/secona/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.77.2 (25ef9e3d8 2024-04-09)\nbinary: rustc\ncommit-hash: 25ef9e3d85d934b27d9dada2f9dd52b1dc63bb04\ncommit-date: 2024-04-09\nhost: x86_64-unknown-linux-gnu\nrelease: 1.77.2\nLLVM version: 17.0.6\n","stderr":""}},"successes":{}}
\ No newline at end of file
diff --git a/target/CACHEDIR.TAG b/target/CACHEDIR.TAG
new file mode 100644
index 0000000..20d7c31
--- /dev/null
+++ b/target/CACHEDIR.TAG
@@ -0,0 +1,3 @@
+Signature: 8a477f597d28d172789f06886806bc55
+# This file is a cache directory tag created by cargo.
+# For information about cache directory tags see https://bford.info/cachedir/
diff --git a/target/debug/.cargo-lock b/target/debug/.cargo-lock
new file mode 100644
index 0000000..e69de29
diff --git a/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/dep-lib-belalang_core b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/dep-lib-belalang_core
new file mode 100644
index 0000000..1b1cb4d
Binary files /dev/null and b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/dep-lib-belalang_core differ
diff --git a/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/invoked.timestamp b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/lib-belalang_core b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/lib-belalang_core
new file mode 100644
index 0000000..911b757
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/lib-belalang_core
@@ -0,0 +1 @@
+1c073ef799878234
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/lib-belalang_core.json b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/lib-belalang_core.json
new file mode 100644
index 0000000..0efaf4a
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_core-68b35bbabbe01924/lib-belalang_core.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":16070767750237110268,"profile":10243973527296709326,"path":2000630666217941236,"deps":[[18212216710032659301,"thiserror",false,1170736836918991520]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_core-68b35bbabbe01924/dep-lib-belalang_core"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/dep-lib-belalang_core b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/dep-lib-belalang_core
new file mode 100644
index 0000000..1b1cb4d
Binary files /dev/null and b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/dep-lib-belalang_core differ
diff --git a/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/invoked.timestamp b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/lib-belalang_core b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/lib-belalang_core
new file mode 100644
index 0000000..586ad0b
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/lib-belalang_core
@@ -0,0 +1 @@
+7c560a12b7c7360c
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/lib-belalang_core.json b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/lib-belalang_core.json
new file mode 100644
index 0000000..3c88536
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_core-b51f1008b4a53431/lib-belalang_core.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":16070767750237110268,"profile":10243973527296709326,"path":2000630666217941236,"deps":[[18212216710032659301,"thiserror",false,1170736836918991520]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_core-b51f1008b4a53431/dep-lib-belalang_core"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/dep-lib-belalang_eval b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/dep-lib-belalang_eval
new file mode 100644
index 0000000..1b1cb4d
Binary files /dev/null and b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/dep-lib-belalang_eval differ
diff --git a/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/invoked.timestamp b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/lib-belalang_eval b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/lib-belalang_eval
new file mode 100644
index 0000000..9c01dab
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/lib-belalang_eval
@@ -0,0 +1 @@
+b4eab13ea6e36899
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/lib-belalang_eval.json b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/lib-belalang_eval.json
new file mode 100644
index 0000000..bed4a82
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_eval-9609e2f63570d334/lib-belalang_eval.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":12903542324614156373,"profile":10243973527296709326,"path":18308364250904866712,"deps":[[1941626840377111245,"belalang_core",false,880110366293120636],[11852147291591572288,"lazy_static",false,9449879389203280057],[18212216710032659301,"thiserror",false,1170736836918991520]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_eval-9609e2f63570d334/dep-lib-belalang_eval"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/dep-lib-belalang_eval b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/dep-lib-belalang_eval
new file mode 100644
index 0000000..1b1cb4d
Binary files /dev/null and b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/dep-lib-belalang_eval differ
diff --git a/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/invoked.timestamp b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/lib-belalang_eval b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/lib-belalang_eval
new file mode 100644
index 0000000..6c1f27b
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/lib-belalang_eval
@@ -0,0 +1 @@
+d20ae5bc437110ab
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/lib-belalang_eval.json b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/lib-belalang_eval.json
new file mode 100644
index 0000000..d71ba40
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_eval-b5989e993e8cd393/lib-belalang_eval.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":12903542324614156373,"profile":10243973527296709326,"path":18308364250904866712,"deps":[[11852147291591572288,"lazy_static",false,9449879389203280057],[16605935573416958321,"belalang_core",false,3783735732292421404],[18212216710032659301,"thiserror",false,1170736836918991520]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_eval-b5989e993e8cd393/dep-lib-belalang_eval"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/dep-lib-belalang_playground b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/dep-lib-belalang_playground
new file mode 100644
index 0000000..fb1fbec
Binary files /dev/null and b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/dep-lib-belalang_playground differ
diff --git a/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/invoked.timestamp b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/lib-belalang_playground b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/lib-belalang_playground
new file mode 100644
index 0000000..e035429
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/lib-belalang_playground
@@ -0,0 +1 @@
+6d230ee6a95bf8b1
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/lib-belalang_playground.json b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/lib-belalang_playground.json
new file mode 100644
index 0000000..da8c7c3
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_playground-781a7392f44ee626/lib-belalang_playground.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":2261808225318080460,"profile":5601947868832436996,"path":17523903030608720598,"deps":[[1941626840377111245,"belalang_core",false,880110366293120636],[2382269333465725668,"belalang_eval",false,11054335588536806068],[18054910292407041644,"wasm_bindgen",false,12767865429534575648]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_playground-781a7392f44ee626/dep-lib-belalang_playground"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/dep-test-lib-belalang_playground b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/dep-test-lib-belalang_playground
new file mode 100644
index 0000000..fb1fbec
Binary files /dev/null and b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/dep-test-lib-belalang_playground differ
diff --git a/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/invoked.timestamp b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/test-lib-belalang_playground b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/test-lib-belalang_playground
new file mode 100644
index 0000000..c66e12c
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/test-lib-belalang_playground
@@ -0,0 +1 @@
+0661e143c00cb375
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/test-lib-belalang_playground.json b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/test-lib-belalang_playground.json
new file mode 100644
index 0000000..79b818b
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/test-lib-belalang_playground.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":2261808225318080460,"profile":11983525691607113661,"path":17523903030608720598,"deps":[[1941626840377111245,"belalang_core",false,880110366293120636],[2382269333465725668,"belalang_eval",false,11054335588536806068],[18054910292407041644,"wasm_bindgen",false,12767865429534575648]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_playground-7dd87b7b8fc1badf/dep-test-lib-belalang_playground"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/invoked.timestamp b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/invoked.timestamp
new file mode 100644
index 0000000..e00328d
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/invoked.timestamp
@@ -0,0 +1 @@
+This file has an mtime of when this was started.
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/lib-belalang_web b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/lib-belalang_web
new file mode 100644
index 0000000..e69de29
diff --git a/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/lib-belalang_web.json b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/lib-belalang_web.json
new file mode 100644
index 0000000..c21f8d3
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/lib-belalang_web.json
@@ -0,0 +1 @@
+{"rustc":3323483500999627516,"features":"[]","declared_features":"","target":2257607354797792831,"profile":5601947868832436996,"path":17523903030608720598,"deps":[[2382269333465725668,"belalang_eval",false,11054335588536806068],[16605935573416958321,"belalang_core",false,3783735732292421404],[18054910292407041644,"wasm_bindgen",false,12767865429534575648]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/belalang_web-06c7c8e46ffee11a/dep-lib-belalang_web"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
\ No newline at end of file
diff --git a/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/output-lib-belalang_web b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/output-lib-belalang_web
new file mode 100644
index 0000000..2faf2a3
--- /dev/null
+++ b/target/debug/.fingerprint/belalang_web-06c7c8e46ffee11a/output-lib-belalang_web
@@ -0,0 +1,3 @@
+{"$message_type":"diagnostic","message":"mismatched types","code":{"code":"E0308","explanation":"Expected type did not match the received type.\n\nErroneous code examples:\n\n```compile_fail,E0308\nfn plus_one(x: i32) -> i32 {\n x + 1\n}\n\nplus_one(\"Not a number\");\n// ^^^^^^^^^^^^^^ expected `i32`, found `&str`\n\nif \"Not a bool\" {\n// ^^^^^^^^^^^^ expected `bool`, found `&str`\n}\n\nlet x: f32 = \"Not a float\";\n// --- ^^^^^^^^^^^^^ expected `f32`, found `&str`\n// |\n// expected due to this\n```\n\nThis error occurs when an expression was used in a place where the compiler\nexpected an expression of a different type. It can occur in several cases, the\nmost common being when calling a function and passing an argument which has a\ndifferent type than the matching type in the function declaration.\n"},"level":"error","spans":[{"file_name":"src/lib.rs","byte_start":1015,"byte_end":1022,"line_start":44,"line_end":44,"column_start":47,"column_end":54,"is_primary":true,"text":[{"text":" if let Err(err) = ev.eval_program(program) {","highlight_start":47,"highlight_end":54}],"label":"expected `Program`, found `belalang_core::ast::Program`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lib.rs","byte_start":1002,"byte_end":1014,"line_start":44,"line_end":44,"column_start":34,"column_end":46,"is_primary":false,"text":[{"text":" if let Err(err) = ev.eval_program(program) {","highlight_start":34,"highlight_end":46}],"label":"arguments to this method are incorrect","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`belalang_core::ast::Program` and `Program` have similar names, but are actually distinct types","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`belalang_core::ast::Program` is defined in crate `belalang_core`","code":null,"level":"note","spans":[{"file_name":"/home/secona/.cargo/git/checkouts/belalang-def077be22a4b906/678d9ad/belalang_core/src/ast/program.rs","byte_start":42,"byte_end":60,"line_start":4,"line_end":4,"column_start":1,"column_end":19,"is_primary":true,"text":[{"text":"pub struct Program {","highlight_start":1,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null},{"message":"`Program` is defined in crate `belalang_core`","code":null,"level":"note","spans":[{"file_name":"/home/secona/.cargo/git/checkouts/belalang-def077be22a4b906/678d9ad/belalang_core/src/ast/program.rs","byte_start":42,"byte_end":60,"line_start":4,"line_end":4,"column_start":1,"column_end":19,"is_primary":true,"text":[{"text":"pub struct Program {","highlight_start":1,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null},{"message":"perhaps two different versions of crate `belalang_core` are being used?","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"method defined here","code":null,"level":"note","spans":[{"file_name":"/home/secona/.cargo/git/checkouts/belalang-def077be22a4b906/678d9ad/belalang_eval/src/evaluator.rs","byte_start":769,"byte_end":781,"line_start":29,"line_end":29,"column_start":12,"column_end":24,"is_primary":true,"text":[{"text":" pub fn eval_program(&mut self, program: Program) -> Result