Skip to content

Commit

Permalink
feat: isomorphic sockets and use eventemitter3 (#2514)
Browse files Browse the repository at this point in the history
Reduces filesize by 3kb minified and gzipped or 2.8% and reduces bundler
config steps.

- Move `WSWrapper` to `@xrpl/isomorphic` to remove the need to add
mapping of `ws` to `WSWrapper` file in bundler configs
- Switch to `eventemitter3` which is smaller than `events` by almost
1kb and will not require a mapping to node's `events` in `vite`
bundling. `webpack` always automatically maps it.
    - max listeners is not a thing for `eventemitter3` so we do not
need to set it to `Infinity`. `ws` uses the native event emitter which
does still need that to be set.
- Remove `eventemitter2` which was only used in tests and was replaced
with `eventemitter3`

BREAKING CHANGE: Config for frontend bundlers has changed for `ws`.
  • Loading branch information
ckniffen committed Oct 18, 2023
1 parent 55dac2b commit 258ee13
Show file tree
Hide file tree
Showing 16 changed files with 221 additions and 148 deletions.
44 changes: 16 additions & 28 deletions UNIQUE_SETUPS.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ To use `xrpl.js` with React, you need to install shims for core NodeJS modules.
const webpack = require("webpack");
module.exports = function override(config) {
const fallback = config.resolve.fallback || {};
Object.assign(fallback, {
ws: require.resolve("xrpl/dist/npm/client/WSWrapper"),
});
config.resolve.fallback = fallback;
config.plugins = (config.plugins || []).concat([
new webpack.ProvidePlugin({
process: "process/browser",
Expand Down Expand Up @@ -127,40 +122,33 @@ export default defineConfig({
},
optimizeDeps: {
esbuildOptions: {
define: {
global: 'globalThis',
},
plugins: [
NodeGlobalsPolyfillPlugin({
process: true,
buffer: true,
}),
],
define: {
global: 'globalThis',
},
plugins: [
NodeGlobalsPolyfillPlugin({
process: true,
buffer: true,
}),
],
},
},
build: {
rollupOptions: {
},
build: {
rollupOptions: {
plugins: [
polyfillNode(),
polyfillNode(),
]
}
},
resolve: {
alias: {
events: 'events',
ws: 'xrpl/dist/npm/client/WSWrapper',
}
},
}})
})
```
3. Install the config dependencies and xrpl (e.g. using this command)
```shell
npm install --save-dev @esbuild-plugins/node-globals-polyfill \
rollup-plugin-polyfill-node \
&& npm install
events \
xrpl
&& npm install xrpl
```
### Using xrpl.js with Deno
Expand Down
175 changes: 115 additions & 60 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 258ee13

Please sign in to comment.