@teambit/express 0.0.0-06d7ddd9143ece6308d8fb1afc39beb3e6ccc512

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.
Files changed (52) hide show
  1. package/dist/esm.mjs +7 -0
  2. package/dist/express.aspect.d.ts +2 -0
  3. package/dist/express.aspect.js +20 -0
  4. package/dist/express.aspect.js.map +1 -0
  5. package/dist/express.composition.d.ts +1 -0
  6. package/dist/express.composition.js +29 -0
  7. package/dist/express.composition.js.map +1 -0
  8. package/dist/express.docs.mdx +4 -0
  9. package/dist/express.main.runtime.d.ts +72 -0
  10. package/dist/express.main.runtime.js +227 -0
  11. package/dist/express.main.runtime.js.map +1 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.js +33 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/middleware-manifest.d.ts +5 -0
  16. package/dist/middleware-manifest.js +3 -0
  17. package/dist/middleware-manifest.js.map +1 -0
  18. package/dist/middlewares/error.d.ts +8 -0
  19. package/dist/middlewares/error.js +33 -0
  20. package/dist/middlewares/error.js.map +1 -0
  21. package/dist/middlewares/index.d.ts +1 -0
  22. package/dist/middlewares/index.js +26 -0
  23. package/dist/middlewares/index.js.map +1 -0
  24. package/dist/preview-1752503356301.js +7 -0
  25. package/dist/types/index.d.ts +4 -0
  26. package/dist/types/index.js +71 -0
  27. package/dist/types/index.js.map +1 -0
  28. package/dist/types/next.d.ts +2 -0
  29. package/dist/types/next.js +3 -0
  30. package/dist/types/next.js.map +1 -0
  31. package/dist/types/request.d.ts +1 -0
  32. package/dist/types/request.js +3 -0
  33. package/dist/types/request.js.map +1 -0
  34. package/dist/types/response.d.ts +2 -0
  35. package/dist/types/response.js +3 -0
  36. package/dist/types/response.js.map +1 -0
  37. package/dist/types/route.d.ts +23 -0
  38. package/dist/types/route.js +19 -0
  39. package/dist/types/route.js.map +1 -0
  40. package/esm.mjs +7 -0
  41. package/express.composition.tsx +7 -0
  42. package/express.docs.mdx +4 -0
  43. package/middlewares/error.ts +29 -0
  44. package/middlewares/index.ts +1 -0
  45. package/package.json +61 -0
  46. package/types/asset.d.ts +41 -0
  47. package/types/index.ts +4 -0
  48. package/types/next.ts +3 -0
  49. package/types/request.ts +1 -0
  50. package/types/response.ts +3 -0
  51. package/types/route.ts +27 -0
  52. package/types/style.d.ts +42 -0
package/dist/esm.mjs ADDED
@@ -0,0 +1,7 @@
1
+ // eslint-disable-next-line import/no-unresolved
2
+ import cjsModule from './index.js';
3
+
4
+ export const ExpressAspect = cjsModule.ExpressAspect;
5
+ export const Verb = cjsModule.Verb;
6
+
7
+ export default cjsModule;
@@ -0,0 +1,2 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+ export declare const ExpressAspect: Aspect;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ExpressAspect = void 0;
7
+ function _harmony() {
8
+ const data = require("@teambit/harmony");
9
+ _harmony = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ const ExpressAspect = exports.ExpressAspect = _harmony().Aspect.create({
15
+ id: 'teambit.harmony/express',
16
+ dependencies: [],
17
+ defaultConfig: {}
18
+ });
19
+
20
+ //# sourceMappingURL=express.aspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_harmony","data","require","ExpressAspect","exports","Aspect","create","id","dependencies","defaultConfig"],"sources":["express.aspect.ts"],"sourcesContent":["import { Aspect } from '@teambit/harmony';\n\nexport const ExpressAspect = Aspect.create({\n id: 'teambit.harmony/express',\n dependencies: [],\n defaultConfig: {},\n});\n"],"mappings":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAGE,iBAAM,CAACC,MAAM,CAAC;EACzCC,EAAE,EAAE,yBAAyB;EAC7BC,YAAY,EAAE,EAAE;EAChBC,aAAa,EAAE,CAAC;AAClB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const Logo: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Logo = void 0;
7
+ function _react() {
8
+ const data = _interopRequireDefault(require("react"));
9
+ _react = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const Logo = () => /*#__PURE__*/_react().default.createElement("div", {
16
+ style: {
17
+ height: '100%',
18
+ display: 'flex',
19
+ justifyContent: 'center'
20
+ }
21
+ }, /*#__PURE__*/_react().default.createElement("img", {
22
+ style: {
23
+ width: 70
24
+ },
25
+ src: "https://static.bit.dev/extensions-icons/express.svg"
26
+ }));
27
+ exports.Logo = Logo;
28
+
29
+ //# sourceMappingURL=express.composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","data","_interopRequireDefault","require","e","__esModule","default","Logo","createElement","style","height","display","justifyContent","width","src","exports"],"sources":["express.composition.tsx"],"sourcesContent":["import React from 'react';\n\nexport const Logo = () => (\n <div style={{ height: '100%', display: 'flex', justifyContent: 'center' }}>\n <img style={{ width: 70 }} src=\"https://static.bit.dev/extensions-icons/express.svg\" />\n </div>\n);\n"],"mappings":";;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA0B,SAAAC,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnB,MAAMG,IAAI,GAAGA,CAAA,kBAClBP,MAAA,GAAAM,OAAA,CAAAE,aAAA;EAAKC,KAAK,EAAE;IAAEC,MAAM,EAAE,MAAM;IAAEC,OAAO,EAAE,MAAM;IAAEC,cAAc,EAAE;EAAS;AAAE,gBACxEZ,MAAA,GAAAM,OAAA,CAAAE,aAAA;EAAKC,KAAK,EAAE;IAAEI,KAAK,EAAE;EAAG,CAAE;EAACC,GAAG,EAAC;AAAqD,CAAE,CACnF,CACN;AAACC,OAAA,CAAAR,IAAA,GAAAA,IAAA","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Creates and handles express apps for Bit aspects
3
+ labels: ['express', 'core aspect']
4
+ ---
@@ -0,0 +1,72 @@
1
+ import { Server } from 'http';
2
+ import { SlotRegistry } from '@teambit/harmony';
3
+ import { Logger, LoggerMain } from '@teambit/logger';
4
+ import { Express } from 'express';
5
+ import { Route } from './types';
6
+ import { MiddlewareManifest } from './middleware-manifest';
7
+ export type ExpressConfig = {
8
+ port: number;
9
+ namespace: string;
10
+ loggerIgnorePath: string[];
11
+ };
12
+ export type MiddlewareSlot = SlotRegistry<MiddlewareManifest[]>;
13
+ export type RouteSlot = SlotRegistry<Route[]>;
14
+ export declare class ExpressMain {
15
+ /**
16
+ * extension config
17
+ */
18
+ readonly config: ExpressConfig;
19
+ /**
20
+ * slot for registering graphql modules
21
+ */
22
+ private moduleSlot;
23
+ /**
24
+ * logger extension.
25
+ */
26
+ readonly logger: Logger;
27
+ readonly middlewareSlot: MiddlewareSlot;
28
+ static runtime: import("@teambit/harmony").RuntimeDefinition;
29
+ constructor(
30
+ /**
31
+ * extension config
32
+ */
33
+ config: ExpressConfig,
34
+ /**
35
+ * slot for registering graphql modules
36
+ */
37
+ moduleSlot: RouteSlot,
38
+ /**
39
+ * logger extension.
40
+ */
41
+ logger: Logger, middlewareSlot: MiddlewareSlot);
42
+ /**
43
+ * start an express server.
44
+ */
45
+ listen(port?: number): Promise<Server>;
46
+ static(root: string, opts?: any): any;
47
+ /**
48
+ * register a new express routes.
49
+ * route will be added as `/api/${route}`
50
+ */
51
+ register(routes: Route[]): this;
52
+ /**
53
+ * register a new middleware into express.
54
+ */
55
+ registerMiddleware(middlewares: MiddlewareManifest[]): this;
56
+ private createRootRoutes;
57
+ createApp(expressApp?: Express, options?: {
58
+ disableBodyParser: true;
59
+ }): Express;
60
+ private createRoutes;
61
+ private verbValidation;
62
+ private catchErrorsMiddlewares;
63
+ private bodyParser;
64
+ static slots: (((registerFn: () => string) => SlotRegistry<Route[]>) | ((registerFn: () => string) => SlotRegistry<MiddlewareManifest[]>))[];
65
+ static dependencies: import("@teambit/harmony").Aspect[];
66
+ static defaultConfig: {
67
+ port: number;
68
+ namespace: string;
69
+ loggerIgnorePath: string[];
70
+ };
71
+ static provider([loggerFactory]: [LoggerMain], config: ExpressConfig, [routeSlot, middlewareSlot]: [RouteSlot, MiddlewareSlot]): Promise<ExpressMain>;
72
+ }
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ExpressMain = void 0;
7
+ function _cli() {
8
+ const data = require("@teambit/cli");
9
+ _cli = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _harmony() {
15
+ const data = require("@teambit/harmony");
16
+ _harmony = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _logger() {
22
+ const data = require("@teambit/logger");
23
+ _logger = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _express() {
29
+ const data = _interopRequireDefault(require("express"));
30
+ _express = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _lodash() {
36
+ const data = require("lodash");
37
+ _lodash = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _bodyParser() {
43
+ const data = _interopRequireDefault(require("body-parser"));
44
+ _bodyParser = function () {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ function _express2() {
50
+ const data = require("./express.aspect");
51
+ _express2 = function () {
52
+ return data;
53
+ };
54
+ return data;
55
+ }
56
+ function _middlewares() {
57
+ const data = require("./middlewares");
58
+ _middlewares = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
63
+ function _types() {
64
+ const data = require("./types");
65
+ _types = function () {
66
+ return data;
67
+ };
68
+ return data;
69
+ }
70
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
71
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
72
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
73
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
74
+ class ExpressMain {
75
+ constructor(
76
+ /**
77
+ * extension config
78
+ */
79
+ config,
80
+ /**
81
+ * slot for registering graphql modules
82
+ */
83
+ moduleSlot,
84
+ /**
85
+ * logger extension.
86
+ */
87
+ logger, middlewareSlot) {
88
+ this.config = config;
89
+ this.moduleSlot = moduleSlot;
90
+ this.logger = logger;
91
+ this.middlewareSlot = middlewareSlot;
92
+ }
93
+
94
+ /**
95
+ * start an express server.
96
+ */
97
+ async listen(port) {
98
+ const serverPort = port || this.config.port;
99
+ const app = this.createApp();
100
+ return app.listen(serverPort);
101
+ }
102
+ static(root, opts) {
103
+ return _express().default.static(root, opts);
104
+ }
105
+
106
+ /**
107
+ * register a new express routes.
108
+ * route will be added as `/api/${route}`
109
+ */
110
+ register(routes) {
111
+ this.moduleSlot.register(routes);
112
+ return this;
113
+ }
114
+
115
+ /**
116
+ * register a new middleware into express.
117
+ */
118
+ registerMiddleware(middlewares) {
119
+ this.middlewareSlot.register(middlewares);
120
+ return this;
121
+ }
122
+ createRootRoutes() {
123
+ // TODO: @guy refactor health to service aspect.
124
+ return [{
125
+ namespace: _express2().ExpressAspect.id,
126
+ method: 'get',
127
+ path: '/_health',
128
+ disableNamespace: false,
129
+ priority: 0,
130
+ middlewares: [async (req, res) => res.send('ok')]
131
+ }];
132
+ }
133
+ createApp(expressApp, options) {
134
+ const internalRoutes = this.createRootRoutes();
135
+ const routes = this.createRoutes();
136
+ const allRoutes = (0, _lodash().concat)(routes, internalRoutes);
137
+ const sortedRoutes = (0, _lodash().sortBy)(allRoutes, r => r.priority).reverse();
138
+ const app = expressApp || (0, _express().default)();
139
+ app.use((req, res, next) => {
140
+ if (this.config.loggerIgnorePath.includes(req.url)) return next();
141
+ const headers = (0, _lodash().omit)(req.headers, ['cookie', 'authorization']);
142
+ this.logger.debug(`express got a request to a URL: ${req.url}', headers:`, headers);
143
+ return next();
144
+ });
145
+ if (!options?.disableBodyParser) this.bodyParser(app);
146
+ const middlewaresSlot = this.middlewareSlot.values().flat();
147
+ middlewaresSlot.forEach(({
148
+ route,
149
+ middleware
150
+ }) => {
151
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
152
+ if (!route) app.use(middleware);
153
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
154
+ if (route) app.use(route, middleware);
155
+ });
156
+ sortedRoutes.forEach(routeInfo => {
157
+ const {
158
+ method,
159
+ path,
160
+ middlewares,
161
+ disableNamespace
162
+ } = routeInfo;
163
+ // TODO: @guy make sure to support single middleware here.
164
+ const namespace = disableNamespace ? '' : `/${this.config.namespace}`;
165
+ app[method](`${namespace}${path}`, this.catchErrorsMiddlewares(middlewares));
166
+ });
167
+ return app;
168
+ }
169
+ createRoutes() {
170
+ const routesSlots = this.moduleSlot.toArray();
171
+ const routeEntries = routesSlots.map(([, routes]) => {
172
+ return routes.map(route => {
173
+ const middlewares = (0, _lodash().flatten)([this.verbValidation(route), route.middlewares]);
174
+ return {
175
+ method: (0, _lodash().lowerCase)(route.method),
176
+ path: route.route,
177
+ disableNamespace: route.disableNamespace,
178
+ middlewares,
179
+ priority: route.priority || 0
180
+ };
181
+ });
182
+ });
183
+ return (0, _lodash().flatten)(routeEntries);
184
+ }
185
+ verbValidation(route) {
186
+ return async (req, res, next) => {
187
+ if (!route.verb) return next();
188
+ const verb = req.headers['x-verb'] || _types().Verb.READ;
189
+ if (verb !== route.verb) {
190
+ res.status(403);
191
+ return res.jsonp({
192
+ message: 'You are not authorized',
193
+ error: 'forbidden'
194
+ });
195
+ }
196
+ return next();
197
+ };
198
+ }
199
+ catchErrorsMiddlewares(middlewares) {
200
+ return middlewares.map(middleware => (0, _middlewares().catchErrors)(middleware));
201
+ }
202
+ bodyParser(app) {
203
+ app.use(_bodyParser().default.json({
204
+ limit: '5000mb'
205
+ }));
206
+ app.use(_bodyParser().default.raw({
207
+ type: 'application/octet-stream',
208
+ limit: '5000mb'
209
+ }));
210
+ }
211
+ static async provider([loggerFactory], config, [routeSlot, middlewareSlot]) {
212
+ const logger = loggerFactory.createLogger(_express2().ExpressAspect.id);
213
+ return new ExpressMain(config, routeSlot, logger, middlewareSlot);
214
+ }
215
+ }
216
+ exports.ExpressMain = ExpressMain;
217
+ _defineProperty(ExpressMain, "runtime", _cli().MainRuntime);
218
+ _defineProperty(ExpressMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType()]);
219
+ _defineProperty(ExpressMain, "dependencies", [_logger().LoggerAspect]);
220
+ _defineProperty(ExpressMain, "defaultConfig", {
221
+ port: 4001,
222
+ namespace: 'api',
223
+ loggerIgnorePath: ['/api/_health']
224
+ });
225
+ _express2().ExpressAspect.addRuntime(ExpressMain);
226
+
227
+ //# sourceMappingURL=express.main.runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_cli","data","require","_harmony","_logger","_express","_interopRequireDefault","_lodash","_bodyParser","_express2","_middlewares","_types","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ExpressMain","constructor","config","moduleSlot","logger","middlewareSlot","listen","port","serverPort","app","createApp","static","root","opts","express","register","routes","registerMiddleware","middlewares","createRootRoutes","namespace","ExpressAspect","id","method","path","disableNamespace","priority","req","res","send","expressApp","options","internalRoutes","createRoutes","allRoutes","concat","sortedRoutes","sortBy","reverse","use","next","loggerIgnorePath","includes","url","headers","omit","debug","disableBodyParser","bodyParser","middlewaresSlot","values","flat","forEach","route","middleware","routeInfo","catchErrorsMiddlewares","routesSlots","toArray","routeEntries","map","flatten","verbValidation","lowerCase","verb","Verb","READ","status","jsonp","message","error","catchErrors","json","limit","raw","type","provider","loggerFactory","routeSlot","createLogger","exports","MainRuntime","Slot","withType","LoggerAspect","addRuntime"],"sources":["express.main.runtime.ts"],"sourcesContent":["import { MainRuntime } from '@teambit/cli';\nimport { Server } from 'http';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport express, { Express } from 'express';\nimport { concat, flatten, lowerCase, sortBy, omit } from 'lodash';\nimport bodyParser from 'body-parser';\nimport { ExpressAspect } from './express.aspect';\nimport { catchErrors } from './middlewares';\nimport { Middleware, Request, Response, Route, Verb } from './types';\nimport { MiddlewareManifest } from './middleware-manifest';\n\nexport type ExpressConfig = {\n port: number;\n namespace: string;\n loggerIgnorePath: string[];\n};\n\nexport type MiddlewareSlot = SlotRegistry<MiddlewareManifest[]>;\n\nexport type RouteSlot = SlotRegistry<Route[]>;\n\nexport class ExpressMain {\n static runtime = MainRuntime;\n\n constructor(\n /**\n * extension config\n */\n readonly config: ExpressConfig,\n\n /**\n * slot for registering graphql modules\n */\n private moduleSlot: RouteSlot,\n\n /**\n * logger extension.\n */\n readonly logger: Logger,\n\n readonly middlewareSlot: MiddlewareSlot\n ) {}\n\n /**\n * start an express server.\n */\n async listen(port?: number): Promise<Server> {\n const serverPort = port || this.config.port;\n const app = this.createApp();\n return app.listen(serverPort);\n }\n\n static(root: string, opts?: any): any {\n return express.static(root, opts);\n }\n\n /**\n * register a new express routes.\n * route will be added as `/api/${route}`\n */\n register(routes: Route[]) {\n this.moduleSlot.register(routes);\n return this;\n }\n\n /**\n * register a new middleware into express.\n */\n registerMiddleware(middlewares: MiddlewareManifest[]) {\n this.middlewareSlot.register(middlewares);\n return this;\n }\n\n private createRootRoutes() {\n // TODO: @guy refactor health to service aspect.\n return [\n {\n namespace: ExpressAspect.id,\n method: 'get',\n path: '/_health',\n disableNamespace: false,\n priority: 0,\n middlewares: [async (req: Request, res: Response) => res.send('ok')],\n },\n ];\n }\n\n createApp(expressApp?: Express, options?: { disableBodyParser: true }): Express {\n const internalRoutes = this.createRootRoutes();\n const routes = this.createRoutes();\n const allRoutes = concat(routes, internalRoutes);\n const sortedRoutes = sortBy(allRoutes, (r) => r.priority).reverse();\n const app = expressApp || express();\n app.use((req, res, next) => {\n if (this.config.loggerIgnorePath.includes(req.url)) return next();\n const headers = omit(req.headers, ['cookie', 'authorization']);\n this.logger.debug(`express got a request to a URL: ${req.url}', headers:`, headers);\n return next();\n });\n if (!options?.disableBodyParser) this.bodyParser(app);\n\n const middlewaresSlot = this.middlewareSlot.values().flat();\n middlewaresSlot.forEach(({ route, middleware }) => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (!route) app.use(middleware);\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (route) app.use(route, middleware);\n });\n\n sortedRoutes.forEach((routeInfo) => {\n const { method, path, middlewares, disableNamespace } = routeInfo;\n // TODO: @guy make sure to support single middleware here.\n const namespace = disableNamespace ? '' : `/${this.config.namespace}`;\n app[method](`${namespace}${path}`, this.catchErrorsMiddlewares(middlewares));\n });\n\n return app;\n }\n\n private createRoutes() {\n const routesSlots = this.moduleSlot.toArray();\n const routeEntries = routesSlots.map(([, routes]) => {\n return routes.map((route) => {\n const middlewares = flatten([this.verbValidation(route), route.middlewares]);\n return {\n method: lowerCase(route.method),\n path: route.route,\n disableNamespace: route.disableNamespace,\n middlewares,\n priority: route.priority || 0,\n };\n });\n });\n\n return flatten(routeEntries);\n }\n\n private verbValidation(route: Route): Middleware {\n return async (req: express.Request, res: express.Response, next: express.NextFunction) => {\n if (!route.verb) return next();\n const verb = req.headers['x-verb'] || Verb.READ;\n if (verb !== route.verb) {\n res.status(403);\n return res.jsonp({ message: 'You are not authorized', error: 'forbidden' });\n }\n return next();\n };\n }\n\n private catchErrorsMiddlewares(middlewares: Middleware[]) {\n return middlewares.map((middleware) => catchErrors(middleware));\n }\n\n private bodyParser(app: Express) {\n app.use(bodyParser.json({ limit: '5000mb' }));\n app.use(bodyParser.raw({ type: 'application/octet-stream', limit: '5000mb' }));\n }\n\n static slots = [Slot.withType<Route[]>(), Slot.withType<MiddlewareManifest[]>()];\n static dependencies = [LoggerAspect];\n\n static defaultConfig = {\n port: 4001,\n namespace: 'api',\n loggerIgnorePath: ['/api/_health'],\n };\n\n static async provider(\n [loggerFactory]: [LoggerMain],\n config: ExpressConfig,\n [routeSlot, middlewareSlot]: [RouteSlot, MiddlewareSlot]\n ) {\n const logger = loggerFactory.createLogger(ExpressAspect.id);\n return new ExpressMain(config, routeSlot, logger, middlewareSlot);\n }\n}\n\nExpressAspect.addRuntime(ExpressMain);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export type { RouteSlot } from './express.main.runtime';
2
+ export type { Route } from './types';
3
+ export { Verb } from './types';
4
+ export type { Request, Response, NextFunction, Middleware } from './types';
5
+ export type { MiddlewareManifest } from './middleware-manifest';
6
+ export type { ExpressMain } from './express.main.runtime';
7
+ export { ExpressAspect } from './express.aspect';
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ExpressAspect", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _express().ExpressAspect;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "Verb", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _types().Verb;
16
+ }
17
+ });
18
+ function _types() {
19
+ const data = require("./types");
20
+ _types = function () {
21
+ return data;
22
+ };
23
+ return data;
24
+ }
25
+ function _express() {
26
+ const data = require("./express.aspect");
27
+ _express = function () {
28
+ return data;
29
+ };
30
+ return data;
31
+ }
32
+
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","data","require","_express"],"sources":["index.ts"],"sourcesContent":["export type { RouteSlot } from './express.main.runtime';\nexport type { Route } from './types';\nexport { Verb } from './types';\nexport type { Request, Response, NextFunction, Middleware } from './types';\nexport type { MiddlewareManifest } from './middleware-manifest';\nexport type { ExpressMain } from './express.main.runtime';\nexport { ExpressAspect } from './express.aspect';\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAIA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { Middleware } from './types';
2
+ export interface MiddlewareManifest {
3
+ route?: string;
4
+ middleware: Middleware;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=middleware-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["middleware-manifest.ts"],"sourcesContent":["import { Middleware } from './types';\n\nexport interface MiddlewareManifest {\n route?: string;\n middleware: Middleware;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import * as express from 'express';
2
+ interface ResponseError {
3
+ status?: number;
4
+ message?: string;
5
+ }
6
+ export declare const catchErrors: (action: any) => (req: express.Request, res: express.Response, next: express.NextFunction) => any;
7
+ export declare function errorHandle(err: ResponseError, req: express.Request, res: express.Response, next: express.NextFunction): express.Response<any, Record<string, any>>;
8
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.catchErrors = void 0;
7
+ exports.errorHandle = errorHandle;
8
+ function _legacy() {
9
+ const data = require("@teambit/legacy.logger");
10
+ _legacy = function () {
11
+ return data;
12
+ };
13
+ return data;
14
+ }
15
+ const catchErrors = action => (req, res, next) =>
16
+ // TODO: @guy please take care of it
17
+ // eslint-disable-next-line promise/no-callback-in-promise
18
+ action(req, res, next).catch(error => errorHandle(error, req, res, next));
19
+ exports.catchErrors = catchErrors;
20
+ function errorHandle(err, req, res,
21
+ // TODO: Do not remove unused next, it's needed for express to catch errors!
22
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
23
+ next) {
24
+ _legacy().logger.error(`express.errorHandle, url ${req.url}, error:`, err);
25
+ err.status = err.status || 500;
26
+ res.status(err.status);
27
+ return res.jsonp({
28
+ message: err.message,
29
+ error: err
30
+ });
31
+ }
32
+
33
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_legacy","data","require","catchErrors","action","req","res","next","catch","error","errorHandle","exports","err","logger","url","status","jsonp","message"],"sources":["error.ts"],"sourcesContent":["import * as express from 'express';\nimport { logger } from '@teambit/legacy.logger';\n\ninterface ResponseError {\n status?: number;\n message?: string;\n}\n\nexport const catchErrors = (action: any) => (req: express.Request, res: express.Response, next: express.NextFunction) =>\n // TODO: @guy please take care of it\n // eslint-disable-next-line promise/no-callback-in-promise\n action(req, res, next).catch((error: ResponseError) => errorHandle(error, req, res, next));\n\nexport function errorHandle(\n err: ResponseError,\n req: express.Request,\n res: express.Response,\n // TODO: Do not remove unused next, it's needed for express to catch errors!\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n next: express.NextFunction\n) {\n logger.error(`express.errorHandle, url ${req.url}, error:`, err);\n err.status = err.status || 500;\n res.status(err.status);\n return res.jsonp({\n message: err.message,\n error: err,\n });\n}\n"],"mappings":";;;;;;;AACA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAOO,MAAME,WAAW,GAAIC,MAAW,IAAK,CAACC,GAAoB,EAAEC,GAAqB,EAAEC,IAA0B;AAClH;AACA;AACAH,MAAM,CAACC,GAAG,EAAEC,GAAG,EAAEC,IAAI,CAAC,CAACC,KAAK,CAAEC,KAAoB,IAAKC,WAAW,CAACD,KAAK,EAAEJ,GAAG,EAAEC,GAAG,EAAEC,IAAI,CAAC,CAAC;AAACI,OAAA,CAAAR,WAAA,GAAAA,WAAA;AAEtF,SAASO,WAAWA,CACzBE,GAAkB,EAClBP,GAAoB,EACpBC,GAAqB;AACrB;AACA;AACAC,IAA0B,EAC1B;EACAM,gBAAM,CAACJ,KAAK,CAAC,4BAA4BJ,GAAG,CAACS,GAAG,UAAU,EAAEF,GAAG,CAAC;EAChEA,GAAG,CAACG,MAAM,GAAGH,GAAG,CAACG,MAAM,IAAI,GAAG;EAC9BT,GAAG,CAACS,MAAM,CAACH,GAAG,CAACG,MAAM,CAAC;EACtB,OAAOT,GAAG,CAACU,KAAK,CAAC;IACfC,OAAO,EAAEL,GAAG,CAACK,OAAO;IACpBR,KAAK,EAAEG;EACT,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export { catchErrors, errorHandle } from './error';
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "catchErrors", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _error().catchErrors;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "errorHandle", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _error().errorHandle;
16
+ }
17
+ });
18
+ function _error() {
19
+ const data = require("./error");
20
+ _error = function () {
21
+ return data;
22
+ };
23
+ return data;
24
+ }
25
+
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","data","require"],"sources":["index.ts"],"sourcesContent":["export { catchErrors, errorHandle } from './error';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.harmony_express@06d7ddd9143ece6308d8fb1afc39beb3e6ccc512/dist/express.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.harmony_express@06d7ddd9143ece6308d8fb1afc39beb3e6ccc512/dist/express.docs.mdx';
3
+
4
+ export const compositions = [compositions_0];
5
+ export const overview = [overview_0];
6
+
7
+ export const compositions_metadata = {"compositions":[{"displayName":"Logo","identifier":"Logo"}]};
@@ -0,0 +1,4 @@
1
+ export { Request } from './request';
2
+ export { Response } from './response';
3
+ export { NextFunction } from './next';
4
+ export { Route, Middleware, Verb } from './route';
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Middleware", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _route().Middleware;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "NextFunction", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _next().NextFunction;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "Request", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _request().Request;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "Response", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _response().Response;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "Route", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _route().Route;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "Verb", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _route().Verb;
40
+ }
41
+ });
42
+ function _request() {
43
+ const data = require("./request");
44
+ _request = function () {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ function _response() {
50
+ const data = require("./response");
51
+ _response = function () {
52
+ return data;
53
+ };
54
+ return data;
55
+ }
56
+ function _next() {
57
+ const data = require("./next");
58
+ _next = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
63
+ function _route() {
64
+ const data = require("./route");
65
+ _route = function () {
66
+ return data;
67
+ };
68
+ return data;
69
+ }
70
+
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_request","data","require","_response","_next","_route"],"sources":["index.ts"],"sourcesContent":["export { Request } from './request';\nexport { Response } from './response';\nexport { NextFunction } from './next';\nexport { Route, Middleware, Verb } from './route';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,MAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,KAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,OAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,MAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import express from 'express';
2
+ export type NextFunction = express.NextFunction;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["next.ts"],"sourcesContent":["import express from 'express';\n\nexport type NextFunction = express.NextFunction;\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export type { Request } from 'express';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["request.ts"],"sourcesContent":["export type { Request } from 'express';\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import express from 'express';
2
+ export type Response = {} & express.Response;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["response.ts"],"sourcesContent":["import express from 'express';\n\nexport type Response = {} & express.Response;\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import { NextFunction } from './next';
2
+ import { Request } from './request';
3
+ import { Response } from './response';
4
+ /**
5
+ * define express Middleware
6
+ */
7
+ export type Middleware = (req: Request, res: Response, next: NextFunction) => void | Promise<any>;
8
+ export declare enum Verb {
9
+ WRITE = "write",
10
+ READ = "read"
11
+ }
12
+ /**
13
+ * express new Route
14
+ */
15
+ export interface Route {
16
+ method: string;
17
+ route: string | RegExp;
18
+ disableNamespace?: boolean;
19
+ verb?: Verb;
20
+ middlewares: Middleware[];
21
+ /** route priority if 2 route with the same name default is 0 */
22
+ priority?: number;
23
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Verb = void 0;
7
+ /**
8
+ * define express Middleware
9
+ */
10
+ let Verb = exports.Verb = /*#__PURE__*/function (Verb) {
11
+ Verb["WRITE"] = "write";
12
+ Verb["READ"] = "read";
13
+ return Verb;
14
+ }({});
15
+ /**
16
+ * express new Route
17
+ */
18
+
19
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Verb","exports"],"sources":["route.ts"],"sourcesContent":["import { NextFunction } from './next';\nimport { Request } from './request';\nimport { Response } from './response';\n\n/**\n * define express Middleware\n */\nexport type Middleware = (req: Request, res: Response, next: NextFunction) => void | Promise<any>;\n\nexport enum Verb {\n WRITE = 'write',\n READ = 'read',\n}\n\n/**\n * express new Route\n */\n\nexport interface Route {\n method: string;\n route: string | RegExp;\n disableNamespace?: boolean;\n verb?: Verb;\n middlewares: Middleware[];\n /** route priority if 2 route with the same name default is 0 */\n priority?: number;\n}\n"],"mappings":";;;;;;AAIA;AACA;AACA;AAFA,IAKYA,IAAI,GAAAC,OAAA,CAAAD,IAAA,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA;AAKhB;AACA;AACA","ignoreList":[]}
package/esm.mjs ADDED
@@ -0,0 +1,7 @@
1
+ // eslint-disable-next-line import/no-unresolved
2
+ import cjsModule from './index.js';
3
+
4
+ export const ExpressAspect = cjsModule.ExpressAspect;
5
+ export const Verb = cjsModule.Verb;
6
+
7
+ export default cjsModule;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+
3
+ export const Logo = () => (
4
+ <div style={{ height: '100%', display: 'flex', justifyContent: 'center' }}>
5
+ <img style={{ width: 70 }} src="https://static.bit.dev/extensions-icons/express.svg" />
6
+ </div>
7
+ );
@@ -0,0 +1,4 @@
1
+ ---
2
+ description: Creates and handles express apps for Bit aspects
3
+ labels: ['express', 'core aspect']
4
+ ---
@@ -0,0 +1,29 @@
1
+ import * as express from 'express';
2
+ import { logger } from '@teambit/legacy.logger';
3
+
4
+ interface ResponseError {
5
+ status?: number;
6
+ message?: string;
7
+ }
8
+
9
+ export const catchErrors = (action: any) => (req: express.Request, res: express.Response, next: express.NextFunction) =>
10
+ // TODO: @guy please take care of it
11
+ // eslint-disable-next-line promise/no-callback-in-promise
12
+ action(req, res, next).catch((error: ResponseError) => errorHandle(error, req, res, next));
13
+
14
+ export function errorHandle(
15
+ err: ResponseError,
16
+ req: express.Request,
17
+ res: express.Response,
18
+ // TODO: Do not remove unused next, it's needed for express to catch errors!
19
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
+ next: express.NextFunction
21
+ ) {
22
+ logger.error(`express.errorHandle, url ${req.url}, error:`, err);
23
+ err.status = err.status || 500;
24
+ res.status(err.status);
25
+ return res.jsonp({
26
+ message: err.message,
27
+ error: err,
28
+ });
29
+ }
@@ -0,0 +1 @@
1
+ export { catchErrors, errorHandle } from './error';
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@teambit/express",
3
+ "version": "0.0.0-06d7ddd9143ece6308d8fb1afc39beb3e6ccc512",
4
+ "homepage": "https://bit.cloud/teambit/harmony/express",
5
+ "main": "dist/index.js",
6
+ "componentId": {
7
+ "scope": "teambit.harmony",
8
+ "name": "express",
9
+ "version": "06d7ddd9143ece6308d8fb1afc39beb3e6ccc512"
10
+ },
11
+ "dependencies": {
12
+ "body-parser": "1.20.3",
13
+ "express": "4.21.2",
14
+ "lodash": "4.17.21",
15
+ "@teambit/harmony": "0.4.7",
16
+ "@teambit/cli": "0.0.0-2e5f911c71db9449d65d68c07703201040c5418e",
17
+ "@teambit/logger": "0.0.0-84184266636aca1a269b792c366e49aa9253adfa",
18
+ "@teambit/legacy.logger": "0.0.0-10581461a3181840ca5b138250c8df9ba4d609cf"
19
+ },
20
+ "devDependencies": {
21
+ "@types/express": "4.17.21",
22
+ "@types/lodash": "4.14.165",
23
+ "@types/mocha": "9.1.0",
24
+ "@teambit/harmony.envs.core-aspect-env": "0.0.69"
25
+ },
26
+ "peerDependencies": {
27
+ "react": "^17.0.0 || ^18.0.0",
28
+ "@types/react": "^17.0.73"
29
+ },
30
+ "license": "Apache-2.0",
31
+ "optionalDependencies": {},
32
+ "peerDependenciesMeta": {},
33
+ "exports": {
34
+ ".": {
35
+ "node": {
36
+ "require": "./dist/index.js",
37
+ "import": "./dist/esm.mjs"
38
+ },
39
+ "default": "./dist/index.js"
40
+ },
41
+ "./dist/*": "./dist/*",
42
+ "./artifacts/*": "./artifacts/*",
43
+ "./*": "./*.ts"
44
+ },
45
+ "private": false,
46
+ "engines": {
47
+ "node": ">=16.0.0"
48
+ },
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/teambit/bit"
52
+ },
53
+ "keywords": [
54
+ "bit",
55
+ "bit-aspect",
56
+ "bit-core-aspect",
57
+ "components",
58
+ "collaboration",
59
+ "web"
60
+ ]
61
+ }
@@ -0,0 +1,41 @@
1
+ declare module '*.png' {
2
+ const value: any;
3
+ export = value;
4
+ }
5
+ declare module '*.svg' {
6
+ import type { FunctionComponent, SVGProps } from 'react';
7
+
8
+ export const ReactComponent: FunctionComponent<
9
+ SVGProps<SVGSVGElement> & { title?: string }
10
+ >;
11
+ const src: string;
12
+ export default src;
13
+ }
14
+ declare module '*.jpg' {
15
+ const value: any;
16
+ export = value;
17
+ }
18
+ declare module '*.jpeg' {
19
+ const value: any;
20
+ export = value;
21
+ }
22
+ declare module '*.gif' {
23
+ const value: any;
24
+ export = value;
25
+ }
26
+ declare module '*.bmp' {
27
+ const value: any;
28
+ export = value;
29
+ }
30
+ declare module '*.otf' {
31
+ const value: any;
32
+ export = value;
33
+ }
34
+ declare module '*.woff' {
35
+ const value: any;
36
+ export = value;
37
+ }
38
+ declare module '*.woff2' {
39
+ const value: any;
40
+ export = value;
41
+ }
package/types/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { Request } from './request';
2
+ export { Response } from './response';
3
+ export { NextFunction } from './next';
4
+ export { Route, Middleware, Verb } from './route';
package/types/next.ts ADDED
@@ -0,0 +1,3 @@
1
+ import express from 'express';
2
+
3
+ export type NextFunction = express.NextFunction;
@@ -0,0 +1 @@
1
+ export type { Request } from 'express';
@@ -0,0 +1,3 @@
1
+ import express from 'express';
2
+
3
+ export type Response = {} & express.Response;
package/types/route.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { NextFunction } from './next';
2
+ import { Request } from './request';
3
+ import { Response } from './response';
4
+
5
+ /**
6
+ * define express Middleware
7
+ */
8
+ export type Middleware = (req: Request, res: Response, next: NextFunction) => void | Promise<any>;
9
+
10
+ export enum Verb {
11
+ WRITE = 'write',
12
+ READ = 'read',
13
+ }
14
+
15
+ /**
16
+ * express new Route
17
+ */
18
+
19
+ export interface Route {
20
+ method: string;
21
+ route: string | RegExp;
22
+ disableNamespace?: boolean;
23
+ verb?: Verb;
24
+ middlewares: Middleware[];
25
+ /** route priority if 2 route with the same name default is 0 */
26
+ priority?: number;
27
+ }
@@ -0,0 +1,42 @@
1
+ declare module '*.module.css' {
2
+ const classes: { readonly [key: string]: string };
3
+ export default classes;
4
+ }
5
+ declare module '*.module.scss' {
6
+ const classes: { readonly [key: string]: string };
7
+ export default classes;
8
+ }
9
+ declare module '*.module.sass' {
10
+ const classes: { readonly [key: string]: string };
11
+ export default classes;
12
+ }
13
+
14
+ declare module '*.module.less' {
15
+ const classes: { readonly [key: string]: string };
16
+ export default classes;
17
+ }
18
+
19
+ declare module '*.less' {
20
+ const classes: { readonly [key: string]: string };
21
+ export default classes;
22
+ }
23
+
24
+ declare module '*.css' {
25
+ const classes: { readonly [key: string]: string };
26
+ export default classes;
27
+ }
28
+
29
+ declare module '*.sass' {
30
+ const classes: { readonly [key: string]: string };
31
+ export default classes;
32
+ }
33
+
34
+ declare module '*.scss' {
35
+ const classes: { readonly [key: string]: string };
36
+ export default classes;
37
+ }
38
+
39
+ declare module '*.mdx' {
40
+ const component: any;
41
+ export default component;
42
+ }