{"version":3,"file":"index.mjs","sources":["../src/convert/bigintize.ts","../src/convert/comma.ts","../src/convert/multiReplace.ts","../src/convert/numberize.ts","../src/convert/percentize.ts","../src/convert/replaceExactMatch.ts","../src/convert/sliceBySize.ts","../src/convert/splitAndPad.ts","../src/convert/stringify.ts","../src/convert/toFullWidth.ts","../src/convert/toHalfWidth.ts","../src/is/isArray.ts","../src/is/isBoolean.ts","../src/is/isFunction.ts","../src/is/isInfinity.ts","../src/is/isMap.ts","../src/is/isNaN.ts","../src/is/isNull.ts","../src/is/isNumber.ts","../src/is/isObject.ts","../src/is/isSet.ts","../src/is/isString.ts","../src/is/isSymbol.ts","../src/is/isUndefined.ts","../src/misc/cutArray.ts","../src/misc/delay.ts","../src/misc/extractRootDomain.ts","../src/misc/LimitedArray.ts","../src/misc/randomString.ts","../src/misc/range.ts","../src/misc/removeDuplicates.ts","../src/misc/typeOf.ts"],"sourcesContent":["import { typeOf } from '..'\n\n/**\n * string や number を bigint に変換\n * Convert string, number, etc... to bigint\n *\n * @example\n * ```ts\n * bigintize('123') // BigInt(123)\n * bigintize(123) // BigInt(123)\n * bigintize('$1,000') // BigInt(1000)\n * bigintize(NaN) // throw error\n * bigintize('invalid value') // throw error\n * bigintize('invalid value', BitInt(1)) // BitInt(1)\n * ```\n * @param v 変換元の値 <br /> value to convert\n * @param d 変換に失敗した場合に返す値 <br /> value to return if conversion fails\n * @returns\n */\nexport function bigintize(v: unknown, d?: bigint): bigint {\n  try {\n    switch (typeOf(v)) {\n      case 'number':\n        return BigInt(v as number)\n      case 'string': {\n        const pd = (v as string).replace(/[\\\\¥$%, ]/g, '')\n        return BigInt(pd)\n      }\n      case 'bigint':\n        return v as bigint\n      default:\n        throw new Error('invalid value')\n    }\n  } catch (e) {\n    if (d === undefined) throw e\n    return d\n  }\n}\n","export function comma(num: number) {\n  const s = num.toString().split('.')\n  let ret = s[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,')\n  if (s.length > 1) ret += '.' + s[1]\n  return ret\n}\n","/**\n *\n * multi condition replace\n *\n * @example\n * ```\n * const inputString = \"Hello world, this is a test string.\";\n * const replacements: [RegExp, string][] = [\n *   [/Hello/g, \"Hi\"],\n *   [/\\btest\\b/g, \"example\"],\n *   [/string/g, \"text\"],\n * ];\n * const outputString = multiReplace(inputString, replacements);\n * console.log(outputString);\n * ```\n *\n * @param replacements\n * @returns\n */\n\nexport function multiReplace(inputString: string, replacements: [RegExp, string][]): string {\n  let resultString = inputString\n\n  replacements.forEach(([regex, replacement]) => {\n    resultString = resultString.replace(regex, replacement)\n  })\n\n  return resultString\n}\n","import { typeOf } from '..'\n\nconst MIN_NUM = BigInt(Number.MIN_SAFE_INTEGER)\nconst MAX_NUM = BigInt(Number.MAX_SAFE_INTEGER)\n\n/**\n * string や bitint などを number に変換する。\n * Convert string, bitint, etc... to number.\n *\n * @example\n * ```ts\n * numberize('123') // 123\n * numberize(BigInt(123)) // 123\n * numberize('$1,000') // 1000\n * numberize('invalid value') // NaN\n * numberize('invalid value', 1) // 1\n * ```\n * @param v 変換元の値 <br /> value to convert\n * @param d 変換に失敗した場合に返す値 <br /> value to return if conversion fails\n * @returns\n */\nexport const numberize = (v: unknown, d?: number): number => {\n  const def = d ?? Number.NaN\n  switch (typeOf(v)) {\n    case 'number':\n      return v as number\n    case 'nan':\n      return def\n    case 'string': {\n      const pd = (v as string).replace(/[\\\\¥$%, ]/g, '')\n      return pd === '' ? def : Number(pd)\n    }\n    case 'bigint':\n      if ((v as bigint) < MIN_NUM) return Number.MIN_SAFE_INTEGER\n      if ((v as bigint) > MAX_NUM) return Number.MAX_SAFE_INTEGER\n      try {\n        return parseInt((v as bigint).toString())\n      } catch (e) {\n        return def\n      }\n    default:\n      return def\n  }\n}\n","export function percentize(\n  value: number,\n  min: number,\n  max: number,\n  decimalPlaces: number = 2\n): string | undefined {\n  if (min >= max || value < min || value > max || decimalPlaces < 0) {\n    return undefined\n  }\n\n  const percent = ((value - min) / (max - min)) * 100\n  const formattedPercent = percent.toFixed(decimalPlaces) + '%'\n  return formattedPercent\n}\n","type ReplaceOptions = {\n  input: string\n  target: string\n  replacement: string\n}\n\nfunction escapeRegExp(str: string): string {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nexport function replaceExactMatch({ input, target, replacement }: ReplaceOptions): {\n  result: string\n  count: number\n} {\n  const regex = new RegExp(`\\\\b${escapeRegExp(target)}\\\\b`, 'gm')\n\n  const matches = input.match(regex)\n  const count = matches ? matches.length : 0\n\n  const result = input.replace(regex, replacement)\n\n  return { result, count }\n}\n","/**\n * 指定サイズで配列を切り分ける\n * Carve array with specified size\n *\n * @example\n * ```ts\n * const arr = [0, 1, 2, 3, 4, 5, 6]\n * sliceBySize(arr, 2) // [[0, 1], [2, 3], [4, 5], [6]]\n * ```\n * @param arr 変換元の配列 <br /> array to convert\n * @param size 切り分けサイズ <br /> size to carve\n * @returns\n */\nexport function sliceBySize<T>(arr: T[], size: number): T[][] {\n  return arr.flatMap((_, i, a) => (i % size ? [] : [a.slice(i, i + size)]))\n}\n","export enum SplitAndPadPosition {\n  Start = 'start',\n  End = 'end',\n}\n\nexport function splitAndPad(\n  input: string,\n  maxNum: number,\n  paddingChar: string = '',\n  pos: SplitAndPadPosition = SplitAndPadPosition.End\n): string[] {\n  const chunks: string[] = input.split('')\n  if (chunks.length >= maxNum) return chunks.slice(0, maxNum)\n\n  const paddingNum = maxNum - chunks.length\n\n  if (pos === SplitAndPadPosition.End) {\n    return chunks.concat(Array(paddingNum).fill(paddingChar))\n  } else {\n    return Array(paddingNum).fill(paddingChar).concat(chunks)\n  }\n}\n","/**\n * なにかを文字列化する(bigint supported JSON.stringify)\n * String something (bigint supported JSON.stringify)\n *\n * @example\n * ```ts\n * // print: {\"name\":\"haruhi\",\"num\":\"8\"}\n * stringify({ name: 'haruhi', num: BigInt(8) })\n * ```\n * @param obj 文字列化する値 <br /> value to stringify\n * @param replacer 置換関数 or 許可するキー名の配列 <br /> replace function or array of allowed key names\n * @param space JSON.stringifyのspace <br /> space of JSON.stringify\n * @returns\n */\nexport function stringify(\n  obj: any,\n  replacer?: (string | number)[] | null | undefined,\n  space?: string | number | undefined\n): string\n\nexport function stringify(\n  obj: any,\n  replacer?: ((key: string, value: any) => any) | undefined,\n  space?: string | number | undefined\n): string\n\nexport function stringify(\n  obj: any,\n  replacer?: ((key: string, value: any) => any) | ((string | number)[] | null) | undefined,\n  space?: string | number | undefined\n): string {\n  return JSON.stringify(obj, genReplacer(replacer), space)\n}\n\nfunction genReplacer(\n  replacer?: ((key: string, value: any) => any) | ((string | number)[] | null) | undefined\n) {\n  if (typeof replacer === 'function') {\n    return (key: string, value: any) => {\n      const replacedValue = replacer(key, value)\n      return defaultReplacer(key, replacedValue)\n    }\n  } else if (Array.isArray(replacer)) {\n    return (key: string, value: any) => {\n      if (key !== undefined && key !== '' && !replacer.includes(key)) {\n        return undefined\n      }\n      return defaultReplacer(key, value)\n    }\n  }\n\n  return defaultReplacer\n}\n\nfunction defaultReplacer(key: string, value: any) {\n  if (typeof value === 'bigint') {\n    return value.toString()\n  }\n  return value\n}\n","// 半角 to 全角\nexport function toFullWidth(value: string) {\n  value = value.replace(/[A-Za-z0-9]/g, function (s) {\n    return String.fromCharCode(s.charCodeAt(0) + 0xfee0)\n  })\n  return value\n}\n","//  全角 to 半角\nexport function toHalfWidth(value: string) {\n  value = value.replace(/[Ａ-Ｚａ-ｚ０-９]/g, function (s: string) {\n    return String.fromCharCode(s.charCodeAt(0) - 0xfee0)\n  })\n  return value\n}\n","import { typeOf } from '..'\n\nexport const isArray = (data: unknown): data is Array<any> => typeOf(data) === 'array'\n\nexport const isArrays = (data: unknown): data is Array<any>[] =>\n  isArray(data) && data.every(isArray)\n","import { isArray, typeOf } from '..'\n\nexport const isBoolean = (data: unknown): data is boolean => typeOf(data) === 'boolean'\n\nexport const isBooleans = (data: unknown): data is boolean[] =>\n  isArray(data) && data.every(isBoolean)\n","import { isArray, typeOf } from '..'\n\nexport const isFunction = (data: unknown): data is Function => typeOf(data) === 'function'\n\nexport const isFunctions = (data: unknown): data is Function[] =>\n  isArray(data) && data.every(isFunction)\n\nexport const isAsyncFunction = (data: unknown): data is Promise<any> =>\n  typeOf(data) === 'asyncfunction' || typeOf(data) === 'promise'\n\nexport const isAsyncFunctions = (data: unknown): data is Promise<any>[] =>\n  isArray(data) && data.every(isAsyncFunction)\n\nexport const isGeneratorFunction = (data: unknown): data is Generator =>\n  typeOf(data) === 'generatorfunction'\n\nexport const isGeneratorFunctions = (data: unknown): data is Generator[] =>\n  isArray(data) && data.every(isGeneratorFunction)\n","import { isArray, typeOf } from '..'\n\nexport const isInfinity = (data: unknown): data is number => typeOf(data) === 'infinity'\n\nexport const isInfinitys = (data: unknown): data is number[] =>\n  isArray(data) && data.every(isInfinity)\n","import { isArray, typeOf } from '..'\n\nexport const isMap = (data: unknown): data is Map<any, any> => typeOf(data) === 'map'\n\nexport const isMaps = (data: unknown): data is Map<any, any>[] => isArray(data) && data.every(isMap)\n","import { isArray, typeOf } from '..'\n\nexport const isNaN = (data: unknown): data is number => typeOf(data) === 'nan'\n\nexport const isNaNs = (data: unknown): data is number[] => isArray(data) && data.every(isNaN)\n","import { isArray, typeOf } from '..'\n\nexport const isNull = (data: unknown): data is null => typeOf(data) === 'null'\n\nexport const isNulls = (data: unknown): data is null[] => isArray(data) && data.every(isNull)\n","import { isArray, typeOf } from '..'\n\n/**\n * 数値かどうかを判定する\n * Check if data is a number\n * @param data Data to check\n * @returns True if data is a number\n */\nexport const isNumber = (data: unknown): data is number => typeOf(data) === 'number'\n\n/**\n * 数値かどうかを判定する(配列)\n * Check if data is a number[]\n * @param data Data to check\n * @returns True if data is a number[]\n */\nexport const isNumbers = (data: unknown): data is number[] => isArray(data) && data.every(isNumber)\n","import { isArray, typeOf } from '..'\n\nexport const isObject = (data: unknown): data is Object => typeOf(data) === 'object'\n\nexport const isObjects = (data: unknown): data is Object[] => isArray(data) && data.every(isObject)\n","import { isArray, typeOf } from '..'\n\nexport const isSet = (data: unknown): data is Set<any> => typeOf(data) === 'set'\n\nexport const isSets = (data: unknown): data is Set<any>[] => isArray(data) && data.every(isSet)\n","import { isArray, typeOf } from '..'\n\n/**\n * 文字列かどうかを判定する\n * Check if data is a string\n * @param data Data to check\n * @returns True if data is a string\n */\nexport const isString = (data: unknown): data is string => typeOf(data) === 'string'\n\n/**\n * 文字列かどうかを判定する(配列)\n * Check if data is a string[]\n * @param data Data to check\n * @returns True if data is a string[]\n */\nexport const isStrings = (data: unknown): data is string[] => isArray(data) && data.every(isString)\n","import { isArray, typeOf } from '..'\n\nexport const isSymbol = (data: unknown): data is Symbol => typeOf(data) === 'symbol'\n\nexport const isSymbols = (data: unknown): data is Symbol[] => isArray(data) && data.every(isSymbol)\n","import { isArray, typeOf } from '..'\n\nexport const isUndefined = (data: unknown): data is undefined => typeOf(data) === 'undefined'\n\nexport const isUndefineds = (data: unknown): data is undefined[] =>\n  isArray(data) && data.every(isUndefined)\n","type CutArrayInput<T> = {\n  array: T[]; \n  maxLength: number;\n};\n\nexport function cutArray<T>({ array, maxLength }: CutArrayInput<T>): T[] {\n  if (!Number.isInteger(maxLength) || maxLength < 0) {\n    throw new Error(\"maxLength must be a non-negative integer.\");\n  }\n\n  return array.length > maxLength ? array.slice(0, maxLength) : array;\n}\n","export const delay = (args?: { sec?: number; msec?: number }): Promise<number> => {\n  const { sec, msec } = args ?? { sec: 0, msec: 0 }\n  const ms = Math.max((sec ?? 0) * 1000 + (msec ?? 0), 0)\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      resolve(ms)\n    }, ms)\n  })\n}\n","import { isString } from '..'\n\nexport function extractRootDomain(url: string | URL): string {\n  if (isString(url)) url = new URL(url)\n\n  const splitted = url.hostname.split('.')\n  const len = splitted.length - 1\n\n  if (len === 0) return splitted[0]\n\n  const suffix1 = splitted[len - 1]\n  const suffix2 = splitted[len]\n\n  const isSecondLevel = len >= 2 && (suffix1 + suffix2).length <= 5\n  return (isSecondLevel ? splitted[len - 2] + '.' : '') + suffix1 + '.' + suffix2\n}\n","export class LimitedArray<T> {\n  private readonly maxLength: number\n  private readonly items: T[] = []\n\n  constructor(maxLength: number) {\n    this.maxLength = maxLength\n  }\n\n  get length(): number {\n    return this.items.length\n  }\n\n  includes(item: T): boolean {\n    return this.items.includes(item)\n  }\n\n  indexOf(item: T): number {\n    return this.items.indexOf(item)\n  }\n\n  insert(index: number, item: T): void {\n    this.items.splice(index, 0, item)\n    if (this.items.length > this.maxLength) {\n      this.items.shift()\n    }\n  }\n\n  push(item: T): void {\n    this.items.push(item)\n\n    if (this.items.length > this.maxLength) {\n      this.items.shift()\n    }\n  }\n\n  shift(): T | undefined {\n    return this.items.shift()\n  }\n\n  pop(): T | undefined {\n    return this.items.pop()\n  }\n\n  unshift(item: T): void {\n    this.items.unshift(item)\n    if (this.items.length > this.maxLength) {\n      this.items.pop()\n    }\n  }\n\n  splice(start: number, deleteCount: number, ...items: T[]): T[] {\n    const deleted = this.items.splice(start, deleteCount, ...items)\n    if (this.items.length > this.maxLength) {\n      this.items.splice(0, this.items.length - this.maxLength)\n    }\n    return deleted\n  }\n\n  getItems(): T[] {\n    return this.items\n  }\n}\n","interface Input {\n  length: number\n  charactorSet: string\n}\n\nexport function randomString({ length, charactorSet }: Input) {\n  if (!charactorSet || charactorSet.length === 0) throw new Error('charactorSet is empty')\n  let randstr = ''\n\n  for (let i = 0; i < length; i++) {\n    randstr = `${randstr}${charactorSet.charAt(Math.floor(Math.random() * charactorSet.length))}`\n  }\n\n  return randstr\n}\n","/**\n * 連続した数値の配列を生成する\n * python like range function\n *\n * @example\n * ```ts\n * // prints [0, 1, 2, 3, 4]\n * range(5)\n *\n * // prints [0, 1, 2, 3, 4]\n * range(0, 5)\n *\n * // prints [4, 5, 6]\n * range(4, 7)\n *\n * // prints [0, 1, 2, 3, 4]\n * range(0, 5, 1)\n *\n * // prints [0, 2, 4, 6, 8]\n * range(0, 10, 2)\n * ```\n *\n * @param start 開始値, この値だけを指定した場合は0から開始する <br /> Start value, if only this value is specified, it starts from 0\n * @param end 終了値, この値-1まで生成する <br /> End value, generate up to this value-1\n * @param step ステップ数, この値ずつ増加する <br /> Step number, increase by this value\n * @returns 数値の入った配列 <br /> Array of numbers\n */\nexport function range(start: number, end?: number, step: number = 1) {\n  const output = []\n  if (end === undefined) {\n    end = start\n    start = 0\n  }\n  for (let i = start; i < end; i += step) {\n    output.push(i)\n  }\n  return output\n}\n","export function removeDuplicates<T, K extends keyof T>(arr: T[], key: K): T[] {\n  const seen = new Set<T[K]>()\n  const result: T[] = []\n\n  for (const item of arr) {\n    const keyValue = item[key]\n    if (!seen.has(keyValue)) {\n      seen.add(keyValue)\n      result.push(item)\n    }\n  }\n\n  return result\n}\n","export function typeOf(v: any) {\n  return v != v\n    ? 'nan'\n    : v === Infinity || v === -Infinity\n    ? 'infinity'\n    : Object.prototype.toString.call(v).slice(8, -1).toLowerCase()\n}\n"],"names":["bigintize","v","d","typeOf","pd","e","comma","num","s","ret","multiReplace","inputString","replacements","resultString","regex","replacement","MIN_NUM","MAX_NUM","numberize","def","percentize","value","min","max","decimalPlaces","escapeRegExp","str","replaceExactMatch","input","target","matches","count","sliceBySize","arr","size","_","i","a","SplitAndPadPosition","splitAndPad","maxNum","paddingChar","pos","chunks","paddingNum","stringify","obj","replacer","space","genReplacer","key","replacedValue","defaultReplacer","toFullWidth","toHalfWidth","isArray","data","isArrays","isBoolean","isBooleans","isFunction","isFunctions","isAsyncFunction","isAsyncFunctions","isGeneratorFunction","isGeneratorFunctions","isInfinity","isInfinitys","isMap","isMaps","isNaN","isNaNs","isNull","isNulls","isNumber","isNumbers","isObject","isObjects","isSet","isSets","isString","isStrings","isSymbol","isSymbols","isUndefined","isUndefineds","cutArray","array","maxLength","delay","args","sec","msec","ms","resolve","extractRootDomain","url","splitted","len","suffix1","suffix2","LimitedArray","__publicField","item","index","start","deleteCount","items","deleted","randomString","length","charactorSet","randstr","range","end","step","output","removeDuplicates","seen","result","keyValue"],"mappings":"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"}