# portz

> Service port registry and dependency queue manager

Latest version **0.1.0** (published 2021-05-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install portz
pnpm add portz
yarn add portz
bun add portz
```

Provides the command `portz`.

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.1.0 |
| Published | 2021-05-24 |
| First published | 2021-05-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=12.13.0 |
| Dependencies | 7 |
| Unpacked size | 15.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 81 |
| Maintainers | deepsweet |

## Links

- npm: https://www.npmjs.com/package/portz
- Repository: https://github.com/nextools/metarepo
- Homepage: https://github.com/nextools/metarepo#readme
- Issues: https://github.com/nextools/metarepo/issues
- npm.io page: https://npm.io/package/portz

## Dependencies (7)

- [pifs](https://npm.io/package/pifs.md) ^2.0.0
- [dleet](https://npm.io/package/dleet.md) ^2.0.1
- [portu](https://npm.io/package/portu.md) ^0.2.0
- [sleap](https://npm.io/package/sleap.md) ^0.1.0
- [unchunk](https://npm.io/package/unchunk.md) ^0.2.0
- [commander](https://npm.io/package/commander.md) ^7.2.0
- [@babel/runtime](https://npm.io/package/@babel/runtime.md) ^7.14.0

## Recent versions

- 0.1.0 (latest) — 2021-05-24
- 0.0.0 — 2021-05-21

## README

# portz ![npm](https://flat.badgen.net/npm/v/portz)

Service port registry and dependency queue manager.

Allows to run services concurrently respecting cross-dependencies by waiting for TCP port to become in use on `0.0.0.0` interface.

## Install

```sh
$ yarn add portz
```

## Usage

### API

```ts
type TStartServerOptions = {
  fromPort: number,
  toPort: number
}

const startServer: (options: TStartServerOptions) => Promise<() => Promise<void>>
```

```ts
type TRegisterServiceOptions = {
  name: string,
  deps?: string[]
}

type TRegisterServiceResult = {
  port: number,
  deps?: {
    [k: string]: number
  },
}

const registerService: (options: TRegisterServiceOptions) => Promise<TRegisterServiceResult>
```

```ts
const unregisterService: (name: string) => Promise<void>
```

```ts
import { startServer, registerService } from 'portz'

const stopServer = await startServer({
  fromPort: 3000,
  toPort: 4000
})

console.log(
  await Promise.all([
    registerService({ name: 'foo', deps: ['bar'] }),
    registerService({ name: 'bar' }),
    registerService({ name: 'baz', deps: ['foo', 'bar'] }
  ])
)
/*
[
  { port: 3001, deps: { bar: 3000 } },
  { port: 3000 },
  { port: 3002, deps: { foo: 3001, bar: 3000 } }
]
*/

await stopServer()
```

### CLI

```json
{
  "scripts": {
    "foo": "echo $PORT",
    "bar": "echo $PORT $PORT_FOO"
  }
}
```

```sh
portz start --range 3000:4000
```

```sh
portz register --name foo -- npm run foo
portz register --name bar --deps foo -- npm run bar
```

---
_Source: https://npm.io/package/portz · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
