@modern-js/bff-core 2.69.5 → 3.0.0-alpha.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.
Files changed (77) hide show
  1. package/dist/cjs/api.js +82 -78
  2. package/dist/cjs/client/generateClient.js +90 -76
  3. package/dist/cjs/client/index.js +55 -19
  4. package/dist/cjs/client/result.js +51 -42
  5. package/dist/cjs/compatible.js +17 -15
  6. package/dist/cjs/errors/http.js +43 -34
  7. package/dist/cjs/index.js +169 -54
  8. package/dist/cjs/operators/http.js +213 -212
  9. package/dist/cjs/router/constants.js +63 -57
  10. package/dist/cjs/router/index.js +271 -291
  11. package/dist/cjs/router/types.js +17 -15
  12. package/dist/cjs/router/utils.js +90 -92
  13. package/dist/cjs/types.js +84 -71
  14. package/dist/cjs/utils/alias.js +100 -103
  15. package/dist/cjs/utils/debug.js +34 -26
  16. package/dist/cjs/utils/index.js +98 -34
  17. package/dist/cjs/utils/meta.js +45 -38
  18. package/dist/cjs/utils/storage.js +58 -68
  19. package/dist/cjs/utils/validate.js +73 -72
  20. package/dist/esm/api.mjs +44 -0
  21. package/dist/esm/client/generateClient.mjs +60 -0
  22. package/dist/esm/client/result.mjs +19 -0
  23. package/dist/esm/compatible.mjs +0 -0
  24. package/dist/esm/errors/http.mjs +13 -0
  25. package/dist/esm/index.mjs +8 -0
  26. package/dist/esm/operators/http.mjs +135 -0
  27. package/dist/esm/router/constants.mjs +19 -0
  28. package/dist/esm/router/index.mjs +186 -0
  29. package/dist/esm/router/types.mjs +0 -0
  30. package/dist/esm/router/utils.mjs +42 -0
  31. package/dist/esm/types.mjs +39 -0
  32. package/dist/esm/utils/alias.mjs +57 -0
  33. package/dist/esm/utils/debug.mjs +3 -0
  34. package/dist/esm/utils/{index.js → index.mjs} +2 -4
  35. package/dist/esm/utils/meta.mjs +5 -0
  36. package/dist/esm/utils/storage.mjs +30 -0
  37. package/dist/esm/utils/validate.mjs +32 -0
  38. package/dist/esm-node/api.mjs +44 -0
  39. package/dist/esm-node/client/generateClient.mjs +60 -0
  40. package/dist/esm-node/client/index.mjs +1 -0
  41. package/dist/esm-node/client/result.mjs +19 -0
  42. package/dist/esm-node/errors/http.mjs +13 -0
  43. package/dist/esm-node/index.mjs +8 -0
  44. package/dist/esm-node/operators/http.mjs +135 -0
  45. package/dist/esm-node/router/constants.mjs +19 -0
  46. package/dist/esm-node/router/index.mjs +186 -0
  47. package/dist/esm-node/router/utils.mjs +42 -0
  48. package/dist/esm-node/types.mjs +39 -0
  49. package/dist/esm-node/utils/alias.mjs +57 -0
  50. package/dist/esm-node/utils/debug.mjs +3 -0
  51. package/dist/esm-node/utils/index.mjs +6 -0
  52. package/dist/esm-node/utils/meta.mjs +5 -0
  53. package/dist/esm-node/utils/storage.mjs +30 -0
  54. package/dist/esm-node/utils/validate.mjs +32 -0
  55. package/dist/types/client/generateClient.d.ts +1 -1
  56. package/dist/types/router/constants.d.ts +0 -10
  57. package/dist/types/router/index.d.ts +0 -5
  58. package/package.json +18 -18
  59. package/rslib.config.mts +4 -0
  60. package/dist/esm/api.js +0 -50
  61. package/dist/esm/client/generateClient.js +0 -60
  62. package/dist/esm/client/result.js +0 -22
  63. package/dist/esm/errors/http.js +0 -16
  64. package/dist/esm/index.js +0 -19
  65. package/dist/esm/operators/http.js +0 -178
  66. package/dist/esm/router/constants.js +0 -32
  67. package/dist/esm/router/index.js +0 -261
  68. package/dist/esm/router/utils.js +0 -62
  69. package/dist/esm/types.js +0 -46
  70. package/dist/esm/utils/alias.js +0 -75
  71. package/dist/esm/utils/debug.js +0 -5
  72. package/dist/esm/utils/meta.js +0 -14
  73. package/dist/esm/utils/storage.js +0 -40
  74. package/dist/esm/utils/validate.js +0 -45
  75. /package/dist/esm/client/{index.js → index.mjs} +0 -0
  76. /package/dist/{esm/compatible.js → esm-node/compatible.mjs} +0 -0
  77. /package/dist/{esm/router/types.js → esm-node/router/types.mjs} +0 -0
@@ -17,5 +17,5 @@ export type GenClientOptions = {
17
17
  domain?: string;
18
18
  };
19
19
  export declare const DEFAULT_CLIENT_REQUEST_CREATOR = "@modern-js/create-request";
20
- export declare const INNER_CLIENT_REQUEST_CREATOR = "@modern-js/plugin-bff/runtime/create-request";
20
+ export declare const INNER_CLIENT_REQUEST_CREATOR = "@modern-js/plugin-bff/client";
21
21
  export declare const generateClient: ({ appDir, resourcePath, apiDir, lambdaDir, prefix, port, target, requestCreator, fetcher, requireResolve, httpMethodDecider, domain, }: GenClientOptions) => Promise<GenClientResult>;
@@ -1,14 +1,4 @@
1
1
  export declare const AllHttpMethods: string[];
2
- export declare enum APIMode {
3
- /**
4
- * 框架模式
5
- */
6
- FARMEWORK = "framework",
7
- /**
8
- * 函数模式
9
- */
10
- FUNCTION = "function"
11
- }
12
2
  export declare const FRAMEWORK_MODE_LAMBDA_DIR = "lambda";
13
3
  export declare const FRAMEWORK_MODE_APP_DIR = "app";
14
4
  export declare const INDEX_SUFFIX = "index";
@@ -1,12 +1,10 @@
1
1
  import 'reflect-metadata';
2
2
  import type { HttpMethodDecider } from '@modern-js/types';
3
3
  import { HttpMethod } from '../types';
4
- import { APIMode } from './constants';
5
4
  import type { APIHandlerInfo, ApiHandler } from './types';
6
5
  export * from './types';
7
6
  export * from './constants';
8
7
  export declare class ApiRouter {
9
- private apiMode;
10
8
  private appDir?;
11
9
  private apiDir;
12
10
  private existLambdaDir;
@@ -24,7 +22,6 @@ export declare class ApiRouter {
24
22
  httpMethodDecider?: HttpMethodDecider;
25
23
  });
26
24
  isExistLambda(): boolean;
27
- getApiMode(): APIMode;
28
25
  getLambdaDir(): string;
29
26
  isApiFile(filename: string): boolean;
30
27
  getSingleModuleHandlers(filename: string): Promise<APIHandlerInfo[] | null>;
@@ -42,8 +39,6 @@ export declare class ApiRouter {
42
39
  */
43
40
  private initPrefix;
44
41
  private validateAbsolute;
45
- private getExactApiMode;
46
- private createExistChecker;
47
42
  private getExactLambdaDir;
48
43
  private getModuleInfos;
49
44
  private getModuleInfo;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.69.5",
18
+ "version": "3.0.0-alpha.0",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -30,26 +30,27 @@
30
30
  "dependencies": {
31
31
  "@swc/helpers": "^0.5.17",
32
32
  "koa-compose": "^4.1.0",
33
- "reflect-metadata": "^0.1.13",
34
- "type-fest": "2.15.0",
35
- "@modern-js/utils": "2.69.5"
33
+ "reflect-metadata": "^0.2.2",
34
+ "type-fest": "2.19.0",
35
+ "@modern-js/utils": "3.0.0-alpha.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/jest": "^29",
39
- "@types/koa-compose": "^3.2.5",
40
- "@types/node": "^18",
41
- "jest": "^29",
42
- "ts-node": "^10.9.1",
43
- "tsconfig-paths": "^4.1.2",
38
+ "@types/jest": "^29.5.14",
39
+ "@types/koa-compose": "^3.2.9",
40
+ "@types/node": "^20",
41
+ "jest": "^29.7.0",
42
+ "ts-node": "^10.9.2",
43
+ "tsconfig-paths": "^4.2.0",
44
+ "@rslib/core": "0.18.5",
44
45
  "typescript": "^5",
45
46
  "zod": "^3.22.3",
46
- "@modern-js/types": "2.69.5",
47
- "@scripts/build": "2.66.0",
48
- "@scripts/jest-config": "2.66.0"
47
+ "@modern-js/types": "3.0.0-alpha.0",
48
+ "@scripts/jest-config": "2.66.0",
49
+ "@modern-js/rslib": "2.68.10"
49
50
  },
50
51
  "peerDependencies": {
51
- "ts-node": "^10.9.1",
52
- "tsconfig-paths": "^4.1.2",
52
+ "ts-node": "^10.9.2",
53
+ "tsconfig-paths": "^4.2.0",
53
54
  "zod": "^3.22.3"
54
55
  },
55
56
  "peerDependenciesMeta": {
@@ -62,9 +63,8 @@
62
63
  "access": "public"
63
64
  },
64
65
  "scripts": {
65
- "new": "modern-lib new",
66
- "dev": "modern-lib build --watch",
67
- "build": "modern-lib build",
66
+ "dev": "rslib build --watch",
67
+ "build": "rslib build",
68
68
  "test": "jest --passWithNoTests"
69
69
  }
70
70
  }
@@ -0,0 +1,4 @@
1
+ import { rslibConfig } from '@modern-js/rslib';
2
+ import { defineConfig } from '@rslib/core';
3
+
4
+ export default defineConfig(rslibConfig);
package/dist/esm/api.js DELETED
@@ -1,50 +0,0 @@
1
- import "reflect-metadata";
2
- import compose from "koa-compose";
3
- import { HANDLER_WITH_META, validateFunction } from "./utils";
4
- function Api(...args) {
5
- const handler = args.pop();
6
- validateFunction(handler, "Apihandler");
7
- const operators = args;
8
- const metadataHelper = {
9
- getMetadata(key) {
10
- return Reflect.getMetadata(key, runner);
11
- },
12
- setMetadata(key, value) {
13
- return Reflect.defineMetadata(key, value, runner);
14
- }
15
- };
16
- for (const operator of operators) {
17
- if (operator.metadata) {
18
- operator.metadata(metadataHelper);
19
- }
20
- }
21
- const validateHandlers = operators.filter((operator) => operator.validate).map((operator) => operator.validate);
22
- const pipeHandlers = operators.filter((operator) => operator.execute).map((operator) => operator.execute);
23
- async function runner(inputs) {
24
- const executeHelper = {
25
- result: null,
26
- get inputs() {
27
- return inputs;
28
- },
29
- set inputs(val) {
30
- inputs = val;
31
- }
32
- };
33
- const stack = [
34
- ...validateHandlers,
35
- ...pipeHandlers
36
- ];
37
- stack.push(async (helper, next) => {
38
- const res = await handler(helper.inputs);
39
- helper.result = res;
40
- return next();
41
- });
42
- await compose(stack)(executeHelper);
43
- return executeHelper.result;
44
- }
45
- runner[HANDLER_WITH_META] = true;
46
- return runner;
47
- }
48
- export {
49
- Api
50
- };
@@ -1,60 +0,0 @@
1
- import { ApiRouter } from "../router";
2
- import { Err, Ok } from "./result";
3
- const DEFAULT_CLIENT_REQUEST_CREATOR = "@modern-js/create-request";
4
- const INNER_CLIENT_REQUEST_CREATOR = "@modern-js/plugin-bff/runtime/create-request";
5
- const generateClient = async ({ appDir, resourcePath, apiDir, lambdaDir, prefix, port, target, requestCreator, fetcher, requireResolve = require.resolve, httpMethodDecider, domain }) => {
6
- requestCreator = requestCreator || INNER_CLIENT_REQUEST_CREATOR;
7
- const apiRouter = new ApiRouter({
8
- appDir,
9
- apiDir,
10
- lambdaDir,
11
- prefix,
12
- httpMethodDecider
13
- });
14
- const handlerInfos = await apiRouter.getSingleModuleHandlers(resourcePath);
15
- if (!handlerInfos) {
16
- return Err(`generate client error: Cannot require module ${resourcePath}`);
17
- }
18
- let handlersCode = "";
19
- for (const handlerInfo of handlerInfos) {
20
- const { name, httpMethod, routePath, action } = handlerInfo;
21
- let exportStatement = `var ${name} =`;
22
- if (name.toLowerCase() === "default") {
23
- exportStatement = "default";
24
- }
25
- const upperHttpMethod = httpMethod.toUpperCase();
26
- const routeName = routePath;
27
- const requestId = target === "bundle" ? process.env.npm_package_name : void 0;
28
- if (action === "upload") {
29
- const requestOptions = {
30
- path: routeName,
31
- domain,
32
- requestId
33
- };
34
- handlersCode += `export ${exportStatement} createUploader(${JSON.stringify(requestOptions)});`;
35
- } else {
36
- const portValue = target === "server" ? `process.env.PORT || ${String(port)}` : String(port);
37
- const optionsStr = `{
38
- path: '${routeName}',
39
- method: '${upperHttpMethod}',
40
- port: ${portValue},
41
- httpMethodDecider: '${httpMethodDecider || "functionName"}'
42
- ${domain ? `, domain: '${domain}'` : ""}
43
- ${fetcher ? ", fetch: 'fetch'" : ""}
44
- ${requestId ? `, requestId: '${requestId}'` : ""}
45
- }`.replace(/\n\s*/g, "");
46
- handlersCode += `export ${exportStatement} createRequest(${optionsStr});
47
- `;
48
- }
49
- }
50
- const importCode = `import { createRequest${handlerInfos.find((i) => i.action === "upload") ? ", createUploader" : ""} } from '${requestCreator}';
51
- ${fetcher ? `import { fetch } from '${fetcher}';
52
- ` : ""}`;
53
- return Ok(`${importCode}
54
- ${handlersCode}`);
55
- };
56
- export {
57
- DEFAULT_CLIENT_REQUEST_CREATOR,
58
- INNER_CLIENT_REQUEST_CREATOR,
59
- generateClient
60
- };
@@ -1,22 +0,0 @@
1
- const Err = (value) => {
2
- const err = {
3
- kind: "Err",
4
- value,
5
- isErr: true,
6
- isOk: false
7
- };
8
- return err;
9
- };
10
- const Ok = (value) => {
11
- const ok = {
12
- kind: "Ok",
13
- value,
14
- isErr: false,
15
- isOk: true
16
- };
17
- return ok;
18
- };
19
- export {
20
- Err,
21
- Ok
22
- };
@@ -1,16 +0,0 @@
1
- class HttpError extends Error {
2
- constructor(status, message) {
3
- super(message);
4
- this.status = status;
5
- }
6
- }
7
- class ValidationError extends HttpError {
8
- constructor(status, message) {
9
- super(status, message);
10
- this.code = "VALIDATION_ERROR";
11
- }
12
- }
13
- export {
14
- HttpError,
15
- ValidationError
16
- };
package/dist/esm/index.js DELETED
@@ -1,19 +0,0 @@
1
- import { Api } from "./api";
2
- import { HttpError, ValidationError } from "./errors/http";
3
- export * from "./router";
4
- export * from "./types";
5
- export * from "./client";
6
- export * from "./operators/http";
7
- import { getRelativeRuntimePath, HANDLER_WITH_META, isWithMetaHandler, INPUT_PARAMS_DECIDER, isInputParamsDeciderHandler, createStorage, registerPaths } from "./utils";
8
- export {
9
- Api,
10
- HANDLER_WITH_META,
11
- HttpError,
12
- INPUT_PARAMS_DECIDER,
13
- ValidationError,
14
- createStorage,
15
- getRelativeRuntimePath,
16
- isInputParamsDeciderHandler,
17
- isWithMetaHandler,
18
- registerPaths
19
- };
@@ -1,178 +0,0 @@
1
- import { ValidationError } from "../errors/http";
2
- import { HttpMetadata, HttpMethod, OperatorType, ResponseMetaType, TriggerType } from "../types";
3
- const validateInput = async (schema, input) => {
4
- try {
5
- return await schema.parseAsync(input);
6
- } catch (error) {
7
- if ("name" in error && error.name === "ZodError") {
8
- throw new ValidationError(400, error.message);
9
- }
10
- throw error;
11
- }
12
- };
13
- const createHttpOperator = (method) => {
14
- return (urlPath) => {
15
- return {
16
- name: method,
17
- metadata({ setMetadata }) {
18
- setMetadata(OperatorType.Trigger, {
19
- type: TriggerType.Http,
20
- path: urlPath,
21
- method
22
- });
23
- }
24
- };
25
- };
26
- };
27
- const Get = createHttpOperator(HttpMethod.Get);
28
- const Post = createHttpOperator(HttpMethod.Post);
29
- const Put = createHttpOperator(HttpMethod.Put);
30
- const Delete = createHttpOperator(HttpMethod.Delete);
31
- const Connect = createHttpOperator(HttpMethod.Connect);
32
- const Trace = createHttpOperator(HttpMethod.Trace);
33
- const Patch = createHttpOperator(HttpMethod.Patch);
34
- const Options = createHttpOperator(HttpMethod.Options);
35
- const Head = createHttpOperator(HttpMethod.Head);
36
- const Data = (schema) => {
37
- return {
38
- name: HttpMetadata.Data,
39
- metadata({ setMetadata }) {
40
- setMetadata(HttpMetadata.Data, schema);
41
- },
42
- async validate(helper, next) {
43
- const { inputs: { data } } = helper;
44
- helper.inputs = {
45
- ...helper.inputs,
46
- data: await validateInput(schema, data)
47
- };
48
- return next();
49
- }
50
- };
51
- };
52
- const Query = (schema) => {
53
- return {
54
- name: HttpMetadata.Query,
55
- metadata({ setMetadata }) {
56
- setMetadata(HttpMetadata.Query, schema);
57
- },
58
- async validate(helper, next) {
59
- const { inputs: { query } } = helper;
60
- helper.inputs = {
61
- ...helper.inputs,
62
- query: await validateInput(schema, query)
63
- };
64
- return next();
65
- }
66
- };
67
- };
68
- const Params = (schema) => {
69
- return {
70
- name: HttpMetadata.Params,
71
- metadata({ setMetadata }) {
72
- setMetadata(HttpMetadata.Params, schema);
73
- },
74
- async validate(helper, next) {
75
- const { inputs: { params } } = helper;
76
- helper.inputs = {
77
- ...helper.inputs,
78
- params: await validateInput(schema, params)
79
- };
80
- return next();
81
- }
82
- };
83
- };
84
- const Headers = (schema) => {
85
- return {
86
- name: HttpMetadata.Headers,
87
- metadata({ setMetadata }) {
88
- setMetadata(HttpMetadata.Headers, schema);
89
- },
90
- async validate(helper, next) {
91
- const { inputs: { headers } } = helper;
92
- helper.inputs = {
93
- ...helper.inputs,
94
- headers: await validateInput(schema, headers)
95
- };
96
- return next();
97
- }
98
- };
99
- };
100
- const setResponseMeta = (helper, type, value) => {
101
- const responseMetaData = helper.getMetadata(HttpMetadata.Response) || [];
102
- helper.setMetadata(HttpMetadata.Response, [
103
- ...responseMetaData,
104
- {
105
- type,
106
- value
107
- }
108
- ]);
109
- };
110
- const HttpCode = (statusCode) => {
111
- return {
112
- name: "HttpCode",
113
- metadata(helper) {
114
- setResponseMeta(helper, ResponseMetaType.StatusCode, statusCode);
115
- }
116
- };
117
- };
118
- const SetHeaders = (headers) => {
119
- return {
120
- name: "SetHeaders",
121
- metadata(helper) {
122
- setResponseMeta(helper, ResponseMetaType.Headers, headers);
123
- }
124
- };
125
- };
126
- const Redirect = (url) => {
127
- return {
128
- name: "Redirect",
129
- metadata(helper) {
130
- setResponseMeta(helper, ResponseMetaType.Redirect, url);
131
- }
132
- };
133
- };
134
- const Upload = (urlPath, schema) => {
135
- return {
136
- name: "Upload",
137
- metadata({ setMetadata }) {
138
- setMetadata(OperatorType.Trigger, {
139
- type: TriggerType.Http,
140
- path: urlPath,
141
- method: HttpMethod.Post,
142
- action: "upload"
143
- });
144
- setMetadata(HttpMetadata.Files, schema);
145
- },
146
- async validate(helper, next) {
147
- if (!schema) {
148
- return next();
149
- }
150
- const { inputs: { formData: files } } = helper;
151
- helper.inputs = {
152
- ...helper.inputs,
153
- files: await validateInput(schema, files)
154
- };
155
- return next();
156
- }
157
- };
158
- };
159
- export {
160
- Connect,
161
- Data,
162
- Delete,
163
- Get,
164
- Head,
165
- Headers,
166
- HttpCode,
167
- Options,
168
- Params,
169
- Patch,
170
- Post,
171
- Put,
172
- Query,
173
- Redirect,
174
- SetHeaders,
175
- Trace,
176
- Upload,
177
- createHttpOperator
178
- };
@@ -1,32 +0,0 @@
1
- import { HttpMethod } from "../types";
2
- const AllHttpMethods = Object.values(HttpMethod);
3
- var APIMode;
4
- (function(APIMode2) {
5
- APIMode2["FARMEWORK"] = "framework";
6
- APIMode2["FUNCTION"] = "function";
7
- })(APIMode || (APIMode = {}));
8
- const FRAMEWORK_MODE_LAMBDA_DIR = "lambda";
9
- const FRAMEWORK_MODE_APP_DIR = "app";
10
- const INDEX_SUFFIX = "index";
11
- const API_DIR = "api";
12
- const API_FILE_RULES = [
13
- "**/*.[tj]s",
14
- "!**/_*",
15
- "!**/_*/**/*.[tj]s",
16
- "!**/*.test.js",
17
- "!**/*.test.ts",
18
- "!**/*.d.ts",
19
- "!__test__/*.ts",
20
- "!__tests__/*.ts",
21
- "!node_modules/**",
22
- "!bootstrap.jsx"
23
- ];
24
- export {
25
- APIMode,
26
- API_DIR,
27
- API_FILE_RULES,
28
- AllHttpMethods,
29
- FRAMEWORK_MODE_APP_DIR,
30
- FRAMEWORK_MODE_LAMBDA_DIR,
31
- INDEX_SUFFIX
32
- };