UNPKG

angular-dynamic-forms-ai

Version:

AI-enhanced dynamic form generator for Angular using Template-Driven Forms

94 lines 12.7 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; class AiValidationService { validationRules = new Map([ ['email', /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/], ['phone', /^\+?[\d\s-]{10,}$/], ['url', /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w .-]*)*\/?$/], ['zipcode', /^\d{5}(-\d{4})?$/], ]); suggestValidations(field) { const fieldNameLower = field.name.toLowerCase(); const validations = { ...field.validations } || {}; // Email validation if (fieldNameLower.includes('email')) { validations.email = true; validations.required = true; field.type = 'email'; } // Password validation if (fieldNameLower.includes('password')) { validations.required = true; validations.minLength = 6; field.type = 'password'; validations.pattern = '^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{6,}$'; } // Phone validation if (fieldNameLower.includes('phone')) { validations.pattern = this.validationRules.get('phone')?.toString().slice(1, -1); validations.required = true; } // Name validation if (fieldNameLower.includes('name')) { validations.required = true; validations.minLength = 2; } // URL validation if (fieldNameLower.includes('url') || fieldNameLower.includes('website')) { validations.pattern = this.validationRules.get('url')?.toString().slice(1, -1); } // Zip code validation if (fieldNameLower.includes('zip')) { validations.pattern = this.validationRules.get('zipcode')?.toString().slice(1, -1); } field.validations = validations; field.errorMessages = this.generateErrorMessages(field); return field; } generateErrorMessages(field) { const messages = {}; const validations = field.validations || {}; if (validations.required) { messages.required = `${field.label} is required`; } if (validations.minLength) { messages.minlength = `${field.label} must be at least ${validations.minLength} characters`; } if (validations.maxLength) { messages.maxlength = `${field.label} cannot exceed ${validations.maxLength} characters`; } if (validations.email) { messages.email = `Please enter a valid email address`; } if (validations.pattern) { messages.pattern = this.getPatternErrorMessage(field.name); } return messages; } getPatternErrorMessage(fieldName) { const fieldNameLower = fieldName.toLowerCase(); if (fieldNameLower.includes('password')) { return 'Password must contain at least one letter and one number'; } if (fieldNameLower.includes('phone')) { return 'Please enter a valid phone number'; } if (fieldNameLower.includes('url') || fieldNameLower.includes('website')) { return 'Please enter a valid URL'; } if (fieldNameLower.includes('zip')) { return 'Please enter a valid ZIP code'; } return 'Please enter a valid value'; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AiValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AiValidationService, providedIn: 'root' }); } export { AiValidationService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AiValidationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktdmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHluYW1pYy1mb3Jtcy9zcmMvbGliL3NlcnZpY2VzL2FpLXZhbGlkYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUdhLG1CQUFtQjtJQUN0QixlQUFlLEdBQUcsSUFBSSxHQUFHLENBQWlCO1FBQ2hELENBQUMsT0FBTyxFQUFFLGtEQUFrRCxDQUFDO1FBQzdELENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDO1FBQzlCLENBQUMsS0FBSyxFQUFFLDZEQUE2RCxDQUFDO1FBQ3RFLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDO0tBQ2hDLENBQUMsQ0FBQztJQUVILGtCQUFrQixDQUFDLEtBQXNCO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFbkQsbUJBQW1CO1FBQ25CLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN6QixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUM1QixLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztTQUN0QjtRQUVELHNCQUFzQjtRQUN0QixJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdkMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDNUIsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDMUIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENB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LENBQUM7U0FDNUM7UUFDRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4RSxPQUFPLDBCQUEwQixDQUFDO1NBQ25DO1FBQ0QsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sK0JBQStCLENBQUM7U0FDeEM7UUFFRCxPQUFPLDRCQUE0QixDQUFDO0lBQ3RDLENBQUM7dUdBbkdVLG1CQUFtQjsyR0FBbkIsbUJBQW1CLGNBRmxCLE1BQU07O1NBRVAsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mb3JtLWZpZWxkLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFpVmFsaWRhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHZhbGlkYXRpb25SdWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWdFeHA+KFtcbiAgICBbJ2VtYWlsJywgL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvXSxcbiAgICBbJ3Bob25lJywgL15cXCs/W1xcZFxccy1dezEwLH0kL10sXG4gICAgWyd1cmwnLCAvXihodHRwcz86XFwvXFwvKT8oW1xcZGEtei4tXSspXFwuKFthLXouXXsyLDZ9KShbXFwvXFx3IC4tXSopKlxcLz8kL10sXG4gICAgWyd6aXBjb2RlJywgL15cXGR7NX0oLVxcZHs0fSk/JC9dLFxuICBdKTtcblxuICBzdWdnZXN0VmFsaWRhdGlvbnMoZmllbGQ6IEZvcm1GaWVsZENvbmZpZyk6IEZvcm1GaWVsZENvbmZpZyB7XG4gICAgY29uc3QgZmllbGROYW1lTG93ZXIgPSBmaWVsZC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLmZpZWxkLnZhbGlkYXRpb25zIH0gfHwge307XG5cbiAgICAvLyBFbWFpbCB2YWxpZGF0aW9uXG4gICAgaWYgKGZpZWxkTmFtZUxvd2VyLmluY2x1ZGVzKCdlbWFpbCcpKSB7XG4gICAgICB2YWxpZGF0aW9ucy5lbWFpbCA9IHRydWU7XG4gICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICBmaWVsZC50eXBlID0gJ2VtYWlsJztcbiAgICB9XG5cbiAgICAvLyBQYXNzd29yZCB2YWxpZGF0aW9uXG4gICAgaWYgKGZpZWxkTmFtZUxvd2VyLmluY2x1ZGVzKCdwYXNzd29yZCcpKSB7XG4gICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICB2YWxpZGF0aW9ucy5taW5MZW5ndGggPSA2O1xuICAgICAgZmllbGQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICB2YWxpZGF0aW9ucy5wYXR0ZXJuID0gJ14oPz0uKltBLVphLXpdKSg/PS4qXFxcXGQpW0EtWmEtelxcXFxkXXs2LH0kJztcbiAgICB9XG5cbiAgICAvLyBQaG9uZSB2YWxpZGF0aW9uXG4gICAgaWYgKGZpZWxkTmFtZUxvd2VyLmluY2x1ZGVzKCdwaG9uZScpKSB7XG4gICAgICB2YWxpZGF0aW9ucy5wYXR0ZXJuID0gdGhpcy52YWxpZGF0aW9uUnVsZXMuZ2V0KCdwaG9uZScpPy50b1N0cmluZygpLnNsaWNlKDEsIC0xKTtcbiAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBOYW1lIHZhbGlkYXRpb25cbiAgICBpZiAoZmllbGROYW1lTG93ZXIuaW5jbHVkZXMoJ25hbWUnKSkge1xuICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgdmFsaWRhdGlvbnMubWluTGVuZ3RoID0gMjtcbiAgICB9XG5cbiAgICAvLyBVUkwgdmFsaWRhdGlvblxuICAgIGlmIChmaWVsZE5hbWVMb3dlci5pbmNsdWRlcygndXJsJykgfHwgZmllbGROYW1lTG93ZXIuaW5jbHVkZXMoJ3dlYnNpdGUnKSkge1xuICAgICAgdmFsaWRhdGlvbnMucGF0dGVybiA9IHRoaXMudmFsaWRhdGlvblJ1bGVzLmdldCgndXJsJyk/LnRvU3RyaW5nKCkuc2xpY2UoMSwgLTEpO1xuICAgIH1cblxuICAgIC8vIFppcCBjb2RlIHZhbGlkYXRpb25cbiAgICBpZiAoZmllbGROYW1lTG93ZXIuaW5jbHVkZXMoJ3ppcCcpKSB7XG4gICAgICB2YWxpZGF0aW9ucy5wYXR0ZXJuID0gdGhpcy52YWxpZGF0aW9uUnVsZXMuZ2V0KCd6aXBjb2RlJyk/LnRvU3RyaW5nKCkuc2xpY2UoMSwgLTEpO1xuICAgIH1cblxuICAgIGZpZWxkLnZhbGlkYXRpb25zID0gdmFsaWRhdGlvbnM7XG4gICAgZmllbGQuZXJyb3JNZXNzYWdlcyA9IHRoaXMuZ2VuZXJhdGVFcnJvck1lc3NhZ2VzKGZpZWxkKTtcblxuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVFcnJvck1lc3NhZ2VzKGZpZWxkOiBGb3JtRmllbGRDb25maWcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBtZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGNvbnN0IHZhbGlkYXRpb25zID0gZmllbGQudmFsaWRhdGlvbnMgfHwge307XG5cbiAgICBpZiAodmFsaWRhdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIG1lc3NhZ2VzLnJlcXVpcmVkID0gYCR7ZmllbGQubGFiZWx9IGlzIHJlcXVpcmVkYDtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGlvbnMubWluTGVuZ3RoKSB7XG4gICAgICBtZXNzYWdlcy5taW5sZW5ndGggPSBgJHtmaWVsZC5sYWJlbH0gbXVzdCBiZSBhdCBsZWFzdCAke3ZhbGlkYXRpb25zLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2A7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25zLm1heExlbmd0aCkge1xuICAgICAgbWVzc2FnZXMubWF4bGVuZ3RoID0gYCR7ZmllbGQubGFiZWx9IGNhbm5vdCBleGNlZWQgJHt2YWxpZGF0aW9ucy5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0aW9ucy5lbWFpbCkge1xuICAgICAgbWVzc2FnZXMuZW1haWwgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc2A7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRpb25zLnBhdHRlcm4pIHtcbiAgICAgIG1lc3NhZ2VzLnBhdHRlcm4gPSB0aGlzLmdldFBhdHRlcm5FcnJvck1lc3NhZ2UoZmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXR0ZXJuRXJyb3JNZXNzYWdlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWVsZE5hbWVMb3dlciA9IGZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIGlmIChmaWVsZE5hbWVMb3dlci5pbmNsdWRlcygncGFzc3dvcmQnKSkge1xuICAgICAgcmV0dXJuICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGxldHRlciBhbmQgb25lIG51bWJlcic7XG4gICAgfVxuICAgIGlmIChmaWVsZE5hbWVMb3dlci5pbmNsdWRlcygncGhvbmUnKSkge1xuICAgICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwaG9uZSBudW1iZXInO1xuICAgIH1cbiAgICBpZiAoZmllbGROYW1lTG93ZXIuaW5jbHVkZXMoJ3VybCcpIHx8IGZpZWxkTmFtZUxvd2VyLmluY2x1ZGVzKCd3ZWJzaXRlJykpIHtcbiAgICAgIHJldHVybiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJztcbiAgICB9XG4gICAgaWYgKGZpZWxkTmFtZUxvd2VyLmluY2x1ZGVzKCd6aXAnKSkge1xuICAgICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBaSVAgY29kZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCB2YWx1ZSc7XG4gIH1cbn1cbiJdfQ==