{"version":3,"file":"ValidationRules.js","sources":["../../Framework/ValidationRules/index.ts"],"sourcesContent":["// \n// Copyright by the Spark Development Network\n//\n// Licensed under the Rock Community License (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.rockrms.com/license\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// \n//\nimport type { RulesPropType, ValidationResult, ValidationRule, ValidationRuleFunction, ValidationRuleReference } from \"@Obsidian/Types/validationRules\";\nimport { asBooleanOrNull } from \"@Obsidian/Utility/booleanUtils\";\nimport DateKey from \"@Obsidian/Utility/dateKey\";\nimport { isEmail } from \"@Obsidian/Utility/email\";\nimport { toNumberOrNull } from \"@Obsidian/Utility/numberUtils\";\nimport { isNullOrWhiteSpace, containsHtmlTag } from \"@Obsidian/Utility/stringUtils\";\nimport { isUrl } from \"@Obsidian/Utility/url\";\nimport { containsRequiredRule, defineRule, normalizeRules, parseRule, rulesPropType, validateValue } from \"@Obsidian/Utility/validationRules\";\nimport { getSpecialCharacterPattern, getEmojiPattern, getSpecialFontPattern } from \"@Obsidian/Utility/regexPatterns\";\n\n// For backwards compatibility:\nexport {\n RulesPropType,\n ValidationResult,\n ValidationRule,\n ValidationRuleFunction,\n ValidationRuleReference,\n containsRequiredRule,\n defineRule,\n normalizeRules,\n parseRule,\n rulesPropType,\n validateValue,\n};\n\n/**\n * Convert the string to a number\n * @param val\n */\nfunction convertToNumber(value: unknown): number {\n if (typeof value === \"number\") {\n return value;\n }\n\n if (typeof value === \"string\") {\n return toNumberOrNull(value) || 0;\n }\n\n return 0;\n}\n\n/**\n * Is the value numeric?\n * '0.9' => true\n * 0.9 => true\n * '9a' => false\n * @param value\n */\nfunction isNumeric(value: unknown): boolean {\n if (typeof value === \"number\") {\n return true;\n }\n\n if (typeof value === \"string\") {\n return toNumberOrNull(value) !== null;\n }\n\n return false;\n}\n\ndefineRule(\"required\", (value: unknown, params?: unknown[]): ValidationResult => {\n // This needs to be changed. JSON is not safe in rules because of the\n // comma and pipe characters.\n const options = params && params.length >= 1 && typeof params[0] === \"string\" ? JSON.parse(params[0]) : {};\n\n if (typeof value === \"string\") {\n const allowEmptyString = !!(options.allowEmptyString);\n\n if (!allowEmptyString && isNullOrWhiteSpace(value)) {\n return \"is required\";\n }\n\n return true;\n }\n\n if (typeof value === \"number\" && value === 0) {\n return \"is required\";\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return \"is required\";\n }\n\n // Special case for booleans, required rule is ignored. Otherwise things\n // like checkbox and toggle would always require a True value.\n if (typeof value === \"boolean\") {\n return true;\n }\n\n if (!value) {\n return \"is required\";\n }\n\n return true;\n});\n\ndefineRule(\"nospecialcharacters\", (value: unknown): ValidationResult => {\n // Gets or sets a value indicating whether the an input will allow special characters. This property is meant to be used when dealing with Person names.\n if (typeof value === \"string\") {\n // Checks if a string contains special characters\n if (getSpecialCharacterPattern().test(value)) {\n return \"cannot contain special characters such as quotes, parentheses, etc.\";\n }\n }\n\n return true;\n});\n\ndefineRule(\"noemojisorspecialfonts\", (value: unknown): ValidationResult => {\n // Gets or sets a value indicating whether the an input will allow emojis and special fonts. This property is meant to be used when dealing with Person names.\n if (typeof value === \"string\") {\n // Checks if a string contains emojis or special fonts.\n if (getEmojiPattern().test(value) || getSpecialFontPattern().test(value)) {\n return \"cannot contain emojis or special fonts.\";\n }\n }\n\n return true;\n});\n\n// This is like \"required\" but slightly less strict (doesn't fail on 0 or empty array)\ndefineRule(\"notblank\", (value: unknown) => {\n if (value === undefined || value === null || value === \"\") {\n return \"cannot be blank\";\n }\n\n return true;\n});\n\ndefineRule(\"email\", value => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n // Check if email\n if (!isEmail(value)) {\n return \"must be a valid email\";\n }\n\n return true;\n});\n\ndefineRule(\"notequal\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) !== convertToNumber(compare)) {\n return true;\n }\n }\n else if (typeof value === \"boolean\") {\n if (value !== asBooleanOrNull(compare)) {\n return true;\n }\n }\n else if (value !== compare) {\n return true;\n }\n\n return `must not equal ${compare}`;\n});\n\ndefineRule(\"equal\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) === convertToNumber(compare)) {\n return true;\n }\n }\n else if (typeof value === \"boolean\") {\n if (value === asBooleanOrNull(compare)) {\n return true;\n }\n }\n else if (value === compare) {\n return true;\n }\n\n return `must equal ${compare}`;\n});\n\ndefineRule(\"gt\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) > convertToNumber(compare)) {\n return true;\n }\n }\n\n return `must be greater than ${compare}`;\n});\n\ndefineRule(\"gte\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) >= convertToNumber(compare)) {\n return true;\n }\n }\n\n return `must not be less than ${compare}`;\n});\n\ndefineRule(\"lt\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) < convertToNumber(compare)) {\n return true;\n }\n }\n\n return `must be less than ${compare}`;\n});\n\ndefineRule(\"lte\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) <= convertToNumber(compare)) {\n return true;\n }\n }\n\n return `must not be more than ${compare}`;\n});\n\ndefineRule(\"datekey\", value => {\n const asString = value as string;\n\n if (!DateKey.getYear(asString)) {\n return \"must have a year\";\n }\n\n if (!DateKey.getMonth(asString)) {\n return \"must have a month\";\n }\n\n if (!DateKey.getDay(asString)) {\n return \"must have a day\";\n }\n\n return true;\n});\n\ndefineRule(\"number\", (value: unknown) => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (isNumeric(value)) {\n return true;\n }\n\n return \"must be a valid number.\";\n});\n\ndefineRule(\"integer\", (value: unknown) => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (/^-?[0-9]+$/.test(String(value))) {\n return true;\n }\n\n return \"must be an integer value.\";\n});\n\ndefineRule(\"decimal\", (value: unknown) => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (/^-?[0-9]+(\\.[0-9]+)?$/.test(String(value))) {\n return true;\n }\n\n return \"must be a decimal value.\";\n});\n\ndefineRule(\"ssn\", (value: unknown) => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n // Test for a format like 111-22-3333.\n if (/^[0-9]{3}-[0-9]{2}-[0-9]{4}$/.test(String(value))) {\n return true;\n }\n\n // Test for a format like 111223333.\n if (/^[0-9]{9}$/.test(String(value))) {\n return true;\n }\n\n return \"must be a valid social security number\";\n});\n\ndefineRule(\"url\", (value: unknown) => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n if (isUrl(String(value))) {\n return true;\n }\n\n return \"must be a valid URL\";\n});\n\ndefineRule(\"endswith\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n // No parameters, should pass\n if (!String(compare)) {\n return true;\n }\n\n if (String(value).endsWith(String(compare))) {\n return true;\n }\n\n return `must end with \"${compare}\"`;\n});\n\ndefineRule(\"startswith\", (value: unknown, params?: unknown[]) => {\n const compare = params && params.length >= 1 ? params[0] : undefined;\n\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n // No parameters, should pass\n if (!String(compare)) {\n return true;\n }\n\n if (String(value).startsWith(String(compare))) {\n return true;\n }\n\n return `must start with \"${compare}\"`;\n});\n\ndefineRule(\"equalsfield\", (value: unknown, params?: unknown[]) => {\n // Validator params are comma \",\" delimited.\n // The first param is the name of the field to display in the error message.\n // The remaining params need to be joined together into a single string for comparison.\n const error = params && params.length >= 1 ? params[0] : undefined;\n const compare = params ? params.slice(1).join(\",\") : \"\";\n\n if (isNumeric(value) && isNumeric(compare)) {\n if (convertToNumber(value) === convertToNumber(compare)) {\n return true;\n }\n }\n else if (typeof value === \"boolean\") {\n if (value === asBooleanOrNull(compare)) {\n return true;\n }\n }\n else if (value === compare) {\n return true;\n }\n\n // Do not expose the value in case we are matching sensitive confirmation fields.\n return typeof error === \"string\" ? error : \"must match value\";\n});\n\ndefineRule(\"nohtml\", (value: unknown) => {\n // Field is empty, should pass\n if (isNullOrWhiteSpace(value)) {\n return true;\n }\n\n return !containsHtmlTag(String(value)) || \"contains invalid characters. Please make sure that your entries do not contain any angle brackets like < or >.\";\n});"],"names":["convertToNumber","value","toNumberOrNull","isNumeric","defineRule","params","options","length","JSON","parse","allowEmptyString","isNullOrWhiteSpace","Array","isArray","getSpecialCharacterPattern","test","getEmojiPattern","getSpecialFontPattern","undefined","isEmail","compare","asBooleanOrNull","concat","asString","DateKey","getYear","getMonth","getDay","String","isUrl","endsWith","startsWith","error","slice","join","containsHtmlTag"],"mappings":"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"}