{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "hasLetter",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        },
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "withoutTags",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        },
        {
          "file": "shared/analyzers/sentence.analyzer.ts",
          "name": "sentenceWordsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-sentence-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/sentence.analyzer.ts",
            "label": "shared/analyzers/sentence.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/sentence.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-sentence-analyzer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "restates",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        },
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "restates",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 74,
      "name": "contentWordsOf",
      "signature": "export const contentWordsOf = function contentWordsOf(text: string): ReadonlySet<string> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "findingsAt",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "rules/eslint/strings-composition.eslint.rule.ts",
          "name": "check",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-strings-composition-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/strings-composition.eslint.rule.ts",
            "label": "rules/eslint/strings-composition.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/strings-composition.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-strings-composition-eslint-rule-ts"
          }
        },
        {
          "file": "shared/analyzers/document.analyzer.ts",
          "name": "documentFindingsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-document-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/document.analyzer.ts",
            "label": "shared/analyzers/document.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/document.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-document-analyzer-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 131,
      "name": "compositionFindingsOf",
      "signature": "export const compositionFindingsOf = function compositionFindingsOf(text: string): CompositionFinding[] {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "contentWordsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        },
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "contentWordsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        },
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "overlapOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "fieldRestates",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 90,
      "name": "restates",
      "signature": "export const restates = function restates(left: string, right: string, threshold = SENTENCE_OVERLAP): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "contentWordsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 24,
      "name": "withoutTags",
      "signature": "export const withoutTags = function withoutTags(text: string): string {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "contentWordsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 65,
      "name": "hasLetter",
      "signature": "const hasLetter = function hasLetter(word: string): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "restates",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 82,
      "name": "overlapOf",
      "signature": "export const overlapOf = function overlapOf(left: ReadonlySet<string>, right: ReadonlySet<string>): number {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "compositionFindingsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 107,
      "name": "findingsAt",
      "signature": "const findingsAt = function findingsAt(sentences: readonly string[], at: number): CompositionFinding[] {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "shared/analyzers/composition.analyzer.ts",
          "name": "restates",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
            "json": "https://banes-lab.com/json/source/governance/shared/analyzers/composition.analyzer.ts",
            "label": "shared/analyzers/composition.analyzer.ts",
            "markdown": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.md",
            "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts"
          }
        }
      ],
      "callers": [],
      "exported": true,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 94,
      "name": "fieldRestates",
      "signature": "export const fieldRestates = function fieldRestates(left: string, right: string): boolean {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 19,
      "name": "TAG_OPEN",
      "signature": "const TAG_OPEN = \"<\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 20,
      "name": "TAG_CLOSE",
      "signature": "const TAG_CLOSE = \">\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 21,
      "name": "SPACE",
      "signature": "const SPACE = \" \";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 22,
      "name": "DOUBLE_PLURAL",
      "signature": "const DOUBLE_PLURAL = \"ss\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 25,
      "name": "output",
      "signature": "let output = \"\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 26,
      "name": "inside",
      "signature": "let inside = false;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 28,
      "name": "opens",
      "signature": "const opens = char === TAG_OPEN;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 29,
      "name": "closes",
      "signature": "const closes: boolean = !opens && inside && char === TAG_CLOSE;"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 37,
      "name": "opensWith",
      "signature": "const opensWith = function opensWith(words: readonly string[], phrase: readonly string[]): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 41,
      "name": "holds",
      "signature": "const holds = function holds(words: readonly string[], phrase: readonly string[]): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 45,
      "name": "labelsOnly",
      "signature": "const labelsOnly = function labelsOnly(words: readonly string[], phrase: readonly string[]): boolean {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 46,
      "name": "labeling",
      "signature": "const labeling = LABELING_OPENERS.some((opener) => opener.length === phrase.length && opensWith(phrase, opener));"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 50,
      "name": "commentOpenerOf",
      "signature": "export const commentOpenerOf = function commentOpenerOf(words: readonly string[]): string | null {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 55,
      "name": "fillerOf",
      "signature": "export const fillerOf = function fillerOf(words: readonly string[]): string | null {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 60,
      "name": "partyOf",
      "signature": "export const partyOf = function partyOf(words: readonly string[]): string | null {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 61,
      "name": "hit",
      "signature": "const hit = INDEFINITE_PARTIES.find((phrase) => holds(words, phrase));"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 69,
      "name": "stemOf",
      "signature": "const stemOf = function stemOf(word: string): string {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 70,
      "name": "plural",
      "signature": "const plural = word.length >= STEM_MIN_LENGTH && word.endsWith(PLURAL_MARK) && !word.endsWith(DOUBLE_PLURAL);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 83,
      "name": "smaller",
      "signature": "const smaller = Math.min(left.size, right.size);"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 98,
      "name": "withoutQuotes",
      "signature": "export const withoutQuotes = function withoutQuotes(text: string): string {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 99,
      "name": "open",
      "signature": "const open = text.indexOf(QUOTE_OPEN);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 100,
      "name": "close",
      "signature": "const close = open === -1 ? -1 : text.indexOf(QUOTE_CLOSE, open);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 108,
      "name": "sentence",
      "signature": "const sentence = sentences[at] ?? \"\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 109,
      "name": "words",
      "signature": "const words = sentenceWordsOf(withoutTags(sentence));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 110,
      "name": "found",
      "signature": "const found: CompositionFinding[] = [];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 111,
      "name": "opener",
      "signature": "const opener = at === 0 ? null : commentOpenerOf(words);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 115,
      "name": "unquoted",
      "signature": "const unquoted = sentenceWordsOf(withoutTags(withoutQuotes(sentence)));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 116,
      "name": "filler",
      "signature": "const filler = fillerOf(unquoted);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 120,
      "name": "party",
      "signature": "const party = partyOf(unquoted);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 124,
      "name": "earlier",
      "signature": "const earlier = sentences.slice(0, at).find((previous) => restates(previous, sentence));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 132,
      "name": "sentences",
      "signature": "const sentences = sentencesOf(text);"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-composition-analyzer-ts",
  "language": "typescript",
  "layer": "processing",
  "name": "composition.analyzer.ts",
  "path": "shared/analyzers/composition.analyzer.ts",
  "ref": "anatomy:file-governance-shared-analyzers-composition-analyzer-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#folder-governance-shared-analyzers",
          "json": "https://banes-lab.com/json/anatomy/governance/folder-governance-shared-analyzers",
          "label": "shared/analyzers",
          "markdown": "https://banes-lab.com/anatomy/governance/folder-governance-shared-analyzers.md",
          "ref": "chapter:/anatomy/governance#folder-governance-shared-analyzers"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-sentence-analyzer-ts",
          "json": "https://banes-lab.com/json/source/governance/shared/analyzers/sentence.analyzer.ts",
          "label": "shared/analyzers/sentence.analyzer.ts",
          "markdown": "https://banes-lab.com/source/governance/shared/analyzers/sentence.analyzer.ts.md",
          "ref": "anatomy:file-governance-shared-analyzers-sentence-analyzer-ts"
        }
      ],
      "relation": "uses"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-strings-composition-eslint-rule-ts",
          "json": "https://banes-lab.com/json/source/governance/rules/eslint/strings-composition.eslint.rule.ts",
          "label": "rules/eslint/strings-composition.eslint.rule.ts",
          "markdown": "https://banes-lab.com/source/governance/rules/eslint/strings-composition.eslint.rule.ts.md",
          "ref": "anatomy:file-governance-rules-eslint-strings-composition-eslint-rule-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-document-analyzer-ts",
          "json": "https://banes-lab.com/json/source/governance/shared/analyzers/document.analyzer.ts",
          "label": "shared/analyzers/document.analyzer.ts",
          "markdown": "https://banes-lab.com/source/governance/shared/analyzers/document.analyzer.ts.md",
          "ref": "anatomy:file-governance-shared-analyzers-document-analyzer-ts"
        }
      ],
      "relation": "used-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#folder-governance-rules-eslint",
          "json": "https://banes-lab.com/json/anatomy/governance/folder-governance-rules-eslint",
          "label": "rules/eslint",
          "markdown": "https://banes-lab.com/anatomy/governance/folder-governance-rules-eslint.md",
          "ref": "chapter:/anatomy/governance#folder-governance-rules-eslint"
        },
        {
          "href": "https://banes-lab.com/anatomy/governance#folder-governance-shared-analyzers",
          "json": "https://banes-lab.com/json/anatomy/governance/folder-governance-shared-analyzers",
          "label": "shared/analyzers",
          "markdown": "https://banes-lab.com/anatomy/governance/folder-governance-shared-analyzers.md",
          "ref": "chapter:/anatomy/governance#folder-governance-shared-analyzers"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "analyzer",
    "subject": "composition",
    "variant": null
  },
  "stats": {
    "bytes": 5173,
    "callable": 16,
    "definitions": 39,
    "edges": 8,
    "exported": 19,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 3,
      "leaf": 4,
      "entry": 1,
      "isolated": 31
    },
    "lines": {
      "blank": 17,
      "code": 117,
      "total": 134
    }
  },
  "summary": "117 lines of code and 39 definitions.",
  "text": "https://banes-lab.com/source/governance/shared/analyzers/composition.analyzer.ts.txt",
  "tree": "governance",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-diagram-analyzer-ts",
      "json": "https://banes-lab.com/json/source/governance/shared/analyzers/diagram.analyzer.ts",
      "label": "shared/analyzers/diagram.analyzer.ts",
      "markdown": "https://banes-lab.com/source/governance/shared/analyzers/diagram.analyzer.ts.md",
      "ref": "anatomy:file-governance-shared-analyzers-diagram-analyzer-ts"
    },
    "previous": {
      "href": "https://banes-lab.com/anatomy/governance#file-governance-shared-analyzers-check-analyzer-ts",
      "json": "https://banes-lab.com/json/source/governance/shared/analyzers/check.analyzer.ts",
      "label": "shared/analyzers/check.analyzer.ts",
      "markdown": "https://banes-lab.com/source/governance/shared/analyzers/check.analyzer.ts.md",
      "ref": "anatomy:file-governance-shared-analyzers-check-analyzer-ts"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/governance/shared/analyzers",
    "label": "shared/analyzers",
    "markdown": "https://banes-lab.com/api/source/governance/shared/analyzers.md",
    "ref": "api:source/governance/shared/analyzers"
  }
}
