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