edge.libx.js 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/main.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { RouterWrapper } from "./modules/RouterWrapper";
2
- export { initCors as cors } from "./modules/cors";
2
+ export * as cors from "./modules/cors";
package/build/main.js CHANGED
@@ -1,8 +1,40 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.cors = exports.RouterWrapper = void 0;
4
37
  var RouterWrapper_1 = require("./modules/RouterWrapper");
5
38
  Object.defineProperty(exports, "RouterWrapper", { enumerable: true, get: function () { return RouterWrapper_1.RouterWrapper; } });
6
- var cors_1 = require("./modules/cors");
7
- Object.defineProperty(exports, "cors", { enumerable: true, get: function () { return cors_1.initCors; } });
39
+ exports.cors = __importStar(require("./modules/cors"));
8
40
  //# sourceMappingURL=main.js.map
package/build/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAA/C,8GAAA,aAAa,OAAA;AACtB,uCAAkD;AAAzC,4FAAA,QAAQ,OAAQ","sourcesContent":["export { RouterWrapper } from \"./modules/RouterWrapper\";\nexport { initCors as cors } from \"./modules/cors\";"]}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAwD;AAA/C,8GAAA,aAAa,OAAA;AACtB,uDAAuC","sourcesContent":["export { RouterWrapper } from \"./modules/RouterWrapper\";\nexport * as cors from \"./modules/cors\";"]}
@@ -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 static cors;
10
- private static preflight;
11
- private static corsify;
12
- constructor(base: string, router: RouterType<Request, [], any>);
13
- private static tryCors;
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 tryCors(response, request) {
14
- try {
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: [this.preflight],
25
- catch: this.errorHandler,
24
+ before: [temp.preflight],
25
+ catch: RouterWrapper.errorHandler,
26
26
  });
27
27
  router.all('*', itty_router_1.withParams);
28
- return new _a(base, router);
28
+ return new RouterWrapper(base, router, corsOptions);
29
29
  }
30
30
  static errorHandler(error) {
31
- var _b, _c, _d, _e, _f;
31
+ var _a, _b, _c, _d, _e;
32
32
  const isObject = essentials_js_1.libx.isObject(error);
33
- const errMessage = (_b = error === null || error === void 0 ? void 0 : error.message) !== null && _b !== void 0 ? _b : error;
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((_e = (_d = (_c = error === null || error === void 0 ? void 0 : error.status) !== null && _c !== void 0 ? _c : error === null || error === void 0 ? void 0 : error.statusCode) !== null && _d !== void 0 ? _d : error === null || error === void 0 ? void 0 : error.code) !== null && _e !== void 0 ? _e : (_f = error === null || error === void 0 ? void 0 : error.error) === null || _f === void 0 ? void 0 : _f.code) || 500;
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).then(itty_router_1.json).catch(_a.errorHandler);
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":"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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[]> };\n\nexport class RouterWrapper<TCtx = any> {\n\tprivate static cors = cors({ origin: ['*'], allowMethods: ['POST'] });\n\tprivate static preflight = this.cors.preflight;\n\tprivate static corsify = this.cors.corsify;\n\n\tpublic constructor(public base: string, public router: RouterType<Request, [], any>) {\n\n\t}\n\n\tprivate static tryCors(response, request): Response {\n\t\ttry {\n\t\t\treturn this.corsify(response, request);\n\t\t} catch (err) {\n libx.log.w('tryCors: failed to perform CORS', err);\n }\n\t}\n\n\tpublic static getNew(base: string) {\n\t\tconst router = Router({\n base,\n before: [this.preflight],\n catch: this.errorHandler,\n // finally: [this.tryCors],\n });\n\t\trouter.all('*', withParams);\n\t\t// router.finally.push(this.corsify);\n\n\t\t// router.all('*', () => error(404));\n\n\t\treturn new RouterWrapper(base, router);\n\t}\n\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\t// return this.router.fetch(request, ctx).then(json).then(RouterWrapper.corsify).catch(this.errorHandler);\n\t\treturn this.router.fetch(request, ctx).then(json).catch(RouterWrapper.errorHandler);\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}"]}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edge.libx.js",
3
- "version": "0.1.9",
3
+ "version": "0.2.0",
4
4
  "main": "build/main.js",
5
5
  "license": "MIT",
6
6
  "author": "Elya Livshitz",
package/src/main.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { RouterWrapper } from "./modules/RouterWrapper";
2
- export { initCors as cors } from "./modules/cors";
2
+ export * as cors from "./modules/cors";
@@ -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 static cors = cors({ origin: ['*'], allowMethods: ['POST'] });
9
- private static preflight = this.cors.preflight;
10
- private static corsify = this.cors.corsify;
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(public base: string, public router: RouterType<Request, [], any>) {
13
-
14
- }
15
-
16
- private static tryCors(response, request): Response {
17
- try {
18
- return this.corsify(response, request);
19
- } catch (err) {
20
- libx.log.w('tryCors: failed to perform CORS', err);
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
- base,
27
- before: [this.preflight],
28
- catch: this.errorHandler,
29
- // finally: [this.tryCors],
30
- });
31
+ base,
32
+ before: [temp.preflight],
33
+ catch: RouterWrapper.errorHandler,
34
+ });
31
35
  router.all('*', withParams);
32
- // router.finally.push(this.corsify);
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
- // return this.router.fetch(request, ctx).then(json).then(RouterWrapper.corsify).catch(this.errorHandler);
57
- return this.router.fetch(request, ctx).then(json).catch(RouterWrapper.errorHandler);
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() {