@modern-js/app-tools 2.49.3-alpha.1 → 2.49.3-alpha.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. package/dist/cjs/analyze/getServerRoutes.js +4 -3
  2. package/dist/cjs/plugins/deploy/index.js +60 -25
  3. package/dist/cjs/plugins/deploy/platforms/nodeEntry.js +36 -0
  4. package/dist/cjs/plugins/deploy/platforms/platform.js +16 -0
  5. package/dist/cjs/plugins/deploy/platforms/vercel.js +66 -0
  6. package/dist/cjs/plugins/deploy/platforms/vercelEntry.js +55 -0
  7. package/dist/cjs/utils/routes.js +7 -2
  8. package/dist/esm/analyze/getServerRoutes.js +5 -4
  9. package/dist/esm/plugins/deploy/index.js +124 -74
  10. package/dist/esm/plugins/deploy/platforms/nodeEntry.js +99 -0
  11. package/dist/esm/plugins/deploy/platforms/platform.js +0 -0
  12. package/dist/esm/plugins/deploy/platforms/vercel.js +56 -0
  13. package/dist/esm/plugins/deploy/platforms/vercelEntry.js +197 -0
  14. package/dist/esm/utils/routes.js +6 -2
  15. package/dist/esm-node/analyze/getServerRoutes.js +5 -4
  16. package/dist/esm-node/plugins/deploy/index.js +60 -25
  17. package/dist/esm-node/plugins/deploy/platforms/nodeEntry.js +35 -0
  18. package/dist/esm-node/plugins/deploy/platforms/platform.js +0 -0
  19. package/dist/esm-node/plugins/deploy/platforms/vercel.js +32 -0
  20. package/dist/esm-node/plugins/deploy/platforms/vercelEntry.js +63 -0
  21. package/dist/esm-node/utils/routes.js +6 -2
  22. package/dist/types/plugins/deploy/platforms/nodeEntry.d.ts +1 -0
  23. package/dist/types/plugins/deploy/platforms/platform.d.ts +1 -0
  24. package/dist/types/plugins/deploy/{entrys → platforms}/vercel.d.ts +2 -3
  25. package/dist/types/plugins/deploy/platforms/vercelEntry.d.ts +2 -0
  26. package/dist/types/utils/routes.d.ts +3 -3
  27. package/package.json +8 -8
  28. package/dist/cjs/plugins/deploy/entrys/vercel.js +0 -97
  29. package/dist/esm/plugins/deploy/entrys/vercel.js +0 -43
  30. package/dist/esm-node/plugins/deploy/entrys/vercel.js +0 -73
  31. /package/dist/cjs/plugins/deploy/{entrys → platforms}/netlify.js +0 -0
  32. /package/dist/cjs/plugins/deploy/{entrys → platforms}/node.js +0 -0
  33. /package/dist/esm/plugins/deploy/{entrys → platforms}/netlify.js +0 -0
  34. /package/dist/esm/plugins/deploy/{entrys → platforms}/node.js +0 -0
  35. /package/dist/esm-node/plugins/deploy/{entrys → platforms}/netlify.js +0 -0
  36. /package/dist/esm-node/plugins/deploy/{entrys → platforms}/node.js +0 -0
  37. /package/dist/types/plugins/deploy/{entrys → platforms}/netlify.d.ts +0 -0
  38. /package/dist/types/plugins/deploy/{entrys → platforms}/node.d.ts +0 -0
@@ -3,6 +3,7 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import path from "path";
4
4
  import { fs as fse, getInternalPlugins } from "@modern-js/utils";
5
5
  import { provider } from "std-env";
6
+ import { isMainEntry } from "../../utils/routes";
6
7
  import { getProjectUsage } from "./utils";
7
8
  import { handleDependencies } from "./dependencies";
8
9
  function deploy_default() {
@@ -17,15 +18,16 @@ function deploy_default() {
17
18
  return {
18
19
  beforeDeploy: function beforeDeploy() {
19
20
  return _async_to_generator(function() {
20
- var appContext, appDirectory, distDirectory, serverInternalPlugins, sharedDirectory, apiDirectory, lambdaDirectory, metaName, entrypoints, _getProjectUsage, useSSR, useAPI, useWebServer, needModernServer, configContext, outputDirectory, funcsDirectory, staticDirectory, vercelOutput, config, destHtmlDirectory, outputHtmlDirectory, apiDirectory1, bff, config1, plugins, serverAppContext, code, genNodeEntry, genVercelEntry, genNetlifyEntry, entryFilePath;
21
+ var appContext, modernConfig, mainEntryName, appDirectory, distDirectory, serverInternalPlugins, sharedDirectory, apiDirectory, lambdaDirectory, metaName, entrypoints, _getProjectUsage, useSSR, useAPI, useWebServer, needModernServer, outputDirectory, funcsDirectory, staticDirectory, netlifyOutput, routes, redirectContent, redirectFilePath, vercelOutput, config, destHtmlDirectory, outputHtmlDirectory, plugins, serverAppContext, code, genNodeEntry, genVercelEntry, serverAppContext1, genNetlifyEntry, entryFilePath;
21
22
  return _ts_generator(this, function(_state) {
22
23
  switch (_state.label) {
23
24
  case 0:
24
25
  appContext = api.useAppContext();
26
+ modernConfig = api.useResolvedConfigContext();
27
+ mainEntryName = modernConfig.source.mainEntryName;
25
28
  appDirectory = appContext.appDirectory, distDirectory = appContext.distDirectory, serverInternalPlugins = appContext.serverInternalPlugins, sharedDirectory = appContext.sharedDirectory, apiDirectory = appContext.apiDirectory, lambdaDirectory = appContext.lambdaDirectory, metaName = appContext.metaName, entrypoints = appContext.entrypoints;
26
29
  _getProjectUsage = getProjectUsage(appDirectory, distDirectory), useSSR = _getProjectUsage.useSSR, useAPI = _getProjectUsage.useAPI, useWebServer = _getProjectUsage.useWebServer;
27
30
  needModernServer = useSSR || useAPI || useWebServer;
28
- configContext = api.useResolvedConfigContext();
29
31
  outputDirectory = path.join(appDirectory, ".output");
30
32
  funcsDirectory = outputDirectory;
31
33
  staticDirectory = path.join(outputDirectory, "static");
@@ -48,17 +50,79 @@ function deploy_default() {
48
50
  _state.sent();
49
51
  _state.label = 3;
50
52
  case 3:
53
+ if (!(deployTarget === "netlify"))
54
+ return [
55
+ 3,
56
+ 8
57
+ ];
58
+ netlifyOutput = path.join(appDirectory, ".netlify");
59
+ funcsDirectory = path.join(netlifyOutput, "functions");
60
+ routes = [];
61
+ if (!needModernServer) {
62
+ entrypoints.forEach(function(entry) {
63
+ var isMain = isMainEntry(entry.entryName, mainEntryName);
64
+ routes.push({
65
+ src: "/".concat(isMain ? "" : "".concat(entry.entryName, "/"), "*"),
66
+ dest: "/html/".concat(entry.entryName, "/index.html"),
67
+ status: 200
68
+ });
69
+ });
70
+ } else {
71
+ routes.push({
72
+ src: "/*",
73
+ dest: "/.netlify/functions/index",
74
+ status: 200
75
+ });
76
+ throw new Error("Currently on the Netlify platform, only CSR projects are supporte, Support for SSR and BFF projects will be available later");
77
+ }
78
+ console.log("routes", routes, needModernServer);
79
+ redirectContent = routes.map(function(route) {
80
+ return "".concat(route.src, " ").concat(route.dest, " ").concat(route.status);
81
+ }).join("\n");
82
+ console.log("redirectContent", redirectContent);
83
+ return [
84
+ 4,
85
+ fse.remove(outputDirectory)
86
+ ];
87
+ case 4:
88
+ _state.sent();
89
+ return [
90
+ 4,
91
+ fse.ensureDir(funcsDirectory)
92
+ ];
93
+ case 5:
94
+ _state.sent();
95
+ return [
96
+ 4,
97
+ fse.copy(distDirectory, funcsDirectory, {
98
+ filter: function(src) {
99
+ var distStaticDirectory = path.join(distDirectory, "static");
100
+ return !src.includes(distStaticDirectory);
101
+ }
102
+ })
103
+ ];
104
+ case 6:
105
+ _state.sent();
106
+ redirectFilePath = path.join(distDirectory, "_redirects");
107
+ return [
108
+ 4,
109
+ fse.writeFile(redirectFilePath, redirectContent)
110
+ ];
111
+ case 7:
112
+ _state.sent();
113
+ _state.label = 8;
114
+ case 8:
51
115
  if (!(deployTarget === "vercel"))
52
116
  return [
53
117
  3,
54
- 16
118
+ 18
55
119
  ];
56
120
  vercelOutput = path.join(appDirectory, ".vercel");
57
121
  return [
58
122
  4,
59
123
  fse.remove(vercelOutput)
60
124
  ];
61
- case 4:
125
+ case 9:
62
126
  _state.sent();
63
127
  outputDirectory = path.join(vercelOutput, "output");
64
128
  config = {
@@ -78,8 +142,9 @@ function deploy_default() {
78
142
  };
79
143
  if (!needModernServer) {
80
144
  entrypoints.forEach(function(entry) {
145
+ var isMain = isMainEntry(entry.entryName, mainEntryName);
81
146
  config.routes.push({
82
- src: "/".concat(entry.entryName, "(?:/.*)?"),
147
+ src: "/".concat(isMain ? "" : entry.entryName, "(?:/.*)?"),
83
148
  headers: {
84
149
  "cache-control": "s-maxage=0"
85
150
  },
@@ -96,7 +161,7 @@ function deploy_default() {
96
161
  4,
97
162
  fse.ensureDir(outputDirectory)
98
163
  ];
99
- case 5:
164
+ case 10:
100
165
  _state.sent();
101
166
  return [
102
167
  4,
@@ -104,19 +169,19 @@ function deploy_default() {
104
169
  spaces: 2
105
170
  })
106
171
  ];
107
- case 6:
172
+ case 11:
108
173
  _state.sent();
109
174
  staticDirectory = path.join(outputDirectory, "static/static");
110
175
  return [
111
176
  4,
112
177
  fse.copy(path.join(distDirectory, "static"), staticDirectory)
113
178
  ];
114
- case 7:
179
+ case 12:
115
180
  _state.sent();
116
181
  if (!!needModernServer)
117
182
  return [
118
183
  3,
119
- 9
184
+ 14
120
185
  ];
121
186
  destHtmlDirectory = path.join(distDirectory, "html");
122
187
  outputHtmlDirectory = path.join(path.join(outputDirectory, "static"), "html");
@@ -124,19 +189,19 @@ function deploy_default() {
124
189
  4,
125
190
  fse.copy(destHtmlDirectory, outputHtmlDirectory)
126
191
  ];
127
- case 8:
192
+ case 13:
128
193
  _state.sent();
129
194
  return [
130
195
  3,
131
- 16
196
+ 18
132
197
  ];
133
- case 9:
198
+ case 14:
134
199
  funcsDirectory = path.join(outputDirectory, "functions", "index.func");
135
200
  return [
136
201
  4,
137
202
  fse.ensureDir(funcsDirectory)
138
203
  ];
139
- case 10:
204
+ case 15:
140
205
  _state.sent();
141
206
  return [
142
207
  4,
@@ -147,27 +212,8 @@ function deploy_default() {
147
212
  }
148
213
  })
149
214
  ];
150
- case 11:
151
- _state.sent();
152
- apiDirectory1 = path.join(funcsDirectory, "api");
153
- return [
154
- 4,
155
- fse.pathExists(apiDirectory1)
156
- ];
157
- case 12:
158
- if (!_state.sent())
159
- return [
160
- 3,
161
- 14
162
- ];
163
- return [
164
- 4,
165
- fse.rename(apiDirectory1, path.join(funcsDirectory, "_api"))
166
- ];
167
- case 13:
215
+ case 16:
168
216
  _state.sent();
169
- _state.label = 14;
170
- case 14:
171
217
  return [
172
218
  4,
173
219
  fse.writeJSON(path.join(funcsDirectory, ".vc-config.json"), {
@@ -178,17 +224,10 @@ function deploy_default() {
178
224
  supportsResponseStreaming: true
179
225
  })
180
226
  ];
181
- case 15:
227
+ case 17:
182
228
  _state.sent();
183
- _state.label = 16;
184
- case 16:
185
- bff = configContext.bff;
186
- config1 = {
187
- output: {
188
- path: "."
189
- },
190
- bff
191
- };
229
+ _state.label = 18;
230
+ case 18:
192
231
  plugins = getInternalPlugins(appDirectory, serverInternalPlugins);
193
232
  serverAppContext = {
194
233
  sharedDirectory: 'path.join(__dirname, "'.concat(path.relative(appDirectory, sharedDirectory), '")'),
@@ -202,88 +241,99 @@ function deploy_default() {
202
241
  case "node":
203
242
  return [
204
243
  3,
205
- 17
244
+ 19
206
245
  ];
207
246
  case "vercel":
208
247
  return [
209
248
  3,
210
- 19
249
+ 21
211
250
  ];
212
251
  case "netlify":
213
252
  return [
214
253
  3,
215
- 21
254
+ 24
216
255
  ];
217
256
  }
218
257
  return [
219
258
  3,
220
- 23
259
+ 26
221
260
  ];
222
- case 17:
261
+ case 19:
223
262
  return [
224
263
  4,
225
- import("./entrys/node")
264
+ import("./platforms/node")
226
265
  ];
227
- case 18:
266
+ case 20:
228
267
  genNodeEntry = _state.sent().genNodeEntry;
229
268
  code = genNodeEntry({
230
269
  plugins,
231
- config: config1,
270
+ config: modernConfig,
232
271
  appContext: serverAppContext
233
272
  });
234
273
  return [
235
274
  3,
236
- 24
275
+ 27
237
276
  ];
238
- case 19:
277
+ case 21:
239
278
  return [
240
279
  4,
241
- import("./entrys/vercel")
280
+ import("./platforms/vercel")
242
281
  ];
243
- case 20:
282
+ case 22:
244
283
  genVercelEntry = _state.sent().genVercelEntry;
245
- code = genVercelEntry({
246
- plugins,
247
- config: config1,
248
- appContext: serverAppContext
249
- });
284
+ serverAppContext1 = {
285
+ sharedDirectory: path.join(__dirname, path.relative(appDirectory, sharedDirectory)),
286
+ apiDirectory: path.join(__dirname, path.relative(appDirectory, apiDirectory)),
287
+ lambdaDirectory: path.join(__dirname, path.relative(appDirectory, lambdaDirectory)),
288
+ metaName
289
+ };
290
+ return [
291
+ 4,
292
+ genVercelEntry({
293
+ plugins,
294
+ config: modernConfig,
295
+ appContext: serverAppContext1
296
+ })
297
+ ];
298
+ case 23:
299
+ code = _state.sent();
250
300
  return [
251
301
  3,
252
- 24
302
+ 27
253
303
  ];
254
- case 21:
304
+ case 24:
255
305
  return [
256
306
  4,
257
- import("./entrys/netlify")
307
+ import("./platforms/netlify")
258
308
  ];
259
- case 22:
309
+ case 25:
260
310
  genNetlifyEntry = _state.sent().genNetlifyEntry;
261
311
  code = genNetlifyEntry({
262
312
  plugins,
263
- config: config1,
313
+ config: modernConfig,
264
314
  appContext: serverAppContext
265
315
  });
266
316
  return [
267
317
  3,
268
- 24
318
+ 27
269
319
  ];
270
- case 23:
320
+ case 26:
271
321
  {
272
322
  code = 'throw new Error("unknown deploy target, MODERNJS_DEPLOY should be set");';
273
323
  }
274
- _state.label = 24;
275
- case 24:
324
+ _state.label = 27;
325
+ case 27:
276
326
  entryFilePath = path.join(funcsDirectory, "index.js");
277
327
  if (!needModernServer)
278
328
  return [
279
329
  3,
280
- 27
330
+ 30
281
331
  ];
282
332
  return [
283
333
  4,
284
334
  fse.writeFile(entryFilePath, code)
285
335
  ];
286
- case 25:
336
+ case 28:
287
337
  _state.sent();
288
338
  return [
289
339
  4,
@@ -291,10 +341,10 @@ function deploy_default() {
291
341
  "@modern-js/prod-server"
292
342
  ])
293
343
  ];
294
- case 26:
344
+ case 29:
295
345
  _state.sent();
296
- _state.label = 27;
297
- case 27:
346
+ _state.label = 30;
347
+ case 30:
298
348
  return [
299
349
  2
300
350
  ];
@@ -0,0 +1,99 @@
1
+ var _async_to_generator = require("@swc/helpers/_/_async_to_generator");
2
+ var _object_spread = require("@swc/helpers/_/_object_spread");
3
+ var _ts_generator = require("@swc/helpers/_/_ts_generator");
4
+ var fs = require("node:fs/promises");
5
+ var path = require("node:path");
6
+ var createProdServer = require("@modern-js/prod-server").createProdServer;
7
+ p_genPluginImportsCode;
8
+ if (!process.env.NODE_ENV) {
9
+ process.env.NODE_ENV = "production";
10
+ }
11
+ function loadRoutes(routeFilepath) {
12
+ return _loadRoutes.apply(this, arguments);
13
+ }
14
+ function _loadRoutes() {
15
+ _loadRoutes = _async_to_generator._(function(routeFilepath) {
16
+ var content, routeSpec, error;
17
+ return _ts_generator._(this, function(_state) {
18
+ switch (_state.label) {
19
+ case 0:
20
+ _state.trys.push([
21
+ 0,
22
+ 3,
23
+ ,
24
+ 4
25
+ ]);
26
+ return [
27
+ 4,
28
+ fs.access(routeFilepath)
29
+ ];
30
+ case 1:
31
+ _state.sent();
32
+ return [
33
+ 4,
34
+ fs.readFile(routeFilepath, "utf-8")
35
+ ];
36
+ case 2:
37
+ content = _state.sent();
38
+ routeSpec = JSON.parse(content);
39
+ return [
40
+ 2,
41
+ routeSpec.routes || []
42
+ ];
43
+ case 3:
44
+ error = _state.sent();
45
+ console.warn("route.json not found or invalid, continuing with empty routes.");
46
+ return [
47
+ 2,
48
+ []
49
+ ];
50
+ case 4:
51
+ return [
52
+ 2
53
+ ];
54
+ }
55
+ });
56
+ });
57
+ return _loadRoutes.apply(this, arguments);
58
+ }
59
+ function main() {
60
+ return _main.apply(this, arguments);
61
+ }
62
+ function _main() {
63
+ _main = _async_to_generator._(function() {
64
+ var routeFilepath, routes, dynamicProdOptions, prodServerOptions, app, port;
65
+ return _ts_generator._(this, function(_state) {
66
+ switch (_state.label) {
67
+ case 0:
68
+ routeFilepath = path.join(__dirname, p_ROUTE_SPEC_FILE);
69
+ return [
70
+ 4,
71
+ loadRoutes(routeFilepath)
72
+ ];
73
+ case 1:
74
+ routes = _state.sent();
75
+ dynamicProdOptions = p_dynamicProdOptions;
76
+ prodServerOptions = _object_spread._({
77
+ pwd: __dirname,
78
+ routes,
79
+ disableCustomHook: true
80
+ }, dynamicProdOptions);
81
+ return [
82
+ 4,
83
+ createProdServer(prodServerOptions)
84
+ ];
85
+ case 2:
86
+ app = _state.sent();
87
+ port = process.env.PORT || 8080;
88
+ app.listen(port, function() {
89
+ console.log("\\x1b[32mServer is listening on port", port, "\\x1b[0m");
90
+ });
91
+ return [
92
+ 2
93
+ ];
94
+ }
95
+ });
96
+ });
97
+ return _main.apply(this, arguments);
98
+ }
99
+ main();
File without changes
@@ -0,0 +1,56 @@
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
+ import path from "node:path";
4
+ import { ROUTE_SPEC_FILE, DEFAULT_SERVER_CONFIG, fs as fse } from "@modern-js/utils";
5
+ import { genPluginImportsCode } from "../utils";
6
+ function genVercelEntry() {
7
+ return _genVercelEntry.apply(this, arguments);
8
+ }
9
+ function _genVercelEntry() {
10
+ _genVercelEntry = _async_to_generator(function() {
11
+ var _ref, config, plugins, appContext, defaultConfig, pluginImportCode, dynamicProdOptions, entryCode;
12
+ var _arguments = arguments;
13
+ return _ts_generator(this, function(_state) {
14
+ switch (_state.label) {
15
+ case 0:
16
+ _ref = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, config = _ref.config, plugins = _ref.plugins, appContext = _ref.appContext;
17
+ defaultConfig = {
18
+ output: {
19
+ path: "."
20
+ }
21
+ };
22
+ console.log("appContext.sharedDirectory", appContext === null || appContext === void 0 ? void 0 : appContext.sharedDirectory);
23
+ pluginImportCode = genPluginImportsCode(plugins || []);
24
+ dynamicProdOptions = {
25
+ config: config || defaultConfig,
26
+ serverConfigFile: DEFAULT_SERVER_CONFIG,
27
+ plugins,
28
+ appContext: appContext ? {
29
+ sharedDirectory: appContext.sharedDirectory,
30
+ apiDirectory: appContext.apiDirectory,
31
+ lambdaDirectory: appContext.lambdaDirectory
32
+ } : "undefined"
33
+ };
34
+ return [
35
+ 4,
36
+ fse.readFile(path.join(__dirname, "./vercelEntry.js"))
37
+ ];
38
+ case 1:
39
+ entryCode = _state.sent().toString();
40
+ entryCode = entryCode.replace("p_genPluginImportsCode", pluginImportCode).replace("p_ROUTE_SPEC_FILE", '"'.concat(ROUTE_SPEC_FILE, '"')).replace(
41
+ "p_dynamicProdOptions",
42
+ // JSON.stringify(dynamicProdOptions),
43
+ JSON.stringify(dynamicProdOptions)
44
+ );
45
+ return [
46
+ 2,
47
+ entryCode
48
+ ];
49
+ }
50
+ });
51
+ });
52
+ return _genVercelEntry.apply(this, arguments);
53
+ }
54
+ export {
55
+ genVercelEntry
56
+ };