@modern-js/plugin-bff 2.6.0 → 2.6.1-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.
package/dist/cjs/cli.js CHANGED
@@ -49,29 +49,32 @@ var cli_default = () => ({
49
49
  return {
50
50
  tools: {
51
51
  webpackChain: (chain, { name, CHAIN_ID }) => {
52
- const { appDirectory, port } = api.useAppContext();
52
+ const { port, apiDirectory, lambdaDirectory } = api.useAppContext();
53
53
  const modernConfig = api.useResolvedConfigContext();
54
54
  const { bff } = modernConfig || {};
55
55
  const prefix = (bff == null ? void 0 : bff.prefix) || DEFAULT_API_PREFIX;
56
- const rootDir = import_path.default.resolve(appDirectory, import_utils.API_DIR);
57
- chain.resolve.alias.set("@api", rootDir);
56
+ const { httpMethodDecider } = bff;
57
+ chain.resolve.alias.set("@api", apiDirectory);
58
58
  const apiRouter = new import_bff_core.ApiRouter({
59
- apiDir: rootDir,
60
- prefix
59
+ apiDir: apiDirectory,
60
+ lambdaDir: lambdaDirectory,
61
+ prefix,
62
+ httpMethodDecider
61
63
  });
62
64
  const lambdaDir = apiRouter.getLambdaDir();
63
65
  const existLambda = apiRouter.isExistLambda();
64
66
  const apiRegexp = new RegExp(
65
- (0, import_utils.normalizeOutputPath)(`${rootDir}${import_path.default.sep}.*(.[tj]s)$`)
67
+ (0, import_utils.normalizeOutputPath)(`${apiDirectory}${import_path.default.sep}.*(.[tj]s)$`)
66
68
  );
67
69
  chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(apiRegexp);
68
70
  chain.module.rule(CHAIN_ID.RULE.JS_BFF_API).test(apiRegexp).use("custom-loader").loader(require.resolve("./loader").replace(/\\/g, "/")).options({
69
71
  prefix,
70
- apiDir: rootDir,
72
+ apiDir: apiDirectory,
71
73
  lambdaDir,
72
74
  existLambda,
73
75
  port,
74
- target: name
76
+ target: name,
77
+ httpMethodDecider
75
78
  });
76
79
  }
77
80
  },
@@ -126,11 +129,11 @@ var cli_default = () => ({
126
129
  if (unRegisterResolveRuntimePath) {
127
130
  unRegisterResolveRuntimePath();
128
131
  }
129
- const { appDirectory, distDirectory } = api.useAppContext();
132
+ const { appDirectory, distDirectory, apiDirectory, sharedDirectory } = api.useAppContext();
130
133
  const modernConfig = api.useResolvedConfigContext();
131
134
  const distDir = import_path.default.resolve(distDirectory);
132
- const apiDir = import_path.default.resolve(appDirectory, import_utils.API_DIR);
133
- const sharedDir = import_path.default.resolve(appDirectory, import_utils.SHARED_DIR);
135
+ const apiDir = apiDirectory || import_path.default.resolve(appDirectory, import_utils.API_DIR);
136
+ const sharedDir = sharedDirectory || import_path.default.resolve(appDirectory, import_utils.SHARED_DIR);
134
137
  const tsconfigPath = import_path.default.resolve(appDirectory, TS_CONFIG_FILENAME);
135
138
  const sourceDirs = [];
136
139
  if (import_utils.fs.existsSync(apiDir)) {
@@ -36,10 +36,12 @@ async function loader(source) {
36
36
  const options = {
37
37
  prefix: Array.isArray(draftOptions.prefix) ? draftOptions.prefix[0] : draftOptions.prefix,
38
38
  apiDir: draftOptions.apiDir,
39
+ lambdaDir: draftOptions.lambdaDir,
39
40
  target: draftOptions.target,
40
41
  port: Number(draftOptions.port),
41
42
  source,
42
- resourcePath
43
+ resourcePath,
44
+ httpMethodDecider: draftOptions.httpMethodDecider
43
45
  };
44
46
  const { lambdaDir } = draftOptions;
45
47
  if (!resourcePath.startsWith(lambdaDir)) {
@@ -77,12 +77,15 @@ var server_default = () => ({
77
77
  });
78
78
  },
79
79
  prepareApiServer(props, next) {
80
- const { pwd, prefix } = props;
80
+ const { pwd, prefix, httpMethodDecider } = props;
81
81
  const apiDir = import_path.default.resolve(pwd, import_utils.API_DIR);
82
82
  const appContext = api.useAppContext();
83
+ const { apiDirectory, lambdaDirectory } = appContext;
83
84
  const apiRouter = new import_bff_core.ApiRouter({
84
- apiDir,
85
- prefix
85
+ apiDir: apiDirectory || apiDir,
86
+ lambdaDir: lambdaDirectory,
87
+ prefix,
88
+ httpMethodDecider
86
89
  });
87
90
  const apiMode = apiRouter.getApiMode();
88
91
  const apiHandlerInfos = apiRouter.getApiHandlers();
package/dist/esm/cli.js CHANGED
@@ -220,27 +220,30 @@ var cli_default = function() {
220
220
  tools: {
221
221
  webpackChain: function(chain, param) {
222
222
  var name = param.name, CHAIN_ID = param.CHAIN_ID;
223
- var _api_useAppContext = api.useAppContext(), appDirectory = _api_useAppContext.appDirectory, port = _api_useAppContext.port;
223
+ var _api_useAppContext = api.useAppContext(), port = _api_useAppContext.port, apiDirectory = _api_useAppContext.apiDirectory, lambdaDirectory = _api_useAppContext.lambdaDirectory;
224
224
  var modernConfig = api.useResolvedConfigContext();
225
225
  var bff = (modernConfig || {}).bff;
226
226
  var prefix = (bff === null || bff === void 0 ? void 0 : bff.prefix) || DEFAULT_API_PREFIX;
227
- var rootDir = path.resolve(appDirectory, API_DIR);
228
- chain.resolve.alias.set("@api", rootDir);
227
+ var httpMethodDecider = bff.httpMethodDecider;
228
+ chain.resolve.alias.set("@api", apiDirectory);
229
229
  var apiRouter = new ApiRouter({
230
- apiDir: rootDir,
231
- prefix: prefix
230
+ apiDir: apiDirectory,
231
+ lambdaDir: lambdaDirectory,
232
+ prefix: prefix,
233
+ httpMethodDecider: httpMethodDecider
232
234
  });
233
235
  var lambdaDir = apiRouter.getLambdaDir();
234
236
  var existLambda = apiRouter.isExistLambda();
235
- var apiRegexp = new RegExp(normalizeOutputPath("".concat(rootDir).concat(path.sep, ".*(.[tj]s)$")));
237
+ var apiRegexp = new RegExp(normalizeOutputPath("".concat(apiDirectory).concat(path.sep, ".*(.[tj]s)$")));
236
238
  chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(apiRegexp);
237
239
  chain.module.rule(CHAIN_ID.RULE.JS_BFF_API).test(apiRegexp).use("custom-loader").loader(require.resolve("./loader").replace(/\\/g, "/")).options({
238
240
  prefix: prefix,
239
- apiDir: rootDir,
241
+ apiDir: apiDirectory,
240
242
  lambdaDir: lambdaDir,
241
243
  existLambda: existLambda,
242
244
  port: port,
243
- target: name
245
+ target: name,
246
+ httpMethodDecider: httpMethodDecider
244
247
  });
245
248
  }
246
249
  },
@@ -311,18 +314,18 @@ var cli_default = function() {
311
314
  },
312
315
  afterBuild: function afterBuild() {
313
316
  return _asyncToGenerator(function() {
314
- var _api_useAppContext, appDirectory, distDirectory, modernConfig, distDir, apiDir, sharedDir, tsconfigPath, sourceDirs, server, _modernConfig_source, alias, define, globalVars, babel;
317
+ var _api_useAppContext, appDirectory, distDirectory, apiDirectory, sharedDirectory, modernConfig, distDir, apiDir, sharedDir, tsconfigPath, sourceDirs, server, _modernConfig_source, alias, define, globalVars, babel;
315
318
  return __generator(this, function(_state) {
316
319
  switch(_state.label){
317
320
  case 0:
318
321
  if (unRegisterResolveRuntimePath) {
319
322
  unRegisterResolveRuntimePath();
320
323
  }
321
- _api_useAppContext = api.useAppContext(), appDirectory = _api_useAppContext.appDirectory, distDirectory = _api_useAppContext.distDirectory;
324
+ _api_useAppContext = api.useAppContext(), appDirectory = _api_useAppContext.appDirectory, distDirectory = _api_useAppContext.distDirectory, apiDirectory = _api_useAppContext.apiDirectory, sharedDirectory = _api_useAppContext.sharedDirectory;
322
325
  modernConfig = api.useResolvedConfigContext();
323
326
  distDir = path.resolve(distDirectory);
324
- apiDir = path.resolve(appDirectory, API_DIR);
325
- sharedDir = path.resolve(appDirectory, SHARED_DIR);
327
+ apiDir = apiDirectory || path.resolve(appDirectory, API_DIR);
328
+ sharedDir = sharedDirectory || path.resolve(appDirectory, SHARED_DIR);
326
329
  tsconfigPath = path.resolve(appDirectory, TS_CONFIG_FILENAME);
327
330
  sourceDirs = [];
328
331
  if (fs.existsSync(apiDir)) {
@@ -148,10 +148,12 @@ function _loader() {
148
148
  options = {
149
149
  prefix: Array.isArray(draftOptions.prefix) ? draftOptions.prefix[0] : draftOptions.prefix,
150
150
  apiDir: draftOptions.apiDir,
151
+ lambdaDir: draftOptions.lambdaDir,
151
152
  target: draftOptions.target,
152
153
  port: Number(draftOptions.port),
153
154
  source: source,
154
- resourcePath: resourcePath
155
+ resourcePath: resourcePath,
156
+ httpMethodDecider: draftOptions.httpMethodDecider
155
157
  };
156
158
  lambdaDir = draftOptions.lambdaDir;
157
159
  if (!resourcePath.startsWith(lambdaDir)) {
@@ -128,12 +128,15 @@ var server_default = function() {
128
128
  });
129
129
  },
130
130
  prepareApiServer: function prepareApiServer(props, next) {
131
- var pwd = props.pwd, prefix = props.prefix;
131
+ var pwd = props.pwd, prefix = props.prefix, httpMethodDecider = props.httpMethodDecider;
132
132
  var apiDir = path.resolve(pwd, API_DIR);
133
133
  var appContext = api.useAppContext();
134
+ var apiDirectory = appContext.apiDirectory, lambdaDirectory = appContext.lambdaDirectory;
134
135
  var apiRouter = new ApiRouter({
135
- apiDir: apiDir,
136
- prefix: prefix
136
+ apiDir: apiDirectory || apiDir,
137
+ lambdaDir: lambdaDirectory,
138
+ prefix: prefix,
139
+ httpMethodDecider: httpMethodDecider
137
140
  });
138
141
  var apiMode = apiRouter.getApiMode();
139
142
  var apiHandlerInfos = apiRouter.getApiHandlers();
@@ -24,29 +24,32 @@ var cli_default = () => ({
24
24
  return {
25
25
  tools: {
26
26
  webpackChain: (chain, { name, CHAIN_ID }) => {
27
- const { appDirectory, port } = api.useAppContext();
27
+ const { port, apiDirectory, lambdaDirectory } = api.useAppContext();
28
28
  const modernConfig = api.useResolvedConfigContext();
29
29
  const { bff } = modernConfig || {};
30
30
  const prefix = (bff == null ? void 0 : bff.prefix) || DEFAULT_API_PREFIX;
31
- const rootDir = path.resolve(appDirectory, API_DIR);
32
- chain.resolve.alias.set("@api", rootDir);
31
+ const { httpMethodDecider } = bff;
32
+ chain.resolve.alias.set("@api", apiDirectory);
33
33
  const apiRouter = new ApiRouter({
34
- apiDir: rootDir,
35
- prefix
34
+ apiDir: apiDirectory,
35
+ lambdaDir: lambdaDirectory,
36
+ prefix,
37
+ httpMethodDecider
36
38
  });
37
39
  const lambdaDir = apiRouter.getLambdaDir();
38
40
  const existLambda = apiRouter.isExistLambda();
39
41
  const apiRegexp = new RegExp(
40
- normalizeOutputPath(`${rootDir}${path.sep}.*(.[tj]s)$`)
42
+ normalizeOutputPath(`${apiDirectory}${path.sep}.*(.[tj]s)$`)
41
43
  );
42
44
  chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(apiRegexp);
43
45
  chain.module.rule(CHAIN_ID.RULE.JS_BFF_API).test(apiRegexp).use("custom-loader").loader(require.resolve("./loader").replace(/\\/g, "/")).options({
44
46
  prefix,
45
- apiDir: rootDir,
47
+ apiDir: apiDirectory,
46
48
  lambdaDir,
47
49
  existLambda,
48
50
  port,
49
- target: name
51
+ target: name,
52
+ httpMethodDecider
50
53
  });
51
54
  }
52
55
  },
@@ -101,11 +104,11 @@ var cli_default = () => ({
101
104
  if (unRegisterResolveRuntimePath) {
102
105
  unRegisterResolveRuntimePath();
103
106
  }
104
- const { appDirectory, distDirectory } = api.useAppContext();
107
+ const { appDirectory, distDirectory, apiDirectory, sharedDirectory } = api.useAppContext();
105
108
  const modernConfig = api.useResolvedConfigContext();
106
109
  const distDir = path.resolve(distDirectory);
107
- const apiDir = path.resolve(appDirectory, API_DIR);
108
- const sharedDir = path.resolve(appDirectory, SHARED_DIR);
110
+ const apiDir = apiDirectory || path.resolve(appDirectory, API_DIR);
111
+ const sharedDir = sharedDirectory || path.resolve(appDirectory, SHARED_DIR);
109
112
  const tsconfigPath = path.resolve(appDirectory, TS_CONFIG_FILENAME);
110
113
  const sourceDirs = [];
111
114
  if (fs.existsSync(apiDir)) {
@@ -14,10 +14,12 @@ async function loader(source) {
14
14
  const options = {
15
15
  prefix: Array.isArray(draftOptions.prefix) ? draftOptions.prefix[0] : draftOptions.prefix,
16
16
  apiDir: draftOptions.apiDir,
17
+ lambdaDir: draftOptions.lambdaDir,
17
18
  target: draftOptions.target,
18
19
  port: Number(draftOptions.port),
19
20
  source,
20
- resourcePath
21
+ resourcePath,
22
+ httpMethodDecider: draftOptions.httpMethodDecider
21
23
  };
22
24
  const { lambdaDir } = draftOptions;
23
25
  if (!resourcePath.startsWith(lambdaDir)) {
@@ -45,12 +45,15 @@ var server_default = () => ({
45
45
  });
46
46
  },
47
47
  prepareApiServer(props, next) {
48
- const { pwd, prefix } = props;
48
+ const { pwd, prefix, httpMethodDecider } = props;
49
49
  const apiDir = path.resolve(pwd, API_DIR);
50
50
  const appContext = api.useAppContext();
51
+ const { apiDirectory, lambdaDirectory } = appContext;
51
52
  const apiRouter = new ApiRouter({
52
- apiDir,
53
- prefix
53
+ apiDir: apiDirectory || apiDir,
54
+ lambdaDir: lambdaDirectory,
55
+ prefix,
56
+ httpMethodDecider
54
57
  });
55
58
  const apiMode = apiRouter.getApiMode();
56
59
  const apiHandlerInfos = apiRouter.getApiHandlers();
@@ -0,0 +1,184 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+ import path from "path";
41
+ import {
42
+ fs,
43
+ API_DIR,
44
+ PLUGIN_SCHEMAS,
45
+ normalizeOutputPath,
46
+ SHARED_DIR,
47
+ isProd
48
+ } from "@modern-js/utils";
49
+ import { compile } from "@modern-js/server-utils";
50
+ import { ApiRouter } from "@modern-js/bff-core";
51
+ import { registerModernRuntimePath } from "./helper";
52
+ const DEFAULT_API_PREFIX = "/api";
53
+ const TS_CONFIG_FILENAME = "tsconfig.json";
54
+ var cli_default = () => ({
55
+ name: "@modern-js/plugin-bff",
56
+ setup: (api) => {
57
+ let unRegisterResolveRuntimePath = null;
58
+ return {
59
+ validateSchema() {
60
+ return PLUGIN_SCHEMAS["@modern-js/plugin-bff"];
61
+ },
62
+ config() {
63
+ return {
64
+ tools: {
65
+ webpackChain: (chain, { name, CHAIN_ID }) => {
66
+ const { appDirectory, port } = api.useAppContext();
67
+ const modernConfig = api.useResolvedConfigContext();
68
+ const { bff } = modernConfig || {};
69
+ const prefix = (bff == null ? void 0 : bff.prefix) || DEFAULT_API_PREFIX;
70
+ const rootDir = path.resolve(appDirectory, API_DIR);
71
+ chain.resolve.alias.set("@api", rootDir);
72
+ const apiRouter = new ApiRouter({
73
+ apiDir: rootDir,
74
+ prefix
75
+ });
76
+ const lambdaDir = apiRouter.getLambdaDir();
77
+ const existLambda = apiRouter.isExistLambda();
78
+ const apiRegexp = new RegExp(
79
+ normalizeOutputPath(`${rootDir}${path.sep}.*(.[tj]s)$`)
80
+ );
81
+ chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(apiRegexp);
82
+ chain.module.rule(CHAIN_ID.RULE.JS_BFF_API).test(apiRegexp).use("custom-loader").loader(require.resolve("./loader").replace(/\\/g, "/")).options({
83
+ prefix,
84
+ apiDir: rootDir,
85
+ lambdaDir,
86
+ existLambda,
87
+ port,
88
+ target: name
89
+ });
90
+ }
91
+ },
92
+ source: {
93
+ moduleScopes: [`./${API_DIR}`, /create-request/]
94
+ }
95
+ };
96
+ },
97
+ modifyServerRoutes({ routes }) {
98
+ const modernConfig = api.useResolvedConfigContext();
99
+ const { bff } = modernConfig || {};
100
+ const prefix = (bff == null ? void 0 : bff.prefix) || "/api";
101
+ const prefixList = [];
102
+ if (Array.isArray(prefix)) {
103
+ prefixList.push(...prefix);
104
+ } else {
105
+ prefixList.push(prefix);
106
+ }
107
+ const apiServerRoutes = prefixList.map((pre) => ({
108
+ urlPath: pre,
109
+ isApi: true,
110
+ entryPath: "",
111
+ isSPA: false,
112
+ isSSR: false
113
+ }));
114
+ if (bff == null ? void 0 : bff.enableHandleWeb) {
115
+ return {
116
+ routes: routes.map((route) => {
117
+ return __spreadProps(__spreadValues({}, route), {
118
+ isApi: true
119
+ });
120
+ }).concat(apiServerRoutes)
121
+ };
122
+ }
123
+ return { routes: routes.concat(apiServerRoutes) };
124
+ },
125
+ collectServerPlugins({ plugins }) {
126
+ plugins.push({
127
+ "@modern-js/plugin-bff": "@modern-js/plugin-bff/server"
128
+ });
129
+ return { plugins };
130
+ },
131
+ beforeBuild() {
132
+ return __async(this, null, function* () {
133
+ if (isProd()) {
134
+ const { internalDirectory } = api.useAppContext();
135
+ unRegisterResolveRuntimePath = registerModernRuntimePath(internalDirectory);
136
+ }
137
+ });
138
+ },
139
+ afterBuild() {
140
+ return __async(this, null, function* () {
141
+ if (unRegisterResolveRuntimePath) {
142
+ unRegisterResolveRuntimePath();
143
+ }
144
+ const { appDirectory, distDirectory } = api.useAppContext();
145
+ const modernConfig = api.useResolvedConfigContext();
146
+ const distDir = path.resolve(distDirectory);
147
+ const apiDir = path.resolve(appDirectory, API_DIR);
148
+ const sharedDir = path.resolve(appDirectory, SHARED_DIR);
149
+ const tsconfigPath = path.resolve(appDirectory, TS_CONFIG_FILENAME);
150
+ const sourceDirs = [];
151
+ if (fs.existsSync(apiDir)) {
152
+ sourceDirs.push(apiDir);
153
+ }
154
+ if (fs.existsSync(sharedDir)) {
155
+ sourceDirs.push(sharedDir);
156
+ }
157
+ const { server } = modernConfig;
158
+ const { alias, define, globalVars } = modernConfig.source;
159
+ const { babel } = modernConfig.tools;
160
+ if (sourceDirs.length > 0) {
161
+ yield compile(
162
+ appDirectory,
163
+ {
164
+ server,
165
+ alias,
166
+ define,
167
+ globalVars,
168
+ babelConfig: babel
169
+ },
170
+ {
171
+ sourceDirs,
172
+ distDir,
173
+ tsconfigPath
174
+ }
175
+ );
176
+ }
177
+ });
178
+ }
179
+ };
180
+ }
181
+ });
182
+ export {
183
+ cli_default as default
184
+ };
@@ -0,0 +1,14 @@
1
+ const API_APP_NAME = "_app";
2
+ const BUILD_FILES = [
3
+ "**/*.[tj]sx?",
4
+ "!**/*.test.jsx?",
5
+ "!**/*.test.tsx?",
6
+ "!**/*.spec.jsx?",
7
+ "!**/*.spec.tsx?",
8
+ "!__tests__/*.tsx?",
9
+ "!__tests__/*.jsx?"
10
+ ];
11
+ export {
12
+ API_APP_NAME,
13
+ BUILD_FILES
14
+ };
@@ -0,0 +1,14 @@
1
+ import * as path from "path";
2
+ import { registerPaths } from "@modern-js/bff-core";
3
+ const serverRuntimeAlias = "@modern-js/runtime/server";
4
+ const serverRuntimePath = ".runtime-exports/server";
5
+ const registerModernRuntimePath = (internalDirectory) => {
6
+ const paths = {
7
+ [serverRuntimeAlias]: path.join(internalDirectory, serverRuntimePath)
8
+ };
9
+ const unRegister = registerPaths(paths);
10
+ return unRegister;
11
+ };
12
+ export {
13
+ registerModernRuntimePath
14
+ };
@@ -0,0 +1 @@
1
+ export * from "./constants";
@@ -0,0 +1,67 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { generateClient } from "@modern-js/bff-core";
22
+ import { logger } from "@modern-js/utils";
23
+ function loader(source) {
24
+ return __async(this, null, function* () {
25
+ this.cacheable();
26
+ const callback = this.async();
27
+ const draftOptions = this.getOptions();
28
+ const { resourcePath } = this;
29
+ const warning = `The file ${resourcePath} is not allowd to be imported in src directory, only API definition files are allowed.`;
30
+ if (!draftOptions.existLambda) {
31
+ logger.warn(warning);
32
+ callback(null, `throw new Error('${warning}')`);
33
+ return;
34
+ }
35
+ const options = {
36
+ prefix: Array.isArray(draftOptions.prefix) ? draftOptions.prefix[0] : draftOptions.prefix,
37
+ apiDir: draftOptions.apiDir,
38
+ target: draftOptions.target,
39
+ port: Number(draftOptions.port),
40
+ source,
41
+ resourcePath
42
+ };
43
+ const { lambdaDir } = draftOptions;
44
+ if (!resourcePath.startsWith(lambdaDir)) {
45
+ logger.warn(warning);
46
+ callback(null, `throw new Error('${warning}')`);
47
+ return;
48
+ }
49
+ if (draftOptions.fetcher) {
50
+ options.fetcher = draftOptions.fetcher;
51
+ }
52
+ if (draftOptions.requestCreator) {
53
+ options.requestCreator = draftOptions.requestCreator;
54
+ }
55
+ options.requireResolve = require.resolve;
56
+ const result = yield generateClient(options);
57
+ if (result.isOk) {
58
+ callback(void 0, result.value);
59
+ } else {
60
+ callback(void 0, `throw new Error('${result.value}')`);
61
+ }
62
+ });
63
+ }
64
+ var loader_default = loader;
65
+ export {
66
+ loader_default as default
67
+ };
@@ -0,0 +1,88 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import path from "path";
21
+ import { ApiRouter } from "@modern-js/bff-core";
22
+ import { API_DIR, isProd, requireExistModule } from "@modern-js/utils";
23
+ import { API_APP_NAME } from "./constants";
24
+ class Storage {
25
+ constructor() {
26
+ this.middlewares = [];
27
+ }
28
+ reset() {
29
+ this.middlewares = [];
30
+ }
31
+ }
32
+ const createTransformAPI = (storage) => ({
33
+ addMiddleware(fn) {
34
+ storage.middlewares.push(fn);
35
+ }
36
+ });
37
+ var server_default = () => ({
38
+ name: "@modern-js/plugin-bff",
39
+ setup: (api) => {
40
+ const storage = new Storage();
41
+ const transformAPI = createTransformAPI(storage);
42
+ let apiAppPath = "";
43
+ return {
44
+ prepare() {
45
+ const { appDirectory, distDirectory } = api.useAppContext();
46
+ const root = isProd() ? distDirectory : appDirectory;
47
+ const apiPath = path.resolve(root || process.cwd(), API_DIR);
48
+ apiAppPath = path.resolve(apiPath, API_APP_NAME);
49
+ const apiMod = requireExistModule(apiAppPath);
50
+ if (apiMod && typeof apiMod === "function") {
51
+ apiMod(transformAPI);
52
+ }
53
+ },
54
+ reset() {
55
+ storage.reset();
56
+ const newApiModule = requireExistModule(apiAppPath);
57
+ if (newApiModule && typeof newApiModule === "function") {
58
+ newApiModule(transformAPI);
59
+ }
60
+ },
61
+ gather({ addAPIMiddleware }) {
62
+ storage.middlewares.forEach((mid) => {
63
+ addAPIMiddleware(mid);
64
+ });
65
+ },
66
+ prepareApiServer(props, next) {
67
+ const { pwd, prefix } = props;
68
+ const apiDir = path.resolve(pwd, API_DIR);
69
+ const appContext = api.useAppContext();
70
+ const apiRouter = new ApiRouter({
71
+ apiDir,
72
+ prefix
73
+ });
74
+ const apiMode = apiRouter.getApiMode();
75
+ const apiHandlerInfos = apiRouter.getApiHandlers();
76
+ api.setAppContext(__spreadProps(__spreadValues({}, appContext), {
77
+ apiRouter,
78
+ apiHandlerInfos,
79
+ apiMode
80
+ }));
81
+ return next(props);
82
+ }
83
+ };
84
+ }
85
+ });
86
+ export {
87
+ server_default as default
88
+ };