{"id":20396871,"url":"https://github.com/deno911/911","last_synced_at":"2026-05-10T10:40:25.586Z","repository":{"id":51992953,"uuid":"520637511","full_name":"deno911/911","owner":"deno911","description":"Opinionated collection of helper tools. Assembled with Deno in mind.","archived":false,"fork":false,"pushed_at":"2022-08-25T22:54:47.000Z","size":281,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-20T10:45:41.518Z","etag":null,"topics":["deno","deno-deploy","deno-module","deno911","denoland","developer-tools","dx","formatting","gitpod","helpers","logging","typescript","utilities"],"latest_commit_sha":null,"homepage":"https://deno.land/x/911","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deno911.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-08-02T20:16:00.000Z","updated_at":"2024-05-02T04:40:46.000Z","dependencies_parsed_at":"2022-08-26T02:20:37.149Z","dependency_job_id":null,"html_url":"https://github.com/deno911/911","commit_stats":null,"previous_names":["deno911/x"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deno911%2F911","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deno911%2F911/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deno911%2F911/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deno911%2F911/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deno911","download_url":"https://codeload.github.com/deno911/911/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241945526,"owners_count":20046869,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","deno-deploy","deno-module","deno911","denoland","developer-tools","dx","formatting","gitpod","helpers","logging","typescript","utilities"],"created_at":"2024-11-15T04:10:08.000Z","updated_at":"2025-12-11T21:07:31.190Z","avatar_url":"https://github.com/deno911.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# deno911\n\nOpinionated collection of utilities and helpers, assembled with Deno in mind.\n\n```ts\nimport * as _ from \"https://deno.land/x/911@0.1.5/mod.ts\";\n```\n\n```tree\n├── deps.ts\n├── mod.ts\n├── src/\n|  ├── cache.ts\n|  ├── collection.ts\n|  ├── date.ts\n|  ├── fmt.ts\n|  ├── hash.ts\n|  ├── http.ts\n|  ├── json.ts\n|  ├── log.ts\n|  ├── math.ts\n|  ├── memoize.ts\n|  ├── params.ts\n|  ├── promises.ts\n|  ├── serialize_map.ts\n|  ├── serialize_set.ts\n|  ├── state.ts\n|  ├── throttle.ts\n|  └── type.ts\n├── tests/\n|  ├── date_test.ts\n|  ├── memoize_test.ts\n|  ├── params_test.ts\n|  ├── promises_test.ts\n|  ├── serialize_map_test.ts\n|  ├── serialize_set_test.ts\n|  └── throttle_test.ts\n└── types.d.ts\n```\n\n## Submodules\n\n---\n\n### cache.ts\n\n\u003e See the [Deno Documentation][docs-cache] for this file.\n\n#### Constants\n\n```ts\nconst globalCache: Cache;\n```\n\n#### Methods\n\n```ts\nfunction createCache(capacity: number, cacheKey: string): Cache;\n```\n\n---\n\n### collection.ts\n\n\u003e See the [Deno Documentation][docs-collection] for this file.\n\n#### Types\n\n```ts\ntype SortKeyFn\u003cT\u003e = (keyof T) | ((el: T) =\u003e T[keyof T]);\n```\n\n```ts\ntype SortCompareFn\u003cT\u003e = (...args: [T, T]) =\u003e number;\n```\n\n#### Methods: Arrays\n\n```ts\nfunction toArray(array?: Nullable\u003cArrayable\u003cT\u003e\u003e): Array\u003cT\u003e;\n```\n\n```ts\nfunction flattenArrayable(array?: Nullable\u003cArrayable\u003cT | Array\u003cT\u003e\u003e\u003e): T[];\n```\n\n```ts\nfunction mergeArrayable(...args: Nullable\u003cArrayable\u003cT\u003e\u003e[]): Array\u003cT\u003e;\n```\n\n```ts\nfunction partition(array: readonly T[], ...filters: PartitionFilter\u003cT\u003e[]);\n```\n\n```ts\nfunction uniq(array: readonly T[]): T[];\n```\n\n```ts\nfunction last(array: readonly T[]): T;\n```\n\n```ts\nfunction at(array: readonly T[], index: number): T;\n```\n\n```ts\nfunction remove(array: T[], value: T): T[];\n```\n\n```ts\nfunction range(start: number, stop: number, step?: number): number[];\n```\n\n```ts\nfunction move(arr: T[], from: number, to: number): T[];\n```\n\n```ts\nfunction clampArrayRange(n: number, arr: readonly unknown[]);\n```\n\n```ts\nfunction shuffle(array: T[]): T[];\n```\n\n#### Methods: Objects and Records\n\n```ts\nfunction hasOwnProperty(obj: T, v: PropertyKey): boolean;\n```\n\n```ts\nfunction assign\u003cT extends {}, U, V extends any[] = U[]\u003e(\n  target: T,\n  ...sources: V[]\n): asserts target is T \u0026 V[any];\n```\n\n```ts\nfunction isKeyOf\u003cT extends object\u003e(obj: T, k: keyof any): k is keyof T;\n```\n\n```ts\nfunction objectKeys\u003cT extends object\u003e(obj: T): (keyof T)[];\n```\n\n```ts\nfunction objectValues\u003cT extends any\u003e(obj: Record\u003cstring, T\u003e): T[];\n```\n\n```ts\nfunction objectEntries\u003cT extends object\u003e(obj: T): [string, any][];\n```\n\n```ts\nfunction pick\u003c\n  T extends any,\n  K extends (keyof T \u0026 string),\n\u003e(o: T, keys: K[]): Record\u003cK, T[K]\u003e;\n```\n\n#### Methods: Filters\n\n```ts\nfunction filterKeys(\n  record: Readonly\u003cRecord\u003cstring, T\u003e\u003e,\n  predicate: (key: string) =\u003e boolean,\n): Record\u003cstring, T\u003e;\n```\n\n```ts\nfunction filterValues(\n  record: Readonly\u003cRecord\u003cstring, T\u003e\u003e,\n  predicate: (value: T) =\u003e boolean,\n): Record\u003cstring, T\u003e;\n```\n\n```ts\nfunction filterEntries(\n  record: Readonly\u003cRecord\u003cstring, T\u003e\u003e,\n  predicate: (entry: [string, T]) =\u003e boolean,\n): Record\u003cstring, T\u003e;\n```\n\n```ts\nfunction removeEmptyValues\u003cT extends object\u003e(obj: T): T;\n```\n\n#### Methods: Mappers\n\n```ts\nfunction mapKeys(\n  record: Readonly\u003cRecord\u003cstring, T\u003e\u003e,\n  transformer: (key: string) =\u003e string,\n): Record\u003cstring, T\u003e;\n```\n\n```ts\nfunction mapValues(\n  record: Readonly\u003cRecord\u003cstring, T\u003e\u003e,\n  transformer: (value: T) =\u003e O,\n): Record\u003cstring, O\u003e;\n```\n\n```ts\nfunction mapEntries\u003c\n  TK extends string,\n  TV extends any,\n  OK extends string = TK,\n  OV extends any = TV,\n\u003e(\n  record: Record\u003cTK, TV\u003e,\n  mapFn: (entry: [keyof TK, TV]) =\u003e [keyof OK, OV],\n): Record\u003cOK, OV\u003e;\n```\n\n```ts\nfunction objectMap\u003cV, NV extends V, K extends string\u003e(\n  obj: Record\u003cK, V\u003e,\n  fn:\n    | ((value: V, key?: K) =\u003e Maybe\u003c[K, V]\u003e)\n    | (([key, value]: [K, V]) =\u003e Maybe\u003c[K, V]\u003e),\n): Record\u003cK, V\u003e;\n```\n\n#### Methods: Sorting\n\n```ts\nfunction sortBy\u003cT extends Record\u003cstring, any\u003e\u003e(\n  array: T[],\n  key: SortKeyFn\u003cT\u003e,\n): T[];\n```\n\n```ts\nfunction sortInPlace\u003cT extends Record\u003cstring, any\u003e\u003e(\n  array: T[],\n  key: SortKeyFn\u003cT\u003e,\n): T[];\n```\n\n```ts\nfunction sortFactory\u003cT extends Record\u003cstring, any\u003e\u003e(\n  key: SortKeyFn\u003cT\u003e,\n): SortCompareFn\u003cT\u003e {\n  return function (a, b) {\n    const fn: SortKeyFn\u003cT\u003e = (el) =\u003e (\n      typeof key === \"function\" ? key(el) : el[key]\n    );\n    return (fn.call(fn, a)).localeCompare(fn.call(fn, b));\n  };\n}\n```\n\n---\n\n### date.ts\n\n\u003e See the [Deno Documentation][docs-date] for this file.\n\n#### Types\n\n```ts\ninterface RelativeTimeOptions extends Intl.RelativeTimeFormatOptions {\n  locales?: string | string[];\n  absolute?: boolean;\n  timeZone?: string;\n}\n```\n\n#### Enums\n\n```ts\nenum Times {\n  /**\n   * set to 1 to scale everything down to seconds.\n   * leave as 1e3 to scale everything as milliseconds.\n   */\n  second = 1e3,\n  millisecond = 1e-3 * second,\n  microsecond = 1e-6 * second,\n  nanosecond = 1e-9 * second,\n  minute = 60 * second,\n  hour = 3.6e3 * second,\n  day = 8.64e4 * second,\n  week = 6.048e5 * second,\n  month = 2.628e6 * second,\n  year = 3.1536e7 * second,\n}\n```\n\n```ts\nenum TimesAbbr {\n  millis = Times.millisecond,\n  nanos = Times.nanosecond,\n  micros = Times.microsecond,\n  sec = Times.second,\n  min = Times.minute,\n  hr = Times.hour,\n  wk = Times.week,\n  mo = Times.month,\n  yr = Times.year,\n  ms = Times.millisecond,\n  ns = Times.nanosecond,\n  us = Times.microsecond,\n  s = Times.second,\n  m = Times.minute,\n  h = Times.hour,\n  d = Times.day,\n  w = Times.week,\n  M = Times.month,\n  Y = Times.year,\n}\n```\n\n#### Constants\n\n```ts\nconst CENTURY = Times.year * 100;\nconst DECADE = Times.year * 10;\nconst YEAR = Times.year;\nconst QUARTER = Times.year / 4;\nconst MONTH = Times.month;\nconst WEEK = Times.week;\nconst DAY = Times.day;\nconst HOUR = Times.hour;\nconst MINUTE = Times.minute;\nconst SECOND = Times.second;\nconst MILLISECOND = Times.millisecond;\nconst NANOSECOND = Times.nanosecond;\nconst MICROSECOND = Times.microsecond;\n```\n\n#### Methods\n\n```ts\nfunction parse(\n  date: string | number,\n  formatString = defaultFormatString,\n): Date;\n```\n\n```ts\nfunction format(\n  date: Date | string | number,\n  formatString = defaultFormatString,\n): string;\n```\n\n```ts\nfunction difference(\n  from: number | string | Date,\n  to: number | string | Date,\n  options?: DifferenceOptions,\n): Partial\u003cDifferenceFormat\u003e;\n```\n\n```ts\nfunction relative(\n  value: number,\n  unit: RelativeUnit,\n  {\n    style = \"long\",\n    numeric = \"auto\",\n    locales = \"en\",\n    localeMatcher = \"best fit\",\n  }: RelativeTimeOptions = {},\n): string;\n```\n\n---\n\n### fmt.ts\n\n\u003e See the [Deno Documentation][docs-fmt] for this file.\n\n---\n\n### hash.ts\n\n\u003e See the [Deno Documentation][docs-hash] for this file.\n\n#### Constants\n\n```ts\nconst utf8TextEncoder: TextEncoder;\n```\n\n```ts\nconst utf8TextDecoder: TextDecoder;\n```\n\n#### Methods\n\n```ts\nfunction toHex(buffer: Uint8Array | ArrayBuffer): string;\n```\n\n```ts\nasync function computeHash(\n  data: string | Uint8Array,\n  algorithm: AlgorithmIdentifier = \"SHA-1\",\n): Promise\u003cstring\u003e;\n```\n\n```ts\nasync function sha1(data: string | Uint8Array): Promise\u003cstring\u003e;\n```\n\n```ts\nasync function sha256(data: string | Uint8Array): Promise\u003cstring\u003e;\n```\n\n```ts\nasync function sha512(data: string | Uint8Array): Promise\u003cstring\u003e;\n```\n\n```ts\nasync function eTag(data: any, weak = true): Promise\u003cstring\u003e;\n```\n\n```ts\nfunction uuid(): string;\n```\n\n---\n\n### http.ts\n\n\u003e See the [Deno Documentation][docs-http] for this file.\n\n#### Types\n\n```ts\n/** Information about the connection a request arrived on. */\ninterface ConnInfo {\n  /** The local address of the connection. */\n  readonly localAddr: Deno.Addr;\n  /** The remote address of the connection. */\n  readonly remoteAddr: Deno.Addr;\n}\n```\n\n```ts\ndeclare type Handler = (\n  request: Request,\n  connInfo: ConnInfo,\n  params: PathParams,\n) =\u003e Promise\u003cResponse\u003e | Response;\n```\n\n```ts\ninterface Routes {\n  [path: string]: Handler;\n}\n```\n\n```ts\ninterface ServeInit extends Partial\u003cDeno.ListenOptions\u003e {\n  /** An AbortSignal to close the server and all connections. */\n  signal?: AbortSignal;\n\n  /** The handler to invoke when route handlers throw an error. */\n  onError?: (error: unknown) =\u003e Response | Promise\u003cResponse\u003e;\n\n  /** The callback which is called when the server started listening */\n  onListen?: (params: { hostname: string; port: number }) =\u003e void;\n}\n```\n\n```ts\ndeclare type PathParams = Record\u003cstring, string\u003e | undefined;\n```\n\n```ts\nexport interface ServeStaticOptions {\n  /** The base to be used for the construction of absolute URL. */\n  baseUrl: string;\n  /** A function to modify the response before it's served to the request.\n   * For example, set appropriate content-type header.\n   *\n   * @default undefined */\n  intervene?: (\n    request: Request,\n    response: Response,\n  ) =\u003e Promise\u003cResponse\u003e | Response;\n  /** Disable caching of the responses.\n   *\n   * @default true */\n  cache?: boolean;\n}\n```\n\n```ts\ninterface RequestTerms {\n  [key: string]: {\n    headers?: string[];\n    body?: string[];\n    params?: string[];\n  };\n}\n```\n\n```ts\nexport declare type ResponseProps = Record\u003cstring, any\u003e;\n```\n\n#### Methods\n\n```ts\n/**\n * Given an extension, lookup the appropriate media type for that extension.\n * Likely you should be using `contentType()` though instead.\n */\nfunction lookupMediaType(pathname: string): string | undefined;\n```\n\n````ts\n/** serve() registers \"fetch\" event listener and invokes the provided route\n * handler for the route with the request as first argument and processed path\n * params as the second.\n *\n * @example\n * ```ts\n * serve({\n *  \"/\": (request: Request) =\u003e new Response(\"Hello World!\"),\n *  404: (request: Request) =\u003e new Response(\"not found\")\n * })\n * ```\n *\n * The route handler declared for `404` will be used to serve all\n * requests that do not have a route handler declared.\n * @see {@link https://deno.land/x/sift@0.5.0/mod.ts}\n */\nfunction serve(userRoutes: Routes, options?: ServeInit): void;\n````\n\n```ts\nfunction handleRequest(\n  request: Request,\n  connInfo: ConnInfo,\n  routes: Routes,\n): Promise\u003cResponse\u003e;\n```\n\n```ts\nfunction defaultNotFoundPage(): Response;\n```\n\n````ts\n/**\n * Serve static files hosted on the internet or relative to your source code.\n *\n * Be default, up to 20 static assets that are less than 10MB are cached. You\n * can disable caching by setting `cache: false` in the options object.\n *\n * @example ```ts\n * import { serve, serveStatic } from \"https://deno.land/x/911@0.1.5/src/http.ts\"\n *\n * serve({\n *  // It is required that the path ends with `:filename+`\n *  \"/:filename+\": serveStatic(\"public\", { baseUrl: import.meta.url }),\n * })\n * ```\n */\nfunction serveStatic(\n  relativePath: string,\n  { baseUrl, intervene, cache }: ServeStaticOptions,\n): Handler;\n````\n\n````ts\n/**\n * Renders JSX components to HTML and returns a Response with `text/html`\n * as the `content-type.`\n *\n * @example\n * ```jsx\n * import { serve, jsx, h } from \"https://deno.land/x/sift/mod.ts\"\n *\n * const Greet = ({name}) =\u003e \u003cdiv\u003eHello, {name}\u003c/div\u003e;\n *\n * serve({\n *  \"/\": () =\u003e jsx(\u003chtml\u003e\u003cGreet name=\"Sift\" /\u003e\u003c/html),\n * })\n * ```\n *\n * Make sure your file extension is either `.tsx` or `.jsx` and you've `h` imported\n * when using this function. */\nfunction jsx(jsx: VNode, init?: ResponseInit): Response;\n````\n\n```ts\n/**\n * Validate whether the incoming request meets the provided terms.\n */\nfunction validateRequest(\n  request: Request,\n  terms: RequestTerms,\n): Promise\u003c{\n  error?: {\n    message: string;\n    status: number;\n  };\n  body?: {\n    [key: string]: unknown;\n  };\n}\u003e;\n```\n\n```ts\nfunction toResponse(\n  data: string | ArrayBuffer,\n  { contentType, status, headers, ...init }?: ResponseInit \u0026 ResponseProps,\n): Promise\u003cResponse\u003e;\n```\n\n---\n\n### json.ts\n\n\u003e See the [Deno Documentation][docs-json] for this file.\n\n#### Types\n\n```ts\ndeclare type JsonReplacerFn = (\n  this: any,\n  key: string,\n  value: any,\n) =\u003e any;\n```\n\n```ts\ndeclare type JsonValue\u003cT extends any = string | number | boolean\u003e = T extends (\n  T | T[] | Record\u003cstring, (T | T[] | Record\u003cstring, T\u003e)\u003e\n) ? T\n  : never;\n```\n\n```ts\ndeclare type JsonInit = {\n  replacer?: Maybe\u003cOmitThisParameter\u003cJsonReplacerFn\u003e\u003e;\n  space?: string | number;\n} \u0026 ResponseInit;\n```\n\n```ts\ndeclare type JsonInitAlt = {\n  replacer: (string | number)[];\n  space: string | number;\n} \u0026 ResponseInit;\n```\n\n#### Methods\n\n```ts\n/**\n * Serializes the given JavaScript value to a JSON string, returning it as a\n * new Response with appropriate `content-type` and CORS headers applied.\n * Accepts the same init parameters as `JSON.stringify()` and ResponseInit.\n */\nfunction json\u003cT extends unknown\u003e(\n  data: T, init?: Partial\u003cJsonInit\u003e\n): Response (+1 overload)\n```\n\n---\n\n### log.ts\n\n\u003e See the [Deno Documentation][docs-log] for this file.\n\n#### Types\n\n```ts\ntype LogLevelName = \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n```\n\n#### Enums\n\n```ts\nenum LogLevel {\n  Debug,\n  Info,\n  Warn,\n  Error,\n  Fatal,\n}\n```\n\n#### Classes\n\n```ts\nclass Timing {\n  #t = performance.now();\n\n  reset() {\n    this.#t = performance.now();\n  }\n\n  stop(message: string) {\n    const now = performance.now();\n    const d = Math.round(now - this.#t);\n    let cf = ansi.green;\n    if (d \u003e 10000) {\n      cf = ansi.red;\n    } else if (d \u003e 1000) {\n      cf = ansi.yellow;\n    }\n    console.debug(ansi.dim(\"TIMING\"), message, \"in\", cf(d + \"ms\"));\n    this.#t = now;\n  }\n}\n```\n\n```ts\nclass Logger {\n  get level(): LogLevel;\n  set level(level: LogLevel | LogLevelName);\n\n  setLevel(level: LogLevelName): void;\n\n  debug(...args: unknown[]): void;\n\n  log(...args: unknown[]): void;\n\n  info(...args: unknown[]): void;\n\n  warn(...args: unknown[]): void;\n\n  error(...args: unknown[]): void;\n\n  fatal(...args: unknown[]): void;\n\n  timing(): {\n    reset(): void;\n    stop(message?: string): void;\n  } | Timing;\n}\n```\n\n#### Constants\n\n```ts\nconst log: Logger;\n```\n\n---\n\n### math.ts\n\n\u003e See the [Deno Documentation][docs-math] for this file.\n\n#### Methods\n\n```ts\nfunction clamp(n: number, min: number, max: number): number;\n```\n\n```ts\nfunction randomInteger(lower: number, upper: number): number;\n```\n\n```ts\nfunction sum(...values: number[] | number[][]): number;\n```\n\n---\n\n### memoize.ts\n\n\u003e See the [Deno Documentation][docs-memoize] for this file.\n\n#### Types\n\n```ts\ninterface MemoizeOptions\u003cA extends unknown[], R\u003e {\n  /**\n   * Provides a single value to use as the Key for the memoization.\n   * Defaults to `JSON.stringify` (ish).\n   */\n  hash?: (...args: A) =\u003e unknown;\n\n  /**\n   * The Cache implementation to provide. Must be a Map or Map-alike.\n   * Defaults to a Map. Useful for replacing the cache with an LRU cache or similar.\n   */\n  cache?: Map\u003cunknown, R\u003e;\n}\ndsss;\n```\n\n```ts\ntype MemoizableFn\u003c\n  A extends unknown[],\n  R extends any,\n  T extends unknown,\n\u003e = (this: T, ...args: A) =\u003e R;\n```\n\n#### Constants\n\n```ts\nconst defaultOptions: {\n  cache: Map\u003cany, any\u003e;\n  hash(...args: any[]): string;\n};\n```\n\n#### Methods\n\n```ts\nfunction memoize\u003c\n  A extends unknown[],\n  R extends unknown,\n  T extends unknown,\n\u003e(\n  fn: MemoizableFn\u003cA, R, T\u003e,\n  opts: MemoizeOptions\u003cA, R\u003e = defaultOptions,\n): MemoizableFn\u003cA, R, T\u003e;\n```\n\n#### Decorators\n\n```ts\nfunction memoized\u003cA extends unknown[], R, T\u003e(\n  options: MemoizeOptions\u003cA, R\u003e = {},\n): MemoizeDecoratorFactory\u003cA, R, T\u003e;\n```\n\n---\n\n### params.ts\n\n\u003e See the [Deno Documentation][docs-params] for this file.\n\n#### Types\n\n```ts\ntype Obj\u003cT extends string = string\u003e = Record\u003cstring, T\u003e;\n```\n\n```ts\ntype ParamsInit =\n  | string\n  | string[][]\n  | Record\u003cstring, string\u003e\n  | URLSearchParams;\n```\n\n```ts\ninterface ParamsOptions {\n  distinct?: boolean;\n  sort?: boolean;\n  defaultParams?: Record\u003cstring, string\u003e;\n}\n```\n\n#### Classes\n\n````ts\nclass Params extends URLSearchParams {\n    readonly options: ParamsOptions;\n    constructor(init?: ParamsInit, options?: ParamsOptions);\n    /**\n     * Sorts all parameters, flattens any keys with multiple values (using\n     * the last value encountered as each key's final value), and then sorts\n     * them once again.\n     * @category Params\n     * @returns reference to the original Params object with any duplicates removed\n     * @example ```ts\n     * import { Params } from \"./params.ts\";\n     * \n     * const params = new Params(\"key=val1\u0026key2=val2\u0026key=val3\");\n     * params.distinct().toString();\n     * // key=val3\u0026key2=val2\n     * ```\n     */\n    distinct(): Params;\n    get size(): number;\n    get length(): number;\n    get\u003cT extends any = string\u003e(name: string | string[]): T | T[];\n    getAll(names: string | string[]): any;\n\n    /**\n     * Parse parameters from a string, array of entries, object literal, or\n     * an existing Params / URLSearchParams instance. Allows parameters with\n     * semicolon (`;`) delimiters, per the IETF RFC specification.\n     * @param value raw value to be parsed\n     * @returns\n     */\n    parse\u003cT extends ParamsInit\u003e(value: T): Params (+3 overloads)\n    toJSON(): {\n        [k: string]: string;\n    };\n    toString(): string;\n    toObject(): Obj;\n    static toObject\u003cT extends any = {\n        [K: string]: string;\n    }\u003e(params: Params): T;\n    /**\n     * Verify if an arbitrary value is fit for initializing a Params instance.\n     * @param value\n     * @returns\n     */\n    static validate(value: unknown, named?: boolean): value is ParamsInit;\n}\n````\n\n---\n\n### promises.ts\n\n\u003e See the [Deno Documentation][docs-promises] for this file.\n\n#### Methods\n\n```ts\nfunction sleep(ms: number, callback?: Fn\u003cvoid\u003e): Promise\u003cvoid\u003e;\n```\n\n```ts\nfunction throttle(\n  callback: Fn\u003cvoid, any\u003e | ((...args: any[]) =\u003e any),\n  delay?: number,\n  debounceMode?: boolean,\n  noTrailing?: boolean,\n): {\n  (this: any, ...args: any[]): void;\n  cancel: () =\u003e void;\n};\n```\n\n```ts\nfunction debounce(\n  callback: Fn\u003cany\u003e,\n  delay: number,\n  atBegin?: boolean,\n): {\n  (this: any, ...args: any[]): void;\n  cancel: () =\u003e void;\n};\n```\n\n---\n\n### serialize_map.ts\n\n\u003e See the [Deno Documentation][docs-serialize-map] for this file.\n\n---\n\n### serialize_set.ts\n\n\u003e See the [Deno Documentation][docs-serialize-set] for this file.\n\n---\n\n### state.ts\n\n\u003e See the [Deno Documentation][docs-state] for this file.\n\n---\n\n### type.ts\n\n\u003e See the [Deno Documentation][docs-type] for this file.\n\n---\n\n## License and Copyright Info\n\nMIT © 2022 [**Nicholas Berlette**](https://github.com/nberlette) • MIT ©\n2018-2022 [**the Deno Authors**](https://github.com/denoland) • MIT © 2019-2022\n[**Anthony Fu**](https://github.com/antfu)\n\nAll rights reserved.\n\n\u003e _Apologies to any contributors not included here - email me to have these\n\u003e credits amended with your license/copyright info. Thank you!_\n\n[docs-cache]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/cache.ts\n[docs-http]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/http.ts\n[docs-hash]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/hash.ts\n[docs-collection]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/collection.ts\n[docs-fmt]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/fmt.ts\n[docs-json]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/json.ts\n[docs-log]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/log.ts\n[docs-math]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/math.ts\n[docs-date]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/date.ts\n[docs-memoize]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/memoize.ts\n[docs-serialize-map]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/serialize_map.ts\n[docs-serialize-set]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/serialize_set.ts\n[docs-params]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/params.ts\n[docs-promises]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/promises.ts\n[docs-state]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/state.ts\n[docs-throttle]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/throttle.ts\n[docs-type]: https://doc.deno.land/https://deno.land/x/911@0.1.5/src/type.ts\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeno911%2F911","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeno911%2F911","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeno911%2F911/lists"}