/
validate-config.ts
148 lines (123 loc) · 5.38 KB
/
validate-config.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import { Config, ConfigBundle, Diagnostic } from '../../declarations';
import { buildError, buildWarn, isBoolean, isNumber, sortBy } from '@utils';
import { setBooleanConfig } from './config-utils';
import { validateDevServer } from './validate-dev-server';
import { validateDistNamespace } from './validate-namespace';
import { validateHydrated } from './validate-hydrated';
import { validateNamespace } from './validate-namespace';
import { validateOutputTargets } from './outputs';
import { validatePaths } from './validate-paths';
import { validatePlugins } from './validate-plugins';
import { validateRollupConfig } from './validate-rollup-config';
import { validateTesting } from './validate-testing';
import { validateWorkers } from './validate-workers';
export const validateConfig = (userConfig?: Config) => {
const config = Object.assign({}, userConfig || {}); // not positive it's json safe
const diagnostics: Diagnostic[] = [];
// copy flags (we know it'll be json safe)
config.flags = JSON.parse(JSON.stringify(config.flags || {}));
// default devMode false
if (config.flags.prod) {
config.devMode = false;
} else if (config.flags.dev) {
config.devMode = true;
} else if (!isBoolean(config.devMode)) {
config.devMode = DEFAULT_DEV_MODE;
}
config.extras = config.extras || {};
config.extras.appendChildSlotFix = !!config.extras.appendChildSlotFix;
config.extras.cloneNodeFix = !!config.extras.cloneNodeFix;
config.extras.cssVarsShim = !!config.extras.cssVarsShim;
config.extras.dynamicImportShim = !!config.extras.dynamicImportShim;
config.extras.lifecycleDOMEvents = !!config.extras.lifecycleDOMEvents;
config.extras.safari10 = !!config.extras.safari10;
config.extras.scriptDataOpts = !!config.extras.scriptDataOpts;
config.extras.shadowDomShim = !!config.extras.shadowDomShim;
config.extras.slotChildNodesFix = !!config.extras.slotChildNodesFix;
config.extras.initializeNextTick = !!config.extras.initializeNextTick;
config.extras.tagNameTransform = !!config.extras.tagNameTransform;
setBooleanConfig(config, 'minifyCss', null, !config.devMode);
setBooleanConfig(config, 'minifyJs', null, !config.devMode);
setBooleanConfig(config, 'sourceMap', null, false);
setBooleanConfig(config, 'watch', 'watch', false);
setBooleanConfig(config, 'minifyCss', null, !config.devMode);
setBooleanConfig(config, 'minifyJs', null, !config.devMode);
setBooleanConfig(config, 'buildEs5', 'es5', !config.devMode);
setBooleanConfig(config, 'buildDocs', 'docs', !config.devMode);
setBooleanConfig(config, 'buildDist', 'esm', !config.devMode || config.buildEs5);
setBooleanConfig(config, 'profile', 'profile', config.devMode);
setBooleanConfig(config, 'writeLog', 'log', false);
setBooleanConfig(config, 'buildAppCore', null, true);
setBooleanConfig(config, 'autoprefixCss', null, config.buildEs5);
setBooleanConfig(config, 'validateTypes', null, !config._isTesting);
setBooleanConfig(config, 'allowInlineScripts', null, true);
if (typeof config.taskQueue !== 'string') {
config.taskQueue = 'congestionAsync';
} else if (config.taskQueue === ('sync' as any)) {
// deprecated 1.12.1
config.taskQueue = 'immediate';
}
// hash file names
if (!isBoolean(config.hashFileNames)) {
config.hashFileNames = !config.devMode;
}
if (!isNumber(config.hashedFileNameLength)) {
config.hashedFileNameLength = DEFAULT_HASHED_FILENAME_LENTH;
}
if (config.hashedFileNameLength < MIN_HASHED_FILENAME_LENTH) {
const err = buildError(diagnostics);
err.messageText = `config.hashedFileNameLength must be at least ${MIN_HASHED_FILENAME_LENTH} characters`;
}
if (config.hashedFileNameLength > MAX_HASHED_FILENAME_LENTH) {
const err = buildError(diagnostics);
err.messageText = `config.hashedFileNameLength cannot be more than ${MAX_HASHED_FILENAME_LENTH} characters`;
}
// get a good namespace
validateNamespace(config, diagnostics);
// figure out all of the config paths and absolute paths
validatePaths(config);
// outputTargets
validateOutputTargets(config, diagnostics);
// plugins
validatePlugins(config, diagnostics);
// rollup config
validateRollupConfig(config);
// dev server
config.devServer = validateDevServer(config, diagnostics);
// testing
validateTesting(config, diagnostics);
// hydrate flag
config.hydratedFlag = validateHydrated(config);
// bundles
if (Array.isArray(config.bundles)) {
config.bundles = sortBy(config.bundles, (a: ConfigBundle) => a.components.length);
} else {
config.bundles = [];
}
// Default copy
config.copy = config.copy || [];
// validate how many workers we can use
validateWorkers(config);
// default devInspector to whatever devMode is
setBooleanConfig(config, 'devInspector', null, config.devMode);
if (!config._isTesting) {
validateDistNamespace(config, diagnostics);
}
setBooleanConfig(config, 'enableCache', 'cache', true);
if (config.excludeSrc) {
const warn = buildWarn(diagnostics);
warn.messageText = `"excludeSrc" is deprecated, use the "exclude" option in tsconfig.json`;
}
if (config.includeSrc) {
const warn = buildWarn(diagnostics);
warn.messageText = `"includeSrc" is deprecated, use the "include" option in tsconfig.json`;
}
return {
config,
diagnostics,
};
};
const DEFAULT_DEV_MODE = false;
const DEFAULT_HASHED_FILENAME_LENTH = 8;
const MIN_HASHED_FILENAME_LENTH = 4;
const MAX_HASHED_FILENAME_LENTH = 32;