{"version":3,"file":"dns-utils.cjs","sources":["../../../src/utils/dns-utils.ts"],"sourcesContent":["// MARK: nameEquals\nconst capitalLetterRegex = /[A-Z]/g;\n\n/**\n * Compares two strings for equality in a case-insensitive manner,\n * but only ASCII uppercase letters (`A-Z`) are converted to lowercase before comparison.\n */\nexport function nameEquals(a: string, b: string): boolean {\n  const aFormatted = a.replace(capitalLetterRegex, s => s.toLowerCase());\n  const bFormatted = b.replace(capitalLetterRegex, s => s.toLowerCase());\n  return aFormatted === bFormatted;\n}\n\n// MARK: TXT\n/**\n * Encodes a record of key-value string pairs into an array of Buffer objects,\n * where each buffer contains a string in the format `\"key=value\"`.\n *\n * @param data - An object whose string keys and values will be encoded.\n *               Defaults to an empty object.\n * @returns An array of Buffer instances, each representing one `\"key=value\"` pair.\n *\n * @example\n * ```ts\n * encodeTXT({ foo: \"bar\", baz: \"qux\" })\n * // [Buffer.from(\"foo=bar\"), Buffer.from(\"baz=qux\")]\n * ```\n */\nexport function encodeTXT(data: Record<string, string | number | boolean | Buffer> = {}): Buffer[] {\n  const buffers: Buffer[] = [];\n  for (const [key, value] of Object.entries(data)) {\n    buffers.push(Buffer.from(`${key}=${value}`));\n  }\n  return buffers;\n}\n\n/**\n * Decodes an input buffer or array of buffers (or strings) containing\n * `\"key=value\"` pairs into a single object mapping keys to values.\n *\n * Each input item is expected to be a string or Buffer representing one key-value pair.\n * Items that do not match the `\"key=value\"` pattern are ignored.\n *\n * @param buffer - A string, Buffer, or an array of these, each containing `\"key=value\"` format data.\n * @returns An object where each key is mapped to its corresponding decoded value.\n *\n * @example\n * ```ts\n * decodeTXT([Buffer.from(\"foo=bar\"), \"baz=qux\"])\n * // { foo: \"bar\", baz: \"qux\" }\n *\n * decodeTXT(Buffer.from(\"hello=world\"))\n * // { hello: \"world\" }\n *\n * decodeTXT([\"invalid\", \"key=value\"])\n * //  { key: \"value\" }  // \"invalid\" ignored\n * ```\n */\nexport function decodeTXT(buffer: string | Buffer | (string | Buffer)[], binary: false): Record<string, string>;\nexport function decodeTXT(buffer: string | Buffer | (string | Buffer)[], binary: true): Record<string, Buffer>;\nexport function decodeTXT(\n  buffer: string | Buffer | (string | Buffer)[],\n  binary: boolean,\n): Record<string, string | Buffer> {\n  function decode(buffer: string | Buffer, binary: boolean): Record<string, string | Buffer> {\n    const buf = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer);\n\n    const asciiStr = buf.toString('ascii');\n    const eqIndex = asciiStr.indexOf('=');\n    if (eqIndex === -1) {\n      if (binary) {\n        return { [asciiStr]: Buffer.alloc(0) };\n      } else {\n        return { [asciiStr]: '' };\n      }\n    }\n\n    const key = asciiStr.slice(0, eqIndex);\n    const valueBuf = buf.subarray(eqIndex + 1);\n    const value = binary ? valueBuf : valueBuf.toString('utf8');\n\n    return { [key]: value };\n  }\n\n  const buffers = [buffer].flat();\n  const result: Record<string, string | Buffer> = {};\n  for (const buffer of buffers) {\n    const entry = decode(buffer, binary);\n    const entries = Object.entries(entry);\n    if (entries.length === 1) {\n      const [key, value] = entries[0]!;\n      result[key] = value;\n    }\n  }\n\n  return result;\n}\n"],"names":["capitalLetterRegex","nameEquals","a","b","aFormatted","s","bFormatted","encodeTXT","data","buffers","key","value","decodeTXT","buffer","binary","decode","buf","asciiStr","eqIndex","valueBuf","result","entry","entries"],"mappings":"gFACA,MAAMA,EAAqB,SAMpB,SAASC,EAAWC,EAAWC,EAAoB,CACxD,MAAMC,EAAaF,EAAE,QAAQF,EAAoBK,GAAKA,EAAE,aAAa,EAC/DC,EAAaH,EAAE,QAAQH,EAAoBK,GAAKA,EAAE,aAAa,EACrE,OAAOD,IAAeE,CACxB,CAiBO,SAASC,EAAUC,EAA2D,GAAc,CACjG,MAAMC,EAAoB,CAAA,EAC1B,SAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,CAAI,EAC5CC,EAAQ,KAAK,OAAO,KAAK,GAAGC,CAAG,IAAIC,CAAK,EAAE,CAAC,EAE7C,OAAOF,CACT,CA0BO,SAASG,EACdC,EACAC,EACiC,CACjC,SAASC,EAAOF,EAAyBC,EAAkD,CACzF,MAAME,EAAM,OAAO,SAASH,CAAM,EAAIA,EAAS,OAAO,KAAKA,CAAM,EAE3DI,EAAWD,EAAI,SAAS,OAAO,EAC/BE,EAAUD,EAAS,QAAQ,GAAG,EACpC,GAAIC,IAAY,GACd,OAAIJ,EACK,CAAE,CAACG,CAAQ,EAAG,OAAO,MAAM,CAAC,CAAA,EAE5B,CAAE,CAACA,CAAQ,EAAG,EAAA,EAIzB,MAAMP,EAAMO,EAAS,MAAM,EAAGC,CAAO,EAC/BC,EAAWH,EAAI,SAASE,EAAU,CAAC,EACnCP,EAAQG,EAASK,EAAWA,EAAS,SAAS,MAAM,EAE1D,MAAO,CAAE,CAACT,CAAG,EAAGC,CAAA,CAClB,CAEA,MAAMF,EAAU,CAACI,CAAM,EAAE,KAAA,EACnBO,EAA0C,CAAA,EAChD,UAAWP,KAAUJ,EAAS,CAC5B,MAAMY,EAAQN,EAAOF,EAAQC,CAAM,EAC7BQ,EAAU,OAAO,QAAQD,CAAK,EACpC,GAAIC,EAAQ,SAAW,EAAG,CACxB,KAAM,CAACZ,EAAKC,CAAK,EAAIW,EAAQ,CAAC,EAC9BF,EAAOV,CAAG,EAAIC,CAChB,CACF,CAEA,OAAOS,CACT"}