feat(dev-infra): introduce validators for ng-dev config loading (#37049)

Introduces infrastructure to validate configuration of the ng-dev
command at run time.  Allowing for errors to be returned to the
user running the command.

PR Close #37049
This commit is contained in:
Joey Perrott
2020-05-08 14:51:29 -07:00
committed by Misko Hevery
parent 45f4a47286
commit 14c0ec97d8
7 changed files with 119 additions and 46 deletions
+18
View File
@@ -5,9 +5,27 @@
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {assertNoErrors, getConfig, NgDevConfig} from '../utils/config';
export interface CommitMessageConfig {
maxLineLength: number;
minBodyLength: number;
types: string[];
scopes: string[];
}
/** Retrieve and validate the config as `CommitMessageConfig`. */
export function getCommitMessageConfig() {
// List of errors encountered validating the config.
const errors: string[] = [];
// The unvalidated config object.
const config: Partial<NgDevConfig<{commitMessage: CommitMessageConfig}>> = getConfig();
if (config.commitMessage === undefined) {
errors.push(`No configuration defined for "commitMessage"`);
}
assertNoErrors(errors);
return config as Required<typeof config>;
}
+2 -4
View File
@@ -7,11 +7,9 @@
*/
// Imports
import * as utilConfig from '../utils/config';
import * as validateConfig from './config';
import {validateCommitMessage} from './validate';
// Constants
const config = {
'commitMessage': {
@@ -46,7 +44,7 @@ describe('validate-commit-message.js', () => {
lastError = '';
spyOn(console, 'error').and.callFake((msg: string) => lastError = msg);
spyOn(utilConfig, 'getAngularDevConfig').and.returnValue(config);
spyOn(validateConfig, 'getCommitMessageConfig').and.returnValue(config);
});
describe('validateMessage()', () => {
+2 -3
View File
@@ -5,8 +5,7 @@
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {getAngularDevConfig} from '../utils/config';
import {CommitMessageConfig} from './config';
import {getCommitMessageConfig} from './config';
/** Options for commit message validation. */
export interface ValidateCommitMessageOptions {
@@ -76,7 +75,7 @@ export function validateCommitMessage(
`<type>(<scope>): <subject>\n\n<body>`);
}
const config = getAngularDevConfig<'commitMessage', CommitMessageConfig>().commitMessage;
const config = getCommitMessageConfig().commitMessage;
const commit = parseCommitMessage(commitMsg);
////////////////////////////////////