{"version":3,"sources":["../src/inspect.ts"],"sourcesContent":["/**\n * Based on https://github.com/graphql/graphql-js/blob/master/src/jsutils/inspect.js\n */\n\nexport const nodejsCustomInspectSymbol = Symbol.for(\n  \"nodejs.util.inspect.custom\"\n);\nexport default function createInspect(\n  maxArrayLength = 10,\n  maxRecursiveDepth = 2\n) {\n  /**\n   * Used to print values in error messages.\n   */\n  return function inspect(value: any): string {\n    return formatValue(value, []);\n  };\n\n  function formatValue(value: any, seenValues: any[]) {\n    switch (typeof value) {\n      case \"string\":\n        return JSON.stringify(value);\n      case \"function\":\n        return value.name ? `[function ${value.name}]` : \"[function]\";\n      case \"object\":\n        return formatObjectValue(value, seenValues);\n      default:\n        return String(value);\n    }\n  }\n\n  function formatObjectValue(value: any, previouslySeenValues: any[]): string {\n    if (previouslySeenValues.indexOf(value) !== -1) {\n      return \"[Circular]\";\n    }\n    const seenValues = [...previouslySeenValues, value];\n\n    if (value) {\n      const customInspectFn = getCustomFn(value);\n\n      if (customInspectFn) {\n        // $FlowFixMe(>=0.90.0)\n        const customValue = customInspectFn.call(value);\n\n        // check for infinite recursion\n        if (customValue !== value) {\n          return typeof customValue === \"string\"\n            ? customValue\n            : formatValue(customValue, seenValues);\n        }\n      } else if (Array.isArray(value)) {\n        return formatArray(value, seenValues);\n      }\n\n      return formatObject(value, seenValues);\n    }\n\n    return String(value);\n  }\n\n  function formatObject(\n    object: { [key: string]: string },\n    seenValues: any[]\n  ): string {\n    const keys = Object.keys(object);\n    if (keys.length === 0) {\n      return \"{}\";\n    }\n\n    if (seenValues.length > maxRecursiveDepth) {\n      return \"[\" + getObjectTag(object) + \"]\";\n    }\n\n    const properties = keys.map((key) => {\n      const value = formatValue(object[key], seenValues);\n      return key + \": \" + value;\n    });\n\n    return \"{ \" + properties.join(\", \") + \" }\";\n  }\n\n  function formatArray(array: any[], seenValues: any[]) {\n    if (array.length === 0) {\n      return \"[]\";\n    }\n\n    if (seenValues.length > maxRecursiveDepth) {\n      return \"[Array]\";\n    }\n\n    const len = Math.min(maxArrayLength, array.length);\n    const remaining = array.length - len;\n    const items = [];\n\n    for (let i = 0; i < len; ++i) {\n      items.push(formatValue(array[i], seenValues));\n    }\n\n    if (remaining === 1) {\n      items.push(\"... 1 more item\");\n    } else if (remaining > 1) {\n      items.push(`... ${remaining} more items`);\n    }\n\n    return \"[\" + items.join(\", \") + \"]\";\n  }\n\n  function getCustomFn(object: any) {\n    const customInspectFn = object[String(nodejsCustomInspectSymbol)];\n\n    if (typeof customInspectFn === \"function\") {\n      return customInspectFn;\n    }\n\n    if (typeof object.inspect === \"function\") {\n      return object.inspect;\n    }\n  }\n\n  function getObjectTag(object: any) {\n    const tag = Object.prototype.toString\n      .call(object)\n      .replace(/^\\[object /, \"\")\n      .replace(/]$/, \"\");\n\n    if (tag === \"Object\" && typeof object.constructor === \"function\") {\n      const name = object.constructor.name;\n      if (typeof name === \"string\") {\n        return name;\n      }\n    }\n\n    return tag;\n  }\n}\n"],"mappings":"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","names":[]}