@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.
- package/dist/esm.mjs +7 -0
- package/dist/express.aspect.d.ts +2 -0
- package/dist/express.aspect.js +20 -0
- package/dist/express.aspect.js.map +1 -0
- package/dist/express.composition.d.ts +1 -0
- package/dist/express.composition.js +29 -0
- package/dist/express.composition.js.map +1 -0
- package/dist/express.docs.mdx +4 -0
- package/dist/express.main.runtime.d.ts +72 -0
- package/dist/express.main.runtime.js +227 -0
- package/dist/express.main.runtime.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware-manifest.d.ts +5 -0
- package/dist/middleware-manifest.js +3 -0
- package/dist/middleware-manifest.js.map +1 -0
- package/dist/middlewares/error.d.ts +8 -0
- package/dist/middlewares/error.js +33 -0
- package/dist/middlewares/error.js.map +1 -0
- package/dist/middlewares/index.d.ts +1 -0
- package/dist/middlewares/index.js +26 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/preview-1752503356301.js +7 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js +71 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/next.d.ts +2 -0
- package/dist/types/next.js +3 -0
- package/dist/types/next.js.map +1 -0
- package/dist/types/request.d.ts +1 -0
- package/dist/types/request.js +3 -0
- package/dist/types/request.js.map +1 -0
- package/dist/types/response.d.ts +2 -0
- package/dist/types/response.js +3 -0
- package/dist/types/response.js.map +1 -0
- package/dist/types/route.d.ts +23 -0
- package/dist/types/route.js +19 -0
- package/dist/types/route.js.map +1 -0
- package/esm.mjs +7 -0
- package/express.composition.tsx +7 -0
- package/express.docs.mdx +4 -0
- package/middlewares/error.ts +29 -0
- package/middlewares/index.ts +1 -0
- package/package.json +61 -0
- package/types/asset.d.ts +41 -0
- package/types/index.ts +4 -0
- package/types/next.ts +3 -0
- package/types/request.ts +1 -0
- package/types/response.ts +3 -0
- package/types/route.ts +27 -0
- package/types/style.d.ts +42 -0
package/dist/esm.mjs
ADDED
|
@@ -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,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":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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,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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["request.ts"],"sourcesContent":["export type { Request } from 'express';\n"],"mappings":"","ignoreList":[]}
|
|
@@ -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
package/express.docs.mdx
ADDED
|
@@ -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
|
+
}
|
package/types/asset.d.ts
ADDED
|
@@ -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
package/types/next.ts
ADDED
package/types/request.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { Request } from 'express';
|
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
|
+
}
|
package/types/style.d.ts
ADDED
|
@@ -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
|
+
}
|