{"version":3,"file":"index.mjs","names":["#ctorMap","#listeners","#events","#listeners"],"sources":["../src/algorithm/compress.ts","../src/algorithm/encoding.ts","../src/algorithm/tree.ts","../src/dep-injection/container.ts","../src/events/EventEmitter.ts","../src/events/SimpleEventEmitter.ts","../src/fp/chain.ts","../src/fp/compose.ts","../src/logger/createLogger.ts","../src/math/number.ts","../src/math/sum.ts","../src/migration/core.ts","../src/options/index.ts","../src/pool/createPool.ts","../src/print/table.ts","../src/rpc/adaptor/messageChannel.ts","../src/rpc/adaptor/worker.ts","../src/rpc/types.ts","../src/rpc/utils.ts","../src/rpc/core.ts","../src/sandbox/eval.ts","../src/string/style.ts","../src/url/utils.ts"],"sourcesContent":["import { isWeb } from '../utils'\n\nconst encoder = /*@__PURE__*/ new TextEncoder()\nconst decoder = /*@__PURE__*/ new TextDecoder()\n\n/**\n * Use [fflate](https://github.com/101arrowz/fflate/) to compress text\n *\n * @param text\n * @returns\n */\nexport async function compressText(text: string): Promise<string> {\n  const buffer = encoder.encode(text)\n\n  const compressed = (await import('fflate')).zlibSync(buffer)\n\n  const base64 = isWeb\n    ? globalThis.btoa(String.fromCharCode(...compressed))\n    : Buffer.from(compressed).toString('base64')\n\n  return base64\n}\n\n/**\n * Use [fflate](https://github.com/101arrowz/fflate/) to decompress text\n *\n * @param compressedText\n * @returns\n */\nexport async function decompressText(compressedText: string): Promise<string> {\n  const buffer = isWeb ? base64ToUint8(compressedText) : Buffer.from(compressedText, 'base64')\n\n  const restored = (await import('fflate')).unzlibSync(buffer)\n\n  return decoder.decode(restored)\n}\n\nfunction base64ToUint8(b64: string) {\n  const binaryString = globalThis.atob(b64)\n\n  const uint8Array = new Uint8Array(binaryString.length)\n\n  for (let i = 0; i < binaryString.length; i++) {\n    uint8Array[i] = binaryString.charCodeAt(i)\n  }\n\n  return uint8Array\n}\n","import { isNode } from '../utils'\n\nexport function jsonToBase64(data: unknown) {\n  const s = JSON.stringify(data)\n  return isNode ? Buffer.from(s).toString('base64') : globalThis.window.btoa(s)\n}\n\nexport function base64ToJson(data: string) {\n  const s = isNode ? Buffer.from(data, 'base64').toString('utf-8') : globalThis.window.atob(data)\n  return JSON.parse(s)\n}\n","import { ensureArray } from '../core'\nimport { isIterable } from '../is'\nimport type { Arrayable } from '../types'\n\n// biome-ignore lint/suspicious/noConfusingVoidType: on purpose\ntype TreeVisitCallback<T> = (node: T, parentNode?: T) => void | boolean\n\nfunction _traverseTree<T extends {}, Key extends keyof T>(\n  nodes: T | Iterable<T>,\n  /**\n   * @returns return true to stop\n   */\n  cb: TreeVisitCallback<T>,\n  childrenKey: Key,\n  parent?: T,\n): boolean {\n  const _nodes = isIterable(nodes) ? nodes : [nodes]\n\n  for (const node of _nodes) {\n    if (cb(node, parent)) {\n      return true\n    }\n\n    const children = node[childrenKey]\n\n    if (!isIterable(children)) {\n      continue\n    }\n\n    if (_traverseTree(children as T[], cb, childrenKey, node)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n *\n * DFS (Deep-first search)\n *\n * @param nodes\n * @param cb return true to stop\n * @param childrenKey default is `'children'`\n */\nexport function traverse<T extends {}, Key extends keyof T>(\n  nodes: Arrayable<T>,\n  /**\n   * @returns return true to stop\n   */\n  cb: TreeVisitCallback<T>,\n  childrenKey?: Key,\n) {\n  const _childrenKey = childrenKey ?? ('children' as Key)\n\n  _traverseTree(nodes, cb, _childrenKey)\n}\n\n/**\n *\n * @param childrenKey default is `'children'`\n */\nexport function findNodeInTree<T extends {}, Key extends keyof T>(\n  nodes: Arrayable<T>,\n  predicate: TreeVisitCallback<T>,\n  childrenKey?: Key,\n) {\n  let resultNode: T | undefined\n\n  const _childrenKey = childrenKey ?? ('children' as Key)\n\n  _traverseTree(\n    nodes,\n    (node, parentNode) => {\n      if (predicate(node, parentNode)) {\n        resultNode = node\n        return true\n      }\n    },\n    _childrenKey,\n  )\n\n  return resultNode\n}\n\nfunction _filterTreeNodes<T extends {}, Key extends keyof T>(\n  nodes: Arrayable<T>,\n  /**\n   * @returns return true to stop\n   */\n  predicate: TreeVisitCallback<T>,\n  childrenKey: Key,\n  parent?: T,\n): T[] {\n  const nodesArr = ensureArray(nodes)\n\n  const newTree: T[] = []\n\n  for (const node of nodesArr) {\n    const _node = { ...node }\n\n    const children = _filterTreeNodes(_node[childrenKey] as T[], predicate, childrenKey, _node)\n\n    // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n    _node[childrenKey] = children as any\n\n    const shouldInclude = predicate(_node, parent)\n\n    if (shouldInclude || (_node[childrenKey] as T[]).length) {\n      newTree.push(_node)\n    }\n  }\n\n  return newTree\n}\n\nexport function filterTreeNodes<T extends {}, Key extends keyof T>(\n  nodes: Arrayable<T>,\n  predicate: TreeVisitCallback<T>,\n  childrenKey?: Key,\n): T[] {\n  const _childrenKey = childrenKey ?? ('children' as Key)\n\n  return _filterTreeNodes(nodes, predicate, _childrenKey)\n}\n","import { isCls, isFn } from '../is'\n\nexport interface BindConfig {\n  singleton?: boolean\n}\n\ntype MaybeConstructor<T> = (new () => T) | (() => T) | T\n\ninterface CtorConfig<T = unknown> {\n  ctor: MaybeConstructor<T>\n\n  config?: BindConfig\n\n  /**\n   * Singleton instance\n   */\n  instance?: T\n\n  // biome-ignore lint/suspicious/noExplicitAny: any object\n  targetMap?: WeakMap<any, T>\n}\n\nexport class Container<CtorMap extends {}> {\n  #ctorMap = new Map<keyof CtorMap, CtorConfig>()\n\n  bind<K extends keyof CtorMap>(key: K, ctor: MaybeConstructor<CtorMap[K]>, config?: BindConfig) {\n    if (this.#ctorMap.has(key)) {\n      throw new Error(`Key ${String(key)} has set!`)\n    }\n\n    this.#ctorMap.set(key, { ctor, config })\n  }\n\n  get<K extends keyof CtorMap>(key: K, opt?: { target?: unknown }): CtorMap[K] {\n    const conf = this.#ctorMap.get(key) as CtorConfig<CtorMap[K]>\n    if (!conf) {\n      throw new Error(`Key ${String(key)} is not binding.`)\n    }\n\n    if (conf.config?.singleton) {\n      if (!conf.instance) {\n        conf.instance = instantiation(conf.ctor)\n      }\n\n      return conf.instance\n    }\n\n    if (opt?.target) {\n      if (!conf.targetMap) {\n        conf.targetMap = new WeakMap()\n      }\n\n      if (!conf.targetMap.has(opt.target)) {\n        const _instance = instantiation(conf.ctor)\n        conf.targetMap.set(opt.target, _instance)\n      }\n\n      // biome-ignore lint/style/noNonNullAssertion: set before\n      return conf.targetMap.get(opt.target)!\n    }\n\n    return instantiation(conf.ctor)\n  }\n\n  /**\n   * Only support standard decorator https://github.com/tc39/proposal-decorators#class-fields\n   */\n  inject<K extends keyof CtorMap>(key: K) {\n    type IValueType = CtorMap[K]\n\n    return (_: unknown, _ctx: ClassFieldDecoratorContext<unknown, IValueType>) => {\n      return (_initialValue: unknown) => this.get(key)\n    }\n  }\n\n  /**\n   * Only support standard decorator https://github.com/tc39/proposal-decorators#class-fields\n   */\n  lazyInject<K extends keyof CtorMap>(key: K) {\n    type IValueType = CtorMap[K]\n    return (_: unknown, ctx: ClassFieldDecoratorContext<unknown, IValueType>) => {\n      const DI = this\n\n      ctx.addInitializer(function (this: unknown) {\n        Object.defineProperty(this, ctx.name, {\n          get() {\n            return DI.get(key)\n          },\n        })\n      })\n    }\n  }\n\n  clear<K extends keyof CtorMap>(key?: K) {\n    if (key != null) {\n      this.#ctorMap.delete(key)\n    } else {\n      this.#ctorMap.clear()\n    }\n  }\n}\n\nfunction instantiation<T>(Ctor: MaybeConstructor<T>): T {\n  if (isCls(Ctor)) {\n    return new Ctor()\n  }\n\n  if (isFn(Ctor)) {\n    return Ctor()\n  }\n\n  return Ctor\n}\n","import type { Listener } from './types'\n\ntype EventListenersMap<R extends Record<string, unknown[]>> = {\n  [K in keyof R]?: Map<Listener<R[K]>, number>\n}\n\nenum Flag {\n  None = 0,\n  On = 1,\n  Once = 1 << 1,\n}\n\n/**\n * @example\n * ```ts\n * type Events = {\n *  test: []\n *  foo: [a: number]\n *  bar: [a: number, b: string]\n * }\n *\n * const event = new EventEmitter<Events>()\n *\n * event.on('test', () => console.log('test'))\n *\n * event.emit('test')\n *\n * event.off('test')\n *\n * ```\n */\nexport class EventEmitter<Events extends Record<string, any>> {\n  #listeners: EventListenersMap<Events> = {}\n\n  /**\n   * Get all events and it's listeners.\n   */\n  #events(): EventListenersMap<Events>\n  /**\n   * Get all listeners of the event.\n   * @param event Event type\n   */\n  #events<K extends keyof Events>(event: K): NonNullable<EventListenersMap<Events>[K]>\n  #events<K extends keyof Events>(\n    event?: K,\n  ): EventListenersMap<Events> | NonNullable<EventListenersMap<Events>[K]> {\n    if (!event) {\n      return this.#listeners\n    }\n\n    if (!this.#listeners[event]) {\n      this.#listeners[event] = new Map()\n    }\n\n    return this.#listeners[event]!\n  }\n\n  events(): { [K in keyof Events]?: Listener<Events[K]>[] }\n  events<K extends keyof Events>(event: K): NonNullable<Listener<Events[K]>[]>\n  /**\n   * Get all listeners of the event.\n   * @param event Event type\n   */\n  events<K extends keyof Events>(event?: K): unknown {\n    if (!event) {\n      const keys = Object.keys(this.#listeners) as K[]\n      return Object.fromEntries(keys.map((key) => [key, this.events(key)]))\n    }\n\n    const events = this.#events(event)\n\n    return [...events.keys()]\n  }\n\n  /**\n   * Add a callback to the specified event.\n   * @param event Event type\n   * @param listener Callback\n   * @returns Remove the callback.\n   */\n  on<K extends keyof Events>(event: K, listener: Listener<Events[K]>): () => void {\n    const events = this.#events(event)\n\n    const flag = events.get(listener) ?? Flag.None\n    events.set(listener, flag | Flag.On)\n\n    return () => this.off(event, listener)\n  }\n\n  /**\n   * Add a callback to the specified event, only execute once.\n   *\n   * @param event Event type\n   * @param listener Callback\n   * @returns Remove the callback.\n   */\n  once<K extends keyof Events>(event: K, listener: Listener<Events[K]>) {\n    const events = this.#events(event)\n\n    const flag = events.get(listener) ?? Flag.None\n    events.set(listener, flag | Flag.Once)\n\n    return () => this.off(event, listener)\n  }\n\n  /**\n   * Remove all listeners of all events.\n   */\n  off(): boolean\n  /**\n   *\n   * Remove all listeners of the event.\n   * @param event Event type\n   */\n  off<K extends keyof Events>(event: K): boolean\n  /**\n   * Remove the listener of the event.\n   *\n   * @param event Event type\n   * @param listener  Callback\n   * @returns Return true if listener is existed, otherwise return false.\n   */\n  off<K extends keyof Events>(event: K, listener: Listener<Events[K]>): boolean\n  off<K extends keyof Events>(event?: K, listener?: Listener<Events[K]>): boolean {\n    if (!event) {\n      const collections: Set<Listener>[] = Object.values(this.#listeners)\n\n      this.#listeners = {}\n      return collections.length > 0\n    }\n\n    if (!listener) {\n      const events = this.#listeners[event]\n      if (events) {\n        delete this.#listeners[event]\n      }\n\n      return (events?.size ?? 0) > 0\n    }\n\n    const events = this.#events(event)\n\n    return events.delete(listener)\n  }\n\n  /**\n   * Trigger the event by event type.\n   *\n   * @param event Event type\n   * @param args Arguments that apply to the callback.\n   */\n  emit<K extends keyof Events>(event: K, ...args: Events[K]) {\n    const _events = this.#events(event)\n    const events = _events.entries()\n\n    for (const [listener, flag] of events) {\n      try {\n        listener(...args)\n      } catch (error) {\n        console.error(error)\n      }\n\n      if (flag & Flag.Once) {\n        const newFlag = flag ^ Flag.Once\n\n        if (newFlag === Flag.None) {\n          _events.delete(listener)\n        } else {\n          _events.set(listener, newFlag)\n        }\n      }\n    }\n  }\n}\n","import type { Listener } from './types'\n\nexport class SimpleEventEmitter<Args extends unknown[] = []> {\n  #listeners = new Set<Listener<Args>>()\n\n  on(listener: Listener<Args>) {\n    this.#listeners.add(listener)\n\n    return () => this.off(listener)\n  }\n\n  off(listener: Listener<Args>) {\n    this.#listeners.delete(listener)\n  }\n\n  clear() {\n    this.#listeners.clear()\n  }\n\n  emit(...args: Args) {\n    this.#listeners.forEach((listener) => {\n      listener(...args)\n    })\n  }\n}\n","import { isPromiseLike } from '../is'\nimport type { Fn } from '../types'\n\nexport interface IChainable<In = unknown> {\n  input: In\n  fns: Fn[]\n  pipe<Out>(\n    fn: (i: In) => Out,\n  ): Out extends Promise<unknown> ? IAsyncChainable<Out> : IChainable<Out>\n  exec(): In\n}\n\nexport interface IAsyncChainable<In = unknown> {\n  input: In\n  fns: Fn[]\n  pipe<Out>(fn: (i: Awaited<In>) => Out): IAsyncChainable<Out>\n  exec(): Promise<Awaited<In>>\n}\n\n/**\n *\n * @example\n *\n * ```ts\n * const plusOne = (n: number) => n + 1\n * const toString = (n: number) => n.toString()\n *\n * const s = chain(0)\n *  .pipe(plusOne)\n *  .pipe(toString)\n *  .exec()\n *\n * console.log(s) // => '1'\n * ```\n *\n * @param input\n * @returns\n */\nexport function chain<T>(input: T): IChainable<T> {\n  const ctx: IChainable<T> = {\n    input,\n    fns: [],\n    // biome-ignore lint/suspicious/noExplicitAny: internal usage\n    pipe: createChainable as any,\n    exec: exec as () => T,\n  }\n\n  return ctx\n}\n\nfunction createChainable(this: IChainable, fn: Fn) {\n  const chainCtx: IChainable = {\n    input: this.input,\n    fns: [...this.fns, fn],\n    // biome-ignore lint/suspicious/noExplicitAny: internal usage\n    pipe: createChainable as any,\n    exec: exec,\n  }\n\n  return chainCtx as IChainable\n}\n\nfunction exec(this: IChainable) {\n  return this.fns.reduce((i, fn) => (isPromiseLike(i) ? i.then((x) => fn(x)) : fn(i)), this.input)\n}\n","import type { Fn } from '../types'\nimport type { IComposeResult } from './types'\n\n/**\n * Compose multiple functions into single function\n *\n * @example\n *\n * ```ts\n * const plusOne = (n: number) => n + 1\n * const toString = (n: number) => n.toString()\n *\n * const plusOneThenToString = compose(plusOne, toString)\n * plusOneThenToString(0) // '1'\n * ```\n *\n * @param fns\n * @returns\n */\nexport function compose(...fns: Fn[]) {\n  const composed: IComposeResult<Fn> = (x: unknown) => fns.reduce((p, fn) => fn(p), x)\n\n  composed.exec = composed\n\n  return composed\n}\n","import pc from 'picocolors'\n\nexport type LoggerLevel = 'info' | 'warn' | 'error'\n\nexport interface LoggerWriteOption {\n  level: LoggerLevel\n  namespace?: string\n}\n\nexport type LoggerWriteFn = (\n  opt: LoggerWriteOption,\n  formatter?: string,\n  ...params: unknown[]\n) => void\n\nexport interface LoggerOption {\n  write?: LoggerWriteFn\n}\n\nconst defaultWrite: LoggerWriteFn = (opt, formatter, ...params) => {\n  const { level, namespace } = opt\n\n  const levelColor = level === 'info' ? pc.cyan : level === 'warn' ? pc.yellow : pc.red\n  const levelStr = levelColor(`[${level}]`)\n\n  const nsStr = namespace ? `[${namespace}]` : ''\n\n  const timeStr = pc.gray(new Date().toLocaleTimeString())\n\n  const logStr = [nsStr, timeStr, levelStr, formatter].filter(Boolean).join(' ')\n\n  console.log(logStr, ...params)\n}\n/**\n * create a simple logger, support print prefix, and enable/disable.\n *\n * @param prefix\n * @returns\n */\nexport function createLogger(namespace?: string, opt?: LoggerOption) {\n  let _enable = true\n\n  const writeFn = opt?.write || defaultWrite\n\n  const printFactory =\n    (level: LoggerLevel) =>\n    (formatter?: string, ...params: unknown[]) => {\n      if (!_enable) return\n\n      return writeFn({ level, namespace }, formatter, ...params)\n    }\n\n  const logger: ILogger = {\n    log: printFactory('info'),\n    info: printFactory('info'),\n    warn: printFactory('warn'),\n    error: printFactory('error'),\n  }\n\n  return {\n    get isEnabled() {\n      return _enable\n    },\n    enable() {\n      _enable = true\n    },\n    disable() {\n      _enable = false\n    },\n    ...logger,\n  }\n}\n\nexport type Logger = ReturnType<typeof createLogger>\n\nexport interface ILogger {\n  log: (formatter?: string, ...params: unknown[]) => void\n  info: (formatter?: string, ...params: unknown[]) => void\n  warn: (formatter?: string, ...params: unknown[]) => void\n  error: (formatter?: string, ...params: unknown[]) => void\n}\n","import { isString } from '../is'\n\n/**\n * like {@link Number.prototype.toFixed}, but return a number instead of string.\n * @param num\n * @param fractionDigits\n * @returns\n */\nexport function toFixed(num: number | string, fractionDigits: number): number {\n  const _num = isString(num) ? Number.parseFloat(num) : num\n\n  return Number.parseFloat(_num.toFixed(fractionDigits))\n}\n\n/**\n * ensure value is between [min, max].\n *\n * @param value\n * @param min\n * @param max\n * @returns\n */\nexport function clamp(value: number, min: number, max: number): number {\n  return value < min ? min : value > max ? max : value\n}\n\n/**\n * like {@link Math.round}, but support specify fraction digits.\n * @param value\n * @param fractionDigits\n * @returns\n */\nexport function round(value: number, fractionDigits: number): number {\n  const u = 10 ** fractionDigits\n\n  // 1207.411 / 100\n  return toFixed(Math.round(value * u) / u, fractionDigits)\n}\n\n/**\n * Convert value to the range [start, end)\n *\n * @param value\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeToRange(value: number, start: number, end: number): number {\n  if (start >= end) {\n    throw new Error('start should less than the end')\n  }\n\n  const range = end - start\n\n  return ((((value - start) % range) + range) % range) + start\n}\n","/**\n * calculate the sum of arr\n *\n * @param arr\n * @returns\n */\nexport function sum(...arr: number[]): number {\n  return arr.reduce((v, s) => v + s, 0)\n}\n","import { isNumber, isObject } from '../is'\nimport type { Awaitable, Optional } from '../types'\n\nexport interface UpgradeConfig {\n  version: number\n  // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n  upgrade: (data: any) => Awaitable<VersionedData>\n}\n\nexport interface MigrationOption {\n  upgrades: UpgradeConfig[]\n}\n\nexport interface VersionedData {\n  version: number\n}\n\nexport async function execMigration(data: Optional<unknown>, option: MigrationOption) {\n  let result = data\n\n  for (const upgradeConf of option.upgrades) {\n    const version =\n      isObject(result) && 'version' in result && isNumber(result.version) && result.version\n\n    if (version === false || version < upgradeConf.version) {\n      result = await upgradeConf.upgrade(result)\n    }\n  }\n\n  return result\n}\n","export interface SimpleOption<T = string> {\n  label?: string\n  value: T\n  [key: string]: unknown\n}\n\nexport type GetSimpleOptionValue<T> = T extends SimpleOption<infer V> ? V : unknown\n\nexport function getOptionByLabel<T extends SimpleOption>(options: T[], label?: string) {\n  return options.find((o) => o.label === label)\n}\n\nexport function getOptionByValue<T extends SimpleOption>(\n  options: T[],\n  value?: GetSimpleOptionValue<T>,\n) {\n  return options.find((o) => o.value === value)\n}\n\nexport function getOptionLabelByValue<T extends SimpleOption>(\n  options: T[],\n  value?: GetSimpleOptionValue<T>,\n) {\n  return getOptionByValue(options, value)?.label\n}\n","import { createPromise } from '../core'\nimport type { Fn } from '../types'\n\nexport interface PoolOption {\n  /**\n   * @default 10\n   */\n  maximize: number\n}\n\n/**\n * create a simple request pool, it will limit the max request count.\n *\n * @param request\n * @param opt\n * @returns\n */\n\nexport function createPool<T extends Fn>(request: T, opt: Partial<PoolOption> = {}) {\n  const ctx = {\n    maximize: opt.maximize ?? 10,\n    runningCount: 0,\n    queue: [] as Array<() => void>,\n  }\n\n  return function (this: unknown, ...args: Parameters<T>): Promise<Awaited<ReturnType<T>>> {\n    const { promise, reject, resolve } = createPromise<Awaited<ReturnType<T>>>()\n\n    const nextReq = () => {\n      ctx.runningCount++\n\n      invokeToPromise(() => request.apply(this, args) as Awaited<ReturnType<T>>)\n        .then(resolve)\n        .catch(reject)\n        .finally(() => {\n          ctx.runningCount--\n\n          const maybeNextReq = ctx.queue.shift()\n\n          maybeNextReq?.()\n        })\n    }\n\n    if (ctx.runningCount >= ctx.maximize) {\n      ctx.queue.push(nextReq)\n    } else {\n      nextReq()\n    }\n\n    return promise\n  }\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: internal usage\nasync function invokeToPromise<T extends () => any>(fn: T): Promise<ReturnType<T>> {\n  return fn()\n}\n","import type { Optional } from '../types'\n\nexport interface TextTableOption {\n  /**\n   * @default \"-\"\n   */\n  headLine?: string\n  highlight?: (cell: TableCellType) => string\n}\n\nexport type TableCellType = Optional<string | number | boolean>\n\nexport function textTable(input: TableCellType[][], opt?: TextTableOption) {\n  const table = uniformTable(input, opt)\n\n  return table\n}\n\nexport interface TextTableToStringOption extends TextTableOption {}\n\nexport function textTableToString(input: TableCellType[][], opt?: TextTableToStringOption) {\n  const table = textTable(input, opt)\n\n  const str: string[] = []\n\n  for (const row of table) {\n    str.push(row.join(' '))\n  }\n\n  return str.join('\\n')\n}\n\nexport function uniformTable(table: TableCellType[][], opt?: TextTableOption) {\n  const { headLine = '-', highlight } = opt || {}\n\n  const colLens = calcColLength(table)\n\n  const uniformed: string[][] = []\n\n  for (const [rowIdx, row] of table.entries()) {\n    const uniformedRow: string[] = []\n\n    for (const [idx, s] of row.entries()) {\n      const str = highlight ? highlight(s) : s\n      uniformedRow[idx] = padEnd(str, colLens[idx] || 0, ' ')\n    }\n\n    uniformed.push(uniformedRow)\n\n    if (rowIdx === 0 && headLine) {\n      const headLineRow: string[] = []\n      for (const [idx] of row.entries()) {\n        headLineRow[idx] = padEnd('', colLens[idx] || 0, headLine)\n      }\n      uniformed.push(headLineRow)\n    }\n  }\n\n  return uniformed\n}\n\nfunction calcColLength(table: TableCellType[][]) {\n  const [header = [], ...content] = table\n  const colLens = []\n  for (let idx = 0; idx < header.length; idx++) {\n    let maxLen = getLength(header[idx])\n\n    for (const row of content) {\n      maxLen = Math.max(getLength(row[idx]), maxLen)\n    }\n\n    colLens[idx] = maxLen\n  }\n\n  return colLens\n}\n\nfunction _toString(cell: TableCellType) {\n  return (cell ?? '').toString()\n}\n\nconst StyleRE = /\\x1b\\[\\d+m/g\n\nfunction getLength(cell: TableCellType) {\n  return _toString(cell).replace(StyleRE, '').length\n}\n\nfunction padEnd(cell: TableCellType, maxLength: number, fillString = ' '): string {\n  const currentLen = getLength(cell)\n  const padNumber = maxLength - currentLen\n\n  return padNumber > 0 ? _toString(cell) + fillString.repeat(padNumber) : _toString(cell)\n}\n","import type { CommunicationAdapter } from '../types'\n\nexport function createMessageChannelAdaptor(m: MessagePort) {\n  const adaptor: CommunicationAdapter = {\n    send(data) {\n      m.postMessage(data)\n    },\n    registerReceiveCallback(receiveCallback) {\n      m.addEventListener('message', (evt) => {\n        receiveCallback(evt.data)\n      })\n    },\n  }\n\n  return adaptor\n}\n","import type { CommunicationAdapter } from '../types'\n\nexport function createWorkerAdaptor(m?: Worker) {\n  const host = m || globalThis\n\n  const adaptor: CommunicationAdapter = {\n    send(data) {\n      host.postMessage(data)\n    },\n    registerReceiveCallback(receiveCallback) {\n      host.addEventListener('message', (evt) => {\n        receiveCallback((evt as any).data)\n      })\n    },\n  }\n\n  return adaptor\n}\n","import type { Fn } from '../types'\n\nexport interface Procedure {\n  [key: string]: Procedure | Fn\n}\n\nexport interface CommunicationAdapter<T extends CommunicationProtocol = CommunicationProtocol> {\n  /**\n   *\n   * @param receiveCallback Return true if the data is valid message\n   */\n  registerReceiveCallback(receiveCallback: Fn<boolean, [data: T]>): void\n  send(data: T): void\n}\n\nexport enum MessageFlag {\n  Default = 0,\n  /**\n   * Remote response\n   */\n  Response = 0b1,\n}\n\nexport interface CommunicationProtocol {\n  /**\n   * ID\n   */\n  _: string\n\n  /**\n   * Flags\n   */\n  f: number\n\n  /**\n   * Key path\n   */\n  k?: string[]\n\n  /**\n   * Arguments\n   */\n  a?: unknown[]\n\n  /**\n   * Error\n   */\n  e?: string\n\n  /**\n   * Response data\n   */\n  d?: unknown\n\n  /**\n   * Namespcae\n   */\n  n?: string\n}\n","import { isObject, isString } from '../is'\nimport { type CommunicationProtocol, MessageFlag } from './types'\n\nexport function isResponseMessage(o: unknown, namespace?: string): o is CommunicationProtocol {\n  return isCommunicationProtocol(o, namespace) && isFlagOn(o.f, MessageFlag.Response)\n}\n\nexport function isRequestMessage(o: unknown, namespace?: string): o is CommunicationProtocol {\n  return isCommunicationProtocol(o, namespace) && !isFlagOn(o.f, MessageFlag.Response)\n}\n\nexport function isCommunicationProtocol(\n  o: unknown,\n  namespace?: string,\n): o is CommunicationProtocol {\n  return isObject(o) && '_' in o && isString(o._) && o.n === namespace\n}\n\nfunction isFlagOn(n: number, flags: number) {\n  return (n & flags) === flags\n}\n","import { createPromise, nanoid } from '../core'\nimport { isFn, isObject, isSymbol } from '../is'\nimport type { Fn } from '../types'\nimport {\n  type CommunicationAdapter,\n  type CommunicationProtocol,\n  MessageFlag,\n  type Procedure,\n} from './types'\nimport { isRequestMessage, isResponseMessage } from './utils'\n\nexport interface RPCCommonOption {\n  namespace?: string\n  adaptor: CommunicationAdapter\n}\n\nexport interface RPCServerOption<M> extends RPCCommonOption {\n  methods: M\n}\n\nexport function createRPCServer<M extends Procedure>(opt: RPCServerOption<M>) {\n  const { adaptor, methods, namespace } = opt\n\n  adaptor.registerReceiveCallback((data) => {\n    if (!isRequestMessage(data, namespace)) return false\n\n    const m = getFn(methods, data.k || [])\n\n    const resp: CommunicationProtocol = {\n      _: data._,\n      n: namespace,\n      f: MessageFlag.Response,\n    }\n\n    processMessage()\n\n    return true\n\n    async function processMessage() {\n      try {\n        const respData = await m?.(...(data.a || []))\n\n        resp.d = respData\n      } catch (error) {\n        resp.e = String(error)\n      } finally {\n        adaptor.send(resp)\n      }\n    }\n  })\n\n  return {\n    methods,\n  }\n}\n\nfunction getFn(methods: Procedure | undefined, keyPath: string[]): Fn | null {\n  const [key, ...resetKeyPath] = keyPath\n  if (!key) {\n    return null\n  }\n\n  if (resetKeyPath.length === 0) {\n    if (isFn(methods?.[key])) {\n      return methods[key]\n    }\n  }\n\n  const target = methods?.[key]\n  if (isObject(target) || isFn(target)) {\n    return getFn(target as Procedure, resetKeyPath)\n  }\n\n  return null\n}\n\ntype Promisify<T> = {\n  [K in keyof T]: T[K] extends Fn<infer R, infer P> ? (...args: P) => Promise<R> : Promisify<T[K]>\n}\n\nexport interface ClientOptions extends RPCCommonOption {\n  /**\n   * Timeout in milliseconds\n   * @default 2000\n   */\n  timeout?: number\n}\n\nexport function createRPCClient<T extends Procedure>(t: ClientOptions): Promisify<T> {\n  const { adaptor, namespace, timeout = 2000 } = t\n\n  interface CallRecord {\n    p: PromiseWithResolvers<unknown>\n    timeoutHandle: number\n  }\n\n  const callRecord = new Map<string, CallRecord>()\n\n  adaptor.registerReceiveCallback((data) => {\n    // Check response message\n    if (!isResponseMessage(data, namespace)) return false\n\n    const record = callRecord.get(data._)\n    if (!record) return false\n    clearTimeout(record.timeoutHandle)\n\n    callRecord.delete(data._)\n\n    if (data.e) {\n      record.p.reject(data.e)\n    } else {\n      record.p.resolve(data.d)\n    }\n\n    return true\n  })\n\n  return createProxy<Promisify<T>>([], send)\n\n  async function send(keyPath: string[], ...args: unknown[]) {\n    const resp: CommunicationProtocol = {\n      _: nanoid(),\n      n: namespace,\n      f: MessageFlag.Default,\n      k: keyPath,\n      a: args,\n    }\n\n    const p = createPromise()\n\n    const timeoutHandle = setTimeout(() => {\n      callRecord.delete(resp._)\n      p.reject(new Error('Timeout'))\n    }, timeout)\n\n    callRecord.set(resp._, {\n      p,\n      timeoutHandle: timeoutHandle as any,\n    })\n\n    adaptor.send(resp)\n\n    return p.promise\n  }\n}\n\nfunction createProxy<T>(keyPath: string[], fn: Fn) {\n  const _fn = (...args: unknown[]) => fn(keyPath, ...args)\n\n  const p = new Proxy(_fn, {\n    get(_, key) {\n      if (isSymbol(key)) {\n        return undefined\n      }\n\n      return createProxy([...keyPath, key], fn)\n    },\n  })\n\n  return p as T\n}\n","import type { Fn } from '../types'\n\nfunction getAsyncFunctionConstructor() {\n  return (async () => {}).constructor\n}\n\nexport interface MakeSaferEvalOption {\n  /**\n   * @default ['console']\n   */\n  allowedGlobalKeys?: string[]\n  /**\n   * Extends global objects\n   */\n  globals?: Record<string, unknown>\n  /**\n   * If allow side effects is true, then it will use global version of that function,\n   * which may cause memory leak if not clear the side effect.\n   *\n   * By default, it will create a side effect free version of those function.\n   *\n   * @todo not implement\n   */\n  allowSideEffects?: {\n    /**\n     * Auto call clearTimeout after execution is done\n     */\n    setTimeout?: boolean\n    /**\n     * Auto call clearInterval after execution is done\n     */\n    setInterval?: boolean\n    /**\n     * Auto call cancelAnimationFrame after execution is done\n     */\n    requestAnimationFrame?: boolean\n    /**\n     * Auto call cancelIdleCallback after execution is done\n     */\n    requestIdleCallback?: boolean\n    /**\n     * This will create a AbortController for all fetch calls, and it will\n     * call abort() after execution is done\n     */\n    fetch?: boolean\n  }\n}\n\n/**\n *\n * It use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction/AsyncFunction AsyncFunction}\n * to create a more safe runtime, it default only enable a very small set of global objects.\n *\n * If you want to enable more global objects. You can change `allowedGlobalKeys`.\n *\n * @example\n *\n * ```ts\n * const saferEval = createSaferEval()\n * const $ctx = { a: 0 }\n *\n * await saferEval('$ctx', '$.a = 1')($ctx)\n *\n * expect($ctx.a).toBe(1)\n * ```\n */\nexport function createSaferEval(opt: MakeSaferEvalOption = {}) {\n  opt.allowedGlobalKeys ??= ['console']\n\n  if (opt.globals) {\n    opt.allowedGlobalKeys.push(...Object.keys(opt.globals))\n  }\n\n  const { safeGlobalThis, forbiddenKeys } = _makeGlobalObjects(opt)\n\n  const extendedGlobalThis = {\n    ...safeGlobalThis,\n    ...opt.globals,\n  }\n\n  const safeGlobalThisEntities = Object.entries(extendedGlobalThis)\n\n  const globalAllowedKeys = safeGlobalThisEntities.map((n) => n[0])\n  const globalValues = safeGlobalThisEntities.map((n) => n[1])\n\n  return saferEval\n\n  function saferEval<T extends Fn>(...parameters: string[]) {\n    const code = parameters.at(-1)\n\n    const parameterNames = parameters.slice(0, parameters.length - 1)\n\n    const AsyncFunction = getAsyncFunctionConstructor()\n\n    const fn = AsyncFunction(\n      ...globalAllowedKeys,\n      ...parameterNames,\n      ...forbiddenKeys,\n      `'use strict';\\n${code}`,\n    )\n\n    return async (...args: Parameters<T>) => {\n      const result = await fn(...globalValues, ...args)\n      return result as ReturnType<T>\n    }\n  }\n}\n\ninterface MakeGlobalObjectOption {\n  allowedGlobalKeys?: string[]\n}\n\nfunction _makeGlobalObjects(opt: MakeGlobalObjectOption = {}) {\n  const allGlobalKeys = _getAllGlobalKeys(opt)\n\n  const safeGlobalThis: Record<string, unknown> = {}\n\n  for (const key of allGlobalKeys.allowedKeys) {\n    safeGlobalThis[key] ??= globalThis[key as GlobalKey]\n  }\n\n  safeGlobalThis.globalThis = safeGlobalThis\n  safeGlobalThis.window = safeGlobalThis\n  safeGlobalThis.global = safeGlobalThis\n\n  if (safeGlobalThis.console) {\n    safeGlobalThis.console = {\n      ...globalThis.console,\n    }\n  }\n\n  return {\n    forbiddenKeys: allGlobalKeys.forbiddenKeys,\n    safeGlobalThis,\n  }\n}\n\nfunction _getAllGlobalKeys(opt: MakeGlobalObjectOption = {}) {\n  const _ignoredKeys = [\n    //\n    'globalThis',\n    'window',\n    'global',\n    'undefined',\n    'eval',\n    /^\\d/,\n  ] satisfies (GlobalKey | RegExp)[]\n\n  const _builtinAllowedKeys: string[] = [\n    'Number',\n    'String',\n    'Boolean',\n    'BigInt',\n    'Date',\n    'RegExp',\n    'Blob',\n    'Array',\n    'Set',\n    'Map',\n    'NaN',\n    'Infinity',\n  ] satisfies GlobalKey[]\n\n  const allowedKeys: string[] = []\n  const forbiddenKeys: string[] = []\n\n  for (const key of Object.getOwnPropertyNames(globalThis)) {\n    if (isIgnored(key)) {\n      continue\n    }\n\n    if (_builtinAllowedKeys.includes(key) || opt.allowedGlobalKeys?.includes(key)) {\n      allowedKeys.push(key)\n      continue\n    }\n\n    forbiddenKeys.push(key)\n  }\n\n  return {\n    allowedKeys,\n    forbiddenKeys,\n  }\n\n  function isIgnored(key: string) {\n    return _ignoredKeys.some((n) => (typeof n === 'string' ? n === key : n.test(key)))\n  }\n}\n\ntype GlobalKey = keyof typeof globalThis\n","export function PascalCase(str: string) {\n  return (\n    str\n      // snake_case or kebab-case\n      .replace(/[_-]\\w/g, (n) => n[1]!.toUpperCase())\n      // camelCase\n      .replace(/^\\w/g, (n) => n.toUpperCase())\n  )\n}\n\nexport function camelCase(str: string) {\n  return (\n    str\n      // snake_case or kebab-case\n      .replace(/[_-]\\w/g, (n) => n[1]!.toUpperCase())\n      // PascalCase\n      .replace(/^\\w/g, (n) => n.toLowerCase())\n  )\n}\n\nexport function snake_case(str: string) {\n  return (\n    str\n      // kebab-case\n      .replace(/-/g, '_')\n      // PascalCase or camelCase\n      .replace(/(?!^)[A-Z]/g, (n) => `_${n.toLowerCase()}`)\n      // PascalCase\n      .replace(/^[A-Z]/g, (n) => n.toLowerCase())\n  )\n}\n\nexport function kebab$case(str: string) {\n  return (\n    str\n      // snake_case\n      .replace(/_/g, '-')\n      // PascalCase or camelCase\n      .replace(/(?!^)[A-Z]/g, (n) => `-${n.toLowerCase()}`)\n      // PascalCase\n      .replace(/^[A-Z]/g, (n) => n.toLowerCase())\n  )\n}\n","/**\n * Parse url, return false if input is not valid.\n *\n */\nexport function parseURL(input: string | URL, base?: string) {\n  if (URL.canParse) {\n    return URL.canParse(input, base) ? new URL(input, base) : false\n  }\n\n  try {\n    return new URL(input, base)\n  } catch (_error) {\n    return false\n  }\n}\n\n/**\n * Update searchParams by query with encodeURIComponent\n *\n * @example\n * ```ts\n * withQuery('http://example.com', { a: 1, b: false, c: 'xx' }) // => http://example.com?a=1&b=false&c=xx\n * ```\n *\n */\nexport function withQuery(input: string | URL, query: Record<string, any>) {\n  const u = parseURL(input)\n\n  if (!u) {\n    throw new Error(`Parse URL failed!`)\n  }\n\n  Object.entries(query).forEach(([key, value]) => {\n    u.searchParams.set(key, encodeURIComponent(String(value ?? '')))\n  })\n\n  return u\n}\n"],"mappings":"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"}