{"version":3,"file":"parse-BFwJv0FB.mjs","names":[],"sources":["../src/is/is.ts","../src/core/array.ts","../src/core/createPromise.ts","../src/core/misc.ts","../src/core/sleep.ts","../src/utils/makePair.ts","../src/utils/platform.ts","../src/utils/toValue.ts","../src/json/parse.ts"],"sourcesContent":["import type { Ctor, Fn, PrimitiveType } from '../types'\n\nconst CLS_CHECK_STR = 'class '\n\n/**\n * check target if is a Class or not.\n *\n * @param target\n * @returns\n */\nexport function isCls(target: unknown): target is Ctor {\n  return String(target).slice(0, CLS_CHECK_STR.length) === CLS_CHECK_STR\n}\n\n/**\n * check target if is a number or not\n * @param target\n * @returns\n */\nexport function isNumber(target: unknown): target is number {\n  return typeof target === 'number'\n}\n\n/**\n * check {@link target} if is a symbol or not\n */\nexport function isSymbol(target: unknown): target is symbol {\n  return typeof target === 'symbol'\n}\n\n/**\n * check target if is a string or not\n * @param target\n * @returns\n */\nexport function isString(target: unknown): target is string {\n  return typeof target === 'string'\n}\n\n/**\n * if target is a boolean, or not\n * @param target\n * @returns\n */\nexport function isBoolean(target: unknown): target is boolean {\n  return typeof target === 'boolean'\n}\n\n/**\n * return true when {@link target} is a function, but not a class.\n */\nexport function isFn(target: unknown): target is Fn {\n  return typeof target === 'function' && !isCls(target)\n}\n\n/**\n * if target is an array, or not\n * @param target\n * @returns\n */\nexport function isArray<T = unknown>(target: unknown): target is Array<T> {\n  return Array.isArray(target)\n}\n\n/**\n * if target is a object and not null\n * @param target\n * @returns\n */\nexport function isObject(target: unknown): target is Record<string, unknown> {\n  return target !== null && typeof target === 'object'\n}\n\n/**\n * - if target is array or Set or Map, check if it's size is 0\n * - if target is object, check if it has any properties\n * - if target is string, check if it's length is 0\n * - if target is null or undefined, return true\n * - other wise, return false\n * @param target\n */\n\nexport function isEmpty(target: number | bigint | boolean | Fn): false\nexport function isEmpty(target: unknown): boolean\nexport function isEmpty(target: unknown): boolean {\n  if (isNullish(target)) {\n    return true\n  }\n\n  if (typeof target === 'string') {\n    return target.length === 0\n  }\n\n  if (target instanceof Set || target instanceof Map) {\n    return target.size === 0\n  }\n\n  if (isArray(target)) {\n    return target.length === 0\n  }\n\n  if (isPromise(target)) {\n    return false\n  }\n\n  if (isObject(target) && Object.keys(target).length === 0) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * if target is an object and iterable\n *\n * @example\n * ```ts\n * iterable([]) // => true\n * iterable('23') // => false\n * ```\n *\n * @param target\n * @returns\n */\nexport function isIterable<V>(target: unknown): target is Iterable<V> {\n  return isObject(target) && Symbol.iterator in target\n}\n\n/**\n * if target is an object and async iterable\n *\n * @example\n * ```ts\n * const asyncIter = async function* () {\n *  yield 1\n * }\n * iterable(asyncIter) // => true\n * iterable([]) // => false\n * iterable('23') // => false\n * ```\n *\n * @param target\n * @returns\n */\nexport function isAsyncIterable<V>(target: unknown): target is AsyncIterable<V> {\n  return isObject(target) && Symbol.asyncIterator in target\n}\n\n/**\n * if target is null or undefined\n * @param target\n * @returns\n */\nexport function isNullish(target: unknown): target is null | undefined {\n  return target == null\n}\n\n/**\n * if target is a primitive value\n * @param target\n * @returns\n */\nexport function isPrimitive(target: unknown): target is PrimitiveType {\n  return !isObject(target) && !isFn(target) && !isCls(target)\n}\n\n/**\n * if target is a promise\n *\n * @param target\n * @returns\n */\nexport function isPromise<T = unknown>(target: unknown): target is Promise<T> {\n  return target instanceof Promise\n}\n\n/**\n * if target is a promise like object\n *\n * @param target\n * @returns\n */\nexport function isPromiseLike<T = unknown>(target: unknown): target is PromiseLike<T> {\n  return isObject(target) && 'then' in target\n}\n","import { isFn } from '../is'\nimport type { Arrayable } from '../types'\n\n/**\n * Ensure to return a list of element T.\n *\n * @param arr\n * @returns\n */\nexport const ensureArray = <T>(arr?: Arrayable<T>): T[] => {\n  if (arr == null) {\n    return []\n  }\n\n  return Array.isArray(arr) ? arr : [arr]\n}\n\nexport const remove = <T>(arr: T[], predicate: T | ((item: T, index: number) => boolean)): T[] => {\n  const removed: T[] = []\n\n  if (isFn(predicate)) {\n    for (let idx = 0; idx < arr.length; idx++) {\n      const shouldRemove = predicate(arr[idx]!, idx)\n\n      if (shouldRemove) {\n        removed.push(...arr.splice(idx, 1))\n        idx--\n      }\n    }\n  } else {\n    const idx = arr.indexOf(predicate)\n\n    if (idx >= 0) {\n      removed.push(...arr.splice(idx, 1))\n    }\n  }\n\n  return removed\n}\n","export function createPromise<T>(): PromiseWithResolvers<T> {\n  if (Promise.withResolvers) {\n    return Promise.withResolvers()\n  }\n\n  type Resolve = PromiseWithResolvers<T>['resolve']\n  type Reject = PromiseWithResolvers<T>['reject']\n\n  let _resolve: Resolve\n  let _reject: Reject\n\n  const _promise = new Promise<T>((resolve, reject) => {\n    _resolve = resolve\n\n    _reject = reject\n  })\n\n  return {\n    promise: _promise,\n    // biome-ignore lint/style/noNonNullAssertion: has set\n    resolve: _resolve!,\n    // biome-ignore lint/style/noNonNullAssertion: has set\n    reject: _reject!,\n  }\n}\n","/* c8 ignore next */\nexport { nanoid } from 'nanoid'\n\n/* c8 ignore next */\nexport function noop() {}\n\nexport function has<T extends {}>(o: T, name: string | symbol | number) {\n  return Object.hasOwn(o, name)\n}\n","import { createPromise } from './createPromise'\n\nexport type SleepResult = Promise<void> & { cancel: () => void }\n\n/**\n * promise timeout, support cancel\n *\n * @param timeout\n * @returns\n */\nexport function sleep(timeout = 0): SleepResult {\n  // biome-ignore lint/style/useConst: false positive\n  let handler: NodeJS.Timeout | number | undefined\n\n  const promise = createPromise<void>()\n\n  const ins = promise.promise as SleepResult\n\n  ins.cancel = () => {\n    clearTimeout(handler)\n    promise.reject('canceled')\n  }\n\n  handler = setTimeout(promise.resolve, timeout)\n\n  return ins\n}\n","import { noop } from '../core'\nimport type { Fn, Optional } from '../types'\n\nexport interface PairConfig<T extends Fn> {\n  __default?: T\n  [key: string]: Optional<T>\n}\n\n/**\n * eg.\n *\n * ```ts\n * const handler = makePair({\n *  __default() {\n *    return 'cool'\n *  },\n *  100() {\n *    return 100\n *  },\n *  xxx() {\n *    return 200\n *  },\n * })\n *\n * expect(handler('100')).toEqual(100)\n * expect(handler('xxx')).toEqual(200)\n * expect(handler('hhhh')).toEqual('cool')\n * ```\n * @param config\n * @returns\n */\nexport function makePair<T extends Fn>(config: PairConfig<T>) {\n  type In = Parameters<T>\n  type Out = ReturnType<T>\n\n  const handler = (type: string, ...args: In): Optional<Out> => {\n    const fn = config[type] || config.__default || noop\n\n    return fn(...args) as Out\n  }\n\n  return handler\n}\n\nexport interface PairDictConfig<T> {\n  __default?: T\n  [key: string]: Optional<T>\n}\n\n/**\n * eg.\n *\n * ```ts\n * const handler = makeDictPair({\n *  __default: 'cool',\n *  100: 100,\n *  xxx: 200,\n * })\n *\n * expect(handler('100')).toEqual(100)\n * expect(handler('xxx')).toEqual(200)\n * expect(handler('200')).toEqual('cool')\n * ```\n * @param config\n * @returns\n */\nexport function makeDictPair<T>(config: PairDictConfig<T>) {\n  const handler = (type: string): Optional<T> => {\n    return config[type] || config.__default\n  }\n\n  return handler\n}\n","function isWebPlatform() {\n  return !!globalThis.window && !!globalThis.document\n}\n\nexport const isWeb = /*@__PURE__*/ isWebPlatform()\n\nfunction isNodePlatform() {\n  return !!globalThis.process?.versions?.node\n}\n\nexport const isNode = /*@__PURE__*/ isNodePlatform()\n","import { isFn } from '../is'\nimport type { Factory } from '../types'\n\nexport function toValue<T>(valueOrFn: Factory<T>): T {\n  return isFn(valueOrFn) ? valueOrFn() : valueOrFn\n}\n","export type TransformJsonData<T> = (data?: unknown) => T\n\nexport interface ParesJsonOption<T> {\n  transform?: TransformJsonData<T>\n}\n\nexport function parseJson<T>(jsonContent: string, opt: Required<ParesJsonOption<T>>): T\nexport function parseJson<T>(jsonContent: string, opt?: ParesJsonOption<T>): T | undefined\n/**\n * @returns Undefined if parse failed\n */\nexport function parseJson<T>(jsonContent: string, opt?: ParesJsonOption<T>): T | undefined {\n  try {\n    const result = JSON.parse(jsonContent)\n    return opt?.transform ? opt.transform(result) : result\n  } catch (_error) {\n    // ignore error\n    return opt?.transform?.(undefined)\n  }\n}\n"],"mappings":"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"}