From d009071cce60bec11b9333d2a32d4f86970b094d Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 14 Dec 2022 13:46:39 +0100 Subject: [PATCH 1/5] added test support for core client --- packages/js/core-client/jest.config.js | 11 + packages/js/core-client/package.json | 7 +- yarn.lock | 310 +++++++++++++------------ 3 files changed, 176 insertions(+), 152 deletions(-) create mode 100644 packages/js/core-client/jest.config.js diff --git a/packages/js/core-client/jest.config.js b/packages/js/core-client/jest.config.js new file mode 100644 index 0000000000..a5ca876a5a --- /dev/null +++ b/packages/js/core-client/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + collectCoverage: true, + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ["**/?(*.)+(spec|test).[jt]s?(x)"], + globals: { + 'ts-jest': { + diagnostics: false + } + } +}; diff --git a/packages/js/core-client/package.json b/packages/js/core-client/package.json index fb1c54702c..c07304a4f5 100644 --- a/packages/js/core-client/package.json +++ b/packages/js/core-client/package.json @@ -13,7 +13,8 @@ ], "scripts": { "build": "rimraf ./build && tsc --project tsconfig.build.json", - "lint": "eslint --color -c ../../../.eslintrc.js src/" + "lint": "eslint --color -c ../../../.eslintrc.js src/", + "test": "jest --passWithNoTests --runInBand --verbose=true --detectOpenHandles --forceExit" }, "dependencies": { "@polywrap/core-js": "0.10.0-pre.5", @@ -23,10 +24,14 @@ "@polywrap/wrap-manifest-types-js": "0.10.0-pre.5" }, "devDependencies": { + "@polywrap/uri-resolvers-js": "0.10.0-pre.5", "@types/uuid": "8.3.0", "rimraf": "3.0.2", "ts-loader": "8.0.17", "ts-node": "8.10.2", + "@types/jest": "26.0.8", + "jest": "26.6.3", + "ts-jest": "26.5.4", "typescript": "4.1.6" }, "gitHead": "7346adaf5adb7e6bbb70d9247583e995650d390a", diff --git a/yarn.lock b/yarn.lock index d5096c9833..38ee763c62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -125,9 +125,9 @@ "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.9.0": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" - integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" + integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== "@babel/core@7.9.0": version "7.9.0" @@ -152,32 +152,32 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.4.5", "@babel/core@^7.7.5": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" - integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" + integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.2" + "@babel/generator" "^7.20.5" "@babel/helper-compilation-targets" "^7.20.0" "@babel/helper-module-transforms" "^7.20.2" - "@babel/helpers" "^7.20.1" - "@babel/parser" "^7.20.2" + "@babel/helpers" "^7.20.5" + "@babel/parser" "^7.20.5" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.20.1", "@babel/generator@^7.20.2", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" - integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== +"@babel/generator@^7.20.5", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== dependencies: - "@babel/types" "^7.20.2" + "@babel/types" "^7.20.5" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -206,10 +206,10 @@ browserslist "^4.21.3" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2", "@babel/helper-create-class-features-plugin@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz#3c08a5b5417c7f07b5cf3dfb6dc79cbec682e8c2" - integrity sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.8.3": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" + integrity sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" @@ -219,13 +219,13 @@ "@babel/helper-replace-supers" "^7.19.1" "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" - integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" + integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" + regexpu-core "^5.2.1" "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" @@ -364,23 +364,23 @@ integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" -"@babel/helpers@^7.20.1", "@babel/helpers@^7.9.0": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" - integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== +"@babel/helpers@^7.20.5", "@babel/helpers@^7.9.0": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" + integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== dependencies: "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.0" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" "@babel/highlight@^7.18.6", "@babel/highlight@^7.8.3": version "7.18.6" @@ -391,10 +391,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" - integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.5", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -565,13 +565,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" + integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": @@ -753,9 +753,9 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.20.2", "@babel/plugin-transform-block-scoping@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz#f59b1767e6385c663fd0bce655db6ca9c8b236ed" - integrity sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz#401215f9dc13dc5262940e2e527c9536b3d7f237" + integrity sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -885,12 +885,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" - integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-new-target@^7.18.6", "@babel/plugin-transform-new-target@^7.8.3": version "7.18.6" @@ -908,9 +908,9 @@ "@babel/helper-replace-supers" "^7.18.6" "@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.8.7": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz#7b3468d70c3c5b62e46be0a47b6045d8590fb748" - integrity sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz#f8f9186c681d10c3de7620c916156d893c8a019e" + integrity sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -983,12 +983,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.18.6", "@babel/plugin-transform-regenerator@^7.8.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" "@babel/plugin-transform-reserved-words@^7.18.6", "@babel/plugin-transform-reserved-words@^7.8.3": version "7.18.6" @@ -1258,12 +1258,12 @@ "@babel/plugin-transform-typescript" "^7.9.0" "@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.12.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz#d0775a49bb5fba77e42cbb7276c9955c7b05af8d" - integrity sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz#63dae945963539ab0ad578efbf3eff271e7067ae" + integrity sha512-tqeujPiuEfcH067mx+7otTQWROVMKHXEaOQcAeNV5dDdbPWvPcFA8/W9LXw2NfjNmOetqLl03dfnG2WALPlsRQ== dependencies: core-js-pure "^3.25.1" - regenerator-runtime "^0.13.10" + regenerator-runtime "^0.13.11" "@babel/runtime@7.9.0": version "7.9.0" @@ -1273,11 +1273,11 @@ regenerator-runtime "^0.13.4" "@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" - integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" + integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== dependencies: - regenerator-runtime "^0.13.10" + regenerator-runtime "^0.13.11" "@babel/template@^7.18.10", "@babel/template@^7.3.3", "@babel/template@^7.4.0", "@babel/template@^7.8.6": version "7.18.10" @@ -1288,26 +1288,26 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" - integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" + integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.1" + "@babel/generator" "^7.20.5" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.1" - "@babel/types" "^7.20.0" + "@babel/parser" "^7.20.5" + "@babel/types" "^7.20.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" - integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -3323,9 +3323,9 @@ integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinonjs/commons@^1.7.0": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.5.tgz#e280c94c95f206dcfd5aca00a43f2156b758c764" - integrity sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -3521,9 +3521,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" - integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" @@ -3648,9 +3648,9 @@ integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== "@types/lodash@^4.14.182": - version "4.14.189" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.189.tgz#975ff8c38da5ae58b751127b19ad5e44b5b7f6d2" - integrity sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA== + version "4.14.191" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== "@types/minimatch@*": version "5.1.2" @@ -3673,9 +3673,9 @@ integrity sha512-wH6Tu9mbiOt0n5EvdoWy0VGQaJMHfLIxY/6wS0xLC7CV1taM6gESEzcYy0ZlWvxxiiljYvfDIvz4hHbUUDRlhw== "@types/node@*": - version "18.11.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" - integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + version "18.11.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" + integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== "@types/node@12.12.26": version "12.12.26" @@ -4367,9 +4367,9 @@ anymatch@^2.0.0: normalize-path "^2.1.1" anymatch@^3.0.3, anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -5000,9 +5000,9 @@ bignumber.js@9.0.2: integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== bignumber.js@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== binary-extensions@^1.0.0: version "1.13.1" @@ -5514,9 +5514,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400: - version "1.0.30001431" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" - integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== + version "1.0.30001436" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz#22d7cbdbbbb60cdc4ca1030ccd6dea9f5de4848b" + integrity sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg== capture-exit@^2.0.0: version "2.0.0" @@ -6691,9 +6691,9 @@ decamelize@^1.1.0, decamelize@^1.2.0: integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1: - version "10.4.2" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" - integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: version "0.2.2" @@ -7266,9 +7266,9 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + version "1.20.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" + integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -7276,6 +7276,7 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: function.prototype.name "^1.1.5" get-intrinsic "^1.1.3" get-symbol-description "^1.0.0" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" has-symbols "^1.0.3" @@ -7291,8 +7292,8 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" es-array-method-boxes-properly@^1.0.0: @@ -8063,9 +8064,9 @@ fast-memoize@^2.5.2: integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.14.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== dependencies: reusify "^1.0.4" @@ -9245,9 +9246,9 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + version "5.2.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== immer@1.10.0: version "1.10.0" @@ -11716,9 +11717,9 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: js-tokens "^3.0.0 || ^4.0.0" lottie-web@^5.1.3: - version "5.9.6" - resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.9.6.tgz#62ae68563355d3e04aa75d53dec3dd4bea0e57c9" - integrity sha512-JFs7KsHwflugH5qIXBpB4905yC1Sub2MZWtl/elvO/QC6qj1ApqbUZJyjzJseJUtVpgiDaXQLjBlIJGS7UUUXA== + version "5.10.0" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.10.0.tgz#72563f22efdcf2b8f7e8359743514930ebaf5f8c" + integrity sha512-q2hfqKrGXNkwjSSZjKxf3fWMi0e3ZBc03qBkVWoGbwUJ7BcG+9YXjMPtmmhitzk8Nc6VQ5PRnh9yInPdfq0PZg== lower-case@^2.0.2: version "2.0.2" @@ -12082,9 +12083,9 @@ minimalistic-crypto-utils@^1.0.1: integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@*: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" + integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== dependencies: brace-expansion "^2.0.1" @@ -12172,9 +12173,16 @@ minipass@^2.6.0, minipass@^2.9.0: yallist "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" + integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== dependencies: yallist "^4.0.0" @@ -14261,9 +14269,9 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -14350,9 +14358,9 @@ prettier@2.2.1: integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== prettier@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== pretty-bytes@^5.1.0: version "5.6.0" @@ -14544,9 +14552,9 @@ pull-stream-to-async-iterator@^1.0.1, pull-stream-to-async-iterator@^1.0.2: pull-stream "^3.6.9" pull-stream@^3.6.9: - version "3.6.14" - resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" - integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== + version "3.7.0" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.7.0.tgz#85de0e44ff38a4d2ad08cc43fc458e1922f9bf0b" + integrity sha512-Eco+/R004UaCK2qEDE8vGklcTG2OeZSVm1kTUQNrykEjDwcFXDZhygFDsW49DbXyJMEhHeRL3z5cRVqPAhXlIw== pump@^2.0.0: version "2.0.1" @@ -15115,15 +15123,15 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: - version "0.13.10" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" - integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== +regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" @@ -15164,7 +15172,7 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.1.0: +regexpu-core@^5.2.1: version "5.2.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== @@ -16281,7 +16289,7 @@ string.prototype.matchall@^4.0.2: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" -string.prototype.trimend@^1.0.5: +string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== @@ -16290,7 +16298,7 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: +string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== @@ -16536,13 +16544,13 @@ tar@^4.4.12: yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0: - version "6.1.12" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" - integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== + version "6.1.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^4.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -17008,9 +17016,9 @@ typescript@4.1.6: integrity sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow== typescript@^4.0: - version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" - integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== uglify-js@^3.1.4: version "3.17.4" From 73ce0fae6014fa2b6c34ee5509aaae764d7d0b05 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 14 Dec 2022 14:52:02 +0100 Subject: [PATCH 2/5] added embedded wrapper tests for core client --- .../src/__tests__/embedded-wrapper.spec.ts | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts diff --git a/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts b/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts new file mode 100644 index 0000000000..bcfa276989 --- /dev/null +++ b/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts @@ -0,0 +1,173 @@ +import fs from "fs"; +import path from "path"; +import { buildWrapper } from "@polywrap/test-env-js"; +import { GetPathToTestWrappers } from "@polywrap/test-cases"; +import { UriResolver } from "@polywrap/uri-resolvers-js"; +import { WasmWrapper, InMemoryFileReader } from "@polywrap/wasm-js"; +import { Uri, Wrapper } from "@polywrap/core-js"; +import { PolywrapCoreClient } from "../PolywrapCoreClient"; +import { Result, ResultErr, ResultOk } from "@polywrap/result"; + +jest.setTimeout(200000); + +const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; +const simpleWrapperUri = new Uri(`fs/${simpleWrapperPath}/build`); + +describe("Embedded wrapper", () => { + beforeAll(async () => { + await buildWrapper(simpleWrapperPath); + }); + + it("can invoke an embedded wrapper", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + + let wrapper: Wrapper = await WasmWrapper.from(manifestBuffer, wasmModuleBuffer); + + const client = new PolywrapCoreClient({ + resolver: UriResolver.from([ + { + uri: simpleWrapperUri, + wrapper + } + ]) + }); + + const result = await client.invoke({ + uri: simpleWrapperUri.uri, + method: "simpleMethod", + args: { + arg: "test", + }, + }); + + if (!result.ok) fail(result.error); + expect(result.value).toBeTruthy(); + expect(typeof result.value).toBe("string"); + expect(result.value).toEqual("test"); + }); + + it("can get a file from wrapper", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from(manifestBuffer, wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); + + it("can add embedded wrapper through file reader", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from({ + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wrap manifest", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from( + InMemoryFileReader.fromWasmModule(wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }) + ); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wasm module", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from(manifestBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); +}); + +const testEmbeddedWrapperWithFile = async (wrapper: WasmWrapper, filePath: string, fileText: string) => { + const client = new PolywrapCoreClient({ + resolver: UriResolver.from([ + { + uri: simpleWrapperUri, + wrapper + } + ]) + }); + + const expectedManifest = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.info`); + const receivedManifestResult = await client.getFile(simpleWrapperUri, { + path: "wrap.info", + }); + if (!receivedManifestResult.ok) fail(receivedManifestResult.error); + const receivedManifest = receivedManifestResult.value as Uint8Array; + expect(receivedManifest).toEqual(expectedManifest); + + const expectedWasmModule = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.wasm`); + const receivedWasmModuleResult = await client.getFile(simpleWrapperUri, { + path: "wrap.wasm", + }); + if (!receivedWasmModuleResult.ok) fail(receivedWasmModuleResult.error); + const receivedWasmModule = receivedWasmModuleResult.value as Uint8Array; + expect(receivedWasmModule).toEqual(expectedWasmModule); + + const receivedHelloFileResult = await client.getFile(simpleWrapperUri, { + path: filePath, + encoding: "utf-8", + }); + if (!receivedHelloFileResult.ok) fail(receivedHelloFileResult.error); + const receivedHelloFile = receivedHelloFileResult.value as Uint8Array; + + expect(receivedHelloFile).toEqual(fileText); +}; From c2819d583afc36fd66ee542ca8adb3611ee8890b Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 14 Dec 2022 20:30:26 +0100 Subject: [PATCH 3/5] added package tests --- .../src/__tests__/embedded-package.spec.ts | 174 ++++++++++++++++++ packages/js/wasm/src/imports.ts | 3 +- 2 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 packages/js/core-client/src/__tests__/embedded-package.spec.ts diff --git a/packages/js/core-client/src/__tests__/embedded-package.spec.ts b/packages/js/core-client/src/__tests__/embedded-package.spec.ts new file mode 100644 index 0000000000..4b8f373c19 --- /dev/null +++ b/packages/js/core-client/src/__tests__/embedded-package.spec.ts @@ -0,0 +1,174 @@ +import fs from "fs"; +import path from "path"; +import { buildWrapper } from "@polywrap/test-env-js"; +import { GetPathToTestWrappers } from "@polywrap/test-cases"; +import { UriResolver } from "@polywrap/uri-resolvers-js"; +import { InMemoryFileReader, WasmPackage } from "@polywrap/wasm-js"; +import { IWrapPackage, Uri } from "@polywrap/core-js"; +import { PolywrapCoreClient } from "../PolywrapCoreClient"; +import { Result, ResultErr, ResultOk } from "@polywrap/result"; + +jest.setTimeout(200000); + +const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; +const simpleWrapperUri = new Uri(`fs/${simpleWrapperPath}/build`); + +describe("Embedded package", () => { + beforeAll(async () => { + await buildWrapper(simpleWrapperPath); + }); + + it("can invoke an embedded package", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + + let wrapPackage = WasmPackage.from(manifestBuffer, wasmModuleBuffer); + + const client = new PolywrapCoreClient({ + resolver: UriResolver.from([ + { + uri: simpleWrapperUri, + package: wrapPackage + } + ]) + }); + + const result = await client.invoke({ + uri: simpleWrapperUri.uri, + method: "simpleMethod", + args: { + arg: "test", + }, + }); + + if (!result.ok) fail(result.error); + expect(result.value).toBeTruthy(); + expect(typeof result.value).toBe("string"); + expect(result.value).toEqual("test"); + }); + + it("can get a file from wrapper", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from(manifestBuffer, wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); + + it("can add embedded wrapper through file reader", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from({ + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wrap manifest", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from( + InMemoryFileReader.fromWasmModule(wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }) + ); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wasm module", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from(manifestBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); +}); + +const testEmbeddedPackageWithFile = async (wrapPackage: IWrapPackage, filePath: string, fileText: string) => { + const client = new PolywrapCoreClient({ + resolver: UriResolver.from([ + { + uri: simpleWrapperUri, + package: wrapPackage + } + ]) + }); + + const expectedManifest = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.info`); + const receivedManifestResult = await client.getFile(simpleWrapperUri, { + path: "wrap.info", + }); + if (!receivedManifestResult.ok) fail(receivedManifestResult.error); + const receivedManifest = receivedManifestResult.value as Uint8Array; + expect(receivedManifest).toEqual(expectedManifest); + + const expectedWasmModule = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.wasm`); + const receivedWasmModuleResult = await client.getFile(simpleWrapperUri, { + path: "wrap.wasm", + }); + if (!receivedWasmModuleResult.ok) fail(receivedWasmModuleResult.error); + const receivedWasmModule = receivedWasmModuleResult.value as Uint8Array; + expect(receivedWasmModule).toEqual(expectedWasmModule); + + const receivedHelloFileResult = await client.getFile(simpleWrapperUri, { + path: filePath, + encoding: "utf-8", + }); + if (!receivedHelloFileResult.ok) fail(receivedHelloFileResult.error); + const receivedHelloFile = receivedHelloFileResult.value as Uint8Array; + + expect(receivedHelloFile).toEqual(fileText); +}; diff --git a/packages/js/wasm/src/imports.ts b/packages/js/wasm/src/imports.ts index 583e34a6ce..3a56f973dc 100644 --- a/packages/js/wasm/src/imports.ts +++ b/packages/js/wasm/src/imports.ts @@ -2,7 +2,7 @@ import { u32, WrapImports } from "./types"; import { readBytes, readString, writeBytes, writeString } from "./buffer"; -import { State } from "./WasmWrapper"; +import { State, WasmWrapper } from "./WasmWrapper"; import { msgpackEncode } from "@polywrap/msgpack-js"; import { CoreClient } from "@polywrap/core-js"; @@ -38,6 +38,7 @@ export const createImports = (config: { method: method, args: new Uint8Array(args), encodeResult: true, + callerId: wrapper.id }); if (result.ok) { From b7d5e9b32d187ffd7c93206fe8d0561af2b3263d Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Thu, 15 Dec 2022 21:21:14 +0100 Subject: [PATCH 4/5] added embedded wrapper and package tests to client --- .../__tests__/core/embedded-package.spec.ts | 173 ++++++++++++++++++ .../__tests__/core/embedded-wrapper.spec.ts | 172 +++++++++++++++++ .../src/__tests__/embedded-package.spec.ts | 1 - 3 files changed, 345 insertions(+), 1 deletion(-) create mode 100644 packages/js/client/src/__tests__/core/embedded-package.spec.ts create mode 100644 packages/js/client/src/__tests__/core/embedded-wrapper.spec.ts diff --git a/packages/js/client/src/__tests__/core/embedded-package.spec.ts b/packages/js/client/src/__tests__/core/embedded-package.spec.ts new file mode 100644 index 0000000000..6feda264e1 --- /dev/null +++ b/packages/js/client/src/__tests__/core/embedded-package.spec.ts @@ -0,0 +1,173 @@ +import fs from "fs"; +import path from "path"; +import { buildWrapper } from "@polywrap/test-env-js"; +import { GetPathToTestWrappers } from "@polywrap/test-cases"; +import { UriResolver } from "@polywrap/uri-resolvers-js"; +import { InMemoryFileReader, WasmPackage } from "@polywrap/wasm-js"; +import { IWrapPackage, Uri } from "@polywrap/core-js"; +import { Result, ResultErr, ResultOk } from "@polywrap/result"; +import { PolywrapClient } from "../../PolywrapClient"; + +jest.setTimeout(200000); + +const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; +const simpleWrapperUri = new Uri(`fs/${simpleWrapperPath}/build`); + +describe("Embedded package", () => { + beforeAll(async () => { + await buildWrapper(simpleWrapperPath); + }); + + it("can invoke an embedded package", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + + let wrapPackage = WasmPackage.from(manifestBuffer, wasmModuleBuffer); + + const client = new PolywrapClient({ + packages: [ + { + uri: simpleWrapperUri, + package: wrapPackage + } + ] + }); + + const result = await client.invoke({ + uri: simpleWrapperUri.uri, + method: "simpleMethod", + args: { + arg: "test", + }, + }); + + if (!result.ok) fail(result.error); + expect(result.value).toBeTruthy(); + expect(typeof result.value).toBe("string"); + expect(result.value).toEqual("test"); + }); + + it("can get a file from wrapper", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from(manifestBuffer, wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); + + it("can add embedded wrapper through file reader", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from({ + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wrap manifest", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from( + InMemoryFileReader.fromWasmModule(wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }) + ); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wasm module", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapPackage = WasmPackage.from(manifestBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedPackageWithFile(wrapPackage, testFilePath, testFileText); + }); +}); + +const testEmbeddedPackageWithFile = async (wrapPackage: IWrapPackage, filePath: string, fileText: string) => { + const client = new PolywrapClient({ + packages: [ + { + uri: simpleWrapperUri, + package: wrapPackage + } + ] + }); + + const expectedManifest = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.info`); + const receivedManifestResult = await client.getFile(simpleWrapperUri, { + path: "wrap.info", + }); + if (!receivedManifestResult.ok) fail(receivedManifestResult.error); + const receivedManifest = receivedManifestResult.value as Uint8Array; + expect(receivedManifest).toEqual(expectedManifest); + + const expectedWasmModule = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.wasm`); + const receivedWasmModuleResult = await client.getFile(simpleWrapperUri, { + path: "wrap.wasm", + }); + if (!receivedWasmModuleResult.ok) fail(receivedWasmModuleResult.error); + const receivedWasmModule = receivedWasmModuleResult.value as Uint8Array; + expect(receivedWasmModule).toEqual(expectedWasmModule); + + const receivedHelloFileResult = await client.getFile(simpleWrapperUri, { + path: filePath, + encoding: "utf-8", + }); + if (!receivedHelloFileResult.ok) fail(receivedHelloFileResult.error); + const receivedHelloFile = receivedHelloFileResult.value as Uint8Array; + + expect(receivedHelloFile).toEqual(fileText); +}; diff --git a/packages/js/client/src/__tests__/core/embedded-wrapper.spec.ts b/packages/js/client/src/__tests__/core/embedded-wrapper.spec.ts new file mode 100644 index 0000000000..2e2c44247a --- /dev/null +++ b/packages/js/client/src/__tests__/core/embedded-wrapper.spec.ts @@ -0,0 +1,172 @@ +import fs from "fs"; +import path from "path"; +import { buildWrapper } from "@polywrap/test-env-js"; +import { GetPathToTestWrappers } from "@polywrap/test-cases"; +import { WasmWrapper, InMemoryFileReader } from "@polywrap/wasm-js"; +import { Uri, Wrapper } from "@polywrap/core-js"; +import { Result, ResultErr, ResultOk } from "@polywrap/result"; +import { PolywrapClient } from "../../PolywrapClient"; + +jest.setTimeout(200000); + +const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; +const simpleWrapperUri = new Uri(`fs/${simpleWrapperPath}/build`); + +describe("Embedded wrapper", () => { + beforeAll(async () => { + await buildWrapper(simpleWrapperPath); + }); + + it("can invoke an embedded wrapper", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + + let wrapper: Wrapper = await WasmWrapper.from(manifestBuffer, wasmModuleBuffer); + + const client = new PolywrapClient({ + wrappers: [ + { + uri: simpleWrapperUri, + wrapper + } + ] + }); + + const result = await client.invoke({ + uri: simpleWrapperUri.uri, + method: "simpleMethod", + args: { + arg: "test", + }, + }); + + if (!result.ok) fail(result.error); + expect(result.value).toBeTruthy(); + expect(typeof result.value).toBe("string"); + expect(result.value).toEqual("test"); + }); + + it("can get a file from wrapper", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from(manifestBuffer, wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); + + it("can add embedded wrapper through file reader", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from({ + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wrap manifest", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from( + InMemoryFileReader.fromWasmModule(wasmModuleBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.info") { + return ResultOk(manifestBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }) + ); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); + + it("can add embedded wrapper with async wasm module", async () => { + const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) + const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) + const testFilePath = "hello.txt"; + const testFileText = "Hello Test!"; + + const wrapper = await WasmWrapper.from(manifestBuffer, { + readFile: async (filePath): Promise> => { + if (filePath === testFilePath) { + return ResultOk(Buffer.from(testFileText, "utf-8")); + } else if (filePath === "wrap.wasm") { + return ResultOk(wasmModuleBuffer); + } else { + return ResultErr(new Error(`File not found: ${filePath}`)); + } + } + }); + + await testEmbeddedWrapperWithFile(wrapper, testFilePath, testFileText); + }); +}); + +const testEmbeddedWrapperWithFile = async (wrapper: WasmWrapper, filePath: string, fileText: string) => { + const client = new PolywrapClient({ + wrappers: [ + { + uri: simpleWrapperUri, + wrapper + } + ] + }); + + const expectedManifest = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.info`); + const receivedManifestResult = await client.getFile(simpleWrapperUri, { + path: "wrap.info", + }); + if (!receivedManifestResult.ok) fail(receivedManifestResult.error); + const receivedManifest = receivedManifestResult.value as Uint8Array; + expect(receivedManifest).toEqual(expectedManifest); + + const expectedWasmModule = + await fs.promises.readFile(`${simpleWrapperPath}/build/wrap.wasm`); + const receivedWasmModuleResult = await client.getFile(simpleWrapperUri, { + path: "wrap.wasm", + }); + if (!receivedWasmModuleResult.ok) fail(receivedWasmModuleResult.error); + const receivedWasmModule = receivedWasmModuleResult.value as Uint8Array; + expect(receivedWasmModule).toEqual(expectedWasmModule); + + const receivedHelloFileResult = await client.getFile(simpleWrapperUri, { + path: filePath, + encoding: "utf-8", + }); + if (!receivedHelloFileResult.ok) fail(receivedHelloFileResult.error); + const receivedHelloFile = receivedHelloFileResult.value as Uint8Array; + + expect(receivedHelloFile).toEqual(fileText); +}; diff --git a/packages/js/core-client/src/__tests__/embedded-package.spec.ts b/packages/js/core-client/src/__tests__/embedded-package.spec.ts index 4b8f373c19..23767d6e3c 100644 --- a/packages/js/core-client/src/__tests__/embedded-package.spec.ts +++ b/packages/js/core-client/src/__tests__/embedded-package.spec.ts @@ -50,7 +50,6 @@ describe("Embedded package", () => { it("can get a file from wrapper", async () => { const manifestBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.info")) const wasmModuleBuffer = fs.readFileSync(path.join(simpleWrapperPath, "build/wrap.wasm")) - const testFilePath = "hello.txt"; const testFileText = "Hello Test!"; From dfd0d60fb97ee1b5044091e6c4edc8a71d8625b5 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Thu, 15 Dec 2022 21:32:58 +0100 Subject: [PATCH 5/5] removed accidental commit --- packages/js/wasm/src/imports.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/js/wasm/src/imports.ts b/packages/js/wasm/src/imports.ts index 3a56f973dc..583e34a6ce 100644 --- a/packages/js/wasm/src/imports.ts +++ b/packages/js/wasm/src/imports.ts @@ -2,7 +2,7 @@ import { u32, WrapImports } from "./types"; import { readBytes, readString, writeBytes, writeString } from "./buffer"; -import { State, WasmWrapper } from "./WasmWrapper"; +import { State } from "./WasmWrapper"; import { msgpackEncode } from "@polywrap/msgpack-js"; import { CoreClient } from "@polywrap/core-js"; @@ -38,7 +38,6 @@ export const createImports = (config: { method: method, args: new Uint8Array(args), encodeResult: true, - callerId: wrapper.id }); if (result.ok) {