From a28b1d0bd6707e104b610e78424ca7dfb27748d5 Mon Sep 17 00:00:00 2001 From: Exelo Date: Wed, 19 Mar 2025 16:05:30 +0100 Subject: [PATCH 1/2] feat(template): add scripts to template --- example/template/README.md | 31 ++++ example/template/build.sh | 5 + example/template/bun.lock | 174 ++-------------------- example/template/package.json | 14 +- example/template/run.sh | 6 + example/template/setup.sh | 4 + example/template/src/index.ts | 3 +- packages/ecs/package.json | 2 +- packages/graphics-2d/src/render/window.ts | 2 +- 9 files changed, 66 insertions(+), 175 deletions(-) create mode 100644 example/template/README.md create mode 100755 example/template/build.sh create mode 100755 example/template/run.sh create mode 100755 example/template/setup.sh diff --git a/example/template/README.md b/example/template/README.md new file mode 100644 index 00000000..abd9ad39 --- /dev/null +++ b/example/template/README.md @@ -0,0 +1,31 @@ +## setup.sh + +Allow you init your game + +```shell +./setup.sh +``` + +## update.sh + +Allow you to update your lib + +```shell +./update.sh +``` + +## build.sh + +Allow you to build project and copy it to the loader + +```shell +./build.sh Loader +``` + +## run.sh + +Allow you to build project and copy it to the loader, and then run the loader (Ctrl + C to stop it) + +```shell +./run.sh Loader +``` \ No newline at end of file diff --git a/example/template/build.sh b/example/template/build.sh new file mode 100755 index 00000000..b886e83e --- /dev/null +++ b/example/template/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +bun run build +mkdir -p ../../../${1}/apps/server/public/game +cp dist/* ../../../${1}/apps/server/public/game diff --git a/example/template/bun.lock b/example/template/bun.lock index d3eb75f9..bb7f1523 100644 --- a/example/template/bun.lock +++ b/example/template/bun.lock @@ -5,8 +5,6 @@ "name": "nanoforge-loader-web", "devDependencies": { "@eslint/js": "^9.22.0", - "@html-eslint/eslint-plugin": "^0.35.2", - "@html-eslint/parser": "^0.35.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/bun": "latest", "eslint": "^9.22.0", @@ -14,10 +12,16 @@ "eslint-plugin-format": "^1.0.1", "eslint-plugin-prettier": "^5.2.3", "globals": "^16.0.0", - "javascript-obfuscator": "^4.1.1", "prettier": "^3.5.3", "typescript-eslint": "^8.26.0", }, + "optionalDependencies": { + "@nanoforge/asset-manager": "latest", + "@nanoforge/common": "latest", + "@nanoforge/core": "latest", + "@nanoforge/ecs": "latest", + "@nanoforge/graphics-2d": "latest", + }, "peerDependencies": { "typescript": "^5", }, @@ -64,14 +68,6 @@ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.2.7", "", { "dependencies": { "@eslint/core": "^0.12.0", "levn": "^0.4.1" } }, "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g=="], - "@html-eslint/eslint-plugin": ["@html-eslint/eslint-plugin@0.35.2", "", { "dependencies": { "@html-eslint/template-parser": "^0.35.2", "@html-eslint/template-syntax-parser": "^0.35.2" } }, "sha512-7CFxSpzu55Og457dEAAcSU+L7PNeYbeHD8HXDmAmHlbBpKjUHVJkLe0pLfuC6eV6ZpV5K2N9qk5SVu2dPFCC/w=="], - - "@html-eslint/parser": ["@html-eslint/parser@0.35.2", "", { "dependencies": { "@html-eslint/template-syntax-parser": "^0.35.2", "es-html-parser": "0.1.1" } }, "sha512-NEr63Ak4Fr+VdI0svNpaPwROoimuO6djCJ2FKtbDPpCSJslCSerbB3+jorhByBO3+XyaJH2uZul44EuXIPeq3Q=="], - - "@html-eslint/template-parser": ["@html-eslint/template-parser@0.35.2", "", { "dependencies": { "es-html-parser": "0.1.1" } }, "sha512-SauXPU4JO02Gf6sjHMZM4OFn4f2F6mRi0N6fZSPQaoBJqNL14Z4CXgN4QsvIAJ0zuDu9ssRR7TELFNZteTlS0w=="], - - "@html-eslint/template-syntax-parser": ["@html-eslint/template-syntax-parser@0.35.2", "", {}, "sha512-y+JAzuNVzFvsmgu9tz2wr2lY0brGwPnrUTUIFsIooAZFPjESg/4SfmCTzo8/Y7QquGsdzYvvO15UBgT2Jc/Pdg=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="], @@ -80,10 +76,6 @@ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.2", "", {}, "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ=="], - "@javascript-obfuscator/escodegen": ["@javascript-obfuscator/escodegen@2.3.0", "", { "dependencies": { "@javascript-obfuscator/estraverse": "^5.3.0", "esprima": "^4.0.1", "esutils": "^2.0.2", "optionator": "^0.8.1" }, "optionalDependencies": { "source-map": "~0.6.1" } }, "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw=="], - - "@javascript-obfuscator/estraverse": ["@javascript-obfuscator/estraverse@5.4.0", "", {}, "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], @@ -110,12 +102,8 @@ "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/minimatch": ["@types/minimatch@3.0.5", "", {}, "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="], - "@types/node": ["@types/node@22.13.10", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw=="], - "@types/validator": ["@types/validator@13.12.2", "", {}, "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA=="], - "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.26.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.26.1", "@typescript-eslint/type-utils": "8.26.1", "@typescript-eslint/utils": "8.26.1", "@typescript-eslint/visitor-keys": "8.26.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA=="], @@ -134,7 +122,7 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.26.1", "", { "dependencies": { "@typescript-eslint/types": "8.26.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg=="], - "acorn": ["acorn@8.8.2", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="], + "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -144,76 +132,30 @@ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "array-differ": ["array-differ@3.0.0", "", {}, "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg=="], - - "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - - "arrify": ["arrify@2.0.1", "", {}, "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="], - - "assert": ["assert@2.0.0", "", { "dependencies": { "es6-object-assign": "^1.1.0", "is-nan": "^1.2.1", "object-is": "^1.0.1", "util": "^0.12.0" } }, "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A=="], - - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "chance": ["chance@1.1.9", "", {}, "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ=="], - - "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], - - "charenc": ["charenc@0.0.2", "", {}, "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="], - - "class-validator": ["class-validator@0.14.1", "", { "dependencies": { "@types/validator": "^13.11.8", "libphonenumber-js": "^1.10.53", "validator": "^13.9.0" } }, "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ=="], - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "commander": ["commander@10.0.0", "", {}, "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA=="], - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - "crypt": ["crypt@0.0.2", "", {}, "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="], - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-html-parser": ["es-html-parser@0.1.1", "", {}, "sha512-SNHdEpKkN4nWZ3sFq9AxPlaUzPKJewGh59JrVS2355vELTOFygyf/lbfDDIONuGvYrhvAHoaUd+sK9UGaGrKUg=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "es6-object-assign": ["es6-object-assign@1.1.0", "", {}, "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw=="], - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "eslint": ["eslint@9.22.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.2", "@eslint/config-helpers": "^0.1.0", "@eslint/core": "^0.12.0", "@eslint/eslintrc": "^3.3.0", "@eslint/js": "9.22.0", "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ=="], @@ -234,8 +176,6 @@ "espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="], - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], @@ -266,70 +206,30 @@ "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], "globals": ["globals@16.0.0", "", {}, "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "inversify": ["inversify@6.0.1", "", {}, "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ=="], - - "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], - - "is-buffer": ["is-buffer@1.1.6", "", {}, "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-nan": ["is-nan@1.3.2", "", { "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" } }, "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "javascript-natural-sort": ["javascript-natural-sort@0.7.1", "", {}, "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="], - "javascript-obfuscator": ["javascript-obfuscator@4.1.1", "", { "dependencies": { "@javascript-obfuscator/escodegen": "2.3.0", "@javascript-obfuscator/estraverse": "5.4.0", "acorn": "8.8.2", "assert": "2.0.0", "chalk": "4.1.2", "chance": "1.1.9", "class-validator": "0.14.1", "commander": "10.0.0", "eslint-scope": "7.1.1", "eslint-visitor-keys": "3.3.0", "fast-deep-equal": "3.1.3", "inversify": "6.0.1", "js-string-escape": "1.0.1", "md5": "2.3.0", "mkdirp": "2.1.3", "multimatch": "5.0.0", "opencollective-postinstall": "2.0.3", "process": "0.11.10", "reflect-metadata": "0.1.13", "source-map-support": "0.5.21", "string-template": "1.0.0", "stringz": "2.1.0", "tslib": "2.5.0" }, "bin": { "javascript-obfuscator": "bin/javascript-obfuscator" } }, "sha512-gt+KZpIIrrxXHEQGD8xZrL8mTRwRY0U76/xz/YX0gZdPrSqQhT/c7dYLASlLlecT3r+FxE7je/+C0oLnTDCx4A=="], - - "js-string-escape": ["js-string-escape@1.0.1", "", {}, "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg=="], - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], @@ -346,38 +246,22 @@ "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "libphonenumber-js": ["libphonenumber-js@1.12.5", "", {}, "sha512-DOjiaVjjSmap12ztyb4QgoFmUe/GbgnEXHu+R7iowk0lzDIjScvPAm8cK9RYTEobbRb0OPlwlZUGTTJPJg13Kw=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "md5": ["md5@2.3.0", "", { "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", "is-buffer": "~1.1.6" } }, "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "mkdirp": ["mkdirp@2.1.3", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "multimatch": ["multimatch@5.0.0", "", { "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" } }, "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "object-is": ["object-is@1.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" } }, "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q=="], - - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "opencollective-postinstall": ["opencollective-postinstall@2.0.3", "", { "bin": { "opencollective-postinstall": "index.js" } }, "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="], - "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], @@ -394,46 +278,28 @@ "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], "prettier-linter-helpers": ["prettier-linter-helpers@1.0.0", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="], - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "reflect-metadata": ["reflect-metadata@0.1.13", "", {}, "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="], - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - - "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], - - "string-template": ["string-template@1.0.0", "", {}, "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg=="], - - "stringz": ["stringz@2.1.0", "", { "dependencies": { "char-regex": "^1.0.2" } }, "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A=="], - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], @@ -444,7 +310,7 @@ "ts-api-utils": ["ts-api-utils@2.0.1", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w=="], - "tslib": ["tslib@2.5.0", "", {}, "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], @@ -456,14 +322,8 @@ "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "util": ["util@0.12.5", "", { "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], - - "validator": ["validator@13.12.0", "", {}, "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -476,26 +336,10 @@ "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], - "@javascript-obfuscator/escodegen/optionator": ["optionator@0.8.3", "", { "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" } }, "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "espree/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "javascript-obfuscator/eslint-scope": ["eslint-scope@7.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw=="], - - "javascript-obfuscator/eslint-visitor-keys": ["eslint-visitor-keys@3.3.0", "", {}, "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA=="], - - "synckit/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "@javascript-obfuscator/escodegen/optionator/levn": ["levn@0.3.0", "", { "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA=="], - - "@javascript-obfuscator/escodegen/optionator/prelude-ls": ["prelude-ls@1.1.2", "", {}, "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w=="], - - "@javascript-obfuscator/escodegen/optionator/type-check": ["type-check@0.3.2", "", { "dependencies": { "prelude-ls": "~1.1.2" } }, "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], } } diff --git a/example/template/package.json b/example/template/package.json index 0ea315a0..f7a4d204 100644 --- a/example/template/package.json +++ b/example/template/package.json @@ -33,13 +33,6 @@ "taze": "taze major -w", "lint-staged": "lint-staged" }, - "dependencies": { - "@nanoforge/common": "@nanoforge/common", - "@nanoforge/core": "@nanoforge/core", - "@nanoforge/asset-manager": "@nanoforge/asset-manager", - "@nanoforge/ecs": "@nanoforge/ecs", - "@nanoforge/graphics-2d": "@nanoforge/graphics-2d" - }, "devDependencies": { "@eslint/js": "^9.22.0", "@trivago/prettier-plugin-sort-imports": "^5.2.2", @@ -55,6 +48,13 @@ "peerDependencies": { "typescript": "^5" }, + "optionalDependencies": { + "@nanoforge/common": "latest", + "@nanoforge/core": "latest", + "@nanoforge/asset-manager": "latest", + "@nanoforge/ecs": "latest", + "@nanoforge/graphics-2d": "latest" + }, "engines": { "node": "23.6.0", "bun": "1.2.4" diff --git a/example/template/run.sh b/example/template/run.sh new file mode 100755 index 00000000..73745c18 --- /dev/null +++ b/example/template/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +./build.sh ${1} +cd ../../../${1}/apps + +bun run dev diff --git a/example/template/setup.sh b/example/template/setup.sh new file mode 100755 index 00000000..2ec33712 --- /dev/null +++ b/example/template/setup.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +bun i --omit=optional +./update.sh diff --git a/example/template/src/index.ts b/example/template/src/index.ts index 66352fd6..104dbfe8 100644 --- a/example/template/src/index.ts +++ b/example/template/src/index.ts @@ -11,5 +11,6 @@ export const main = async (options: IRunOptions) => { app.useAssetManager(new AssetManagerLibrary()); app.useComponentSystem(new ECSLibrary()); - app.run(options); + await app.init(options); + app.run(); }; diff --git a/packages/ecs/package.json b/packages/ecs/package.json index e063cebb..78e749d3 100644 --- a/packages/ecs/package.json +++ b/packages/ecs/package.json @@ -24,7 +24,7 @@ "scripts": { "build": "pnpm build:wasm && pnpm build:script", "build:script": "tsc -b .", - "build:wasm": "make", + "build:wasm": "make re", "clean": "pnpm clean:wasm && pnpm clean:script", "clean:script": "pnpm clean:types && pnpm clean:scripts && rm -f tsconfig.build.tsbuildinfo", "clean:wasm": "make fclean", diff --git a/packages/graphics-2d/src/render/window.ts b/packages/graphics-2d/src/render/window.ts index 8ea03861..e7a533cd 100644 --- a/packages/graphics-2d/src/render/window.ts +++ b/packages/graphics-2d/src/render/window.ts @@ -2,7 +2,7 @@ import { type NfgComponent } from "../components/component"; import { type GraphicsRender } from "../render"; export class NfgWindow { - private _components: NfgComponent[]; + private _components: NfgComponent[] = []; private _render: GraphicsRender; constructor(render: GraphicsRender) { From 975952f74a5506c109a7e37d52553ee387bcb7ab Mon Sep 17 00:00:00 2001 From: Leo Date: Wed, 19 Mar 2025 17:04:51 +0100 Subject: [PATCH 2/2] feat(example/pong): base velocity system clocked with a framerate limiter --- example/pong/.idea/.gitignore | 8 ++ example/pong/.idea/codeStyles/Project.xml | 111 ++++++++++++++++++ .../pong/.idea/codeStyles/codeStyleConfig.xml | 5 + example/pong/.idea/editor.xml | 43 +++++++ .../inspectionProfiles/Project_Default.xml | 11 ++ example/pong/.idea/modules.xml | 8 ++ example/pong/.idea/pong.iml | 8 ++ example/pong/.idea/prettier.xml | 6 + example/pong/.idea/vcs.xml | 6 + example/pong/README.md | 31 +++++ example/pong/build.sh | 5 + example/pong/bun.lock | 7 ++ example/pong/package.json | 14 +-- example/pong/run.sh | 6 + example/pong/setup.sh | 4 + example/pong/src/components/bounce.ts | 1 - example/pong/src/components/position.ts | 9 -- example/pong/src/index.ts | 70 +++++++++-- example/pong/src/systems/bouncing.ts | 3 - packages/ecs/public/libecs.d.ts | 23 ++++ packages/ecs/public/libecs.js | 15 +++ packages/ecs/public/libecs.wasm | Bin 0 -> 207593 bytes 22 files changed, 363 insertions(+), 31 deletions(-) create mode 100644 example/pong/.idea/.gitignore create mode 100644 example/pong/.idea/codeStyles/Project.xml create mode 100644 example/pong/.idea/codeStyles/codeStyleConfig.xml create mode 100644 example/pong/.idea/editor.xml create mode 100644 example/pong/.idea/inspectionProfiles/Project_Default.xml create mode 100644 example/pong/.idea/modules.xml create mode 100644 example/pong/.idea/pong.iml create mode 100644 example/pong/.idea/prettier.xml create mode 100644 example/pong/.idea/vcs.xml create mode 100644 example/pong/README.md create mode 100755 example/pong/build.sh create mode 100755 example/pong/run.sh create mode 100755 example/pong/setup.sh delete mode 100644 example/pong/src/components/bounce.ts delete mode 100644 example/pong/src/components/position.ts delete mode 100644 example/pong/src/systems/bouncing.ts create mode 100644 packages/ecs/public/libecs.d.ts create mode 100644 packages/ecs/public/libecs.js create mode 100755 packages/ecs/public/libecs.wasm diff --git a/example/pong/.idea/.gitignore b/example/pong/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/example/pong/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/example/pong/.idea/codeStyles/Project.xml b/example/pong/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..f506715d --- /dev/null +++ b/example/pong/.idea/codeStyles/Project.xml @@ -0,0 +1,111 @@ + + + + \ No newline at end of file diff --git a/example/pong/.idea/codeStyles/codeStyleConfig.xml b/example/pong/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/example/pong/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/example/pong/.idea/editor.xml b/example/pong/.idea/editor.xml new file mode 100644 index 00000000..b4052dba --- /dev/null +++ b/example/pong/.idea/editor.xml @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/example/pong/.idea/inspectionProfiles/Project_Default.xml b/example/pong/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..22cdf9bd --- /dev/null +++ b/example/pong/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/example/pong/.idea/modules.xml b/example/pong/.idea/modules.xml new file mode 100644 index 00000000..c81b3d61 --- /dev/null +++ b/example/pong/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/example/pong/.idea/pong.iml b/example/pong/.idea/pong.iml new file mode 100644 index 00000000..bc2cd874 --- /dev/null +++ b/example/pong/.idea/pong.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/example/pong/.idea/prettier.xml b/example/pong/.idea/prettier.xml new file mode 100644 index 00000000..b0c1c68f --- /dev/null +++ b/example/pong/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/example/pong/.idea/vcs.xml b/example/pong/.idea/vcs.xml new file mode 100644 index 00000000..b2bdec2d --- /dev/null +++ b/example/pong/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/example/pong/README.md b/example/pong/README.md new file mode 100644 index 00000000..abd9ad39 --- /dev/null +++ b/example/pong/README.md @@ -0,0 +1,31 @@ +## setup.sh + +Allow you init your game + +```shell +./setup.sh +``` + +## update.sh + +Allow you to update your lib + +```shell +./update.sh +``` + +## build.sh + +Allow you to build project and copy it to the loader + +```shell +./build.sh Loader +``` + +## run.sh + +Allow you to build project and copy it to the loader, and then run the loader (Ctrl + C to stop it) + +```shell +./run.sh Loader +``` \ No newline at end of file diff --git a/example/pong/build.sh b/example/pong/build.sh new file mode 100755 index 00000000..b886e83e --- /dev/null +++ b/example/pong/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +bun run build +mkdir -p ../../../${1}/apps/server/public/game +cp dist/* ../../../${1}/apps/server/public/game diff --git a/example/pong/bun.lock b/example/pong/bun.lock index 0e257dad..bb7f1523 100644 --- a/example/pong/bun.lock +++ b/example/pong/bun.lock @@ -15,6 +15,13 @@ "prettier": "^3.5.3", "typescript-eslint": "^8.26.0", }, + "optionalDependencies": { + "@nanoforge/asset-manager": "latest", + "@nanoforge/common": "latest", + "@nanoforge/core": "latest", + "@nanoforge/ecs": "latest", + "@nanoforge/graphics-2d": "latest", + }, "peerDependencies": { "typescript": "^5", }, diff --git a/example/pong/package.json b/example/pong/package.json index 0ea315a0..f7a4d204 100644 --- a/example/pong/package.json +++ b/example/pong/package.json @@ -33,13 +33,6 @@ "taze": "taze major -w", "lint-staged": "lint-staged" }, - "dependencies": { - "@nanoforge/common": "@nanoforge/common", - "@nanoforge/core": "@nanoforge/core", - "@nanoforge/asset-manager": "@nanoforge/asset-manager", - "@nanoforge/ecs": "@nanoforge/ecs", - "@nanoforge/graphics-2d": "@nanoforge/graphics-2d" - }, "devDependencies": { "@eslint/js": "^9.22.0", "@trivago/prettier-plugin-sort-imports": "^5.2.2", @@ -55,6 +48,13 @@ "peerDependencies": { "typescript": "^5" }, + "optionalDependencies": { + "@nanoforge/common": "latest", + "@nanoforge/core": "latest", + "@nanoforge/asset-manager": "latest", + "@nanoforge/ecs": "latest", + "@nanoforge/graphics-2d": "latest" + }, "engines": { "node": "23.6.0", "bun": "1.2.4" diff --git a/example/pong/run.sh b/example/pong/run.sh new file mode 100755 index 00000000..73745c18 --- /dev/null +++ b/example/pong/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +./build.sh ${1} +cd ../../../${1}/apps + +bun run dev diff --git a/example/pong/setup.sh b/example/pong/setup.sh new file mode 100755 index 00000000..2ec33712 --- /dev/null +++ b/example/pong/setup.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +bun i --omit=optional +./update.sh diff --git a/example/pong/src/components/bounce.ts b/example/pong/src/components/bounce.ts deleted file mode 100644 index 5a4f7c2c..00000000 --- a/example/pong/src/components/bounce.ts +++ /dev/null @@ -1 +0,0 @@ -export class Bounce {} diff --git a/example/pong/src/components/position.ts b/example/pong/src/components/position.ts deleted file mode 100644 index dcc0a6db..00000000 --- a/example/pong/src/components/position.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class Position { - x: number; - y: number; - - constructor(x: number, y: number) { - this.x = x; - this.y = y; - } -} diff --git a/example/pong/src/index.ts b/example/pong/src/index.ts index b1eee884..ef4b6315 100644 --- a/example/pong/src/index.ts +++ b/example/pong/src/index.ts @@ -4,27 +4,75 @@ import { NanoforgeFactory } from "@nanoforge/core"; import { ECSLibrary } from "@nanoforge/ecs"; import { Graphics2DLibrary } from "@nanoforge/graphics-2d"; -import { Bounce } from "./components/bounce"; -import { Position } from "./components/position"; -import { bouncing } from "./systems/bouncing"; +export const ecsLibrary = new ECSLibrary(); export const app = NanoforgeFactory.createClient(); -export const ecs = new ECSLibrary(); -export const graph = new Graphics2DLibrary(); +class Velocity { + x: number; + y: number; + + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } +} + +class Position { + x: number; + y: number; + + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } +} + +let lastFrame = 0; + +function move() { + const zip = ecsLibrary.getZipper([Position, Velocity]); + + for (let data = zip.getValue(); data != undefined; data = zip.next()) { + data["Position"].x += data["Velocity"].x; + data["Position"].y += data["Velocity"].y; + } +} + +function logger() { + const zip = ecsLibrary.getZipper([Position]); + + for (let data = zip.getValue(); data != undefined; data = zip.next()) { + console.log(data["Position"].x, data["Position"].y); + } +} + +function framerate(rate: number) { + const frameDuration = 1000 / rate; + let currentFrame = performance.now(); + let elapsedTime = currentFrame - lastFrame; + + while (elapsedTime < frameDuration) { + currentFrame = performance.now(); + elapsedTime = currentFrame - lastFrame; + } + lastFrame = performance.now(); +} export const main = async (options: IRunOptions) => { - //app.useGraphics(graph); + app.useGraphics(new Graphics2DLibrary()); + app.useComponentSystem(ecsLibrary); app.useAssetManager(new AssetManagerLibrary()); - app.useComponentSystem(ecs); await app.init(options); - const ball = ecs.createEntity(); + const ball = ecsLibrary.createEntity(); - ecs.addComponent(ball, new Bounce()); - ecs.addComponent(ball, new Position(50, 50)); - ecs.addSystem(bouncing); + ecsLibrary.addComponent(ball, new Velocity(2, 2)); + ecsLibrary.addComponent(ball, new Position(50, 50)); + ecsLibrary.addSystem(move); + ecsLibrary.addSystem(logger); + ecsLibrary.addSystem(() => framerate(30)); app.run(); }; diff --git a/example/pong/src/systems/bouncing.ts b/example/pong/src/systems/bouncing.ts deleted file mode 100644 index 6965c201..00000000 --- a/example/pong/src/systems/bouncing.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function bouncing() { - console.log(`bouncing:`); -} diff --git a/packages/ecs/public/libecs.d.ts b/packages/ecs/public/libecs.d.ts new file mode 100644 index 00000000..365c1c4c --- /dev/null +++ b/packages/ecs/public/libecs.d.ts @@ -0,0 +1,23 @@ +// TypeScript bindings for emscripten-generated code. Automatically generated at compile time. +declare namespace RuntimeExports { + let HEAPF32: any; + let HEAPF64: any; + let HEAP_DATA_VIEW: any; + let HEAP8: any; + let HEAPU8: any; + let HEAP16: any; + let HEAPU16: any; + let HEAP32: any; + let HEAPU32: any; + let HEAP64: any; + let HEAPU64: any; +} +interface WasmModule { + __initialize(): void; +} + +interface EmbindModule { +} + +export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule; +export default function MainModuleFactory (options?: unknown): Promise; diff --git a/packages/ecs/public/libecs.js b/packages/ecs/public/libecs.js new file mode 100644 index 00000000..3735e263 --- /dev/null +++ b/packages/ecs/public/libecs.js @@ -0,0 +1,15 @@ +var Module = (() => { + var _scriptName = import.meta.url; + + return ( +async function(moduleArg = {}) { + var moduleRtn; + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(!import.meta.url.startsWith("data:")){scriptDirectory=nodePath.dirname(require("url").fileURLToPath(import.meta.url))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true}function preMain(){}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("libecs.wasm")}return new URL("libecs.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{receiveInstance(mod,inst);resolve(mod.exports)})})}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.unshift(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.unshift(cb);var noExitRuntime=Module["noExitRuntime"]||true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var exceptionCaught=[];var uncaughtExceptionCount=0;var ___cxa_begin_catch=ptr=>{var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)};var exceptionLast=0;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=ptr}throw exceptionLast};var setTempRet0=val=>__emscripten_tempret_set(val);var findMatchingCatch=args=>{var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var embindRepr=v=>{if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}};var embind_init_charCodes=()=>{var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes};var embind_charCodes;var readLatin1String=ptr=>{var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var BindingError;var throwBindingError=message=>{throw new BindingError(message)};var InternalError;var throwInternalError=message=>{throw new InternalError(message)};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);var isUnsignedType=name.indexOf("u")!=-1;if(isUnsignedType){maxRange=(1n<<64n)-1n}registerType(primitiveType,{name,fromWireType:value=>value,toWireType:function(destructors,value){if(typeof value!="bigint"&&typeof value!="number"){throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`)}if(typeof value=="number"){value=BigInt(value)}return value},argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})};var GenericWireTypeSize=8;var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=readLatin1String(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},argPackAdvance:GenericWireTypeSize,readValueFromPointer:function(pointer){return this["fromWireType"](HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredPointers={};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var attachFinalizer=handle=>{if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};var delayFunction;var init_ClassHandle=()=>{Object.assign(ClassHandle.prototype,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}})};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function readPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistent public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var embind__requireFunction=(signature,rawFunction)=>{signature=readLatin1String(signature);function makeDynCaller(){return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};var extendError=(baseErrorType,errorName)=>{var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return`${this.name}: ${this.message}`}};return errorClass};var UnboundTypeError;var getTypeName=type=>{var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError("Use 'new' to construct "+name)}if(undefined===registeredClass.constructor_body){throw new BindingError(name+" has no accessible constructor")}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2])}return array};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function usesDestructorStack(argTypes){for(var i=1;i{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex===-1)return signature;return signature.slice(0,argsIndex)};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var emval_freelist=[];var emval_handles=[];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle]=undefined;emval_freelist.push(handle)}};var count_emval_handles=()=>emval_handles.length/2-5-emval_freelist.length;var init_emval=()=>{emval_handles.push(0,1,undefined,1,null,1,true,1,false,1);Module["count_emval_handles"]=count_emval_handles};var Emval={toValue:handle=>{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 8:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=readLatin1String(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>value,argPackAdvance:GenericWireTypeSize,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name,fromWireType,toWireType,argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name,fromWireType:decodeMemoryView,argPackAdvance:GenericWireTypeSize,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var EmValOptionalType=Object.assign({optional:true},EmValType);var __embind_register_optional=(rawOptionalType,rawType)=>{registerType(rawOptionalType,EmValOptionalType)};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var __embind_register_std_string=(rawType,name)=>{name=readLatin1String(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(base);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}else{for(var i=0;i{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=readLatin1String(name);var decodeString,encodeString,readCharAt,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;readCharAt=pointer=>HEAPU16[pointer>>1]}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;readCharAt=pointer=>HEAPU32[pointer>>2]}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||readCharAt(currentBytePtr)==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_void=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{isVoid:true,name,argPackAdvance:0,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var emval_returnValue=(returnType,destructorsRef,handle)=>{var destructors=[];var result=returnType["toWireType"](destructors,handle);if(destructors.length){HEAPU32[destructorsRef>>2]=Emval.toHandle(destructors)}return result};var __emval_as=(handle,returnType,destructorsRef)=>{handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");return emval_returnValue(returnType,destructorsRef,handle)};var emval_methodCallers=[];var __emval_call=(caller,handle,destructorsRef,args)=>{caller=emval_methodCallers[caller];handle=Emval.toValue(handle);return caller(null,handle,destructorsRef,args)};var __emval_equals=(first,second)=>{first=Emval.toValue(first);second=Emval.toValue(second);return first==second};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol};var emval_get_global=()=>{if(typeof globalThis=="object"){return globalThis}return function(){return Function}()("return this")()};var __emval_get_global=name=>{if(name===0){return Emval.toHandle(emval_get_global())}else{name=getStringOrSymbol(name);return Emval.toHandle(emval_get_global()[name])}};var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i>2],"parameter "+i)}return a};var reflectConstruct=Reflect.construct;var __emval_get_method_caller=(argCount,argTypes,kind)=>{var types=emval_lookupTypes(argCount,argTypes);var retType=types.shift();argCount--;var functionBody=`return function (obj, func, destructorsRef, args) {\n`;var offset=0;var argsList=[];if(kind===0){argsList.push("obj")}var params=["retType"];var args=[retType];for(var i=0;it.name).join(", ")}) => ${retType.name}>`;return emval_addMethodCaller(createNamedFunction(functionName,invokerFunction))};var __emval_get_property=(handle,key)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);return Emval.toHandle(handle[key])};var __emval_incref=handle=>{if(handle>9){emval_handles[handle+1]+=1}};var __emval_instanceof=(object,constructor)=>{object=Emval.toValue(object);constructor=Emval.toValue(constructor);return object instanceof constructor};var __emval_is_string=handle=>{handle=Emval.toValue(handle);return typeof handle=="string"};var __emval_new_cstring=v=>Emval.toHandle(getStringOrSymbol(v));var __emval_new_object=()=>Emval.toHandle({});var __emval_run_destructors=handle=>{var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)};var __emval_set_property=(handle,key,value)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);value=Emval.toValue(value);handle[key]=value};var __emval_take_value=(type,arg)=>{type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var incrementExceptionRefcount=ptr=>___cxa_increment_exception_refcount(ptr);Module["incrementExceptionRefcount"]=incrementExceptionRefcount;var decrementExceptionRefcount=ptr=>___cxa_decrement_exception_refcount(ptr);Module["decrementExceptionRefcount"]=decrementExceptionRefcount;var stackAlloc=sz=>__emscripten_stack_alloc(sz);var getExceptionMessageCommon=ptr=>{var sp=stackSave();var type_addr_addr=stackAlloc(4);var message_addr_addr=stackAlloc(4);___get_exception_message(ptr,type_addr_addr,message_addr_addr);var type_addr=HEAPU32[type_addr_addr>>2];var message_addr=HEAPU32[message_addr_addr>>2];var type=UTF8ToString(type_addr);_free(type_addr);var message;if(message_addr){message=UTF8ToString(message_addr);_free(message_addr)}stackRestore(sp);return[type,message]};var getExceptionMessage=ptr=>getExceptionMessageCommon(ptr);Module["getExceptionMessage"]=getExceptionMessage;embind_init_charCodes();BindingError=Module["BindingError"]=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};InternalError=Module["InternalError"]=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};init_ClassHandle();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var wasmImports={__cxa_begin_catch:___cxa_begin_catch,__cxa_find_matching_catch_2:___cxa_find_matching_catch_2,__cxa_find_matching_catch_3:___cxa_find_matching_catch_3,__cxa_throw:___cxa_throw,__resumeException:___resumeException,_embind_register_bigint:__embind_register_bigint,_embind_register_bool:__embind_register_bool,_embind_register_class:__embind_register_class,_embind_register_class_constructor:__embind_register_class_constructor,_embind_register_class_function:__embind_register_class_function,_embind_register_emval:__embind_register_emval,_embind_register_float:__embind_register_float,_embind_register_integer:__embind_register_integer,_embind_register_memory_view:__embind_register_memory_view,_embind_register_optional:__embind_register_optional,_embind_register_std_string:__embind_register_std_string,_embind_register_std_wstring:__embind_register_std_wstring,_embind_register_void:__embind_register_void,_emval_as:__emval_as,_emval_call:__emval_call,_emval_decref:__emval_decref,_emval_equals:__emval_equals,_emval_get_global:__emval_get_global,_emval_get_method_caller:__emval_get_method_caller,_emval_get_property:__emval_get_property,_emval_incref:__emval_incref,_emval_instanceof:__emval_instanceof,_emval_is_string:__emval_is_string,_emval_new_cstring:__emval_new_cstring,_emval_new_object:__emval_new_object,_emval_run_destructors:__emval_run_destructors,_emval_set_property:__emval_set_property,_emval_take_value:__emval_take_value,invoke_ii,invoke_iii,invoke_v,invoke_vii,invoke_viii};var wasmExports=await createWasm();var _malloc=wasmExports["malloc"];var ___getTypeName=wasmExports["__getTypeName"];var __initialize=Module["__initialize"]=wasmExports["_initialize"];var _free=wasmExports["free"];var _setThrew=wasmExports["setThrew"];var __emscripten_tempret_set=wasmExports["_emscripten_tempret_set"];var __emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];var __emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];var _emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];var ___cxa_increment_exception_refcount=wasmExports["__cxa_increment_exception_refcount"];var ___cxa_decrement_exception_refcount=wasmExports["__cxa_decrement_exception_refcount"];var ___get_exception_message=wasmExports["__get_exception_message"];var ___cxa_can_catch=wasmExports["__cxa_can_catch"];var ___cxa_get_exception_ptr=wasmExports["__cxa_get_exception_ptr"];function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var mainArgs=undefined;function callMain(args=[]){var entryFunction=__initialize;mainArgs=[thisProgram].concat(args);try{entryFunction();var ret=0;exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();var noInitialRun=Module["noInitialRun"];if(!noInitialRun)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; + + + return moduleRtn; +} +); +})(); +export default Module; diff --git a/packages/ecs/public/libecs.wasm b/packages/ecs/public/libecs.wasm new file mode 100755 index 0000000000000000000000000000000000000000..f8f430bcb16c71dca6ea111eda004c0bd3b3c85c GIT binary patch literal 207593 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ØrTfwUokjlvY$gcE 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 literal 0 HcmV?d00001