diff --git a/docs/.editorconfig b/.editorconfig similarity index 100% rename from docs/.editorconfig rename to .editorconfig diff --git a/docs/.eslintrc.json b/.eslintrc.json similarity index 100% rename from docs/.eslintrc.json rename to .eslintrc.json diff --git a/.gitignore b/.gitignore index 756ca1b..58c84b2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,42 @@ -preconfigs.txt -gitpush -gitpush.exe \ No newline at end of file +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ +/page/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts +.env + +# Temporary files +backupnews.tsx +translate.mjs diff --git a/docs/.prettierrc b/.prettierrc similarity index 100% rename from docs/.prettierrc rename to .prettierrc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 994e068..2ce491c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,22 @@ The multiform-validator is a powerful Multilanguage library for validating form fields in multiple languages. This guide describes the guidelines for contributing to the project efficiently and effectively. +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + ## How to Contribute 1. **Fork the Repository** diff --git a/docs/compareLangs.js b/compareLangs.js similarity index 100% rename from docs/compareLangs.js rename to compareLangs.js diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 58c84b2..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ -/page/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts -.env - -# Temporary files -backupnews.tsx -translate.mjs diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index c403366..0000000 --- a/docs/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/docs/images/exampleWithReactjs.png b/images/exampleWithReactjs.png similarity index 100% rename from docs/images/exampleWithReactjs.png rename to images/exampleWithReactjs.png diff --git a/docs/images/options.png b/images/options.png similarity index 100% rename from docs/images/options.png rename to images/options.png diff --git a/docs/images/showErro.png b/images/showErro.png similarity index 100% rename from docs/images/showErro.png rename to images/showErro.png diff --git a/docs/next.config.mjs b/next.config.mjs similarity index 100% rename from docs/next.config.mjs rename to next.config.mjs diff --git a/docs/package.json b/package.json similarity index 100% rename from docs/package.json rename to package.json diff --git a/packages/c/README.md b/packages/c/README.md deleted file mode 100644 index 2850881..0000000 --- a/packages/c/README.md +++ /dev/null @@ -1,8 +0,0 @@ -> [!NOTE] -> I accept help to make the version of the other programming languages. - -# Multiform-validator - -## C - -In coming ... \ No newline at end of file diff --git a/packages/c/src/cnpjValidator.c b/packages/c/src/cnpjValidator.c deleted file mode 100644 index f6ac5ed..0000000 --- a/packages/c/src/cnpjValidator.c +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include -#include - -int calculateFirstVerifier(int cnpjBase[12]) { - const int weights[12] = {5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}; - int sum = 0; - - for (int i = 0; i < 12; i++) { - sum += cnpjBase[i] * weights[i]; - } - - const int remainder = sum % 11; - - return remainder < 2 ? 0 : 11 - remainder; -} - -int calculateSecondVerifier(int cnpjBase[13], int firstVerifier) { - const int weights[13] = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}; - int sum = 0; - - for (int i = 0; i < 12; i++) { - sum += cnpjBase[i] * weights[i]; - } - - sum += firstVerifier * weights[12]; - - const int remainder = sum % 11; - - return remainder < 2 ? 0 : 11 - remainder; -} - -bool cnpjIsValid(const char *cnpj) { - if (cnpj == NULL) { - fprintf(stderr, "CNPJ cannot be null or empty\n"); - exit(EXIT_FAILURE); // Termina o programa indicando falha - } - - char *cnpjClean = strdup(cnpj); - char *ptr = cnpjClean; - while (*ptr != '\0') { - if (*ptr == '.' || *ptr == '-' || *ptr == '/') { - memmove(ptr, ptr + 1, strlen(ptr)); - } else { - ptr++; - } - } - - if (strlen(cnpjClean) == 0) { - return false; - } - - if (cnpjClean[14] != '\0') { - return false; - } - - // Convert the string to an array of integers - int cnpjArray[14]; - for (int i = 0; i < 14; i++) { - if (!isdigit(cnpjClean[i])) { - return false; - } - cnpjArray[i] = cnpjClean[i] - '0'; - } - - // Calculate the first verifier and second verifier - int cnpjBase[12]; - for (int i = 0; i < 12; i++) { - cnpjBase[i] = cnpjArray[i]; - } - - const int firstVerifier = calculateFirstVerifier(cnpjBase); - - int cnpjWithFirstVerifier[13]; - for (int i = 0; i < 12; i++) { - cnpjWithFirstVerifier[i] = cnpjArray[i]; - } - - const int secondVerifier = calculateSecondVerifier(cnpjWithFirstVerifier, firstVerifier); - - return cnpjArray[12] == firstVerifier && cnpjArray[13] == secondVerifier; -} - -int main(int argc, char *argv[]) { - if (argc != 2) { - fprintf(stderr, "Usage: %s \n", argv[0]); - return 1; - } - - if (cnpjIsValid(argv[1])) { - printf("CNPJ is valid\n"); - } else { - printf("CNPJ is invalid\n"); - } - - return 0; -} \ No newline at end of file diff --git a/packages/c/src/cpfValidator.c b/packages/c/src/cpfValidator.c deleted file mode 100644 index b64e86a..0000000 --- a/packages/c/src/cpfValidator.c +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include -#include -#include - -bool isAllSameDigit(const char *str) { - char firstChar = str[0]; - for (int i = 1; i < 11; i++) { - if (str[i] != firstChar) { - return false; - } - } - return true; -} - -bool cpfIsValid(const char *cpf) { - if (cpf == NULL) { - fprintf(stderr, "CPF cannot be null or empty\n"); - return false; - } - - char cpfClean[12] = {0}; - int index = 0; - - for (int i = 0; i < strlen(cpf); i++) { - if (isdigit(cpf[i])) { - cpfClean[index++] = cpf[i]; - } - } - - if (strlen(cpfClean) != 11) { - return false; - } - - if (isAllSameDigit(cpfClean)) { - return false; - } - - int cpfArray[11]; - - for (int i = 0; i < 11; i++) { - cpfArray[i] = cpfClean[i] - '0'; - } - - int sum1 = 0, sum2 = 0; - - for (int i = 0; i < 9; i++) { - sum1 += cpfArray[i] * (10 - i); - } - - for (int i = 0; i < 10; i++) { - sum2 += cpfArray[i] * (11 - i); - } - - int validator1 = sum1 % 11 < 2 ? 0 : 11 - (sum1 % 11); - int validator2 = sum2 % 11 < 2 ? 0 : 11 - (sum2 % 11); - - return cpfArray[9] == validator1 && cpfArray[10] == validator2; -} - -int main(int argc, char *argv[]) { - if (argc > 2) { - fprintf(stderr, "Usage: %s [cpf]\n", argv[0]); - return 1; - } - - const char *cpf = argv[1]; - - if (cpfIsValid(cpf)) { - printf("CPF is valid.\n"); - } else { - printf("CPF is invalid.\n"); - } - return 0; -} diff --git a/packages/csharp/README.md b/packages/csharp/README.md deleted file mode 100644 index 31ca090..0000000 --- a/packages/csharp/README.md +++ /dev/null @@ -1,8 +0,0 @@ -> [!NOTE] -> I accept help to make the version of the other programming languages. - -# Multiform-validator - -## C# - -In coming ... \ No newline at end of file diff --git a/packages/csharp/main.cs b/packages/csharp/main.cs deleted file mode 100644 index 748ed16..0000000 --- a/packages/csharp/main.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace TaskManagerApp -{ - class TaskManager - { - List tasks = new List(); - - public void AddTask(string task) - { - tasks.Add(task); - } - - public void ListTasks() - { - Console.WriteLine("Tasks:"); - foreach (var task in tasks) - { - Console.WriteLine(task); - } - } - } - - class Program - { - static void Main(string[] args) - { - TaskManager taskManager = new TaskManager(); - - taskManager.AddTask("Complete project proposal"); - taskManager.AddTask("Prepare presentation"); - taskManager.AddTask("Review code"); - - taskManager.ListTasks(); - } - } -} diff --git a/packages/java/.gitignore b/packages/java/.gitignore deleted file mode 100644 index ec376bb..0000000 --- a/packages/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea -target \ No newline at end of file diff --git a/packages/java/README.md b/packages/java/README.md deleted file mode 100644 index de7c6b1..0000000 --- a/packages/java/README.md +++ /dev/null @@ -1,8 +0,0 @@ -> [!NOTE] -> I accept help to make the version of the other programming languages. - -# Multiform-validator - -## JAVA - -In coming ... \ No newline at end of file diff --git a/packages/java/multiform-validator.iml b/packages/java/multiform-validator.iml deleted file mode 100644 index fadf27c..0000000 --- a/packages/java/multiform-validator.iml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/java/pom.xml b/packages/java/pom.xml deleted file mode 100644 index e890448..0000000 --- a/packages/java/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - io.github.gabriel_logan - multiform_validator - 0.0.2 - - Multiform Validator - - Multilingual library made for validation, various form fields, such as: email, cpf, cnpj, credit card and much - more. - - https://github.com/gabriel-logan/multiform-validator/tree/main/packages/java/ - - - Apache License 2.0 - https://github.com/gabriel-logan/multiform-validator/blob/main/LICENSE - - - - - Gabriel Logan - - - - - 1.8 - 1.8 - UTF-8 - - - - org.jetbrains - annotations - 24.1.0 - compile - - - - - org.junit.jupiter - junit-jupiter-api - 5.7.0 - test - - - - org.junit.jupiter - junit-jupiter-engine - 5.7.0 - test - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - - **/*Test.java - **/*Tests.java - - - - - - - - - github - GitHub Packages - https://maven.pkg.github.com/gabriel-logan/multiform-validator - - - - \ No newline at end of file diff --git a/packages/java/settings.xml b/packages/java/settings.xml deleted file mode 100644 index 1f5a957..0000000 --- a/packages/java/settings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - github - - - - Authorization - Bearer ${env.GITHUB_TOKEN} - - - - - - diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CnpjValidator.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CnpjValidator.java deleted file mode 100644 index 2cf9f50..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CnpjValidator.java +++ /dev/null @@ -1,65 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -import java.util.Arrays; - -public class CnpjValidator { - private CnpjValidator() { - throw new IllegalStateException("Utility class"); - } - - private static int calculateFirstVerifier(int[] cnpjBase) { - final int[] weight = {5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}; - int sum = 0; - - for (int i = 0; i < 12; i++) { - sum += cnpjBase[i] * weight[i]; - } - final int remainder = sum % 11; - - return remainder < 2 ? 0 : 11 - remainder; - } - - private static int calculateSecondVerifier(int[] cnpjBase, int firstVerifier) { - final int[] weight = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}; - int sum = 0; - - for (int i = 0; i < 12; i++) { - sum += cnpjBase[i] * weight[i]; - } - sum += firstVerifier * weight[12]; - - final int remainder = sum % 11; - - return remainder < 2 ? 0 : 11 - remainder; - } - - public static boolean cnpjIsValid(String cnpj) { - if (cnpj == null) { - throw new NullPointerException("CNPJ cannot be null or empty"); - } - - final String cnpjClean = cnpj.replaceAll("\\D", ""); - - if (cnpjClean.isEmpty()) { - return false; - } - - if (cnpjClean.length() != 14) { - return false; - } - - // Convert the string to an array of integers - final int[] cnpjArray = cnpjClean.chars().map(Character::getNumericValue).toArray(); - - // Calculate the first verifier and second verifier - final int[] cnpjBase = Arrays.copyOfRange(cnpjArray, 0, 12); - final int firstVerifier = calculateFirstVerifier(cnpjBase); - - final int[] cnpjBaseWithFirstVerifier = Arrays.copyOf(cnpjBase, cnpjBase.length + 1); - cnpjBaseWithFirstVerifier[cnpjBaseWithFirstVerifier.length - 1] = firstVerifier; - - final int secondVerifier = calculateSecondVerifier(cnpjBaseWithFirstVerifier, firstVerifier); - - return cnpjArray[12] == firstVerifier && cnpjArray[13] == secondVerifier; - } -} diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CpfValidator.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CpfValidator.java deleted file mode 100644 index 3f14fb1..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CpfValidator.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.IntStream; - -public class CpfValidator { - private CpfValidator() { - throw new IllegalStateException("Utility class"); - } - - public static boolean cpfIsValid(String cpf) { - if (cpf == null) { - throw new NullPointerException("CPF cannot be null or empty"); - } - - final String cpfClean = cpf.replaceAll("\\D", ""); - - if (cpfClean.length() != 11) { - return false; - } - - Pattern pattern = Pattern.compile("(\\d)\\1{10}"); - Matcher matcher = pattern.matcher(cpfClean); - - if (matcher.find()) { - return false; - } - - final int[] cpfArray = cpfClean.chars().map(Character::getNumericValue).toArray(); - - final int sum1 = IntStream.range(0, 9).map(i -> cpfArray[i] * (10 - i)).sum(); - final int sum2 = IntStream.range(0, 10).map(i -> cpfArray[i] * (11 - i)).sum(); - - final int validator1 = sum1 % 11 < 2 ? 0 : 11 - (sum1 % 11); - final int validator2 = sum2 % 11 < 2 ? 0 : 11 - (sum2 % 11); - - return cpfArray[9] == validator1 && cpfArray[10] == validator2; - } -} diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CreditCardValidator.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CreditCardValidator.java deleted file mode 100644 index f474392..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/CreditCardValidator.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -public class CreditCardValidator { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private CreditCardValidator() { - throw new IllegalStateException("Utility class"); - } - - public static boolean isCreditCardValid(String creditCard) { - if (creditCard == null || creditCard.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - final String creditCardString = creditCard.replaceAll("\\D", ""); - - if (creditCardString.length() < 13 || creditCardString.length() > 19) { - return false; - } - - int sum = 0; - boolean alternate = false; - - for (int i = creditCardString.length() - 1; i >= 0; i--) { - int n = Integer.parseInt(creditCardString.substring(i, i + 1)); - - if (alternate) { - n *= 2; - - if (n > 9) { - n = (n % 10) + 1; - } - } - - sum += n; - alternate = !alternate; - } - - return sum % 10 == 0; - } - - public static String identifyFlagCard(String cardNumber) { - if (cardNumber == null || cardNumber.isEmpty()) { - throw new IllegalArgumentException("The input should be a string."); - } - - String[][] flags = { - {"Visa", "^4[0-9]{12}(?:[0-9]{3})?$"}, - {"Mastercard", "^5[1-5][0-9]{14}$"}, - {"American Express", "^3[47][0-9]{13}$"}, - {"Discover", "^6(?:011|5[0-9]{2})[0-9]{12}$"}, - {"JCB", "^(?:2131|1800|35[0-9]{3})[0-9]{11}$"}, - {"Diners Club", "^3(?:0[0-5]|[68][0-9])[0-9]{11}$"}, - {"Maestro", "^(?:5[0678][0-9]{2}|6304|6390|67[0-9]{2})[0-9]{12,15}$"}, - {"UnionPay", "^(62|88)[0-9]{14,17}$"}, - {"Elo", "^63[789][0-9]{13}$"}, - {"Hipercard", "^(3841[0-9]{12}|60[0-9]{14})$"} - }; - - for (String[] flag : flags) { - if (cardNumber.matches(flag[1])) { - return flag[0]; - } - } - - return "Unknown"; - } - -} diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/EmailValidator.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/EmailValidator.java deleted file mode 100644 index 7c4d4ef..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/EmailValidator.java +++ /dev/null @@ -1,73 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import java.util.regex.Pattern; - -public class EmailValidator { - private EmailValidator() { - throw new IllegalStateException("Utility class"); - } - - public static boolean isEmail(String email) { - if (email == null) { - throw new NullPointerException("Email cannot be null"); - } - - final Pattern startsWithSpecialChar = Pattern.compile("^[^a-zA-Z0-9]"); - - if (startsWithSpecialChar.matcher(email).find()) { - return false; - } - - final Pattern regex = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"); - - if (!regex.matcher(email).find()) { - return false; - } - - final int beforeAt = email.indexOf("@"); - final int afterAt = email.indexOf("@") + 1; - final int afterLastDot = email.lastIndexOf("."); - - if (Character.isDigit(email.charAt(afterAt))) { - return false; - } - - if (Character.isDigit(email.charAt(afterLastDot))) { - return false; - } - - if (email.substring(0, beforeAt).contains("..")) { - return false; - } - - if (email.substring(0, beforeAt).endsWith(".")) { - return false; - } - - final String[] parts = email.split("\\."); - - if (parts.length > 2 && parts[parts.length - 2].equals(parts[parts.length - 3])) { - return false; - } - - // Check if there is more than one @ - if (email.split("@").length - 1 > 1) { - return false; - } - - if (email.substring(afterAt).contains("..")) { - return false; - } - - String[] domainParts = email.split("@")[1].split("\\."); - Set uniqueDomainParts = new HashSet<>(Arrays.asList(domainParts)); - - return domainParts.length == uniqueDomainParts.size(); - } -} - - - diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Main.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Main.java deleted file mode 100644 index fc0baa9..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Main.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -import static java.lang.System.*; - -public class Main { - public static void main(String[] args) { - out.println("This class cannot be instantiated."); - out.println("Please use the classes in the io.multiform_validator package."); - out.println("This is a test VERSION, DON'T USE IN PRODUCTION!"); - } -} \ No newline at end of file diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Utils.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Utils.java deleted file mode 100644 index 6d63441..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Utils.java +++ /dev/null @@ -1,82 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -import java.util.*; -import java.util.regex.*; - -public class Utils { - private Utils() { - throw new IllegalStateException("Utility class"); - } - - private static final List CleanAfterDefaultDomain = Arrays.asList( - ".br", ".io", ".pt", ".us", ".org", ".com" - ); - - public static class OptionsParams { - public Boolean multiple = false; - public Object cleanDomain = false; - public Boolean repeatEmail = false; - } - - private static final OptionsParams defaultOptionsParams = new OptionsParams(); - - public static Object getOnlyEmail(String text, OptionsParams options) { - if (options == null) { - options = defaultOptionsParams; - } - - Boolean multiple = options.multiple != null ? options.multiple : defaultOptionsParams.multiple; - Object cleanDomain = options.cleanDomain != null ? options.cleanDomain : defaultOptionsParams.cleanDomain; - Boolean repeatEmail = options.repeatEmail != null ? options.repeatEmail : defaultOptionsParams.repeatEmail; - - Pattern emailPattern = Pattern.compile("[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"); - Matcher matcher = emailPattern.matcher(text); - - List matches = new ArrayList<>(); - while (matcher.find()) { - matches.add(matcher.group()); - } - - if (matches.isEmpty()) { - return "No email found"; - } - - if (cleanDomain != null && !cleanDomain.equals(false)) { - List domainsToClean = cleanDomain instanceof List ? (List) cleanDomain : CleanAfterDefaultDomain; - - List cleanedEmails = new ArrayList<>(); - for (String email : matches) { - for (String domain : domainsToClean) { - int index = email.lastIndexOf(domain); - if (index != -1) { - email = email.substring(0, index + domain.length()); - break; - } - } - - for (String domain : domainsToClean) { - int index = email.indexOf(domain); - if (index != -1) { - email = email.substring(0, index + domain.length()); - break; - } - } - cleanedEmails.add(email); - } - - if (Boolean.FALSE.equals(repeatEmail)) { - Set uniqueEmails = new LinkedHashSet<>(cleanedEmails); - return Boolean.TRUE.equals(multiple) ? new ArrayList<>(uniqueEmails) : uniqueEmails.iterator().next(); - } - - return Boolean.TRUE.equals(multiple) ? cleanedEmails : cleanedEmails.get(0); - } - - if (Boolean.FALSE.equals(repeatEmail)) { - Set uniqueEmails = new LinkedHashSet<>(matches); - return Boolean.TRUE.equals(multiple) ? new ArrayList<>(uniqueEmails) : uniqueEmails.iterator().next(); - } - - return Boolean.TRUE.equals(multiple) ? matches : matches.get(0); - } -} diff --git a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Validator.java b/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Validator.java deleted file mode 100644 index 119160d..0000000 --- a/packages/java/src/main/java/io/github/gabriel_logan/multiform_validator/Validator.java +++ /dev/null @@ -1,151 +0,0 @@ -package io.github.gabriel_logan.multiform_validator; - -public class Validator { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Validator() { - throw new IllegalStateException("Utility class"); - } - - public static boolean isAscii(String value) { - if (value == null || value.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return value.chars().allMatch(c -> c < 128); - } - - public static boolean isBase64(String value) { - if (value == null || value.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return value.matches("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"); - } - - public static boolean isCEP(String cep) { - if (cep.length() < 8 || cep.length() > 10) { - return false; - } - - final String cepString = cep.replaceAll("\\D", ""); - - if (cepString.length() != 8) { - return false; - } - - try { - Integer.parseInt(cepString); - } catch (NumberFormatException e) { - return false; - } - - return true; - } - - public static boolean isDate(String date) { - if (date == null || date.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return date.matches("^\\d{4}-\\d{2}-\\d{2}$"); - } - - - public static boolean isDecimal(String value) { - if (value == null || value.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - try { - double parsedValue = Double.parseDouble(value); - - return parsedValue % 1 != 0; - } catch (NumberFormatException e) { - return false; - } - } - - public static boolean isMACAddress(String macAddress) { - if (macAddress == null || macAddress.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return macAddress.matches("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"); - } - - public static boolean isMD5(String value) { - if (value == null || value.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return value.matches("^[a-fA-F0-9]{32}$"); - } - - public static boolean isNumber(String value) { - if (value == null || value.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return value.matches("^-?\\d+$"); - } - - public static boolean isPort(int port) { - return port >= 0 && port <= 65535; - } - - public static boolean isPort(String port) { - if (port == null || port.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - try { - final int portNumber = Integer.parseInt(port); - return portNumber >= 0 && portNumber <= 65535; - } catch (NumberFormatException e) { - return false; - } - } - - public static boolean isPostalCode(String postalCode) { - if (postalCode == null || postalCode.isEmpty()) { - throw new IllegalArgumentException("Input value must be a string."); - } - - final String usZipCodeRegex = "^\\d{5}(-\\d{4})?$"; - final String canadaPostalCodeRegex = "^[A-Za-z]\\d[A-Za-z] \\d[A-Za-z]\\d$"; - final String ukPostalCodeRegex = "^[A-Za-z]{1,2}\\d[A-Za-z\\d]? \\d[A-Za-z]{2}$"; - final String francePostalCodeRegex = "^\\d{5}$"; - final String netherlandsPostalCodeRegex = "^\\d{4}$"; - final String japanPostalCodeRegex = "^\\d{3}-\\d{4}$"; - final String spainPostalCodeRegex = "^\\d{5}$"; - final String southAfricaPostalCodeRegex = "^\\d{4}$"; - final String germanyPostalCodeRegex = "^\\d{5}$"; - final String switzerlandPostalCodeRegex = "^\\d{4}$"; - final String brazilPostalCodeRegex = "^\\d{5}-\\d{3}$"; - final String italyPostalCodeRegex = "^\\d{5}$"; - final String usZipCodeOnlyRegex = "^\\d{5}$"; - - return postalCode.matches(usZipCodeRegex) || - postalCode.matches(canadaPostalCodeRegex) || - postalCode.matches(ukPostalCodeRegex) || - postalCode.matches(francePostalCodeRegex) || - postalCode.matches(netherlandsPostalCodeRegex) || - postalCode.matches(japanPostalCodeRegex) || - postalCode.matches(spainPostalCodeRegex) || - postalCode.matches(southAfricaPostalCodeRegex) || - postalCode.matches(germanyPostalCodeRegex) || - postalCode.matches(switzerlandPostalCodeRegex) || - postalCode.matches(brazilPostalCodeRegex) || - postalCode.matches(italyPostalCodeRegex) || - postalCode.matches(usZipCodeOnlyRegex); - } - - public static boolean isTime(String time) { - if (time == null || time.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return time.matches("^(?:2[0-3]|1\\d|0?[0-9]):[0-5]\\d(?::[0-5]\\d)?(?: [APap][Mm])?$"); - } -} diff --git a/packages/java/src/test/java/CnpjValidatorTest.java b/packages/java/src/test/java/CnpjValidatorTest.java deleted file mode 100644 index 293e231..0000000 --- a/packages/java/src/test/java/CnpjValidatorTest.java +++ /dev/null @@ -1,40 +0,0 @@ -import org.junit.jupiter.api.Test; - -import static io.github.gabriel_logan.multiform_validator.CnpjValidator.cnpjIsValid; -import static org.junit.jupiter.api.Assertions.*; - -class CnpjValidatorTest { - @Test - void testValidCnpj() { - assertTrue(cnpjIsValid("72.231.875/0001-05")); - assertTrue(cnpjIsValid("41997509000138")); - } - - @Test - void testInvalidCnpj() { - assertFalse(cnpjIsValid("12.345.678/0001-91")); - assertFalse(cnpjIsValid("12345678000191")); - } - - @Test - void testNullCnpj() { - assertThrows(NullPointerException.class, () -> cnpjIsValid(null)); - } - - @Test - void testEmptyCnpj() { - assertFalse(cnpjIsValid("")); - } - - @Test - void testInvalidFormatCnpj() { - assertFalse(cnpjIsValid("12.345.678/0001-9")); - assertFalse(cnpjIsValid("1234567800019")); - } - - @Test - void testInvalidLengthCnpj() { - assertFalse(cnpjIsValid("12.345.678/0001-900")); - assertFalse(cnpjIsValid("123456780001900")); - } -} \ No newline at end of file diff --git a/packages/java/src/test/java/CpfValidatorTest.java b/packages/java/src/test/java/CpfValidatorTest.java deleted file mode 100644 index 0d92c06..0000000 --- a/packages/java/src/test/java/CpfValidatorTest.java +++ /dev/null @@ -1,40 +0,0 @@ -import org.junit.jupiter.api.Test; - -import static io.github.gabriel_logan.multiform_validator.CpfValidator.cpfIsValid; -import static org.junit.jupiter.api.Assertions.*; - -class CpfValidatorTest { - @Test - void testValidCpf() { - assertTrue(cpfIsValid("12345678909")); - assertTrue(cpfIsValid("11144477735")); - } - - @Test - void testInvalidCpf() { - assertFalse(cpfIsValid("12345678901")); - assertFalse(cpfIsValid("11144477736")); - } - - @Test - void testNullCpf() { - assertThrows(NullPointerException.class, () -> cpfIsValid(null)); - } - - @Test - void testEmptyCpf() { - assertFalse(cpfIsValid("")); - } - - @Test - void testInvalidFormatCpf() { - assertFalse(cpfIsValid("123.456.789-19")); - assertFalse(cpfIsValid("1114447773A")); - } - - @Test - void testInvalidLengthCpf() { - assertFalse(cpfIsValid("1234567890")); - assertFalse(cpfIsValid("111444777350")); - } -} \ No newline at end of file diff --git a/packages/java/src/test/java/CreditCardValidatorTest.java b/packages/java/src/test/java/CreditCardValidatorTest.java deleted file mode 100644 index 70891af..0000000 --- a/packages/java/src/test/java/CreditCardValidatorTest.java +++ /dev/null @@ -1,34 +0,0 @@ -import org.junit.jupiter.api.Test; - -import static io.github.gabriel_logan.multiform_validator.CreditCardValidator.identifyFlagCard; -import static io.github.gabriel_logan.multiform_validator.CreditCardValidator.isCreditCardValid; -import static org.junit.jupiter.api.Assertions.*; - -class CreditCardValidatorTest { - @Test - void testIsCreditCardValid() { - assertTrue(isCreditCardValid("4111111111111111")); - assertTrue(isCreditCardValid("5500000000000004")); - assertFalse(isCreditCardValid("1234567890123456")); - assertFalse(isCreditCardValid("12345678901234567890")); - assertThrows(IllegalArgumentException.class, () -> isCreditCardValid(null)); - assertThrows(IllegalArgumentException.class, () -> isCreditCardValid("")); - } - - @Test - void testIdentifyFlagCard() { - assertEquals("Visa", identifyFlagCard("4111111111111111")); - assertEquals("Mastercard", identifyFlagCard("5555555555554444")); - assertEquals("American Express", identifyFlagCard("378282246310005")); - assertEquals("Discover", identifyFlagCard("6011111111111117")); - assertEquals("JCB", identifyFlagCard("3530111333300000")); - assertEquals("Diners Club", identifyFlagCard("30569309025904")); - assertEquals("Maestro", identifyFlagCard("6304000000000000")); - assertEquals("UnionPay", identifyFlagCard("6200000000000005")); - assertEquals("Elo", identifyFlagCard("6370950000000005")); - assertEquals("Hipercard", identifyFlagCard("3841000000000000")); - assertEquals("Unknown", identifyFlagCard("1234567890123456")); - assertThrows(IllegalArgumentException.class, () -> identifyFlagCard(null)); - assertThrows(IllegalArgumentException.class, () -> identifyFlagCard("")); - } -} \ No newline at end of file diff --git a/packages/java/src/test/java/EmailValidatorTest.java b/packages/java/src/test/java/EmailValidatorTest.java deleted file mode 100644 index 55e815f..0000000 --- a/packages/java/src/test/java/EmailValidatorTest.java +++ /dev/null @@ -1,80 +0,0 @@ -import org.junit.jupiter.api.Test; - -import static io.github.gabriel_logan.multiform_validator.EmailValidator.isEmail; -import static org.junit.jupiter.api.Assertions.*; - -class EmailValidatorTest { - @Test - void testValidEmail() { - assertTrue(isEmail("test@example.com")); - assertTrue(isEmail("john.doe@example.com")); - } - - @Test - void testInvalidEmail() { - assertFalse(isEmail("test@example")); - assertFalse(isEmail("john.doe@example")); - assertFalse(isEmail("test@example.")); - assertFalse(isEmail("john.doe@example.")); - assertFalse(isEmail("@example.com")); - assertFalse(isEmail("@example.")); - assertFalse(isEmail("test@.com")); - assertFalse(isEmail("john.doe@.com")); - assertFalse(isEmail("test@.")); - assertFalse(isEmail("john.doe@.")); - assertFalse(isEmail("test@@example.com")); - assertFalse(isEmail("john.doe@@example.com")); - assertFalse(isEmail("test@example..com")); - assertFalse(isEmail("john.doe@example..com")); - assertFalse(isEmail("test@example.com.")); - assertFalse(isEmail("john.doe@example.com.")); - assertFalse(isEmail("test@example..")); - assertFalse(isEmail("john.doe@example..")); - assertFalse(isEmail("test@example.com..")); - assertFalse(isEmail("john.doe@example.com..")); - assertFalse(isEmail("test@example..com.")); - assertFalse(isEmail("john.doe@example..com.")); - assertFalse(isEmail("test@example.com..")); - assertFalse(isEmail("john.doe@example.com..")); - assertFalse(isEmail("test@example..com..")); - assertFalse(isEmail("john.doe@example..com..")); - assertFalse(isEmail("test@example.com...")); - assertFalse(isEmail("john.doe@example.com...")); - assertFalse(isEmail("test@example...com")); - assertFalse(isEmail("john.doe@example...com")); - assertFalse(isEmail("test@example.com...")); - assertFalse(isEmail("john.doe@example.com...")); - assertFalse(isEmail("test@example...com.")); - assertFalse(isEmail("john.doe@example...com.")); - assertFalse(isEmail("test@example.com...")); - assertFalse(isEmail("john.doe@example.com...")); - assertFalse(isEmail("test@example...com..")); - assertFalse(isEmail("john.doe@example...com..")); - assertFalse(isEmail("test@example.com....")); - assertFalse(isEmail("john.doe@example.com....")); - assertFalse(isEmail("test@example....com")); - assertFalse(isEmail("john.doe@example....com")); - assertFalse(isEmail("test@example.com....")); - assertFalse(isEmail("john.doe@example.com....")); - assertFalse(isEmail("test@example....com.")); - assertFalse(isEmail("john.doe@example....com.")); - assertFalse(isEmail("test@example.com....")); - assertFalse(isEmail("john.doe@example.com....")); - assertFalse(isEmail("test@example....com..")); - assertFalse(isEmail("john.doe@example....com..")); - assertFalse(isEmail("0654")); - assertFalse(isEmail("test")); - assertFalse(isEmail("john.doe")); - assertFalse(isEmail("test@")); - assertFalse(isEmail("john.doe@")); - assertFalse(isEmail("test@.")); - assertFalse(isEmail("john.doe@.")); - assertFalse(isEmail("test@.com")); - assertFalse(isEmail("john.doe@.com")); - } - - @Test - void testNullEmail() { - assertThrows(NullPointerException.class, () -> isEmail(null)); - } -} \ No newline at end of file diff --git a/packages/java/src/test/java/UtilsTest.java b/packages/java/src/test/java/UtilsTest.java deleted file mode 100644 index cb56e65..0000000 --- a/packages/java/src/test/java/UtilsTest.java +++ /dev/null @@ -1,50 +0,0 @@ -import io.github.gabriel_logan.multiform_validator.Utils; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; - -import static org.junit.jupiter.api.Assertions.*; - -class UtilsTest { - @Test - void testGetOnlyEmail() { - // Test with no email found - assertEquals("No email found", Utils.getOnlyEmail("This is a sample text", null)); - - // Test with single email - assertEquals("test@example.com", Utils.getOnlyEmail("This is a sample text with email test@example.com", null)); - - // Test with multiple emails - Utils.OptionsParams options1 = new Utils.OptionsParams(); - options1.multiple = true; - assertEquals( - new ArrayList<>(Arrays.asList("test1@example.com", "test2@example.com")), - Utils.getOnlyEmail("This is a sample text with emails test1@example.com and test2@example.com", options1) - ); - - // Test with cleaning domain - Utils.OptionsParams options = new Utils.OptionsParams(); - options.cleanDomain = true; - assertEquals("test@example.com.br", Utils.getOnlyEmail("test@example.com.br", options)); - - // Test with cleaning domain and multiple emails - options.multiple = true; - assertEquals( - new ArrayList<>(Arrays.asList("test1@example.com.br", "test2@example.com.br")), - Utils.getOnlyEmail("test1@example.com.br and test2@example.com.br", options) - ); - - // Test with repeatEmail set to false - options.repeatEmail = false; - assertEquals(Collections.singletonList("test@example.com"), Utils.getOnlyEmail("test@example.com and test@example.com", options)); - - // Test with repeatEmail set to false and multiple emails - options.multiple = true; - assertEquals( - new ArrayList<>(Collections.singletonList("test@example.com")), - Utils.getOnlyEmail("test@example.com and test@example.com", options) - ); - } -} \ No newline at end of file diff --git a/packages/java/src/test/java/ValidatorTest.java b/packages/java/src/test/java/ValidatorTest.java deleted file mode 100644 index 5fff199..0000000 --- a/packages/java/src/test/java/ValidatorTest.java +++ /dev/null @@ -1,99 +0,0 @@ -import io.github.gabriel_logan.multiform_validator.Validator; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class ValidatorTest { - @Test - void testIsAscii() { - assertTrue(Validator.isAscii("Hello World")); - assertFalse(Validator.isAscii("こんにちは")); - assertThrows(IllegalArgumentException.class, () -> Validator.isAscii(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isAscii("")); - } - - @Test - void testIsBase64() { - assertTrue(Validator.isBase64("SGVsbG8gV29ybGQ=")); - assertFalse(Validator.isBase64("Hello World")); - assertThrows(IllegalArgumentException.class, () -> Validator.isBase64(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isBase64("")); - } - - @Test - void testIsCEP() { - assertTrue(Validator.isCEP("12345678")); - assertFalse(Validator.isCEP("1234567890")); - assertFalse(Validator.isCEP("abcdefgh")); - } - - @Test - void testIsDate() { - assertTrue(Validator.isDate("2022-01-01")); - assertFalse(Validator.isDate("01-01-2022")); - assertThrows(IllegalArgumentException.class, () -> Validator.isDate(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isDate("")); - } - - @Test - void testIsDecimal() { - assertTrue(Validator.isDecimal("3.14")); - assertFalse(Validator.isDecimal("42")); - assertThrows(IllegalArgumentException.class, () -> Validator.isDecimal(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isDecimal("")); - } - - @Test - void testIsMACAddress() { - assertTrue(Validator.isMACAddress("00:1B:44:11:3A:B7")); - assertFalse(Validator.isMACAddress("Hello World")); - assertThrows(IllegalArgumentException.class, () -> Validator.isMACAddress(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isMACAddress("")); - } - - @Test - void testIsMD5() { - assertTrue(Validator.isMD5("d41d8cd98f00b204e9800998ecf8427e")); - assertFalse(Validator.isMD5("Hello World")); - assertThrows(IllegalArgumentException.class, () -> Validator.isMD5(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isMD5("")); - } - - @Test - void testIsNumber() { - assertTrue(Validator.isNumber("42")); - assertFalse(Validator.isNumber("Hello World")); - assertThrows(IllegalArgumentException.class, () -> Validator.isNumber(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isNumber("")); - } - - @Test - void testIsPortInt() { - assertTrue(Validator.isPort(80)); - assertFalse(Validator.isPort(-1)); - } - - @Test - void testIsPortString() { - assertTrue(Validator.isPort("80")); - assertFalse(Validator.isPort("-1")); - assertThrows(IllegalArgumentException.class, () -> Validator.isPort(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isPort("")); - } - - @Test - void testIsPostalCode() { - assertTrue(Validator.isPostalCode("12345")); - assertFalse(Validator.isPostalCode("Hello World")); - assertThrows(IllegalArgumentException.class, () -> Validator.isPostalCode(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isPostalCode("")); - } - - @Test - void testIsTime() { - assertTrue(Validator.isTime("12:34")); - assertFalse(Validator.isTime("Hello World")); - assertThrows(IllegalArgumentException.class, () -> Validator.isTime(null)); - assertThrows(IllegalArgumentException.class, () -> Validator.isTime("")); - } -} \ No newline at end of file diff --git a/packages/kotlin/README.md b/packages/kotlin/README.md deleted file mode 100644 index ec44561..0000000 --- a/packages/kotlin/README.md +++ /dev/null @@ -1,8 +0,0 @@ -> [!NOTE] -> I accept help to make the version of the other programming languages. - -# Multiform-validator - -## KOTLIN - -In coming ... \ No newline at end of file diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Ascii.java b/packages/kotlin/src/main/java/io/multiform_validator/Ascii.java deleted file mode 100644 index 1a32b83..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Ascii.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -public class Ascii { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Ascii() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Check if a string is ASCII. - * - * @param value The string to check. - * @return True if the string is ASCII, false otherwise. - * @throws IllegalArgumentException If the input value is empty. - */ - public static boolean isAscii(@NotNull String value) { - if (value.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return value.chars().allMatch(c -> c < 128); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Base64.java b/packages/kotlin/src/main/java/io/multiform_validator/Base64.java deleted file mode 100644 index 6e9bee4..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Base64.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -public class Base64 { - - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Base64() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Check if a string is Base64. - * - * @param value The string to check. - * @return True if the string is Base64, false otherwise. - * @throws IllegalArgumentException If the input value is empty. - */ - public static boolean isBase64(@NotNull String value) { - if (value.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return value.matches("^[a-zA-Z0-9+/]*={0,2}$"); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/CEP.java b/packages/kotlin/src/main/java/io/multiform_validator/CEP.java deleted file mode 100644 index 139e45f..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/CEP.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -public class CEP { - private CEP() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Verifica se um CEP é válido. - * - * @param cep CEP a ser verificado. - * @return true se o CEP é válido, false caso contrário. - */ - public static boolean isCEP(@NotNull String cep) { - if (cep.length() < 8 || cep.length() > 10) { - return false; - } - - final String cepString = cep.replaceAll("\\D", ""); - - if (cepString.length() != 8) { - return false; - } - - try { - Integer.parseInt(cepString); - } catch (NumberFormatException e) { - return false; - } - - return true; - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Cnpj.kt b/packages/kotlin/src/main/java/io/multiform_validator/Cnpj.kt deleted file mode 100644 index db5cc94..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Cnpj.kt +++ /dev/null @@ -1,67 +0,0 @@ -package io.multiform_validator - -import java.util.* - -class Cnpj private constructor() { - init { - throw IllegalStateException("Utility class") - } - - companion object { - private const val INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty." - - /** - * Validate CNPJ - * - * @param cnpj CNPJ to be validated - * @return true if CNPJ is valid, false otherwise - */ - fun isValid(cnpj: String): Boolean { - require(!cnpj.isBlank()) { INPUT_VALUE_CANNOT_BE_EMPTY } - - if (cnpj.length != 14 && cnpj.length != 18) { - return false - } - - try { - val cnpjClean = cnpj.replace("\\D".toRegex(), "") - - val cnpjArray = cnpjClean.chars().map { codePoint: Int -> Character.getNumericValue(codePoint) }.toArray() - - val firstVerifier = calculateFirstVerifier(Arrays.copyOfRange(cnpjArray, 0, 12)) - val secondVerifier = calculateSecondVerifier(Arrays.copyOfRange(cnpjArray, 0, 13), firstVerifier) - - return cnpjArray[12] == firstVerifier && cnpjArray[13] == secondVerifier - } catch (e: Exception) { - return false - } - } - - private fun calculateFirstVerifier(cnpjBase: IntArray): Int { - var sum = 0 - val weights = intArrayOf(5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) - - for (i in 0..11) { - sum += cnpjBase[i] * weights[i] - } - - val remainder = sum % 11 - - return if (remainder < 2) 0 else 11 - remainder - } - - private fun calculateSecondVerifier(cnpjBase: IntArray, firstVerifier: Int): Int { - var sum = 0 - val weights = intArrayOf(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) - - for (i in 0..12) { - sum += cnpjBase[i] * weights[i] - } - - sum += firstVerifier * weights[12] - val remainder = sum % 11 - - return if (remainder < 2) 0 else 11 - remainder - } - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Cpf.kt b/packages/kotlin/src/main/java/io/multiform_validator/Cpf.kt deleted file mode 100644 index 25dd1a6..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Cpf.kt +++ /dev/null @@ -1,74 +0,0 @@ -package io.multiform_validator - -class Cpf private constructor() { - init { - throw IllegalStateException("Utility class") - } - - companion object { - private const val INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty." - - /** - * Validate a CPF number. - * - * @param cpf The CPF number to be validated. - * @return True if the CPF number is valid, false otherwise. - */ - fun isValid(cpf: String): Boolean { - require(!cpf.isBlank()) { INPUT_VALUE_CANNOT_BE_EMPTY } - - try { - var baseNumber = 10 - var baseNumber2 = 11 - - var somaTotal = 0 - var somaTotal2 = 0 - - if (cpf.length != 11 && cpf.length != 14) { - return false - } - - val cpfClean = cpf.replace("\\D".toRegex(), "") - - if (cpfClean.chars().allMatch { c: Int -> c == cpfClean[0].code }) { - return false - } - - var firstVerifier = 0 - var secondVerifier = 0 - - val ninthCharAsInt = cpfClean[9].toString().toInt() - val tenthCharAsInt = cpfClean[10].toString().toInt() - - for (repeater in 0..10) { - val currentCharAsInt = cpfClean[repeater].toString().toInt() - - val multiplicative = currentCharAsInt * baseNumber - - baseNumber-- - somaTotal += multiplicative - - val multiplicative2 = currentCharAsInt * baseNumber2 - - baseNumber2-- - somaTotal2 += multiplicative2 - - val verificationValue = somaTotal - ninthCharAsInt - val verificationValue2 = somaTotal2 - tenthCharAsInt - firstVerifier = 11 - (verificationValue % 11) - secondVerifier = 11 - (verificationValue2 % 11) - } - if (firstVerifier > 9) { - firstVerifier = 0 - } - if (secondVerifier > 9) { - secondVerifier = 0 - } - - return firstVerifier == ninthCharAsInt && secondVerifier == tenthCharAsInt - } catch (e: Exception) { - return false - } - } - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/CreditCard.java b/packages/kotlin/src/main/java/io/multiform_validator/CreditCard.java deleted file mode 100644 index 5ac7e49..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/CreditCard.java +++ /dev/null @@ -1,86 +0,0 @@ -package io.multiform_validator; - -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Pattern; -import org.jetbrains.annotations.NotNull; - -public class CreditCard { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private CreditCard() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Validate a credit card number. - * - * @param cardNumber The credit card number to be validated. - * @return True if the credit card number is valid, false otherwise. - */ - public static boolean isCreditCardValid(@NotNull String cardNumber) { - if (cardNumber.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - final String cleanedCreditCardInput = cardNumber.replaceAll("\\D", ""); - - if (cleanedCreditCardInput.isBlank() || !Number.isNumber(cleanedCreditCardInput)) { - return false; - } - - final int[] creditCardDigits = - cleanedCreditCardInput.chars().map(Character::getNumericValue).toArray(); - final int creditCardLength = creditCardDigits.length; - - int sum = 0; - boolean isEven = false; - - for (int i = creditCardLength - 1; i >= 0; i--) { - int digit = creditCardDigits[i]; - - if (isEven) { - digit *= 2; - - if (digit > 9) { - digit -= 9; - } - } - - sum += digit; - isEven = !isEven; - } - - return sum % 10 == 0; - } - - /** - * Identify the flag of a credit card. - * - * @param cardNumber The credit card number to be identified. - * @return The flag of the credit card. - */ - public static String identifyFlagCard(@NotNull String cardNumber) { - if (cardNumber.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - Map flags = new HashMap<>(); - flags.put("Visa", Pattern.compile("^4")); - flags.put("Mastercard", Pattern.compile("^5[1-5]")); - flags.put("American Express", Pattern.compile("^3[47]")); - flags.put("Discover", Pattern.compile("^6(?:011|5)")); - flags.put("JCB", Pattern.compile("^(?:2131|1800|35\\d{3})")); - flags.put("Diners Club", Pattern.compile("^3(?:0[0-5]|[68])")); - flags.put("Maestro", Pattern.compile("^(?:5[0678]\\d\\d|6304|6390|67\\d\\d)")); - flags.put("UnionPay", Pattern.compile("^(62|88)")); - flags.put("Elo", Pattern.compile("^63[789]")); - flags.put("Hipercard", Pattern.compile("^(3841|60)")); - - return flags.entrySet().stream() - .filter(flag -> flag.getValue().matcher(cardNumber).find()) - .findFirst() - .map(Map.Entry::getKey) - .orElse("Unknown"); - } -} \ No newline at end of file diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Date.java b/packages/kotlin/src/main/java/io/multiform_validator/Date.java deleted file mode 100644 index 2d196f9..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Date.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -import java.time.format.DateTimeParseException; -import java.util.regex.Pattern; - -public class Date { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty"; - - private Date() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Check if the given string is a valid date - * - * @param date The date string to be validated - * @return true if the given string is a valid date, false otherwise - */ - public static boolean isDate(@NotNull String date) { - if (date.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - try { - final Pattern dateStringRegex = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}$"); - return dateStringRegex.matcher(date).matches(); - } catch (DateTimeParseException e) { - return false; - } - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Email.java b/packages/kotlin/src/main/java/io/multiform_validator/Email.java deleted file mode 100644 index fc34358..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Email.java +++ /dev/null @@ -1,69 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -public class Email { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Email() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Check if the given string is a valid email - * - * @param email The email string to be validated - * @return true if the given string is a valid email, false otherwise - */ - public static boolean isEmail(@NotNull String email) { - if (email.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - final Pattern emailRegex = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"); - return emailRegex.matcher(email).matches(); - } - - /** - * Validate the given email string - * - * @param email The email string to be validated - * @param maxLength The maximum length of the email string - * @param country The country code of the email domain - * @param validDomains Whether to validate the email domain - * @return A ValidateFunctions object containing the validation result - */ - public static @NotNull ValidateFunctions validateEmail(@NotNull String email, Integer maxLength, String country, boolean validDomains) { - if (email.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - if (!isLengthValid(email, maxLength)) { - return new InvalidFunction("Email length is greater than " + maxLength + " characters."); - } - - if (!isCountryValid(country)) { - return new InvalidFunction("Country cannot be empty."); - } - - if (validDomains && !isDomainValid(email, country)) { - return new InvalidFunction("Email domain must be ." + country.toLowerCase()); - } - - return isEmail(email) ? new ValidFunction() : new InvalidFunction("Invalid email format."); - } - - private static boolean isLengthValid(String email, Integer maxLength) { - return maxLength == null || email.length() <= maxLength; - } - - private static boolean isCountryValid(String country) { - return !country.isBlank(); - } - - private static boolean isDomainValid(String email, String country) { - return email.endsWith("." + country.toLowerCase()); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/MD5.java b/packages/kotlin/src/main/java/io/multiform_validator/MD5.java deleted file mode 100644 index a6b4100..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/MD5.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -public class MD5 { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private MD5() { - throw new IllegalStateException("Utility class"); - } - - /** - * Check if the given string is a valid MD5 hash. - * - * @param md5 The string to check. - * @return True if the string is a valid MD5 hash, false otherwise. - */ - public static boolean isMD5(@NotNull String md5) { - if (md5.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - final Pattern md5Regex = Pattern.compile("^[a-fA-F0-9]{32}$"); - return md5Regex.matcher(md5).matches(); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/MacAddress.java b/packages/kotlin/src/main/java/io/multiform_validator/MacAddress.java deleted file mode 100644 index 0c898b4..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/MacAddress.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -public class MacAddress { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty"; - - private MacAddress() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Check if the given string is a valid MAC address. - * - * @param macAddress the MAC address to validate - * @return {@code true} if the given string is a valid MAC address, {@code false} otherwise - * @throws IllegalArgumentException if the given MAC address is empty - */ - public static boolean isMacAddress(@NotNull String macAddress) { - if (macAddress.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - final Pattern macAddressRegex = Pattern.compile("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"); - return macAddressRegex.matcher(macAddress).matches(); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Main.kt b/packages/kotlin/src/main/java/io/multiform_validator/Main.kt deleted file mode 100644 index 8578498..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Main.kt +++ /dev/null @@ -1,39 +0,0 @@ -package io.multiform_validator - -object Main { - /** - * Test class - */ - private val testResult = Test.test("Hello, World!") - private val testValidateEmail = Email.validateEmail("hoo@gmail.co", 15, "us", false) - - /** - * Main method - */ - @JvmStatic - fun main(args: Array) { - println("Hello, World!") - println("isAscii: " + Ascii.isAscii("Hello, World!a")) - println("isBase64: " + Base64.isBase64("Hello, World!d")) - println("isCEP: " + CEP.isCEP("12345-678")) - println("isNumber: " + Number.isNumber("12345")) - println("isNaN: " + Number.isNaN("12345a")) - println("isCreditCardValid: " + CreditCard.isCreditCardValid("1234567890123456")) - println("isDate: " + Date.isDate("2021-10-10")) - println("isEmail: " + Email.isEmail("jaj@gmmoo.com")) - println("isMacAddress: " + MacAddress.isMacAddress("00:00:00:00:00:00")) - println("isMD5: " + MD5.isMD5("12345678901234567890123456789012")) - println("isPort: " + Port.isPort("1234")) - println("isPostalCode: " + PostalCode.isPostalCode("12345-678")) - println("isTime: " + Time.isTime("12:34:56")) - println("passwordStrengthTester: " + PasswordStrength.tester("1234567890")) - println("cpfIsValid: " + Cpf.isValid("123.456.789-09")) - println("cnpjIsValid: " + Cnpj.isValid("12.345.678/0001-09")) - println("Test.main boolean: " + testResult.isValid) - println("Test.main message: " + testResult.errorMsg) - println("Email.main boolean: " + testValidateEmail.isValid) - println("Email.main message: " + testValidateEmail.errorMsg) - println("IdentifyFlagCard: " + CreditCard.identifyFlagCard("5237212984966627")) - println("IdentifyFlagCard: " + CreditCard.identifyFlagCard("4024 0071 3438 4733")) - } -} \ No newline at end of file diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Number.java b/packages/kotlin/src/main/java/io/multiform_validator/Number.java deleted file mode 100644 index 1feb7e9..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Number.java +++ /dev/null @@ -1,62 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -public class Number { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Number() { - throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); - } - - /** - * Check if the given value is a number. - * - * @param value The value to check. - * @return True if the value is a number, false otherwise. - */ - public static boolean isNumber(@NotNull String value) { - if (value.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - try { - Double.parseDouble(value); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - /** - * Check if the given value is not a number. - * - * @param value The value to check. - * @return True if the value is not a number, false otherwise. - */ - public static boolean isNaN(@NotNull String value) { - if (value.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - return !isNumber(value); - } - - /** - * Check if the given value is an integer. - * - * @param value The value to check. - * @return True if the value is an integer, false otherwise. - */ - public static boolean isInteger(@NotNull String value) { - if (value.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - try { - Integer.parseInt(value); - return true; - } catch (NumberFormatException e) { - return false; - } - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/PasswordStrength.java b/packages/kotlin/src/main/java/io/multiform_validator/PasswordStrength.java deleted file mode 100644 index dac01c2..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/PasswordStrength.java +++ /dev/null @@ -1,79 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -public class PasswordStrength { - private PasswordStrength() { - throw new IllegalStateException("Utility class"); - } - - /** - * Check the strength of the given password. - * - * @param password The password to check. - * @return The strength of the password. - */ - @Contract("null -> fail") - public static @NotNull String tester(String password) { - if (password == null) throw new IllegalArgumentException("The input should be a string."); - - if (isVeryWeak(password)) { - return "veryWeak"; - } else if (isWeak(password)) { - return "weak"; - } else if (isRegular(password)) { - return "regular"; - } else if (isVeryStrong(password)) { - return "veryStrong"; - } else if (isStrong(password)) { - return "strong"; - } - - return "unknown"; - } - - private static boolean isVeryWeak(@NotNull String password) { - int passwordLength = password.length(); - return passwordLength <= 5 && Pattern.matches("^\\d+$", password); - } - - private static boolean isWeak(@NotNull String password) { - int passwordLength = password.length(); - return (passwordLength <= 5 && Pattern.matches("^[a-zA-Z0-9]+$", password)) || - (passwordLength >= 6 && Pattern.matches("^[a-zA-Z0-9]+$", password) && passwordLength <= 7) || - (passwordLength < 10 && Pattern.matches("(.)\\1{3,}", password)) || - (passwordLength >= 5 && passwordLength <= 8 && Pattern.matches("^\\d+$", password)); - } - - private static boolean isRegular(@NotNull String password) { - int passwordLength = password.length(); - return Pattern.matches("(.)\\1{5,}", password) && passwordLength > 10 || - (passwordLength >= 9 && passwordLength <= 12) || - (password.length() >= 6 && - password.length() <= 8 && - Pattern.matches("\\d", password) && - Pattern.matches("[a-zA-Z]", password)); - } - - private static boolean isVeryStrong(@NotNull String password) { - int passwordLength = password.length(); - return passwordLength > 16 || - (password.length() >= 8 && - Pattern.matches("[A-Z]", password) && - Pattern.matches("[a-z]", password) && - Pattern.matches("\\d", password) && - Pattern.matches("[\\W_]", password)); - } - - private static boolean isStrong(@NotNull String password) { - int passwordLength = password.length(); - return (passwordLength >= 13 && passwordLength <= 16) || - (password.length() >= 8 && - Pattern.matches("[A-Z]", password) && - Pattern.matches("[a-z]", password) && - Pattern.matches("\\d", password)); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Port.java b/packages/kotlin/src/main/java/io/multiform_validator/Port.java deleted file mode 100644 index fd02f37..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Port.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -public class Port { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Port() { - throw new IllegalStateException("Utility class"); - } - - /** - * Check if the given port is valid. - * - * @param port The port to validate. - * @return True if the port is valid, false otherwise. - */ - public static boolean isPort(@NotNull String port) { - if (port.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - try { - final int portNumber = Integer.parseInt(port); - return portNumber >= 0 && portNumber <= 65535; - } catch (NumberFormatException e) { - return false; - } - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/PostalCode.java b/packages/kotlin/src/main/java/io/multiform_validator/PostalCode.java deleted file mode 100644 index c76083e..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/PostalCode.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -import java.util.regex.Pattern; - -public class PostalCode { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private PostalCode() { - throw new IllegalStateException("Utility class"); - } - - /** - * Check if the given postal code is valid. - * - * @param postalCode The postal code to validate. - * @return True if the postal code is valid, false otherwise. - */ - public static boolean isPostalCode(@NotNull String postalCode) { - if (postalCode.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - final Pattern postalCodeRegex = Pattern.compile("^\\d{5}-\\d{3}$"); - return postalCodeRegex.matcher(postalCode).matches(); - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Test.java b/packages/kotlin/src/main/java/io/multiform_validator/Test.java deleted file mode 100644 index 40dec1f..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Test.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -public class Test { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Test() { - throw new IllegalStateException("Utility class"); - } - - @Contract("null -> fail") - public static @NotNull ValidateFunctions test(String value) { - if (value == null || value.isEmpty()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - if (value.equals("valid")) { - return new ValidFunction(); - } else { - return new InvalidFunction("Invalid value."); - } - - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/Time.java b/packages/kotlin/src/main/java/io/multiform_validator/Time.java deleted file mode 100644 index 38c0818..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/Time.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.multiform_validator; - -import org.jetbrains.annotations.NotNull; - -import java.time.format.DateTimeParseException; -import java.util.regex.Pattern; - -public class Time { - private static final String INPUT_VALUE_CANNOT_BE_EMPTY = "Input value cannot be empty."; - - private Time() { - throw new IllegalStateException("Utility class"); - } - - /** - * Check if the given time is valid. - * - * @param time The time to validate. - * @return true if the time is valid, false otherwise. - */ - public static boolean isTime(@NotNull String time) { - if (time.isBlank()) { - throw new IllegalArgumentException(INPUT_VALUE_CANNOT_BE_EMPTY); - } - - try { - final Pattern timeRegex = Pattern.compile("^\\d{2}:\\d{2}:\\d{2}$"); - return timeRegex.matcher(time).matches(); - } catch (DateTimeParseException e) { - return false; - } - } -} diff --git a/packages/kotlin/src/main/java/io/multiform_validator/ValidateFunctions.java b/packages/kotlin/src/main/java/io/multiform_validator/ValidateFunctions.java deleted file mode 100644 index 130f68a..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/ValidateFunctions.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.multiform_validator; - -/** - * Abstract class for validation functions. - */ -public abstract class ValidateFunctions { - protected boolean isValid; - - public abstract String getErrorMsg(); -} - -/** - * Class for valid functions. - */ -class ValidFunction extends ValidateFunctions { - public ValidFunction() { - this.isValid = true; - } - - @Override - public String getErrorMsg() { - return null; - } -} - -/** - * Class for invalid functions. - */ -class InvalidFunction extends ValidateFunctions { - public final String errorMsg; - - public InvalidFunction(String errorMsg) { - this.isValid = false; - this.errorMsg = errorMsg; - } - - @Override - public String getErrorMsg() { - return errorMsg; - } -} \ No newline at end of file diff --git a/packages/kotlin/src/main/java/io/multiform_validator/ValidatePassportNumber.java b/packages/kotlin/src/main/java/io/multiform_validator/ValidatePassportNumber.java deleted file mode 100644 index f660d60..0000000 --- a/packages/kotlin/src/main/java/io/multiform_validator/ValidatePassportNumber.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.multiform_validator; - -/** - * ValidatePassportNumber - */ -public class ValidatePassportNumber { - public final boolean isValid; - public final String country; - - /** - * Constructor - */ - public ValidatePassportNumber(boolean isValid, String country) { - this.isValid = isValid; - this.country = country; - } - - // getters and setters -} \ No newline at end of file diff --git a/packages/php/README.md b/packages/php/README.md deleted file mode 100644 index 8b49908..0000000 --- a/packages/php/README.md +++ /dev/null @@ -1,8 +0,0 @@ -> [!NOTE] -> I accept help to make the version of the other programming languages. - -# Multiform-validator - -## PHP - -In coming ... \ No newline at end of file diff --git a/packages/php/composer.json b/packages/php/composer.json deleted file mode 100644 index 66caad2..0000000 --- a/packages/php/composer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "gabriel-logan/multiform-validator", - "description": "Parte PHP do multiform-validator", - "type": "library", - "autoload": { - "psr-4": { - "MultiformValidator\\": "phpVersion/src/" - } - } -} diff --git a/packages/python/.gitignore b/packages/python/.gitignore deleted file mode 100644 index ce636fa..0000000 --- a/packages/python/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -dist/ -comopublicar.txt -multiform_validator.egg-info -__pycache__ \ No newline at end of file diff --git a/packages/python/LICENSE b/packages/python/LICENSE deleted file mode 100644 index 265cac1..0000000 --- a/packages/python/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2023 The Python Packaging Authority - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/python/README.md b/packages/python/README.md deleted file mode 100644 index 3765b2c..0000000 --- a/packages/python/README.md +++ /dev/null @@ -1,173 +0,0 @@ -# Multiform-validator - -[![PyPI version](https://badge.fury.io/py/multiform-validator.svg)](https://badge.fury.io/py/multiform-validator) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -[![PyPI downloads](https://img.shields.io/pypi/dm/multiform-validator.svg?style=flat-square)](https://pypistats.org/packages/multiform-validator) - -This package provides Python functions to validate various forms fields. - -Documentation: https://multiform-validator.vercel.app/documentation/py - -Feel free to find bugs and report them to me. Your feedback is highly appreciated. Hugs from Gabriel Logan! - -If you want to help me, you can buy me a coffee (: - -

- - Buy Me A Coffee - -

- -### Installation - -```bash -pip install multiform-validator -``` - -# Data Validator - -This package contains various modules for validating different types of data. Below are the available validation modules: - -# Avaliable for while - -- **cnpjValidator**: CNPJ validation. -- **cpfValidator**: CPF validation. -- **getOnlyEmail**: Extracts only the email or emails address from a string. -- **identifyFlagCard**: Identifies the flag of a credit card. -- **isCreditCardValid**: Credit card validation. -- **isEmail**: Email address validation format. -- **passwordStrengthTester**: Password strength test. -- **validateBRPhoneNumber**: Brazilian phone number validation. -- **isValidImage**: Image validation. - -## Usage - -Here is an example of how to use the functions in this package: - -```python -from multiform_validator import ( - cnpjIsValid, - cpfIsValid, - getOnlyEmail, - identifyFlagCard, - isCreditCardValid, - isEmail, - passwordStrengthTester, - validateBRPhoneNumber, - isValidImage -) -``` - -### Usage Example - -```python - -print("Is email", isEmail("foo@bar.com")) # True -print("Get only email", getOnlyEmail("awdawd wadawd wda awd jhony@gmail.com awdawdawd")) # jhony@gmail.com -print("Password strength", passwordStrengthTester("aA1!asd@qd2asd")) # Strong -print("Is CPF valid", cpfIsValid("123.456.789-02")['isValid']) # False -print("Is CNPJ valid", cnpjIsValid("12.345.678/0001-09")) # { 'isValid': False, 'errorMsg': 'CNPJ is not valid' } -print("Is credit card valid", isCreditCardValid("5117 2161 1334 8362")) # True -print("Identify flag card", identifyFlagCard("5117 2161 1334 8362")) # Mastercard -print("Validate BR phone number", validateBRPhoneNumber("(11) 91234-5678")) # { 'isValid': True, 'errorMsg': None } - -``` - -### isValidImage Usage Example - -```python -import os -from pathlib import Path - -from multiform_validator import isValidImage - -# Resolve the file path -file_path = Path.cwd() / 'static' / 'uploads' -retrieved_file = file_path / filename - -# Read the first 4 bytes of the file -with open(retrieved_file, 'rb') as f: - file_buffer = f.read(4) - -print(isValidImage(file_buffer)) # True or False -``` - -## Functions signature - -All params with default values are optional. - -```python - -def isEmail(email: str) -> bool: - pass - -def getOnlyEmail(text: str, multiple=False, clean_domain=False, repeat_email=False) -> str: - pass - -def passwordStrengthTester(password: str) -> str: - pass - -defaultErrorMsgCPF = [ - 'CPF invalid', - 'CPF must have 11 numerical digits', - 'CPF is not valid', - 'Unknown error', -] -def cpfIsValid(cpf: str, errorMsg=defaultErrorMsgCPF) -> Dict[str, Union[bool, str, None]]: - pass - -default_error_msgCNPJ = [ - 'CNPJ invalid', - 'CNPJ must have 14 numerical digits', - 'CNPJ is not valid', - 'Unknown error' -] -def cnpjIsValid(cnpj: str, errorMsg=default_error_msgCNPJ) -> Dict[str, Union[bool, str, None]]: - pass - -def isCreditCardValid(cardNumber: str) -> bool: - pass - -def identifyFlagCard(cardNumber: str) -> str: - pass - -default_error_msg = ['Invalid value passed', 'Invalid phone number', 'Unknown error'] -def validateBRPhoneNumber(phoneNumber: str, errorMsg=default_error_msg) -> Dict[str, Union[bool, str, None]]: - pass - -def isValidImage(file_buffer: bytes) -> bool: - pass - -``` - -## Looking for contributions. - -## Available Validation Modules !!! STILL NOT AVALIABLE !!! - -- **isAscii**: Checks if the string contains only ASCII characters. -- **isBase64**: Checks if the string is a valid Base64 encoding. -- **isCEP**: CEP validation (Brazilian postal code). -- **isDate**: Date format validation. -- **isDecimal**: Checks if the number is a decimal. -- **isEmpty**: Checks if the string is empty. -- **isMACAddress**: MAC address validation. -- **isMD5**: Checks if the string is a valid MD5 hash. -- **validatePassportNumber**: Passport number validation. -- **isPort**: Port number validation. -- **isPostalCode**: Postal code validation. -- **isTime**: Time format validation. -- **validateEmail**: Email address full validation. -- **validatePassword**: Password validation. -- **validatePhoneNumber**: Phone number validation. -- **validateUsername**: Username validation. -- **validateUSPhoneNumber**: US phone number validation. -- **isNumber**: Checks if the value is a number. -- **validateName**: Name validation. -- **validateSurname**: Surname validation. -- **validateTextarea**: Textarea validation. - -### For better information, read the documentation - -Feel free to explore the various functions and experiment with different inputs to understand their behavior. If you encounter any issues or have suggestions, don't hesitate to reach out to me. Your feedback is valuable and helps improve the package. Happy coding! - -# By - Gabriel Logan diff --git a/packages/python/pyproject.toml b/packages/python/pyproject.toml deleted file mode 100644 index 3385ec3..0000000 --- a/packages/python/pyproject.toml +++ /dev/null @@ -1,25 +0,0 @@ -[build-system] -requires = [ - "setuptools>=61" -] -build-backend = "setuptools.build_meta" - -[project] -name = "multiform-validator" -version = "1.0.1" -authors = [ - { name="Gabriel Logan" }, -] -description = "Multilingual library made for validation, various form fields, such as: email, cpf, cnpj, credit card, and much more." -readme = "README.md" -keywords = ["validator", "multiform", "validação", "email-validator", "image", "multiform-validator", "python", "security", "safe", "pentest", "security-tools", "Validator", "validate", "cpf", "cnpj", "email validator", "password", "email", "isEmail"] -requires-python = ">=3.1" -classifiers = [ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", -] - -[project.urls] -"Homepage" = "https://multiform-validator.vercel.app/documentation" -"Bug Tracker" = "https://github.com/gabriel-logan/multiform-validator/tree/main/packages/python" diff --git a/packages/python/requirements.txt b/packages/python/requirements.txt deleted file mode 100644 index e69de29..0000000 diff --git a/packages/python/src/multiform_validator/__init__.py b/packages/python/src/multiform_validator/__init__.py deleted file mode 100644 index 339ea3a..0000000 --- a/packages/python/src/multiform_validator/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from .cpfValidator import cpfValidator as cpfIsValid -from .cnpjValidator import cnpjValidator as cnpjIsValid -from .getOnlyEmail import getOnlyEmail -from .isEmail import isEmail -from .identifyFlagCard import identifyFlagCard -from .isCreditCardValid import isCreditCardValid -from .passwordStrengthTester import passwordStrengthTester -from .validateBRPhoneNumber import validateBRPhoneNumber -from .isValidImage import isValidImage \ No newline at end of file diff --git a/packages/python/src/multiform_validator/cnpjValidator.py b/packages/python/src/multiform_validator/cnpjValidator.py deleted file mode 100644 index de779fa..0000000 --- a/packages/python/src/multiform_validator/cnpjValidator.py +++ /dev/null @@ -1,61 +0,0 @@ -def calculate_first_verifier(cnpj_base): - weight = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] - total_sum = 0 - for i in range(12): - total_sum += cnpj_base[i] * weight[i] - remainder = total_sum % 11 - return 0 if remainder < 2 else 11 - remainder - -def calculate_second_verifier(cnpj_base, first_verifier): - weight = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] - total_sum = 0 - for i in range(12): - total_sum += cnpj_base[i] * weight[i] - total_sum += first_verifier * weight[12] - remainder = total_sum % 11 - return 0 if remainder < 2 else 11 - remainder - -default_error_msg = ['CNPJ invalid', 'CNPJ must have 14 numerical digits', 'CNPJ is not valid', 'Unknown error'] - -def cnpjValidator(cnpj, errorMsg = default_error_msg): - if not isinstance(cnpj, str): - raise TypeError('The input should be a string.') - - if errorMsg: - if not isinstance(errorMsg, list): - raise ValueError('Must be a list') - for msg in errorMsg: - if msg is not None and not isinstance(msg, str): - raise TypeError('All values within the list must be strings or None/NoneType.') - - def get_error_message(index): - error_message = errorMsg[index] - return error_message if error_message is not None else default_error_msg[index] - - try: - if not cnpj: - return { - 'isValid': False, - 'errorMsg': get_error_message(0), # 'CNPJ invalid' - } - - cnpj_clean = ''.join(filter(str.isdigit, cnpj)) - cnpj_array = list(map(int, cnpj_clean)) - first_verifier = calculate_first_verifier(cnpj_array[:12]) - second_verifier = calculate_second_verifier(cnpj_array[:12] + [first_verifier], first_verifier) - - if cnpj_array[12] == first_verifier and cnpj_array[13] == second_verifier: - return { - 'isValid': True, - 'errorMsg': None, - } - - return { - 'isValid': False, - 'errorMsg': get_error_message(2), # 'CNPJ is not valid' - } - except Exception as error: - return { - 'isValid': False, - 'errorMsg': get_error_message(3), # 'Unknown error' - } diff --git a/packages/python/src/multiform_validator/cpfValidator.py b/packages/python/src/multiform_validator/cpfValidator.py deleted file mode 100644 index 35691c8..0000000 --- a/packages/python/src/multiform_validator/cpfValidator.py +++ /dev/null @@ -1,92 +0,0 @@ -defaultErrorMsg = [ - 'CPF invalid', - 'CPF must have 11 numerical digits', - 'CPF is not valid', - 'Unknown error', -] - -def cpfValidator(cpf, errorMsg = defaultErrorMsg): - """ - Validates a CPF (Brazilian individual taxpayer registry identification) number. - - :param cpf: The CPF number to be validated. - :param error_msg: An optional list of error messages. - :return: A dictionary with 'is_valid' (boolean) and 'error_msg' (string) properties. - """ - if (type(cpf) != str): raise TypeError('The input should be a string.') - - if (errorMsg): - if (not isinstance(errorMsg, list)): - raise TypeError('Must be a list') - for index in range(len(errorMsg)): - if errorMsg[index] is not None and not isinstance(errorMsg[index], str): - raise TypeError('All values within the list must be strings or None.') - - def getErrorMessage(index): - if (errorMsg and index >= 0 and index < len(errorMsg)): - errorMessage = errorMsg[index] - return errorMessage if errorMessage is not None else defaultErrorMsg[index] - return defaultErrorMsg[index] - - try: - - if(not cpf): - return { - "isValid": False, - "errorMsg": getErrorMessage(0) - } - - numeroBase = 10 - numeroBase2 = 11 - somaTotal = somaTotal2 = 0 - - if(len(cpf) != 11 and len(cpf) != 14): - return { - "isValid": False, - "errorMsg": getErrorMessage(1), - } - - cpfLimpo = ''.join(filter(str.isdigit, cpf)) - - if (len(cpfLimpo) == 11 and cpfLimpo == cpfLimpo[0] * 11): - return { - "isValid": False, - "errorMsg": getErrorMessage(2), - } - - primeiroVerificador = segundoVerificador = repetidor = 0 - - while (repetidor < 11): - multiplicador = int(cpfLimpo[repetidor]) * numeroBase - numeroBase -= 1 - somaTotal += multiplicador - - multiplicador2 = int(cpfLimpo[repetidor]) * numeroBase2 - numeroBase2 -= 1 - somaTotal2 += multiplicador2 - - valorDeVerificacao = somaTotal - int(cpfLimpo[9]) - valorDeVerificacao2 = somaTotal2 - int(cpfLimpo[10]) - - primeiroVerificador = 11 - (valorDeVerificacao % 11) - segundoVerificador = 11 - (valorDeVerificacao2 % 11) - - repetidor += 1 - - if(primeiroVerificador > 9): primeiroVerificador = 0 - if(segundoVerificador > 9): segundoVerificador = 0 - - if(primeiroVerificador == int(cpfLimpo[9]) and segundoVerificador == int(cpfLimpo[10])): - return { - "isValid": True, - "errorMsg": None, - } - return { - "isValid": False, - "errorMsg": getErrorMessage(2) - } - except: - return { - "isValid": False, - "errorMsg": getErrorMessage(3), - } \ No newline at end of file diff --git a/packages/python/src/multiform_validator/getOnlyEmail.py b/packages/python/src/multiform_validator/getOnlyEmail.py deleted file mode 100644 index be99511..0000000 --- a/packages/python/src/multiform_validator/getOnlyEmail.py +++ /dev/null @@ -1,70 +0,0 @@ -import re - -CleanAfterDefaultDomain = ['.br', '.io', '.pt', '.us', '.org', '.com'] - -def getOnlyEmail(text, multiple=False, clean_domain=False, repeat_email=False): - """ - Example: - getOnlyEmail("Entre em contato com a equipe:
joao@empresa.com, maria@empresa.com, contato@empresa.com", True) - # Output: ["joao@empresa.com", "maria@empresa.com", "contato@empresa.com"] - - Description: This function extracts emails from a given text. If multiple is set to True, - it returns an array with all emails found. Otherwise, it returns only the first email found as a string. - - Default domains_list is ['.br', '.io', '.pt', '.us', '.org', '.com']; you can set it to True to use this or pass your own list. - Note: Your list will replace the default. Important: List order matters. - - The third parameter handles the following: if the email is formatted as follows, foo@bar.comAAAA, - it will clean the email, returning only foo@bar.com. All characters that come after the ones in the list will be removed, - resulting in a clean email. - - If you need to skip some parameters, use None. - - The fourth parameter, if True, will allow the list to return repeated emails. - Otherwise, the default behavior is not to return repeated emails. - - Follow documentation: https://tinyurl.com/getOnlyEmail - - Returns an email string if multiple is False, or an array of email strings if multiple is True. - """ - email_pattern = r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' - matches = re.findall(email_pattern, text) - - if not matches: - return 'No email found' - - if clean_domain: - domains_to_clean = [] - - if isinstance(clean_domain, list): - domains_to_clean = clean_domain - elif clean_domain is True: - domains_to_clean = CleanAfterDefaultDomain - - cleaned_emails = [] - for email in matches: - for domain in domains_to_clean: - index = email.rfind(domain) - if index != -1: - email = email[:index + len(domain)] - break - - for domain in domains_to_clean: - index = email.find(domain) - if index != -1: - email = email[:index + len(domain)] - break - - cleaned_emails.append(email) - - if not repeat_email: - unique_emails = list(set(cleaned_emails)) - return unique_emails if multiple else unique_emails[0] - - return cleaned_emails if multiple else cleaned_emails[0] - - if not repeat_email: - unique_emails = list(set(matches)) - return unique_emails if multiple else unique_emails[0] - - return matches if multiple else matches[0] diff --git a/packages/python/src/multiform_validator/identifyFlagCard.py b/packages/python/src/multiform_validator/identifyFlagCard.py deleted file mode 100644 index 3c7a2f7..0000000 --- a/packages/python/src/multiform_validator/identifyFlagCard.py +++ /dev/null @@ -1,25 +0,0 @@ -import re - -def identifyFlagCard(cardNumber): - if not isinstance(cardNumber, str): - raise TypeError('The input should be a string.') - - bandeiras = [ - {'name': 'Visa', 'interval': re.compile('^4')}, - {'name': 'Mastercard', 'interval': re.compile('^5[1-5]')}, - {'name': 'American Express', 'interval': re.compile('^3[47]')}, - {'name': 'Discover', 'interval': re.compile('^6(?:011|5)')}, - {'name': 'JCB', 'interval': re.compile('^(?:2131|1800|35\d{3})')}, - {'name': 'Diners Club', 'interval': re.compile('^3(?:0[0-5]|[68])')}, - {'name': 'Maestro', 'interval': re.compile('^(?:5[0678]\d\d|6304|6390|67\d\d)')}, - {'name': 'UnionPay', 'interval': re.compile('^(62|88)')}, - {'name': 'Elo', 'interval': re.compile('^63[789]')}, - {'name': 'Hipercard', 'interval': re.compile('^(3841|60)')}, - ] - - def find_interval(band): - return band['interval'].search(cardNumber) - - bandeira_encontrada = next((band for band in bandeiras if find_interval(band) is not None), None) - - return bandeira_encontrada['name'] if bandeira_encontrada else 'Unknown' diff --git a/packages/python/src/multiform_validator/isCreditCardValid.py b/packages/python/src/multiform_validator/isCreditCardValid.py deleted file mode 100644 index a45870e..0000000 --- a/packages/python/src/multiform_validator/isCreditCardValid.py +++ /dev/null @@ -1,24 +0,0 @@ -def isCreditCardValid(cardNumber): - if not isinstance(cardNumber, str): - raise TypeError('The input should be a string.') - - # Remove espaços em branco e verifica se todos os caracteres são dígitos - cardNumber = cardNumber.replace(" ", "") - if not cardNumber.isdigit(): - return False - - digits = list(map(int, cardNumber)) - tamanhoDoDigito = len(digits) - totalSum = 0 - isEven = False - - for i in range(tamanhoDoDigito - 1, -1, -1): - digit = digits[i] - if isEven: - digit *= 2 - if digit > 9: - digit -= 9 - totalSum += digit - isEven = not isEven - - return totalSum % 10 == 0 diff --git a/packages/python/src/multiform_validator/isEmail.py b/packages/python/src/multiform_validator/isEmail.py deleted file mode 100644 index 7514bb5..0000000 --- a/packages/python/src/multiform_validator/isEmail.py +++ /dev/null @@ -1,52 +0,0 @@ -import re - -def isEmail(email): - if not isinstance(email, str): - raise TypeError("Invalid input, must be a string") - - if not email: - raise ValueError("Value cannot be null or empty") - - regex = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" - - if email[0].isdigit(): - return False - - if not re.match(regex, email): - return False - - before_at = email.index("@") - after_at = email.index("@") + 1 - after_last_dot = email.rindex(".") - - if email[after_at].isdigit(): - return False - - if email[after_last_dot].isdigit(): - return False - - if ".." in email[:before_at]: - return False - - if email[:before_at].endswith("."): - return False - - parts = email.split(".") - if len(parts) > 2 and parts[-2] == parts[-3]: - return False - - # Check if there is more than one @ - if email.count("@") > 1: - return False - - # Check if there is more than one consecutive dot after @ - if ".." in email[after_at:]: - return False - - # Check if the domain is repeating - domain_parts = email.split("@")[1].split(".") - unique_domain_parts = list(set(domain_parts)) - if len(domain_parts) != len(unique_domain_parts): - return False - - return True \ No newline at end of file diff --git a/packages/python/src/multiform_validator/isValidImage.py b/packages/python/src/multiform_validator/isValidImage.py deleted file mode 100644 index 6ee7515..0000000 --- a/packages/python/src/multiform_validator/isValidImage.py +++ /dev/null @@ -1,8 +0,0 @@ -def isValidImage(file_buffer): - # Check the magic numbers to determine the mimetype - is_jpeg = file_buffer[0] == 0xff and file_buffer[1] == 0xd8 and file_buffer[2] == 0xff - is_png = file_buffer[0] == 0x89 and file_buffer[1] == 0x50 and file_buffer[2] == 0x4e and file_buffer[3] == 0x47 - is_gif = file_buffer[0] == 0x47 and file_buffer[1] == 0x49 and file_buffer[2] == 0x46 and file_buffer[3] == 0x38 - - return is_jpeg or is_png or is_gif - diff --git a/packages/python/src/multiform_validator/passwordStrengthTester.py b/packages/python/src/multiform_validator/passwordStrengthTester.py deleted file mode 100644 index e5aeec7..0000000 --- a/packages/python/src/multiform_validator/passwordStrengthTester.py +++ /dev/null @@ -1,33 +0,0 @@ -def passwordStrengthTester(password): - if not isinstance(password, str): - raise TypeError('The input should be a string.') - - password_length = len(password) - strength_type = 'unknow' - - if password_length <= 5 and password.isdigit(): - strength_type = 'veryWeak' - elif (password_length <= 5 and password.isalnum()) or \ - (6 <= password_length <= 7 and password.isalnum()) or \ - (password_length < 10 and len(set(password)) <= 2) or \ - (5 <= password_length <= 8 and password.isdigit()): - strength_type = 'weak' - elif len(set(password)) == 1 and password_length > 10: - strength_type = 'regular' - elif password_length > 16 or \ - (8 <= password_length and any(c.isupper() for c in password) and \ - any(c.islower() for c in password) and \ - any(c.isdigit() for c in password) and \ - any(c.isalnum() and not c.isalnum() for c in password)): - strength_type = 'veryStrong' - elif (13 <= password_length <= 16) or \ - (8 <= password_length and any(c.isupper() for c in password) and \ - any(c.islower() for c in password) and \ - any(c.isdigit() for c in password)): - strength_type = 'strong' - elif (9 <= password_length <= 12) or \ - (6 <= password_length <= 8 and any(c.isdigit() for c in password) and \ - any(c.isalpha() for c in password)): - strength_type = 'regular' - - return strength_type diff --git a/packages/python/src/multiform_validator/validateBRPhoneNumber.py b/packages/python/src/multiform_validator/validateBRPhoneNumber.py deleted file mode 100644 index a7a08b8..0000000 --- a/packages/python/src/multiform_validator/validateBRPhoneNumber.py +++ /dev/null @@ -1,36 +0,0 @@ -import re - -default_error_msg = ['Invalid value passed', 'Invalid phone number', 'Unknown error'] - -def validateBRPhoneNumber(phone_number, errorMsg=default_error_msg): - if not isinstance(phone_number, str): - raise TypeError('The input should be a string.') - - if errorMsg: - if not isinstance(errorMsg, list): - raise TypeError('errorMsg must be a list') - for msg in errorMsg: - if msg is not None and not isinstance(msg, str): - raise TypeError('All values within the list must be strings or None.') - - def get_error_message(index): - error_message = errorMsg[index] - return error_message if error_message is not None else default_error_msg[index] - - if not phone_number: - return { - 'isValid': False, - 'errorMsg': get_error_message(0), - } - - br_phone_number_regex = r'^\(?\d{2}\)?[\s-]?9?\d{4}-?\d{4}$' - if not re.match(br_phone_number_regex, phone_number): - return { - 'isValid': False, - 'errorMsg': get_error_message(1), - } - - return { - 'isValid': True, - 'errorMsg': None, - } diff --git a/packages/python/tests/test_multiform_validator.py b/packages/python/tests/test_multiform_validator.py deleted file mode 100644 index ec8e754..0000000 --- a/packages/python/tests/test_multiform_validator.py +++ /dev/null @@ -1,55 +0,0 @@ -import sys -import os -import unittest - -# Add the parent directory of "src" to the path to allow imports from there -module_path = os.path.join(os.path.dirname(__file__), '..', 'src') -sys.path.append(module_path) - -from multiform_validator import ( - cnpjIsValid, cpfIsValid, getOnlyEmail, identifyFlagCard, - isCreditCardValid, isEmail, isValidImage, passwordStrengthTester, - validateBRPhoneNumber -) - -class TestMultiformValidator(unittest.TestCase): - def test_cnpjIsValid(self): - self.assertEqual(cnpjIsValid('11.444.777/0001-61'), {'isValid': True, 'errorMsg': None}) - self.assertEqual(cnpjIsValid('11.444.777/0001-62'), {'isValid': False, 'errorMsg': 'CNPJ is not valid'}) - - def test_cpfIsValid(self): - self.assertEqual(cpfIsValid('123.456.789-09'), {'isValid': True, 'errorMsg': None}) - self.assertEqual(cpfIsValid('123.456.789-08'), {'isValid': False, 'errorMsg': 'CPF is not valid'}) - - def test_isEmail(self): - self.assertTrue(isEmail('john@email.com')) - self.assertFalse(isEmail('johnemail.com')) - - def test_getOnlyEmail(self): - self.assertEqual(getOnlyEmail('dawdwwud waid wiu wdemail wadwad john@email.com awodi waodOWIawoD'), 'john@email.com') - - def test_identifyFlagCard(self): - self.assertEqual(identifyFlagCard('4111111111111111'), 'Visa') - - def test_isCreditCardValid(self): - self.assertTrue(isCreditCardValid('4111111111111111')) - self.assertFalse(isCreditCardValid('4111111111111112')) - - def test_passwordStrengthTester(self): - self.assertEqual(passwordStrengthTester('123456'), 'weak') - - def test_validateBRPhoneNumber(self): - self.assertEqual(validateBRPhoneNumber('(21) 91234-5678'), {'isValid': True, 'errorMsg': None}) - self.assertEqual(validateBRPhoneNumber('(11) 98765-4321'), {'isValid': True, 'errorMsg': None}) - self.assertEqual(validateBRPhoneNumber('(11) 1111-111'), {'isValid': False, 'errorMsg': 'Invalid phone number'}) - - def test_isValidImage(self): - jpeg_buffer = bytes([0xff, 0xd8, 0xff]) - png_buffer = bytes([0x89, 0x50, 0x4e, 0x47]) - gif_buffer = bytes([0x47, 0x49, 0x46, 0x38]) - self.assertTrue(isValidImage(jpeg_buffer)) - self.assertTrue(isValidImage(png_buffer)) - self.assertTrue(isValidImage(gif_buffer)) - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/packages/typescript/.editorconfig b/packages/typescript/.editorconfig deleted file mode 100644 index 2265467..0000000 --- a/packages/typescript/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file -root = true - -[*] -indent_style = tab -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/packages/typescript/.eslintignore b/packages/typescript/.eslintignore deleted file mode 100644 index 1e21bd3..0000000 --- a/packages/typescript/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -dist/ -node_modules/ -tests/**/* -types/ -webpack.config.js -jestTestFile.js -BackupCopia -.eslintrc.js diff --git a/packages/typescript/.eslintrc.js b/packages/typescript/.eslintrc.js deleted file mode 100644 index e99524b..0000000 --- a/packages/typescript/.eslintrc.js +++ /dev/null @@ -1,48 +0,0 @@ -module.exports = { - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/strict-type-checked", - "plugin:prettier/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - project: true, - tsconfigRootDir: __dirname, - }, - plugins: ["@typescript-eslint"], - root: true, - rules: { - "no-else-return": ["error", { allowElseIf: false }], - "consistent-return": "error", - "no-console": ["warn", { allow: ["warn", "error"] }], // Here you are allowing console.warn and console.error - "@typescript-eslint/typedef": [ - "error", - { - variableDeclaration: true, - memberVariableDeclaration: true, - }, - ], - "@typescript-eslint/explicit-module-boundary-types": "error", - "@typescript-eslint/naming-convention": [ - "error", - { - selector: "class", - format: ["PascalCase"], - }, - ], - "@typescript-eslint/prefer-readonly": "error", - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - accessibility: "explicit", - overrides: { - accessors: "explicit", - constructors: "no-public", - methods: "explicit", - properties: "explicit", - parameterProperties: "explicit", - }, - }, - ], - }, -}; diff --git a/packages/typescript/.gitignore b/packages/typescript/.gitignore deleted file mode 100644 index 70a3456..0000000 --- a/packages/typescript/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -coverage -node_modules/ -BackupCopia/ -todo.txt -teste.html -dist -types diff --git a/packages/typescript/.npmignore b/packages/typescript/.npmignore deleted file mode 100644 index 60ea80e..0000000 --- a/packages/typescript/.npmignore +++ /dev/null @@ -1,53 +0,0 @@ -# Ignora o .gitignore -.gitignore - -# Ignora o .eslintrc.js -.eslintrc.js - -# Ignora o .editorconfig -.editorconfig - -# Ignora todos os arquivos de código-fonte, exceto .js e ts -*.java -*.py -*.cpp -*.c -*.h -*.php -*.html -*.htm -*.xml -*.css -*.scss -*.sass -# Adicione aqui outros tipos de arquivos de código-fonte que você queira ignorar -.htaccess -srcPage/ -Backup/ -BackupCopia/ -tsconfig.json -pythonVersion/ -javaVersion/ -phpVersion/ -cSharpVersion/ -tester.js -/src -index.ts -.vscode/ -composer.json -tests/ -jest.config.js -images/ -.npmignore -package-lock.json -coverage/ -tsconfig.types.json -.eslintignore -.prettierrc.js -.prettierrc -.prettierignore -todo.txt -webpack.config.js -gitpush -gitpush.exe -jestTestFile.js diff --git a/packages/typescript/.prettierignore b/packages/typescript/.prettierignore deleted file mode 100644 index 007ea8a..0000000 --- a/packages/typescript/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage diff --git a/packages/typescript/.vscode/settings.json b/packages/typescript/.vscode/settings.json deleted file mode 100644 index 57f03fe..0000000 --- a/packages/typescript/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "code-runner.executorMap": { - "typescript": "npx ts-node", - }, -} diff --git a/packages/typescript/README.md b/packages/typescript/README.md deleted file mode 100644 index af9ad74..0000000 --- a/packages/typescript/README.md +++ /dev/null @@ -1,200 +0,0 @@ -> [!NOTE] -> I accept help to make the version of the other programming languages. - -# Multiform-validator - -[![npm version](https://badge.fury.io/js/multiform-validator.svg)](https://badge.fury.io/js/multiform-validator) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -[![npm downloads](https://img.shields.io/npm/dm/multiform-validator.svg?style=flat-square)](https://npm-stat.com/charts.html?package=multiform-validator) - -This npm package provides JavaScript functions to validate various forms fields. - -Documentation: https://multiform-validator.vercel.app - -Feel free to find bugs and report them to me. Your feedback is highly appreciated. Hugs from Gabriel Logan! - -## CDNs - -jsDelivr: -```bash -https://cdn.jsdelivr.net/npm/multiform-validator@2.1.3/dist/bundle.min.js -``` -```html - -``` - -unpkg: -```bash -https://unpkg.com/multiform-validator@2.1.3/dist/bundle.js -``` -```html - -``` - -### Example of use with CDN - -```html - - -``` - -## Installation - -```bash -npm install multiform-validator -``` - -or - -```bash -yarn add multiform-validator -``` - -## Data Validator - -This package contains various modules for validating different types of data. Below are the available validation modules: - -## Available Validation Modules - -- **cnpjValidator**: CNPJ validation. -- **cpfValidator**: CPF validation. -- **getOnlyEmail**: Extracts only the email or emails address from a string. -- **identifyFlagCard**: Identifies the flag of a credit card. -- **isAscii**: Checks if the string contains only ASCII characters. -- **isBase64**: Checks if the string is a valid Base64 encoding. -- **isCEP**: CEP validation (Brazilian postal code). -- **isCreditCardValid**: Credit card validation. -- **isDate**: Date format validation. -- **isDecimal**: Checks if the number is a decimal. -- **isEmail**: Email address validation format. -- **isEmpty**: Checks if the string is empty. -- **isMACAddress**: MAC address validation. -- **isMD5**: Checks if the string is a valid MD5 hash. -- **isNumber**: Checks if the value is a number. -- **isPort**: Port number validation. -- **isPostalCode**: Postal code validation. -- **isTime**: Time format validation. -- **isValidAudio**: Audio file validation. -- **isValidImage**: Image file validation. -- **isValidPdf**: Pdf file validation. -- **isValidTxt**: Txt file validation. -- **isValidVideo**: Video file validation. -- **passwordStrengthTester**: Password strength test. -- **validateBRPhoneNumber**: Brazilian phone number validation. -- **validateEmail**: Email address full validation. -- **validateName**: Name validation. -- **validatePassword**: Password validation. -- **validatePassportNumber**: Passport number validation. -- **validatePhoneNumber**: Phone number validation. -- **validateSurname**: Surname validation. -- **validateTextarea**: Textarea validation. -- **validateUsername**: Username validation. -- **validateUSPhoneNumber**: US phone number validation. - -### You can use it in React Native, Angular, any javascript framework or any javascript or typescript code. -#### Example using Reactjs: - -![Example using Reactjs](https://raw.githubusercontent.com/gabriel-logan/multiform-validator/main/docs/images/exampleWithReactjs.png) -![Showing error options](https://raw.githubusercontent.com/gabriel-logan/multiform-validator/main/docs/images/options.png) -![Showing error in browser](https://raw.githubusercontent.com/gabriel-logan/multiform-validator/main/docs/images/showErro.png) - -### For better information, read the documentation - -```javascript - -const validator = require('multiform-validator'); -// or -import validator from 'multiform-validator'; - -or - -// Attention, FUNCTION_NAME is not a valid function name! It is just an example of how to import the functions. - -const { FUNCTION_NAME } = require('multiform-validator'); -// or -import { FUNCTION_NAME } from 'multiform-validator'; - -``` - -```javascript - -const validator = require('multiform-validator'); -// or -import validator from 'multiform-validator'; -// then -validator.FUNCTION_NAME -// OBS: 'if the function is called validate, the return will be an object and not boolean' -// When return object boolean -validator.FUNCTION_NAME = true or false -// When return object -validator.FUNCTION_NAME = object = { isValid: true or false, errorMsg: 'stringError' } -validator.FUNCTION_NAME.isValid = true or false -validator.FUNCTION_NAME.errorMsg = 'ErrorMsg' // You can customize errors -/** - * There are other returns in some functions, with strings etc, stay tuned -*/ -``` - -## Documentation -### https://multiform-validator.vercel.app - -```javascript - -const { validateEmail } = require('multiform-validator'); -// or -import { validateEmail } from 'multiform-validator'; - -// It has many more validations, you can read the documentation or -// do several tests to learn how to use the library in the best possible way. - -// Two last parameters are optional -console.log(validateEmail('email@email.com', { maxLength: 30, country: 'br' }).isValid); // returns false -console.log(validateEmail('email@email.com.br', { maxLength: 30, country: 'br' }).isValid); // returns true -console.log(validateEmail('email@email.com', { maxLength: 30 }).isValid); // returns true - -// All examples return default messages, below is an example setting your own messages - -// If you want to use a default parameter, use null. - -const validationResult = validateEmail('email@email.com', { maxLength: 30 }); - -if (validationResult.isValid) { -console.log('0 errors'); -} else { -console.log(validationResult.errorMsg); // returns the error -} - -// or - -const validationResult = validateEmail("1email@email.com", { - maxLength: 30, - errorMsg: [null, "This is an invalid email with my own errors"], -}); - -if (validationResult.isValid) { -console.log('0 errors'); -} else { -console.log(validationResult.errorMsg); // Return 'This is an invalid email with my own errors' -} - -``` - -Feel free to explore the various functions and experiment with different inputs to understand their behavior. If you encounter any issues or have suggestions, don't hesitate to reach out to me. Your feedback is valuable and helps improve the package. Happy coding! - -If you want to help me, you can buy me a coffee (: - -

- - Buy Me A Coffee - -

- -# By - Gabriel Logan diff --git a/packages/typescript/index.ts b/packages/typescript/index.ts deleted file mode 100644 index 9fa2d29..0000000 --- a/packages/typescript/index.ts +++ /dev/null @@ -1,74 +0,0 @@ -import cpfIsValid from "./src/cpfValidator"; -import cnpjIsValid from "./src/cnpjValidator"; -import getOnlyEmail from "./src/getOnlyEmail"; -import isCEP from "./src/isCEP"; -import isEmail from "./src/isEmail"; -import validateEmail from "./src/validateEmail"; -import validatePassword from "./src/validatePassword"; -import validateUsername from "./src/validateUsername"; -import isCreditCardValid from "./src/isCreditCardValid"; -import identifyFlagCard from "./src/identifyFlagCard"; -import isMACAddress from "./src/isMACAddress"; -import isAscii from "./src/isAscii"; -import isBase64 from "./src/isBase64"; -import isDate from "./src/isDate"; -import isDecimal from "./src/isDecimal"; -import isEmpty from "./src/isEmpty"; -import isMD5 from "./src/isMD5"; -import validatePassportNumber from "./src/validatePassportNumber"; -import isPort from "./src/isPort"; -import isPostalCode from "./src/isPostalCode"; -import isTime from "./src/isTime"; -import validateBRPhoneNumber from "./src/validateBRPhoneNumber"; -import validateUSPhoneNumber from "./src/validateUSPhoneNumber"; -import validatePhoneNumber from "./src/validatePhoneNumber"; -import isNumber from "./src/isNumber"; -import passwordStrengthTester from "./src/passwordStrengthTester"; -import validateSurname from "./src/validateSurname"; -import validateName from "./src/validateName"; -import validateTextarea from "./src/validateTextarea"; -import { ValidateFunctions, IsValidFunctions } from "./src/types"; -import isValidImage from "./src/isValidImage"; -import isValidAudio from "./src/isValidAudio"; -import isValidPdf from "./src/isValidPdf"; -import isValidVideo from "./src/isValidVideo"; -import isValidTxt from "./src/isValidTxt"; - -export { - cpfIsValid, - cnpjIsValid, - isEmail, - validateEmail, - isCEP, - validateUsername, - validatePassword, - getOnlyEmail, - isCreditCardValid, - identifyFlagCard, - isMACAddress, - isAscii, - isBase64, - isDate, - isDecimal, - isEmpty, - isMD5, - isPort, - isPostalCode, - isTime, - validatePassportNumber, - validateBRPhoneNumber, - validateUSPhoneNumber, - validatePhoneNumber, - isNumber, - passwordStrengthTester, - validateName, - validateSurname, - validateTextarea, - ValidateFunctions, - IsValidFunctions, - isValidImage, - isValidAudio, - isValidPdf, - isValidVideo, - isValidTxt, -}; diff --git a/packages/typescript/jest.config.js b/packages/typescript/jest.config.js deleted file mode 100644 index 3745fc2..0000000 --- a/packages/typescript/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', -}; diff --git a/packages/typescript/jestTestFile.js b/packages/typescript/jestTestFile.js deleted file mode 100644 index e69de29..0000000 diff --git a/packages/typescript/package.json b/packages/typescript/package.json deleted file mode 100644 index 38a0d20..0000000 --- a/packages/typescript/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "multiform-validator", - "version": "2.1.3", - "description": "Javascript library made to validate, several form fields, such as: email, phone, password, cpf etc.", - "main": "./dist/index.js", - "types": "./types/index.d.ts", - "unpkg": "./dist/bundle.js", - "scripts": { - "test": "jest --coverage", - "test:file": "jest tests/src/isDecimal.test --watch", - "test:watch": "jest --watch", - "build:types": "tsc -p tsconfig.types.json", - "build:src": "tsc", - "build:browser": "webpack", - "build": "yarn build:types && yarn build:src && yarn build:browser", - "lint": "eslint . --ext .ts", - "pr-check": "yarn lint && yarn build && yarn test" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/gabriel-logan/multiform-validator.git" - }, - "keywords": [ - "validator", - "multiform", - "validação", - "email-validator", - "multiform-validator", - "javascript", - "npm", - "security", - "safe", - "pentest", - "security-tools", - "Validator", - "validate", - "magic number", - "magic number validator", - "magic numbers", - "cpf", - "cnpj", - "email validator", - "password", - "email", - "isEmail", - "image" - ], - "author": "Gabriel Logan", - "license": "MIT", - "bugs": { - "url": "https://github.com/gabriel-logan/multiform-validator/issues" - }, - "homepage": "https://multiform-validator.vercel.app", - "contributors": [ - "Gabriel Logan", - "Breno A" - ], - "devDependencies": { - "@types/jest": "^29.5.12", - "@types/mocha": "^10.0.6", - "@types/node": "^20.5.1", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", - "jest": "^29.6.4", - "prettier": "^3.2.5", - "ts-jest": "^29.1.1", - "ts-loader": "^9.5.1", - "ts-node": "^10.9.2", - "typescript": "^5.4.2", - "webpack": "^5.91.0", - "webpack-cli": "^5.1.4" - }, - "dependencies": {} -} diff --git a/packages/typescript/src/cnpjValidator.ts b/packages/typescript/src/cnpjValidator.ts deleted file mode 100644 index 6c8ce13..0000000 --- a/packages/typescript/src/cnpjValidator.ts +++ /dev/null @@ -1,122 +0,0 @@ -// Função para calcular o primeiro dígito verificador -function calculateFirstVerifier(cnpjBase: number[]): number { - const weight: Array = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]; - let sum: number = 0; - for (let i: number = 0; i < 12; i += 1) { - sum += cnpjBase[i] * weight[i]; - } - const remainder: number = sum % 11; - return remainder < 2 ? 0 : 11 - remainder; -} -// Função para calcular o segundo dígito verificador -function calculateSecondVerifier( - cnpjBase: number[], - firstVerifier: number, -): number { - const weight: number[] = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]; - let sum: number = 0; - for (let i: number = 0; i < 12; i += 1) { - sum += cnpjBase[i] * weight[i]; - } - sum += firstVerifier * weight[12]; - const remainder: number = sum % 11; - return remainder < 2 ? 0 : 11 - remainder; -} - -const defaultErrorMsg: string[] = [ - "CNPJ invalid", - "CNPJ must have 14 numerical digits", - "CNPJ is not valid", - "Unknown error", -]; - -/** - * @param cnpj - * @param errorMsg optional - * @example cpfIsValid('72.501.263/0001-40'); - * @description This function returns four errors in the following order, - * - * If you want to use a default parameter, use null or leave Empty. - * - * Default: - * ['CNPJ invalid', 'CNPJ must have 14 numerical digits', 'CNPJ is not valid', 'Unknown error'] - * . - * - * Create a list of errors separated by commas in strings - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ - -function cnpjIsValid( - cnpj: string, - errorMsg: (string | null)[] | null = defaultErrorMsg, -): { - isValid: boolean; - errorMsg: string | null; -} { - if (typeof cnpj !== "string") { - throw new TypeError("The input should be a string."); - } - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - if (errorMsg) { - if (!Array.isArray(errorMsg)) throw new Error("Must be an Array"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - try { - if (!cnpj) { - return { - isValid: false, - errorMsg: getErrorMessage(0), // 'CNPJ invalid' - }; - } - // Check if the CNPJ has 14 digits - if (cnpj.length !== 14 && cnpj.length !== 18) { - return { - isValid: false, - errorMsg: getErrorMessage(1), // 'CNPJ must have 14 numerical digits' - }; - } - // Remove any non-digit characters from the CNPJ string - const cnpjClean: string = cnpj.replace(/\D+/g, ""); - // Convert the CNPJ string to an array of digits - const cnpjArray: number[] = cnpjClean.split("").map(Number); - // Calculate the first and second verifiers - const firstVerifier: number = calculateFirstVerifier( - cnpjArray.slice(0, 12), - ); - const secondVerifier: number = calculateSecondVerifier( - cnpjArray.slice(0, 12).concat(firstVerifier), - firstVerifier, - ); - // Check if the calculated verifiers match the ones in the CNPJ - if (cnpjArray[12] === firstVerifier && cnpjArray[13] === secondVerifier) { - return { - isValid: true, - errorMsg: null, - }; - } - return { - isValid: false, - errorMsg: getErrorMessage(2), // 'CNPJ is not valid' - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(3), // 'Unknown error' - }; - } -} -export default cnpjIsValid; diff --git a/packages/typescript/src/cpfValidator.ts b/packages/typescript/src/cpfValidator.ts deleted file mode 100644 index f93e685..0000000 --- a/packages/typescript/src/cpfValidator.ts +++ /dev/null @@ -1,100 +0,0 @@ -const defaultErrorMsg: string[] = [ - "CPF invalid", - "CPF must have 11 numerical digits", - "CPF is not valid", - "Unknown error", -]; - -/** - * Validates a Brazilian CPF number for correctness. - * - * The CPF (Cadastro de Pessoas Físicas) is a Brazilian tax identification number. - * It consists of 11 digits in the format XXX.XXX.XXX-XX. This function checks the - * validity of a CPF number using its calculation algorithm. - * - * @param cpf The CPF number as a string. - * @param errorMsg An optional array of custom error messages. - * @example cpfIsValid('123.456.789-09'); - * @example cpfIsValid('12345678909'); - * @example cpfIsValid('12345678909', ['Custom invalid CPF message','Custom length error']); - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function cpfIsValid( - cpf: string, - errorMsg: (string | null)[] | null = defaultErrorMsg, -): { - isValid: boolean; - errorMsg: string | null; -} { - if (typeof cpf !== "string") { - throw new TypeError("The input should be a string."); - } - if (errorMsg) { - if (!Array.isArray(errorMsg)) throw new TypeError("Must be an Array"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - try { - if (!cpf) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - - const cpfClean: string = cpf.replace(/\D+/g, ""); - - if (/^(\d)\1{10}$/.test(cpfClean)) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } - - if (cpfClean.length !== 11) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - - const cpfArray: number[] = cpfClean.split("").map(Number); - const validator: (sum: number) => number = (sum: number) => - sum % 11 < 2 ? 0 : 11 - (sum % 11); - const sum1: number = cpfArray - .slice(0, 9) - .reduce((acc, val, i) => acc + val * (10 - i), 0); - const sum2: number = cpfArray - .slice(0, 10) - .reduce((acc, val, i) => acc + val * (11 - i), 0); - - if (cpfArray[9] === validator(sum1) && cpfArray[10] === validator(sum2)) { - return { - isValid: true, - errorMsg: null, - }; - } - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } catch (err) { - return { - isValid: false, - errorMsg: getErrorMessage(3), - }; - } -} - -export default cpfIsValid; diff --git a/packages/typescript/src/getOnlyEmail.ts b/packages/typescript/src/getOnlyEmail.ts deleted file mode 100644 index c684ba4..0000000 --- a/packages/typescript/src/getOnlyEmail.ts +++ /dev/null @@ -1,122 +0,0 @@ -const CleanAfterDefaultDomain: string[] = [ - ".br", - ".io", - ".pt", - ".us", - ".org", - ".com", -]; - -interface OptionsParams { - multiple?: boolean; - cleanDomain?: boolean | string[]; - repeatEmail?: boolean; -} - -const defaultOptionsParams: OptionsParams = { - multiple: false, - cleanDomain: false, - repeatEmail: false, -}; - -/** - * @example getOnlyEmail("Entre em contato com a equipe:
joao@empresa.com, maria@empresa.com, contato@empresa.com", true); - * // Output: ["joao@empresa.com", "maria@empresa.com", "contato@empresa.com"] - * - * @description This function extracts emails from a given text. If multiple is set to true, - * it returns an array with all emails found. Otherwise, it returns only the first email found as a string. - * - * @description Default domainsList is ['.br', '.io', '.pt', '.us', '.org', '.com', ]; you can set true to use this or pass your own list, - * OBS: Your list gonna replace the default - * IMPORTANT: List order matters - * - * The third parameter solves the following, if the email is formatted as follows, foo@bar.comAAAA, it will clean the email returning only foo@bar.com, all characters that come after the one in the list will be removed and the email comes out clean - * - * if you need to skip some param use null - * - * @description the fourth parameter, if true, will allow the list to return repeated emails, otherwise the default does not return repeated emails - * - * Follow doc: https://tinyurl.com/getOnlyEmail - * - * @returns An email string if multiple is false, or an array of email strings if multiple is true. - */ -function getOnlyEmail( - text: string, - { - multiple = defaultOptionsParams.multiple, - cleanDomain = defaultOptionsParams.cleanDomain, - repeatEmail = defaultOptionsParams.repeatEmail, - }: OptionsParams = defaultOptionsParams, -): string | string[] { - const emailPattern: RegExp = - /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g; - - const matches: string | string[] | null = text.match(emailPattern); - - if (!matches) { - return "No email found"; - } - - if (cleanDomain) { - const domainsToClean: string[] = Array.isArray(cleanDomain) - ? cleanDomain - : CleanAfterDefaultDomain; - - const cleanedEmails: string[] = matches.map((email) => { - for (const domain of domainsToClean) { - const index: number = email.lastIndexOf(domain); - if (index !== -1) { - email = email.substring(0, index + domain.length); - break; // Break the loop once a match is found - } - } - - for (const domain of domainsToClean) { - const index: number = email.indexOf(domain); - if (index !== -1) { - email = email.substring(0, index + domain.length); - break; // Break the loop once a match is found - } - } - - return email; - }); - - if (!repeatEmail) { - const uniqueEmails: string[] = [...new Set(cleanedEmails)]; - return multiple ? uniqueEmails : uniqueEmails[0]; - } - - return multiple ? cleanedEmails : cleanedEmails[0]; - } - - if (!repeatEmail) { - const uniqueEmails: string[] = [...new Set(matches)]; - return multiple ? uniqueEmails : uniqueEmails[0]; - } - - return multiple ? matches : matches[0]; - /** - * const cleanedEmails: string[] = matches.map((email) => { - for (const domain of domainsToClean) { - const index: number = email.lastIndexOf(domain); - if (index !== -1) { - return email.substring(0, index + domain.length); - } - } - return email; - }); - - const cleanedEmails2: string[] = cleanedEmails.map((email) => { - for (const domain of domainsToClean) { - const index: number = email.indexOf(domain); - if (index !== -1) { - return email.substring(0, index + domain.length); - } - } - return email; - }); - */ -} - -export default getOnlyEmail; diff --git a/packages/typescript/src/identifyFlagCard.ts b/packages/typescript/src/identifyFlagCard.ts deleted file mode 100644 index e880629..0000000 --- a/packages/typescript/src/identifyFlagCard.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @example identifyFlagCard('6062 8226 8644 9791'); - * @example identifyFlagCard('6062822686449791'); - * @description Values have to be passed as a string - * @returns return flag name ex. Visa - */ -function identifyFlagCard(cardNumber: string): string { - if (typeof cardNumber !== "string") - throw new TypeError("The input should be a string."); - const bandeiras: { - name: string; - interval: RegExp; - }[] = [ - { name: "Visa", interval: /^4/ }, - { name: "Mastercard", interval: /^5[1-5]/ }, - { name: "American Express", interval: /^3[47]/ }, - { name: "Discover", interval: /^6(?:011|5)/ }, - { name: "JCB", interval: /^(?:2131|1800|35\d{3})/ }, - { name: "Diners Club", interval: /^3(?:0[0-5]|[68])/ }, - { name: "Maestro", interval: /^(?:5[0678]\d\d|6304|6390|67\d\d)/ }, - { name: "UnionPay", interval: /^(62|88)/ }, - { name: "Elo", interval: /^63[789]/ }, - { name: "Hipercard", interval: /^(3841|60)/ }, - ]; - const bandeiraEncontrada: - | { - name: string; - interval: RegExp; - } - | undefined = bandeiras.find((bandeira) => - bandeira.interval.test(cardNumber), - ); - return bandeiraEncontrada ? bandeiraEncontrada.name : "Unknown"; -} -// Função para identificar a bandeira do cartão com base nos primeiros dígitos -export default identifyFlagCard; diff --git a/packages/typescript/src/isAscii.ts b/packages/typescript/src/isAscii.ts deleted file mode 100644 index 1d47219..0000000 --- a/packages/typescript/src/isAscii.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @example isAscii('Hello'); // true - * @example isAscii('こんにちは'); // false - * @example isAscii('12345'); // true - * @example isAscii(null); // false - * @example isAscii(undefined); // false - * @description Values have to be passed as a string - */ -function isAscii(value: string): boolean { - if (typeof value !== "string") { - throw new TypeError("The input should be a string."); - } - - if (value.trim().length === 0) { - throw new Error("Input value must not be an empty string."); - } - - for (let i: number = 0; i < value.length; i += 1) { - const charCode: number = value.charCodeAt(i); - if (Number.isNaN(charCode) || charCode > 127) { - return false; - } - } - return true; -} - -export default isAscii; diff --git a/packages/typescript/src/isBase64.ts b/packages/typescript/src/isBase64.ts deleted file mode 100644 index f1993e6..0000000 --- a/packages/typescript/src/isBase64.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @example isBase64('SGVsbG8gV29ybGQh'); // true - * @example isBase64('こんにちは'); // false - * @example isBase64('12345'); // false - * @example isBase64(null); // false - * @description Values have to be passed as a string - */ -function isBase64(value: string): boolean { - if (typeof value !== "string") { - throw new TypeError("Input value must be a string."); - } - - if (value.trim().length === 0) { - throw new Error("Input value must not be an empty string."); - } - - // Regular expression to validate Base64 - const base64Regex: RegExp = - /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; - - return base64Regex.test(value); -} - -export default isBase64; diff --git a/packages/typescript/src/isCEP.ts b/packages/typescript/src/isCEP.ts deleted file mode 100644 index 6cb913b..0000000 --- a/packages/typescript/src/isCEP.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @example isCEP('12345-678'); - * @example isCEP('12345678'); - * @example isCEP('12.345-678'); - */ -function isCEP(cep: string): boolean { - if (typeof cep !== "string") { - throw new TypeError("Input value must be a string."); - } - try { - if (cep.length < 8 || cep.length > 10) return false; - // Clean the CEP and keep only the numbers - const cepString: string = cep.replace(/\D/g, ""); // The \D pattern matches any non-digit character - // Check if the cleaned CEP contains only numbers - if (cepString.length !== 8) return false; - // Check if the CEP is a valid number (all digits) - if (Number.isNaN(cepString)) return false; - return true; - } catch (error) { - return false; - } -} -export default isCEP; diff --git a/packages/typescript/src/isCreditCardValid.ts b/packages/typescript/src/isCreditCardValid.ts deleted file mode 100644 index a9f3792..0000000 --- a/packages/typescript/src/isCreditCardValid.ts +++ /dev/null @@ -1,40 +0,0 @@ -import isEmpty from "./isEmpty"; -import isNumber from "./isNumber"; - -/** - * @example isCreditCardValid('6062 8226 8644 9791'); - * @example isCreditCardValid('6062822686449791'); - * @description Values have to be passed as a string - * @returns return true or false - */ -function isCreditCardValid(cardNumber: string): boolean { - if (typeof cardNumber !== "string") { - throw new TypeError("The input should be a string."); - } - - const cleanedCreditCardInput: string = cardNumber.replace(/\D/g, ""); - - if (isEmpty(cleanedCreditCardInput) || !isNumber(cleanedCreditCardInput)) { - return false; - } - - const digits: number[] = cardNumber.replace(/\D+/g, "").split("").map(Number); - const tamanhoDoDigito: number = digits.length; - let sum: number = 0; - let isEven: boolean = false; - for (let i: number = tamanhoDoDigito - 1; i >= 0; i -= 1) { - let digit: number = digits[i]; - if (isEven) { - digit *= 2; - if (digit > 9) { - digit -= 9; - } - } - sum += digit; - isEven = !isEven; - } - return sum % 10 === 0; -} -export default isCreditCardValid; - -// Função para validar o número do cartão usando o algoritmo de Luhn diff --git a/packages/typescript/src/isDate.ts b/packages/typescript/src/isDate.ts deleted file mode 100644 index e71701b..0000000 --- a/packages/typescript/src/isDate.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @example isDate('2023-07-24'); // true - * @example isDate('2023/07/24'); // true - * @example isDate('24-07-2023'); // true - * @example isDate('24/07/2023'); // true - * @example isDate('July 24, 2023'); // true - * @example isDate('2023-13-24'); // false (invalid month) - * @example isDate('2023-07-40'); // false (invalid day) - * @example isDate('2023-07'); // false (incomplete date) - * @example isDate('Hello'); // false (not a valid date format) - * @description Values have to be passed as a string - */ -function isDate(value: string): boolean { - if (typeof value !== "string") { - throw new TypeError("Input value must be a string."); - } - if (value.trim().length === 0) { - throw new Error("Input value must not be an empty string."); - } - // Parse the value using the Date constructor - const dateObject: Date = new Date(value); - // Check if the parsed date is valid - if (Number.isNaN(dateObject) || !(dateObject instanceof Date)) { - return false; - } - // Check if the date string is in a valid format (e.g., 'YYYY-MM-DD', 'MM/DD/YYYY', 'MMMM D, YYYY') - const dateStringRegex: RegExp = - /^(?:\d{4}[-/]\d{2}[-/]\d{2}|\d{2}[-/]\d{2}[-/]\d{4}|[A-Za-z]+\s\d{1,2}, \d{4})$/; - if (!dateStringRegex.test(value)) { - return false; - } - // Additional checks for the month and day values - const year: number = dateObject.getFullYear(); - const month: number = dateObject.getMonth() + 1; // Month is zero-based, so we add 1 - const day: number = dateObject.getDate(); - if ( - year < 1000 || - year > 9999 || - month < 1 || - month > 12 || - day < 1 || - day > 31 - ) { - return false; - } - return true; -} -export default isDate; diff --git a/packages/typescript/src/isDecimal.ts b/packages/typescript/src/isDecimal.ts deleted file mode 100644 index 3712ee2..0000000 --- a/packages/typescript/src/isDecimal.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @example isDecimal('123.45'); // true - * @example isDecimal('-123.45'); // true - * @example isDecimal('0.123'); // true - * @example isDecimal('1,234.56'); // true - * @example isDecimal('1.234,56'); // false (invalid format) - * @example isDecimal('abc'); // false (not a valid number) - * @example isDecimal('12a.34'); // false (not a valid number) - * @example isDecimal('12.34.56'); // false (not a valid number) - * @description Values have to be passed as a string - * @returns true or false - */ -function isDecimal(value: string | number): boolean { - let getValued: string | number = value; - if (typeof getValued === "number" && Number.isNaN(getValued)) { - throw new TypeError("Input value must not be NaN."); - } - - if (typeof getValued === "number" && !isFinite(getValued)) { - throw new TypeError("Input value must not be Infinity, -Infinity or NaN."); - } - - if (typeof getValued !== "string") { - if (typeof getValued === "number") { - if (Number.isInteger(getValued)) { - return false; - } - getValued = getValued.toString(); - } else { - throw new TypeError("Input value must be a string or a number."); - } - } - if (getValued.trim().length === 0) { - throw new Error("Input value must not be an empty string."); - } - - const integerRegex: RegExp = /^\d+$/; - if (integerRegex.test(getValued)) { - return false; - } - - // Regular expression to validate decimal numbers - const decimalRegex: RegExp = /^[-+]?(?:\d+(?:[,.]\d*)?|\d*[,.]\d+)$/; - if (!decimalRegex.test(getValued)) { - return false; - } - // Check for multiple decimal separators - const decimalSeparator: Separators = getValued.includes(".") ? "." : ","; - const otherSeparator: Separators = decimalSeparator === "." ? "," : "."; - if ( - getValued.includes(decimalSeparator) && - getValued.includes(otherSeparator) - ) { - return false; - } - // Additional checks for negative sign - if (getValued.startsWith("-")) { - // Ensure the negative sign is only at the beginning and not elsewhere - if (getValued.lastIndexOf("-") > 0) { - return false; - } - } - return true; -} -export default isDecimal; - -type Separators = "." | ","; diff --git a/packages/typescript/src/isEmail.ts b/packages/typescript/src/isEmail.ts deleted file mode 100644 index 278b62c..0000000 --- a/packages/typescript/src/isEmail.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Validates if the given string is a valid email address. - * - * @example isEmail('foo@bar.com') // returns true; - * @example isEmail('foo@bar') // returns false; - * @example isEmail('1foo@bar.com') // returns false, starts with a number. - * @example isEmail('foo@1bar.com') // returns false, domain starts with a number. - * @example isEmail('foo@bar.1com') // returns false, TLD starts with a number. - * @example isEmail('..foo@bar.com') // returns false, starts with consecutive dots. - * @example isEmail('foo..bar@baz.com') // returns false, local part contains consecutive dots. - * @example isEmail('foo@..bar.com') // returns false, domain contains consecutive dots. - * @example isEmail('foo@bar..com') // returns false, domain contains consecutive dots before TLD. - * @example isEmail('foo@bar.com..') // returns false, ends with consecutive dots. - * @example isEmail('foo@@bar.com') // returns false, contains multiple @ symbols. - * @example isEmail('foo@bar.com.br') // returns true, valid country code TLD. - * @example isEmail('foo@bar.com.com') // returns false, domain repetition. - * @example isEmail('foo@bar.c') // returns false, TLD too short. - * @example isEmail('!foo@bar.com') // returns false, starts with a special character. - * @example isEmail('foo bar@baz.com') // returns false, contains spaces. - * @example isEmail('foo@bar!com') // returns false, domain contains special characters. - * @example isEmail('foo!@bar.com') // returns false, local part contains special characters. - * @example isEmail('foo@bar.c') // returns false, invalid TLD. - * @description This function checks if the provided string is a valid email address according to the standard email formatting rules. It checks for the presence of an @ symbol, valid characters in the local part and domain, the absence of forbidden characters and patterns, and a valid top-level domain. - * @param email The email address to validate. - * @returns {boolean} True if the email address is valid, false otherwise. - */ -function isEmail(email: string): boolean { - if (typeof email !== "string") { - throw new TypeError("Invalid input, must be a string"); - } - - if (!email) { - throw new Error("Value cannot be null or empty"); - } - - // Check if email starts with a special character - const startsWithSpecialChar: RegExp = /^[^a-zA-Z0-9]/; - if (startsWithSpecialChar.test(email)) return false; - - const regex: RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; - - if (Number(email[0])) return false; - - if (!regex.test(email)) return false; - - const antesDoArroba: number = email.indexOf("@"); - - const depoisDoArroba: number = email.indexOf("@") + 1; - - const depoisDoUltimoPonto: number = email.lastIndexOf("."); - - if (Number(email[depoisDoArroba])) return false; - - if (Number(email[depoisDoUltimoPonto])) return false; - - if (email.substring(0, antesDoArroba).includes("..")) return false; - - if (email.substring(0, antesDoArroba).endsWith(".")) return false; - - const parts: string[] = email.split("."); - if (parts.length > 2 && parts[parts.length - 2] === parts[parts.length - 3]) { - return false; - } - - // Check if there is more than one @ - if (email.split("@").length - 1 > 1) { - return false; - } - - // Check if there is more than one consecutive dot after @ - if (email.substring(depoisDoArroba).includes("..")) { - return false; - } - - // Check if the domain is repeating - const domainParts: string[] = email.split("@")[1].split("."); - const uniqueDomainParts: string[] = Array.from(new Set(domainParts)); - if (domainParts.length !== uniqueDomainParts.length) { - return false; - } - - return true; -} -export default isEmail; diff --git a/packages/typescript/src/isEmpty.ts b/packages/typescript/src/isEmpty.ts deleted file mode 100644 index 430877b..0000000 --- a/packages/typescript/src/isEmpty.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @example isEmpty(''); // true - * @example isEmpty(' '); // true - * @example isEmpty('Hello'); // false - * @example isEmpty(' Hello '); // false - * @example isEmpty(null); // false - * @example isEmpty(undefined); // false - * @description Values have to be passed as a string - * @returns true or false - */ -function isEmpty(value: string): boolean { - // Check if the input value is of type string - if (typeof value !== "string") { - throw new TypeError("Input value must be a string."); - } - - // Remove leading and trailing whitespace and check if the resulting string is empty - return value.trim().length === 0; -} - -export default isEmpty; diff --git a/packages/typescript/src/isMACAddress.ts b/packages/typescript/src/isMACAddress.ts deleted file mode 100644 index 4537bef..0000000 --- a/packages/typescript/src/isMACAddress.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @example isMACAddress('001A2B3C4D5E'); - * @example isMACAddress('00:1A:2B:3C:4D:5E'); - * @example isMACAddress('00-1A-2B-3C-4D-5E'); - * @description Values have to be passed as a string - * @returns return true or false - */ -function isMACAddress(mac: string): boolean { - // Verificar se o parâmetro é uma string - if (typeof mac !== "string") { - throw new TypeError("The input should be a string."); - } - - // Remover todos os caracteres não alfanuméricos - const cleanedMac: string = mac.replace(/[^0-9A-Fa-f]/g, ""); - - // Verificar se o comprimento é válido (12 caracteres) - if (cleanedMac.length !== 12) { - return false; - } - - // Expressão regular para verificar o padrão de endereço MAC - const macPattern: RegExp = /^([0-9A-Fa-f]{2}){6}$/; - - // Verificar se o endereço MAC corresponde ao padrão - return macPattern.test(cleanedMac); -} - -export default isMACAddress; diff --git a/packages/typescript/src/isMD5.ts b/packages/typescript/src/isMD5.ts deleted file mode 100644 index 64db36e..0000000 --- a/packages/typescript/src/isMD5.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @example isMD5('d41d8cd98f00b204e9800998ecf8427e'); // true - * @example isMD5('6df23dc03f9b54cc38a0fc1483df6e21'); // true - * @example isMD5('Hello'); // false (not a valid MD5 hash) - * @example isMD5('123'); // false (not a valid MD5 hash) - * @example isMD5('d41d8cd98f00b204e9800998ecf8427e123'); // false (too long) - * @description Values have to be passed as a string - * @returns true or false - */ -function isMD5(value: string): boolean { - if (typeof value !== "string") { - throw new TypeError("Input value must be a string."); - } - - const trimmedValue: string = value.trim(); - if (trimmedValue.length !== 32) { - return false; - } - - const md5Regex: RegExp = /^[a-fA-F0-9]{32}$/; - - if (!md5Regex.test(trimmedValue)) { - return false; - } - - const allZeroRegex: RegExp = /^0{32}$/; - if (allZeroRegex.test(trimmedValue)) { - return false; - } - - const weakHashes: string[] = ["d41d8cd98f00b204e9800998ecf8427e"]; - if (weakHashes.includes(trimmedValue)) { - return false; - } - - return true; -} - -export default isMD5; diff --git a/packages/typescript/src/isNumber.ts b/packages/typescript/src/isNumber.ts deleted file mode 100644 index e073233..0000000 --- a/packages/typescript/src/isNumber.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @example isNumber(123) - * @example isNumber('abc') - * @description Checks that the value is a valid number. - * @returns true if the value is a valid number, false otherwise. - */ -function isNumber(value: unknown): boolean { - if (value === null || value === undefined || typeof value === "boolean") { - return false; - } - - if (typeof value === "string") { - return ( - !Number.isNaN(parseFloat(value)) && Number.isFinite(parseFloat(value)) - ); - } - - if (typeof value === "number") { - return Number.isFinite(value); - } - - return false; -} -export default isNumber; diff --git a/packages/typescript/src/isPort.ts b/packages/typescript/src/isPort.ts deleted file mode 100644 index 038a91f..0000000 --- a/packages/typescript/src/isPort.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @example isPort('80'); // true - * @example isPort(443); // true - * @example isPort('65535'); // true - * @example isPort(0); // false (port number must be greater than 0) - * @example isPort('65536'); // false (port number must be less than or equal to 65535) - * @example isPort('Hello'); // false (not a valid port number) - * @description Values can be passed as a string or a number - * @returns true or false - */ -function isPort(value: string | number): boolean { - if (typeof value !== "string" && typeof value !== "number") { - throw new TypeError("Input value must be a string or a number."); - } - // Converte o valor para um inteiro (se for uma string) e verifica se está dentro do intervalo de porta válido - const portNumber: number = parseInt(String(value), 10); - return Number.isInteger(portNumber) && portNumber >= 1 && portNumber <= 65535; -} -export default isPort; diff --git a/packages/typescript/src/isPostalCode.ts b/packages/typescript/src/isPostalCode.ts deleted file mode 100644 index 9fbbc22..0000000 --- a/packages/typescript/src/isPostalCode.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @example isPostalCode('12345'); // true (United States) - * @example isPostalCode('M4B 1B3'); // true (Canada) - * @example isPostalCode('SW1A 1AA'); // true (United Kingdom) - * @example isPostalCode('75013'); // true (France) - * @example isPostalCode('1012'); // true (Netherlands) - * @example isPostalCode('100-0001'); // true (Japan) - * @example isPostalCode('28001'); // true (Spain) - * @example isPostalCode('8000'); // true (South Africa) - * @example isPostalCode('13355'); // true (Germany) - * @example isPostalCode('1002'); // true (Switzerland) - * @example isPostalCode('10045-123'); // true (Brazil) - * @example isPostalCode('00100'); // true (Italy) - * @example isPostalCode('90210'); // true (United States ZIP Code) - * @description Values have to be passed as a string. Supported countries: United States, Canada, United Kingdom, France, Netherlands, Japan, Spain, South Africa, Germany, Switzerland, Brazil, Italy. - */ -function isPostalCode(postalCode: string): boolean { - if (typeof postalCode !== "string") { - throw new TypeError("Input value must be a string."); - } - - // Regular expressions for supported countries' postal code formats - - const usZipCodeRegex: RegExp = /^\d{5}(-\d{4})?$/; - - const canadaPostalCodeRegex: RegExp = /^[A-Za-z]\d[A-Za-z] \d[A-Za-z]\d$/; - - const ukPostalCodeRegex: RegExp = - /^[A-Za-z]{1,2}\d[A-Za-z\d]?\s\d[A-Za-z]{2}$/; - - const francePostalCodeRegex: RegExp = /^\d{5}$/; - - const netherlandsPostalCodeRegex: RegExp = /^\d{4}$/; - - const japanPostalCodeRegex: RegExp = /^\d{3}-\d{4}$/; - - const spainPostalCodeRegex: RegExp = /^\d{5}$/; - - const southAfricaPostalCodeRegex: RegExp = /^\d{4}$/; - const germanyPostalCodeRegex: RegExp = /^\d{5}$/; - const switzerlandPostalCodeRegex: RegExp = /^\d{4}$/; - const brazilPostalCodeRegex: RegExp = /^\d{5}-\d{3}$/; - const italyPostalCodeRegex: RegExp = /^\d{5}$/; - const usZipCodeOnlyRegex: RegExp = /^\d{5}$/; - return ( - usZipCodeRegex.test(postalCode) || - canadaPostalCodeRegex.test(postalCode) || - ukPostalCodeRegex.test(postalCode) || - francePostalCodeRegex.test(postalCode) || - netherlandsPostalCodeRegex.test(postalCode) || - japanPostalCodeRegex.test(postalCode) || - spainPostalCodeRegex.test(postalCode) || - southAfricaPostalCodeRegex.test(postalCode) || - germanyPostalCodeRegex.test(postalCode) || - switzerlandPostalCodeRegex.test(postalCode) || - brazilPostalCodeRegex.test(postalCode) || - italyPostalCodeRegex.test(postalCode) || - usZipCodeOnlyRegex.test(postalCode) // Handle United States ZIP code only (without the optional 4-digit extension) - ); -} - -export default isPostalCode; diff --git a/packages/typescript/src/isTime.ts b/packages/typescript/src/isTime.ts deleted file mode 100644 index 7e35689..0000000 --- a/packages/typescript/src/isTime.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @example isTime('12:34'); // true - * @example isTime('12:34 AM'); // true - * @example isTime('23:59:59'); // true - * @example isTime('12:34:56 PM'); // true - * @example isTime('12:34:56 AM'); // true - * @example isTime('12:34:56XM'); // false (invalid format) - * @example isTime('25:00'); // false (invalid hour) - * @example isTime('23:60'); // false (invalid minute) - * @example isTime('23:59:61'); // false (invalid second) - * @description Values have to be passed as a string in the format "hh:mm" or "hh:mm AM/PM" or "hh:mm:ss" or "hh:mm:ss AM/PM" - */ -function isTime(time: string): boolean { - if (typeof time !== "string") { - throw new TypeError("Input value must be a string."); - } - // Regular expression to validate time in the format "hh:mm" or "hh:mm AM/PM" or "hh:mm:ss" or "hh:mm:ss AM/PM" - const timeRegex: RegExp = - /^(?:2[0-3]|1\d|0?[0-9]):[0-5]\d(?::[0-5]\d)?(?: [APap][Mm])?$/; - - return timeRegex.test(time); -} -export default isTime; diff --git a/packages/typescript/src/isValidAudio/index.ts b/packages/typescript/src/isValidAudio/index.ts deleted file mode 100644 index 0c7a0d1..0000000 --- a/packages/typescript/src/isValidAudio/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -import validateAllAudios from "./validateAllAudios"; -import validateMp3 from "./validateMp3"; -import validateWav from "./validateWav"; - -type AudioMimeType = "mp3" | "wav"; - -interface OptionsParams { - exclude: AudioMimeType[]; -} - -const defaultOptionsParams: OptionsParams = { - exclude: [], -}; - -/** - * Checks if the given file buffer represents a valid audio file. - * - * @param fileBuffer - The buffer containing the file data. - * @description - This function checks the magic numbers of the file buffer to determine if it is a valid audio file. - * @param options - An object containing the options for the function. - * @param options.exclude - An array of audio types to exclude from the validation. - * - * type AudioMimeType = "mp3" | "wav"; - * - * @example - isValidAudio(fileBuffer, { exclude: ["wav"] }); - * - * @returns A boolean indicating whether the file is a valid audio file. - */ -function isValidAudio( - fileBuffer: Buffer, - options = defaultOptionsParams, -): boolean { - const excludedMimeTypes: AudioMimeType[] = options.exclude; - - if (excludedMimeTypes.length === 0) { - return validateAllAudios(fileBuffer); - } - - const listToValidate: AudioMimeType[] = ["mp3", "wav"]; - - const filteredList: AudioMimeType[] = listToValidate.filter( - (mimeType: AudioMimeType) => !excludedMimeTypes.includes(mimeType), - ); - - if (filteredList.length === 0) { - return false; - } - - const isMp3: boolean = - filteredList.includes("mp3") && validateMp3(fileBuffer); - - const isWav: boolean = - filteredList.includes("wav") && validateWav(fileBuffer); - - return isMp3 || isWav; -} -export default isValidAudio; diff --git a/packages/typescript/src/isValidAudio/validateAllAudios.ts b/packages/typescript/src/isValidAudio/validateAllAudios.ts deleted file mode 100644 index 9a5ee24..0000000 --- a/packages/typescript/src/isValidAudio/validateAllAudios.ts +++ /dev/null @@ -1,10 +0,0 @@ -import validateMp3 from "./validateMp3"; -import validateWav from "./validateWav"; - -export default function validateAllAudios(fileBuffer: Buffer): boolean { - const isMp3: boolean = validateMp3(fileBuffer); - - const isWav: boolean = validateWav(fileBuffer); - - return isMp3 || isWav; -} diff --git a/packages/typescript/src/isValidAudio/validateMp3.ts b/packages/typescript/src/isValidAudio/validateMp3.ts deleted file mode 100644 index 04bb9ee..0000000 --- a/packages/typescript/src/isValidAudio/validateMp3.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default function validateMp3(fileBuffer: Buffer): boolean { - const isMp3: boolean = - fileBuffer[0] === 0x49 && fileBuffer[1] === 0x44 && fileBuffer[2] === 0x33; - - return isMp3; -} diff --git a/packages/typescript/src/isValidAudio/validateWav.ts b/packages/typescript/src/isValidAudio/validateWav.ts deleted file mode 100644 index e21c03a..0000000 --- a/packages/typescript/src/isValidAudio/validateWav.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default function validateWav(fileBuffer: Buffer): boolean { - const isWav: boolean = - fileBuffer[0] === 0x52 && - fileBuffer[1] === 0x49 && - fileBuffer[2] === 0x46 && - fileBuffer[3] === 0x46; - - return isWav; -} diff --git a/packages/typescript/src/isValidImage/index.ts b/packages/typescript/src/isValidImage/index.ts deleted file mode 100644 index 8871ddf..0000000 --- a/packages/typescript/src/isValidImage/index.ts +++ /dev/null @@ -1,74 +0,0 @@ -import validateAllImages from "./validateAllImages"; -import validateGif from "./validateGif"; -import validateIco from "./validateIco"; -import validateJpeg from "./validateJpeg"; -import validatePng from "./validatePng"; - -type ImageMimeType = "gif" | "ico" | "jpeg" | "png"; - -interface OptionsParams { - exclude: ImageMimeType[]; -} - -const defaultOptionsParams: OptionsParams = { - exclude: [], -}; - -/** - * Checks if the given file buffer represents a valid image. - * @param fileBuffer - The buffer containing the file data. - * @description - This function checks the magic numbers of the file buffer to determine if it is a valid image. - * @param options - An object containing the options for the function. - * @param options.exclude - An array of image types to exclude from the validation. - * - * type ImageMimeType = "gif" | "ico" | "jpeg" | "png"; - * - * If you want to exclude some image types from the validation, you can pass the options - * @example - isValidImage(fileBuffer, { exclude: ["gif", "ico"] }); - * @returns A boolean indicating whether the file is a valid image or not. - */ -export default function isValidImage( - fileBuffer: Buffer, - options = defaultOptionsParams, -): boolean { - const excludedMimeTypes: ImageMimeType[] = options.exclude; - - if (excludedMimeTypes.length === 0) { - return validateAllImages(fileBuffer); - } - - const listToValidate: ImageMimeType[] = ["gif", "ico", "jpeg", "png"]; - - const filteredList: ImageMimeType[] = listToValidate.filter( - (mimeType: ImageMimeType) => !excludedMimeTypes.includes(mimeType), - ); - - if (filteredList.length === 0) { - return false; - } - - const isGif: boolean = - filteredList.includes("gif") && validateGif(fileBuffer); - - const isIco: boolean = - filteredList.includes("ico") && validateIco(fileBuffer); - - const isJpeg: boolean = - filteredList.includes("jpeg") && validateJpeg(fileBuffer); - - const isPng: boolean = - filteredList.includes("png") && validatePng(fileBuffer); - - return isGif || isIco || isJpeg || isPng; - /** - * Validate - * Bmp - * Gif - * Ico - * Jpeg - * Png - * Svg - * Tiff - * Webp - */ -} diff --git a/packages/typescript/src/isValidImage/validateAllImages.ts b/packages/typescript/src/isValidImage/validateAllImages.ts deleted file mode 100644 index 3c5cfb6..0000000 --- a/packages/typescript/src/isValidImage/validateAllImages.ts +++ /dev/null @@ -1,18 +0,0 @@ -import validateGif from "./validateGif"; -import validateIco from "./validateIco"; -import validateJpeg from "./validateJpeg"; -import validatePng from "./validatePng"; - -export default function validateAllImages(fileBuffer: Buffer): boolean { - // Check magic numbers to determine the mimetype - - const isGif: boolean = validateGif(fileBuffer); - - const isIco: boolean = validateIco(fileBuffer); - - const isJpeg: boolean = validateJpeg(fileBuffer); - - const isPng: boolean = validatePng(fileBuffer); - - return isGif || isIco || isJpeg || isPng; -} diff --git a/packages/typescript/src/isValidImage/validateGif.ts b/packages/typescript/src/isValidImage/validateGif.ts deleted file mode 100644 index baf7b71..0000000 --- a/packages/typescript/src/isValidImage/validateGif.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default function validateGif(fileBuffer: Buffer): boolean { - const isGif: boolean = - fileBuffer[0] == 0x47 && - fileBuffer[1] == 0x49 && - fileBuffer[2] == 0x46 && - fileBuffer[3] == 0x38; - - return isGif; -} diff --git a/packages/typescript/src/isValidImage/validateIco.ts b/packages/typescript/src/isValidImage/validateIco.ts deleted file mode 100644 index 1420ecd..0000000 --- a/packages/typescript/src/isValidImage/validateIco.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default function validateIco(fileBuffer: Buffer): boolean { - const isIco: boolean = - fileBuffer[0] === 0x00 && fileBuffer[1] === 0x00 && fileBuffer[2] === 0x01; - - return isIco; -} diff --git a/packages/typescript/src/isValidImage/validateJpeg.ts b/packages/typescript/src/isValidImage/validateJpeg.ts deleted file mode 100644 index 690ad05..0000000 --- a/packages/typescript/src/isValidImage/validateJpeg.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default function validateJpeg(fileBuffer: Buffer): boolean { - const isJpeg: boolean = - fileBuffer[0] === 0xff && fileBuffer[1] === 0xd8 && fileBuffer[2] === 0xff; - - return isJpeg; -} diff --git a/packages/typescript/src/isValidImage/validatePng.ts b/packages/typescript/src/isValidImage/validatePng.ts deleted file mode 100644 index 9da326b..0000000 --- a/packages/typescript/src/isValidImage/validatePng.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default function validatePng(fileBuffer: Buffer): boolean { - const isPng: boolean = - fileBuffer[0] === 0x89 && - fileBuffer[1] === 0x50 && - fileBuffer[2] === 0x4e && - fileBuffer[3] === 0x47; - - return isPng; -} diff --git a/packages/typescript/src/isValidPdf/index.ts b/packages/typescript/src/isValidPdf/index.ts deleted file mode 100644 index 5685950..0000000 --- a/packages/typescript/src/isValidPdf/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Checks if a given file buffer represents a valid PDF file. - * @param fileBuffer - The buffer containing the file data. - * @returns A boolean indicating whether the file is a valid PDF. - */ -function isValidPdf(fileBuffer: Buffer): boolean { - // Check magic numbers to determine the mimetype - const isPdf: boolean = - fileBuffer[0] === 0x25 && - fileBuffer[1] === 0x50 && - fileBuffer[2] === 0x44 && - fileBuffer[3] === 0x46; - return isPdf; -} -export default isValidPdf; diff --git a/packages/typescript/src/isValidTxt/index.ts b/packages/typescript/src/isValidTxt/index.ts deleted file mode 100644 index fbd608c..0000000 --- a/packages/typescript/src/isValidTxt/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Checks if a file buffer represents a valid text file. - * @param fileBuffer - The buffer containing the file data. - * @returns A boolean indicating whether the file is a valid text file. - */ -export default function isValidTxt(fileBuffer: Buffer): boolean { - if (fileBuffer.length === 0) { - return false; - } - for (let i: number = 0; i < fileBuffer.length; i++) { - if ( - (fileBuffer[i] < 0x20 || fileBuffer[i] > 0x7e) && - fileBuffer[i] !== 0x0a && - fileBuffer[i] !== 0x0d - ) { - return false; - } - } - return true; -} diff --git a/packages/typescript/src/isValidVideo/index.ts b/packages/typescript/src/isValidVideo/index.ts deleted file mode 100644 index bedb8db..0000000 --- a/packages/typescript/src/isValidVideo/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import validateAllVideos from "./validateAllVideos"; -import validateMkv from "./validateMkv"; -import validateMov from "./validateMov"; -import validateMp4 from "./validateMp4"; - -type VideoMimeType = "mkv" | "mov" | "mp4"; - -interface OptionsParams { - exclude: VideoMimeType[]; -} - -const defaultOptionsParams: OptionsParams = { - exclude: [], -}; - -/** - * Checks if a given file buffer represents a valid video file. - * @param fileBuffer - The buffer containing the file data. - * @description This function checks the magic numbers of the file buffer to determine if it is a valid video. - * @param options - An object containing the options for the function. - * @param options.exclude - An array of video types to exclude from the validation. - * - * type VideoMimeType = "mkv" | "mov" | "mp4"; - * - * If you want to exclude some video types from the validation, you can pass the options - * @example - isValidVideo(fileBuffer, { exclude: ["mov", "mkv"] }); - * @returns A boolean indicating whether the file is a valid video. - */ -function isValidVideo( - fileBuffer: Buffer, - options = defaultOptionsParams, -): boolean { - const excludedMimeTypes: VideoMimeType[] = options.exclude; - - if (excludedMimeTypes.length === 0) { - return validateAllVideos(fileBuffer); - } - - const listToValidate: VideoMimeType[] = ["mkv", "mov", "mp4"]; - - const filteredList: VideoMimeType[] = listToValidate.filter( - (mimeType: VideoMimeType) => !excludedMimeTypes.includes(mimeType), - ); - - if (filteredList.length === 0) { - return false; - } - - const isMkv: boolean = - filteredList.includes("mkv") && validateMkv(fileBuffer); - - const isMov: boolean = - filteredList.includes("mov") && validateMov(fileBuffer); - - const isMp4: boolean = - filteredList.includes("mp4") && validateMp4(fileBuffer); - - return isMkv || isMov || isMp4; -} -export default isValidVideo; diff --git a/packages/typescript/src/isValidVideo/validateAllVideos.ts b/packages/typescript/src/isValidVideo/validateAllVideos.ts deleted file mode 100644 index e5dba49..0000000 --- a/packages/typescript/src/isValidVideo/validateAllVideos.ts +++ /dev/null @@ -1,13 +0,0 @@ -import validateMkv from "./validateMkv"; -import validateMov from "./validateMov"; -import validateMp4 from "./validateMp4"; - -export default function validateAllVideos(fileBuffer: Buffer): boolean { - const isMp4: boolean = validateMp4(fileBuffer); - - const isMov: boolean = validateMov(fileBuffer); - - const isMkv: boolean = validateMkv(fileBuffer); - - return isMp4 || isMov || isMkv; -} diff --git a/packages/typescript/src/isValidVideo/validateMkv.ts b/packages/typescript/src/isValidVideo/validateMkv.ts deleted file mode 100644 index ae6aef5..0000000 --- a/packages/typescript/src/isValidVideo/validateMkv.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default function validateMkv(fileBuffer: Buffer): boolean { - const isMkv: boolean = - fileBuffer[0] === 0x1a && - fileBuffer[1] === 0x45 && - fileBuffer[2] === 0xdf && - fileBuffer[3] === 0xa3; - - return isMkv; -} diff --git a/packages/typescript/src/isValidVideo/validateMov.ts b/packages/typescript/src/isValidVideo/validateMov.ts deleted file mode 100644 index f0596b9..0000000 --- a/packages/typescript/src/isValidVideo/validateMov.ts +++ /dev/null @@ -1,17 +0,0 @@ -export default function validateMov(fileBuffer: Buffer): boolean { - const isMov: boolean = - fileBuffer[0] === 0x00 && - fileBuffer[1] === 0x00 && - fileBuffer[2] === 0x00 && - fileBuffer[3] === 0x14 && - fileBuffer[4] === 0x66 && - fileBuffer[5] === 0x74 && - fileBuffer[6] === 0x79 && - fileBuffer[7] === 0x70 && - fileBuffer[8] === 0x71 && - fileBuffer[9] === 0x74 && - fileBuffer[10] === 0x20 && - fileBuffer[11] === 0x20; - - return isMov; -} diff --git a/packages/typescript/src/isValidVideo/validateMp4.ts b/packages/typescript/src/isValidVideo/validateMp4.ts deleted file mode 100644 index 9689f71..0000000 --- a/packages/typescript/src/isValidVideo/validateMp4.ts +++ /dev/null @@ -1,37 +0,0 @@ -export default function validateMp4(fileBuffer: Buffer): boolean { - const isMp4: boolean = - (fileBuffer[0] === 0x00 && - fileBuffer[1] === 0x00 && - fileBuffer[2] === 0x00 && - fileBuffer[3] === 0x20 && - fileBuffer[4] === 0x66 && - fileBuffer[5] === 0x74 && - fileBuffer[6] === 0x79 && - fileBuffer[7] === 0x70 && - fileBuffer[8] === 0x6d && - fileBuffer[9] === 0x70 && - fileBuffer[10] === 0x34 && - fileBuffer[11] === 0x32) || - (fileBuffer[0] === 0x00 && - fileBuffer[1] === 0x00 && - fileBuffer[2] === 0x00 && - fileBuffer[3] === 0x18 && - fileBuffer[4] === 0x66 && - fileBuffer[5] === 0x74 && - fileBuffer[6] === 0x79 && - fileBuffer[7] === 0x70) || - (fileBuffer[0] === 0x00 && - fileBuffer[1] === 0x00 && - fileBuffer[2] === 0x00 && - fileBuffer[3] === 0x1c && - fileBuffer[4] === 0x66 && - fileBuffer[5] === 0x74 && - fileBuffer[6] === 0x79 && - fileBuffer[7] === 0x70 && - fileBuffer[8] === 0x69 && - fileBuffer[9] === 0x73 && - fileBuffer[10] === 0x6f && - fileBuffer[11] === 0x6d); - - return isMp4; -} diff --git a/packages/typescript/src/passwordStrengthTester.ts b/packages/typescript/src/passwordStrengthTester.ts deleted file mode 100644 index 9d7394e..0000000 --- a/packages/typescript/src/passwordStrengthTester.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @description Avalia a força de uma senha e retorna o tipo de força da senha. - * - * @returns O tipo de força da senha ('veryWeak', 'weak', 'regular', 'strong' ou 'veryStrong'). - * - * @example - * passwordStrengthTester('12345'); // Output: 'veryWeak' - * - * @example - * passwordStrengthTester('abcdef'); // Output: 'weak' - * - * @example - * passwordStrengthTester('abc12345'); // Output: 'regular' - * - * @example - * passwordStrengthTester('Abc123awdasd'); // Output: 'strong' - * - * @example - * passwordStrengthTester('SuperSecurePassword123!@'); // Output: 'veryStrong' - */ -function passwordStrengthTester(password: string): string { - if (typeof password !== "string") { - throw new TypeError("The input should be a string."); - } - const passwordLength: number = password.length; - let strengthType: string = "unknow"; - switch (true) { - case passwordLength <= 5 && /^\d+$/.test(password): - strengthType = "veryWeak"; - break; - - case (passwordLength <= 5 && /^[a-zA-Z0-9]+$/.test(password)) || - (passwordLength >= 6 && - /^[a-zA-Z0-9]+$/.test(password) && - passwordLength <= 7) || - (passwordLength < 10 && /(.)\1{3,}/.test(password)) || - (passwordLength >= 5 && passwordLength <= 8 && /^\d+$/.test(password)): - strengthType = "weak"; - break; - - case /(.)\1{5,}/.test(password) && passwordLength > 10: - strengthType = "regular"; - break; - - case passwordLength > 16 || - (password.length >= 8 && - /[A-Z]/.test(password) && - /[a-z]/.test(password) && - /[0-9]/.test(password) && - /[\W_]/.test(password)): - strengthType = "veryStrong"; - break; - - case (passwordLength >= 13 && passwordLength <= 16) || - (password.length >= 8 && - /[A-Z]/.test(password) && - /[a-z]/.test(password) && - /[0-9]/.test(password)): - strengthType = "strong"; - break; - - case (passwordLength >= 9 && passwordLength <= 12) || - (password.length >= 6 && - password.length <= 8 && - /[0-9]/.test(password) && - /[a-zA-Z]/.test(password)): - strengthType = "regular"; - break; - - default: - break; - } - return strengthType; -} - -export default passwordStrengthTester; diff --git a/packages/typescript/src/types/index.ts b/packages/typescript/src/types/index.ts deleted file mode 100644 index 6b142cf..0000000 --- a/packages/typescript/src/types/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type ValidateFunctions = - | { - isValid: true; - errorMsg: null; - } - | { - isValid: false; - errorMsg: string; - }; - -export interface ValidatePassportNumber { - isValid: boolean; - country: string | null; -} - -export type IsValidFunctions = boolean; diff --git a/packages/typescript/src/validateBRPhoneNumber.ts b/packages/typescript/src/validateBRPhoneNumber.ts deleted file mode 100644 index a7bfeb4..0000000 --- a/packages/typescript/src/validateBRPhoneNumber.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "Field phone number cannot be empty", - "Invalid phone number", - "Unknown error", -]; -/** - * @param phoneNumber - * @param errorMsg optional - * @example validateBRPhoneNumber('(11) 98765-4321'); - * @example validateBRPhoneNumber('(11) 98765-4321', ['Invalid phone number', 'Invalid format', 'Unknown error']); - * @description This function returns three errors in the following order: - * - * Default: - * ['Field phone number cannot be empty', 'Invalid phone number', 'Unknown error'] - * - * Create a list of errors separated by commas in strings - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateBRPhoneNumber( - phoneNumber: string, - errorMsg: (string | null)[] | null = defaultErrorMsg, -): ValidateFunctions { - if (typeof phoneNumber !== "string") { - throw new TypeError("The input should be a string."); - } - // Check to see if the passed error messages are valid; otherwise, return an error - if (errorMsg) { - if (!Array.isArray(errorMsg)) throw new Error("errorMsg must be an Array"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - // Internal function to get the error message - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if (!phoneNumber) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - // Regular expression to validate Brazilian phone numbers - const brPhoneNumberRegex: RegExp = /^\(\d{2}\) \d{5}-\d{4}$/; - try { - if (!brPhoneNumberRegex.test(phoneNumber)) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } -} -export default validateBRPhoneNumber; diff --git a/packages/typescript/src/validateEmail.ts b/packages/typescript/src/validateEmail.ts deleted file mode 100644 index 96a546c..0000000 --- a/packages/typescript/src/validateEmail.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { ValidateFunctions } from "./types"; -import isEmail from "./isEmail"; - -const defaultErrorMsg: string[] = [ - "Email cannot be empty", - "This e-mail is not valid", - "Email too big, try again", - "This email is not valid in the country", - "Email domain is not allowed.", - "Unknown error", -]; - -const validDomainsDefault: string[] = [ - "@gmail.com", - "@outlook.com", - "@yahoo.com", - "@icloud.com", - "@hotmail.com", - "@mail.ru", - "@yandex.ru", - "@gmx.com", - "@zoho.com", - "@protonmail.com", - "@protonmail.ch", -]; - -interface OptionsParams { - maxLength?: number; - country?: string; - errorMsg?: (string | null)[]; - validDomains?: boolean | string[]; -} - -const defaultOptionsParams: OptionsParams = { - maxLength: undefined, - country: "", - errorMsg: defaultErrorMsg, - validDomains: false, -}; - -/** - * @param email - * @param maxLength optional - * @param country optional - * @param errorMsg optional - * @param validDomains optional - * @default maxLength number: 400, validDomains = false - * @example validateEmail('foor@bar.com', { maxLength: 30, country: "us" }); - * @example validateEmail('foor@bar.com', { maxLength: 30 }); - * @example validateEmail('foor@bar.com', { maxLength: 30, errorMsg: ['My own error message'] }); Country is set to null - * @example validateEmail('joao@myOwnDomain.com', { validDomains: ['@myOwnDomain.com'] }); - * @example validateEmail('joaoaoao@gmail.com.com', { validDomains: true } ); - * @description This function returns six errors in the following order, - * - * If you want to use a default parameter, use null. - * - * Default: - * ['Email cannot be empty', 'This e-mail is not valid', 'Email cannot be greater than ${maxEmailLength} characters', 'This email is not valid in the country','Email domain is not allowed.', 'Unknown error'] - * - * Create a list of errors separated by commas in strings - * - * @description You can also pass a list of domains that will be allowed, if you leave the parameter empty, it will be set to false and no check will be performed, you can also pass only true and the following list will be used by default: - * - * Default: - * ['@gmail.com', '@outlook.com', '@yahoo.com', '@icloud.com', '@hotmail.com', - '@mail.ru', '@yandex.ru', '@gmx.com', '@zoho.com', '@protonmail.com', '@protonmail.ch']; - - * You can also create a custom list, your list will completely replace the default list. - - DOCUMENTATION: https://gabriel-logan.github.io/multiform-validator/srcPage/subPages/functions/validateEmail - - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateEmail( - email: string, - { - maxLength, - country, - errorMsg, - validDomains, - }: OptionsParams = defaultOptionsParams, -): ValidateFunctions { - if (typeof email !== "string") { - throw new TypeError("The input should be a string."); - } - - // Expressão regular para verificar se o e-mail termina com um dos domínios válidos - let regex: RegExp = /(?:)/; // Inicialização com uma expressão regular vazia - - if (Array.isArray(validDomains) && validDomains.length > 0) { - const validDomainsCustom: string[] = validDomains.map((domain: string) => - domain.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), - ); - regex = new RegExp(`${validDomainsCustom.join("|")}$`, "i"); - } else if (validDomains) { - regex = new RegExp(`${validDomainsDefault.join("|")}$`, "i"); - } - - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - const maxEmailLength: number = maxLength || 400; - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg - ? errorMsg[index] - : defaultErrorMsg[index]; - if (errorMessage === "Email too big, try again") { - return `Email cannot be greater than ${maxEmailLength} characters`; - } - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if (!email) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - - if (maxEmailLength < 1 || typeof maxEmailLength !== "number") - throw new Error("maxLength must be a number and cannot be less than 1"); - - try { - // Check domain only if regex is defined (validDomains is true or validDomains is an array) - if (!regex.test(email)) { - return { - isValid: false, - errorMsg: getErrorMessage(4), - }; - } - if (!isEmail(email)) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - if (email.length > maxEmailLength) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } - // If country is provided, check if the email ends with the country code - if (country) { - if (!email.endsWith(`.${country}`)) { - return { - isValid: false, - errorMsg: getErrorMessage(3), - }; - } - } - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(5), - }; - } -} -export default validateEmail; diff --git a/packages/typescript/src/validateName.ts b/packages/typescript/src/validateName.ts deleted file mode 100644 index da78cbc..0000000 --- a/packages/typescript/src/validateName.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "Name cannot be empty", - "Name cannot contain numbers", - "Name cannot contain special characters", - "This name is not valid", - "Name too big, try again", - "Unknown error", -]; - -interface OptionsParams { - minLength?: number; - maxLength?: number; - errorMsg?: (string | null)[]; -} - -const defaultOptionsParams: OptionsParams = { - minLength: undefined, - maxLength: undefined, - errorMsg: defaultErrorMsg, -}; - -/** - * @param name - * @param minLength - * @param maxLength - * @param errorMsg - * @default minLength number: default: 1 - * @default maxLength number: default: 20 - * @example validateName('John', { minLength: 2, maxLength: 20 }); // Returns { isValid: true, errorMsg: null } - * @info minLength cannot be greater than maxLength - * @description This function returns 6 errors in the following order, - * - * default: - * - * [ - 'Name cannot be empty', - 'Name cannot contain numbers', - 'Name cannot contain special characters', - 'This name is not valid', - 'Name too big, try again', - 'Unknown error', -]; - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateName( - name: string, - { minLength, maxLength, errorMsg }: OptionsParams = defaultOptionsParams, -): ValidateFunctions { - if (typeof name !== "string") { - throw new TypeError("The input should be a string."); - } - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - const minNameLength: number = minLength || 1; - const maxNameLength: number = maxLength || 20; - - if ( - maxNameLength < 1 || - minNameLength < 1 || - typeof minNameLength !== "number" || - typeof maxNameLength !== "number" - ) { - throw new Error( - "maxLength or minLength must be a number and cannot be less than 1", - ); - } - - if (minNameLength > maxNameLength) { - throw new Error("minLength cannot be greater than maxLength"); - } - - if (!name) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - try { - if (name.length > maxNameLength) { - return { - isValid: false, - errorMsg: getErrorMessage(4), - }; - } - if (name.length < minNameLength) { - return { - isValid: false, - errorMsg: getErrorMessage(3), - }; - } - - if (name.match(/\d/)) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - - if (name.match(/[^\w\s]/)) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } - - // Check if all characters in the name are repeated - if (new Set(name).size === 1) { - return { - isValid: false, - errorMsg: getErrorMessage(3), // Assuming 'Name is not allowed.' refers to all characters being repeated. - }; - } - - // Check if the name contains at least 3 consecutive characters that are the same - const consecutiveCharsRegex: RegExp = /(\w)\1\1/; - if (consecutiveCharsRegex.test(name)) { - return { - isValid: false, - errorMsg: getErrorMessage(3), // You can set the appropriate error message for this case. - }; - } - - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(5), - }; - } -} - -export default validateName; diff --git a/packages/typescript/src/validatePassportNumber.ts b/packages/typescript/src/validatePassportNumber.ts deleted file mode 100644 index e78ae98..0000000 --- a/packages/typescript/src/validatePassportNumber.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ValidatePassportNumber } from "./types"; - -/** - * @example validatePassportNumber('A1234567'); - * @example validatePassportNumber('123456789'); - * @description Values have to be passed as a string - * @returns return { isValid: boolean, country: string } - */ -function validatePassportNumber( - passaportNumber: string, -): ValidatePassportNumber { - // Verificar se o parâmetro é uma string - if (typeof passaportNumber !== "string") { - throw new TypeError("The input should be a string."); - } - // Remover espaços em branco antes de realizar a validação - const cleanedPassportNumber: string = passaportNumber.replace(/\s/g, ""); - // Mapear os formatos comuns de passaporte e seus respectivos países - const passportFormats: { - country: string; - regex: RegExp; - }[] = [ - { country: "United States", regex: /^[0-9]{9}$/ }, - { country: "United Kingdom", regex: /^[A-Z]{2}[0-9]{6}$/ }, - { country: "Germany", regex: /^[A-Z]{2}[0-9]{8}$/ }, - { country: "Canada", regex: /^[A-Z][0-9]{7}$/ }, - { country: "Australia", regex: /^[A-Z][0-9]{7}$/ }, - { country: "Brazil", regex: /^[0-9]{9}$/ }, - { country: "France", regex: /^[A-Z]{2}[0-9]{7}$/ }, - { country: "Italy", regex: /^[A-Z][0-9]{7}$/ }, - { country: "India", regex: /^[A-Z][0-9]{7}$/ }, - { country: "China", regex: /^[A-Z][0-9]{8}$/ }, - ]; - // Verificar o formato do passaporte antes de verificar o país - for (const format of passportFormats) { - if (format.regex.test(cleanedPassportNumber)) { - return { isValid: true, country: format.country }; - } - } - // Caso o formato não seja válido, retornar { isValid: false, country: null } - return { isValid: false, country: null }; -} - -export default validatePassportNumber; diff --git a/packages/typescript/src/validatePassword.ts b/packages/typescript/src/validatePassword.ts deleted file mode 100644 index afde7a2..0000000 --- a/packages/typescript/src/validatePassword.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "This password is too long", - "password too short", - "Password requires at least one capital letter", - "Password requires at least one special character", - "Password requires at least one number", - "Password requires at least one letter", - "Unknown error", -]; - -interface Options { - requireUppercase?: boolean; - requireSpecialChar?: boolean; - requireNumber?: boolean; - requireString?: boolean; -} - -interface OptionsParams { - minLength?: number; - maxLength?: number; - options?: Options; - errorMsg?: (string | null)[]; -} - -const defaultOptionsParams: OptionsParams = { - minLength: undefined, - maxLength: undefined, - options: { - requireUppercase: false, - requireSpecialChar: false, - requireNumber: false, - requireString: false, - }, - errorMsg: defaultErrorMsg, -}; - -/** - * @param password - * @param minLength optional - * @param maxLength optional - * @param options optional - * @param options.requireUppercase optional - * @param options.requireSpecialChar optional - * @param options.requireNumber optional - * @param options.requireString optional - * @param errorMsg optional - * @default minLength number: 1 - * @default maxLength number: Infinity - * @default {requireUppercase}: false - * @default {requireSpecialChar}: false -> Examples !@#$%^&*(),.?":{}|<> - * @default {requireNumber}: false - * @default {requireString}: false - * @example validatePassword('MyP@ssw0rd', { minLength: 8, maxLength: 20, options: { requireUppercase: true, requireSpecialChar: true, requireNumber: true, requireString: true } }); - * @info minLength cannot be greater than maxLength - * @description This function returns 7 errors in the following order, - * - * If you want to use a default parameter, use null. - * - * Default: - * [ - 'This password is too long',// Password must be between ${minLenthPassword} and ${maxLenthPassword} characters - 'password too short',// Password must be between ${minLenthPassword} and ${maxLenthPassword} characters - 'Requires at least one capital letter', - 'Requires at least one special character', - 'Requires at least one number', - 'Requires at least one letter', - 'Unknown error', -]; - - * - * Create a list of errors separated by commas in strings - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validatePassword( - password: string, - { - minLength, - maxLength, - options, - errorMsg, - }: OptionsParams = defaultOptionsParams, -): ValidateFunctions { - if (typeof password !== "string") { - throw new TypeError("The input should be a string."); - } - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - const minLenthPassword: number = minLength || 1; - const maxLenthPassword: number = maxLength || Infinity; - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg - ? errorMsg[index] - : defaultErrorMsg[index]; - if ( - errorMessage === "This password is too long" || - errorMessage === "password too short" - ) { - if (maxLenthPassword === Infinity) { - return `Password must be greater than ${minLenthPassword} characters`; - } - return `Password must be between ${minLenthPassword} and ${maxLenthPassword} characters`; - } - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if ( - typeof minLenthPassword !== "number" || - typeof maxLenthPassword !== "number" - ) { - throw new Error("maxLength and/or minLength must be a number"); - } - - if (minLenthPassword > maxLenthPassword) { - throw new Error("the minimum size cannot be larger than the maximum"); - } // Verifica se o min é maior que o max - - if (minLenthPassword < 1 || maxLenthPassword < 1) { - throw new Error("No size can be smaller than 1"); - } // Nenhum dos dois pode ser menor que 1 - - try { - if (password.length > maxLenthPassword) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } // Tamanho da palavra não pode ser maior que o tamanho máximo - if (password.length < minLenthPassword) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } // Tamanho n pode ser menor q o min - if (options?.requireUppercase && !/[A-Z]/.test(password)) { - return { - isValid: false, - errorMsg: getErrorMessage(2), // Requer pelo menos uma letra maiuscula - }; - } - if ( - options?.requireSpecialChar && - !/[!@#$%^&*(),.?":{}|<>]/.test(password) - ) { - return { - isValid: false, - errorMsg: getErrorMessage(3), // Requer pelo menos uma especial caracter - }; - } - if (options?.requireNumber && !/\d/.test(password)) { - return { - isValid: false, - errorMsg: getErrorMessage(4), // Requer pelo menos um numero - }; - } - if (options?.requireString && !/[a-zA-Z]/.test(password)) { - return { - isValid: false, - errorMsg: getErrorMessage(5), // Requer pelo menos uma letra - }; - } - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(6), - }; - } -} - -export default validatePassword; diff --git a/packages/typescript/src/validatePhoneNumber.ts b/packages/typescript/src/validatePhoneNumber.ts deleted file mode 100644 index 18b233a..0000000 --- a/packages/typescript/src/validatePhoneNumber.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "Phone number cannot be empty", - "Invalid phone number", - "Unknown error", -]; -/** - * @param phoneNumber - * @param errorMsg optional - * @example validatePhoneNumber('555-123-4567'); - * @example validatePhoneNumber('(555) 123-4567', [null, 'Custom error 2']); - * @default {errorMsg} ['Phone number cannot be empty', 'Invalid phone number', 'Unknown error'] - * @description This function is a generic phone number validator. It can validate phone numbers in various formats depending on the specific implementation. - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validatePhoneNumber( - phoneNumber: string, - errorMsg: (string | null)[] | null = defaultErrorMsg, -): ValidateFunctions { - if (typeof phoneNumber !== "string") { - throw new TypeError("The input should be a string."); - } - // Check to see if the passed error messages are valid; otherwise, return an error - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - // Internal function to get the error message - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if (!phoneNumber) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - - // Add specific phone number validation logic here for different countries/formats - // For the generic implementation, we'll use a dummy regex that matches any string. - // Updated regular expression for phone number validation - - const phoneNumberRegex: RegExp = /^\(\d{3}\) \d{3}-\d{4}$/; - try { - if (!phoneNumberRegex.test(phoneNumber)) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } -} -export default validatePhoneNumber; diff --git a/packages/typescript/src/validateSurname.ts b/packages/typescript/src/validateSurname.ts deleted file mode 100644 index 5b41a86..0000000 --- a/packages/typescript/src/validateSurname.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "Surname cannot be empty", - "Surname cannot contain numbers", - "Surname cannot contain special characters", - "This surname is not valid", - "Surname too big, try again", - "Unknown error", -]; - -interface OptionsParams { - minLength?: number; - maxLength?: number; - errorMsg?: (string | null)[]; -} - -const defaultOptionsParams: OptionsParams = { - minLength: undefined, - maxLength: undefined, - errorMsg: defaultErrorMsg, -}; - -/** - * @param surname - * @param minLength - * @param maxLength - * @param errorMsg - * @default minLength number: default: 1 - * @default maxLength number: default: 25 - * @example validateSurname('Jackson', { minLength: 3, maxLength: 25 }); - * @info minLength cannot be greater than maxLength - * @description This function returns 6 errors in the following order, - * - * default: - * - * [ - 'Surname cannot be empty', - 'Surname cannot contain numbers', - 'Surname cannot contain special characters', - 'This surname is not valid', - 'Surname too big, try again', - 'Unknown error', -]; - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateSurname( - surname: string, - { minLength, maxLength, errorMsg }: OptionsParams = defaultOptionsParams, -): ValidateFunctions { - if (typeof surname !== "string") { - throw new TypeError("The input should be a string."); - } - - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - const minNameLength: number = minLength || 1; - const maxNameLength: number = maxLength || 25; - - if ( - maxNameLength < 1 || - minNameLength < 1 || - typeof minNameLength !== "number" || - typeof maxNameLength !== "number" - ) { - throw new Error( - "maxLength or minLength must be a number and cannot be less than 1", - ); - } - - if (minNameLength > maxNameLength) { - throw new Error("minLength cannot be greater than maxLength"); - } - - if (!surname) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - - try { - if (surname.length > maxNameLength) { - return { - isValid: false, - errorMsg: getErrorMessage(4), - }; - } - if (surname.length < minNameLength) { - return { - isValid: false, - errorMsg: getErrorMessage(3), - }; - } - - if (surname.match(/\d/)) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - - if (surname.match(/[^\w\s]/)) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } - - // Check if all characters in the surname are repeated - if (new Set(surname).size === 1) { - return { - isValid: false, - errorMsg: getErrorMessage(3), // Assuming 'Surname is not allowed.' refers to all characters being repeated. - }; - } - - // Check if the surname contains at least 3 consecutive characters that are the same - const consecutiveCharsRegex: RegExp = /(\w)\1\1/; - if (consecutiveCharsRegex.test(surname)) { - return { - isValid: false, - errorMsg: getErrorMessage(3), // You can set the appropriate error message for this case. - }; - } - - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(5), - }; - } -} -export default validateSurname; diff --git a/packages/typescript/src/validateTextarea.ts b/packages/typescript/src/validateTextarea.ts deleted file mode 100644 index 3615410..0000000 --- a/packages/typescript/src/validateTextarea.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "This textarea is too big", - "Can not be empty", - "Unknown error", -]; - -interface OptionsParams { - isRequired: boolean; - maxLength?: number; - errorMsg?: (string | null)[]; -} - -const defaultOptionsParams: OptionsParams = { - isRequired: false, - maxLength: undefined, - errorMsg: defaultErrorMsg, -}; - -/** - * @default isRequired boolean: default: false - * @default maxLength number: default: 50 - * @description This function returns 2 errors in the following order, - * - * default: - * [ - 'Textarea cannot exceed ${maxTextAreaLength} characters', - 'Can not be empty', - 'Unknown error', -]; - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateTextarea( - textarea: string, - { isRequired, maxLength, errorMsg }: OptionsParams = defaultOptionsParams, -): ValidateFunctions { - if (typeof textarea !== "string") { - throw new TypeError("The input should be a string."); - } - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - - const maxTextAreaLength: number = maxLength || 50; - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg - ? errorMsg[index] - : defaultErrorMsg[index]; - - if (errorMessage === "This textarea is too big") { - return `Textarea cannot exceed ${maxTextAreaLength} characters`; - } - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if (maxTextAreaLength < 1 || typeof maxTextAreaLength !== "number") { - throw new Error( - "maxLength or minLength must be a number and cannot be less than 1", - ); - } - if (textarea === "" && isRequired) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - - try { - if (textarea.length > maxTextAreaLength) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } -} -export default validateTextarea; diff --git a/packages/typescript/src/validateUSPhoneNumber.ts b/packages/typescript/src/validateUSPhoneNumber.ts deleted file mode 100644 index db434a6..0000000 --- a/packages/typescript/src/validateUSPhoneNumber.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const defaultErrorMsg: string[] = [ - "US phone number cannot be empty", - "Invalid phone number", - "Unknown error", -]; - -/** - * @param phoneNumber - * @param errorMsg optional - * @example validateUSPhoneNumber('555-123-4567'); - * @example validateUSPhoneNumber('(555) 123-4567', [null, 'Custom error 2']); - * @description This function validates phone numbers in the USA. It supports various formats, including "XXX-XXX-XXXX", "(XXX) XXX-XXXX", and "1 (XXX) XXX-XXXX". - * @default {errorMsg} "['US phone number cannot be empty', 'Invalid phone number', 'Unknown error']" - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateUSPhoneNumber( - phoneNumber: string, - errorMsg: (string | null)[] | null = defaultErrorMsg, -): ValidateFunctions { - if (typeof phoneNumber !== "string") { - throw new TypeError("The input should be a string."); - } - // Check to see if the passed error messages are valid; otherwise, return an error - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - // Regular expression to validate USA phone numbers - const usPhoneNumberRegex: RegExp = - /^(1\s?)?(\(\d{3}\)|\d{3})(\s?|-)\d{3}(\s?|-)\d{4}$/; - // Internal function to get the error message - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg ? errorMsg[index] : null; - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if (!phoneNumber) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - try { - if (!usPhoneNumberRegex.test(phoneNumber)) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } -} - -export default validateUSPhoneNumber; diff --git a/packages/typescript/src/validateUsername.ts b/packages/typescript/src/validateUsername.ts deleted file mode 100644 index 30f3c7e..0000000 --- a/packages/typescript/src/validateUsername.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { ValidateFunctions } from "./types"; - -const regexHasSpaces: RegExp = /\s/; -const regexOnlyNumbers: RegExp = /^\d+$/; -const regexStartsWithNumber: RegExp = /^\d/; -const defaultErrorMsg: string[] = [ - "Username cannot be empty", - "username too short", - "This username is too long", - "Username cannot contain spaces", - "Cannot start with a number", - "Cannot contain only numbers", - "Unknown error", -]; - -interface OptionsParams { - minLength?: number; - maxLength?: number; - errorMsg?: (string | null)[]; -} - -const defaultOptionsParams: OptionsParams = { - minLength: undefined, - maxLength: undefined, - errorMsg: defaultErrorMsg, -}; - -/** - * @param username - * @param minLength optional - * @param maxLength optional - * @param errorMsg optional - * @default minLength number: 1 - * @default maxLength number: Infinity - * @example validateUsername('User999', { minLength: 8, maxLength: 20 }); - * @example validateUsername('User999', { minLength: 8, maxLength: 20, errorMsg: ['My own errorsMsg'] }); - * @info minLength cannot be greater than maxLength - * @description This function returns 7 errors in the following order, - * - * If you want to use a default parameter, use null. - * - * Default: - * [ - 'Username cannot be empty', - 'Username must be between ${maxLenthUsername} and ${maxLenthUsername} characters', - 'Username must be between ${maxLenthUsername} and ${maxLenthUsername} characters', - 'Username cannot contain spaces', - 'Cannot start with a number', - 'Cannot contain only numbers', - 'Unknown error' -]; - * - * Create a list of errors separated by commas in strings - * @returns An object with 'isValid' (boolean) and 'errorMsg' (string) properties. - */ -function validateUsername( - username: string, - { minLength, maxLength, errorMsg }: OptionsParams = defaultOptionsParams, -): ValidateFunctions { - if (typeof username !== "string") { - throw new TypeError("The input should be a string."); - } - // Check para saber se as mensagens que sao passadas sao validas - // caso contrario retorna um ERRO - if (errorMsg) { - if (!Array.isArray(errorMsg)) - throw new Error("errorMsg must be an Array or null"); - for (let index: number = 0; index < errorMsg.length; index += 1) { - if (errorMsg[index] != null && typeof errorMsg[index] !== "string") { - throw new TypeError( - "All values within the array must be strings or null/undefined.", - ); - } - } - } - const minLenthUsername: number = minLength || 1; - const maxLenthUsername: number = maxLength || Infinity; - - // Função interna para obter a mensagem de erro - function getErrorMessage(index: number): string { - const errorMessage: string | null = errorMsg - ? errorMsg[index] - : defaultErrorMsg[index]; - if ( - errorMessage === "username too short" || - errorMessage === "This username is too long" - ) { - if (maxLenthUsername === Infinity) { - return `Username must be greater than ${maxLenthUsername} characters`; - } - return `Username must be between ${minLenthUsername} and ${maxLenthUsername} characters`; - } - return errorMessage != null ? errorMessage : defaultErrorMsg[index]; - } - - if (!username) { - return { - isValid: false, - errorMsg: getErrorMessage(0), - }; - } - - if ( - typeof minLenthUsername !== "number" || - typeof maxLenthUsername !== "number" - ) { - throw new Error("maxLength or minLength must be a number"); - } - if (minLenthUsername > maxLenthUsername) { - throw new Error("Minimum cannot be greater than maximum"); - } // Verifica se o min é maior que o max - if (minLenthUsername < 1 || maxLenthUsername < 1) { - throw new Error("Size parameters cannot be less than one"); - } // Nenhum dos dois pode ser menor que 1 - try { - if (regexHasSpaces.test(username)) { - return { - isValid: false, - errorMsg: getErrorMessage(3), - }; - } - if (regexOnlyNumbers.test(username)) { - return { - isValid: false, - errorMsg: getErrorMessage(5), - }; - } - if (regexStartsWithNumber.test(username)) { - return { - isValid: false, - errorMsg: getErrorMessage(4), - }; - } - if (username.length < minLenthUsername) { - return { - isValid: false, - errorMsg: getErrorMessage(1), - }; - } // Tamanho n pode ser menor q o min - if (username.length > maxLenthUsername) { - return { - isValid: false, - errorMsg: getErrorMessage(2), - }; - } // Tamanho da palavra não pode ser maior que o tamanho máximo - - // Define os caracteres especiais - const specialChars: string[] = [ - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "(", - ")", - "-", - "_", - "=", - "+", - "[", - "]", - "{", - "}", - "|", - "\\", - ";", - ":", - "'", - '"', - ",", - ".", - "<", - ">", - "/", - "?", - ]; - - // Cria um objeto para contar a ocorrência de cada caractere especial - const charCount: { [key: string]: number } = {}; - - // Itera sobre a string para contar os caracteres especiais - for (const char of username) { - if (specialChars.includes(char)) { - charCount[char] = (charCount[char] || 0) + 1; - if (charCount[char] > 2) { - return { - isValid: false, - errorMsg: "Username cannot contain multiple special characters", - }; - } - } - } - - return { - isValid: true, - errorMsg: null, - }; - } catch (error) { - return { - isValid: false, - errorMsg: getErrorMessage(6), - }; - } -} -export default validateUsername; diff --git a/packages/typescript/tests/assets/isValidAudio/invalid/invalid.mp3 b/packages/typescript/tests/assets/isValidAudio/invalid/invalid.mp3 deleted file mode 100644 index fdb6955..0000000 --- a/packages/typescript/tests/assets/isValidAudio/invalid/invalid.mp3 +++ /dev/null @@ -1 +0,0 @@ -asdasdasd diff --git a/packages/typescript/tests/assets/isValidAudio/invalid/invalid.wav b/packages/typescript/tests/assets/isValidAudio/invalid/invalid.wav deleted file mode 100644 index fdb6955..0000000 --- a/packages/typescript/tests/assets/isValidAudio/invalid/invalid.wav +++ /dev/null @@ -1 +0,0 @@ -asdasdasd diff --git a/packages/typescript/tests/assets/isValidAudio/valid/valid.mp3 b/packages/typescript/tests/assets/isValidAudio/valid/valid.mp3 deleted file mode 100644 index 3636d9b..0000000 Binary files a/packages/typescript/tests/assets/isValidAudio/valid/valid.mp3 and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidAudio/valid/valid.wav b/packages/typescript/tests/assets/isValidAudio/valid/valid.wav deleted file mode 100644 index f16fc4e..0000000 Binary files a/packages/typescript/tests/assets/isValidAudio/valid/valid.wav and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.avif b/packages/typescript/tests/assets/isValidImage/invalid/invalid.avif deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.avif +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.gif b/packages/typescript/tests/assets/isValidImage/invalid/invalid.gif deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.gif +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.ico b/packages/typescript/tests/assets/isValidImage/invalid/invalid.ico deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.ico +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.jpg b/packages/typescript/tests/assets/isValidImage/invalid/invalid.jpg deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.jpg +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.png b/packages/typescript/tests/assets/isValidImage/invalid/invalid.png deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.png +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.svg b/packages/typescript/tests/assets/isValidImage/invalid/invalid.svg deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.svg +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/invalid/invalid.webp b/packages/typescript/tests/assets/isValidImage/invalid/invalid.webp deleted file mode 100644 index 6d80311..0000000 --- a/packages/typescript/tests/assets/isValidImage/invalid/invalid.webp +++ /dev/null @@ -1 +0,0 @@ -asdasdasdsdasdaSADASDASDASDASDASDASDASD diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.avif b/packages/typescript/tests/assets/isValidImage/valid/valid.avif deleted file mode 100644 index d4f1eab..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid.avif and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.gif b/packages/typescript/tests/assets/isValidImage/valid/valid.gif deleted file mode 100644 index f8f3854..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid.gif and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.ico b/packages/typescript/tests/assets/isValidImage/valid/valid.ico deleted file mode 100644 index a13b806..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid.ico and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.jpg b/packages/typescript/tests/assets/isValidImage/valid/valid.jpg deleted file mode 100644 index a3525f4..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid.jpg and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.png b/packages/typescript/tests/assets/isValidImage/valid/valid.png deleted file mode 100644 index 4621f63..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid.png and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.svg b/packages/typescript/tests/assets/isValidImage/valid/valid.svg deleted file mode 100644 index 734e42d..0000000 --- a/packages/typescript/tests/assets/isValidImage/valid/valid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid.webp b/packages/typescript/tests/assets/isValidImage/valid/valid.webp deleted file mode 100644 index 1d88cf2..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid.webp and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidImage/valid/valid2.png b/packages/typescript/tests/assets/isValidImage/valid/valid2.png deleted file mode 100644 index 8480c89..0000000 Binary files a/packages/typescript/tests/assets/isValidImage/valid/valid2.png and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidPdf/invalid.pdf b/packages/typescript/tests/assets/isValidPdf/invalid.pdf deleted file mode 100644 index db4de23..0000000 Binary files a/packages/typescript/tests/assets/isValidPdf/invalid.pdf and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidPdf/valid.pdf b/packages/typescript/tests/assets/isValidPdf/valid.pdf deleted file mode 100644 index a416f3f..0000000 Binary files a/packages/typescript/tests/assets/isValidPdf/valid.pdf and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidTxt/invalid.txt b/packages/typescript/tests/assets/isValidTxt/invalid.txt deleted file mode 100644 index a416f3f..0000000 Binary files a/packages/typescript/tests/assets/isValidTxt/invalid.txt and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidTxt/valid.txt b/packages/typescript/tests/assets/isValidTxt/valid.txt deleted file mode 100644 index db4de23..0000000 --- a/packages/typescript/tests/assets/isValidTxt/valid.txt +++ /dev/null @@ -1 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam quis venenatis dui, id dictum ipsum. Donec fermentum tortor in velit posuere fermentum. Aliquam erat volutpat. Maecenas mattis sollicitudin leo, quis volutpat nulla scelerisque sit amet. Proin varius nibh est, in mattis magna porta quis. Nunc a viverra enim. Pellentesque ex ipsum, tempus nec sem vitae, imperdiet ullamcorper tellus. Nam elementum metus id ex dapibus, at gravida mi pretium. Nulla porttitor sed dolor quis blandit. Mauris id orci sem. Fusce hendrerit cursus libero ornare pulvinar. Maecenas vitae ullamcorper nibh, eget consequat ligula. diff --git a/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mkv b/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mkv deleted file mode 100644 index 0247eeb..0000000 --- a/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mkv +++ /dev/null @@ -1 +0,0 @@ -asdas diff --git a/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mov b/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mov deleted file mode 100644 index 0247eeb..0000000 --- a/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mov +++ /dev/null @@ -1 +0,0 @@ -asdas diff --git a/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mp4 b/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mp4 deleted file mode 100644 index 0247eeb..0000000 --- a/packages/typescript/tests/assets/isValidVideo/invalid/invalid.mp4 +++ /dev/null @@ -1 +0,0 @@ -asdas diff --git a/packages/typescript/tests/assets/isValidVideo/valid/valid.mkv b/packages/typescript/tests/assets/isValidVideo/valid/valid.mkv deleted file mode 100644 index 5cbfbd7..0000000 Binary files a/packages/typescript/tests/assets/isValidVideo/valid/valid.mkv and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidVideo/valid/valid.mov b/packages/typescript/tests/assets/isValidVideo/valid/valid.mov deleted file mode 100644 index 6401565..0000000 Binary files a/packages/typescript/tests/assets/isValidVideo/valid/valid.mov and /dev/null differ diff --git a/packages/typescript/tests/assets/isValidVideo/valid/valid.mp4 b/packages/typescript/tests/assets/isValidVideo/valid/valid.mp4 deleted file mode 100644 index 281ad4c..0000000 Binary files a/packages/typescript/tests/assets/isValidVideo/valid/valid.mp4 and /dev/null differ diff --git a/packages/typescript/tests/src/cnpjValidator.test.ts b/packages/typescript/tests/src/cnpjValidator.test.ts deleted file mode 100644 index 7d21a41..0000000 --- a/packages/typescript/tests/src/cnpjValidator.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import cnpjIsValid from '../../src/cnpjValidator'; - -describe('cnpjIsValid function', () => { - test('should validate a valid CNPJ', () => { - const result = cnpjIsValid('72.501.263/0001-40'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("CNPJ is not valid"); - }); - - test('should invalidate an invalid CNPJ', () => { - const result = cnpjIsValid('12.345.678/0001-91'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('CNPJ is not valid'); - }); - - test('should invalidate a CNPJ with incorrect length', () => { - const result = cnpjIsValid('1234567890123'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('CNPJ must have 14 numerical digits'); - }); - - test('should invalidate a CNPJ with non-digit characters', () => { - const result = cnpjIsValid('72.501.263/0001-4A'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('CNPJ is not valid'); - }); - - test('should invalidate an empty CNPJ', () => { - const result = cnpjIsValid(''); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('CNPJ invalid'); - }); - - test('should throw an error if input is not a string', () => { - expect(() => { - cnpjIsValid(12345678901234 as any); - }).toThrow('The input should be a string.'); - }); - - test('should throw an error if errorMsg is not an array', () => { - expect(() => { - cnpjIsValid('72.501.263/0001-40', 'error message' as any); - }).toThrow('Must be an Array'); - }); - - test('should throw an error if errorMsg contains non-string values', () => { - expect(() => { - cnpjIsValid('72.501.263/0001-40', [123, 'error message'] as any); - }).toThrow('All values within the array must be strings or null/undefined.'); - }); - - test('should return custom error messages', () => { - const result = cnpjIsValid('12.345.678/0001-91', ['Custom invalid message', 'Custom length message', 'Custom not valid message', 'Custom unknown error message']); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Custom not valid message'); - }); - - test('should return false when all digits are repeated', () => { - const result = cnpjIsValid('11.111.111/1111-11'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('CNPJ is not valid'); - }); -}); diff --git a/packages/typescript/tests/src/cpfValidator.test.ts b/packages/typescript/tests/src/cpfValidator.test.ts deleted file mode 100644 index 527e3f2..0000000 --- a/packages/typescript/tests/src/cpfValidator.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import cpfIsValid from '../../src/cpfValidator'; - -describe('cpfIsValid', () => { - it('should return isValid as false and the correct error message when CPF is invalid', () => { - const result = cpfIsValid('12345678902'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('CPF is not valid'); - }); - - it('should return isValid as true and errorMsg as null when CPF is valid', () => { - const result = cpfIsValid('12345678909'); - expect(result.isValid).toBe(true); - expect(result.errorMsg).toBe(null); - }); - - it('should return isValid as false and the correct error message when CPF is invalid', () => { - const result = cpfIsValid('123.456.789-02'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("CPF is not valid"); - }); - - it('should return isValid as true and errorMsg as null when CPF is valid', () => { - const result = cpfIsValid('123.456.789-09'); - expect(result.isValid).toBe(true); - expect(result.errorMsg).toBe(null); - }); - - it('should return isValid as false and the correct error message when CPF is invalid', () => { - const result = cpfIsValid('123456789-02'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("CPF is not valid"); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => cpfIsValid(12345678910 as any)).toThrow('The input should be a string.'); - }); - - it('should throw an error when errorMsg is not an array', () => { - expect(() => cpfIsValid('12345678910', 'not an array' as any)).toThrow('Must be an Array'); - }); - - it('should throw an error when errorMsg contains non-string values', () => { - expect(() => cpfIsValid('12345678910', [123 as any, 'error message'])).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it('should throw an error when errorMsg contains non-string values', () => { - expect(() => cpfIsValid('12345678910', ['error message', 123 as any])).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it("it should return false when all digits are repeated", () => { - const result = cpfIsValid('11111111111'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("CPF is not valid"); - } - ); -}); diff --git a/packages/typescript/tests/src/getOnlyEmail.test.ts b/packages/typescript/tests/src/getOnlyEmail.test.ts deleted file mode 100644 index 0bdb09c..0000000 --- a/packages/typescript/tests/src/getOnlyEmail.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import getOnlyEmail from '../../src/getOnlyEmail'; - -describe('getOnlyEmail', () => { - it('should return the first email when multiple is false', () => { - const result = getOnlyEmail("Entre em contato com a equipe: joao@empresa.com, maria@empresa.com, contato@empresa.com", { multiple: false }); - expect(result).toBe('joao@empresa.com'); - }); - - it('should return all emails when multiple is true', () => { - const result = getOnlyEmail("Entre em contato com a equipe: joao@empresa.com, maria@empresa.com, contato@empresa.com", { multiple: true }); - expect(result).toEqual(['joao@empresa.com', 'maria@empresa.com', 'contato@empresa.com']); - }); - - it('should return cleaned emails when cleanDomain is true', () => { - const result = getOnlyEmail("Entre em contato com a equipe: joao@empresa.com.br, maria@empresa.com.io, contato@empresa.com.pt jonyjony@gmail.comAwaodiawdoi", { multiple: true, cleanDomain: true }); - expect(result).toEqual(['joao@empresa.com.br', 'maria@empresa.com.io', 'contato@empresa.com.pt', 'jonyjony@gmail.com']); - }); - - it('should return unique emails when repeatEmail is false', () => { - const result = getOnlyEmail("Entre em contato com a equipe: joao@empresa.com, joao@empresa.com, joao@empresa.com", { multiple: true, cleanDomain: false, repeatEmail: false }); - expect(result).toEqual(['joao@empresa.com']); - }); - - it('should return repeated emails when repeatEmail is true', () => { - const result = getOnlyEmail("Entre em contato com a equipe: joao@empresa.com, joao@empresa.com, joao@empresa.com", { multiple: true, cleanDomain: false, repeatEmail: true }); - expect(result).toEqual(['joao@empresa.com', 'joao@empresa.com', 'joao@empresa.com']); - }); - - it('should return "No email found" when no email is present', () => { - const result = getOnlyEmail("Entre em contato com a equipe", { multiple: false }); - expect(result).toBe('No email found'); - }); - - it('should return "No email found" even if non of the options are passed', () => { - const result = getOnlyEmail("Entre em contato com a equipe"); - expect(result).toBe('No email found'); - }); - - it('should return an email even if non of the options are passed', () => { - const result = getOnlyEmail("Entre em contato com a equipe: alexa@google.com"); - expect(result).toBe('alexa@google.com'); - }); -}); diff --git a/packages/typescript/tests/src/identifyFlagCard.test.ts b/packages/typescript/tests/src/identifyFlagCard.test.ts deleted file mode 100644 index 6a85ba5..0000000 --- a/packages/typescript/tests/src/identifyFlagCard.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import identifyFlagCard from '../../src/identifyFlagCard'; - -describe('identifyFlagCard', () => { - it('should identify Visa card', () => { - const result = identifyFlagCard('4111111111111111'); - expect(result).toBe('Visa'); - }); - - it('should identify Mastercard', () => { - const result = identifyFlagCard('5555555555554444'); - expect(result).toBe('Mastercard'); - }); - - it('should identify American Express', () => { - const result = identifyFlagCard('378282246310005'); - expect(result).toBe('American Express'); - }); - - it('should identify Discover', () => { - const result = identifyFlagCard('6011111111111117'); - expect(result).toBe('Discover'); - }); - - it('should identify JCB', () => { - const result = identifyFlagCard('3530111333300000'); - expect(result).toBe('JCB'); - }); - - it('should identify Diners Club', () => { - const result = identifyFlagCard('30569309025904'); - expect(result).toBe('Diners Club'); - }); - - it('should identify Maestro', () => { - const result = identifyFlagCard('6759649826438453'); - expect(result).toBe('Maestro'); - }); - - it('should identify UnionPay', () => { - const result = identifyFlagCard('6221558812340002'); - expect(result).toBe('UnionPay'); - }); - - it('should identify Unknown', () => { - const result = identifyFlagCard('6362970000457013'); - expect(result).toBe('Unknown'); - }); - - it('should identify Hipercard', () => { - const result = identifyFlagCard('6062825624254001'); - expect(result).toBe('Hipercard'); - }); - - it('should return "Unknown" for unknown card numbers', () => { - const result = identifyFlagCard('1234567812345678'); - expect(result).toBe('Unknown'); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => identifyFlagCard((1234567812345678 as any))).toThrow('The input should be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isAscii.test.ts b/packages/typescript/tests/src/isAscii.test.ts deleted file mode 100644 index 7235007..0000000 --- a/packages/typescript/tests/src/isAscii.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import isAscii from '../../src/isAscii'; - -describe('isAscii', () => { - it('should return true when the input is ASCII', () => { - const result = isAscii('valid ASCII'); - expect(result).toBe(true); - }); - - it('should return false when the input is not ASCII', () => { - const result = isAscii('日本語日本語'); - expect(result).toBe(false); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => isAscii((12345678910 as any))).toThrow('The input should be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isBase64.test.ts b/packages/typescript/tests/src/isBase64.test.ts deleted file mode 100644 index 6870c59..0000000 --- a/packages/typescript/tests/src/isBase64.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import isBase64 from '../../src/isBase64'; - -describe('isBase64', () => { - it('should return true when the input is a valid Base64 string', () => { - const result = isBase64('SGVsbG8gV29ybGQh'); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid Base64 string', () => { - const result = isBase64('こんにちは'); - expect(result).toBe(false); - }); - - it('should return false when the input is not a valid Base64 string', () => { - const result = isBase64('12345'); - expect(result).toBe(false); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => isBase64((12345678910 as any))).toThrow('Input value must be a string.'); - }); - - it('should throw an error when the input is an empty string', () => { - expect(() => isBase64('')).toThrow('Input value must not be an empty string.'); - }); -}); diff --git a/packages/typescript/tests/src/isCEP.test.ts b/packages/typescript/tests/src/isCEP.test.ts deleted file mode 100644 index ff17763..0000000 --- a/packages/typescript/tests/src/isCEP.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import isCEP from '../../src/isCEP'; - -describe('isCEP', () => { - it('should return true when the input is a valid CEP', () => { - const result = isCEP('12345-678'); - expect(result).toBe(true); - }); - - it('should return true when the input is a valid CEP without hyphen', () => { - const result = isCEP('12345678'); - expect(result).toBe(true); - }); - - it('should return true when the input is a valid CEP with dot and hyphen', () => { - const result = isCEP('12.345-678'); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid CEP', () => { - const result = isCEP('1234567'); - expect(result).toBe(false); - }); - - it('should return false when the input is not a valid CEP', () => { - const result = isCEP('123456789'); - expect(result).toBe(false); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => isCEP((12345678 as any))).toThrow('Input value must be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isCreditCardValid.test.ts b/packages/typescript/tests/src/isCreditCardValid.test.ts deleted file mode 100644 index 272a0be..0000000 --- a/packages/typescript/tests/src/isCreditCardValid.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Testes para isCreditCardValid -import isCreditCardValid from '../../src/isCreditCardValid'; - -describe('isCreditCardValid', () => { - it('should return true when the input is a valid credit card number', () => { - const result = isCreditCardValid('5344 9393 8369 0842'); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid credit card number', () => { - const result = isCreditCardValid('4111111111111112'); - expect(result).toBe(false); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => isCreditCardValid((1234567812345678 as any))).toThrow('The input should be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isDate.test.ts b/packages/typescript/tests/src/isDate.test.ts deleted file mode 100644 index da0e36a..0000000 --- a/packages/typescript/tests/src/isDate.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Testes para isDate -import isDate from '../../src/isDate'; - -describe('isDate', () => { - it('should return true when the input is a valid date', () => { - const result = isDate('2022-12-31'); - expect(result).toBe(true); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => isDate((12345678 as any))).toThrow('Input value must be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isDecimal.test.ts b/packages/typescript/tests/src/isDecimal.test.ts deleted file mode 100644 index d60e0f5..0000000 --- a/packages/typescript/tests/src/isDecimal.test.ts +++ /dev/null @@ -1,176 +0,0 @@ -// Testes para isDecimal -import isDecimal from '../../src/isDecimal'; - -describe('isDecimal', () => { - const errorToThrow = "Input value must be a string or a number."; // Mensagem de erro a ser lançada - - it('should return true when the input is a valid decimal number', () => { - const result = isDecimal('123.45'); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid decimal number', () => { - const result = isDecimal('123.456.789'); - expect(result).toBe(false); - }); - - it('should return false when the input is an integer', () => { - const result = isDecimal('123'); - expect(result).toBe(false); - }); - - it('should return false when the input is a string', () => { - const result = isDecimal('abc'); - expect(result).toBe(false); - }); - - it('should throw error when the input is an array', () => { - expect(() => isDecimal([] as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is an object', () => { - expect(() => isDecimal({} as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a boolean', () => { - expect(() => isDecimal(true as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is empty', () => { - expect(() => isDecimal('')).toThrow("Input value must not be an empty string."); - }); - - it('should throw error when the input is a whitespace', () => { - expect(() => isDecimal(' ')).toThrow("Input value must not be an empty string."); - }); - - it('should throw error when the input is a null', () => { - expect(() => isDecimal(null as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is undefined', () => { - expect(() => isDecimal(undefined as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is NaN', () => { - expect(() => isDecimal(NaN as any)).toThrow("Input value must not be NaN."); - }); - - it('should throw error when the input is Infinity', () => { - expect(() => isDecimal(Infinity as any)).toThrow("Input value must not be Infinity, -Infinity or NaN."); - }); - - it('should throw error when the input is -Infinity', () => { - expect(() => isDecimal(-Infinity as any)).toThrow("Input value must not be Infinity, -Infinity or NaN."); - }); - - it('should throw error when the input is a function', () => { - function func() { } - - expect(() => isDecimal(func() as any) as any).toThrow(errorToThrow); - }); - - it('should throw error when the input is a symbol', () => { - expect(() => isDecimal(Symbol() as any) as any).toThrow(errorToThrow); - }); - - it('should throw error when the input is a date', () => { - expect(() => isDecimal(new Date() as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is an empty array', () => { - expect(() => isDecimal([] as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is an empty object', () => { - expect(() => isDecimal({} as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a Map', () => { - expect(() => isDecimal(new Map() as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a Set', () => { - expect(() => isDecimal(new Set() as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a WeakMap', () => { - expect(() => isDecimal(new WeakMap() as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a WeakSet', () => { - expect(() => isDecimal(new WeakSet() as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a regular expression', () => { - expect(() => isDecimal(/abc/g as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a class', () => { - class A { } - - expect(() => isDecimal(A as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a class instance', () => { - class A { } - - expect(() => isDecimal(new A() as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a BigInt', () => { - expect(() => isDecimal(BigInt(10) as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a URL', () => { - expect(() => isDecimal(new URL('https://example.com') as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a Buffer', () => { - expect(() => isDecimal(Buffer.from('hello') as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a DataView', () => { - expect(() => isDecimal(new DataView(new ArrayBuffer(2)) as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a Float32Array', () => { - expect(() => isDecimal(new Float32Array(2) as any)).toThrow(errorToThrow); - }); - - it('should throw error when the input is a Float64Array', () => { - expect(() => isDecimal(new Float64Array(2) as any)).toThrow(errorToThrow); - }); - - it('should return false when the input is a integer number', () => { - const result = isDecimal(123); - expect(result).toBe(false); - }); - - it('should return true when the input is a valid decimal number', () => { - const result = isDecimal(123.45); - expect(result).toBe(true); - }); - - it('should throw error when the input is a boolean', () => { - expect(() => isDecimal(true as any)).toThrow("Input value must be a string or a number."); - }); - - it('should throw error when the input is an array', () => { - expect(() => isDecimal([] as any)).toThrow("Input value must be a string or a number."); - }); - - it('should throw error when the input is an object', () => { - expect(() => isDecimal({} as any)).toThrow("Input value must be a string or a number."); - }); - - it('should throw error when the input is a function', () => { - function func() { } - - expect(() => isDecimal(func as any)).toThrow("Input value must be a string or a number."); - }); - - it('should throw error when the input is a symbol', () => { - expect(() => isDecimal(Symbol() as any)).toThrow("Input value must be a string or a number."); - }); -}); diff --git a/packages/typescript/tests/src/isEmail.test.ts b/packages/typescript/tests/src/isEmail.test.ts deleted file mode 100644 index 3120a52..0000000 --- a/packages/typescript/tests/src/isEmail.test.ts +++ /dev/null @@ -1,362 +0,0 @@ -import isEmail from '../../src/isEmail'; - -describe('isEmail', () => { - it('returns true for valid email', () => { - expect(isEmail('foo@bar.com')).toBe(true); - }); - - it('returns false for email without domain', () => { - expect(isEmail('foo@bar')).toBe(false); - }); - - it('returns false for email starting with a number', () => { - expect(isEmail('1foo@bar.com')).toBe(false); - }); - - it('returns false for email with number after @', () => { - expect(isEmail('foo@1bar.com')).toBe(false); - }); - - it('returns false for email with number after last dot', () => { - expect(isEmail('foo@bar.1com')).toBe(false); - }); - - it('returns throw for non-string input', () => { - expect(() => isEmail(123 as any)).toThrow("Invalid input, must be a string"); - }); - - it('returns throw for array input', () => { - expect(() => isEmail([] as any)).toThrow("Invalid input, must be a string"); - }); - - it('returns throw for object input', () => { - expect(() => isEmail({} as any)).toThrow("Invalid input, must be a string"); - }); - - it('returns throw for boolean input', () => { - expect(() => isEmail(true as any)).toThrow("Invalid input, must be a string"); - }); - - it('returns throw for null or empty input', () => { - expect(() => isEmail('')).toThrow("Value cannot be null or empty"); - }); - - it('return false when email is missing @', () => { - expect(isEmail('foo.bar.com')).toBe(false); - }); - - it('return false when have .com.com', () => { - expect(isEmail('joaoaoao@gmail.com.com')).toBe(false); - }); - - it('return false when have before @ ..', () => { - expect(isEmail('joao..@gmail.com')).toBe(false); - }); - - it('return false when have before @ .', () => { - expect(isEmail('joao.@gmail.com')).toBe(false); - }); - - it('return false when have @ @', () => { - expect(isEmail('joao@@gmail.com')).toBe(false); - }); - - it('return false when have before @ .', () => { - expect(isEmail('joao.@gmail.com')).toBe(false); - }); - - it('return false when have after @ .', () => { - expect(isEmail('joao@gmail..com')).toBe(false); - }); - - it('it return false when start with .', () => { - expect(isEmail('.foo@bar.com')).toBe(false); - }); - - it('it return false when start with ,', () => { - expect(isEmail(',foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character !', () => { - expect(isEmail('!foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character @', () => { - expect(isEmail('@foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character #', () => { - expect(isEmail('#foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character $', () => { - expect(isEmail('$foo@bar.com')).toBe(false); - }); - it('returns false for email starting with special character %', () => { - expect(isEmail('%foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character ^', () => { - expect(isEmail('^foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character &', () => { - expect(isEmail('&foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character *', () => { - expect(isEmail('*foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character (', () => { - expect(isEmail('(foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character )', () => { - expect(isEmail(')foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character -', () => { - expect(isEmail('-foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character _', () => { - expect(isEmail('_foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character =', () => { - expect(isEmail('=foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character +', () => { - expect(isEmail('+foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character [', () => { - expect(isEmail('[foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character ]', () => { - expect(isEmail(']foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character {', () => { - expect(isEmail('{foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character }', () => { - expect(isEmail('}foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character ;', () => { - expect(isEmail(';foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character :', () => { - expect(isEmail(':foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character \\', () => { - expect(isEmail('\'foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character "', () => { - expect(isEmail('"foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character <', () => { - expect(isEmail('', () => { - expect(isEmail('>foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character ?', () => { - expect(isEmail('?foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character /', () => { - expect(isEmail('/foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character two \\', () => { - expect(isEmail('\\foo@bar.com')).toBe(false); - }); - - it('returns false for email starting with special character |', () => { - expect(isEmail('|foo@bar.com')).toBe(false); - }); - - it('it return false when start with @', () => { - expect(isEmail('@foo@bar.com')).toBe(false); - }); - - it('returns false when have more than one @', () => { - expect(isEmail('foo@@bar.com')).toBe(false); - }); - - it('return true .com.br', () => { - expect(isEmail('foo@bar.com.br')).toBe(true); - }); - - it('return false .com.br.br', () => { - expect(isEmail('foo@bar.com.br.br')).toBe(false); - }); - - it('return false .com.com.br.br', () => { - expect(isEmail('foo@bar.com.com.br.br')).toBe(false); - }); - - it('return false .com.com.br', () => { - expect(isEmail('foo@bar.com.com.br')).toBe(false); - }); - - it('returns false for email with special characters', () => { - expect(isEmail('foo!@bar.com')).toBe(false); - }); - - it('returns false for email with spaces', () => { - expect(isEmail('foo bar@baz.com')).toBe(false); - }); - - it('returns false for email with leading whitespace', () => { - expect(isEmail(' foo@bar.com')).toBe(false); - }); - - it('returns false for email with trailing whitespace', () => { - expect(isEmail('foo@bar.com ')).toBe(false); - }); - - it('returns false for email with consecutive dots', () => { - expect(isEmail('foo..bar@baz.com')).toBe(false); - }); - - it('returns false for email with consecutive @ symbols', () => { - expect(isEmail('foo@@bar.com')).toBe(false); - }); - - it('returns false for email with consecutive dots after @', () => { - expect(isEmail('foo@bar..com')).toBe(false); - }); - - it('returns false for email with consecutive dots before @', () => { - expect(isEmail('foo..bar@baz.com')).toBe(false); - }); - - it('returns false for email with consecutive dots after last dot', () => { - expect(isEmail('foo@bar.com..')).toBe(false); - }); - - it('returns false for email with consecutive dots before last dot', () => { - expect(isEmail('foo@bar..com')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after @', () => { - expect(isEmail('foo..@bar.com')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after last dot', () => { - expect(isEmail('foo@bar..com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after @ and last dot', () => { - expect(isEmail('foo..@bar..com.')).toBe(false); - }); - - it('returns false for email with consecutive @ symbols before domain', () => { - expect(isEmail('foo@@@bar.com')).toBe(false); - }); - - it('returns false for email with consecutive dots before domain', () => { - expect(isEmail('foo...bar.com')).toBe(false); - }); - - it('returns false for email with consecutive dots after domain', () => { - expect(isEmail('foo@bar.com...')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain', () => { - expect(isEmail('foo...@bar.com...')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns false for email with consecutive dots before and after domain and last dot', () => { - expect(isEmail('foo...@bar...com.')).toBe(false); - }); - - it('returns true for valid email with uppercase letters', () => { - expect(isEmail('Foo@Bar.com')).toBe(true); - }); - - it('returns false for email with special characters in domain', () => { - expect(isEmail('foo@bar!com')).toBe(false); - }); - - it('returns false for email with special characters in username', () => { - expect(isEmail('foo!@bar.com')).toBe(false); - }); - - it('returns false for email with invalid TLD', () => { - expect(isEmail('foo@bar.c')).toBe(false); - }); -}) diff --git a/packages/typescript/tests/src/isEmpty.test.ts b/packages/typescript/tests/src/isEmpty.test.ts deleted file mode 100644 index 57e9be4..0000000 --- a/packages/typescript/tests/src/isEmpty.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import isEmpty from '../../src/isEmpty'; - -describe('isEmpty', () => { - it('returns true for empty string', () => { - expect(isEmpty('')).toBe(true); - }); - - it('returns true for string with only spaces', () => { - expect(isEmpty(' ')).toBe(true); - }); - - it('returns false for string with characters', () => { - expect(isEmpty('Hello')).toBe(false); - }); - - it('returns false for string with characters and spaces', () => { - expect(isEmpty(' Hello ')).toBe(false); - }); - - it('throws TypeError for non-string input', () => { - // @ts-ignore - expect(() => isEmpty(null)).toThrow(TypeError); - // @ts-ignore - expect(() => isEmpty(undefined)).toThrow(TypeError); - }); -}); diff --git a/packages/typescript/tests/src/isMACAddress.test.ts b/packages/typescript/tests/src/isMACAddress.test.ts deleted file mode 100644 index 4199876..0000000 --- a/packages/typescript/tests/src/isMACAddress.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Testes para isMacAddress -import isMacAddress from '../../src/isMACAddress'; - -describe('isMacAddress', () => { - it('should return true when the input is a valid MAC address', () => { - const result = isMacAddress('00:0a:95:9d:68:16'); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid MAC address', () => { - const result = isMacAddress('00:0a:95:9d:68:1g'); - expect(result).toBe(false); - }); - - it('should throw an error when the input is not a string', () => { - expect(() => isMacAddress((12345678 as any))).toThrow('The input should be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isMD5.test.ts b/packages/typescript/tests/src/isMD5.test.ts deleted file mode 100644 index e20db7c..0000000 --- a/packages/typescript/tests/src/isMD5.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import isMD5 from '../../src/isMD5'; - -describe('isMD5', () => { - it('returns true for valid MD5 hash', () => { - expect(isMD5('6df23dc03f9b54cc38a0fc1483df6e21')).toBe(true); - }); - - it('returns false for non-MD5 string', () => { - expect(isMD5('Hello')).toBe(false); - }); - - it('returns false for string with length not equal to 32', () => { - expect(isMD5('d41d8cd98f00b204e9800998ecf8427e123')).toBe(false); - }); - - it('returns false for non-string input', () => { - // @ts-ignore - expect(() => isMD5(123)).toThrow(TypeError); - }); - - it('returns false for null or empty input', () => { - expect(isMD5('')).toBe(false); - }); - - it('returns false for all zero hash', () => { - expect(isMD5('00000000000000000000000000000000')).toBe(false); - }); - - it('returns false for weak hash', () => { - expect(isMD5('d41d8cd98f00b204e9800998ecf8427e')).toBe(false); - }); -}); diff --git a/packages/typescript/tests/src/isNumber.test.ts b/packages/typescript/tests/src/isNumber.test.ts deleted file mode 100644 index b1fb99e..0000000 --- a/packages/typescript/tests/src/isNumber.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Testes para isNumber -import isNumber from '../../src/isNumber'; - -describe('isNumber', () => { - it('should return true when the input is a valid string of number', () => { - const result = isNumber('123'); - expect(result).toBe(true); - }); - - it('should return true when the input is a valid number', () => { - const result = isNumber(123); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid number', () => { - const result = isNumber('abc'); - expect(result).toBe(false); - }); - - it('should return false when the input is an array', () => { - const result = isNumber([]); - expect(result).toBe(false); - }); - - it('should return false when the input is an object', () => { - const result = isNumber({}); - expect(result).toBe(false); - }); - - it('should return false when the input is a boolean', () => { - const result = isNumber(true); - expect(result).toBe(false); - }); - - it('should return false when the input is empty', () => { - const result = isNumber(''); - expect(result).toBe(false); - }); -}); diff --git a/packages/typescript/tests/src/isPort.test.ts b/packages/typescript/tests/src/isPort.test.ts deleted file mode 100644 index 3c13c9d..0000000 --- a/packages/typescript/tests/src/isPort.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Testes para isPort -import isPort from '../../src/isPort'; - -describe('isPort', () => { - it('should return true when the input is a valid port number', () => { - const result = isPort('80'); - expect(result).toBe(true); - }); - - it('should return false when the input is not a valid port number', () => { - const result = isPort('65536'); - expect(result).toBe(false); - }); - - it('should return false when the input is not a string or number', () => { - // @ts-ignore - expect(() => isPort(null)).toThrow('Input value must be a string or a number.'); - }); -}); diff --git a/packages/typescript/tests/src/isPostalCode.test.ts b/packages/typescript/tests/src/isPostalCode.test.ts deleted file mode 100644 index 0c2db3d..0000000 --- a/packages/typescript/tests/src/isPostalCode.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Testes para isPostalCode -import isPostalCode from '../../src/isPostalCode'; - -describe('isPostalCode', () => { - it('should return true when the input is a valid postal code', () => { - const result = isPostalCode('90210'); - expect(result).toBe(true); - }); - - it('should throw an error when the input is not a string', () => { - // @ts-ignore - expect(() => isPostalCode(12345678)).toThrow('Input value must be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isTime.test.ts b/packages/typescript/tests/src/isTime.test.ts deleted file mode 100644 index e32ce9f..0000000 --- a/packages/typescript/tests/src/isTime.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { isTime } from '../../index'; - -describe('isTime function', () => { - test('should return true for valid time', () => { - expect(isTime('12:30')).toBe(true); - expect(isTime('23:59')).toBe(true); - }); - - test('should return false for invalid time', () => { - expect(isTime('24:00')).toBe(false); - expect(isTime('12:60')).toBe(false); - expect(isTime('abc')).toBe(false); - }); - - it('should return false for invalid time', () => { - // @ts-ignore - expect(() => isTime(1)).toThrow('Input value must be a string.'); - }); - - it('should return false for invalid time', () => { - // @ts-ignore - expect(() => isTime(null)).toThrow('Input value must be a string.'); - }); -}); diff --git a/packages/typescript/tests/src/isValidAudio.test.ts b/packages/typescript/tests/src/isValidAudio.test.ts deleted file mode 100644 index 808dfeb..0000000 --- a/packages/typescript/tests/src/isValidAudio.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import isValidAudio from '../../src/isValidAudio'; -import path from 'path'; -import * as fs from 'fs'; - -describe('isValidAudio', () => { - let fileBuffer1: Buffer, fileBuffer2: Buffer, fileBuffer3: Buffer, fileBuffer4: Buffer; - - beforeAll(() => { - fileBuffer1 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidAudio', 'invalid', 'invalid.mp3')); // Invalid MP3 image - fileBuffer2 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidAudio', 'invalid', 'invalid.wav')); // Invalid WAV image - fileBuffer3 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidAudio', 'valid', 'valid.mp3')); // valid MP3 image - fileBuffer4 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidAudio', 'valid', 'valid.wav')); // valid WAV image - }); - - it('should return false for an empty buffer', () => { - const fileBuffer = Buffer.from([]); - const result = isValidAudio(fileBuffer); - expect(result).toBe(false); - }); - - it('should return false for an invalid MP3 audio', () => { - const result = isValidAudio(fileBuffer1); - expect(result).toBe(false); - }); - - it('should return false for an invalid WAV audio', () => { - const result = isValidAudio(fileBuffer2); - expect(result).toBe(false); - }); - - it('should return true for a valid MP3 audio', () => { - const result = isValidAudio(fileBuffer3); - expect(result).toBe(true); - }); - - it('should return true for a valid WAV audio', () => { - const result = isValidAudio(fileBuffer4); - expect(result).toBe(true); - }); - - it('should return false when excluding WAV files', () => { - const result = isValidAudio(fileBuffer4, { exclude: ['wav'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding MP3 files', () => { - const result = isValidAudio(fileBuffer3, { exclude: ['mp3'] }); - expect(result).toBe(false); - }); - - it('should return true when excluding WAV files', () => { - const result = isValidAudio(fileBuffer3, { exclude: ['wav'] }); - expect(result).toBe(true); - }); - - it('should return true when excluding MP3 files', () => { - const result = isValidAudio(fileBuffer4, { exclude: ['mp3'] }); - expect(result).toBe(true); - }); - - it('should return false when excluding WAV files and MP3 files', () => { - const result = isValidAudio(fileBuffer4, { exclude: ['wav', 'mp3'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding WAV files and MP3 files', () => { - const result = isValidAudio(fileBuffer3, { exclude: ['wav', 'mp3'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding WAV files and MP3 files', () => { - const result = isValidAudio(fileBuffer2, { exclude: ['wav', 'mp3'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding WAV files and MP3 files', () => { - const result = isValidAudio(fileBuffer1, { exclude: ['wav', 'mp3'] }); - expect(result).toBe(false); - }); -}); -export default isValidAudio; diff --git a/packages/typescript/tests/src/isValidImage.test.ts b/packages/typescript/tests/src/isValidImage.test.ts deleted file mode 100644 index b9fbd77..0000000 --- a/packages/typescript/tests/src/isValidImage.test.ts +++ /dev/null @@ -1,125 +0,0 @@ -import path from 'path'; -import isValidImage from '../../src/isValidImage'; -import * as fs from 'fs'; - -describe('isValidImage', () => { - let fileBuffer1: Buffer, fileBuffer2: Buffer, fileBuffer3: Buffer, fileBuffer4: Buffer, fileBuffer5: Buffer, fileBuffer6: Buffer, fileBuffer7: Buffer, fileBuffer8: Buffer; - - beforeAll(() => { - fileBuffer1 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'invalid', 'invalid.jpg')); // Invalid JPEG image - fileBuffer2 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'invalid', 'invalid.png')); // Invalid PNG image - fileBuffer3 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'invalid', 'invalid.gif')); // Invalid GIF image - fileBuffer4 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'invalid', 'invalid.ico')); // Invalid ICO image - fileBuffer5 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'valid', 'valid.jpg')); // Valid JPEG image - fileBuffer6 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'valid', 'valid.png')); // Valid PNG image - fileBuffer7 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'valid', 'valid.ico')); // Valid ICO image - fileBuffer8 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidImage', 'valid', 'valid.gif')); // Valid GIF image - }); - - it('should return false for an empty buffer', () => { - const fileBuffer = Buffer.from([]); - const result = isValidImage(fileBuffer); - expect(result).toBe(false); - }); - - it('should return false for an invalid JPEG image', () => { - const result = isValidImage(fileBuffer1); - expect(result).toBe(false); - }); - - it('should return false for an invalid PNG image', () => { - const result = isValidImage(fileBuffer2); - expect(result).toBe(false); - }); - - it('should return false for an invalid GIF image', () => { - const result = isValidImage(fileBuffer3); - expect(result).toBe(false); - }); - - it('should return false for an invalid ICO image', () => { - const result = isValidImage(fileBuffer4); - expect(result).toBe(false); - }); - - it('should return true for a valid JPEG image', () => { - const result = isValidImage(fileBuffer5); - expect(result).toBe(true); - }); - - it('should return true for a valid PNG image', () => { - const result = isValidImage(fileBuffer6); - expect(result).toBe(true); - }); - - it('should return true for a valid ICO image', () => { - const result = isValidImage(fileBuffer7); - expect(result).toBe(true); - }); - - it('should return true for a valid GIF image', () => { - const result = isValidImage(fileBuffer8); - expect(result).toBe(true); - }); - - it('should return false for an invalid JPEG image when excluding JPEG images', () => { - const result = isValidImage(fileBuffer1, { exclude: ['jpeg'] }); - expect(result).toBe(false); - }); - - it('should return false for an invalid PNG image when excluding PNG images', () => { - const result = isValidImage(fileBuffer2, { exclude: ['png'] }); - expect(result).toBe(false); - }); - - it('should return false for an invalid GIF image when excluding GIF images', () => { - const result = isValidImage(fileBuffer3, { exclude: ['gif'] }); - expect(result).toBe(false); - }); - - it('should return false for an invalid ICO image when excluding ICO images', () => { - const result = isValidImage(fileBuffer4, { exclude: ['ico'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding all image types', () => { - const result = isValidImage(fileBuffer1, { exclude: ['jpeg', 'png', 'gif', 'ico'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding png and gif image types', () => { - const result = isValidImage(fileBuffer3, { exclude: ['png', 'gif'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding jpeg and ico image types', () => { - const result = isValidImage(fileBuffer4, { exclude: ['jpeg', 'ico'] }); - expect(result).toBe(false); - }); - - it('should return true for a valid JPEG image when excluding PNG and GIF images', () => { - const result = isValidImage(fileBuffer5, { exclude: ['png', 'gif'] }); - expect(result).toBe(true); - }); - - it('should return true for a valid JPEG image when excluding PNG images', () => { - const result = isValidImage(fileBuffer5, { exclude: ['png'] }); - expect(result).toBe(true); - }); - - it('should return true for a valid PNG image when excluding JPEG images', () => { - const result = isValidImage(fileBuffer6, { exclude: ['jpeg'] }); - expect(result).toBe(true); - }); - - it('should return true for a valid ICO image when excluding GIF images', () => { - const result = isValidImage(fileBuffer7, { exclude: ['gif'] }); - expect(result).toBe(true); - }); - - it('should return true for a valid GIF image when excluding ICO images', () => { - const result = isValidImage(fileBuffer8, { exclude: ['ico'] }); - expect(result).toBe(true); - }); -}); -export default isValidImage; diff --git a/packages/typescript/tests/src/isValidPdf.test.ts b/packages/typescript/tests/src/isValidPdf.test.ts deleted file mode 100644 index d65dd26..0000000 --- a/packages/typescript/tests/src/isValidPdf.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import isValidPdf from '../../src/isValidPdf'; -import path from 'path'; -import * as fs from 'fs'; - -describe('isValidPdf', () => { - let fileBuffer1: Buffer, fileBuffer2: Buffer; - - beforeAll(() => { - fileBuffer1 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidPdf', 'invalid.pdf')); // Invalid PDF - fileBuffer2 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidPdf', 'valid.pdf')); // Valid PDF - }); - - it('should return false for an empty buffer', () => { - const fileBuffer = Buffer.from([]); - const result = isValidPdf(fileBuffer); - expect(result).toBe(false); - }); - - it('should return false for an invalid PDF', () => { - const result = isValidPdf(fileBuffer1); - expect(result).toBe(false); - }); - - it('should return true for a valid PDF', () => { - const result = isValidPdf(fileBuffer2); - expect(result).toBe(true); - }); -}); -export default isValidPdf; diff --git a/packages/typescript/tests/src/isValidTxt.test.ts b/packages/typescript/tests/src/isValidTxt.test.ts deleted file mode 100644 index fdfbe82..0000000 --- a/packages/typescript/tests/src/isValidTxt.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import isValidTxt from '../../src/isValidTxt'; -import path from 'path'; -import * as fs from 'fs'; - -describe('isValidTxt', () => { - let fileBuffer1: Buffer, fileBuffer2: Buffer; - - beforeAll(() => { - fileBuffer1 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidTxt', 'invalid.txt')); // Invalid TXT - fileBuffer2 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidTxt', 'valid.txt')); // Valid TXT - }); - - it('should return false for an empty buffer', () => { - const fileBuffer = Buffer.from([]); - const result = isValidTxt(fileBuffer); - expect(result).toBe(false); - }); - - it('should return false for an invalid TXT', () => { - const result = isValidTxt(fileBuffer1); - expect(result).toBe(false); - }); - - it('should return true for a valid TXT', () => { - const result = isValidTxt(fileBuffer2); - expect(result).toBe(true); - }); -}); diff --git a/packages/typescript/tests/src/isValidVideo.test.ts b/packages/typescript/tests/src/isValidVideo.test.ts deleted file mode 100644 index 076fda5..0000000 --- a/packages/typescript/tests/src/isValidVideo.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import isValidVideo from '../../src/isValidVideo'; -import path from 'path'; -import * as fs from 'fs'; - -describe('isValidVideo', () => { - let fileBuffer1: Buffer, fileBuffer2: Buffer, fileBuffer3: Buffer, fileBuffer4: Buffer, fileBuffer5: Buffer, fileBuffer6: Buffer; - - beforeAll(() => { - fileBuffer1 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidVideo', 'invalid', 'invalid.mkv')); // Invalid MKV image - fileBuffer2 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidVideo', 'invalid', 'invalid.mp4')); // Invalid MP4 image - fileBuffer3 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidVideo', 'invalid', 'invalid.mov')); // Invalid MOV image - fileBuffer4 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidVideo', 'valid', 'valid.mkv')); // valid MKV image - fileBuffer5 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidVideo', 'valid', 'valid.mp4')); // valid MP4 image - fileBuffer6 = fs.readFileSync(path.join(__dirname, '..', 'assets', 'isValidVideo', 'valid', 'valid.mov')); // valid MOV image - }); - - it('should return false for an empty buffer', () => { - const fileBuffer = Buffer.from([]); - const result = isValidVideo(fileBuffer); - expect(result).toBe(false); - }); - - it('should return false for an invalid MKV video', () => { - const result = isValidVideo(fileBuffer1); - expect(result).toBe(false); - }); - - it('should return false for an invalid MP4 video', () => { - const result = isValidVideo(fileBuffer2); - expect(result).toBe(false); - }); - - it('should return false for an invalid MOV video', () => { - const result = isValidVideo(fileBuffer3); - expect(result).toBe(false); - }); - - it('should return true for a valid MKV video', () => { - const result = isValidVideo(fileBuffer4); - expect(result).toBe(true); - }); - - it('should return true for a valid MP4 video', () => { - const result = isValidVideo(fileBuffer5); - expect(result).toBe(true); - }); - - it('should return true for a valid MOV video', () => { - const result = isValidVideo(fileBuffer6); - expect(result).toBe(true); - }); - - it('should return false when excluding MP4 files', () => { - const result = isValidVideo(fileBuffer5, { exclude: ['mp4'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding MOV files', () => { - const result = isValidVideo(fileBuffer6, { exclude: ['mov'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding MKV files', () => { - const result = isValidVideo(fileBuffer4, { exclude: ['mkv'] }); - expect(result).toBe(false); - }); - - it('should return true when excluding MP4 files', () => { - const result = isValidVideo(fileBuffer6, { exclude: ['mp4'] }); - expect(result).toBe(true); - }); - - it('should return true when excluding MOV files', () => { - const result = isValidVideo(fileBuffer4, { exclude: ['mov'] }); - expect(result).toBe(true); - }); - - it('should return true when excluding MKV files', () => { - const result = isValidVideo(fileBuffer5, { exclude: ['mkv'] }); - expect(result).toBe(true); - }); - - it('should return false when excluding MP4 files and MOV files', () => { - const result = isValidVideo(fileBuffer5, { exclude: ['mp4', 'mov'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding MKV files and MP4 files', () => { - const result = isValidVideo(fileBuffer5, { exclude: ['mkv', 'mp4'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding MKV files, MP4 files, and MOV files', () => { - const result = isValidVideo(fileBuffer5, { exclude: ['mkv', 'mp4', 'mov'] }); - expect(result).toBe(false); - }); - - it('should return false when excluding all video files', () => { - const result1 = isValidVideo(fileBuffer4, { exclude: ['mkv', 'mp4', 'mov'] }); - const result2 = isValidVideo(fileBuffer5, { exclude: ['mkv', 'mp4', 'mov'] }); - const result3 = isValidVideo(fileBuffer6, { exclude: ['mkv', 'mp4', 'mov'] }); - expect(result3).toBe(false); - expect(result2).toBe(false); - expect(result1).toBe(false); - }); -}); diff --git a/packages/typescript/tests/src/passwordStrengthTester.test.ts b/packages/typescript/tests/src/passwordStrengthTester.test.ts deleted file mode 100644 index bda5143..0000000 --- a/packages/typescript/tests/src/passwordStrengthTester.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { passwordStrengthTester } from '../../index'; - -describe('passwordStrengthTester function', () => { - test('should return correct strength type', () => { - expect(passwordStrengthTester('12345')).toBe('veryWeak'); - expect(passwordStrengthTester('abcdef')).toBe('weak'); - expect(passwordStrengthTester('abc12345')).toBe('regular'); - expect(passwordStrengthTester('Abc123awdasd')).toBe('strong'); - expect(passwordStrengthTester('SuperSecurePassword123!@')).toBe('veryStrong'); - }); -}); diff --git a/packages/typescript/tests/src/validateBRPhoneNumber.test.ts b/packages/typescript/tests/src/validateBRPhoneNumber.test.ts deleted file mode 100644 index 8f0c760..0000000 --- a/packages/typescript/tests/src/validateBRPhoneNumber.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -import validateBRPhoneNumber from '../../src/validateBRPhoneNumber'; - -describe('validateBRPhoneNumber', () => { - it('should throw an error when the input is not a string', () => { - expect(() => validateBRPhoneNumber((12345678 as any))).toThrow('The input should be a string.'); - }); - - it('should throw an error when errorMsg is not an array', () => { - expect(() => validateBRPhoneNumber('12345678', 'not an array' as any)).toThrow('errorMsg must be an Array'); - }); - - it('should throw an error when errorMsg contains non-string values', () => { - expect(() => validateBRPhoneNumber('12345678', [123 as any, null])).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it('should return an object with isValid false and the appropriate error message when the phone number is empty', () => { - const result = validateBRPhoneNumber(''); - expect(result).toEqual({ - isValid: false, - errorMsg: 'Field phone number cannot be empty', - }); - }); - - it('should return an object with isValid false and the appropriate error message when the phone number is invalid', () => { - const result = validateBRPhoneNumber('12345678'); - expect(result).toEqual({ - isValid: false, - errorMsg: 'Invalid phone number', - }); - }); - - it('should return an object with isValid true and errorMsg null when the phone number is valid', () => { - const result = validateBRPhoneNumber('(11) 98765-4321'); - expect(result).toEqual({ - isValid: true, - errorMsg: null, - }); - }); -}); diff --git a/packages/typescript/tests/src/validateEmail.test.ts b/packages/typescript/tests/src/validateEmail.test.ts deleted file mode 100644 index 59e210e..0000000 --- a/packages/typescript/tests/src/validateEmail.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import validateEmail from '../../src/validateEmail'; - -describe('validateEmail', () => { - it('should throw an error if the input is not a string', () => { - expect(() => validateEmail(123 as any)).toThrow(TypeError); - }); - - it('should validate a correct email', () => { - const result = validateEmail('test@gmail.com'); - expect(result.isValid).toBe(true); - expect(result.errorMsg).toBe(null); - }); - - it('should invalidate an incorrect email', () => { - const result = validateEmail('test'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('This e-mail is not valid'); - }); - - it('should validate an corret email length', () => { - const result = validateEmail('test@teste.com', { maxLength: 25 }); - expect(result.isValid).toBe(true); - expect(result.errorMsg).toBe(null); - }); - - it('should validate an corret email length', () => { - const result = validateEmail('test@testaaaaaaaaaaaaae.com', { maxLength: 15 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("Email cannot be greater than 15 characters"); - }); - - it('should invalidate an email with a non-allowed domain', () => { - // @ts-ignore - const result = validateEmail('test@notallowed.com', { - validDomains: ['@gmail.com'] - }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Email domain is not allowed.'); - }); - - it('should validate an email with a custom allowed domain', () => { - // @ts-ignore - const result = validateEmail('test@mydomain.com', { - validDomains: ['@mydomain.com'] - }); - expect(result.isValid).toBe(true); - expect(result.errorMsg).toBe(null); - }); - - it('should validate an email with the defaults allowed domain', () => { - // @ts-ignore - const result = validateEmail('test@gmail.com', { - validDomains: true - }); - expect(result.isValid).toBe(true); - expect(result.errorMsg).toBe(null); - }); - - it('should invalidate an email with the defaults allowed domain', () => { - // @ts-ignore - const result = validateEmail('test@mydomain.com', { - validDomains: true - }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("Email domain is not allowed."); - }); - - it('should invalidate an email that is too long', () => { - const result = validateEmail('a'.repeat(401) + '@gmail.com', { maxLength: 400 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Email cannot be greater than 400 characters'); - }); -}); diff --git a/packages/typescript/tests/src/validateName.test.ts b/packages/typescript/tests/src/validateName.test.ts deleted file mode 100644 index 2279e3b..0000000 --- a/packages/typescript/tests/src/validateName.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import validateName from '../../src/validateName'; -import { ValidateFunctions } from '../../src/types'; - -describe('validateName', () => { - it('should return isValid as true for valid names', () => { - const result: ValidateFunctions = validateName('John'); - expect(result.isValid).toBe(true); - }); - - it('should return isValid as false for names with numbers', () => { - const result: ValidateFunctions = validateName('John123'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Name cannot contain numbers'); - }); - - it('should return isValid as false for names with special characters', () => { - const result: ValidateFunctions = validateName('John@'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Name cannot contain special characters'); - }); - - it('should return isValid as false for names that are too long', () => { - const result: ValidateFunctions = validateName('JohnJohnJohnJohnJohnJohnJohnJohnJohnJohn'); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Name too big, try again'); - }); - - it('should throw an error for non-string inputs', () => { - expect(() => validateName(123 as unknown as string)).toThrow('The input should be a string.'); - }); - - it('should throw an error for invalid errorMsg array', () => { - expect(() => validateName('John', { - minLength: 1, maxLength: 20, errorMsg: [123 as unknown as string] - })).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it('should return true for valid names with custom min and max length', () => { - const result: ValidateFunctions = validateName('John', { minLength: 1, maxLength: 20 }); - expect(result.isValid).toBe(true); - }); - - it('should return false for names that are too short', () => { - const result: ValidateFunctions = validateName('J', { minLength: 2, maxLength: 20 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("This name is not valid"); - }); - - it('should return false for names that are too long', () => { - const result: ValidateFunctions = validateName('JohnJohnJohnJohnJohnJohnJohnJohnJohnJohn', { minLength: 2, maxLength: 20 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("Name too big, try again"); - }); - - it('Should return true for a valid name Peter, Pedro, or Gabriel', () => { - const result1: ValidateFunctions = validateName('Peter'); - const result2: ValidateFunctions = validateName('Pedro'); - const result3: ValidateFunctions = validateName('Gabriel'); - expect(result1.isValid).toBe(true); - expect(result2.isValid).toBe(true); - expect(result3.isValid).toBe(true); - }); -}); diff --git a/packages/typescript/tests/src/validatePassportNumber.test.ts b/packages/typescript/tests/src/validatePassportNumber.test.ts deleted file mode 100644 index d151e21..0000000 --- a/packages/typescript/tests/src/validatePassportNumber.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import validatePassportNumber from '../../src/validatePassportNumber'; - -describe('validatePassportNumber', () => { - it('validates United States passport number', () => { - const result = validatePassportNumber('123456789'); - expect(result).toEqual({ isValid: true, country: 'United States' }); - }); - - it('validates United Kingdom passport number', () => { - const result = validatePassportNumber('AB123456'); - expect(result).toEqual({ isValid: true, country: 'United Kingdom' }); - }); - - // Add similar tests for other countries... - - it('returns invalid for incorrect passport number', () => { - const result = validatePassportNumber('123'); - expect(result).toEqual({ isValid: false, country: null }); - }); -}); diff --git a/packages/typescript/tests/src/validatePassword.test.ts b/packages/typescript/tests/src/validatePassword.test.ts deleted file mode 100644 index f268caf..0000000 --- a/packages/typescript/tests/src/validatePassword.test.ts +++ /dev/null @@ -1,122 +0,0 @@ -import validatePassword from '../../src/validatePassword'; - -describe('validatePassword', () => { - it('validates password with minimum length', () => { - const result = validatePassword('Passw0rd!', { - minLength: 8 - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with maximum length', () => { - const result = validatePassword('Passw0rd!', { - maxLength: 10 - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with required uppercase', () => { - const result = validatePassword('Passw0rd!', { - options: { requireUppercase: true } - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with required special character', () => { - const result = validatePassword('Passw0rd!', { - options: { requireSpecialChar: true } - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with required number', () => { - const result = validatePassword('Passw0rd!', { - options: { requireNumber: true } - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with required string', () => { - const result = validatePassword('Passw0rd!', { - options: { requireString: true } - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('returns invalid for incorrect password', () => { - const result = validatePassword('password', { - minLength: 8, - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with all required check modules', () => { - const result = validatePassword('Passw0rd2!', { - options: { requireString: true, requireNumber: true, requireSpecialChar: true, requireUppercase: true } - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('validates password with all required check modules', () => { - const result = validatePassword('Passw0rd!', { - options: { requireString: true, requireNumber: true, requireSpecialChar: true, requireUppercase: true } - }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('Returns correct error message for password too long or too short', () => { - const result1 = validatePassword('Passw0rd!', { - maxLength: 6 - }); - expect(result1.errorMsg).toBe("Password must be between 1 and 6 characters"); - - const result2 = validatePassword('Passw0rd!', { - minLength: 20 - }); - expect(result2.errorMsg).toBe("Password must be greater than 20 characters"); - }); - - it('Returns correct error message for password without uppercase', () => { - const result = validatePassword('passw0rd!', { - options: { requireUppercase: true } - }); - expect(result.errorMsg).toBe("Password requires at least one capital letter"); - }); - - it('Returns correct error message for password without special character', () => { - const result = validatePassword('Passw0rd', { - options: { requireSpecialChar: true } - }); - expect(result.errorMsg).toBe("Password requires at least one special character"); - }); - - it('Returns correct error message for password without number', () => { - const result = validatePassword('Password!', { - options: { requireNumber: true } - }); - expect(result.errorMsg).toBe("Password requires at least one number"); - }); - - it('Returns correct error message for password without string', () => { - const result = validatePassword('12345678!', { - options: { requireString: true } - }); - expect(result.errorMsg).toBe("Password requires at least one letter"); - }); - - it('should throw error for invalid errorMsg parameter', () => { - expect(() => validatePassword('Passw0rd!', { minLength: 8, errorMsg: [123 as any] })).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it('should throw error for invalid password parameter', () => { - expect(() => validatePassword(123 as any)).toThrow('The input should be a string.'); - }); - - it('should throw error for invalid minLength parameter', () => { - expect(() => validatePassword('Passw0rd!', { minLength: 8, maxLength: 6 })).toThrow("the minimum size cannot be larger than the maximum"); - }); - - it('should throw error for invalid errorMsg parameter', () => { - expect(() => validatePassword('Passw0rd!', { minLength: 8, maxLength: 20, errorMsg: [123 as any] })).toThrow('All values within the array must be strings or null/undefined.'); - }); -}); diff --git a/packages/typescript/tests/src/validatePhoneNumber.test.ts b/packages/typescript/tests/src/validatePhoneNumber.test.ts deleted file mode 100644 index 41b9ffc..0000000 --- a/packages/typescript/tests/src/validatePhoneNumber.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import validatePhoneNumber from '../../src/validatePhoneNumber'; - -describe('validatePhoneNumber', () => { - it('validates phone number in correct format', () => { - const result = validatePhoneNumber('(555) 123-4567'); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('returns error for empty phone number', () => { - const result = validatePhoneNumber(''); - expect(result).toEqual({ isValid: false, errorMsg: 'Phone number cannot be empty' }); - }); - - it('returns error for invalid phone number', () => { - const result = validatePhoneNumber('1234567'); - expect(result).toEqual({ isValid: false, errorMsg: 'Invalid phone number' }); - }); - - it('returns custom error for invalid phone number', () => { - const result = validatePhoneNumber('1234567', [null, 'Custom error 2']); - expect(result).toEqual({ isValid: false, errorMsg: 'Custom error 2' }); - }); - - it('throws error for invalid errorMsg parameter', () => { - expect(() => validatePhoneNumber('(555) 123-4567', [123 as any])).toThrow('All values within the array must be strings or null/undefined.'); - }); -}); diff --git a/packages/typescript/tests/src/validateSurname.test.ts b/packages/typescript/tests/src/validateSurname.test.ts deleted file mode 100644 index f645f2a..0000000 --- a/packages/typescript/tests/src/validateSurname.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import validateSurname from '../../src/validateSurname'; - -describe('validateSurname', () => { - it('validates surname with correct length', () => { - const result = validateSurname('Jackson', { minLength: 3, maxLength: 25 }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('returns error for empty surname', () => { - const result = validateSurname(''); - expect(result).toEqual({ isValid: false, errorMsg: 'Surname cannot be empty' }); - }); - - it('returns error for surname with numbers', () => { - const result = validateSurname('Jack5on'); - expect(result).toEqual({ isValid: false, errorMsg: 'Surname cannot contain numbers' }); - }); - - it('returns error for surname with special characters', () => { - const result = validateSurname('Jack$on'); - expect(result).toEqual({ isValid: false, errorMsg: 'Surname cannot contain special characters' }); - }); - - it('returns error for invalid surname', () => { - const result = validateSurname('Ja', { minLength: 3, maxLength: 25 }); - expect(result).toEqual({ isValid: false, errorMsg: 'This surname is not valid' }); - }); - - it('returns error for too long surname', () => { - const result = validateSurname('JacksonJacksonJacksonJacksonJackson', { minLength: 3, maxLength: 25 }); - expect(result).toEqual({ isValid: false, errorMsg: 'Surname too big, try again' }); - }); - - it('throws error for invalid errorMsg parameter', () => { - expect(() => validateSurname('Jackson', { minLength: 3, maxLength: 25, errorMsg: [123 as unknown as string] })).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it('should return true for valid surnames with custom min and max length', () => { - const result = validateSurname('Jackson', { minLength: 1, maxLength: 20 }); - expect(result.isValid).toBe(true); - }); - - it('should return false for surnames that are too short', () => { - const result = validateSurname('J', { minLength: 2, maxLength: 20 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("This surname is not valid"); - }); - - it('should return false for surnames that are too long', () => { - const result = validateSurname('JacksonJacksonJacksonJacksonJackson', { minLength: 2, maxLength: 20 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe("Surname too big, try again"); - }); - - it('Should return true for a valid surname Jackson, Johnson, or Smith', () => { - const result1 = validateSurname('Jackson'); - const result2 = validateSurname('Johnson'); - const result3 = validateSurname('Smith'); - expect(result1.isValid).toBe(true); - expect(result2.isValid).toBe(true); - expect(result3.isValid).toBe(true); - }); -}); diff --git a/packages/typescript/tests/src/validateTextarea.test.ts b/packages/typescript/tests/src/validateTextarea.test.ts deleted file mode 100644 index 088185f..0000000 --- a/packages/typescript/tests/src/validateTextarea.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import validateTextarea from '../../src/validateTextarea'; - -describe('validateTextarea', () => { - it('validates textarea with correct length', () => { - const result = validateTextarea('This is a valid textarea.', { isRequired: true, maxLength: 50 }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('returns error for empty textarea when isRequired is true', () => { - const result = validateTextarea('', { isRequired: true, maxLength: 50 }); - expect(result).toEqual({ isValid: false, errorMsg: 'Can not be empty' }); - }); - - it('returns error for textarea exceeding maxLength', () => { - const result = validateTextarea('This is a very long textarea that exceeds the maximum length.', { isRequired: true, maxLength: 20 }); - expect(result).toEqual({ isValid: false, errorMsg: 'Textarea cannot exceed 20 characters' }); - }); - - it('returns custom error for textarea exceeding maxLength', () => { - const result = validateTextarea('This is a very long textarea that exceeds the maximum length.', { isRequired: true, maxLength: 20, errorMsg: ['Custom error 1', 'Custom error 2', 'Custom error 3'] }); - expect(result).toEqual({ isValid: false, errorMsg: 'Custom error 1' }); - }); - - it('throws error for invalid errorMsg parameter', () => { - expect(() => validateTextarea('This is a valid textarea.', { isRequired: true, maxLength: 50, errorMsg: [123 as any] })).toThrow('All values within the array must be strings or null/undefined.'); - }); -}); diff --git a/packages/typescript/tests/src/validateUSPhoneNumber.test.ts b/packages/typescript/tests/src/validateUSPhoneNumber.test.ts deleted file mode 100644 index f6e46df..0000000 --- a/packages/typescript/tests/src/validateUSPhoneNumber.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import validateUSPhoneNumber from '../../src/validateUSPhoneNumber'; - -describe('validateUSPhoneNumber', () => { - it('validates US phone number in correct format', () => { - const result = validateUSPhoneNumber('(555) 123-4567'); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('returns error for empty US phone number', () => { - const result = validateUSPhoneNumber(''); - expect(result).toEqual({ isValid: false, errorMsg: 'US phone number cannot be empty' }); - }); - - it('returns error for invalid US phone number', () => { - const result = validateUSPhoneNumber('1234567'); - expect(result).toEqual({ isValid: false, errorMsg: 'Invalid phone number' }); - }); - - it('returns custom error for invalid US phone number', () => { - const result = validateUSPhoneNumber('1234567', [null, 'Custom error 2']); - expect(result).toEqual({ isValid: false, errorMsg: 'Custom error 2' }); - }); - - it('throws error for invalid errorMsg parameter', () => { - expect(() => validateUSPhoneNumber('(555) 123-4567', [123 as any])).toThrow('All values within the array must be strings or null/undefined.'); - }); -}); diff --git a/packages/typescript/tests/src/validateUsername.test.ts b/packages/typescript/tests/src/validateUsername.test.ts deleted file mode 100644 index 6a282ee..0000000 --- a/packages/typescript/tests/src/validateUsername.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import validateUsername from '../../src/validateUsername'; - -describe('validateUsername', () => { - it('validates username with correct length', () => { - const result = validateUsername('User123', { minLength: 3, maxLength: 25 }); - expect(result).toEqual({ isValid: true, errorMsg: null }); - }); - - it('returns error for empty username', () => { - const result = validateUsername(''); - expect(result).toEqual({ isValid: false, errorMsg: 'Username cannot be empty' }); - }); - - it('returns error for username with spaces', () => { - const result = validateUsername('User 123'); - expect(result).toEqual({ isValid: false, errorMsg: 'Username cannot contain spaces' }); - }); - - it('returns error for username starting with number', () => { - const result = validateUsername('123User'); - expect(result).toEqual({ isValid: false, errorMsg: 'Cannot start with a number' }); - }); - - it('returns error for username containing only numbers', () => { - const result = validateUsername('123456'); - expect(result).toEqual({ isValid: false, errorMsg: 'Cannot contain only numbers' }); - }); - - it('returns error for invalid username', () => { - const result = validateUsername('Us', { minLength: 3, maxLength: 25 }); - expect(result).toEqual({ isValid: false, errorMsg: 'Username must be between 3 and 25 characters' }); - }); - - it('returns error for too long username', () => { - const result = validateUsername('User123User123User123User123User123', { minLength: 3, maxLength: 25 }); - expect(result).toEqual({ isValid: false, errorMsg: 'Username must be between 3 and 25 characters' }); - }); - - it('throws error for invalid errorMsg parameter', () => { - expect(() => validateUsername('User123', { minLength: 3, maxLength: 25, errorMsg: [123 as any] })).toThrow('All values within the array must be strings or null/undefined.'); - }); - - it('should return true for valid usernames with custom min and max length', () => { - const result = validateUsername('User123', { minLength: 1, maxLength: 20 }); - expect(result.isValid).toBe(true); - }); - - it('should return false for usernames that are too short', () => { - const result = validateUsername('U', { minLength: 2, maxLength: 20 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Username must be between 2 and 20 characters'); - }); - - it('should return false for usernames that are too long', () => { - const result = validateUsername('User123User123User123User123', { minLength: 2, maxLength: 20 }); - expect(result.isValid).toBe(false); - expect(result.errorMsg).toBe('Username must be between 2 and 20 characters'); - }); - - it('Should return true for a valid username User123, User, or User1234', () => { - const result1 = validateUsername('User123'); - const result2 = validateUsername('User'); - const result3 = validateUsername('User1234'); - expect(result1.isValid).toBe(true); - expect(result2.isValid).toBe(true); - expect(result3.isValid).toBe(true); - }); - - it('Should return false for invalid usernames', () => { - const result1 = validateUsername('User 123'); - const result2 = validateUsername('123User'); - const result3 = validateUsername('@@@@@@'); - expect(result1.isValid).toBe(false); - expect(result2.isValid).toBe(false); - expect(result3.isValid).toBe(false); - }); -}); diff --git a/packages/typescript/tests/testerGeral.test.ts b/packages/typescript/tests/testerGeral.test.ts deleted file mode 100644 index bd0adee..0000000 --- a/packages/typescript/tests/testerGeral.test.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { - cpfIsValid, - cnpjIsValid, - isEmail, - validateEmail, - isCEP, - validateUsername, - validatePassword, - getOnlyEmail, - isCreditCardValid, - identifyFlagCard, - isMACAddress, - isAscii, - isBase64, - isDate, - isDecimal, - isEmpty, - isMD5, - isPort, - isPostalCode, - isTime, - validatePassportNumber, - validateBRPhoneNumber, - validateUSPhoneNumber, - validatePhoneNumber, - isNumber, - passwordStrengthTester, - validateName, - validateSurname, - validateTextarea, -} from '../index'; - -describe('Testes para as funções de validação', () => { - test('cpfIsValid should validate CPF correctly', () => { - expect(cpfIsValid('705.403.160-16').isValid).toBe(true); - expect(cpfIsValid('123.456.789-10').isValid).toBe(false); - }); - - test('cnpjIsValid should validate CNPJ correctly', () => { - expect(cnpjIsValid('31.298.243/0001-81').isValid).toBe(true); - expect(cnpjIsValid('12.345.678/0001-91').isValid).toBe(false); - }); - - test('isEmail should validate email addresses correctly', () => { - expect(isEmail('test@example.com')).toBe(true); - expect(isEmail('invalid-email')).toBe(false); - }); - - test('validateEmail should validate email addresses correctly', () => { - expect(validateEmail('test@example.com').isValid).toBe(true); - expect(validateEmail('invalid-email').isValid).toBe(false); - }); - - test('isCEP should validate CEP format correctly', () => { - expect(isCEP('12345-678')).toBe(true); - // expect(isCEP('1234-5678')).toBe(false); Deveria ser falsy - }); - - test('validateUsername should validate usernames correctly', () => { - expect(validateUsername('username123').isValid).toBe(true); - }); - - test('validatePassword should validate passwords correctly', () => { - expect(validatePassword('Password123').isValid).toBe(true); - }); - - test('getOnlyEmail should extract only the email from a string', () => { - expect(getOnlyEmail('Email: test@example.com aaaa wwa awdawdawd@@@adw@@dawwad awdawd@dawawd')).toBe('test@example.com'); - expect(getOnlyEmail('No email here')).toBe('No email found'); - }); - - test('isCreditCardValid should validate credit card numbers correctly', () => { - expect(isCreditCardValid('1234567890123456')).toBe(false); - expect(isCreditCardValid('12345678901234567')).toBe(false); - }); - - test('identifyFlagCard should identify credit card flags correctly', () => { - expect(identifyFlagCard('123456')).toBe('Unknown'); - expect(identifyFlagCard('411111')).toBe('Visa'); - }); - - test('isMACAddress should validate MAC addresses correctly', () => { - expect(isMACAddress('00:1A:2B:3C:4D:5E')).toBe(true); - expect(isMACAddress('invalid-mac')).toBe(false); - }); - - test('isAscii should validate ASCII strings correctly', () => { - expect(isAscii('Hello, World!')).toBe(true); - expect(isAscii('Olá, Mundo!')).toBe(false); - }); - - test('isBase64 should validate Base64 encoded strings correctly', () => { - expect(isBase64('SGVsbG8sIFdvcmxkIQ==')).toBe(true); - expect(isBase64('Not Base64')).toBe(false); - }); - - test('isDate should validate date strings correctly', () => { - expect(isDate('2023-08-19')).toBe(true); - expect(isDate('Invalid Date')).toBe(false); - }); - - test('isEmpty should validate if a string is empty', () => { - expect(isEmpty('')).toBe(true); - expect(isEmpty('Not empty')).toBe(false); - }); - - test('isMD5 should validate MD5 hashes correctly', () => { - expect(isMD5('d41d8cd98f00b204e9800998ecf8427e')).toBe(false); - expect(isMD5('invalid-md5')).toBe(false); - }); - - test('isPort should validate port numbers correctly', () => { - expect(isPort('8080')).toBe(true); - expect(isPort('99999')).toBe(false); - }); - - test('isPostalCode should validate postal codes correctly', () => { - expect(isPostalCode('12345-678')).toBe(true); - expect(isPostalCode('1234-567')).toBe(false); - }); - - test('isTime should validate time strings correctly', () => { - expect(isTime('12:34:56')).toBe(true); - expect(isTime('25:00:00')).toBe(false); - }); - - test('validatePassportNumber should validate passport numbers correctly', () => { - expect(validatePassportNumber('AB123456').isValid).toBe(true); - expect(validatePassportNumber('InvalidPassport').isValid).toBe(false); - }); - - test('validateBRPhoneNumber should validate Brazilian phone numbers correctly', () => { - expect(validateBRPhoneNumber('(12) 34567-8901').isValid).toBe(true); - expect(validateBRPhoneNumber('123-456-7890').isValid).toBe(false); - }); - - test('validateUSPhoneNumber should validate US phone numbers correctly', () => { - expect(validateUSPhoneNumber('(123) 456-7890').isValid).toBe(true); - //expect(validateUSPhoneNumber('123-456-7890').isValid).toBe(false); N sei - }); - - test('validatePhoneNumber should validate phone numbers correctly', () => { - //expect(validatePhoneNumber('123-456-7890').isValid).toBe(true); // Deveria ser true - expect(validatePhoneNumber('InvalidPhoneNumber').isValid).toBe(false); - }); - - test('isNumber should validate numbers correctly', () => { - expect(isNumber('123')).toBe(true); - expect(isNumber('NotANumber')).toBe(false); - }); - - test('passwordStrengthTester should assess password strength correctly', () => { - expect(passwordStrengthTester('Password123')).toBe('strong'); - expect(passwordStrengthTester('weak')).toBe('weak'); - }); - - test('validateName should validate names correctly', () => { - expect(validateName('John').isValid).toBe(true); - expect(validateName('InvalidName@').isValid).toBe(false); - }); - - test('validateSurname should validate surnames correctly', () => { - expect(validateSurname('Doe').isValid).toBe(true); - expect(validateSurname('InvalidSurname@').isValid).toBe(false); - }); - - test('validateTextarea should validate text areas correctly', () => { - expect(validateTextarea('Hello, World!').isValid).toBe(true); - expect(validateTextarea('', { isRequired: true }).isValid).toBe(false); - }); -}); diff --git a/packages/typescript/todo.txt b/packages/typescript/todo.txt deleted file mode 100644 index bcfca03..0000000 --- a/packages/typescript/todo.txt +++ /dev/null @@ -1,11 +0,0 @@ -Arquivos de texto (.txt, .csv, .json, .xml, etc.): Útil se o seu aplicativo precisa manipular ou analisar dados em texto simples. - -Arquivos de código-fonte (.js, .ts, .py, .java, etc.): Útil se o seu aplicativo precisa analisar ou manipular código-fonte. - -Arquivos de documento (.docx, .xlsx, .pptx, etc.): Útil se o seu aplicativo precisa manipular documentos do Office. - -Arquivos de áudio (.mp3, .wav, .aac, etc.): Útil se o seu aplicativo precisa manipular arquivos de áudio. - -Arquivos de vídeo (.mp4, .avi, .mkv, etc.): Útil se o seu aplicativo precisa manipular arquivos de vídeo. - -Arquivos compactados (.zip, .rar, .tar.gz, etc.): Útil se o seu aplicativo precisa manipular arquivos compactados. diff --git a/packages/typescript/tsconfig.json b/packages/typescript/tsconfig.json deleted file mode 100644 index 8e9273d..0000000 --- a/packages/typescript/tsconfig.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./src", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./types", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - }, - "include": ["src/**/*", "index.ts", ".eslintrc.js"], -} diff --git a/packages/typescript/tsconfig.types.json b/packages/typescript/tsconfig.types.json deleted file mode 100644 index 408ddb1..0000000 --- a/packages/typescript/tsconfig.types.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declaration": true, - "declarationDir": "./types", - "removeComments": false - } -} diff --git a/packages/typescript/webpack.config.js b/packages/typescript/webpack.config.js deleted file mode 100644 index 282cfde..0000000 --- a/packages/typescript/webpack.config.js +++ /dev/null @@ -1,24 +0,0 @@ -const path = require('path'); - -module.exports = { - mode: 'production', // production mode - entry: './index.ts', // entry point of your application - output: { - filename: 'bundle.js', // output file name - path: path.resolve(__dirname, 'dist'), // output folder - libraryTarget: 'umd', // this allows your module to be used via require() and as a global - globalObject: 'this' // this ensures that 'this' is 'window' in a browser environment - }, - module: { - rules: [ - { - test: /\.tsx?$/, - use: 'ts-loader', - exclude: /node_modules/, - }, - ], - }, - resolve: { - extensions: ['.ts'], - }, -}; diff --git a/packages/typescript/yarn.lock b/packages/typescript/yarn.lock deleted file mode 100644 index 58f4e29..0000000 --- a/packages/typescript/yarn.lock +++ /dev/null @@ -1,3432 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== - dependencies: - "@babel/types" "^7.20.7" - -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.6.tgz#d5dc16cac025d313ee101108ba5714ea10eb3ed0" - integrity sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.12": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/mocha@^10.0.6": - version "10.0.6" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" - integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== - -"@types/node@*", "@types/node@^20.5.1": - version "20.11.28" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.28.tgz#4fd5b2daff2e580c12316e457473d68f15ee6f66" - integrity sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA== - dependencies: - undici-types "~5.26.4" - -"@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz#5a5fcad1a7baed85c10080d71ad901f98c38d5b7" - integrity sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/type-utils" "7.2.0" - "@typescript-eslint/utils" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" - integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== - dependencies: - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/typescript-estree" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" - integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== - dependencies: - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - -"@typescript-eslint/type-utils@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz#7be5c30e9b4d49971b79095a1181324ef6089a19" - integrity sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA== - dependencies: - "@typescript-eslint/typescript-estree" "7.2.0" - "@typescript-eslint/utils" "7.2.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" - integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== - -"@typescript-eslint/typescript-estree@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" - integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== - dependencies: - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/visitor-keys" "7.2.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.2.0.tgz#fc8164be2f2a7068debb4556881acddbf0b7ce2a" - integrity sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "7.2.0" - "@typescript-eslint/types" "7.2.0" - "@typescript-eslint/typescript-estree" "7.2.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" - integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== - dependencies: - "@typescript-eslint/types" "7.2.0" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" - integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" - integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" - integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.12.1" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" - integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-opt" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - "@webassemblyjs/wast-printer" "1.12.1" - -"@webassemblyjs/wasm-gen@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" - integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" - integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" - integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" - integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" - integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== - -"@webpack-cli/info@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" - integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== - -"@webpack-cli/serve@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" - integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.21.10, browserslist@^4.22.2: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001597" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.14: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -electron-to-chromium@^1.4.668: - version "1.4.708" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.708.tgz#d54d3b47cb44ae6b190067439c42135456907893" - integrity sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enhanced-resolve@^5.0.0, enhanced-resolve@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -envinfo@^7.7.3: - version "7.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" - integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-module-lexer@^1.2.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.2.tgz#ba1a62255ff9b41023aaf9bd08c016a5f1a3fef3" - integrity sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw== - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -eslint-plugin-prettier@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.57.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -interpret@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" - integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.6.4: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.0, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== - dependencies: - resolve "^1.20.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.20.0: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.4, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.3.10: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^5.26.0: - version "5.29.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.2.tgz#c17d573ce1da1b30f21a877bffd5655dd86fdb35" - integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -ts-api-utils@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-jest@^29.1.1: - version "29.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" - integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - -ts-loader@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" - integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - source-map "^0.7.4" - -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typescript@^5.4.2: - version "5.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" - integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webpack-cli@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" - integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.1" - "@webpack-cli/info" "^2.0.2" - "@webpack-cli/serve" "^2.0.5" - colorette "^2.0.14" - commander "^10.0.1" - cross-spawn "^7.0.3" - envinfo "^7.7.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^3.1.1" - rechoir "^0.8.0" - webpack-merge "^5.7.3" - -webpack-merge@^5.7.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.91.0: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.12.1" - "@webassemblyjs/wasm-edit" "^1.12.1" - "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.1" - webpack-sources "^3.2.3" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.0.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/docs/postcss.config.mjs b/postcss.config.mjs similarity index 100% rename from docs/postcss.config.mjs rename to postcss.config.mjs diff --git a/docs/public/ads.txt b/public/ads.txt similarity index 100% rename from docs/public/ads.txt rename to public/ads.txt diff --git a/docs/public/android-chrome-192x192.png b/public/android-chrome-192x192.png similarity index 100% rename from docs/public/android-chrome-192x192.png rename to public/android-chrome-192x192.png diff --git a/docs/public/android-chrome-512x512.png b/public/android-chrome-512x512.png similarity index 100% rename from docs/public/android-chrome-512x512.png rename to public/android-chrome-512x512.png diff --git a/docs/public/apple-touch-icon.png b/public/apple-touch-icon.png similarity index 100% rename from docs/public/apple-touch-icon.png rename to public/apple-touch-icon.png diff --git a/docs/public/background.png b/public/background.png similarity index 100% rename from docs/public/background.png rename to public/background.png diff --git a/docs/public/bgstyle.png b/public/bgstyle.png similarity index 100% rename from docs/public/bgstyle.png rename to public/bgstyle.png diff --git a/docs/public/favicon-16x16.png b/public/favicon-16x16.png similarity index 100% rename from docs/public/favicon-16x16.png rename to public/favicon-16x16.png diff --git a/docs/public/favicon-32x32.png b/public/favicon-32x32.png similarity index 100% rename from docs/public/favicon-32x32.png rename to public/favicon-32x32.png diff --git a/docs/public/logo.png b/public/logo.png similarity index 100% rename from docs/public/logo.png rename to public/logo.png diff --git a/docs/public/logo_circle.png b/public/logo_circle.png similarity index 100% rename from docs/public/logo_circle.png rename to public/logo_circle.png diff --git a/docs/public/logo_no_bg.png b/public/logo_no_bg.png similarity index 100% rename from docs/public/logo_no_bg.png rename to public/logo_no_bg.png diff --git a/docs/public/mstile-150x150.png b/public/mstile-150x150.png similarity index 100% rename from docs/public/mstile-150x150.png rename to public/mstile-150x150.png diff --git a/docs/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg similarity index 100% rename from docs/public/safari-pinned-tab.svg rename to public/safari-pinned-tab.svg diff --git a/docs/src/app/NOTWORKING_sitemap_copy.ts b/src/app/NOTWORKING_sitemap_copy.ts similarity index 100% rename from docs/src/app/NOTWORKING_sitemap_copy.ts rename to src/app/NOTWORKING_sitemap_copy.ts diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/cnpjIsValid/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/cnpjIsValid/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/cnpjIsValid/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/cnpjIsValid/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/cpfIsValid/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/cpfIsValid/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/cpfIsValid/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/cpfIsValid/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/getOnlyEmail/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/getOnlyEmail/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/getOnlyEmail/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/getOnlyEmail/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/identifyFlagCard/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/identifyFlagCard/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/identifyFlagCard/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/identifyFlagCard/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isAscii/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isAscii/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isAscii/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isAscii/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isBase64/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isBase64/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isBase64/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isBase64/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isCEP/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isCEP/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isCEP/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isCEP/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isCreditCardValid/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isCreditCardValid/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isCreditCardValid/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isCreditCardValid/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isDate/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isDate/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isDate/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isDate/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isDecimal/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isDecimal/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isDecimal/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isDecimal/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isEmail/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isEmail/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isEmail/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isEmail/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isEmpty/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isEmpty/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isEmpty/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isEmpty/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isMACAddress/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isMACAddress/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isMACAddress/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isMACAddress/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isMD5/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isMD5/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isMD5/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isMD5/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isNumber/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isNumber/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isNumber/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isNumber/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isPort/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isPort/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isPort/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isPort/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isPostalCode/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isPostalCode/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isPostalCode/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isPostalCode/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isTime/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isTime/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isTime/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isTime/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidAudio/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isValidAudio/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidAudio/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isValidAudio/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidImage/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isValidImage/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidImage/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isValidImage/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidPdf/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isValidPdf/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidPdf/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isValidPdf/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidTxt/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isValidTxt/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidTxt/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isValidTxt/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidVideo/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/isValidVideo/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/isValidVideo/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/isValidVideo/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/passwordStrengthTester/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/passwordStrengthTester/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/passwordStrengthTester/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/passwordStrengthTester/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateBRPhoneNumber/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateBRPhoneNumber/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateBRPhoneNumber/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateBRPhoneNumber/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateEmail/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateEmail/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateEmail/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateEmail/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateName/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateName/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateName/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateName/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validatePassportNumber/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validatePassportNumber/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validatePassportNumber/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validatePassportNumber/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validatePassword/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validatePassword/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validatePassword/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validatePassword/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validatePhoneNumber/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validatePhoneNumber/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validatePhoneNumber/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validatePhoneNumber/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateSurname/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateSurname/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateSurname/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateSurname/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateTextarea/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateTextarea/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateTextarea/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateTextarea/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateUSPhoneNumber/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateUSPhoneNumber/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateUSPhoneNumber/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateUSPhoneNumber/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateUsername/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/functions/validateUsername/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/functions/validateUsername/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/functions/validateUsername/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/layout.tsx b/src/app/[locale]/(doc-session)/documentation/js/layout.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/layout.tsx rename to src/app/[locale]/(doc-session)/documentation/js/layout.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/page.tsx b/src/app/[locale]/(doc-session)/documentation/js/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/page.tsx rename to src/app/[locale]/(doc-session)/documentation/js/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/js/subComponents/MainPageSyntexHightlighter.tsx b/src/app/[locale]/(doc-session)/documentation/js/subComponents/MainPageSyntexHightlighter.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/js/subComponents/MainPageSyntexHightlighter.tsx rename to src/app/[locale]/(doc-session)/documentation/js/subComponents/MainPageSyntexHightlighter.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/page.tsx b/src/app/[locale]/(doc-session)/documentation/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/page.tsx rename to src/app/[locale]/(doc-session)/documentation/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/py/layout.tsx b/src/app/[locale]/(doc-session)/documentation/py/layout.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/py/layout.tsx rename to src/app/[locale]/(doc-session)/documentation/py/layout.tsx diff --git a/docs/src/app/[locale]/(doc-session)/documentation/py/page.tsx b/src/app/[locale]/(doc-session)/documentation/py/page.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/documentation/py/page.tsx rename to src/app/[locale]/(doc-session)/documentation/py/page.tsx diff --git a/docs/src/app/[locale]/(doc-session)/layout.tsx b/src/app/[locale]/(doc-session)/layout.tsx similarity index 100% rename from docs/src/app/[locale]/(doc-session)/layout.tsx rename to src/app/[locale]/(doc-session)/layout.tsx diff --git a/docs/src/app/[locale]/about/page.tsx b/src/app/[locale]/about/page.tsx similarity index 100% rename from docs/src/app/[locale]/about/page.tsx rename to src/app/[locale]/about/page.tsx diff --git a/docs/src/app/[locale]/info/page.tsx b/src/app/[locale]/info/page.tsx similarity index 100% rename from docs/src/app/[locale]/info/page.tsx rename to src/app/[locale]/info/page.tsx diff --git a/docs/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx similarity index 100% rename from docs/src/app/[locale]/layout.tsx rename to src/app/[locale]/layout.tsx diff --git a/docs/src/app/[locale]/news/client.tsx b/src/app/[locale]/news/client.tsx similarity index 100% rename from docs/src/app/[locale]/news/client.tsx rename to src/app/[locale]/news/client.tsx diff --git a/docs/src/app/[locale]/news/layout.tsx b/src/app/[locale]/news/layout.tsx similarity index 100% rename from docs/src/app/[locale]/news/layout.tsx rename to src/app/[locale]/news/layout.tsx diff --git a/docs/src/app/[locale]/news/page.tsx b/src/app/[locale]/news/page.tsx similarity index 100% rename from docs/src/app/[locale]/news/page.tsx rename to src/app/[locale]/news/page.tsx diff --git a/docs/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx similarity index 100% rename from docs/src/app/[locale]/page.tsx rename to src/app/[locale]/page.tsx diff --git a/docs/src/app/[locale]/privacity-polices/page.tsx b/src/app/[locale]/privacity-polices/page.tsx similarity index 100% rename from docs/src/app/[locale]/privacity-polices/page.tsx rename to src/app/[locale]/privacity-polices/page.tsx diff --git a/docs/src/app/[locale]/terms/page.tsx b/src/app/[locale]/terms/page.tsx similarity index 100% rename from docs/src/app/[locale]/terms/page.tsx rename to src/app/[locale]/terms/page.tsx diff --git a/docs/src/app/favicon.ico b/src/app/favicon.ico similarity index 100% rename from docs/src/app/favicon.ico rename to src/app/favicon.ico diff --git a/docs/src/app/globals.css b/src/app/globals.css similarity index 100% rename from docs/src/app/globals.css rename to src/app/globals.css diff --git a/docs/src/app/manifest.ts b/src/app/manifest.ts similarity index 100% rename from docs/src/app/manifest.ts rename to src/app/manifest.ts diff --git a/docs/src/app/opengraph-image.png b/src/app/opengraph-image.png similarity index 100% rename from docs/src/app/opengraph-image.png rename to src/app/opengraph-image.png diff --git a/docs/src/app/robots.ts b/src/app/robots.ts similarity index 100% rename from docs/src/app/robots.ts rename to src/app/robots.ts diff --git a/docs/src/app/sitemap.ts b/src/app/sitemap.ts similarity index 100% rename from docs/src/app/sitemap.ts rename to src/app/sitemap.ts diff --git a/docs/src/app/twitter-image.png b/src/app/twitter-image.png similarity index 100% rename from docs/src/app/twitter-image.png rename to src/app/twitter-image.png diff --git a/docs/src/assets/icons/java-icon.svg b/src/assets/icons/java-icon.svg similarity index 100% rename from docs/src/assets/icons/java-icon.svg rename to src/assets/icons/java-icon.svg diff --git a/docs/src/assets/icons/python-icon.svg b/src/assets/icons/python-icon.svg similarity index 100% rename from docs/src/assets/icons/python-icon.svg rename to src/assets/icons/python-icon.svg diff --git a/docs/src/components/Adsense/Adsbygoogle.tsx b/src/components/Adsense/Adsbygoogle.tsx similarity index 100% rename from docs/src/components/Adsense/Adsbygoogle.tsx rename to src/components/Adsense/Adsbygoogle.tsx diff --git a/docs/src/components/Adsense/index.tsx b/src/components/Adsense/index.tsx similarity index 100% rename from docs/src/components/Adsense/index.tsx rename to src/components/Adsense/index.tsx diff --git a/docs/src/components/Drawer/drawer.css b/src/components/Drawer/drawer.css similarity index 100% rename from docs/src/components/Drawer/drawer.css rename to src/components/Drawer/drawer.css diff --git a/docs/src/components/Drawer/index.tsx b/src/components/Drawer/index.tsx similarity index 100% rename from docs/src/components/Drawer/index.tsx rename to src/components/Drawer/index.tsx diff --git a/docs/src/components/Footer/index.tsx b/src/components/Footer/index.tsx similarity index 100% rename from docs/src/components/Footer/index.tsx rename to src/components/Footer/index.tsx diff --git a/docs/src/components/Header/index.tsx b/src/components/Header/index.tsx similarity index 100% rename from docs/src/components/Header/index.tsx rename to src/components/Header/index.tsx diff --git a/docs/src/components/MainBg/index.tsx b/src/components/MainBg/index.tsx similarity index 100% rename from docs/src/components/MainBg/index.tsx rename to src/components/MainBg/index.tsx diff --git a/docs/src/components/SidebarWrapper/js/index.tsx b/src/components/SidebarWrapper/js/index.tsx similarity index 100% rename from docs/src/components/SidebarWrapper/js/index.tsx rename to src/components/SidebarWrapper/js/index.tsx diff --git a/docs/src/css/functions.css b/src/css/functions.css similarity index 100% rename from docs/src/css/functions.css rename to src/css/functions.css diff --git a/docs/src/css/functions.css.map b/src/css/functions.css.map similarity index 100% rename from docs/src/css/functions.css.map rename to src/css/functions.css.map diff --git a/docs/src/css/functions.scss b/src/css/functions.scss similarity index 100% rename from docs/src/css/functions.scss rename to src/css/functions.scss diff --git a/docs/src/css/infos.css b/src/css/infos.css similarity index 100% rename from docs/src/css/infos.css rename to src/css/infos.css diff --git a/docs/src/css/infos.css.map b/src/css/infos.css.map similarity index 100% rename from docs/src/css/infos.css.map rename to src/css/infos.css.map diff --git a/docs/src/css/infos.scss b/src/css/infos.scss similarity index 100% rename from docs/src/css/infos.scss rename to src/css/infos.scss diff --git a/docs/src/css/news.css b/src/css/news.css similarity index 100% rename from docs/src/css/news.css rename to src/css/news.css diff --git a/docs/src/css/news.css.map b/src/css/news.css.map similarity index 100% rename from docs/src/css/news.css.map rename to src/css/news.css.map diff --git a/docs/src/css/news.scss b/src/css/news.scss similarity index 100% rename from docs/src/css/news.scss rename to src/css/news.scss diff --git a/docs/src/declarations/empty.txt b/src/declarations/empty.txt similarity index 100% rename from docs/src/declarations/empty.txt rename to src/declarations/empty.txt diff --git a/docs/src/fonts/Jersey25/Jersey25-Regular.ttf b/src/fonts/Jersey25/Jersey25-Regular.ttf similarity index 100% rename from docs/src/fonts/Jersey25/Jersey25-Regular.ttf rename to src/fonts/Jersey25/Jersey25-Regular.ttf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Black Az.otf b/src/fonts/Sofia-pro/Sofia Pro Black Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Black Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Black Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Black Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro Black Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Black Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Black Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Bold Az.otf b/src/fonts/Sofia-pro/Sofia Pro Bold Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Bold Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Bold Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Bold Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro Bold Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Bold Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Bold Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro ExtraLight Az.otf b/src/fonts/Sofia-pro/Sofia Pro ExtraLight Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro ExtraLight Az.otf rename to src/fonts/Sofia-pro/Sofia Pro ExtraLight Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro ExtraLight Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro ExtraLight Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro ExtraLight Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro ExtraLight Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Light Az.otf b/src/fonts/Sofia-pro/Sofia Pro Light Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Light Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Light Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Light Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro Light Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Light Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Light Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Medium Az.otf b/src/fonts/Sofia-pro/Sofia Pro Medium Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Medium Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Medium Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Medium Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro Medium Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Medium Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Medium Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Regular Az.otf b/src/fonts/Sofia-pro/Sofia Pro Regular Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Regular Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Regular Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Regular Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro Regular Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Regular Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Regular Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Semi Bold Az.otf b/src/fonts/Sofia-pro/Sofia Pro Semi Bold Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Semi Bold Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Semi Bold Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro Semi Bold Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro Semi Bold Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro Semi Bold Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro Semi Bold Italic Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro UltraLight Az.otf b/src/fonts/Sofia-pro/Sofia Pro UltraLight Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro UltraLight Az.otf rename to src/fonts/Sofia-pro/Sofia Pro UltraLight Az.otf diff --git a/docs/src/fonts/Sofia-pro/Sofia Pro UltraLight Italic Az.otf b/src/fonts/Sofia-pro/Sofia Pro UltraLight Italic Az.otf similarity index 100% rename from docs/src/fonts/Sofia-pro/Sofia Pro UltraLight Italic Az.otf rename to src/fonts/Sofia-pro/Sofia Pro UltraLight Italic Az.otf diff --git a/docs/src/fonts/index.ts b/src/fonts/index.ts similarity index 100% rename from docs/src/fonts/index.ts rename to src/fonts/index.ts diff --git a/docs/src/locales/ar/ar.json b/src/locales/ar/ar.json similarity index 100% rename from docs/src/locales/ar/ar.json rename to src/locales/ar/ar.json diff --git a/docs/src/locales/client.ts b/src/locales/client.ts similarity index 100% rename from docs/src/locales/client.ts rename to src/locales/client.ts diff --git a/docs/src/locales/de/de.json b/src/locales/de/de.json similarity index 100% rename from docs/src/locales/de/de.json rename to src/locales/de/de.json diff --git a/docs/src/locales/en/en.json b/src/locales/en/en.json similarity index 100% rename from docs/src/locales/en/en.json rename to src/locales/en/en.json diff --git a/docs/src/locales/es/es.json b/src/locales/es/es.json similarity index 100% rename from docs/src/locales/es/es.json rename to src/locales/es/es.json diff --git a/docs/src/locales/fr/fr.json b/src/locales/fr/fr.json similarity index 100% rename from docs/src/locales/fr/fr.json rename to src/locales/fr/fr.json diff --git a/docs/src/locales/it/it.json b/src/locales/it/it.json similarity index 100% rename from docs/src/locales/it/it.json rename to src/locales/it/it.json diff --git a/docs/src/locales/ja/ja.json b/src/locales/ja/ja.json similarity index 100% rename from docs/src/locales/ja/ja.json rename to src/locales/ja/ja.json diff --git a/docs/src/locales/nl/nl.json b/src/locales/nl/nl.json similarity index 100% rename from docs/src/locales/nl/nl.json rename to src/locales/nl/nl.json diff --git a/docs/src/locales/pt/pt.json b/src/locales/pt/pt.json similarity index 100% rename from docs/src/locales/pt/pt.json rename to src/locales/pt/pt.json diff --git a/docs/src/locales/ru/ru.json b/src/locales/ru/ru.json similarity index 100% rename from docs/src/locales/ru/ru.json rename to src/locales/ru/ru.json diff --git a/docs/src/locales/server.ts b/src/locales/server.ts similarity index 100% rename from docs/src/locales/server.ts rename to src/locales/server.ts diff --git a/docs/src/locales/tr/tr.json b/src/locales/tr/tr.json similarity index 100% rename from docs/src/locales/tr/tr.json rename to src/locales/tr/tr.json diff --git a/docs/src/locales/zh-Hans/zh-Hans.json b/src/locales/zh-Hans/zh-Hans.json similarity index 100% rename from docs/src/locales/zh-Hans/zh-Hans.json rename to src/locales/zh-Hans/zh-Hans.json diff --git a/docs/src/middleware.ts b/src/middleware.ts similarity index 100% rename from docs/src/middleware.ts rename to src/middleware.ts diff --git a/docs/src/types/Functions/Javascript/index.ts b/src/types/Functions/Javascript/index.ts similarity index 100% rename from docs/src/types/Functions/Javascript/index.ts rename to src/types/Functions/Javascript/index.ts diff --git a/docs/src/types/Functions/Python/index.ts b/src/types/Functions/Python/index.ts similarity index 100% rename from docs/src/types/Functions/Python/index.ts rename to src/types/Functions/Python/index.ts diff --git a/docs/src/types/Functions/index.ts b/src/types/Functions/index.ts similarity index 100% rename from docs/src/types/Functions/index.ts rename to src/types/Functions/index.ts diff --git a/docs/src/types/Locales/index.ts b/src/types/Locales/index.ts similarity index 100% rename from docs/src/types/Locales/index.ts rename to src/types/Locales/index.ts diff --git a/docs/src/types/Params/index.ts b/src/types/Params/index.ts similarity index 100% rename from docs/src/types/Params/index.ts rename to src/types/Params/index.ts diff --git a/docs/tailwind.config.ts b/tailwind.config.ts similarity index 100% rename from docs/tailwind.config.ts rename to tailwind.config.ts diff --git a/docs/tsconfig.json b/tsconfig.json similarity index 100% rename from docs/tsconfig.json rename to tsconfig.json diff --git a/docs/yarn.lock b/yarn.lock similarity index 100% rename from docs/yarn.lock rename to yarn.lock