@congruent-stack/congruent-api-express 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,8 +2,36 @@
2
2
 
3
3
  var congruentApi = require('@congruent-stack/congruent-api');
4
4
 
5
- function getHelloWorldMessageExpress(name) {
6
- return congruentApi.getHelloWorldMessage(" [express] " + name);
5
+ function createExpressRegistry(app, diContainer, apiContract) {
6
+ const registry = congruentApi.createRegistry(diContainer, apiContract, {
7
+ handlerRegisteredCallback: (entry) => {
8
+ console.log("Registering Express route:", entry.methodEndpoint.genericPath);
9
+ const { genericPath } = entry.methodEndpoint;
10
+ const method = entry.methodEndpoint.method.toLowerCase();
11
+ app[method](genericPath, async (req, res) => {
12
+ req.pathParams = req.params;
13
+ const result = await entry.trigger(req);
14
+ res.status(result.code).json(result.body);
15
+ });
16
+ },
17
+ middlewareHandlerRegisteredCallback: (entry) => {
18
+ console.log("Registering Express middleware:", entry.genericPath);
19
+ app.use(entry.genericPath, async (req, res, next) => {
20
+ req.pathParams = req.params;
21
+ const haltResponse = await entry.trigger(req, next);
22
+ if (haltResponse && congruentApi.isHttpResponseObject(haltResponse)) {
23
+ res.status(haltResponse.code).json(haltResponse.body);
24
+ }
25
+ });
26
+ }
27
+ });
28
+ return registry;
29
+ }
30
+ function expressPreHandler(app, prehandler) {
31
+ return (({ methodEndpoint: { lowerCasedMethod, genericPath } }) => {
32
+ app[lowerCasedMethod](genericPath, prehandler);
33
+ });
7
34
  }
8
35
 
9
- exports.getHelloWorldMessageExpress = getHelloWorldMessageExpress;
36
+ exports.createExpressRegistry = createExpressRegistry;
37
+ exports.expressPreHandler = expressPreHandler;
package/dist/index.d.cts CHANGED
@@ -1,3 +1,8 @@
1
- declare function getHelloWorldMessageExpress(name: string): string;
1
+ import * as _congruent_stack_congruent_api from '@congruent-stack/congruent-api';
2
+ import { IApiContractDefinition, ValidateApiContractDefinition, DIContainer, ApiContract, IHttpMethodEndpointDefinition, ValidateHttpMethodEndpointDefinition, PrepareRegistryEntryCallback } from '@congruent-stack/congruent-api';
3
+ import { Express, RequestHandler } from 'express';
2
4
 
3
- export { getHelloWorldMessageExpress };
5
+ declare function createExpressRegistry<TDef extends IApiContractDefinition & ValidateApiContractDefinition<TDef>, TDIContainer extends DIContainer>(app: Express, diContainer: TDIContainer, apiContract: ApiContract<TDef>): _congruent_stack_congruent_api.ApiHandlersRegistry<TDef, TDIContainer, "">;
6
+ declare function expressPreHandler<TDef extends IHttpMethodEndpointDefinition & ValidateHttpMethodEndpointDefinition<TDef>, TDIContainer extends DIContainer, TPathParams extends string>(app: Express, prehandler: RequestHandler): PrepareRegistryEntryCallback<TDef, TDIContainer, TPathParams>;
7
+
8
+ export { createExpressRegistry, expressPreHandler };
package/dist/index.d.mts CHANGED
@@ -1,3 +1,8 @@
1
- declare function getHelloWorldMessageExpress(name: string): string;
1
+ import * as _congruent_stack_congruent_api from '@congruent-stack/congruent-api';
2
+ import { IApiContractDefinition, ValidateApiContractDefinition, DIContainer, ApiContract, IHttpMethodEndpointDefinition, ValidateHttpMethodEndpointDefinition, PrepareRegistryEntryCallback } from '@congruent-stack/congruent-api';
3
+ import { Express, RequestHandler } from 'express';
2
4
 
3
- export { getHelloWorldMessageExpress };
5
+ declare function createExpressRegistry<TDef extends IApiContractDefinition & ValidateApiContractDefinition<TDef>, TDIContainer extends DIContainer>(app: Express, diContainer: TDIContainer, apiContract: ApiContract<TDef>): _congruent_stack_congruent_api.ApiHandlersRegistry<TDef, TDIContainer, "">;
6
+ declare function expressPreHandler<TDef extends IHttpMethodEndpointDefinition & ValidateHttpMethodEndpointDefinition<TDef>, TDIContainer extends DIContainer, TPathParams extends string>(app: Express, prehandler: RequestHandler): PrepareRegistryEntryCallback<TDef, TDIContainer, TPathParams>;
7
+
8
+ export { createExpressRegistry, expressPreHandler };
package/dist/index.mjs CHANGED
@@ -1,7 +1,34 @@
1
- import { getHelloWorldMessage } from '@congruent-stack/congruent-api';
1
+ import { createRegistry, isHttpResponseObject } from '@congruent-stack/congruent-api';
2
2
 
3
- function getHelloWorldMessageExpress(name) {
4
- return getHelloWorldMessage(" [express] " + name);
3
+ function createExpressRegistry(app, diContainer, apiContract) {
4
+ const registry = createRegistry(diContainer, apiContract, {
5
+ handlerRegisteredCallback: (entry) => {
6
+ console.log("Registering Express route:", entry.methodEndpoint.genericPath);
7
+ const { genericPath } = entry.methodEndpoint;
8
+ const method = entry.methodEndpoint.method.toLowerCase();
9
+ app[method](genericPath, async (req, res) => {
10
+ req.pathParams = req.params;
11
+ const result = await entry.trigger(req);
12
+ res.status(result.code).json(result.body);
13
+ });
14
+ },
15
+ middlewareHandlerRegisteredCallback: (entry) => {
16
+ console.log("Registering Express middleware:", entry.genericPath);
17
+ app.use(entry.genericPath, async (req, res, next) => {
18
+ req.pathParams = req.params;
19
+ const haltResponse = await entry.trigger(req, next);
20
+ if (haltResponse && isHttpResponseObject(haltResponse)) {
21
+ res.status(haltResponse.code).json(haltResponse.body);
22
+ }
23
+ });
24
+ }
25
+ });
26
+ return registry;
27
+ }
28
+ function expressPreHandler(app, prehandler) {
29
+ return (({ methodEndpoint: { lowerCasedMethod, genericPath } }) => {
30
+ app[lowerCasedMethod](genericPath, prehandler);
31
+ });
5
32
  }
6
33
 
7
- export { getHelloWorldMessageExpress };
34
+ export { createExpressRegistry, expressPreHandler };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@congruent-stack/congruent-api-express",
3
3
  "type": "module",
4
- "version": "0.4.0",
4
+ "version": "0.6.0",
5
5
  "description": "Typescript schema-first tooling for agnostic REST APIs.",
6
6
  "keywords": [],
7
7
  "author": "congruent-stack",
@@ -20,9 +20,13 @@
20
20
  }
21
21
  },
22
22
  "peerDependencies": {
23
- "@congruent-stack/congruent-api": "0.4.0"
23
+ "@types/express": "5.0.3",
24
+ "express": "5.1.0",
25
+ "@congruent-stack/congruent-api": "0.6.0"
24
26
  },
25
27
  "devDependencies": {
28
+ "@types/express": "5.0.3",
29
+ "express": "5.1.0",
26
30
  "pkgroll": "2.14.5",
27
31
  "typescript": "^5.9.2"
28
32
  },