From 407efb494b3bf9e7f75c11f22685cecb2f75d579 Mon Sep 17 00:00:00 2001 From: Pavel Murygin Date: Wed, 18 Jan 2023 00:37:58 +0400 Subject: [PATCH] tmp --- .../react}/.gitignore | 0 .../react}/README.md | 0 .../react}/aqua/demo.aqua | 0 .../react}/package.json | 0 .../react}/public/favicon.ico | Bin .../react}/public/index.html | 0 .../react}/public/logo192.png | Bin .../react}/public/logo512.png | Bin .../react}/public/manifest.json | 0 .../react}/public/marine-js.web.js | 0 .../react}/public/robots.txt | 0 .../react}/src/App.css | 0 .../react}/src/App.tsx | 0 .../react}/src/_aqua/demo.ts | 0 .../react}/src/index.css | 0 .../react}/src/index.tsx | 0 .../react}/src/logo.svg | 0 .../react}/src/react-app-env.d.ts | 0 .../react}/src/reportWebVitals.ts | 0 .../react}/src/setupTests.ts | 0 .../react}/tsconfig.json | 0 .../js-client.web.standalone/.gitignore | 21 +++ .../js-client.web.standalone/.prettierignore | 1 + .../js-client.web.standalone/.prettierrc.js | 8 ++ .../client/js-client.web.standalone/README.md | 11 ++ .../js-client.web.standalone/package.json | 33 +++++ .../js-client.web.standalone/src/index.ts | 18 +++ .../js-client.web.standalone/tsconfig.json | 21 +++ .../webpack.config.js | 42 ++++++ packages/marine/deps-loader.web/src/index.ts | 11 +- packages/marine/worker-script/package.json | 1 - pnpm-lock.yaml | 131 ++++++++++++------ 32 files changed, 253 insertions(+), 45 deletions(-) rename packages/@tests/{react_test => frameworks/react}/.gitignore (100%) rename packages/@tests/{react_test => frameworks/react}/README.md (100%) rename packages/@tests/{react_test => frameworks/react}/aqua/demo.aqua (100%) rename packages/@tests/{react_test => frameworks/react}/package.json (100%) rename packages/@tests/{react_test => frameworks/react}/public/favicon.ico (100%) rename packages/@tests/{react_test => frameworks/react}/public/index.html (100%) rename packages/@tests/{react_test => frameworks/react}/public/logo192.png (100%) rename packages/@tests/{react_test => frameworks/react}/public/logo512.png (100%) rename packages/@tests/{react_test => frameworks/react}/public/manifest.json (100%) rename packages/@tests/{react_test => frameworks/react}/public/marine-js.web.js (100%) rename packages/@tests/{react_test => frameworks/react}/public/robots.txt (100%) rename packages/@tests/{react_test => frameworks/react}/src/App.css (100%) rename packages/@tests/{react_test => frameworks/react}/src/App.tsx (100%) rename packages/@tests/{react_test => frameworks/react}/src/_aqua/demo.ts (100%) rename packages/@tests/{react_test => frameworks/react}/src/index.css (100%) rename packages/@tests/{react_test => frameworks/react}/src/index.tsx (100%) rename packages/@tests/{react_test => frameworks/react}/src/logo.svg (100%) rename packages/@tests/{react_test => frameworks/react}/src/react-app-env.d.ts (100%) rename packages/@tests/{react_test => frameworks/react}/src/reportWebVitals.ts (100%) rename packages/@tests/{react_test => frameworks/react}/src/setupTests.ts (100%) rename packages/@tests/{react_test => frameworks/react}/tsconfig.json (100%) create mode 100644 packages/client/js-client.web.standalone/.gitignore create mode 100644 packages/client/js-client.web.standalone/.prettierignore create mode 100644 packages/client/js-client.web.standalone/.prettierrc.js create mode 100644 packages/client/js-client.web.standalone/README.md create mode 100644 packages/client/js-client.web.standalone/package.json create mode 100644 packages/client/js-client.web.standalone/src/index.ts create mode 100644 packages/client/js-client.web.standalone/tsconfig.json create mode 100644 packages/client/js-client.web.standalone/webpack.config.js diff --git a/packages/@tests/react_test/.gitignore b/packages/@tests/frameworks/react/.gitignore similarity index 100% rename from packages/@tests/react_test/.gitignore rename to packages/@tests/frameworks/react/.gitignore diff --git a/packages/@tests/react_test/README.md b/packages/@tests/frameworks/react/README.md similarity index 100% rename from packages/@tests/react_test/README.md rename to packages/@tests/frameworks/react/README.md diff --git a/packages/@tests/react_test/aqua/demo.aqua b/packages/@tests/frameworks/react/aqua/demo.aqua similarity index 100% rename from packages/@tests/react_test/aqua/demo.aqua rename to packages/@tests/frameworks/react/aqua/demo.aqua diff --git a/packages/@tests/react_test/package.json b/packages/@tests/frameworks/react/package.json similarity index 100% rename from packages/@tests/react_test/package.json rename to packages/@tests/frameworks/react/package.json diff --git a/packages/@tests/react_test/public/favicon.ico b/packages/@tests/frameworks/react/public/favicon.ico similarity index 100% rename from packages/@tests/react_test/public/favicon.ico rename to packages/@tests/frameworks/react/public/favicon.ico diff --git a/packages/@tests/react_test/public/index.html b/packages/@tests/frameworks/react/public/index.html similarity index 100% rename from packages/@tests/react_test/public/index.html rename to packages/@tests/frameworks/react/public/index.html diff --git a/packages/@tests/react_test/public/logo192.png b/packages/@tests/frameworks/react/public/logo192.png similarity index 100% rename from packages/@tests/react_test/public/logo192.png rename to packages/@tests/frameworks/react/public/logo192.png diff --git a/packages/@tests/react_test/public/logo512.png b/packages/@tests/frameworks/react/public/logo512.png similarity index 100% rename from packages/@tests/react_test/public/logo512.png rename to packages/@tests/frameworks/react/public/logo512.png diff --git a/packages/@tests/react_test/public/manifest.json b/packages/@tests/frameworks/react/public/manifest.json similarity index 100% rename from packages/@tests/react_test/public/manifest.json rename to packages/@tests/frameworks/react/public/manifest.json diff --git a/packages/@tests/react_test/public/marine-js.web.js b/packages/@tests/frameworks/react/public/marine-js.web.js similarity index 100% rename from packages/@tests/react_test/public/marine-js.web.js rename to packages/@tests/frameworks/react/public/marine-js.web.js diff --git a/packages/@tests/react_test/public/robots.txt b/packages/@tests/frameworks/react/public/robots.txt similarity index 100% rename from packages/@tests/react_test/public/robots.txt rename to packages/@tests/frameworks/react/public/robots.txt diff --git a/packages/@tests/react_test/src/App.css b/packages/@tests/frameworks/react/src/App.css similarity index 100% rename from packages/@tests/react_test/src/App.css rename to packages/@tests/frameworks/react/src/App.css diff --git a/packages/@tests/react_test/src/App.tsx b/packages/@tests/frameworks/react/src/App.tsx similarity index 100% rename from packages/@tests/react_test/src/App.tsx rename to packages/@tests/frameworks/react/src/App.tsx diff --git a/packages/@tests/react_test/src/_aqua/demo.ts b/packages/@tests/frameworks/react/src/_aqua/demo.ts similarity index 100% rename from packages/@tests/react_test/src/_aqua/demo.ts rename to packages/@tests/frameworks/react/src/_aqua/demo.ts diff --git a/packages/@tests/react_test/src/index.css b/packages/@tests/frameworks/react/src/index.css similarity index 100% rename from packages/@tests/react_test/src/index.css rename to packages/@tests/frameworks/react/src/index.css diff --git a/packages/@tests/react_test/src/index.tsx b/packages/@tests/frameworks/react/src/index.tsx similarity index 100% rename from packages/@tests/react_test/src/index.tsx rename to packages/@tests/frameworks/react/src/index.tsx diff --git a/packages/@tests/react_test/src/logo.svg b/packages/@tests/frameworks/react/src/logo.svg similarity index 100% rename from packages/@tests/react_test/src/logo.svg rename to packages/@tests/frameworks/react/src/logo.svg diff --git a/packages/@tests/react_test/src/react-app-env.d.ts b/packages/@tests/frameworks/react/src/react-app-env.d.ts similarity index 100% rename from packages/@tests/react_test/src/react-app-env.d.ts rename to packages/@tests/frameworks/react/src/react-app-env.d.ts diff --git a/packages/@tests/react_test/src/reportWebVitals.ts b/packages/@tests/frameworks/react/src/reportWebVitals.ts similarity index 100% rename from packages/@tests/react_test/src/reportWebVitals.ts rename to packages/@tests/frameworks/react/src/reportWebVitals.ts diff --git a/packages/@tests/react_test/src/setupTests.ts b/packages/@tests/frameworks/react/src/setupTests.ts similarity index 100% rename from packages/@tests/react_test/src/setupTests.ts rename to packages/@tests/frameworks/react/src/setupTests.ts diff --git a/packages/@tests/react_test/tsconfig.json b/packages/@tests/frameworks/react/tsconfig.json similarity index 100% rename from packages/@tests/react_test/tsconfig.json rename to packages/@tests/frameworks/react/tsconfig.json diff --git a/packages/client/js-client.web.standalone/.gitignore b/packages/client/js-client.web.standalone/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/client/js-client.web.standalone/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/client/js-client.web.standalone/.prettierignore b/packages/client/js-client.web.standalone/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/client/js-client.web.standalone/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/client/js-client.web.standalone/.prettierrc.js b/packages/client/js-client.web.standalone/.prettierrc.js new file mode 100644 index 00000000..4e5ea887 --- /dev/null +++ b/packages/client/js-client.web.standalone/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: "all", + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false +}; diff --git a/packages/client/js-client.web.standalone/README.md b/packages/client/js-client.web.standalone/README.md new file mode 100644 index 00000000..b05a79df --- /dev/null +++ b/packages/client/js-client.web.standalone/README.md @@ -0,0 +1,11 @@ +# JS Client web + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/client/js-client.web.standalone/package.json b/packages/client/js-client.web.standalone/package.json new file mode 100644 index 00000000..ffe126b6 --- /dev/null +++ b/packages/client/js-client.web.standalone/package.json @@ -0,0 +1,33 @@ +{ + "name": "@fluencelabs/js-client.web.standalone", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "webpack" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": {}, + "devDependencies": { + "js-base64": "3.7.3", + "webpack": "5.75.0", + "webpack-cli": "5.0.1", + "webpack-plugin-replace": "1.2.0", + "@fluencelabs/js-peer": "workspace:0.1.0", + "@fluencelabs/marine.deps-loader.web": "workspace:0.1.0", + "@fluencelabs/marine.background-runner": "workspace:0.1.0", + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2", + "ts-loader": "9.4.2", + "typescript": "4.6.4" + } +} diff --git a/packages/client/js-client.web.standalone/src/index.ts b/packages/client/js-client.web.standalone/src/index.ts new file mode 100644 index 00000000..c572161a --- /dev/null +++ b/packages/client/js-client.web.standalone/src/index.ts @@ -0,0 +1,18 @@ +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/avm'; +import { marineLogFunction } from '@fluencelabs/js-peer/dist/peerUtils'; +import { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; +import { InlinedWorkerLoader, InlinedWasmLoader } from '@fluencelabs/marine.deps-loader.web'; + +export const makeDefaultPeer = () => { + const workerLoader = new InlinedWorkerLoader(); + const controlModuleLoader = new InlinedWasmLoader('__marine__'); + const avmModuleLoader = new InlinedWasmLoader('__avm__'); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +// @ts-ignore +globalThis.defaultPeer = makeDefaultPeer(); diff --git a/packages/client/js-client.web.standalone/tsconfig.json b/packages/client/js-client.web.standalone/tsconfig.json new file mode 100644 index 00000000..0d2020f2 --- /dev/null +++ b/packages/client/js-client.web.standalone/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "baseUrl": ".", + "downlevelIteration": true, + "sourceMap": true, + "inlineSources": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "esModuleInterop": true, + "declarationMap": true, + "strict": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "bundle"], + "include": ["src/**/*"] +} diff --git a/packages/client/js-client.web.standalone/webpack.config.js b/packages/client/js-client.web.standalone/webpack.config.js new file mode 100644 index 00000000..7642ae93 --- /dev/null +++ b/packages/client/js-client.web.standalone/webpack.config.js @@ -0,0 +1,42 @@ +// Generated using webpack-cli https://github.com/webpack/webpack-cli + +const path = require('path'); +const ReplacePlugin = require('webpack-plugin-replace'); + +const mode = 'production'; + +const config = () => ({ + mode: mode, + entry: './src/index.ts', + output: { + path: path.resolve('dist'), + }, + module: { + rules: [ + { + test: /\.(js|ts|tsx)$/i, + use: [ + { + loader: 'ts-loader', + }, + ], + exclude: ['/node_modules/'], + }, + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + }, + plugins: [ + new ReplacePlugin({ + values: { + __marine__: '10', + __avm__: '20', + }, + }), + ], +}); + +module.exports = () => { + return config(); +}; diff --git a/packages/marine/deps-loader.web/src/index.ts b/packages/marine/deps-loader.web/src/index.ts index f1626c13..096d3ac8 100644 --- a/packages/marine/deps-loader.web/src/index.ts +++ b/packages/marine/deps-loader.web/src/index.ts @@ -2,7 +2,7 @@ import { BlobWorker, Worker } from 'threads'; import { Buffer } from 'buffer'; import { LazyLoader } from '@fluencelabs/interfaces'; import type { WorkerImplementation } from 'threads/dist/types/master'; -import { fromBase64 } from 'js-base64'; +import { toUint8Array, fromBase64 } from 'js-base64'; // @ts-ignore import b64script from './marine-js.b64.web'; @@ -44,6 +44,15 @@ export class WasmWebLoader extends LazyLoader { } } +export class InlinedWasmLoader extends LazyLoader { + constructor(b64Content: string) { + super(() => { + const content = toUint8Array(b64Content); + return Buffer.from(content); + }); + } +} + export class InlinedWorkerLoader extends LazyLoader { constructor() { super(() => { diff --git a/packages/marine/worker-script/package.json b/packages/marine/worker-script/package.json index 96815db9..9b55a93c 100644 --- a/packages/marine/worker-script/package.json +++ b/packages/marine/worker-script/package.json @@ -24,7 +24,6 @@ "devDependencies": { "buffer": "6.0.3", "process": "0.11.10", - "webpack-plugin-replace": "1.2.0", "@types/node": "16.11.59", "ts-loader": "8.4.0", "typescript": "^4.6.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0cfdf61..1560a9e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,6 +2,47 @@ lockfileVersion: 5.4 importers: + packages/@tests/frameworks/react: + specifiers: + '@fluencelabs/aqua': 0.8.0-368 + '@fluencelabs/aqua-lib': 0.6.0 + '@fluencelabs/compiler-support': workspace:* + '@fluencelabs/fluence-network-environment': ^1.0.13 + '@fluencelabs/js-client.web': workspace:* + '@fluencelabs/tools': workspace:* + '@testing-library/jest-dom': ^5.16.5 + '@testing-library/react': ^13.4.0 + '@testing-library/user-event': ^13.5.0 + '@types/jest': ^27.5.2 + '@types/node': 16.11.59 + '@types/react': ^18.0.18 + '@types/react-dom': ^18.0.6 + react: ^18.2.0 + react-dom: ^18.2.0 + react-scripts: 5.0.1 + typescript: ^4.8.2 + web-vitals: ^2.1.4 + dependencies: + '@fluencelabs/compiler-support': link:../../../client/compiler-support + '@fluencelabs/fluence-network-environment': 1.0.13 + '@fluencelabs/js-client.web': link:../../../client/js-client.web + '@testing-library/jest-dom': 5.16.5 + '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y + '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm + '@types/jest': 27.5.2 + '@types/node': 16.11.59 + '@types/react': 18.0.26 + '@types/react-dom': 18.0.10 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-scripts: 5.0.1_suhoixrbctjhyfojppfjnc4z4y + typescript: 4.9.4 + web-vitals: 2.1.4 + devDependencies: + '@fluencelabs/aqua': 0.8.0-368_6ufwt3jpv5t55s2rz2aorqe75e + '@fluencelabs/aqua-lib': 0.6.0 + '@fluencelabs/tools': link:../../../client/tools + packages/@tests/marine/node: specifiers: '@fluencelabs/avm': 0.32.1 @@ -76,47 +117,6 @@ importers: webpack-cli: 4.10.0_6e633uucef4eifwu2eev7m6e4m webpack-dev-server: 4.11.1_pda42hcaj7d62cr262fr632kue - packages/@tests/react_test: - specifiers: - '@fluencelabs/aqua': 0.8.0-368 - '@fluencelabs/aqua-lib': 0.6.0 - '@fluencelabs/compiler-support': workspace:* - '@fluencelabs/fluence-network-environment': ^1.0.13 - '@fluencelabs/js-client.web': workspace:* - '@fluencelabs/tools': workspace:* - '@testing-library/jest-dom': ^5.16.5 - '@testing-library/react': ^13.4.0 - '@testing-library/user-event': ^13.5.0 - '@types/jest': ^27.5.2 - '@types/node': 16.11.59 - '@types/react': ^18.0.18 - '@types/react-dom': ^18.0.6 - react: ^18.2.0 - react-dom: ^18.2.0 - react-scripts: 5.0.1 - typescript: ^4.8.2 - web-vitals: ^2.1.4 - dependencies: - '@fluencelabs/compiler-support': link:../../client/compiler-support - '@fluencelabs/fluence-network-environment': 1.0.13 - '@fluencelabs/js-client.web': link:../../client/js-client.web - '@testing-library/jest-dom': 5.16.5 - '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y - '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm - '@types/jest': 27.5.2 - '@types/node': 16.11.59 - '@types/react': 18.0.26 - '@types/react-dom': 18.0.10 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-scripts: 5.0.1_suhoixrbctjhyfojppfjnc4z4y - typescript: 4.9.4 - web-vitals: 2.1.4 - devDependencies: - '@fluencelabs/aqua': 0.8.0-368_6ufwt3jpv5t55s2rz2aorqe75e - '@fluencelabs/aqua-lib': 0.6.0 - '@fluencelabs/tools': link:../../client/tools - packages/@tests/smoke: specifiers: '@fluencelabs/fluence': workspace:* @@ -224,6 +224,38 @@ importers: ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy typescript: 4.6.4 + packages/client/js-client.web.standalone: + specifiers: + '@fluencelabs/js-peer': workspace:0.1.0 + '@fluencelabs/marine.background-runner': workspace:0.1.0 + '@fluencelabs/marine.deps-loader.web': workspace:0.1.0 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0 + js-base64: 3.7.3 + ts-jest: 28.0.2 + ts-loader: 9.4.2 + ts-node: 10.9.1 + typescript: 4.6.4 + webpack: 5.75.0 + webpack-cli: 5.0.1 + webpack-plugin-replace: 1.2.0 + devDependencies: + '@fluencelabs/js-peer': link:../../core/js-peer + '@fluencelabs/marine.background-runner': link:../../marine/background-runner + '@fluencelabs/marine.deps-loader.web': link:../../marine/deps-loader.web + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_4echt27za7uk6ezjshmbxcfmgy + js-base64: 3.7.3 + ts-jest: 28.0.2_vibqa5hxa5biq5fwuxzv5iobty + ts-loader: 9.4.2_ot4tevpsagasia5fdh7emkeuyq + ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy + typescript: 4.6.4 + webpack: 5.75.0_webpack-cli@5.0.1 + webpack-cli: 5.0.1_webpack@5.75.0 + webpack-plugin-replace: 1.2.0 + packages/client/tools: specifiers: '@fluencelabs/marine.worker-script': workspace:* @@ -444,7 +476,6 @@ importers: typescript: ^4.6.4 webpack: 5.75.0 webpack-cli: 5.0.1 - webpack-plugin-replace: 1.2.0 dependencies: '@fluencelabs/marine-js': 0.3.38 threads: 1.7.0 @@ -456,7 +487,6 @@ importers: typescript: 4.7.4 webpack: 5.75.0_webpack-cli@5.0.1 webpack-cli: 5.0.1_webpack@5.75.0 - webpack-plugin-replace: 1.2.0 packages: @@ -16256,6 +16286,21 @@ packages: webpack: 5.75.0_webpack-cli@5.0.1 dev: true + /ts-loader/9.4.2_ot4tevpsagasia5fdh7emkeuyq: + resolution: {integrity: sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.12.0 + micromatch: 4.0.5 + semver: 7.3.8 + typescript: 4.6.4 + webpack: 5.75.0_webpack-cli@5.0.1 + dev: true + /ts-node/10.9.1_apbkdfxvcdmborgupeskcsfbo4: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true