This commit applies `strictNullChecks` to the entire codebase to improve maintainability and type safety. Key changes include: - Remove some explicit null-checks where unnecessary. - Add necessary null-checks. - Refactor static factory functions for a more functional approach. - Improve some test names and contexts for better debugging. - Add unit tests for any additional logic introduced. - Refactor `createPositionFromRegexFullMatch` to its own function as the logic is reused. - Prefer `find` prefix on functions that may return `undefined` and `get` prefix for those that always return a value.
39 lines
981 B
TypeScript
39 lines
981 B
TypeScript
import { INodeDataErrorContext, NodeDataError } from './NodeDataError';
|
|
import { NodeData } from './NodeData';
|
|
|
|
export class NodeValidator {
|
|
constructor(private readonly context: INodeDataErrorContext) {
|
|
|
|
}
|
|
|
|
public assertValidName(nameValue: string) {
|
|
return this
|
|
.assert(
|
|
() => Boolean(nameValue),
|
|
'missing name',
|
|
)
|
|
.assert(
|
|
() => typeof nameValue === 'string',
|
|
`Name (${JSON.stringify(nameValue)}) is not a string but ${typeof nameValue}.`,
|
|
);
|
|
}
|
|
|
|
public assertDefined(node: NodeData) {
|
|
return this.assert(
|
|
() => node !== undefined && node !== null && Object.keys(node).length > 0,
|
|
'missing node data',
|
|
);
|
|
}
|
|
|
|
public assert(validationPredicate: () => boolean, errorMessage: string) {
|
|
if (!validationPredicate()) {
|
|
this.throw(errorMessage);
|
|
}
|
|
return this;
|
|
}
|
|
|
|
public throw(errorMessage: string): never {
|
|
throw new NodeDataError(errorMessage, this.context);
|
|
}
|
|
}
|