juvo-rafa-library
Version:
A comprehensive Angular component library featuring real-world components and validators extracted from the Juvo Rafa backoffice application. Now with improved select components and bug fixes.
45 lines • 4.23 kB
JavaScript
/**
* Validator function for network ports
*
* @description
* Validates that the input value is a valid network port number.
* Accepts port numbers in the range 0-65535 (standard TCP/UDP port range).
*
* @example
* ```typescript
* // Basic usage in FormControl
* const portControl = new FormControl('', [portValidator()]);
*
* // Usage in reactive forms
* this.serverForm = this.fb.group({
* port: ['', [Validators.required, portValidator()]]
* });
*
* // Valid inputs: 80, 443, 8080, 3000, 65535
* // Invalid inputs: -1, 65536, 'abc', 'port'
* ```
*
* @returns ValidatorFn that returns null if valid, or validation error object if invalid
*
* @since 2.0.0
* @author Juvo Rafa Team
*/
export function portValidator() {
return (control) => {
// Allow empty values and explicit 0 (use Validators.required for required validation)
if (!control.value && control.value !== 0)
return null;
const port = Number(control.value);
// Check if it's a valid number and within port range
if (isNaN(port) || port < 0 || port > 65535) {
return {
invalidPort: {
value: control.value,
message: 'Port must be a number between 0 and 65535'
}
};
}
return null;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21wb25lbnRzL3NyYy9saWIvdmFsaWRhdG9ycy9wb3J0LnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FBQyxPQUF3QixFQUFxQyxFQUFFO1FBQ3JFLHNGQUFzRjtRQUN0RixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLHFEQUFxRDtRQUNyRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxPQUFPO2dCQUNMLFdBQVcsRUFBRTtvQkFDWCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3BCLE9BQU8sRUFBRSwyQ0FBMkM7aUJBQ3JEO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIFZhbGlkYXRvciBmdW5jdGlvbiBmb3IgbmV0d29yayBwb3J0c1xuICogXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBhIHZhbGlkIG5ldHdvcmsgcG9ydCBudW1iZXIuXG4gKiBBY2NlcHRzIHBvcnQgbnVtYmVycyBpbiB0aGUgcmFuZ2UgMC02NTUzNSAoc3RhbmRhcmQgVENQL1VEUCBwb3J0IHJhbmdlKS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEJhc2ljIHVzYWdlIGluIEZvcm1Db250cm9sXG4gKiBjb25zdCBwb3J0Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW3BvcnRWYWxpZGF0b3IoKV0pO1xuICogXG4gKiAvLyBVc2FnZSBpbiByZWFjdGl2ZSBmb3Jtc1xuICogdGhpcy5zZXJ2ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gKiAgIHBvcnQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHBvcnRWYWxpZGF0b3IoKV1dXG4gKiB9KTtcbiAqIFxuICogLy8gVmFsaWQgaW5wdXRzOiA4MCwgNDQzLCA4MDgwLCAzMDAwLCA2NTUzNVxuICogLy8gSW52YWxpZCBpbnB1dHM6IC0xLCA2NTUzNiwgJ2FiYycsICdwb3J0J1xuICogYGBgXG4gKiBcbiAqIEByZXR1cm5zIFZhbGlkYXRvckZuIHRoYXQgcmV0dXJucyBudWxsIGlmIHZhbGlkLCBvciB2YWxpZGF0aW9uIGVycm9yIG9iamVjdCBpZiBpbnZhbGlkXG4gKiBcbiAqIEBzaW5jZSAyLjAuMFxuICogQGF1dGhvciBKdXZvIFJhZmEgVGVhbVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9ydFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgICAvLyBBbGxvdyBlbXB0eSB2YWx1ZXMgYW5kIGV4cGxpY2l0IDAgKHVzZSBWYWxpZGF0b3JzLnJlcXVpcmVkIGZvciByZXF1aXJlZCB2YWxpZGF0aW9uKVxuICAgIGlmICghY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlICE9PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHBvcnQgPSBOdW1iZXIoY29udHJvbC52YWx1ZSk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHZhbGlkIG51bWJlciBhbmQgd2l0aGluIHBvcnQgcmFuZ2VcbiAgICBpZiAoaXNOYU4ocG9ydCkgfHwgcG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KSB7XG4gICAgICByZXR1cm4geyBcbiAgICAgICAgaW52YWxpZFBvcnQ6IHsgXG4gICAgICAgICAgdmFsdWU6IGNvbnRyb2wudmFsdWUsIFxuICAgICAgICAgIG1lc3NhZ2U6ICdQb3J0IG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA2NTUzNScgXG4gICAgICAgIH0gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xufSAiXX0=