1 | import * as Joi from '@hapi/joi'
|
2 |
|
3 | const schema = Joi.object().keys({
|
4 | projectName: Joi.string().required(),
|
5 | date: Joi.date(),
|
6 | designWidth: Joi.number().integer().positive(),
|
7 | deviceRatio: Joi.object().pattern(Joi.number(), Joi.number()),
|
8 | sourceRoot: Joi.string().required(),
|
9 | outputRoot: Joi.string().required(),
|
10 |
|
11 | plugins: Joi.array().items(Joi.alternatives(
|
12 | Joi.string(),
|
13 | Joi.array().ordered(Joi.string().required(), Joi.object())
|
14 | )),
|
15 |
|
16 | presets: Joi.array().items(Joi.alternatives(
|
17 | Joi.string(),
|
18 | Joi.array().ordered(Joi.string().required(), Joi.object())
|
19 | )),
|
20 |
|
21 | env: Joi.object().pattern(
|
22 | Joi.string(), Joi.any()
|
23 | ),
|
24 |
|
25 | defineConstants: Joi.object().pattern(
|
26 | Joi.string(), Joi.any()
|
27 | ),
|
28 |
|
29 | copy: Joi.object().keys({
|
30 | patterns: Joi.array().items(
|
31 | Joi.object().keys({
|
32 | from: Joi.string().required(),
|
33 | to: Joi.string().required(),
|
34 | ignore: Joi.string()
|
35 | })
|
36 | ),
|
37 |
|
38 | options: Joi.object().keys({
|
39 | ignore: Joi.array().items(Joi.string())
|
40 | })
|
41 | }),
|
42 |
|
43 | framework: Joi.any().valid('nerv', 'react', 'vue', 'vue3'),
|
44 |
|
45 | mini: Joi.object().keys({
|
46 | compile: Joi.object().keys({
|
47 | exclude: Joi.array().items(Joi.string(), Joi.function()),
|
48 | include: Joi.array().items(Joi.string(), Joi.function())
|
49 | }),
|
50 | webpackChain: Joi.func(),
|
51 | commonChunks: Joi.alternatives(Joi.func(), Joi.array().items(Joi.string())),
|
52 | addChunkPages: Joi.func(),
|
53 | output: Joi.object(),
|
54 | postcss: Joi.object().pattern(
|
55 | Joi.string(),
|
56 | Joi.object().keys({
|
57 | enable: Joi.bool(),
|
58 | config: Joi.object()
|
59 | })
|
60 | ),
|
61 | cssLoaderOption: Joi.object(),
|
62 | styleLoaderOption: Joi.object(),
|
63 | sassLoaderOption: Joi.object(),
|
64 | lessLoaderOption: Joi.object(),
|
65 | stylusLoaderOption: Joi.object(),
|
66 | mediaUrlLoaderOption: Joi.object(),
|
67 | fontUrlLoaderOption: Joi.object(),
|
68 | imageUrlLoaderOption: Joi.object(),
|
69 | miniCssExtractPluginOption: Joi.object()
|
70 | }).unknown(),
|
71 |
|
72 | alias: Joi.object().pattern(Joi.string(), Joi.string()),
|
73 |
|
74 | csso: Joi.object().keys({
|
75 | enable: Joi.bool(),
|
76 | config: Joi.object()
|
77 | }),
|
78 | uglify: Joi.object().keys({
|
79 | enable: Joi.bool(),
|
80 | config: Joi.object()
|
81 | }),
|
82 | terser: Joi.object().keys({
|
83 | enable: Joi.bool(),
|
84 | config: Joi.object()
|
85 | }),
|
86 | sass: Joi.object().keys({
|
87 | resource: Joi.alternatives(Joi.array(), Joi.string()),
|
88 | projectDirectory: Joi.string(),
|
89 | data: Joi.string()
|
90 | }).unknown(),
|
91 |
|
92 | h5: Joi.object().keys({
|
93 | devServer: Joi.object(),
|
94 | publicPath: Joi.string(),
|
95 | staticDirectory: Joi.string(),
|
96 | chunkDirectory: Joi.string(),
|
97 | webpackChain: Joi.func(),
|
98 | output: Joi.object(),
|
99 | router: Joi.object(),
|
100 |
|
101 | esnextModules: Joi.array().items(Joi.string()),
|
102 |
|
103 |
|
104 | webpack: Joi.forbidden(),
|
105 |
|
106 |
|
107 | entry: Joi.alternatives(
|
108 | Joi.string(),
|
109 | Joi.array().items(Joi.string()),
|
110 | Joi.object().pattern(
|
111 | Joi.string(),
|
112 | Joi.alternatives(Joi.string(), Joi.array().items(Joi.string()))
|
113 | ),
|
114 | Joi.func()
|
115 | ),
|
116 | enableSourceMap: Joi.bool(),
|
117 | enableExtract: Joi.bool(),
|
118 | cssLoaderOption: Joi.object(),
|
119 | styleLoaderOption: Joi.object(),
|
120 | sassLoaderOption: Joi.object(),
|
121 | lessLoaderOption: Joi.object(),
|
122 | stylusLoaderOption: Joi.object(),
|
123 | mediaUrlLoaderOption: Joi.object(),
|
124 | fontUrlLoaderOption: Joi.object(),
|
125 | imageUrlLoaderOption: Joi.object(),
|
126 | miniCssExtractPluginOption: Joi.object(),
|
127 |
|
128 | postcss: Joi.object().pattern(
|
129 | Joi.string(),
|
130 | Joi.object().keys({
|
131 | enable: Joi.bool(),
|
132 | config: Joi.object()
|
133 | })
|
134 | )
|
135 | }).unknown()
|
136 | }).unknown()
|
137 |
|
138 | export default schema
|