Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/extract-express-adapter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'oc-express-server-adapter': minor
'oc': patch
---

Extract the Express HTTP server adapter into `oc-express-server-adapter`.

The Express adapter remains the default registry server. This package split makes it possible to drop Express from core later and treat it as an opt-in adapter, matching `oc-fastify-server-adapter`.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ packages/oc-azure-storage-adapter/dist/
packages/oc-gs-storage-adapter/dist/
packages/oc-riak-storage-adapter/dist/
packages/oc-fastify-server-adapter/dist/
packages/oc-express-server-adapter/dist/
packages/oc/test-components/
packages/oc-client-browser/playwright-report/
packages/oc-client-browser/test-results/
Expand Down
3 changes: 3 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
"packages/oc-fastify-server-adapter/**/*",
"!packages/oc-fastify-server-adapter/dist/**/*",
"!packages/oc-fastify-server-adapter/node_modules/**/*",
"packages/oc-express-server-adapter/**/*",
"!packages/oc-express-server-adapter/dist/**/*",
"!packages/oc-express-server-adapter/node_modules/**/*",
"packages/oc-client-browser/**/*",
"!packages/oc-client-browser/dist/**/*",
"!packages/oc-client-browser/vendor/**/*",
Expand Down
60 changes: 48 additions & 12 deletions package-lock.json

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

60 changes: 60 additions & 0 deletions packages/oc-express-server-adapter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# oc-express-server-adapter

Express HTTP server adapter for the OC registry. Implements OC's neutral
`HttpServerAdapter` interface and is the **default** adapter used by `oc` when
no custom `server.adapter` is configured.

## Installation

```sh
npm install oc-express-server-adapter express
```

`oc` already depends on this package and uses it by default, so most registry
users do not need to install it directly. Install it yourself when you want to
configure the adapter explicitly or share the factory across projects.

## Usage

```js
const oc = require('oc');
const createExpressAdapter = require('oc-express-server-adapter').default;

const registry = oc.Registry({
// regular OC registry options...
server: {
adapter: createExpressAdapter,
options: {
port: 3030
}
}
});
```

## Options

| Option | Type | Description |
| --- | --- | --- |
| `port` | `number \| string` | Optional. Stored on the Express app via `app.set('port', port)` so startup logs can read it. The registry still passes the listen port to `adapter.listen()`. |

`options` may also be a bare `number` or `string` port for convenience.

## Contract

- `registry.start()` returns a real Express application as `app`.
- `server.httpServer()` and the `{ server }` value returned by `registry.start()`
are the underlying Node `http.Server`.
- User-supplied Connect/Express middleware (`beforePublish`, auth packages,
custom `routes[]`) is accepted through `fromConnect()` without wrapping
overhead when already Express-native.
- JSON bodies use `express.json({ inflate: true })` and urlencoded bodies use
`express.urlencoded({ extended: true })`.
- Strong ETags (`app.set('etag', 'strong')`) and `json spaces = 0` match the
historical registry behavior.
- File uploads use `multer` disk storage and populate `req.files`.

## Future

This package exists so Express can eventually become an **opt-in** dependency
of `oc` (the same way Fastify already is via `oc-fastify-server-adapter`),
instead of living inside the core package.
67 changes: 67 additions & 0 deletions packages/oc-express-server-adapter/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"name": "oc-express-server-adapter",
"version": "0.1.0",
"description": "Express HTTP server adapter for OC",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"repository": {
"type": "git",
"url": "https://github.com/opencomponents/oc.git",
"directory": "packages/oc-express-server-adapter"
},
"bugs": {
"url": "https://github.com/opencomponents/oc/issues"
},
"homepage": "https://github.com/opencomponents/oc/tree/master/packages/oc-express-server-adapter#readme",
"keywords": [
"oc",
"opencomponents",
"express",
"server",
"adapter"
],
"author": "Matteo Figus",
"license": "MIT",
"files": [
"dist",
"!dist/test/**"
],
"scripts": {
"prebuild": "rimraf dist",
"build": "npm run lint && tsc",
"lint": "npx @biomejs/biome check src test",
"lint:apply": "npx @biomejs/biome check --write src test",
"test": "jest --runInBand",
"test-silent": "jest --runInBand --silent"
},
"jest": {
"preset": "ts-jest",
"testEnvironment": "node",
"testPathIgnorePatterns": [
"/dist/"
]
},
"dependencies": {
"cookie-parser": "^1.4.7",
"errorhandler": "^1.5.2",
"express": "^5.2.1",
"morgan": "^1.11.0",
"multer": "^2.0.2",
"response-time": "^2.3.4"
},
"devDependencies": {
"@biomejs/biome": "^2.5.0",
"@types/cookie-parser": "^1.4.10",
"@types/errorhandler": "^1.5.3",
"@types/express": "^5.0.6",
"@types/jest": "^29.5.14",
"@types/morgan": "^1.9.10",
"@types/multer": "^2.1.0",
"@types/node": "^25.9.3",
"@types/response-time": "^2.3.9",
"jest": "^29.7.0",
"rimraf": "^6.1.3",
"ts-jest": "^29.2.5",
"typescript": "^6.0.3"
}
}
Loading
Loading