{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/browser.strings.ts",
          "name": "protocolFailed",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-browser-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/browser.strings.ts",
            "label": "configuration/strings/browser.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/browser.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-browser-strings-ts"
          }
        },
        {
          "file": "core/validators/catalog.validator.ts",
          "name": "textAt",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-validators-catalog-validator-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/validators/catalog.validator.ts",
            "label": "core/validators/catalog.validator.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/validators/catalog.validator.ts.md",
            "ref": "anatomy:file-build-scripts-core-validators-catalog-validator-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "settleReply",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 92,
      "name": "protocolError",
      "signature": "const protocolError = function protocolError(method: string, error: Record<string, unknown>): Error {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "protocolError",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        },
        {
          "file": "core/selectors/base.selector.ts",
          "name": "recordAt",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-selectors-base-selector-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/selectors/base.selector.ts",
            "label": "core/selectors/base.selector.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/selectors/base.selector.ts.md",
            "ref": "anatomy:file-build-scripts-core-selectors-base-selector-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "openSession",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 96,
      "name": "settleReply",
      "signature": "const settleReply = function settleReply(pending: Map<number, PendingCall>, parsed: Record<string, unknown>): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/browser.strings.ts",
          "name": "socketClosed",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-browser-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/browser.strings.ts",
            "label": "configuration/strings/browser.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/browser.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-browser-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "openSession",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 112,
      "name": "failPending",
      "signature": "const failPending = function failPending(pending: Map<number, PendingCall>): void {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "devtoolsEndpoint",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 25,
      "name": "socketUrl",
      "signature": "const socketUrl = function socketUrl(port: string, target: string): string {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "readWhenUnlocked",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 33,
      "name": "isLockedFile",
      "signature": "const isLockedFile = function isLockedFile(error: unknown): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "openSession",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 74,
      "name": "opened",
      "signature": "const opened = async function opened(socket: WebSocket): Promise<void> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/browser.strings.ts",
          "name": "consoleEcho",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-browser-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/browser.strings.ts",
            "label": "configuration/strings/browser.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/browser.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-browser-strings-ts"
          }
        },
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "failPending",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        },
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "opened",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        },
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "settleReply",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "callers": [],
      "exported": true,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 131,
      "name": "openSession",
      "signature": "export const openSession = async function openSession(endpoint: string, echoConsole: boolean): Promise<Session> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "isLockedFile",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 37,
      "name": "readWhenUnlocked",
      "signature": "const readWhenUnlocked = function readWhenUnlocked(file: string): string | null {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/validators/catalog.validator.ts",
          "name": "textAt",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-validators-catalog-validator-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/validators/catalog.validator.ts",
            "label": "core/validators/catalog.validator.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/validators/catalog.validator.ts.md",
            "ref": "anatomy:file-build-scripts-core-validators-catalog-validator-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 58,
      "name": "pageIdOf",
      "signature": "const pageIdOf = function pageIdOf(targets: unknown): string | null {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/timers/base.timer.ts",
          "name": "wait",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-timers-base-timer-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/timers/base.timer.ts",
            "label": "core/timers/base.timer.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/timers/base.timer.ts.md",
            "ref": "anatomy:file-build-scripts-core-timers-base-timer-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 65,
      "name": "pollForPort",
      "signature": "const pollForPort = async function pollForPort(profileDir: string, deadline: number): Promise<ActivePort | null> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/browser.strings.ts",
          "name": "notObjectMessage",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-browser-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/browser.strings.ts",
            "label": "configuration/strings/browser.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/browser.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-browser-strings-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 120,
      "name": "parsedMessage",
      "signature": "const parsedMessage = function parsedMessage(event: MessageEvent): Record<string, unknown> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/adapters/browser.adapter.ts",
          "name": "socketUrl",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/browser.adapter.ts",
            "label": "core/adapters/browser.adapter.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.md",
            "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts"
          }
        }
      ],
      "callers": [],
      "exported": true,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 172,
      "name": "devtoolsEndpoint",
      "signature": "export const devtoolsEndpoint = async function devtoolsEndpoint("
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 19,
      "name": "POLL_INTERVAL_MS",
      "signature": "const POLL_INTERVAL_MS = 200;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 20,
      "name": "SEND_TIMEOUT_MS",
      "signature": "const SEND_TIMEOUT_MS = 120_000;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 21,
      "name": "PAGE_TYPE",
      "signature": "const PAGE_TYPE = \"page\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 22,
      "name": "SOCKET_ROOT",
      "signature": "const SOCKET_ROOT = \"/devtools/\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 23,
      "name": "PAGE_TARGET",
      "signature": "const PAGE_TARGET = \"page/\";"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 29,
      "name": "targetOf",
      "signature": "const targetOf = function targetOf(path: string): string {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 48,
      "name": "activePortOf",
      "signature": "const activePortOf = function activePortOf(profileDir: string): ActivePort | null {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 49,
      "name": "file",
      "signature": "const file = join(profileDir, ACTIVE_PORT_FILE);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 50,
      "name": "text",
      "signature": "const text = existsSync(file) ? readWhenUnlocked(file) : null;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 54,
      "name": "[port = \"\", path = \"\"]",
      "signature": "const [port = \"\", path = \"\"] = text.split(\"\\n\").map((line) => line.trim());"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 59,
      "name": "infos",
      "signature": "const infos = isRecord(targets) ? targets[\"targetInfos\"] : null;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 60,
      "name": "records",
      "signature": "const records = Array.isArray(infos) ? infos.filter(isRecord) : [];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "interface_declaration",
      "line": 85,
      "name": "PendingCall",
      "signature": "interface PendingCall {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 98,
      "name": "call",
      "signature": "const call = id === null ? undefined : pending.get(id);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 104,
      "name": "error",
      "signature": "const error = recordAt(parsed, \"error\");"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 132,
      "name": "socket",
      "signature": "const socket = new WebSocket(endpoint);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 133,
      "name": "pending",
      "signature": "const pending = new Map<number, PendingCall>();"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 134,
      "name": "collected",
      "signature": "const collected: ConsoleRecord[] = [];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 135,
      "name": "nextId",
      "signature": "let nextId = 0;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 141,
      "name": "parsed",
      "signature": "const parsed = parsedMessage(event);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 142,
      "name": "record",
      "signature": "const record = EVENT_METHODS.has(textAt(parsed, \"method\") ?? \"\") ? eventRecord(parsed) : null;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 159,
      "name": "id",
      "signature": "const id = nextId;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 161,
      "name": "timer",
      "signature": "const timer = setTimeout(() => {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 176,
      "name": "active",
      "signature": "const active = await pollForPort(profileDir, Date.now() + timeoutMs);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 180,
      "name": "browser",
      "signature": "const browser = await openSession(socketUrl(active.port, targetOf(active.path)), false);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 181,
      "name": "targets",
      "signature": "const targets = await browser.send(\"Target.getTargets\");"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 183,
      "name": "page",
      "signature": "const page = pageIdOf(targets);"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-browser-adapter-ts",
  "language": "typescript",
  "layer": "infrastructure",
  "name": "browser.adapter.ts",
  "path": "core/adapters/browser.adapter.ts",
  "ref": "anatomy:file-build-scripts-core-adapters-browser-adapter-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-adapters",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-adapters",
          "label": "core/adapters",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-adapters.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-adapters"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-browser-strings-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/browser.strings.ts",
          "label": "configuration/strings/browser.strings.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/browser.strings.ts.md",
          "ref": "anatomy:file-build-scripts-configuration-strings-browser-strings-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-selectors-base-selector-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/selectors/base.selector.ts",
          "label": "core/selectors/base.selector.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/selectors/base.selector.ts.md",
          "ref": "anatomy:file-build-scripts-core-selectors-base-selector-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-timers-base-timer-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/timers/base.timer.ts",
          "label": "core/timers/base.timer.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/timers/base.timer.ts.md",
          "ref": "anatomy:file-build-scripts-core-timers-base-timer-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-validators-catalog-validator-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/validators/catalog.validator.ts",
          "label": "core/validators/catalog.validator.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/validators/catalog.validator.ts.md",
          "ref": "anatomy:file-build-scripts-core-validators-catalog-validator-ts"
        }
      ],
      "relation": "uses"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-configuration-strings",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-configuration-strings",
          "label": "configuration/strings",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-configuration-strings.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-configuration-strings"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-adapters",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-adapters",
          "label": "core/adapters",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-adapters.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-adapters"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-selectors",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-selectors",
          "label": "core/selectors",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-selectors.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-selectors"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-timers",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-timers",
          "label": "core/timers",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-timers.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-timers"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-validators",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-validators",
          "label": "core/validators",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-validators.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-validators"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "adapter",
    "subject": "browser",
    "variant": null
  },
  "stats": {
    "bytes": 6674,
    "callable": 14,
    "definitions": 39,
    "edges": 14,
    "exported": 14,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 3,
      "leaf": 3,
      "entry": 6,
      "isolated": 27
    },
    "lines": {
      "blank": 16,
      "code": 169,
      "total": 185
    }
  },
  "summary": "169 lines of code and 39 definitions.",
  "text": "https://banes-lab.com/source/build-scripts/core/adapters/browser.adapter.ts.txt",
  "tree": "build-scripts",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-adapters-diagram-adapter-ts",
      "json": "https://banes-lab.com/json/source/build-scripts/core/adapters/diagram.adapter.ts",
      "label": "core/adapters/diagram.adapter.ts",
      "markdown": "https://banes-lab.com/source/build-scripts/core/adapters/diagram.adapter.ts.md",
      "ref": "anatomy:file-build-scripts-core-adapters-diagram-adapter-ts"
    },
    "previous": null
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/build-scripts/core/adapters",
    "label": "core/adapters",
    "markdown": "https://banes-lab.com/api/source/build-scripts/core/adapters.md",
    "ref": "api:source/build-scripts/core/adapters"
  }
}
