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