Skip to content

A Node.js Implementation of the Cloudflare Socket API

License

Notifications You must be signed in to change notification settings

Ethan-Arrowood/socket

Repository files navigation

@arrowood.dev/socket

A Node.js Implementation of connect(), the TCP Socket API proposed within WinterCG, and implemented in Cloudflare Workers.

You can use this to provide the connect() API in a Node.js environment.

If you need to provide an interface similar to net.connect() or tls.connect() from Node.js, from an environment, where only the proposed Socket API is available, pg-cloudflare provides such an interface.

Installation

npm i @arrowood.dev/socket

Contributing

Requirements:

  • Node.js v18.x
  • pnpm v8.6.12 (recommend using corepack)

The formatting, linting, and typechecking of this repo are based off of @vercel/style-guide.

Building

This project uses TypeScript for building. This must be manually executed using:

pnpm build

Output will be in the dist folder.

Formatting

This project uses prettier for formatting. Code is formatted automatically when you commit, and you can run the formatter manually using:

pnpm format

All files (except those listed in .prettierignore) will be formatted.

Prettier is configured by .prettierrc.js. It is based on @vercel/style-guide/prettier.

Linting

This project uses eslint for linting. Code is linted automatically when you commit, and you can run the linter manually using:

pnpm lint

All files (except those listed in .eslintignore) will be linted.

ESLint is configured by .eslintrc.js. It is based on @vercel/style-guide/eslint/node

Testing

This project uses node-tap for testing. Run tests using:

pnpm test

Only test files matching the pattern test/*.test.ts will be executed.

Testing utility functions should be stored in test/utils.ts and be well documented.

Type Checking

To manually type-check the repo without producing a build, use:

pnpm type-check

This project uses TypeScript. There exists multiple TypeScript config files; each serves a different purpose.