edge.libx.js 0.1.10 → 0.2.1
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/build/helpers/localServer.js +1 -1
- package/build/helpers/localServer.js.map +1 -1
- package/build/modules/RouterWrapper.d.ts +7 -7
- package/build/modules/RouterWrapper.js +21 -22
- package/build/modules/RouterWrapper.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/localServer.ts +2 -2
- package/src/modules/RouterWrapper.ts +28 -27
|
@@ -42,7 +42,7 @@ if (true || ['debug', 'debug:watch', 'api:debug', ''].indexOf(process.env.npm_li
|
|
|
42
42
|
for (let entryPoint of entryPoints) {
|
|
43
43
|
const dir = process.cwd();
|
|
44
44
|
const { handler, prefix } = require(`${dir}/${entryPoint}`);
|
|
45
|
-
app.use(prefix !== null && prefix !== void 0 ? prefix : '/api', (0, server_1.createServerAdapter)((request,
|
|
45
|
+
app.use(prefix !== null && prefix !== void 0 ? prefix : '/api', (0, server_1.createServerAdapter)((request, ctx) => handler(request, env, ctx)));
|
|
46
46
|
}
|
|
47
47
|
const port = process.env.PORT || 8080;
|
|
48
48
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localServer.js","sourceRoot":"","sources":["../../src/helpers/localServer.ts"],"names":[],"mappings":";;;;;;AACA,gDAA0D;AAC1D,4BAA0B;AAG1B,6CAA0C;AAE1C,4CAAoB;AACpB,mDAA0D;AAC1D,2EAA6D;AAC7D,gDAAwB;AACxB,iCAA4C;AAC5C,4DAAoC;AAIpC,sBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE5D,SAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AACnB,SAAG,CAAC,WAAW,GAAG,cAAQ,CAAC,GAAG,CAAC;AAE/B,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,MAAM,WAAW,GAAG,sBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAErC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,uBAAU,GAAE,CAAC;AAM7B,SAAS,UAAU;;IAClB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAA,YAAE,CAAC,YAAY,CAAC,WAAW,CAAC,0CAAE,QAAQ,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;YAAE,SAAS;QAClE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,sBAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7B,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC,EAAE,KAAK,CAAC,CAAC;AAIV,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IACvG,MAAM,GAAG,GAAG,MAAA,UAAU,EAAE,mCAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAErC,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC,CAAC;QAC5D,GAAG,CAAC,GAAG,CACN,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,MAAM,EAChB,IAAA,4BAAmB,EAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CACpC,OAAO,CAAW,OAAO,EAAE,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"localServer.js","sourceRoot":"","sources":["../../src/helpers/localServer.ts"],"names":[],"mappings":"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","sourcesContent":["// $ npm_lifecycle_event=debug tsx --inspect ./src/helpers/localServer.ts --https\nimport { createServerAdapter } from '@whatwg-node/server';\nimport 'isomorphic-fetch';\nimport { IRequest, Router, error, json } from 'itty-router';\nimport express, { Express, Request, Response } from \"express\";\nimport { getExpress } from './getExpress';\n// import { router, server } from '../v5';\nimport fs from 'fs';\nimport { log, LogLevel } from 'libx.js/build/modules/log';\nimport { libx } from 'libx.js/build/bundles/node.essentials';\nimport path from 'path';\nimport https, { createServer } from 'https';\nimport selfsigned from 'selfsigned';\n\ndeclare const process: NodeJS.Process;\n\nlibx.node.loadEnv({ path: `.env.${process.env.NODE_ENV}` });\n\nlog.isDebug = true;\nlog.filterLevel = LogLevel.All;\n\nconst envFile = '.env'; //'.dev.vars'\nconst entryPoints = libx.node.args._;\n\nconst { app } = getExpress();\n\n// node-wrangler bridge:\n// global.crypto = require('crypto');\n// global.TransformStream = require('web-streams-polyfill').TransformStream;\n\nfunction getEnvVars() {\n\tconst envFilePath = path.join(process.cwd(), envFile);\n\tif (!fs.existsSync(envFilePath)) return null;\n\tconst content = fs.readFileSync(envFilePath)?.toString();\n\tconst ret = {};\n\tfor (let line of content.split('\\n')) {\n\t\tconst parts = line.split('=');\n\t\tif (parts[0].trim().startsWith('#') || parts[1] == null) continue;\n\t\tret[parts[0].trim()] = parts[1].replace(/\\s*[\\\"\\'](.+)[\\\"\\']\\s*/gi, '$1');\n\t}\n\treturn ret;\n}\n\nlibx.node.catchErrors((err) => {\n\tconsole.error('!!!!!! ERROR: ', err);\n}, false);\n\n\n// only lunch manual local server if using 'dev' command\nif (true || ['debug', 'debug:watch', 'api:debug', ''].indexOf(process.env.npm_lifecycle_event) !== -1) {\n\tconst env = getEnvVars() ?? { a: 1 };\n\n\tfor (let entryPoint of entryPoints) {\n\t\tconst dir = process.cwd(); // process.argv[1]\n\t\tconst { handler, prefix } = require(`${dir}/${entryPoint}`);\n\t\tapp.use(\n\t\t\tprefix ?? '/api',\n\t\t\tcreateServerAdapter((request, ctx) =>\n\t\t\t\thandler(<IRequest>request, env, ctx))\n\t\t);\n\t}\n\n\t// app.use(\n\t// \t'/v5-n',\n\t// \tcreateServerAdapter((request, env) =>\n\t// \t\thandler_node(<IRequest>request, env))\n\t// \t\t// handlerRedirect(<IRequest>request, env))\n\t// );\n\n\tconst port = process.env.PORT || 8080;\n\ttry {\n\t\tlet server: https.Server | Express = app;\n\n\t\tconst isHttps = process.env.useHttps ?? (libx.node.args.https != null) ?? false;\n\t\tif (isHttps) {\n\t\t\tlibx.log.v('localServer: using https');\n\t\t\tconst attrs = [{ name: 'commonName', value: 'localhost' }];\n\t\t\tconst pems = selfsigned.generate(attrs, { days: 365 });\n\n\t\t\tserver = createServer({\n\t\t\t\tkey: pems.private,\n\t\t\t\tcert: pems.cert,\n\t\t\t}, app);\n\t\t}\n\n\t\tserver.listen(port, () => {\n\t\t\tconsole.log(`Server listening on http${isHttps ? 's' : ''}://0.0.0.0:${port}`);\n\t\t});\n\t} catch (err) {\n\t\tconsole.error(`LOCAL: Failed to start local server on port: ${port}`, err);\n\t}\n}\n\n// export default server; //routes.fetch;"]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { RouterType, IRequest } from 'itty-router';
|
|
1
|
+
import { RouterType, cors, IRequest } from 'itty-router';
|
|
2
2
|
type BaseRouterInitializer = (string: any) => {
|
|
3
3
|
base: string;
|
|
4
4
|
router: RouterType<IRequest, any[]>;
|
|
5
5
|
};
|
|
6
|
+
type CorsOptions = Parameters<typeof cors>[0];
|
|
6
7
|
export declare class RouterWrapper<TCtx = any> {
|
|
7
8
|
base: string;
|
|
8
9
|
router: RouterType<Request, [], any>;
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
constructor(base: string, router: RouterType<Request, [], any
|
|
13
|
-
|
|
14
|
-
static getNew(base: string): RouterWrapper<any>;
|
|
10
|
+
private cors;
|
|
11
|
+
private preflight;
|
|
12
|
+
private corsify;
|
|
13
|
+
constructor(base: string, router: RouterType<Request, [], any>, corsOptions?: CorsOptions);
|
|
14
|
+
static getNew(base: string, corsOptions?: CorsOptions): RouterWrapper<any>;
|
|
15
15
|
static errorHandler(error: any): Response;
|
|
16
16
|
registerRoute(newBase: string, baseRouterInitializer: BaseRouterInitializer): RouterType<Request, [], any>;
|
|
17
17
|
fetchHandler(request: IRequest, ctx: TCtx): Promise<Response>;
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.RouterWrapper = void 0;
|
|
5
4
|
const essentials_js_1 = require("libx.js/build/bundles/essentials.js");
|
|
6
5
|
const itty_router_1 = require("itty-router");
|
|
7
6
|
const server_1 = require("@whatwg-node/server");
|
|
8
7
|
class RouterWrapper {
|
|
9
|
-
constructor(base, router) {
|
|
8
|
+
constructor(base, router, corsOptions) {
|
|
10
9
|
this.base = base;
|
|
11
10
|
this.router = router;
|
|
11
|
+
this.cors = (0, itty_router_1.cors)(corsOptions !== null && corsOptions !== void 0 ? corsOptions : {
|
|
12
|
+
origin: '*',
|
|
13
|
+
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
|
|
14
|
+
allowHeaders: ['Content-Type', 'Authorization'],
|
|
15
|
+
exposeHeaders: ['Content-Type', 'Authorization'],
|
|
16
|
+
});
|
|
17
|
+
this.preflight = this.cors.preflight;
|
|
18
|
+
this.corsify = this.cors.corsify;
|
|
12
19
|
}
|
|
13
|
-
static
|
|
14
|
-
|
|
15
|
-
return this.corsify(response, request);
|
|
16
|
-
}
|
|
17
|
-
catch (err) {
|
|
18
|
-
essentials_js_1.libx.log.w('tryCors: failed to perform CORS', err);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
static getNew(base) {
|
|
20
|
+
static getNew(base, corsOptions) {
|
|
21
|
+
const temp = new RouterWrapper(base, (0, itty_router_1.Router)({ base }), corsOptions);
|
|
22
22
|
const router = (0, itty_router_1.Router)({
|
|
23
23
|
base,
|
|
24
|
-
before: [
|
|
25
|
-
catch:
|
|
24
|
+
before: [temp.preflight],
|
|
25
|
+
catch: RouterWrapper.errorHandler,
|
|
26
26
|
});
|
|
27
27
|
router.all('*', itty_router_1.withParams);
|
|
28
|
-
return new
|
|
28
|
+
return new RouterWrapper(base, router, corsOptions);
|
|
29
29
|
}
|
|
30
30
|
static errorHandler(error) {
|
|
31
|
-
var _b, _c, _d, _e
|
|
31
|
+
var _a, _b, _c, _d, _e;
|
|
32
32
|
const isObject = essentials_js_1.libx.isObject(error);
|
|
33
|
-
const errMessage = (
|
|
33
|
+
const errMessage = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error;
|
|
34
34
|
const msg = 'Error: ' + (!isObject ? (errMessage !== null && errMessage !== void 0 ? errMessage : 'Server Error') : JSON.stringify(error));
|
|
35
|
-
const status = parseInt((
|
|
35
|
+
const status = parseInt((_d = (_c = (_b = error === null || error === void 0 ? void 0 : error.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.statusCode) !== null && _c !== void 0 ? _c : error === null || error === void 0 ? void 0 : error.code) !== null && _d !== void 0 ? _d : (_e = error === null || error === void 0 ? void 0 : error.error) === null || _e === void 0 ? void 0 : _e.code) || 500;
|
|
36
36
|
console.error('Server error: ', error, status);
|
|
37
37
|
return new Response(msg, { status });
|
|
38
38
|
}
|
|
@@ -43,7 +43,10 @@ class RouterWrapper {
|
|
|
43
43
|
}
|
|
44
44
|
;
|
|
45
45
|
fetchHandler(request, ctx) {
|
|
46
|
-
return this.router.fetch(request, ctx)
|
|
46
|
+
return this.router.fetch(request, ctx)
|
|
47
|
+
.then(itty_router_1.json)
|
|
48
|
+
.catch(RouterWrapper.errorHandler)
|
|
49
|
+
.then((res) => this.corsify(res, request));
|
|
47
50
|
}
|
|
48
51
|
catchNotFound() {
|
|
49
52
|
this.router.all('*', () => (0, itty_router_1.error)(404));
|
|
@@ -54,8 +57,4 @@ class RouterWrapper {
|
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
exports.RouterWrapper = RouterWrapper;
|
|
57
|
-
_a = RouterWrapper;
|
|
58
|
-
RouterWrapper.cors = (0, itty_router_1.cors)({ origin: ['*'], allowMethods: ['POST'] });
|
|
59
|
-
RouterWrapper.preflight = _a.cors.preflight;
|
|
60
|
-
RouterWrapper.corsify = _a.cors.corsify;
|
|
61
60
|
//# sourceMappingURL=RouterWrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterWrapper.js","sourceRoot":"","sources":["../../src/modules/RouterWrapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RouterWrapper.js","sourceRoot":"","sources":["../../src/modules/RouterWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { libx } from 'libx.js/build/bundles/essentials.js';\nimport { Route, Router, RouterType, error, json, cors, withParams, IRequest, text, ResponseHandler } from 'itty-router';\nimport { createServerAdapter } from '@whatwg-node/server';\n\ntype BaseRouterInitializer = (string) => { base: string; router: RouterType<IRequest, any[]> };\ntype CorsOptions = Parameters<typeof cors>[0];\n\nexport class RouterWrapper<TCtx = any> {\n\tprivate cors: ReturnType<typeof cors>;\n\tprivate preflight: (request: Request) => Response | Promise<Response>;\n\tprivate corsify: (response: Response, request: Request) => Response | Promise<Response>;\n\n\tpublic constructor(\n\t\tpublic base: string,\n\t\tpublic router: RouterType<Request, [], any>,\n\t\tcorsOptions?: CorsOptions\n\t) {\n\t\tthis.cors = cors(corsOptions ?? {\n\t\t\torigin: '*',\n\t\t\tallowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],\n\t\t\tallowHeaders: ['Content-Type', 'Authorization'],\n\t\t\texposeHeaders: ['Content-Type', 'Authorization'],\n\t\t});\n\t\tthis.preflight = this.cors.preflight;\n\t\tthis.corsify = this.cors.corsify;\n\t}\n\n\tpublic static getNew(base: string, corsOptions?: CorsOptions) {\n\t\tconst temp = new RouterWrapper(base, Router({ base }), corsOptions);\n\t\tconst router = Router({\n\t\t\tbase,\n\t\t\tbefore: [temp.preflight],\n\t\t\tcatch: RouterWrapper.errorHandler,\n\t\t});\n\t\trouter.all('*', withParams);\n\t\treturn new RouterWrapper(base, router, corsOptions);\n\t}\n\n\tpublic static errorHandler(error) {\n\t\tconst isObject = libx.isObject(error);\n\t\tconst errMessage = error?.message ?? error;\n\t\tconst msg = 'Error: ' + (!isObject ? (errMessage ?? 'Server Error') : JSON.stringify(error));\n\t\tconst status = parseInt(error?.status ?? error?.statusCode ?? error?.code ?? error?.error?.code) || 500;\n\t\tconsole.error('Server error: ', error, status);\n\t\treturn new Response(msg, { status })\n\t}\n\n\tpublic registerRoute(newBase: string, baseRouterInitializer: BaseRouterInitializer) {\n\t\tconst route = baseRouterInitializer(`${this.base}${newBase}`);\n\t\tthis.router.all(newBase + '/*', route.router.fetch);\n\t\treturn this.router;\n\t};\n\n\tpublic fetchHandler(request: IRequest, ctx: TCtx) {\n\t\treturn this.router.fetch(request, ctx)\n\t\t\t.then(json)\n\t\t\t.catch(RouterWrapper.errorHandler)\n\t\t\t.then((res) => this.corsify(res, request));\n\t}\n\n\tpublic catchNotFound() {\n\t\tthis.router.all('*', () => error(404));\n\t}\n\n\tpublic createServerAdapter() {\n\t\tconst ittyServer = createServerAdapter(this.fetchHandler.bind(this));\n\t\treturn ittyServer;\n\t}\n}"]}
|
package/package.json
CHANGED
|
@@ -55,8 +55,8 @@ if (true || ['debug', 'debug:watch', 'api:debug', ''].indexOf(process.env.npm_li
|
|
|
55
55
|
const { handler, prefix } = require(`${dir}/${entryPoint}`);
|
|
56
56
|
app.use(
|
|
57
57
|
prefix ?? '/api',
|
|
58
|
-
createServerAdapter((request,
|
|
59
|
-
handler(<IRequest>request, env))
|
|
58
|
+
createServerAdapter((request, ctx) =>
|
|
59
|
+
handler(<IRequest>request, env, ctx))
|
|
60
60
|
);
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -3,40 +3,39 @@ import { Route, Router, RouterType, error, json, cors, withParams, IRequest, tex
|
|
|
3
3
|
import { createServerAdapter } from '@whatwg-node/server';
|
|
4
4
|
|
|
5
5
|
type BaseRouterInitializer = (string) => { base: string; router: RouterType<IRequest, any[]> };
|
|
6
|
+
type CorsOptions = Parameters<typeof cors>[0];
|
|
6
7
|
|
|
7
8
|
export class RouterWrapper<TCtx = any> {
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
private
|
|
9
|
+
private cors: ReturnType<typeof cors>;
|
|
10
|
+
private preflight: (request: Request) => Response | Promise<Response>;
|
|
11
|
+
private corsify: (response: Response, request: Request) => Response | Promise<Response>;
|
|
11
12
|
|
|
12
|
-
public constructor(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
public constructor(
|
|
14
|
+
public base: string,
|
|
15
|
+
public router: RouterType<Request, [], any>,
|
|
16
|
+
corsOptions?: CorsOptions
|
|
17
|
+
) {
|
|
18
|
+
this.cors = cors(corsOptions ?? {
|
|
19
|
+
origin: '*',
|
|
20
|
+
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
|
|
21
|
+
allowHeaders: ['Content-Type', 'Authorization'],
|
|
22
|
+
exposeHeaders: ['Content-Type', 'Authorization'],
|
|
23
|
+
});
|
|
24
|
+
this.preflight = this.cors.preflight;
|
|
25
|
+
this.corsify = this.cors.corsify;
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
public static getNew(base: string) {
|
|
28
|
+
public static getNew(base: string, corsOptions?: CorsOptions) {
|
|
29
|
+
const temp = new RouterWrapper(base, Router({ base }), corsOptions);
|
|
25
30
|
const router = Router({
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
31
|
+
base,
|
|
32
|
+
before: [temp.preflight],
|
|
33
|
+
catch: RouterWrapper.errorHandler,
|
|
34
|
+
});
|
|
31
35
|
router.all('*', withParams);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// router.all('*', () => error(404));
|
|
35
|
-
|
|
36
|
-
return new RouterWrapper(base, router);
|
|
36
|
+
return new RouterWrapper(base, router, corsOptions);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
40
39
|
public static errorHandler(error) {
|
|
41
40
|
const isObject = libx.isObject(error);
|
|
42
41
|
const errMessage = error?.message ?? error;
|
|
@@ -53,8 +52,10 @@ export class RouterWrapper<TCtx = any> {
|
|
|
53
52
|
};
|
|
54
53
|
|
|
55
54
|
public fetchHandler(request: IRequest, ctx: TCtx) {
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
return this.router.fetch(request, ctx)
|
|
56
|
+
.then(json)
|
|
57
|
+
.catch(RouterWrapper.errorHandler)
|
|
58
|
+
.then((res) => this.corsify(res, request));
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
public catchNotFound() {
|