{"version":3,"file":"quad-hexer.mjs","sources":["../src/quadkey.ts","../src/s2-hilbert-quadkey.ts","../src/spatial-id-tilehash.ts","../src/index.ts"],"sourcesContent":["export const encodeQuadkey = (quadkey: string): string => {\n  if (typeof quadkey !== 'string') {\n    throw new Error('Invalid quadkey type: ' + typeof quadkey);\n  }\n  const quadkeyPattern = /^[0-3]{1,32}$/;\n  if (!quadkeyPattern.test(quadkey)) {\n    throw new Error('Invalid quadkey format: ' + quadkey);\n  }\n  const binaryString = quadkey\n    .split('')\n    .map((c) => parseInt(c, 4).toString(2).padStart(2, '0'))\n    .join('');\n\n  const hexStringArray = ['x'];\n  const hexDigits = Math.floor(binaryString.length / 4);\n  if (binaryString.length % 4 === 0) {\n    hexStringArray.push(\n      BigInt('0b' + binaryString)\n        .toString(16)\n        .padStart(hexDigits, '0')\n    );\n  } else {\n    if (binaryString.length >= 4) {\n      hexStringArray.push(\n        BigInt('0b' + binaryString.slice(0, -2))\n          .toString(16)\n          .padStart(hexDigits, '0')\n      );\n    }\n    hexStringArray.push('#');\n    hexStringArray.push(BigInt('0b' + binaryString.slice(-2)).toString(4));\n  }\n  return hexStringArray.join('');\n};\n\nexport const decodeHexQuadkey = (hexQuadkey: string): string => {\n  if (!hexQuadkey || typeof hexQuadkey !== 'string') {\n    throw new Error('Invalid hex quadkey type: ' + typeof hexQuadkey);\n  }\n  const hexQuadkeyPattern = /^x([0-9a-f]{0,16})(?:#([0-3]))?$/;\n  if (!hexQuadkeyPattern.test(hexQuadkey)) {\n    throw new Error('Invalid hex quadkey format: ' + hexQuadkey);\n  }\n  const matches = hexQuadkey.match(hexQuadkeyPattern)!;\n  if (!matches[1] && !matches[2]) {\n    throw new Error('Invalid hex quadkey format: ' + hexQuadkey);\n  }\n  const quadStringArray = [];\n  if (matches[1]) {\n    const quadDigits = matches[1].length * 2;\n    quadStringArray.push(\n      BigInt('0x' + matches[1])\n        .toString(4)\n        .padStart(quadDigits, '0')\n    );\n  }\n  if (matches[2]) {\n    quadStringArray.push(matches[2]);\n  }\n  return quadStringArray.join('');\n};\n","import { encodeQuadkey, decodeHexQuadkey } from './quadkey';\n\nexport const encodeS2HilbertQuadkey = (s2HilbertQuadkey: string): string => {\n  if (typeof s2HilbertQuadkey !== 'string') {\n    throw new Error('Invalid S2 hilbert quadkey type: ' + typeof s2HilbertQuadkey);\n  }\n  const s2HilbertQuadkeyPattern = /^([0-5]{1})\\/([0-3]{1,30})$/;\n  if (!s2HilbertQuadkeyPattern.test(s2HilbertQuadkey)) {\n    throw new Error('Invalid S2 hilbert quadkey format: ' + s2HilbertQuadkey);\n  }\n  const matches = s2HilbertQuadkey.match(s2HilbertQuadkeyPattern)!;\n  const hexStringArray = [];\n  hexStringArray.push(matches[1]);\n  hexStringArray.push(encodeQuadkey(matches[2]));\n  return hexStringArray.join('');\n};\n\nexport const decodeHexS2HilbertQuadkey = (hexS2HilbertQuadkey: string): string => {\n  if (typeof hexS2HilbertQuadkey !== 'string') {\n    throw new Error('Invalid hex S2 hilbert quadkey type: ' + typeof hexS2HilbertQuadkey);\n  }\n  const hexS2HilbertQuadkeyPattern = /^([0-5]{1})(x[0-9a-f]{0,15}(?:#[0-3])?)$/;\n  if (!hexS2HilbertQuadkeyPattern.test(hexS2HilbertQuadkey)) {\n    throw new Error('Invalid hex S2 hilbert quadkey format: ' + hexS2HilbertQuadkey);\n  }\n  const matches = hexS2HilbertQuadkey.match(hexS2HilbertQuadkeyPattern)!;\n  const quadStringArray = [];\n  quadStringArray.push(matches[1]);\n  quadStringArray.push('/');\n  if (matches[2]) {\n    try {\n      quadStringArray.push(decodeHexQuadkey(matches[2]));\n    } catch (error) {\n      if (\n        error instanceof Error &&\n        error.message &&\n        error.message.includes('Invalid hex quadkey format')\n      ) {\n        throw new Error('Invalid hex S2 hilbert quadkey format: ' + hexS2HilbertQuadkey);\n      } else {\n        throw error;\n      }\n    }\n  }\n  return quadStringArray.join('');\n};\n","import { encodeQuadkey, decodeHexQuadkey } from './quadkey';\n\nexport const encodeSpatialIdTilehash = (spatialIdTilehash: string): string => {\n  if (typeof spatialIdTilehash !== 'string') {\n    throw new Error('Invalid spatial id tilehash type: ' + typeof spatialIdTilehash);\n  }\n  const spatialIdTilehashPattern = /^(-?)([1-8]{1,30})$/;\n  if (!spatialIdTilehashPattern.test(spatialIdTilehash)) {\n    throw new Error('Invalid spatial id tilehash format: ' + spatialIdTilehash);\n  }\n  const matches = spatialIdTilehash.match(spatialIdTilehashPattern)!;\n  const isNegative = matches[1] === '-';\n  const tilehash = matches[2];\n  const octalString = tilehash\n    .split('')\n    .map((c) => (parseInt(c) - 1).toString())\n    .join('');\n  const octalDigits = octalString.length;\n  const tilehashNumber = BigInt('0o' + octalString);\n  const binaryString = tilehashNumber.toString(2).padStart(octalDigits * 3, '0');\n  const fBinaryArray = [];\n  const yxBinaryArray = [];\n  for (let i = 0; i < octalDigits * 3; i += 3) {\n    fBinaryArray.push(binaryString.slice(i, i + 1));\n    yxBinaryArray.push(binaryString.slice(i + 1, i + 3));\n  }\n  const fBinaryString = fBinaryArray.join('');\n  const yxBinaryString = yxBinaryArray.join('');\n  const floorNumber = parseInt(fBinaryString, 2);\n  const yxNumber = BigInt('0b' + yxBinaryString);\n  const quadkey = yxNumber.toString(4).padStart(octalDigits, '0');\n  const hexStringArray = [];\n  hexStringArray.push(encodeQuadkey(quadkey));\n  if (floorNumber !== 0) {\n    hexStringArray.push(isNegative ? '-' : '+');\n    hexStringArray.push(floorNumber.toString(16));\n  }\n  return hexStringArray.join('');\n};\n\nexport const decodeHexSpatialIdTilehash = (hexSpatialIdTilehash: string): string => {\n  if (typeof hexSpatialIdTilehash !== 'string') {\n    throw new Error('Invalid hex spatial id tilehash type: ' + typeof hexSpatialIdTilehash);\n  }\n  const hexSpatialIdTilehashPattern = /^(x[0-9a-f]{0,15}(?:#[0-3])?)(?:([+-][0-9a-f]+))?$/;\n  if (!hexSpatialIdTilehashPattern.test(hexSpatialIdTilehash)) {\n    throw new Error('Invalid hex spatial id tilehash format: ' + hexSpatialIdTilehash);\n  }\n  const matches = hexSpatialIdTilehash.match(hexSpatialIdTilehashPattern)!;\n  let quadString;\n  try {\n    quadString = decodeHexQuadkey(matches[1]);\n  } catch (error) {\n    if (\n      error instanceof Error &&\n      error.message &&\n      error.message.includes('Invalid hex quadkey format')\n    ) {\n      throw new Error('Invalid hex spatial id tilehash format: ' + hexSpatialIdTilehash);\n    } else {\n      throw error;\n    }\n  }\n  const floorNumber = matches[2] ? parseInt(matches[2], 16) : 0;\n  const quadDigits = quadString.length;\n  const fBinaryString = Math.abs(floorNumber).toString(2).padStart(quadDigits, '0');\n  const binaryStringArray = [];\n  for (let i = 0; i < quadDigits; i++) {\n    binaryStringArray.push(fBinaryString.slice(i, i + 1));\n    binaryStringArray.push(parseInt(quadString[i], 4).toString(2).padStart(2, '0'));\n  }\n  const binaryString = binaryStringArray.join('');\n  const octalString = BigInt('0b' + binaryString)\n    .toString(8)\n    .padStart(quadDigits, '0');\n  const incrementedOctalString = octalString\n    .split('')\n    .map((c) => (parseInt(c) + 1).toString())\n    .join('');\n  const isNegative = floorNumber < 0;\n  const tilehashStringArray = [];\n  if (isNegative) {\n    tilehashStringArray.push('-');\n  }\n  tilehashStringArray.push(incrementedOctalString);\n  return tilehashStringArray.join('');\n};\n","export { encodeQuadkey, decodeHexQuadkey } from './quadkey';\nexport { encodeS2HilbertQuadkey, decodeHexS2HilbertQuadkey } from './s2-hilbert-quadkey';\nexport { encodeSpatialIdTilehash, decodeHexSpatialIdTilehash } from './spatial-id-tilehash';\n\nimport { encodeQuadkey, decodeHexQuadkey } from './quadkey';\nimport { encodeS2HilbertQuadkey, decodeHexS2HilbertQuadkey } from './s2-hilbert-quadkey';\nimport { encodeSpatialIdTilehash, decodeHexSpatialIdTilehash } from './spatial-id-tilehash';\n\nexport const quadHexer = {\n  encodeQuadkey: encodeQuadkey,\n  decodeHexQuadkey: decodeHexQuadkey,\n  encodeS2HilbertQuadkey: encodeS2HilbertQuadkey,\n  decodeHexS2HilbertQuadkey: decodeHexS2HilbertQuadkey,\n  encodeSpatialIdTilehash: encodeSpatialIdTilehash,\n  decodeHexSpatialIdTilehash: decodeHexSpatialIdTilehash\n} as const;\n"],"names":["encodeQuadkey","quadkey","binaryString","c","hexStringArray","hexDigits","decodeHexQuadkey","hexQuadkey","hexQuadkeyPattern","matches","quadStringArray","quadDigits","encodeS2HilbertQuadkey","s2HilbertQuadkey","s2HilbertQuadkeyPattern","decodeHexS2HilbertQuadkey","hexS2HilbertQuadkey","hexS2HilbertQuadkeyPattern","error","encodeSpatialIdTilehash","spatialIdTilehash","spatialIdTilehashPattern","isNegative","octalString","octalDigits","fBinaryArray","yxBinaryArray","i","fBinaryString","yxBinaryString","floorNumber","decodeHexSpatialIdTilehash","hexSpatialIdTilehash","hexSpatialIdTilehashPattern","quadString","binaryStringArray","incrementedOctalString","tilehashStringArray","quadHexer"],"mappings":"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"}