{"version":3,"file":"index.cjs","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","_","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","i","removeDuplicates","seen","result","keyValue"],"mappings":"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"}