{"version":3,"sources":["jsdelivr-header.js","/npm/idn-area-data@4.0.1/src/index.ts","/npm/idn-area-data@4.0.1/src/csv-parser.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNS,QAAS,YAAe,cACxB,kBAAqB,aCDrB,qBAAwB,YAC1B,SAAU,YASjB,IAAqB,UAArB,MAAqB,EACnB,cAMA,WAAA,CAAY,GACV,KAAK,cAAgB,CACvB,CAQA,kBAAa,CAAmB,EAAc,GAC5C,MAAM,EAAW,GAAQ,SACpB,EAAO,SACR,OACE,EAAa,iBAAiB,EAAM,GAE1C,OAAO,IAAI,SAA6B,CAAC,EAAS,KAChD,KAAK,MAAS,EAAY,IACrB,EACH,SAAU,EACV,MAAO,GACR,GAEL,CAQA,WAAM,CAAmB,EAAc,GACrC,OAAO,EAAU,MAAS,EAAM,IAC3B,KAAK,iBACL,GAEP,GD4CF,SAAS,eACP,EAIA,EACA,GAEA,IAAI,EAAoB,EAGxB,IAAK,OAAO,OAAO,EAAY,QAAU,CAAC,EAAG,GAAS,CACpD,MAAM,EAAgB,OAAO,QAAQ,EAAY,SAAW,CAAC,GAG7D,UAAY,EAAW,KAAc,EACnC,GAAI,IAAc,EAAQ,CACxB,EAAY,EACZ,KACF,CAEJ,CAEA,MAAM,EAAoB,EAAY,SAAS,GAC/C,OAAO,EAAoB,EAAkB,GAAS,CACxD,CAEA,eAAsB,QACpB,EACA,GAEA,MAAM,EAAW,QACf,QAAQ,0BAA0B,MAClC,WAAW,SAEP,EAAc,GAAS,UAkB7B,aAhBqB,UAAU,MAAS,EAAU,CAChD,QAAQ,KACJ,GAAe,CACjB,eAAA,CAAgB,GACd,MAAM,EAAY,EAAY,UAAU,GACxC,OAAO,GAAa,CACtB,EACA,UAAA,CAAU,EAAO,IACQ,iBAAZ,EACF,eAAe,EAAO,EAAS,GAEjC,MAKC,IAChB,CAEO,SAAS,eACd,OAAO,QAAkB,YAC3B,CAEO,SAAS,aACd,GAEA,OAAO,QAAiD,YAAa,IAChE,EACH,UAAW,GAAS,UAChB,CACE,QAAS,CACP,cAAe,sBAGnB,GAER,CAEO,SAAS,aACd,GAEA,OAAO,QAAmD,YAAa,IAClE,EACH,UAAW,GAAS,UAChB,CACE,QAAS,CACP,aAAc,qBAGlB,GAER,CAEO,SAAS,WACd,GAEA,OAAO,QAA+C,UAAW,IAC5D,EACH,UAAW,GAAS,UAChB,CACE,QAAS,CACP,mBAAoB,mBACpB,aAAc,cACd,aAAc,eAEhB,OAAQ,CACN,aAAe,KAAY,OAAO,SAAS,EAAO,IAClD,mBAAqB,KAAY,OAAO,SAAS,EAAO,IACxD,aAAe,GAAqB,KAAV,EAAe,KAAO,SAGpD,GAER,CAEO,SAAS,YACd,GAEA,OAAO,QAAiD,WAAY,IAC/D,EACH,UAAW,GAAS,UAChB,CACE,QAAS,CACP,cAAe,sBAGnB,GAER,Q","file":"/npm/idn-area-data@4.0.1/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/idn-area-data@4.0.1/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport CsvParser from './csv-parser.js';\n\ntype ToCsv<T, RemovedKeys extends string, NewKeys extends string> = {\n  [K in keyof T as Exclude<K, RemovedKeys> | NewKeys]: string;\n};\n\nexport type Province = {\n  code: string;\n  name: string;\n};\n\nexport type Regency = {\n  code: string;\n  name: string;\n  provinceCode: string;\n};\n\nexport type RegencyCsv = ToCsv<Regency, 'provinceCode', 'province_code'>;\n\nexport type District = {\n  code: string;\n  name: string;\n  regencyCode: string;\n};\n\nexport type DistrictCsv = ToCsv<District, 'regencyCode', 'regency_code'>;\n\nexport type Village = {\n  code: string;\n  districtCode: string;\n  name: string;\n};\n\nexport type VillageCsv = ToCsv<Village, 'districtCode', 'district_code'>;\n\nexport type Island = {\n  code: string;\n  coordinate: string;\n  isOutermostSmall: boolean;\n  isPopulated: boolean;\n  name: string;\n  regencyCode: string | null;\n};\n\nexport type IslandCsv = ToCsv<\n  Island,\n  'isOutermostSmall' | 'isPopulated' | 'regencyCode',\n  'is_outermost_small' | 'is_populated' | 'regency_code'\n>;\n\nexport type Areas =\n  | 'provinces'\n  | 'regencies'\n  | 'districts'\n  | 'villages'\n  | 'islands';\n\nexport type AreaHeaders<A extends Areas> = A extends 'provinces'\n  ? keyof Province\n  : A extends 'regencies'\n    ? keyof RegencyCsv\n    : A extends 'districts'\n      ? keyof DistrictCsv\n      : A extends 'villages'\n        ? keyof VillageCsv\n        : A extends 'islands'\n          ? keyof IslandCsv\n          : never;\n\nexport type HeaderTransformer = {\n  [A in Areas]?: {\n    [H in AreaHeaders<A>]?: string;\n  };\n};\n\nexport type ValueTransformer = {\n  [A in Areas]?: {\n    [H in AreaHeaders<A>]?: (value: string) => unknown;\n  };\n};\n\nexport type Transformer<A extends Areas> = {\n  headers?: HeaderTransformer[A];\n  values?: ValueTransformer[A];\n};\n\nexport type BaseOptions<A extends Areas, Tr = Transformer<A>> = {\n  transform?: Tr;\n};\n\nexport type Options<A extends Areas, Tr extends boolean = false> = BaseOptions<\n  A,\n  Tr\n>;\n\nfunction transformValue<A extends Areas>(\n  value: string,\n  /**\n   * The header (old or new).\n   */\n  header: string,\n  transformer: Transformer<A>,\n) {\n  let headerKey: string = header;\n\n  // Check if there is a transformation function for the header\n  if (!Object.hasOwn(transformer.values ?? {}, header)) {\n    const headerEntries = Object.entries(transformer.headers ?? {});\n\n    // If there's no transformation function, check if `tHeader` is the new header name\n    for (const [oldHeader, newHeader] of headerEntries) {\n      if (newHeader === header) {\n        headerKey = oldHeader;\n        break;\n      }\n    }\n  }\n\n  const transformFunction = transformer.values?.[headerKey as AreaHeaders<A>];\n  return transformFunction ? transformFunction(value) : value;\n}\n\nexport async function getData<T, A extends Areas = Areas>(\n  area: A,\n  options?: BaseOptions<A>,\n) {\n  const filePath = resolve(\n    dirname(fileURLToPath(import.meta.url)),\n    `../data/${area}.csv`,\n  );\n  const transformer = options?.transform;\n\n  const result = await CsvParser.parse<T>(filePath, {\n    header: true,\n    ...(transformer && {\n      transformHeader(header) {\n        const newHeader = transformer.headers?.[header as AreaHeaders<A>];\n        return newHeader ?? header;\n      },\n      transform(value, tHeader) {\n        if (typeof tHeader === 'string') {\n          return transformValue(value, tHeader, transformer);\n        }\n        return value;\n      },\n    }),\n  });\n\n  return result.data;\n}\n\nexport function getProvinces() {\n  return getData<Province>('provinces');\n}\n\nexport function getRegencies<Tr extends boolean = false>(\n  options?: Options<'regencies', Tr>,\n) {\n  return getData<Tr extends false ? RegencyCsv : Regency>('regencies', {\n    ...options,\n    transform: options?.transform\n      ? {\n          headers: {\n            province_code: 'provinceCode',\n          },\n        }\n      : undefined,\n  });\n}\n\nexport function getDistricts<Tr extends boolean = false>(\n  options?: Options<'districts', Tr>,\n) {\n  return getData<Tr extends false ? DistrictCsv : District>('districts', {\n    ...options,\n    transform: options?.transform\n      ? {\n          headers: {\n            regency_code: 'regencyCode',\n          },\n        }\n      : undefined,\n  });\n}\n\nexport function getIslands<Tr extends boolean = false>(\n  options?: Options<'islands', Tr>,\n) {\n  return getData<Tr extends false ? IslandCsv : Island>('islands', {\n    ...options,\n    transform: options?.transform\n      ? {\n          headers: {\n            is_outermost_small: 'isOutermostSmall',\n            is_populated: 'isPopulated',\n            regency_code: 'regencyCode',\n          },\n          values: {\n            is_populated: (value) => !!Number.parseInt(value, 10),\n            is_outermost_small: (value) => !!Number.parseInt(value, 10),\n            regency_code: (value) => (value === '' ? null : value),\n          },\n        }\n      : undefined,\n  });\n}\n\nexport function getVillages<Tr extends boolean = false>(\n  options?: Options<'villages', Tr>,\n) {\n  return getData<Tr extends false ? VillageCsv : Village>('villages', {\n    ...options,\n    transform: options?.transform\n      ? {\n          headers: {\n            district_code: 'districtCode',\n          },\n        }\n      : undefined,\n  });\n}\n","import { createReadStream } from 'node:fs';\nimport Papa from 'papaparse';\n\nexport type ParserConfig = Omit<\n  Papa.ParseLocalConfig,\n  'complete' | 'error' | 'transform'\n> & {\n  transform?(value: string, field: string | number): unknown;\n};\n\nexport default class CsvParser {\n  defaultConfig?: ParserConfig;\n\n  /**\n   * Create a new instance of CsvHelper.\n   * @param defaultConfig The default options\n   */\n  constructor(defaultConfig?: ParserConfig) {\n    this.defaultConfig = defaultConfig;\n  }\n\n  /**\n   * Parse CSV file asynchronously.\n   *\n   * @param path Path to the CSV file.\n   * @param config The configuration for the parser.\n   */\n  static async parse<T = unknown>(path: string, config?: ParserConfig) {\n    const encoding = config?.encoding\n      ? (config.encoding as BufferEncoding)\n      : 'utf8';\n    const sourceFile = createReadStream(path, encoding);\n\n    return new Promise<Papa.ParseResult<T>>((resolve, reject) => {\n      Papa.parse<T>(sourceFile, {\n        ...config,\n        complete: resolve,\n        error: reject,\n      });\n    });\n  }\n\n  /**\n   * Parse CSV file asynchronously.\n   *\n   * @param path Path to the CSV file.\n   * @param config The configuration for the parser.\n   */\n  async parse<T = unknown>(path: string, config?: ParserConfig) {\n    return CsvParser.parse<T>(path, {\n      ...this.defaultConfig,\n      ...config,\n    } as ParserConfig);\n  }\n}\n"]}