@danielarndt0/brutils-cli 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +3346 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +442 -0
- package/dist/index.js +2286 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/errors/brutils.error.ts","../src/core/utils/digits.ts","../src/services/cpf/cpf.shared.ts","../src/core/utils/format.ts","../src/services/cpf/cpf.formatter.ts","../src/core/utils/mask.ts","../src/services/cpf/cpf.masker.ts","../src/core/utils/random.ts","../src/services/cpf/cpf.generator.ts","../src/services/cpf/cpf.validator.ts","../src/services/cnpj/cnpj.shared.ts","../src/services/cnpj/cnpj.formatter.ts","../src/services/cnpj/cnpj.masker.ts","../src/services/cnpj/cnpj.generator.ts","../src/services/cnpj/cnpj.validator.ts","../src/services/cep/cep.shared.ts","../src/services/cep/cep.formatter.ts","../src/services/cep/cep.masker.ts","../src/services/cep/cep.generator.ts","../src/services/cep/cep.validator.ts","../src/services/credit-card/credit-card.constants.ts","../src/services/credit-card/credit-card.detector.ts","../src/core/utils/array.ts","../src/services/credit-card/credit-card.generator.ts","../src/services/credit-card/credit-card.validator.ts","../src/core/utils/seeded-random.ts","../src/services/random-number/random-number.generator.ts","../src/services/number-picker/number-picker.service.ts","../src/services/zip/resolve-zip-output.ts","../src/services/zip/collect-zip-inputs.ts","../src/services/zip/create-zip.ts","../src/services/zip/list-zip.ts","../src/services/archive/zip-archive.ts","../src/core/utils/glob.ts","../src/services/zip/test-zip.ts","../src/services/unzip/resolve-unzip-output.ts","../src/services/unzip/extract-zip.ts","../src/services/unzip/list-unzip.ts","../src/services/unzip/test-unzip.ts","../src/services/str/str.service.ts","../src/services/json/json.service.ts","../src/services/hash/hash.service.ts","../src/services/id/id.service.ts","../src/services/date/date.service.ts"],"sourcesContent":["export class BRUtilsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BRUtilsError\";\n }\n}\n","export function onlyDigits(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\nexport function allDigitsEqual(value: string): boolean {\n return /^(\\d)\\1+$/.test(value);\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { onlyDigits } from \"../../core/utils/digits.js\";\nimport type { CPFStateCode } from \"./cpf.types.js\";\nconst CPF_STATE_REGION_MAP: Record<CPFStateCode, number> = {\n AC: 2,\n AL: 4,\n AM: 2,\n AP: 2,\n BA: 5,\n CE: 3,\n DF: 1,\n ES: 7,\n GO: 1,\n MA: 3,\n MG: 6,\n MS: 1,\n MT: 1,\n PA: 2,\n PB: 4,\n PE: 4,\n PI: 3,\n PR: 9,\n RJ: 7,\n RN: 4,\n RO: 2,\n RR: 2,\n RS: 0,\n SC: 9,\n SE: 5,\n SP: 8,\n TO: 1\n};\nconst REGION_TO_STATE: Record<number, CPFStateCode> = {\n 0: \"RS\",\n 1: \"DF\",\n 2: \"AC\",\n 3: \"CE\",\n 4: \"AL\",\n 5: \"BA\",\n 6: \"MG\",\n 7: \"RJ\",\n 8: \"SP\",\n 9: \"PR\"\n};\nexport function normalizeCPF(value: string): string {\n return onlyDigits(value);\n}\nexport function stripCPF(value: string): string {\n return normalizeCPF(value);\n}\nexport function ensureCPFLength(value: string): string {\n const digits = normalizeCPF(value);\n if (digits.length !== 11)\n throw new BRUtilsError(\"CPF must contain exactly 11 digits.\");\n return digits;\n}\nexport function calculateCPFCheckDigit(digits: number[]): number {\n const factorStart = digits.length + 1;\n const sum = digits.reduce(\n (acc, digit, index) => acc + digit * (factorStart - index),\n 0\n );\n const remainder = (sum * 10) % 11;\n return remainder === 10 ? 0 : remainder;\n}\nexport function resolveCPFRegionDigit(\n state?: CPFStateCode\n): number | undefined {\n return state ? CPF_STATE_REGION_MAP[state] : undefined;\n}\nexport function resolveCPFStateFromDigits(\n value: string\n): CPFStateCode | undefined {\n const digits = normalizeCPF(value);\n if (digits.length < 9) return undefined;\n return REGION_TO_STATE[Number(digits[8])];\n}\n","export function formatCPF(value: string): string {\n return value.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/, \"$1.$2.$3-$4\");\n}\n\nexport function formatCNPJ(value: string): string {\n return value.replace(/(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})/, \"$1.$2.$3/$4-$5\");\n}\n\nexport function formatCEP(value: string): string {\n return value.replace(/(\\d{5})(\\d{3})/, \"$1-$2\");\n}\n","import { formatCPF } from \"../../core/utils/format.js\";\nimport { ensureCPFLength, stripCPF } from \"./cpf.shared.js\";\nexport function formatCPFValue(value: string): string {\n return formatCPF(ensureCPFLength(value));\n}\nexport { stripCPF };\n","import { BRUtilsError } from \"../errors/brutils.error.js\";\n\nexport function applyDigitMask(value: string, pattern: string): string {\n let index = 0;\n let result = \"\";\n for (const token of pattern) {\n if (token === \"*\") {\n if (value[index] === undefined)\n throw new BRUtilsError(\n \"Mask pattern consumes more digits than the input provides.\"\n );\n result += \"*\";\n index += 1;\n continue;\n }\n if (token === \"#\" || /\\d/.test(token)) {\n const digit = value[index];\n if (digit === undefined)\n throw new BRUtilsError(\n \"Mask pattern consumes more digits than the input provides.\"\n );\n result += digit;\n index += 1;\n continue;\n }\n result += token;\n }\n if (index != value.length)\n throw new BRUtilsError(\n `Mask pattern consumed ${index} digits, but the input has ${value.length}.`\n );\n return result;\n}\n","import { applyDigitMask } from \"../../core/utils/mask.js\";\nimport { ensureCPFLength } from \"./cpf.shared.js\";\nimport type { CPFMaskOptions } from \"./cpf.types.js\";\nconst DEFAULT_CPF_MASK_PATTERN = \"***.***.***-##\";\nexport function maskCPF(value: string, options: CPFMaskOptions = {}): string {\n return applyDigitMask(\n ensureCPFLength(value),\n options.pattern ?? DEFAULT_CPF_MASK_PATTERN\n );\n}\n","export function randomDigit(): number {\n return Math.floor(Math.random() * 10);\n}\n\nexport function randomDigits(length: number): number[] {\n return Array.from({ length }, () => randomDigit());\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { formatCPF } from \"../../core/utils/format.js\";\nimport { randomDigit, randomDigits } from \"../../core/utils/random.js\";\nimport { calculateCPFCheckDigit, resolveCPFRegionDigit } from \"./cpf.shared.js\";\nimport type {\n CPFGenerateBatchOptions,\n CPFGenerateOptions\n} from \"./cpf.types.js\";\nexport function generateCPF(options: CPFGenerateOptions = {}): string {\n const firstEightDigits = randomDigits(8);\n const regionDigit = resolveCPFRegionDigit(options.state) ?? randomDigit();\n const baseDigits = [...firstEightDigits, regionDigit];\n const firstCheckDigit = calculateCPFCheckDigit(baseDigits);\n const secondCheckDigit = calculateCPFCheckDigit([\n ...baseDigits,\n firstCheckDigit\n ]);\n const cpf = [...baseDigits, firstCheckDigit, secondCheckDigit].join(\"\");\n return options.formatted ? formatCPF(cpf) : cpf;\n}\nexport function generateCPFBatch(options: CPFGenerateBatchOptions): string[] {\n const count = options.count;\n if (!Number.isInteger(count) || count <= 0)\n throw new BRUtilsError(\"Count must be a positive integer.\");\n if (!options.unique)\n return Array.from({ length: count }, () =>\n generateCPF({ formatted: options.formatted, state: options.state })\n );\n const seen = new Set<string>();\n const values: string[] = [];\n while (values.length < count) {\n const value = generateCPF({\n formatted: options.formatted,\n state: options.state\n });\n if (!seen.has(value)) {\n seen.add(value);\n values.push(value);\n }\n }\n return values;\n}\n","import { allDigitsEqual } from \"../../core/utils/digits.js\";\nimport { formatCPF } from \"../../core/utils/format.js\";\nimport {\n calculateCPFCheckDigit,\n normalizeCPF,\n resolveCPFStateFromDigits\n} from \"./cpf.shared.js\";\nimport type { CPFValidateOptions, CPFValidationResult } from \"./cpf.types.js\";\nexport function validateCPF(\n value: string,\n options: CPFValidateOptions = {}\n): CPFValidationResult {\n const digits = normalizeCPF(value);\n if (digits.length !== 11) return { isValid: false, value: digits };\n if (options.strict && allDigitsEqual(digits))\n return { isValid: false, value: digits, formatted: formatCPF(digits) };\n const baseDigits = digits.slice(0, 9).split(\"\").map(Number);\n const firstCheckDigit = calculateCPFCheckDigit(baseDigits);\n const secondCheckDigit = calculateCPFCheckDigit([\n ...baseDigits,\n firstCheckDigit\n ]);\n const expectedCPF = [...baseDigits, firstCheckDigit, secondCheckDigit].join(\n \"\"\n );\n return {\n isValid: digits === expectedCPF,\n value: digits,\n formatted: formatCPF(digits),\n state: resolveCPFStateFromDigits(digits)\n };\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { onlyDigits } from \"../../core/utils/digits.js\";\nexport function normalizeCNPJ(value: string): string {\n return onlyDigits(value);\n}\nexport function stripCNPJ(value: string): string {\n return normalizeCNPJ(value);\n}\nexport function ensureCNPJLength(value: string): string {\n const digits = normalizeCNPJ(value);\n if (digits.length !== 14)\n throw new BRUtilsError(\"CNPJ must contain exactly 14 digits.\");\n return digits;\n}\nexport function normalizeCNPJBranch(value?: string): string {\n const branch = normalizeCNPJ(value ?? \"0001\");\n if (!/^\\d{1,4}$/.test(branch))\n throw new BRUtilsError(\"Branch must contain between 1 and 4 digits.\");\n return branch.padStart(4, \"0\");\n}\nexport function calculateCNPJCheckDigit(digits: number[]): number {\n const weights =\n digits.length === 12\n ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]\n : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\n const sum = digits.reduce(\n (acc, digit, index) => acc + digit * weights[index]!,\n 0\n );\n const remainder = sum % 11;\n return remainder < 2 ? 0 : 11 - remainder;\n}\nexport function resolveCNPJBranch(value: string): string | undefined {\n const digits = normalizeCNPJ(value);\n return digits.length < 12 ? undefined : digits.slice(8, 12);\n}\n","import { formatCNPJ } from \"../../core/utils/format.js\";\nimport { ensureCNPJLength, stripCNPJ } from \"./cnpj.shared.js\";\nexport function formatCNPJValue(value: string): string {\n return formatCNPJ(ensureCNPJLength(value));\n}\nexport { stripCNPJ };\n","import { applyDigitMask } from \"../../core/utils/mask.js\";\nimport { ensureCNPJLength } from \"./cnpj.shared.js\";\nimport type { CNPJMaskOptions } from \"./cnpj.types.js\";\nconst DEFAULT_CNPJ_MASK_PATTERN = \"**.***.***/****-##\";\nexport function maskCNPJ(value: string, options: CNPJMaskOptions = {}): string {\n return applyDigitMask(\n ensureCNPJLength(value),\n options.pattern ?? DEFAULT_CNPJ_MASK_PATTERN\n );\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { formatCNPJ } from \"../../core/utils/format.js\";\nimport { randomDigits } from \"../../core/utils/random.js\";\nimport { calculateCNPJCheckDigit, normalizeCNPJBranch } from \"./cnpj.shared.js\";\nimport type {\n CNPJGenerateBatchOptions,\n CNPJGenerateOptions\n} from \"./cnpj.types.js\";\nexport function generateCNPJ(options: CNPJGenerateOptions = {}): string {\n const rootDigits = randomDigits(8);\n const branchDigits = normalizeCNPJBranch(options.branch)\n .split(\"\")\n .map(Number);\n const baseDigits = [...rootDigits, ...branchDigits];\n const firstCheckDigit = calculateCNPJCheckDigit(baseDigits);\n const secondCheckDigit = calculateCNPJCheckDigit([\n ...baseDigits,\n firstCheckDigit\n ]);\n const cnpj = [...baseDigits, firstCheckDigit, secondCheckDigit].join(\"\");\n return options.formatted ? formatCNPJ(cnpj) : cnpj;\n}\nexport function generateCNPJBatch(options: CNPJGenerateBatchOptions): string[] {\n const count = options.count;\n if (!Number.isInteger(count) || count <= 0)\n throw new BRUtilsError(\"Count must be a positive integer.\");\n if (!options.unique)\n return Array.from({ length: count }, () =>\n generateCNPJ({ formatted: options.formatted, branch: options.branch })\n );\n const seen = new Set<string>();\n const values: string[] = [];\n while (values.length < count) {\n const value = generateCNPJ({\n formatted: options.formatted,\n branch: options.branch\n });\n if (!seen.has(value)) {\n seen.add(value);\n values.push(value);\n }\n }\n return values;\n}\n","import { allDigitsEqual } from \"../../core/utils/digits.js\";\nimport { formatCNPJ } from \"../../core/utils/format.js\";\nimport {\n calculateCNPJCheckDigit,\n normalizeCNPJ,\n resolveCNPJBranch\n} from \"./cnpj.shared.js\";\nimport type {\n CNPJValidateOptions,\n CNPJValidationResult\n} from \"./cnpj.types.js\";\nexport function validateCNPJ(\n value: string,\n options: CNPJValidateOptions = {}\n): CNPJValidationResult {\n const digits = normalizeCNPJ(value);\n if (digits.length !== 14) return { isValid: false, value: digits };\n if (options.strict && allDigitsEqual(digits))\n return {\n isValid: false,\n value: digits,\n formatted: formatCNPJ(digits),\n branch: resolveCNPJBranch(digits)\n };\n const baseDigits = digits.slice(0, 12).split(\"\").map(Number);\n const firstCheckDigit = calculateCNPJCheckDigit(baseDigits);\n const secondCheckDigit = calculateCNPJCheckDigit([\n ...baseDigits,\n firstCheckDigit\n ]);\n const expectedCNPJ = [...baseDigits, firstCheckDigit, secondCheckDigit].join(\n \"\"\n );\n return {\n isValid: digits === expectedCNPJ,\n value: digits,\n formatted: formatCNPJ(digits),\n branch: resolveCNPJBranch(digits)\n };\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { onlyDigits } from \"../../core/utils/digits.js\";\nimport type { CEPStateCode } from \"./cep.types.js\";\nconst CEP_STATE_LEADING_DIGIT_MAP: Record<CEPStateCode, number[]> = {\n AC: [6],\n AL: [5],\n AM: [6],\n AP: [6],\n BA: [4],\n CE: [6],\n DF: [7],\n ES: [2],\n GO: [7],\n MA: [6],\n MG: [3],\n MS: [7],\n MT: [7],\n PA: [6],\n PB: [5],\n PE: [5],\n PI: [6],\n PR: [8],\n RJ: [2],\n RN: [5],\n RO: [7],\n RR: [6],\n RS: [9],\n SC: [8],\n SE: [4],\n SP: [0, 1],\n TO: [7]\n};\nexport function normalizeCEP(value: string): string {\n return onlyDigits(value);\n}\nexport function stripCEP(value: string): string {\n return normalizeCEP(value);\n}\nexport function ensureCEPLength(value: string): string {\n const digits = normalizeCEP(value);\n if (digits.length !== 8)\n throw new BRUtilsError(\"CEP must contain exactly 8 digits.\");\n return digits;\n}\nexport function resolveCEPLeadingDigits(\n state?: CEPStateCode\n): number[] | undefined {\n return state ? CEP_STATE_LEADING_DIGIT_MAP[state] : undefined;\n}\n","import { formatCEP } from \"../../core/utils/format.js\";\nimport { ensureCEPLength, stripCEP } from \"./cep.shared.js\";\nexport function formatCEPValue(value: string): string {\n return formatCEP(ensureCEPLength(value));\n}\nexport { stripCEP };\n","import { applyDigitMask } from \"../../core/utils/mask.js\";\nimport { ensureCEPLength } from \"./cep.shared.js\";\nimport type { CEPMaskOptions } from \"./cep.types.js\";\nconst DEFAULT_CEP_MASK_PATTERN = \"*****-###\";\nexport function maskCEP(value: string, options: CEPMaskOptions = {}): string {\n return applyDigitMask(\n ensureCEPLength(value),\n options.pattern ?? DEFAULT_CEP_MASK_PATTERN\n );\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { formatCEP } from \"../../core/utils/format.js\";\nimport { randomDigit, randomDigits } from \"../../core/utils/random.js\";\nimport { resolveCEPLeadingDigits } from \"./cep.shared.js\";\nimport type {\n CEPGenerateBatchOptions,\n CEPGenerateOptions\n} from \"./cep.types.js\";\nexport function generateCEP(options: CEPGenerateOptions = {}): string {\n const stateLeadingDigits = resolveCEPLeadingDigits(options.state);\n const firstDigit = stateLeadingDigits\n ? stateLeadingDigits[Math.floor(Math.random() * stateLeadingDigits.length)]!\n : randomDigit();\n const digits = [firstDigit, ...randomDigits(7)].join(\"\");\n return options.formatted ? formatCEP(digits) : digits;\n}\nexport function generateCEPBatch(options: CEPGenerateBatchOptions): string[] {\n const count = options.count;\n if (!Number.isInteger(count) || count <= 0)\n throw new BRUtilsError(\"Count must be a positive integer.\");\n return Array.from({ length: count }, () =>\n generateCEP({ formatted: options.formatted, state: options.state })\n );\n}\n","import { allDigitsEqual } from \"../../core/utils/digits.js\";\nimport { formatCEP } from \"../../core/utils/format.js\";\nimport { normalizeCEP } from \"./cep.shared.js\";\nimport type { CEPValidateOptions, CEPValidationResult } from \"./cep.types.js\";\nexport function validateCEP(\n value: string,\n options: CEPValidateOptions = {}\n): CEPValidationResult {\n const digits = normalizeCEP(value);\n const hasValidLength = digits.length === 8;\n const passesStrictRules = !options.strict || !allDigitsEqual(digits);\n return {\n isValid: hasValidLength && passesStrictRules,\n value: digits,\n formatted: hasValidLength ? formatCEP(digits) : undefined\n };\n}\n","import type { CreditCardBrand } from \"./credit-card.types.js\";\n\nexport const CREDIT_CARD_BRAND_PREFIXES: Record<CreditCardBrand, string[]> = {\n visa: [\"4\"],\n mastercard: [\"51\", \"52\", \"53\", \"54\", \"55\"],\n amex: [\"34\", \"37\"],\n elo: [\n \"401178\",\n \"401179\",\n \"431274\",\n \"438935\",\n \"451416\",\n \"457393\",\n \"457631\",\n \"457632\",\n \"504175\",\n \"627780\",\n \"636297\",\n \"636368\"\n ]\n};\n\nexport const CREDIT_CARD_BRAND_LENGTHS: Record<CreditCardBrand, number[]> = {\n visa: [16],\n mastercard: [16],\n amex: [15],\n elo: [16]\n};\n\nexport const CREDIT_CARD_BRAND_CVV_LENGTH: Record<CreditCardBrand, number> = {\n visa: 3,\n mastercard: 3,\n amex: 4,\n elo: 3\n};\n","import { onlyDigits } from \"../../core/utils/digits.js\";\nimport {\n CREDIT_CARD_BRAND_LENGTHS,\n CREDIT_CARD_BRAND_PREFIXES\n} from \"./credit-card.constants.js\";\nimport type { CreditCardBrand } from \"./credit-card.types.js\";\n\nexport function detectCreditCardBrand(\n number: string\n): CreditCardBrand | \"unknown\" {\n const digits = onlyDigits(number);\n\n const brands = Object.keys(CREDIT_CARD_BRAND_PREFIXES) as CreditCardBrand[];\n\n for (const brand of brands) {\n const prefixes = CREDIT_CARD_BRAND_PREFIXES[brand];\n const lengths = CREDIT_CARD_BRAND_LENGTHS[brand];\n\n const matchesPrefix = prefixes.some((prefix) => digits.startsWith(prefix));\n const matchesLength = lengths.includes(digits.length);\n\n if (matchesPrefix && matchesLength) {\n return brand;\n }\n }\n\n return \"unknown\";\n}\n","import { BRUtilsError } from \"../errors/brutils.error.js\";\n\nexport type RandomSource = () => number;\n\nexport function pickRandomItem<T>(\n items: T[],\n randomSource: RandomSource = Math.random\n): T {\n const item = items[Math.floor(randomSource() * items.length)];\n\n if (item === undefined) {\n throw new BRUtilsError(\"Cannot pick a random item from an empty array.\");\n }\n\n return item;\n}\n\nexport function getItemAtIndex<T>(items: T[], index: number): T {\n const item = items[index];\n\n if (item === undefined) {\n throw new BRUtilsError(`Array index out of bounds: ${index}`);\n }\n\n return item;\n}\n\nexport function shuffleArray<T>(\n items: T[],\n randomSource: RandomSource = Math.random\n): T[] {\n const result = [...items];\n\n for (let index = result.length - 1; index > 0; index -= 1) {\n const swapIndex = Math.floor(randomSource() * (index + 1));\n\n const currentValue = getItemAtIndex(result, index);\n const swapValue = getItemAtIndex(result, swapIndex);\n\n result[index] = swapValue;\n result[swapIndex] = currentValue;\n }\n\n return result;\n}\n","import { onlyDigits } from \"../../core/utils/digits.js\";\nimport { pickRandomItem } from \"../../core/utils/array.js\";\nimport { randomDigit } from \"../../core/utils/random.js\";\nimport {\n CREDIT_CARD_BRAND_CVV_LENGTH,\n CREDIT_CARD_BRAND_LENGTHS,\n CREDIT_CARD_BRAND_PREFIXES\n} from \"./credit-card.constants.js\";\nimport type {\n CreditCardBrand,\n CreditCardData,\n CreditCardGenerateOptions\n} from \"./credit-card.types.js\";\n\nfunction generateRandomNumericString(length: number): string {\n return Array.from({ length }, () => String(randomDigit())).join(\"\");\n}\n\nfunction formatCreditCardNumber(value: string): string {\n return onlyDigits(value)\n .replace(/(\\d{4})(?=\\d)/g, \"$1 \")\n .trim();\n}\n\nfunction calculateLuhnCheckDigit(partialNumber: string): number {\n const digits = partialNumber.split(\"\").map(Number).reverse();\n\n const sum = digits.reduce((accumulator, digit, index) => {\n if (index % 2 === 0) {\n const doubled = digit * 2;\n return accumulator + (doubled > 9 ? doubled - 9 : doubled);\n }\n\n return accumulator + digit;\n }, 0);\n\n return (10 - (sum % 10)) % 10;\n}\n\nfunction generateCardNumber(brand: CreditCardBrand): string {\n const prefixes = CREDIT_CARD_BRAND_PREFIXES[brand];\n const lengths = CREDIT_CARD_BRAND_LENGTHS[brand];\n\n const prefix = pickRandomItem(prefixes);\n const totalLength = pickRandomItem(lengths);\n\n const bodyLength = totalLength - prefix.length - 1;\n\n const partialNumber = prefix + generateRandomNumericString(bodyLength);\n const checkDigit = calculateLuhnCheckDigit(partialNumber);\n\n return partialNumber + String(checkDigit);\n}\n\nfunction generateExpiry(expiryYearsAhead = 5): {\n expiryMonth: string;\n expiryYear: string;\n expiry: string;\n} {\n const now = new Date();\n const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, \"0\");\n const futureYear =\n now.getFullYear() +\n Math.floor(Math.random() * Math.max(expiryYearsAhead, 1)) +\n 1;\n\n const yearTwoDigits = String(futureYear).slice(-2);\n\n return {\n expiryMonth: month,\n expiryYear: yearTwoDigits,\n expiry: `${month}/${yearTwoDigits}`\n };\n}\n\nfunction generateCVV(brand: CreditCardBrand): string {\n const length = CREDIT_CARD_BRAND_CVV_LENGTH[brand];\n return generateRandomNumericString(length);\n}\n\nexport function generateCreditCard(\n options: CreditCardGenerateOptions = {}\n): CreditCardData {\n const brand = options.brand ?? \"visa\";\n const rawNumber = generateCardNumber(brand);\n const number = options.formatted\n ? formatCreditCardNumber(rawNumber)\n : rawNumber;\n const { expiryMonth, expiryYear, expiry } = generateExpiry(\n options.expiryYearsAhead\n );\n const cvv = generateCVV(brand);\n\n return {\n brand,\n number,\n expiryMonth,\n expiryYear,\n expiry,\n cvv\n };\n}\n","import { onlyDigits } from \"../../core/utils/digits.js\";\nimport {\n CREDIT_CARD_BRAND_CVV_LENGTH,\n CREDIT_CARD_BRAND_LENGTHS\n} from \"./credit-card.constants.js\";\nimport { detectCreditCardBrand } from \"./credit-card.detector.js\";\nimport type {\n CreditCardValidationInput,\n CreditCardValidationResult\n} from \"./credit-card.types.js\";\n\nfunction isValidLuhn(number: string): boolean {\n const digits = onlyDigits(number);\n\n let sum = 0;\n let shouldDouble = false;\n\n for (let index = digits.length - 1; index >= 0; index -= 1) {\n let digit = Number(digits[index]);\n\n if (shouldDouble) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n\n sum += digit;\n shouldDouble = !shouldDouble;\n }\n\n return sum % 10 === 0;\n}\n\nfunction isValidExpiry(\n expiryMonth?: string,\n expiryYear?: string,\n expiry?: string\n): boolean {\n let month = expiryMonth;\n let year = expiryYear;\n\n if ((!month || !year) && expiry) {\n const match = expiry.match(/^(\\d{2})\\/(\\d{2})$/);\n if (!match) {\n return false;\n }\n\n month = match[1];\n year = match[2];\n }\n\n if (!month || !year) {\n return false;\n }\n\n const monthNumber = Number(month);\n const yearNumber = Number(year);\n\n if (monthNumber < 1 || monthNumber > 12) {\n return false;\n }\n\n const now = new Date();\n const currentYear = Number(String(now.getFullYear()).slice(-2));\n const currentMonth = now.getMonth() + 1;\n\n if (yearNumber > currentYear) {\n return true;\n }\n\n if (yearNumber === currentYear && monthNumber >= currentMonth) {\n return true;\n }\n\n return false;\n}\n\nfunction isValidCVV(brand: string, cvv?: string): boolean {\n if (!cvv) {\n return false;\n }\n\n const digits = onlyDigits(cvv);\n\n if (brand === \"unknown\") {\n return digits.length >= 3 && digits.length <= 4;\n }\n\n const expectedLength =\n CREDIT_CARD_BRAND_CVV_LENGTH[\n brand as keyof typeof CREDIT_CARD_BRAND_CVV_LENGTH\n ];\n\n return digits.length === expectedLength;\n}\n\nexport function validateCreditCard(\n input: CreditCardValidationInput\n): CreditCardValidationResult {\n const number = onlyDigits(input.number);\n const brand = detectCreditCardBrand(number);\n const numberValid =\n brand !== \"unknown\" &&\n CREDIT_CARD_BRAND_LENGTHS[brand].includes(number.length) &&\n isValidLuhn(number);\n\n const expiryValid = isValidExpiry(\n input.expiryMonth,\n input.expiryYear,\n input.expiry\n );\n\n const cvvValid = isValidCVV(brand, input.cvv);\n\n return {\n isValid: numberValid && expiryValid && cvvValid,\n brand,\n number,\n numberValid,\n expiryValid,\n cvvValid\n };\n}\n","export type RandomSource = () => number;\n\nexport function createRandomSource(seed?: number): RandomSource {\n if (seed === undefined) {\n return Math.random;\n }\n\n let state = Math.trunc(seed) >>> 0;\n\n return () => {\n state = (state + 0x6d2b79f5) >>> 0;\n let value = state;\n value = Math.imul(value ^ (value >>> 15), value | 1);\n value ^= value + Math.imul(value ^ (value >>> 7), value | 61);\n\n return ((value ^ (value >>> 14)) >>> 0) / 4294967296;\n };\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { pickRandomItem, shuffleArray } from \"../../core/utils/array.js\";\nimport { createRandomSource } from \"../../core/utils/seeded-random.js\";\nimport type {\n CoinFlipOptions,\n DiceRollOptions,\n RandomFloatGenerateOptions,\n RandomIntegerGenerateOptions,\n RandomPickOptions,\n RandomNumberGenerateOptions,\n RandomShuffleOptions\n} from \"./random-number.types.js\";\n\nfunction resolveIntegerMin(min?: number): number {\n return min ?? Number.MIN_SAFE_INTEGER;\n}\n\nfunction resolveIntegerMax(max?: number): number {\n return max ?? Number.MAX_SAFE_INTEGER;\n}\n\nfunction resolveFloatMin(min?: number): number {\n return min ?? 0;\n}\n\nfunction resolveFloatMax(max?: number): number {\n return max ?? 1;\n}\n\nfunction randomIntegerBetween(\n min: number,\n max: number,\n randomSource: () => number\n): number {\n return Math.floor(randomSource() * (max - min + 1)) + min;\n}\n\nfunction randomFloatBetween(\n min: number,\n max: number,\n randomSource: () => number\n): number {\n return randomSource() * (max - min) + min;\n}\n\nfunction validateRange(min: number, max: number, integerOnly = true): void {\n if (integerOnly && (!Number.isInteger(min) || !Number.isInteger(max))) {\n throw new BRUtilsError(\"Minimum and maximum values must be integers.\");\n }\n\n if (min > max) {\n throw new BRUtilsError(\n \"Minimum value cannot be greater than maximum value.\"\n );\n }\n}\n\nfunction validateCount(count: number): void {\n if (!Number.isInteger(count) || count < 1) {\n throw new BRUtilsError(\"Count must be a positive integer.\");\n }\n}\n\nfunction normalizePrecision(precision?: number): number | undefined {\n if (precision === undefined) {\n return undefined;\n }\n\n if (!Number.isInteger(precision) || precision < 0) {\n throw new BRUtilsError(\"Precision must be a non-negative integer.\");\n }\n\n return precision;\n}\n\nfunction normalizeItems(items: string[]): string[] {\n const normalized = items.map((item) => item.trim()).filter(Boolean);\n\n if (normalized.length === 0) {\n throw new BRUtilsError(\"At least one item must be provided.\");\n }\n\n return normalized;\n}\n\nfunction applyFloatPrecision(value: number, precision?: number): number {\n if (precision === undefined) {\n return value;\n }\n\n return Number(value.toFixed(precision));\n}\n\nexport function generateRandomIntegers(\n options: RandomIntegerGenerateOptions = {}\n): number[] {\n const min = resolveIntegerMin(options.min);\n const max = resolveIntegerMax(options.max);\n const count = options.count ?? 1;\n const unique = options.unique ?? false;\n const sorted = options.sorted ?? false;\n const randomSource = createRandomSource(options.seed);\n\n validateRange(min, max, true);\n validateCount(count);\n\n const availableNumbers = max - min + 1;\n\n if (unique && count > availableNumbers) {\n throw new BRUtilsError(\n \"Cannot generate more unique numbers than the available range size.\"\n );\n }\n\n let result: number[];\n\n if (unique) {\n const pool = Array.from(\n { length: availableNumbers },\n (_, index) => min + index\n );\n result = shuffleArray(pool, randomSource).slice(0, count);\n } else {\n result = Array.from({ length: count }, () =>\n randomIntegerBetween(min, max, randomSource)\n );\n }\n\n if (sorted) {\n result.sort((a, b) => a - b);\n }\n\n return result;\n}\n\nexport function generateRandomNumbers(\n options: RandomNumberGenerateOptions = {}\n): number[] {\n return generateRandomIntegers(options);\n}\n\nexport function generateRandomFloats(\n options: RandomFloatGenerateOptions = {}\n): number[] {\n const min = resolveFloatMin(options.min);\n const max = resolveFloatMax(options.max);\n const count = options.count ?? 1;\n const sorted = options.sorted ?? false;\n const precision = normalizePrecision(options.precision);\n const randomSource = createRandomSource(options.seed);\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n throw new BRUtilsError(\n \"Minimum and maximum values must be finite numbers.\"\n );\n }\n\n validateRange(min, max, false);\n validateCount(count);\n\n const result = Array.from({ length: count }, () =>\n applyFloatPrecision(randomFloatBetween(min, max, randomSource), precision)\n );\n\n if (sorted) {\n result.sort((a, b) => a - b);\n }\n\n return result;\n}\n\nexport function pickRandomItems(options: RandomPickOptions): string[] {\n const items = normalizeItems(options.items);\n const count = options.count ?? 1;\n const unique = options.unique ?? false;\n const randomSource = createRandomSource(options.seed);\n\n validateCount(count);\n\n if (unique && count > items.length) {\n throw new BRUtilsError(\n \"Cannot pick more unique items than the available item count.\"\n );\n }\n\n if (unique) {\n return shuffleArray(items, randomSource).slice(0, count);\n }\n\n return Array.from({ length: count }, () =>\n pickRandomItem(items, randomSource)\n );\n}\n\nexport function shuffleRandomItems(options: RandomShuffleOptions): string[] {\n return shuffleArray(\n normalizeItems(options.items),\n createRandomSource(options.seed)\n );\n}\n\nexport function rollDice(options: DiceRollOptions = {}): number[] {\n const faces = options.faces ?? 6;\n const count = options.count ?? 1;\n const randomSource = createRandomSource(options.seed);\n\n if (!Number.isInteger(faces) || faces < 2) {\n throw new BRUtilsError(\n \"Dice faces must be an integer greater than or equal to 2.\"\n );\n }\n\n validateCount(count);\n\n return Array.from({ length: count }, () =>\n randomIntegerBetween(1, faces, randomSource)\n );\n}\n\nexport function flipCoin(options: CoinFlipOptions = {}): \"heads\" | \"tails\" {\n const randomSource = createRandomSource(options.seed);\n\n return randomSource() < 0.5 ? \"heads\" : \"tails\";\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { createRandomSource } from \"../../core/utils/seeded-random.js\";\nimport type { NumberPickerOptions } from \"./number-picker.types.js\";\n\nfunction resolveMin(min?: number): number {\n return min ?? Number.MIN_SAFE_INTEGER;\n}\n\nfunction resolveMax(max?: number): number {\n return max ?? Number.MAX_SAFE_INTEGER;\n}\n\nexport function pickRandomNumber(options: NumberPickerOptions = {}): number {\n const min = resolveMin(options.min);\n const max = resolveMax(options.max);\n const randomSource = createRandomSource(options.seed);\n\n if (!Number.isInteger(min) || !Number.isInteger(max)) {\n throw new BRUtilsError(\"Minimum and maximum values must be integers.\");\n }\n\n if (min > max) {\n throw new BRUtilsError(\n \"Minimum value cannot be greater than maximum value.\"\n );\n }\n\n return Math.floor(randomSource() * (max - min + 1)) + min;\n}\n","import path from \"node:path\";\n\nexport function resolveZipOutputPath(\n sourcePath: string,\n explicitOut?: string\n): string {\n if (explicitOut) {\n return explicitOut;\n }\n\n const normalizedSource = path.resolve(sourcePath);\n const parsed = path.parse(normalizedSource);\n\n if (path.basename(normalizedSource) === \".\") {\n const cwd = process.cwd();\n return path.join(cwd, `${path.basename(cwd)}.zip`);\n }\n\n if (parsed.ext) {\n return path.join(parsed.dir, `${parsed.name}.zip`);\n }\n\n return path.join(parsed.dir, `${parsed.base}.zip`);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type { ZipCommandOptions, ZipInputEntry } from \"./zip.types.js\";\n\nfunction normalizeEntryName(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction isDirectory(sourcePath: string): boolean {\n return fs.statSync(sourcePath).isDirectory();\n}\n\nfunction isFile(sourcePath: string): boolean {\n return fs.statSync(sourcePath).isFile();\n}\n\nexport function collectZipInputs(\n sourcePath: string,\n outputPath: string,\n options: ZipCommandOptions = {}\n): ZipInputEntry[] {\n const resolvedSource = path.resolve(sourcePath);\n\n if (!fs.existsSync(resolvedSource)) {\n throw new BRUtilsError(`Source path does not exist: ${sourcePath}`);\n }\n\n if (isFile(resolvedSource)) {\n return [\n {\n type: \"file\",\n sourcePath: resolvedSource,\n entryName: path.basename(resolvedSource)\n }\n ];\n }\n\n if (!isDirectory(resolvedSource)) {\n throw new BRUtilsError(`Unsupported source type: ${sourcePath}`);\n }\n\n const excludePatterns = options.exclude ?? [];\n const outputAbsolutePath = path.resolve(outputPath);\n const rootEntryName = path.basename(resolvedSource);\n const entries = fg.sync([\"**/*\", \"**/.*\"], {\n cwd: resolvedSource,\n onlyFiles: false,\n onlyDirectories: false,\n dot: true,\n followSymbolicLinks: options.followSymlinks ?? false,\n unique: true,\n ignore: excludePatterns,\n markDirectories: true\n });\n\n if (entries.length === 0) {\n return options.contentsOnly\n ? []\n : [\n {\n type: \"directory\",\n sourcePath: resolvedSource,\n entryName: `${rootEntryName}/`\n }\n ];\n }\n\n return entries\n .map<ZipInputEntry | null>((entry) => {\n const cleanedEntry = entry.endsWith(\"/\") ? entry.slice(0, -1) : entry;\n const absoluteEntryPath = path.join(resolvedSource, cleanedEntry);\n\n if (path.resolve(absoluteEntryPath) === outputAbsolutePath) {\n return null;\n }\n\n const relativeEntryName = options.contentsOnly\n ? cleanedEntry\n : path.join(rootEntryName, cleanedEntry);\n\n const entryType = entry.endsWith(\"/\") ? \"directory\" : \"file\";\n\n return {\n type: entryType,\n sourcePath: absoluteEntryPath,\n entryName: normalizeEntryName(\n entryType === \"directory\"\n ? `${relativeEntryName}/`\n : relativeEntryName\n )\n };\n })\n .filter((entry): entry is ZipInputEntry => entry !== null);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport archiver from \"archiver\";\nimport { collectZipInputs } from \"./collect-zip-inputs.js\";\nimport { resolveZipOutputPath } from \"./resolve-zip-output.js\";\nimport { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type { ZipCommandOptions, ZipExecutionPlan } from \"./zip.types.js\";\n\nfunction resolveCompressionLevel(level?: number): number {\n const resolvedLevel = level ?? 9;\n\n if (\n !Number.isInteger(resolvedLevel) ||\n resolvedLevel < 0 ||\n resolvedLevel > 9\n ) {\n throw new BRUtilsError(\n \"Compression level must be an integer between 0 and 9.\"\n );\n }\n\n return resolvedLevel;\n}\n\nfunction getSourceType(sourcePath: string): \"file\" | \"directory\" {\n return fs.statSync(sourcePath).isDirectory() ? \"directory\" : \"file\";\n}\n\nfunction ensureOutputCanBeWritten(outputPath: string, force = false): void {\n if (fs.existsSync(outputPath) && !force) {\n throw new BRUtilsError(\n `Output file already exists: ${outputPath}. Use --force to overwrite it.`\n );\n }\n\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n}\n\nexport function createZipExecutionPlan(\n sourcePath: string,\n positionalOut?: string,\n options: ZipCommandOptions = {}\n): ZipExecutionPlan {\n if (positionalOut && options.out) {\n throw new BRUtilsError(\"Use either positional [out] or --out, not both.\");\n }\n\n const resolvedOutputPath = path.resolve(\n resolveZipOutputPath(sourcePath, positionalOut ?? options.out)\n );\n\n return {\n sourcePath: path.resolve(sourcePath),\n outputPath: resolvedOutputPath,\n sourceType: getSourceType(path.resolve(sourcePath)),\n exclude: options.exclude ?? [],\n contentsOnly: options.contentsOnly ?? false,\n level: resolveCompressionLevel(options.level),\n followSymlinks: options.followSymlinks ?? false,\n store: options.store ?? false\n };\n}\n\nexport async function createZip(\n sourcePath: string,\n positionalOut?: string,\n options: ZipCommandOptions = {}\n): Promise<ZipExecutionPlan> {\n const plan = createZipExecutionPlan(sourcePath, positionalOut, options);\n\n if (options.dryRun) {\n return plan;\n }\n\n ensureOutputCanBeWritten(plan.outputPath, options.force);\n\n const outputStream = fs.createWriteStream(plan.outputPath);\n const archive = archiver(\"zip\", {\n zlib: { level: plan.store ? 0 : plan.level },\n store: plan.store\n });\n\n await new Promise<void>((resolve, reject) => {\n outputStream.on(\"close\", () => resolve());\n archive.on(\"error\", (error) => reject(error));\n archive.pipe(outputStream);\n\n const inputs = collectZipInputs(plan.sourcePath, plan.outputPath, options);\n\n for (const input of inputs) {\n if (options.verbose && !options.quiet) {\n console.log(`[zip] adding ${input.entryName}`);\n }\n\n if (input.type === \"directory\") {\n archive.append(\"\", { name: input.entryName });\n } else {\n archive.file(input.sourcePath, { name: input.entryName });\n }\n }\n\n archive.finalize().catch(reject);\n });\n\n return plan;\n}\n","import path from \"node:path\";\nimport { listZipArchiveEntries } from \"../archive/zip-archive.js\";\nimport type { ZipListResult } from \"./zip.types.js\";\n\nexport async function listZip(\n sourcePath: string,\n match?: string\n): Promise<ZipListResult> {\n return listZipArchiveEntries(\n path.resolve(sourcePath),\n match ? { match } : {}\n );\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Writable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport yauzl from \"yauzl\";\nimport { matchesGlob } from \"../../core/utils/glob.js\";\nimport { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type {\n ZipArchiveEntryInfo,\n ZipListOptions,\n ZipTestOptions,\n ZipTestResult\n} from \"./zip-archive.types.js\";\n\nfunction normalizeEntryPath(entryPath: string): string {\n return entryPath.replace(/\\\\/g, \"/\");\n}\n\nexport function ensureZipSourceIsValid(sourcePath: string): void {\n if (!fs.existsSync(sourcePath)) {\n throw new BRUtilsError(`Zip file does not exist: ${sourcePath}`);\n }\n\n if (!fs.statSync(sourcePath).isFile()) {\n throw new BRUtilsError(`Source is not a file: ${sourcePath}`);\n }\n\n if (path.extname(sourcePath).toLowerCase() !== \".zip\") {\n throw new BRUtilsError(\"Only .zip files are supported.\");\n }\n}\n\nfunction openZipFile(sourcePath: string): Promise<yauzl.ZipFile> {\n ensureZipSourceIsValid(sourcePath);\n\n return new Promise((resolve, reject) => {\n yauzl.open(\n sourcePath,\n {\n lazyEntries: true,\n decodeStrings: true,\n validateEntrySizes: true\n },\n (error, zipFile) => {\n if (error) {\n reject(error);\n return;\n }\n\n if (!zipFile) {\n reject(new BRUtilsError(\"Could not open zip file.\"));\n return;\n }\n\n resolve(zipFile);\n }\n );\n });\n}\n\nfunction shouldIncludeEntry(entryPath: string, match?: string): boolean {\n if (!match) {\n return true;\n }\n\n return matchesGlob(normalizeEntryPath(entryPath), match);\n}\n\nexport async function listZipArchiveEntries(\n sourcePath: string,\n options: ZipListOptions = {}\n): Promise<ZipArchiveEntryInfo[]> {\n const zipFile = await openZipFile(sourcePath);\n\n return new Promise((resolve, reject) => {\n const entries: ZipArchiveEntryInfo[] = [];\n\n zipFile.on(\"entry\", (entry) => {\n const entryPath = normalizeEntryPath(entry.fileName);\n\n if (shouldIncludeEntry(entryPath, options.match)) {\n entries.push({\n path: entryPath,\n type: entryPath.endsWith(\"/\") ? \"directory\" : \"file\",\n compressedSize: entry.compressedSize,\n uncompressedSize: entry.uncompressedSize\n });\n }\n\n zipFile.readEntry();\n });\n\n zipFile.once(\"end\", () => {\n zipFile.close();\n resolve(entries);\n });\n\n zipFile.once(\"error\", (error) => {\n zipFile.close();\n reject(error);\n });\n\n zipFile.readEntry();\n });\n}\n\nasync function drainEntryStream(\n zipFile: yauzl.ZipFile,\n entry: yauzl.Entry\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n zipFile.openReadStream(entry, async (error, stream) => {\n if (error) {\n reject(error);\n return;\n }\n\n if (!stream) {\n reject(\n new BRUtilsError(`Could not read archive entry: ${entry.fileName}`)\n );\n return;\n }\n\n try {\n await pipeline(\n stream,\n new Writable({\n write(_chunk, _encoding, callback) {\n callback();\n }\n })\n );\n\n resolve();\n } catch (streamError) {\n reject(streamError);\n }\n });\n });\n}\n\nexport async function testZipArchive(\n sourcePath: string,\n options: ZipTestOptions = {}\n): Promise<ZipTestResult> {\n const zipFile = await openZipFile(sourcePath);\n let testedEntries = 0;\n\n return new Promise((resolve, reject) => {\n zipFile.on(\"entry\", (entry) => {\n const entryPath = normalizeEntryPath(entry.fileName);\n\n void (async () => {\n try {\n if (\n !shouldIncludeEntry(entryPath, options.match) ||\n entryPath.endsWith(\"/\")\n ) {\n zipFile.readEntry();\n return;\n }\n\n await drainEntryStream(zipFile, entry);\n testedEntries += 1;\n zipFile.readEntry();\n } catch (error) {\n zipFile.close();\n reject(error);\n }\n })();\n });\n\n zipFile.once(\"end\", () => {\n zipFile.close();\n resolve({\n sourcePath: path.resolve(sourcePath),\n testedEntries,\n ok: true\n });\n });\n\n zipFile.once(\"error\", (error) => {\n zipFile.close();\n reject(error);\n });\n\n zipFile.readEntry();\n });\n}\n","import * as minimatchModule from \"minimatch\";\n\ntype MinimatchLike = (\n input: string,\n pattern: string,\n options?: { dot?: boolean }\n) => boolean;\n\nfunction resolveMinimatch(): MinimatchLike {\n const moduleValue = minimatchModule as unknown as {\n minimatch?: MinimatchLike;\n default?: MinimatchLike;\n } & MinimatchLike;\n\n if (typeof moduleValue.minimatch === \"function\") {\n return moduleValue.minimatch;\n }\n\n if (typeof moduleValue.default === \"function\") {\n return moduleValue.default;\n }\n\n if (typeof moduleValue === \"function\") {\n return moduleValue;\n }\n\n throw new Error(\"Could not resolve minimatch implementation.\");\n}\n\nconst minimatch = resolveMinimatch();\n\nexport function matchesGlob(input: string, pattern: string): boolean {\n return minimatch(input, pattern, { dot: true });\n}\n","import path from \"node:path\";\nimport { testZipArchive } from \"../archive/zip-archive.js\";\nimport type { ZipTestExecutionResult } from \"./zip.types.js\";\n\nexport async function testZip(\n sourcePath: string,\n match?: string\n): Promise<ZipTestExecutionResult> {\n return testZipArchive(path.resolve(sourcePath), match ? { match } : {});\n}\n","import path from \"node:path\";\n\nexport function resolveUnzipOutputPath(\n sourcePath: string,\n explicitOut?: string\n): string {\n if (explicitOut) {\n return explicitOut;\n }\n\n const resolvedSource = path.resolve(sourcePath);\n const parsed = path.parse(resolvedSource);\n\n return path.join(parsed.dir, parsed.name);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport yauzl from \"yauzl\";\nimport { matchesGlob } from \"../../core/utils/glob.js\";\nimport { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport { ensureZipSourceIsValid } from \"../archive/zip-archive.js\";\nimport { resolveUnzipOutputPath } from \"./resolve-unzip-output.js\";\nimport type { UnzipCommandOptions, UnzipExecutionPlan } from \"./unzip.types.js\";\n\nfunction ensureOutputCanBeExtracted(outputDir: string, force = false): void {\n if (fs.existsSync(outputDir) && !force) {\n throw new BRUtilsError(\n `Output directory already exists: ${outputDir}. Use --force to overwrite it.`\n );\n }\n\n if (fs.existsSync(outputDir) && force) {\n fs.rmSync(outputDir, { recursive: true, force: true });\n }\n\n fs.mkdirSync(outputDir, { recursive: true });\n}\n\nfunction normalizeEntryPath(entryPath: string): string {\n return entryPath.replace(/\\\\/g, \"/\");\n}\n\nfunction shouldIncludeEntry(entryPath: string, match?: string): boolean {\n if (!match) {\n return true;\n }\n\n return matchesGlob(normalizeEntryPath(entryPath), match);\n}\n\nfunction resolveTargetRelativePath(entryPath: string, flat: boolean): string {\n if (!flat) {\n return normalizeEntryPath(entryPath);\n }\n\n return path.posix.basename(normalizeEntryPath(entryPath));\n}\n\nfunction resolveSafeDestination(\n outputDir: string,\n relativePath: string\n): string {\n const destination = path.resolve(outputDir, relativePath);\n const resolvedOutputDir = path.resolve(outputDir);\n const outputPrefix = `${resolvedOutputDir}${path.sep}`;\n\n if (\n destination !== resolvedOutputDir &&\n !destination.startsWith(outputPrefix)\n ) {\n throw new BRUtilsError(`Unsafe zip entry path detected: ${relativePath}`);\n }\n\n return destination;\n}\n\nfunction openZipFile(sourcePath: string): Promise<yauzl.ZipFile> {\n ensureZipSourceIsValid(sourcePath);\n\n return new Promise((resolve, reject) => {\n yauzl.open(\n sourcePath,\n {\n lazyEntries: true,\n decodeStrings: true,\n validateEntrySizes: true\n },\n (error, zipFile) => {\n if (error) {\n reject(error);\n return;\n }\n\n if (!zipFile) {\n reject(new BRUtilsError(\"Could not open zip file.\"));\n return;\n }\n\n resolve(zipFile);\n }\n );\n });\n}\n\nexport function createUnzipExecutionPlan(\n sourcePath: string,\n positionalOut?: string,\n options: UnzipCommandOptions = {}\n): UnzipExecutionPlan {\n if (positionalOut && options.out) {\n throw new BRUtilsError(\"Use either positional [out] or --out, not both.\");\n }\n\n const resolvedSourcePath = path.resolve(sourcePath);\n const resolvedOutputDir = path.resolve(\n resolveUnzipOutputPath(sourcePath, positionalOut ?? options.out)\n );\n\n return {\n sourcePath: resolvedSourcePath,\n outputDir: resolvedOutputDir,\n flat: options.flat ?? false,\n ...(options.match ? { match: options.match } : {})\n };\n}\n\nexport async function extractZipFile(\n sourcePath: string,\n positionalOut?: string,\n options: UnzipCommandOptions = {}\n): Promise<UnzipExecutionPlan> {\n const plan = createUnzipExecutionPlan(sourcePath, positionalOut, options);\n\n ensureZipSourceIsValid(plan.sourcePath);\n\n if (options.dryRun) {\n return plan;\n }\n\n ensureOutputCanBeExtracted(plan.outputDir, options.force);\n\n if (options.verbose && !options.quiet) {\n console.log(`[unzip] extracting ${plan.sourcePath} -> ${plan.outputDir}`);\n }\n\n const zipFile = await openZipFile(plan.sourcePath);\n const flatTargets = new Set<string>();\n\n await new Promise<void>((resolve, reject) => {\n zipFile.on(\"entry\", (entry) => {\n const entryPath = normalizeEntryPath(entry.fileName);\n\n void (async () => {\n try {\n if (!shouldIncludeEntry(entryPath, options.match)) {\n zipFile.readEntry();\n return;\n }\n\n const isDirectory = entryPath.endsWith(\"/\");\n const targetRelativePath = resolveTargetRelativePath(\n entryPath,\n options.flat ?? false\n );\n\n if (!targetRelativePath) {\n zipFile.readEntry();\n return;\n }\n\n if (\n (options.flat ?? false) &&\n flatTargets.has(targetRelativePath) &&\n !isDirectory\n ) {\n throw new BRUtilsError(\n `Flat extraction would overwrite a file more than once: ${targetRelativePath}`\n );\n }\n\n if ((options.flat ?? false) && !isDirectory) {\n flatTargets.add(targetRelativePath);\n }\n\n const destinationPath = resolveSafeDestination(\n plan.outputDir,\n targetRelativePath\n );\n\n if (options.verbose && !options.quiet) {\n console.log(`[unzip] extracting ${entryPath}`);\n }\n\n if (isDirectory) {\n if (!(options.flat ?? false)) {\n fs.mkdirSync(destinationPath, { recursive: true });\n }\n\n zipFile.readEntry();\n return;\n }\n\n fs.mkdirSync(path.dirname(destinationPath), { recursive: true });\n\n await new Promise<void>((entryResolve, entryReject) => {\n zipFile.openReadStream(entry, async (error, stream) => {\n if (error) {\n entryReject(error);\n return;\n }\n\n if (!stream) {\n entryReject(\n new BRUtilsError(\n `Could not read archive entry: ${entry.fileName}`\n )\n );\n return;\n }\n\n try {\n await pipeline(stream, fs.createWriteStream(destinationPath));\n entryResolve();\n } catch (streamError) {\n entryReject(streamError);\n }\n });\n });\n\n zipFile.readEntry();\n } catch (error) {\n zipFile.close();\n reject(error);\n }\n })();\n });\n\n zipFile.once(\"end\", () => {\n zipFile.close();\n resolve();\n });\n\n zipFile.once(\"error\", (error) => {\n zipFile.close();\n reject(error);\n });\n\n zipFile.readEntry();\n });\n\n return plan;\n}\n","import path from \"node:path\";\nimport { listZipArchiveEntries } from \"../archive/zip-archive.js\";\nimport type { UnzipListResult } from \"./unzip.types.js\";\n\nexport async function listUnzip(\n sourcePath: string,\n match?: string\n): Promise<UnzipListResult> {\n return listZipArchiveEntries(\n path.resolve(sourcePath),\n match ? { match } : {}\n );\n}\n","import path from \"node:path\";\nimport { testZipArchive } from \"../archive/zip-archive.js\";\nimport type { UnzipTestResult } from \"./unzip.types.js\";\n\nexport async function testUnzip(\n sourcePath: string,\n match?: string\n): Promise<UnzipTestResult> {\n return testZipArchive(path.resolve(sourcePath), match ? { match } : {});\n}\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type {\n ExtractTextOptions,\n PadTextOptions,\n ReplaceTextOptions,\n StringCaseStyle,\n StringCodecMode,\n StringPadSide,\n TruncateTextOptions\n} from \"./str.types.js\";\n\nfunction ensureNonNegativeInteger(value: number, label: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new BRUtilsError(`${label} must be a non-negative integer.`);\n }\n}\n\nfunction splitWords(value: string): string[] {\n return value\n .replace(/([a-z\\d])([A-Z])/g, \"$1 $2\")\n .replace(/[_\\-.]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .map((word) => word.toLowerCase());\n}\n\nfunction capitalize(word: string): string {\n if (word.length === 0) {\n return word;\n }\n\n return word[0]!.toUpperCase() + word.slice(1).toLowerCase();\n}\n\nfunction encodeHtmlEntities(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction decodeHtmlEntities(value: string): string {\n return value\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/&/g, \"&\");\n}\n\nfunction buildGlobalRegex(pattern: string): RegExp {\n try {\n return new RegExp(pattern, \"g\");\n } catch {\n throw new BRUtilsError(`Invalid regex pattern: ${pattern}`);\n }\n}\n\nfunction extractUsingDelimiters(value: string, query: string): string[] {\n const separatorIndex = query.indexOf(\"|\");\n\n if (separatorIndex === -1) {\n throw new BRUtilsError(\n 'Delimiter extraction expects a query in the format \"start|end\".'\n );\n }\n\n const startDelimiter = query.slice(0, separatorIndex);\n const endDelimiter = query.slice(separatorIndex + 1);\n\n if (startDelimiter.length === 0 || endDelimiter.length === 0) {\n throw new BRUtilsError(\n \"Delimiter extraction expects non-empty start and end delimiters.\"\n );\n }\n\n const matches: string[] = [];\n let cursor = 0;\n\n while (cursor < value.length) {\n const startIndex = value.indexOf(startDelimiter, cursor);\n\n if (startIndex === -1) {\n break;\n }\n\n const contentStart = startIndex + startDelimiter.length;\n const endIndex = value.indexOf(endDelimiter, contentStart);\n\n if (endIndex === -1) {\n break;\n }\n\n matches.push(value.slice(contentStart, endIndex));\n cursor = endIndex + endDelimiter.length;\n }\n\n return matches;\n}\n\nexport function slugifyText(value: string): string {\n return removeAccents(value)\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .replace(/-{2,}/g, \"-\");\n}\n\nexport function convertStringCase(\n value: string,\n style: StringCaseStyle\n): string {\n const words = splitWords(value);\n\n if (words.length === 0) {\n return \"\";\n }\n\n switch (style) {\n case \"camel\":\n return words[0]! + words.slice(1).map(capitalize).join(\"\");\n case \"snake\":\n return words.join(\"_\");\n case \"kebab\":\n return words.join(\"-\");\n case \"pascal\":\n return words.map(capitalize).join(\"\");\n case \"constant\":\n return words.join(\"_\").toUpperCase();\n case \"title\":\n return words.map(capitalize).join(\" \");\n }\n}\n\nexport function trimText(value: string): string {\n return value.trim();\n}\n\nexport function truncateText(\n value: string,\n options: TruncateTextOptions\n): string {\n ensureNonNegativeInteger(options.max, \"Maximum length\");\n\n if (value.length <= options.max) {\n return value;\n }\n\n const suffix = options.suffix ?? \"\";\n\n if (suffix.length >= options.max) {\n return suffix.slice(0, options.max);\n }\n\n return value.slice(0, options.max - suffix.length) + suffix;\n}\n\nexport function replaceText(\n value: string,\n options: ReplaceTextOptions\n): string {\n if (options.regex) {\n return value.replace(buildGlobalRegex(options.from), options.with);\n }\n\n return value.replaceAll(options.from, options.with);\n}\n\nexport function normalizeText(value: string): string {\n return value.normalize(\"NFC\");\n}\n\nexport function removeAccents(value: string): string {\n return value.normalize(\"NFD\").replace(/[̀-ͯ]/g, \"\");\n}\n\nexport function padText(value: string, options: PadTextOptions): string {\n ensureNonNegativeInteger(options.length, \"Target length\");\n\n const side: StringPadSide = options.side ?? \"right\";\n\n if (value.length >= options.length) {\n return value;\n }\n\n switch (side) {\n case \"left\":\n return value.padStart(options.length);\n case \"right\":\n return value.padEnd(options.length);\n case \"both\": {\n const totalPadding = options.length - value.length;\n const leftPadding = Math.floor(totalPadding / 2);\n const rightPadding = totalPadding - leftPadding;\n return `${\" \".repeat(leftPadding)}${value}${\" \".repeat(rightPadding)}`;\n }\n }\n}\n\nexport function extractText(\n value: string,\n query: string,\n options: ExtractTextOptions = {}\n): string[] {\n if (options.regex) {\n const matches = Array.from(value.matchAll(buildGlobalRegex(query)));\n\n return matches.flatMap((match) => {\n const groups = match\n .slice(1)\n .filter((group): group is string => group !== undefined);\n return groups.length > 0 ? groups : [match[0]];\n });\n }\n\n return extractUsingDelimiters(value, query);\n}\n\nexport function transformBase64(\n value: string,\n mode: StringCodecMode = \"encode\"\n): string {\n if (mode === \"decode\") {\n return Buffer.from(value, \"base64\").toString(\"utf-8\");\n }\n\n return Buffer.from(value, \"utf-8\").toString(\"base64\");\n}\n\nexport function transformUrlEncoding(\n value: string,\n mode: StringCodecMode = \"encode\"\n): string {\n if (mode === \"decode\") {\n return decodeURIComponent(value);\n }\n\n return encodeURIComponent(value);\n}\n\nexport function transformHtmlEntities(\n value: string,\n mode: StringCodecMode = \"encode\"\n): string {\n if (mode === \"decode\") {\n return decodeHtmlEntities(value);\n }\n\n return encodeHtmlEntities(value);\n\n}\n\nexport function getLevenshteinDistance(a: string, b: string): number {\n a = a.trim()\n b = b.trim()\n \n const n = a.length;\n const m = b.length;\n\n const dp: number[][] = Array.from({ length: n + 1 }, () =>\n new Array(m + 1).fill(0)\n );\n\n for (let i = 0; i <= n; i++) dp[i]![0] = i;\n for (let j = 0; j <= m; j++) dp[0]![j] = j;\n\n for (let i = 1; i <= n; i++) {\n for (let j = 1; j <= m; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n\n dp[i]![j] = Math.min(\n dp[i - 1]![j]! + 1,\n dp[i]![j - 1]! + 1,\n dp[i - 1]![j - 1]! + cost\n );\n }\n }\n\n return dp[n]![m]!;\n}","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type {\n JsonDiffEntry,\n JsonDiffResult,\n JsonValidationResult\n} from \"./json.types.js\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction cloneJsonValue<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction sortKeysDeep(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => sortKeysDeep(item));\n }\n\n if (isPlainObject(value)) {\n return Object.keys(value)\n .sort((left, right) => left.localeCompare(right))\n .reduce<Record<string, unknown>>((accumulator, key) => {\n accumulator[key] = sortKeysDeep(value[key]);\n return accumulator;\n }, {});\n }\n\n return value;\n}\n\nfunction formatYamlScalar(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n if (typeof value === \"string\") {\n if (/^[A-Za-z0-9_-]+$/.test(value)) {\n return value;\n }\n\n return JSON.stringify(value);\n }\n\n return JSON.stringify(value);\n}\n\nfunction toYamlLines(value: unknown, depth = 0): string[] {\n const indent = \" \".repeat(depth);\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return [`${indent}[]`];\n }\n\n return value.flatMap((item) => {\n if (Array.isArray(item) || isPlainObject(item)) {\n const nested = toYamlLines(item, depth + 1);\n return [`${indent}-`, ...nested];\n }\n\n return [`${indent}- ${formatYamlScalar(item)}`];\n });\n }\n\n if (isPlainObject(value)) {\n const keys = Object.keys(value);\n\n if (keys.length === 0) {\n return [`${indent}{}`];\n }\n\n return keys.flatMap((key) => {\n const child = value[key];\n\n if (Array.isArray(child) || isPlainObject(child)) {\n return [`${indent}${key}:`, ...toYamlLines(child, depth + 1)];\n }\n\n return [`${indent}${key}: ${formatYamlScalar(child)}`];\n });\n }\n\n return [`${indent}${formatYamlScalar(value)}`];\n}\n\nfunction parsePath(path: string): string[] {\n const segments = path.match(/[^.[\\]]+/g) ?? [];\n\n if (segments.length === 0) {\n throw new BRUtilsError(\"JSON path cannot be empty.\");\n }\n\n return segments;\n}\n\nfunction getContainerForPath(root: unknown, segments: string[]): unknown {\n let current: unknown = root;\n\n for (const segment of segments) {\n if (Array.isArray(current)) {\n const index = Number(segment);\n\n if (!Number.isInteger(index)) {\n return undefined;\n }\n\n current = current[index];\n continue;\n }\n\n if (isPlainObject(current)) {\n current = current[segment];\n continue;\n }\n\n return undefined;\n }\n\n return current;\n}\n\nfunction appendDiffPath(basePath: string, segment: string | number): string {\n if (typeof segment === \"number\") {\n return `${basePath}[${segment}]`;\n }\n\n return basePath === \"$\" ? `$.${segment}` : `${basePath}.${segment}`;\n}\n\nfunction deepEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction diffValues(\n left: unknown,\n right: unknown,\n basePath = \"$\"\n): JsonDiffEntry[] {\n if (deepEqual(left, right)) {\n return [];\n }\n\n if (Array.isArray(left) && Array.isArray(right)) {\n const result: JsonDiffEntry[] = [];\n const maxLength = Math.max(left.length, right.length);\n\n for (let index = 0; index < maxLength; index += 1) {\n if (index >= left.length) {\n result.push({\n path: appendDiffPath(basePath, index),\n type: \"added\",\n right: right[index]\n });\n continue;\n }\n\n if (index >= right.length) {\n result.push({\n path: appendDiffPath(basePath, index),\n type: \"removed\",\n left: left[index]\n });\n continue;\n }\n\n result.push(\n ...diffValues(\n left[index],\n right[index],\n appendDiffPath(basePath, index)\n )\n );\n }\n\n return result;\n }\n\n if (isPlainObject(left) && isPlainObject(right)) {\n const result: JsonDiffEntry[] = [];\n const keys = new Set([...Object.keys(left), ...Object.keys(right)]);\n\n for (const key of Array.from(keys).sort((a, b) => a.localeCompare(b))) {\n if (!(key in left)) {\n result.push({\n path: appendDiffPath(basePath, key),\n type: \"added\",\n right: right[key]\n });\n continue;\n }\n\n if (!(key in right)) {\n result.push({\n path: appendDiffPath(basePath, key),\n type: \"removed\",\n left: left[key]\n });\n continue;\n }\n\n result.push(\n ...diffValues(left[key], right[key], appendDiffPath(basePath, key))\n );\n }\n\n return result;\n }\n\n return [\n {\n path: basePath,\n type: \"changed\",\n left,\n right\n }\n ];\n}\n\nfunction deepMerge(left: unknown, right: unknown): unknown {\n if (Array.isArray(left) && Array.isArray(right)) {\n return cloneJsonValue(right);\n }\n\n if (isPlainObject(left) && isPlainObject(right)) {\n const result: Record<string, unknown> = cloneJsonValue(left);\n\n for (const [key, value] of Object.entries(right)) {\n if (key in result) {\n result[key] = deepMerge(result[key], value);\n } else {\n result[key] = cloneJsonValue(value);\n }\n }\n\n return result;\n }\n\n return cloneJsonValue(right);\n}\n\nexport function parseJsonInput(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown JSON parse error.\";\n throw new BRUtilsError(message);\n }\n}\n\nexport function validateJsonInput(value: string): JsonValidationResult {\n try {\n JSON.parse(value);\n return { isValid: true };\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown JSON parse error.\";\n return { isValid: false, error: message };\n }\n}\n\nexport function formatJsonValue(\n value: unknown,\n indent = 2,\n sortKeys = false\n): string {\n if (!Number.isInteger(indent) || indent < 0) {\n throw new BRUtilsError(\"Indent must be a non-negative integer.\");\n }\n\n const normalized = sortKeys ? sortKeysDeep(value) : value;\n return JSON.stringify(normalized, null, indent);\n}\n\nexport function minifyJsonValue(value: unknown): string {\n return JSON.stringify(value);\n}\n\nexport function getJsonPathValue(value: unknown, path: string): unknown {\n return getContainerForPath(value, parsePath(path));\n}\n\nexport function setJsonPathValue(\n value: unknown,\n path: string,\n newValue: unknown\n): unknown {\n const root = cloneJsonValue(value);\n const segments = parsePath(path);\n let current: unknown = root;\n\n segments.forEach((segment, index) => {\n const isLast = index === segments.length - 1;\n const nextSegment = segments[index + 1];\n const nextShouldBeArray =\n nextSegment !== undefined && /^\\d+$/.test(nextSegment);\n\n if (Array.isArray(current)) {\n const currentIndex = Number(segment);\n\n if (!Number.isInteger(currentIndex)) {\n throw new BRUtilsError(`Invalid array index in path: ${segment}`);\n }\n\n if (isLast) {\n current[currentIndex] = newValue;\n return;\n }\n\n if (current[currentIndex] === undefined) {\n current[currentIndex] = nextShouldBeArray ? [] : {};\n }\n\n current = current[currentIndex];\n return;\n }\n\n if (!isPlainObject(current)) {\n throw new BRUtilsError(`Cannot set nested path at segment: ${segment}`);\n }\n\n if (isLast) {\n current[segment] = newValue;\n return;\n }\n\n if (current[segment] === undefined) {\n current[segment] = nextShouldBeArray ? [] : {};\n }\n\n current = current[segment];\n });\n\n return root;\n}\n\nexport function deleteJsonPathValue(value: unknown, path: string): unknown {\n const root = cloneJsonValue(value);\n const segments = parsePath(path);\n const parent = getContainerForPath(root, segments.slice(0, -1));\n const lastSegment = segments[segments.length - 1]!;\n\n if (Array.isArray(parent)) {\n const index = Number(lastSegment);\n\n if (!Number.isInteger(index)) {\n throw new BRUtilsError(`Invalid array index in path: ${lastSegment}`);\n }\n\n parent.splice(index, 1);\n return root;\n }\n\n if (isPlainObject(parent)) {\n delete parent[lastSegment];\n return root;\n }\n\n if (segments.length === 1 && isPlainObject(root)) {\n delete root[lastSegment];\n return root;\n }\n\n throw new BRUtilsError(`Path not found: ${path}`);\n}\n\nexport function diffJsonValues(left: unknown, right: unknown): JsonDiffResult {\n const changes = diffValues(left, right);\n return {\n isEqual: changes.length === 0,\n changes\n };\n}\n\nexport function mergeJsonValues(values: unknown[]): unknown {\n if (values.length < 2) {\n throw new BRUtilsError(\"Merge requires at least two JSON sources.\");\n }\n\n return values.slice(1).reduce((accumulator, current) => {\n return deepMerge(accumulator, current);\n }, cloneJsonValue(values[0]));\n}\n\nexport function convertJsonToYaml(value: unknown): string {\n return toYamlLines(value).join(\"\\n\");\n}\n","import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\n\nimport { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type {\n ChecksumOptions,\n CompareHashOptions,\n CompareHashResult,\n FixedHashAlgorithm,\n HashSourceOptions,\n HmacOptions\n} from \"./hash.types.js\";\n\ninterface ResolvedHashSource {\n kind: \"text\" | \"file\";\n content: Buffer;\n}\n\nfunction resolveHashSource(options: HashSourceOptions): ResolvedHashSource {\n if (options.text !== undefined && options.file !== undefined) {\n throw new BRUtilsError(\"Use either --text or --file, not both.\");\n }\n\n if (options.text !== undefined) {\n return {\n kind: \"text\",\n content: Buffer.from(options.text, \"utf-8\")\n };\n }\n\n if (options.file !== undefined) {\n if (!fs.existsSync(options.file) || !fs.statSync(options.file).isFile()) {\n throw new BRUtilsError(`File does not exist: ${options.file}`);\n }\n\n return {\n kind: \"file\",\n content: fs.readFileSync(options.file)\n };\n }\n\n throw new BRUtilsError(\"One of --text or --file is required.\");\n}\n\nfunction normalizeAlgorithm(value: string): string {\n const algorithm = value.toLowerCase();\n\n if (!crypto.getHashes().includes(algorithm)) {\n throw new BRUtilsError(`Unsupported hash algorithm: ${value}`);\n }\n\n return algorithm;\n}\n\nfunction digestBuffer(buffer: Buffer, algorithm: string): string {\n return crypto\n .createHash(normalizeAlgorithm(algorithm))\n .update(buffer)\n .digest(\"hex\");\n}\n\nfunction normalizeExpectedHash(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport function computeHash(\n options: HashSourceOptions,\n algorithm: string\n): string {\n const source = resolveHashSource(options);\n return digestBuffer(source.content, algorithm);\n}\n\nexport function computeMd5(options: HashSourceOptions): string {\n return computeHash(options, \"md5\");\n}\n\nexport function computeSha1(options: HashSourceOptions): string {\n return computeHash(options, \"sha1\");\n}\n\nexport function computeSha256(options: HashSourceOptions): string {\n return computeHash(options, \"sha256\");\n}\n\nexport function computeSha512(options: HashSourceOptions): string {\n return computeHash(options, \"sha512\");\n}\n\nexport function computeHmac(options: HmacOptions): string {\n const source = resolveHashSource(options);\n\n return crypto\n .createHmac(normalizeAlgorithm(options.algo), options.key)\n .update(source.content)\n .digest(\"hex\");\n}\n\nexport function computeChecksum(options: ChecksumOptions): string {\n return computeHash({ file: options.file }, options.algo ?? \"sha256\");\n}\n\nexport function compareHash(options: CompareHashOptions): CompareHashResult {\n const source = resolveHashSource(options);\n const algorithm = normalizeAlgorithm(options.algo ?? \"sha256\");\n const actual = digestBuffer(source.content, algorithm);\n const expected = normalizeExpectedHash(options.expected);\n\n return {\n algorithm,\n actual,\n expected,\n matches: actual === expected,\n source: source.kind\n };\n}\n\nexport const FIXED_HASH_ALGORITHMS: FixedHashAlgorithm[] = [\n \"md5\",\n \"sha1\",\n \"sha256\",\n \"sha512\"\n];\n","import crypto from \"node:crypto\";\n\nimport { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type {\n CharsetName,\n PasswordGenerateOptions,\n TokenGenerateOptions,\n UuidGenerateOptions\n} from \"./id.types.js\";\n\nconst LOWERCASE = \"abcdefghijklmnopqrstuvwxyz\";\nconst UPPERCASE = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\nconst DIGITS = \"0123456789\";\nconst SYMBOLS = \"!@#$%^&*()-_=+[]{};:,.?/|~\";\n\nconst CHARSET_MAP: Record<CharsetName, string> = {\n alnum: `${LOWERCASE}${UPPERCASE}${DIGITS}`,\n alpha: `${LOWERCASE}${UPPERCASE}`,\n numeric: DIGITS,\n hex: \"0123456789abcdef\",\n base64url: `${LOWERCASE}${UPPERCASE}${DIGITS}-_`,\n lower: LOWERCASE,\n upper: UPPERCASE\n};\n\nfunction ensurePositiveInteger(value: number, label: string): void {\n if (!Number.isInteger(value) || value < 1) {\n throw new BRUtilsError(`${label} must be a positive integer.`);\n }\n}\n\nfunction resolveCount(count?: number): number {\n const resolved = count ?? 1;\n ensurePositiveInteger(resolved, \"Count\");\n return resolved;\n}\n\nfunction resolveLength(length: number | undefined, fallback: number): number {\n const resolved = length ?? fallback;\n ensurePositiveInteger(resolved, \"Length\");\n return resolved;\n}\n\nfunction charsetByName(name: CharsetName): string {\n return CHARSET_MAP[name];\n}\n\nfunction randomCharacter(charset: string): string {\n return charset[crypto.randomInt(0, charset.length)]!;\n}\n\nfunction randomString(length: number, charset: string): string {\n return Array.from({ length }, () => randomCharacter(charset)).join(\"\");\n}\n\nfunction ensureNotEmptyCharset(charset: string): void {\n if (charset.length === 0) {\n throw new BRUtilsError(\n \"The selected options produced an empty character set.\"\n );\n }\n}\n\nfunction ensureUppercasePresence(value: string): string {\n if (/[A-Z]/.test(value)) {\n return value;\n }\n\n const index = crypto.randomInt(0, value.length);\n const replacement = randomCharacter(UPPERCASE);\n\n return `${value.slice(0, index)}${replacement}${value.slice(index + 1)}`;\n}\n\nfunction resolveTokenCharset(charset?: CharsetName): string {\n return charsetByName(charset ?? \"alnum\");\n}\n\nfunction resolvePasswordCharset(options: PasswordGenerateOptions): string {\n let charset = options.charset\n ? charsetByName(options.charset)\n : `${LOWERCASE}${UPPERCASE}${DIGITS}${SYMBOLS}`;\n\n if (options.noNumbers) {\n charset = charset.replace(/[0-9]/g, \"\");\n }\n\n if (options.noSymbols) {\n charset = charset.replace(/[!@#$%^&*()_=+[\\]{};:,.?/|~-]/g, \"\");\n }\n\n if (options.uppercase && !/[A-Z]/.test(charset)) {\n charset += UPPERCASE;\n }\n\n ensureNotEmptyCharset(charset);\n return charset;\n}\n\nexport function generateUuidValues(\n options: UuidGenerateOptions = {}\n): string[] {\n const count = resolveCount(options.count);\n return Array.from({ length: count }, () => crypto.randomUUID());\n}\n\nexport function generateTokenValues(\n options: TokenGenerateOptions = {}\n): string[] {\n const count = resolveCount(options.count);\n const length = resolveLength(options.length, 32);\n const charset = resolveTokenCharset(options.charset);\n\n return Array.from({ length: count }, () => randomString(length, charset));\n}\n\nexport function generatePasswordValues(\n options: PasswordGenerateOptions = {}\n): string[] {\n const count = resolveCount(options.count);\n const length = resolveLength(options.length, 16);\n const charset = resolvePasswordCharset(options);\n\n return Array.from({ length: count }, () => {\n let password = randomString(length, charset);\n\n if (options.uppercase) {\n password = ensureUppercasePresence(password);\n }\n\n return password;\n });\n}\n\nexport const CHARSET_NAMES: CharsetName[] = [\n \"alnum\",\n \"alpha\",\n \"numeric\",\n \"hex\",\n \"base64url\",\n \"lower\",\n \"upper\"\n];\n","import { BRUtilsError } from \"../../core/errors/brutils.error.js\";\nimport type {\n DateAdjustOptions,\n DateDiffResult,\n DateDiffUnit,\n DateSnapshot,\n ParsedDateResult,\n TimeZoneConversionResult,\n UnixConversionResult\n} from \"./date.types.js\";\n\nconst DATE_DIFF_FACTORS: Record<DateDiffUnit, number> = {\n seconds: 1000,\n minutes: 60 * 1000,\n hours: 60 * 60 * 1000,\n days: 24 * 60 * 60 * 1000\n};\n\nfunction ensureValidDate(date: Date, input: string): void {\n if (Number.isNaN(date.getTime())) {\n throw new BRUtilsError(`Invalid date value: ${input}`);\n }\n}\n\nfunction parseDate(input: string): Date {\n const date = new Date(input);\n ensureValidDate(date, input);\n return date;\n}\n\nfunction ensureValidInteger(value: number | undefined, label: string): number {\n const resolved = value ?? 0;\n\n if (!Number.isInteger(resolved)) {\n throw new BRUtilsError(`${label} must be an integer.`);\n }\n\n return resolved;\n}\n\nfunction pad2(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nfunction snapshot(date: Date): DateSnapshot {\n const unixMs = date.getTime();\n\n return {\n iso: date.toISOString(),\n unix: Math.floor(unixMs / 1000),\n unixMs\n };\n}\n\nfunction formatUtcDate(date: Date, pattern: string): string {\n const replacements: Record<string, string> = {\n YYYY: String(date.getUTCFullYear()),\n MM: pad2(date.getUTCMonth() + 1),\n DD: pad2(date.getUTCDate()),\n HH: pad2(date.getUTCHours()),\n mm: pad2(date.getUTCMinutes()),\n ss: pad2(date.getUTCSeconds())\n };\n\n return pattern.replace(\n /YYYY|MM|DD|HH|mm|ss/g,\n (token) => replacements[token]!\n );\n}\n\nfunction adjustDate(\n date: Date,\n options: DateAdjustOptions,\n multiplier: 1 | -1\n): Date {\n const days = ensureValidInteger(options.days, \"Days\");\n const hours = ensureValidInteger(options.hours, \"Hours\");\n const minutes = ensureValidInteger(options.minutes, \"Minutes\");\n const seconds = ensureValidInteger(options.seconds, \"Seconds\");\n\n const totalMs =\n days * DATE_DIFF_FACTORS.days +\n hours * DATE_DIFF_FACTORS.hours +\n minutes * DATE_DIFF_FACTORS.minutes +\n seconds * DATE_DIFF_FACTORS.seconds;\n\n return new Date(date.getTime() + multiplier * totalMs);\n}\n\nfunction ensureTimeZone(value: string): string {\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: value }).format(new Date());\n return value;\n } catch {\n throw new BRUtilsError(`Invalid time zone: ${value}`);\n }\n}\n\nfunction timeZoneParts(date: Date, timeZone: string): Record<string, string> {\n const formatter = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false\n });\n\n return formatter\n .formatToParts(date)\n .reduce<Record<string, string>>((acc, part) => {\n if (part.type !== \"literal\") {\n acc[part.type] = part.value;\n }\n\n return acc;\n }, {});\n}\n\nexport function currentDateTime(): DateSnapshot {\n return snapshot(new Date());\n}\n\nexport function formatDateValue(value: string, pattern: string): string {\n return formatUtcDate(parseDate(value), pattern);\n}\n\nexport function parseDateValue(value: string): ParsedDateResult {\n return {\n input: value,\n ...snapshot(parseDate(value))\n };\n}\n\nexport function addToDate(value: string, options: DateAdjustOptions): string {\n return adjustDate(parseDate(value), options, 1).toISOString();\n}\n\nexport function subtractFromDate(\n value: string,\n options: DateAdjustOptions\n): string {\n return adjustDate(parseDate(value), options, -1).toISOString();\n}\n\nexport function diffDates(\n from: string,\n to: string,\n unit: DateDiffUnit = \"seconds\"\n): DateDiffResult {\n const left = parseDate(from);\n const right = parseDate(to);\n const factor = DATE_DIFF_FACTORS[unit];\n const raw = (right.getTime() - left.getTime()) / factor;\n\n return {\n from,\n to,\n unit,\n value: Number(raw.toFixed(6))\n };\n}\n\nexport function convertDateToUnix(value: string): UnixConversionResult {\n return {\n input: value,\n sourceUnit: \"milliseconds\",\n ...snapshot(parseDate(value))\n };\n}\n\nexport function convertUnixValue(value: string | number): UnixConversionResult {\n const normalized = String(value).trim();\n\n if (!/^-?\\d+$/.test(normalized)) {\n throw new BRUtilsError(`Invalid Unix timestamp value: ${value}`);\n }\n\n const numeric = Number(normalized);\n const sourceUnit =\n Math.abs(numeric) >= 1_000_000_000_000 ? \"milliseconds\" : \"seconds\";\n const unixMs = sourceUnit === \"seconds\" ? numeric * 1000 : numeric;\n const date = new Date(unixMs);\n\n ensureValidDate(date, normalized);\n\n return {\n input: value,\n sourceUnit,\n ...snapshot(date)\n };\n}\n\nexport function convertDateToTimeZone(\n value: string,\n timeZone: string\n): TimeZoneConversionResult {\n const date = parseDate(value);\n const normalizedTimeZone = ensureTimeZone(timeZone);\n const parts = timeZoneParts(date, normalizedTimeZone);\n\n return {\n input: value,\n timeZone: normalizedTimeZone,\n formatted: `${parts.year}-${parts.month}-${parts.day} ${parts.hour}:${parts.minute}:${parts.second}`,\n iso: date.toISOString()\n };\n}\n\nexport const DATE_DIFF_UNITS: DateDiffUnit[] = [\n \"seconds\",\n \"minutes\",\n \"hours\",\n \"days\"\n];\n"],"mappings":"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","names":["path","path","fs","path","fs","path","path","fs","path","fs","path","path","path","path","path","fs","path","pipeline","yauzl","fs","normalizeEntryPath","shouldIncludeEntry","path","openZipFile","yauzl","isDirectory","pipeline","path","path","path","path","path","fs","fs","crypto","crypto"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@danielarndt0/brutils-cli",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Production-ready CLI for Brazilian and general developer utilities.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"brutils": "./dist/cli.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"registry": "https://npm.pkg.github.com"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=20"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsup",
|
|
23
|
+
"dev": "tsup --watch",
|
|
24
|
+
"cli": "tsx src/cli.ts",
|
|
25
|
+
"test": "npm run test:unit",
|
|
26
|
+
"test:unit": "vitest run",
|
|
27
|
+
"test:watch": "vitest",
|
|
28
|
+
"lint": "eslint .",
|
|
29
|
+
"format": "prettier . --write",
|
|
30
|
+
"typecheck": "tsc --noEmit"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"archiver": "^7.0.1",
|
|
34
|
+
"commander": "^12.1.0",
|
|
35
|
+
"extract-zip": "^2.0.1",
|
|
36
|
+
"fast-glob": "^3.3.3",
|
|
37
|
+
"minimatch": "^3.1.5",
|
|
38
|
+
"yauzl": "^2.10.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@eslint/js": "^9.20.0",
|
|
42
|
+
"@types/archiver": "^7.0.0",
|
|
43
|
+
"@types/node": "^24.0.0",
|
|
44
|
+
"@types/yauzl": "^2.10.3",
|
|
45
|
+
"eslint": "^9.20.1",
|
|
46
|
+
"prettier": "^3.5.0",
|
|
47
|
+
"tsup": "^8.4.0",
|
|
48
|
+
"tsx": "^4.19.2",
|
|
49
|
+
"typescript": "^5.8.0",
|
|
50
|
+
"typescript-eslint": "^8.24.0",
|
|
51
|
+
"vitest": "^3.0.0"
|
|
52
|
+
}
|
|
53
|
+
}
|