{"mappings":";AAiDA,IAAMA,EAAM,CAAC,EAAE,eAcR,SAASC,EAAOC,EAAKC,EAAS,CACnC,IAAMC,EAAWD,GAAW,CAAC,EA8B7B,SAASE,EAAIC,KAAUC,EAAY,CAEjC,IAAIC,EAAKH,EAAI,QACPI,EAAWJ,EAAI,SAErB,GAAIC,GAASN,EAAI,KAAKM,EAAOJ,CAAG,EAAG,CAEjC,IAAMQ,EAAK,OAAOJ,EAAMJ,CAAG,CAAC,EAE5BM,EAAKR,EAAI,KAAKS,EAAUC,CAAE,EAAID,EAASC,CAAE,EAAIL,EAAI,OACnD,CAEA,GAAIG,EACF,OAAOA,EAAG,KAAK,KAAMF,EAAO,GAAGC,CAAU,CAE7C,CAEA,OAAAF,EAAI,SAAWD,EAAS,UAAY,CAAC,EACrCC,EAAI,QAAUD,EAAS,QACvBC,EAAI,QAAUD,EAAS,QAGhBC,CACT","names":["own","zwitch","key","options","settings","one","value","parameters","fn","handlers","id"],"sources":["../esm/npm/zwitch@2.0.4/node_modules/zwitch/index.js"],"sourcesContent":["/**\n * @callback Handler\n *   Handle a value, with a certain ID field set to a certain value.\n *   The ID field is passed to `zwitch`, and it’s value is this function’s\n *   place on the `handlers` record.\n * @param {...any} parameters\n *   Arbitrary parameters passed to the zwitch.\n *   The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n *   Anything!\n */\n\n/**\n * @callback UnknownHandler\n *   Handle values that do have a certain ID field, but it’s set to a value\n *   that is not listed in the `handlers` record.\n * @param {unknown} value\n *   An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n *   Arbitrary parameters passed to the zwitch.\n * @returns {any}\n *   Anything!\n */\n\n/**\n * @callback InvalidHandler\n *   Handle values that do not have a certain ID field.\n * @param {unknown} value\n *   Any unknown value.\n * @param {...any} rest\n *   Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n *   This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record\u003cstring, Handler\u003e} [Handlers=Record\u003cstring, Handler\u003e]\n * @typedef Options\n *   Configuration (required).\n * @property {Invalid} [invalid]\n *   Handler to use for invalid values.\n * @property {Unknown} [unknown]\n *   Handler to use for unknown values.\n * @property {Handlers} [handlers]\n *   Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record\u003cstring, Handler\u003e} [Handlers=Record\u003cstring, Handler\u003e]\n * @param {string} key\n *   Field to switch on.\n * @param {Options\u003cInvalid, Unknown, Handlers\u003e} [options]\n *   Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters\u003cHandlers[keyof Handlers]\u003e): ReturnType\u003cHandlers[keyof Handlers]\u003e, (...parameters: Parameters\u003cUnknown\u003e): ReturnType\u003cUnknown\u003e}}\n */\nexport function zwitch(key, options) {\n  const settings = options || {}\n\n  /**\n   * Handle one value.\n   *\n   * Based on the bound `key`, a respective handler will be called.\n   * If `value` is not an object, or doesn’t have a `key` property, the special\n   * “invalid” handler will be called.\n   * If `value` has an unknown `key`, the special “unknown” handler will be\n   * called.\n   *\n   * All arguments, and the context object, are passed through to the handler,\n   * and it’s result is returned.\n   *\n   * @this {unknown}\n   *   Any context object.\n   * @param {unknown} [value]\n   *   Any value.\n   * @param {...unknown} parameters\n   *   Arbitrary parameters passed to the zwitch.\n   * @property {Handler} invalid\n   *   Handle for values that do not have a certain ID field.\n   * @property {Handler} unknown\n   *   Handle values that do have a certain ID field, but it’s set to a value\n   *   that is not listed in the `handlers` record.\n   * @property {Handlers} handlers\n   *   Record of handlers.\n   * @returns {unknown}\n   *   Anything.\n   */\n  function one(value, ...parameters) {\n    /** @type {Handler|undefined} */\n    let fn = one.invalid\n    const handlers = one.handlers\n\n    if (value \u0026\u0026 own.call(value, key)) {\n      // @ts-expect-error Indexable.\n      const id = String(value[key])\n      // @ts-expect-error Indexable.\n      fn = own.call(handlers, id) ? handlers[id] : one.unknown\n    }\n\n    if (fn) {\n      return fn.call(this, value, ...parameters)\n    }\n  }\n\n  one.handlers = settings.handlers || {}\n  one.invalid = settings.invalid\n  one.unknown = settings.unknown\n\n  // @ts-expect-error: matches!\n  return one\n}\n"],"version":3}
