@modern-js/bff-core 1.0.1-beta.0 → 1.0.1-beta.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.
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { HttpMetadata, OperatorType, HttpMethod, TriggerType } from "../types";
2
+ import { HttpMetadata, OperatorType, HttpMethod, TriggerType, ResponseMetaType } from "../types";
3
3
  import { ValidationError } from "../errors/http";
4
4
 
5
5
  const validateInput = async (schema, input) => {
@@ -133,14 +133,21 @@ export const Headers = schema => {
133
133
 
134
134
  };
135
135
  };
136
+
137
+ const setResponseMeta = (helper, type, value) => {
138
+ const responseMetaData = helper.getMetadata(HttpMetadata.Response) || [];
139
+ helper.setMetadata(HttpMetadata.Response, [...responseMetaData, {
140
+ type,
141
+ value
142
+ }]);
143
+ };
144
+
136
145
  export const HttpCode = statusCode => {
137
146
  return {
138
147
  name: 'HttpCode',
139
148
 
140
- metadata({
141
- setMetadata
142
- }) {
143
- setMetadata(HttpMetadata.StatusCode, statusCode);
149
+ metadata(helper) {
150
+ setResponseMeta(helper, ResponseMetaType.StatusCode, statusCode);
144
151
  }
145
152
 
146
153
  };
@@ -149,10 +156,8 @@ export const SetHeaders = headers => {
149
156
  return {
150
157
  name: 'SetHeaders',
151
158
 
152
- metadata({
153
- setMetadata
154
- }) {
155
- setMetadata(HttpMetadata.ResponseHeaders, headers);
159
+ metadata(helper) {
160
+ setResponseMeta(helper, ResponseMetaType.Headers, headers);
156
161
  }
157
162
 
158
163
  };
@@ -161,10 +166,8 @@ export const Redirect = url => {
161
166
  return {
162
167
  name: 'Redirect',
163
168
 
164
- metadata({
165
- setMetadata
166
- }) {
167
- setMetadata(HttpMetadata.Redirect, url);
169
+ metadata(helper) {
170
+ setResponseMeta(helper, ResponseMetaType.Redirect, url);
168
171
  }
169
172
 
170
173
  };
@@ -6,7 +6,8 @@ import 'reflect-metadata';
6
6
  import 'esbuild-register';
7
7
  import { HttpMethod, httpMethods, OperatorType, TriggerType } from "../types";
8
8
  import { APIMode, FRAMEWORK_MODE_LAMBDA_DIR, API_FILE_RULES } from "./constants";
9
- import { getFiles, getPathFromFilename, requireHandlerModule } from "./utils";
9
+ import { getFiles, getPathFromFilename, requireHandlerModule, sortRoutes } from "./utils";
10
+ import { debug } from 'console';
10
11
  export * from "./types";
11
12
  export * from "./constants";
12
13
  export class ApiRouter {
@@ -109,7 +110,8 @@ export class ApiRouter {
109
110
  apiHandlers = apiHandlers.concat(handlerInfos);
110
111
  }
111
112
  });
112
- return apiHandlers;
113
+ const sortedHandlers = sortRoutes(apiHandlers);
114
+ return sortedHandlers;
113
115
  }
114
116
 
115
117
  getModuleHandlerInfos(moduleInfo) {
@@ -265,7 +267,9 @@ export class ApiRouter {
265
267
  getApiHandlers() {
266
268
  const filenames = this.getApiFiles();
267
269
  const moduleInfos = this.getModuleInfos(filenames);
268
- return this.getHandlerInfos(moduleInfos);
270
+ const apiHandlers = this.getHandlerInfos(moduleInfos);
271
+ debug('apiHandlers', apiHandlers);
272
+ return apiHandlers;
269
273
  }
270
274
 
271
275
  }
@@ -50,4 +50,14 @@ export const requireHandlerModule = modulePath => {
50
50
  }
51
51
 
52
52
  return module;
53
+ };
54
+ export const sortRoutes = apiHandlers => {
55
+ const sortedHandlers = apiHandlers.slice();
56
+ sortedHandlers.forEach((apiHandler, handlerIndex) => {
57
+ if (apiHandler.routeName.includes(':')) {
58
+ sortedHandlers.splice(handlerIndex, 1);
59
+ sortedHandlers.push(apiHandler);
60
+ }
61
+ });
62
+ return sortedHandlers;
53
63
  };
@@ -20,11 +20,16 @@ export let HttpMetadata;
20
20
  HttpMetadata["Params"] = "PARAMS";
21
21
  HttpMetadata["Headers"] = "HEADERS";
22
22
  HttpMetadata["Response"] = "RESPONSE";
23
- HttpMetadata["StatusCode"] = "STATUS_CODE";
24
- HttpMetadata["Redirect"] = "REDIRECT";
25
- HttpMetadata["ResponseHeaders"] = "RESPONSE_HEADERS";
26
23
  })(HttpMetadata || (HttpMetadata = {}));
27
24
 
25
+ export let ResponseMetaType;
26
+
27
+ (function (ResponseMetaType) {
28
+ ResponseMetaType[ResponseMetaType["StatusCode"] = 0] = "StatusCode";
29
+ ResponseMetaType[ResponseMetaType["Redirect"] = 1] = "Redirect";
30
+ ResponseMetaType[ResponseMetaType["Headers"] = 2] = "Headers";
31
+ })(ResponseMetaType || (ResponseMetaType = {}));
32
+
28
33
  export let HttpMethod;
29
34
 
30
35
  (function (HttpMethod) {
@@ -1,5 +1,7 @@
1
1
  import util from 'util';
2
- export const HANDLER_WITH_META = 'HANDLER_WITH_SCHEMA'; // export const pick = <T extends Record<string, unknown>, K extends keyof T>(
2
+ import { createDebugger } from '@modern-js/utils';
3
+ export const HANDLER_WITH_META = 'HANDLER_WITH_META';
4
+ export const debug = createDebugger('bff'); // export const pick = <T extends Record<string, unknown>, K extends keyof T>(
3
5
  // obj: T,
4
6
  // keys: readonly K[],
5
7
  // ) => {
@@ -166,14 +166,20 @@ const Headers = schema => {
166
166
 
167
167
  exports.Headers = Headers;
168
168
 
169
+ const setResponseMeta = (helper, type, value) => {
170
+ const responseMetaData = helper.getMetadata(_types.HttpMetadata.Response) || [];
171
+ helper.setMetadata(_types.HttpMetadata.Response, [...responseMetaData, {
172
+ type,
173
+ value
174
+ }]);
175
+ };
176
+
169
177
  const HttpCode = statusCode => {
170
178
  return {
171
179
  name: 'HttpCode',
172
180
 
173
- metadata({
174
- setMetadata
175
- }) {
176
- setMetadata(_types.HttpMetadata.StatusCode, statusCode);
181
+ metadata(helper) {
182
+ setResponseMeta(helper, _types.ResponseMetaType.StatusCode, statusCode);
177
183
  }
178
184
 
179
185
  };
@@ -185,10 +191,8 @@ const SetHeaders = headers => {
185
191
  return {
186
192
  name: 'SetHeaders',
187
193
 
188
- metadata({
189
- setMetadata
190
- }) {
191
- setMetadata(_types.HttpMetadata.ResponseHeaders, headers);
194
+ metadata(helper) {
195
+ setResponseMeta(helper, _types.ResponseMetaType.Headers, headers);
192
196
  }
193
197
 
194
198
  };
@@ -200,10 +204,8 @@ const Redirect = url => {
200
204
  return {
201
205
  name: 'Redirect',
202
206
 
203
- metadata({
204
- setMetadata
205
- }) {
206
- setMetadata(_types.HttpMetadata.Redirect, url);
207
+ metadata(helper) {
208
+ setResponseMeta(helper, _types.ResponseMetaType.Redirect, url);
207
209
  }
208
210
 
209
211
  };
@@ -34,6 +34,8 @@ Object.keys(_constants).forEach(function (key) {
34
34
 
35
35
  var _utils2 = require("./utils");
36
36
 
37
+ var _console = require("console");
38
+
37
39
  var _types2 = require("./types");
38
40
 
39
41
  Object.keys(_types2).forEach(function (key) {
@@ -152,7 +154,8 @@ class ApiRouter {
152
154
  apiHandlers = apiHandlers.concat(handlerInfos);
153
155
  }
154
156
  });
155
- return apiHandlers;
157
+ const sortedHandlers = (0, _utils2.sortRoutes)(apiHandlers);
158
+ return sortedHandlers;
156
159
  }
157
160
 
158
161
  getModuleHandlerInfos(moduleInfo) {
@@ -309,7 +312,9 @@ class ApiRouter {
309
312
  getApiHandlers() {
310
313
  const filenames = this.getApiFiles();
311
314
  const moduleInfos = this.getModuleInfos(filenames);
312
- return this.getHandlerInfos(moduleInfos);
315
+ const apiHandlers = this.getHandlerInfos(moduleInfos);
316
+ (0, _console.debug)('apiHandlers', apiHandlers);
317
+ return apiHandlers;
313
318
  }
314
319
 
315
320
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.requireHandlerModule = exports.isHandler = exports.getPathFromFilename = exports.getFiles = void 0;
6
+ exports.sortRoutes = exports.requireHandlerModule = exports.isHandler = exports.getPathFromFilename = exports.getFiles = void 0;
7
7
 
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
 
@@ -71,4 +71,17 @@ const requireHandlerModule = modulePath => {
71
71
  return module;
72
72
  };
73
73
 
74
- exports.requireHandlerModule = requireHandlerModule;
74
+ exports.requireHandlerModule = requireHandlerModule;
75
+
76
+ const sortRoutes = apiHandlers => {
77
+ const sortedHandlers = apiHandlers.slice();
78
+ sortedHandlers.forEach((apiHandler, handlerIndex) => {
79
+ if (apiHandler.routeName.includes(':')) {
80
+ sortedHandlers.splice(handlerIndex, 1);
81
+ sortedHandlers.push(apiHandler);
82
+ }
83
+ });
84
+ return sortedHandlers;
85
+ };
86
+
87
+ exports.sortRoutes = sortRoutes;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.httpMethods = exports.TriggerType = exports.OperatorType = exports.HttpMethod = exports.HttpMetadata = void 0;
6
+ exports.httpMethods = exports.TriggerType = exports.ResponseMetaType = exports.OperatorType = exports.HttpMethod = exports.HttpMetadata = void 0;
7
7
  let OperatorType;
8
8
  exports.OperatorType = OperatorType;
9
9
 
@@ -29,11 +29,17 @@ exports.HttpMetadata = HttpMetadata;
29
29
  HttpMetadata["Params"] = "PARAMS";
30
30
  HttpMetadata["Headers"] = "HEADERS";
31
31
  HttpMetadata["Response"] = "RESPONSE";
32
- HttpMetadata["StatusCode"] = "STATUS_CODE";
33
- HttpMetadata["Redirect"] = "REDIRECT";
34
- HttpMetadata["ResponseHeaders"] = "RESPONSE_HEADERS";
35
32
  })(HttpMetadata || (exports.HttpMetadata = HttpMetadata = {}));
36
33
 
34
+ let ResponseMetaType;
35
+ exports.ResponseMetaType = ResponseMetaType;
36
+
37
+ (function (ResponseMetaType) {
38
+ ResponseMetaType[ResponseMetaType["StatusCode"] = 0] = "StatusCode";
39
+ ResponseMetaType[ResponseMetaType["Redirect"] = 1] = "Redirect";
40
+ ResponseMetaType[ResponseMetaType["Headers"] = 2] = "Headers";
41
+ })(ResponseMetaType || (exports.ResponseMetaType = ResponseMetaType = {}));
42
+
37
43
  let HttpMethod;
38
44
  exports.HttpMethod = HttpMethod;
39
45
 
@@ -3,13 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.validateFunction = exports.isWithMetaHandler = exports.getTypeErrorMessage = exports.HANDLER_WITH_META = exports.ERR_INVALID_ARG_TYPE = void 0;
6
+ exports.validateFunction = exports.isWithMetaHandler = exports.getTypeErrorMessage = exports.debug = exports.HANDLER_WITH_META = exports.ERR_INVALID_ARG_TYPE = void 0;
7
7
 
8
8
  var _util = _interopRequireDefault(require("util"));
9
9
 
10
+ var _utils = require("@modern-js/utils");
11
+
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
 
12
- const HANDLER_WITH_META = 'HANDLER_WITH_SCHEMA'; // export const pick = <T extends Record<string, unknown>, K extends keyof T>(
14
+ const HANDLER_WITH_META = 'HANDLER_WITH_META';
15
+ exports.HANDLER_WITH_META = HANDLER_WITH_META;
16
+ const debug = (0, _utils.createDebugger)('bff'); // export const pick = <T extends Record<string, unknown>, K extends keyof T>(
13
17
  // obj: T,
14
18
  // keys: readonly K[],
15
19
  // ) => {
@@ -19,7 +23,7 @@ const HANDLER_WITH_META = 'HANDLER_WITH_SCHEMA'; // export const pick = <T exten
19
23
  // };
20
24
  // fork from https://github.com/nodejs/node/blob/master/lib/internal/errors.js
21
25
 
22
- exports.HANDLER_WITH_META = HANDLER_WITH_META;
26
+ exports.debug = debug;
23
27
 
24
28
  const getTypeErrorMessage = actual => {
25
29
  let msg = '';
@@ -1,5 +1,9 @@
1
1
  import { z } from 'zod';
2
- import { Operator, HttpMethod, ApiMiddleware } from '../types';
2
+ import { Operator, HttpMethod, ApiMiddleware, ResponseMetaType } from '../types';
3
+ export interface ResponseMeta {
4
+ type: ResponseMetaType;
5
+ value: unknown;
6
+ }
3
7
  export declare const createHttpOperator: (method: HttpMethod) => (urlPath: string) => Operator<void>;
4
8
  export declare const Get: (urlPath: string) => Operator<void>;
5
9
  export declare const Post: (urlPath: string) => Operator<void>;
@@ -1,7 +1,9 @@
1
1
  import { MaybeAsync } from '@modern-js/bff-runtime';
2
+ import { APIHandlerInfo } from './types';
2
3
  export declare type NormalHandler = (...args: any[]) => any;
3
4
  export declare type Handler<I, O> = (input: I) => MaybeAsync<O>;
4
5
  export declare const getFiles: (lambdaDir: string, rules: string | string[]) => string[];
5
6
  export declare const getPathFromFilename: (baseDir: string, filename: string) => string;
6
7
  export declare const isHandler: (input: any) => input is Handler<any, any>;
7
- export declare const requireHandlerModule: (modulePath: string) => any;
8
+ export declare const requireHandlerModule: (modulePath: string) => any;
9
+ export declare const sortRoutes: (apiHandlers: APIHandlerInfo[]) => APIHandlerInfo[];
@@ -13,9 +13,11 @@ export declare enum HttpMetadata {
13
13
  Params = "PARAMS",
14
14
  Headers = "HEADERS",
15
15
  Response = "RESPONSE",
16
- StatusCode = "STATUS_CODE",
17
- Redirect = "REDIRECT",
18
- ResponseHeaders = "RESPONSE_HEADERS",
16
+ }
17
+ export declare enum ResponseMetaType {
18
+ StatusCode = 0,
19
+ Redirect = 1,
20
+ Headers = 2,
19
21
  }
20
22
  export declare enum HttpMethod {
21
23
  Get = "GET",
@@ -1,4 +1,5 @@
1
- export declare const HANDLER_WITH_META = "HANDLER_WITH_SCHEMA";
1
+ export declare const HANDLER_WITH_META = "HANDLER_WITH_META";
2
+ export declare const debug: import("@modern-js/utils/compiled/debug").Debugger;
2
3
  export declare const getTypeErrorMessage: (actual: unknown) => string;
3
4
  export declare class ERR_INVALID_ARG_TYPE extends Error {
4
5
  constructor(funcName: string, expectedType: string, actual: unknown);
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "1.0.1-beta.0",
14
+ "version": "1.0.1-beta.1",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",