-
Notifications
You must be signed in to change notification settings - Fork 925
/
createBaseApp.ts
49 lines (43 loc) · 1.47 KB
/
createBaseApp.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
import { createPluginApi } from '../pluginApi/index.js'
import type { App, AppConfig, Plugin } from '../types/index.js'
import { appInit } from './appInit.js'
import { appPrepare } from './appPrepare.js'
import { appUse } from './appUse.js'
import { resolveAppDir } from './resolveAppDir.js'
import { resolveAppEnv } from './resolveAppEnv.js'
import { resolveAppOptions } from './resolveAppOptions.js'
import { resolveAppSiteData } from './resolveAppSiteData.js'
import { resolveAppVersion } from './resolveAppVersion.js'
import { resolveAppWriteTemp } from './resolveAppWriteTemp.js'
import { setupAppThemeAndPlugins } from './setupAppThemeAndPlugins.js'
/**
* Create vuepress app
*/
export const createBaseApp = (config: AppConfig, isBuild = false): App => {
const options = resolveAppOptions(config)
const dir = resolveAppDir(options)
const env = resolveAppEnv(options, isBuild)
const pluginApi = createPluginApi()
const siteData = resolveAppSiteData(options)
const version = resolveAppVersion()
const writeTemp = resolveAppWriteTemp(dir)
const app = {
options,
siteData,
version,
// utils
dir,
env,
pluginApi,
writeTemp,
// methods
use: (plugin: Plugin) => appUse(app, plugin),
init: () => appInit(app),
prepare: () => appPrepare(app),
} as App
// setup theme and plugins
// notice that we setup theme before plugins,
// so user plugins could override theme plugins
setupAppThemeAndPlugins(app, config)
return app
}