-
Notifications
You must be signed in to change notification settings - Fork 367
/
Copy pathindex.ts
76 lines (67 loc) · 2.33 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { provider } from 'std-env';
import type {
AppTools,
AppToolsNormalizedConfig,
CliPluginFuture,
} from '../../types';
import type { AppToolsContext } from '../../types/new';
import { createGhPagesPreset } from './platforms/gh-pages';
import { createNetlifyPreset } from './platforms/netlify';
import { createNodePreset } from './platforms/node';
import { createVercelPreset } from './platforms/vercel';
import { getProjectUsage } from './utils';
type DeployPresetCreators = {
node: typeof createNodePreset;
vercel: typeof createVercelPreset;
netlify: typeof createNetlifyPreset;
ghPages: typeof createGhPagesPreset;
};
type DeployTarget = keyof DeployPresetCreators;
const deployPresets: DeployPresetCreators = {
node: createNodePreset,
vercel: createVercelPreset,
netlify: createNetlifyPreset,
ghPages: createGhPagesPreset,
};
async function getDeployPreset(
appContext: AppToolsContext<'shared'>,
modernConfig: AppToolsNormalizedConfig,
deployTarget: DeployTarget,
) {
const { appDirectory, distDirectory } = appContext;
const { useSSR, useAPI, useWebServer } = getProjectUsage(
appDirectory,
distDirectory,
);
const needModernServer = useSSR || useAPI || useWebServer;
const createPreset = deployPresets[deployTarget];
if (!createPreset) {
throw new Error(
`Unknown deploy target: '${deployTarget}'. MODERNJS_DEPLOY should be 'node', 'vercel', or 'netlify'.`,
);
}
return createPreset(appContext, modernConfig, needModernServer);
}
export default (): CliPluginFuture<AppTools<'shared'>> => ({
name: '@modern-js/plugin-deploy',
setup: api => {
const deployTarget = process.env.MODERNJS_DEPLOY || provider || 'node';
api.deploy(async () => {
const appContext = api.getAppContext();
const { metaName } = appContext;
if (metaName !== 'modern-js' && !process.env.MODERNJS_DEPLOY) {
return;
}
const modernConfig = api.getNormalizedConfig();
const deployPreset = await getDeployPreset(
appContext,
modernConfig,
deployTarget as DeployTarget,
);
deployPreset?.prepare && (await deployPreset?.prepare());
deployPreset?.writeOutput && (await deployPreset?.writeOutput());
deployPreset?.genEntry && (await deployPreset?.genEntry());
deployPreset?.end && (await deployPreset?.end());
});
},
});