{"version":3,"sources":["../../src/npwp/validate.ts","../../src/npwp/format.ts","../../src/npwp/clean.ts","../../src/npwp/type-check.ts","../../src/npwp/errors.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Validates an Indonesian NPWP (Nomor Pokok Wajib Pajak).\n *\n * Supports both 15-digit (standard) and 16-digit (new NIK-based) formats.\n *\n * @param npwp - The NPWP string to validate\n * @returns `true` if valid, `false` otherwise\n *\n * @example\n * ```typescript\n * validateNPWP('01.234.567.8-012.000'); // true\n * validateNPWP('012345678012000'); // true\n * ```\n */\nexport function validateNPWP(npwp: string): boolean {\n  if (!npwp || typeof npwp !== 'string') {\n    return false;\n  }\n\n  const cleaned = npwp.replace(/[^\\d]/g, '');\n\n  // Must be 15 or 16 digits\n  if (cleaned.length !== 15 && cleaned.length !== 16) {\n    return false;\n  }\n\n  // Basic check: all numeric\n  if (!/^\\d+$/.test(cleaned)) {\n    return false;\n  }\n\n  return true;\n}\n","import { validateNPWP } from './validate';\nimport { NPWPInfo, MaskOptions } from './types';\n\n/**\n * Formats an NPWP string into standard Indonesian format (99.999.999.9-999.999).\n *\n * @param npwp - The NPWP string to format\n * @returns Formatted NPWP string, or original if invalid\n *\n * @example\n * ```typescript\n * formatNPWP('012345678012000'); // '01.234.567.8-012.000'\n * ```\n */\nexport function formatNPWP(npwp: string): string {\n  if (!validateNPWP(npwp)) {\n    return npwp;\n  }\n\n  const cleaned = npwp.replace(/[^\\d]/g, '');\n\n  if (cleaned.length === 15) {\n    return `${cleaned.substring(0, 2)}.${cleaned.substring(\n      2,\n      5\n    )}.${cleaned.substring(5, 8)}.${cleaned.substring(8, 9)}-${cleaned.substring(\n      9,\n      12\n    )}.${cleaned.substring(12, 15)}`;\n  }\n\n  // 16-digit NPWP (NIK) usually doesn't have a standard \"dots\" format like 15-digit\n  // but if it's NIK, it might be formatted as NIK elsewhere.\n  // For now, return as is or implement a simple format.\n  return cleaned;\n}\n\n/**\n * Parses an NPWP string into its components.\n *\n * @param npwp - The NPWP string to parse\n * @returns NPWPInfo object, or null if invalid\n */\nexport function parseNPWP(npwp: string): NPWPInfo | null {\n  if (!validateNPWP(npwp)) {\n    return null;\n  }\n\n  const cleaned = npwp.replace(/[^\\d]/g, '');\n  const isNikBased = cleaned.length === 16;\n\n  if (isNikBased) {\n    return {\n      npwp: cleaned,\n      type: cleaned.substring(0, 2),\n      serial: cleaned.substring(2, 8),\n      checksum: cleaned.substring(8, 9),\n      taxOfficeCode: cleaned.substring(9, 12),\n      branchCode: cleaned.substring(12, 16),\n      isNikBased: true,\n    };\n  }\n\n  return {\n    npwp: cleaned,\n    type: cleaned.substring(0, 2),\n    serial: cleaned.substring(2, 8),\n    checksum: cleaned.substring(8, 9),\n    taxOfficeCode: cleaned.substring(9, 12),\n    branchCode: cleaned.substring(12, 15),\n    isNikBased: false,\n  };\n}\n\n/**\n * Masks an NPWP string for privacy.\n *\n * @param npwp - The NPWP string to mask\n * @param options - Masking options\n * @returns Masked NPWP string\n */\nexport function maskNPWP(npwp: string, options?: MaskOptions): string {\n  if (!npwp) return '';\n\n  const { visibleStart = 2, visibleEnd = 3, maskChar = '*' } = options || {};\n\n  // If input is formatted, we mask the digits but keep the symbols in place\n  if (npwp.includes('.') || npwp.includes('-')) {\n    let digitCount = 0;\n    const digitsOnly = npwp.replace(/[^\\d]/g, '');\n    const totalDigits = digitsOnly.length;\n\n    return npwp\n      .split('')\n      .map((char) => {\n        if (/\\d/.test(char)) {\n          digitCount++;\n          if (\n            digitCount <= visibleStart ||\n            digitCount > totalDigits - visibleEnd\n          ) {\n            return char;\n          }\n          return maskChar;\n        }\n        return char;\n      })\n      .join('');\n  }\n\n  const cleaned = npwp.replace(/[^\\d]/g, '');\n\n  if (cleaned.length < visibleStart + visibleEnd) {\n    return cleaned.replace(/./g, maskChar);\n  }\n\n  const start = cleaned.substring(0, visibleStart);\n  const end = cleaned.substring(cleaned.length - visibleEnd);\n  const middle = maskChar.repeat(cleaned.length - visibleStart - visibleEnd);\n\n  return `${start}${middle}${end}`;\n}\n","/**\n * Cleans an NPWP by removing all non-digit characters.\n *\n * @param npwp - The NPWP to clean\n * @returns Cleaned NPWP string (digits only), or empty string if invalid\n *\n * @example\n * ```typescript\n * cleanNPWP('01.234.567.8-012.345'); // '0123456789012345'\n * cleanNPWP('01-234-567-8-012-345'); // '0123456789012345'\n * cleanNPWP(''); // ''\n * ```\n *\n * @public\n */\nexport function cleanNPWP(npwp: string): string {\n  if (typeof npwp !== 'string') {\n    return '';\n  }\n\n  const cleaned = npwp.replace(/\\D/g, '');\n\n  return cleaned;\n}\n","import { validateNPWP } from './validate';\n\n/**\n * Checks if an NPWP is based on NIK (Nomor Induk Kependudukan).\n *\n * NIK-based NPWPs start with the same 16 digits as the holder's NIK.\n * This is the newer format introduced for individual taxpayers.\n *\n * @param npwp - The NPWP to check\n * @returns true if NIK-based NPWP, false otherwise\n *\n * @example\n * ```typescript\n * isNIKBasedNPWP('3201234567890003'); // true (16 digits, NIK-based)\n * isNIKBasedNPWP('012345678012345'); // true (16 digits, NIK-based)\n * isNIKBasedNPWP('091234567012000'); // false (15 digits, standard)\n * isNIKBasedNPWP('invalid');         // false\n * ```\n *\n * @public\n */\nexport function isNIKBasedNPWP(npwp: string): boolean {\n  if (!npwp || typeof npwp !== 'string') {\n    return false;\n  }\n\n  if (!validateNPWP(npwp)) {\n    return false;\n  }\n\n  const cleaned = npwp.replace(/\\D/g, '');\n\n  return cleaned.length === 16;\n}\n","/**\n * Error thrown when an invalid NPWP is provided to a function.\n * Extends native Error with a `code` property for programmatic error handling.\n *\n * @example\n * ```typescript\n * try {\n *   requireNPWP('invalid');\n * } catch (error) {\n *   if (error instanceof InvalidNPWPError) {\n *     console.log(error.code); // 'INVALID_NPWP'\n *   }\n * }\n * ```\n *\n * @public\n */\nexport class InvalidNPWPError extends Error {\n  readonly code = 'INVALID_NPWP' as const;\n\n  constructor(message: string = 'Invalid NPWP provided') {\n    super(message);\n    this.name = 'InvalidNPWPError';\n  }\n}\n"]}