This commit is contained in:
Pavel Murygin 2023-01-18 00:37:58 +04:00
parent c73189e0aa
commit 407efb494b
32 changed files with 253 additions and 45 deletions

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -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

View File

@ -0,0 +1 @@
/dist/

View File

@ -0,0 +1,8 @@
module.exports = {
semi: true,
trailingComma: "all",
singleQuote: true,
printWidth: 120,
tabWidth: 4,
useTabs: false
};

View File

@ -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)

View File

@ -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"
}
}

View File

@ -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();

View File

@ -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/**/*"]
}

View File

@ -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();
};

View File

@ -2,7 +2,7 @@ import { BlobWorker, Worker } from 'threads';
import { Buffer } from 'buffer'; import { Buffer } from 'buffer';
import { LazyLoader } from '@fluencelabs/interfaces'; import { LazyLoader } from '@fluencelabs/interfaces';
import type { WorkerImplementation } from 'threads/dist/types/master'; import type { WorkerImplementation } from 'threads/dist/types/master';
import { fromBase64 } from 'js-base64'; import { toUint8Array, fromBase64 } from 'js-base64';
// @ts-ignore // @ts-ignore
import b64script from './marine-js.b64.web'; import b64script from './marine-js.b64.web';
@ -44,6 +44,15 @@ export class WasmWebLoader extends LazyLoader<SharedArrayBuffer | Buffer> {
} }
} }
export class InlinedWasmLoader extends LazyLoader<SharedArrayBuffer | Buffer> {
constructor(b64Content: string) {
super(() => {
const content = toUint8Array(b64Content);
return Buffer.from(content);
});
}
}
export class InlinedWorkerLoader extends LazyLoader<WorkerImplementation> { export class InlinedWorkerLoader extends LazyLoader<WorkerImplementation> {
constructor() { constructor() {
super(() => { super(() => {

View File

@ -24,7 +24,6 @@
"devDependencies": { "devDependencies": {
"buffer": "6.0.3", "buffer": "6.0.3",
"process": "0.11.10", "process": "0.11.10",
"webpack-plugin-replace": "1.2.0",
"@types/node": "16.11.59", "@types/node": "16.11.59",
"ts-loader": "8.4.0", "ts-loader": "8.4.0",
"typescript": "^4.6.4", "typescript": "^4.6.4",

131
pnpm-lock.yaml generated
View File

@ -2,6 +2,47 @@ lockfileVersion: 5.4
importers: 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: packages/@tests/marine/node:
specifiers: specifiers:
'@fluencelabs/avm': 0.32.1 '@fluencelabs/avm': 0.32.1
@ -76,47 +117,6 @@ importers:
webpack-cli: 4.10.0_6e633uucef4eifwu2eev7m6e4m webpack-cli: 4.10.0_6e633uucef4eifwu2eev7m6e4m
webpack-dev-server: 4.11.1_pda42hcaj7d62cr262fr632kue 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: packages/@tests/smoke:
specifiers: specifiers:
'@fluencelabs/fluence': workspace:* '@fluencelabs/fluence': workspace:*
@ -224,6 +224,38 @@ importers:
ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy ts-node: 10.9.1_f4s53rsdbgkmxc2oaa23drhnsy
typescript: 4.6.4 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: packages/client/tools:
specifiers: specifiers:
'@fluencelabs/marine.worker-script': workspace:* '@fluencelabs/marine.worker-script': workspace:*
@ -444,7 +476,6 @@ importers:
typescript: ^4.6.4 typescript: ^4.6.4
webpack: 5.75.0 webpack: 5.75.0
webpack-cli: 5.0.1 webpack-cli: 5.0.1
webpack-plugin-replace: 1.2.0
dependencies: dependencies:
'@fluencelabs/marine-js': 0.3.38 '@fluencelabs/marine-js': 0.3.38
threads: 1.7.0 threads: 1.7.0
@ -456,7 +487,6 @@ importers:
typescript: 4.7.4 typescript: 4.7.4
webpack: 5.75.0_webpack-cli@5.0.1 webpack: 5.75.0_webpack-cli@5.0.1
webpack-cli: 5.0.1_webpack@5.75.0 webpack-cli: 5.0.1_webpack@5.75.0
webpack-plugin-replace: 1.2.0
packages: packages:
@ -16256,6 +16286,21 @@ packages:
webpack: 5.75.0_webpack-cli@5.0.1 webpack: 5.75.0_webpack-cli@5.0.1
dev: true 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: /ts-node/10.9.1_apbkdfxvcdmborgupeskcsfbo4:
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true hasBin: true