{
  "definitions": [
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "indexRules",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "indexRules",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "indexRules",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 25,
      "name": "ensureIn",
      "signature": "const ensureIn = function ensureIn<T>(map: Map<string, T>, key: string, make: () => T): T {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "buildIndices",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "buildIndices",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 21,
      "name": "indexById",
      "signature": "const indexById = function indexById<T extends { id: string }>(items: T[]): Map<string, T> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/quality.strings.ts",
          "name": "duplicateConcern",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-configuration-strings-quality-strings-ts",
            "json": "https://banes-lab.com/json/source/quality/configuration/strings/quality.strings.ts",
            "label": "configuration/strings/quality.strings.ts",
            "markdown": "https://banes-lab.com/source/quality/configuration/strings/quality.strings.ts.md",
            "ref": "anatomy:file-quality-configuration-strings-quality-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "buildIndices",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 31,
      "name": "indexConcerns",
      "signature": "const indexConcerns = function indexConcerns(concerns: QualityConcern[], logger?: Logger): Map<string, QualityConcern> {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "createQualityRelations",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 94,
      "name": "resolveImpl",
      "signature": "const resolveImpl = function resolveImpl(indices: Indices, concernIds: string[], logger?: Logger): ResolveResult {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "createQualityRelations",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 118,
      "name": "validateImpl",
      "signature": "const validateImpl = function validateImpl(indices: Indices): OntologyIssues {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "createQualityRelations",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 129,
      "name": "ecosystemsOf",
      "signature": "const ecosystemsOf = function ecosystemsOf(rules: QualityRule[]): string[] {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "ecosystemsOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "resolveImpl",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "validateImpl",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/predicates/concern.predicate.ts",
          "name": "matchesFilter",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-predicates-concern-predicate-ts",
            "json": "https://banes-lab.com/json/source/quality/core/predicates/concern.predicate.ts",
            "label": "core/predicates/concern.predicate.ts",
            "markdown": "https://banes-lab.com/source/quality/core/predicates/concern.predicate.ts.md",
            "ref": "anatomy:file-quality-core-predicates-concern-predicate-ts"
          }
        }
      ],
      "callers": [],
      "exported": true,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 133,
      "name": "createQualityRelations",
      "signature": "export const createQualityRelations = function createQualityRelations("
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "ensureIn",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "ensureIn",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "ensureIn",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 46,
      "name": "indexRules",
      "signature": "const indexRules = function indexRules(rules: QualityRule[]): RuleIndices {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/factories/quality.factory.ts",
          "name": "indexById",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "indexById",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        },
        {
          "file": "core/factories/quality.factory.ts",
          "name": "indexConcerns",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
            "json": "https://banes-lab.com/json/source/quality/core/factories/quality.factory.ts",
            "label": "core/factories/quality.factory.ts",
            "markdown": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.md",
            "ref": "anatomy:file-quality-core-factories-quality-factory-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 64,
      "name": "buildIndices",
      "signature": "const buildIndices = function buildIndices(data: QualityData, logger?: Logger): Indices {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/quality.strings.ts",
          "name": "unknownResolvedConcern",
          "source": {
            "href": "https://banes-lab.com/anatomy/quality#file-quality-configuration-strings-quality-strings-ts",
            "json": "https://banes-lab.com/json/source/quality/configuration/strings/quality.strings.ts",
            "label": "configuration/strings/quality.strings.ts",
            "markdown": "https://banes-lab.com/source/quality/configuration/strings/quality.strings.ts.md",
            "ref": "anatomy:file-quality-configuration-strings-quality-strings-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 81,
      "name": "concernContribution",
      "signature": "const concernContribution = function concernContribution("
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "interface_declaration",
      "line": 15,
      "name": "ConcernContribution",
      "signature": "interface ConcernContribution {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 26,
      "name": "value",
      "signature": "const value = map.get(key) ?? make();"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 32,
      "name": "map",
      "signature": "const map = new Map<string, QualityConcern>();"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 47,
      "name": "idx",
      "signature": "const idx: RuleIndices = {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 65,
      "name": "concerns",
      "signature": "const concerns = data.concerns.map((record): QualityConcern => ({ ...record, id: record.name }));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 66,
      "name": "rules",
      "signature": "const rules = data.rules.map((record): QualityRule => ({ ...record, id: record.name }));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 67,
      "name": "tools",
      "signature": "const tools = data.tools.map((record): QualityTool => ({ ...record, id: record.name }));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 68,
      "name": "ruleIndices",
      "signature": "const ruleIndices = indexRules(rules);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 86,
      "name": "concern",
      "signature": "const concern = indices.byConcern.get(id);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 95,
      "name": "contributions",
      "signature": "const contributions = concernIds"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 98,
      "name": "allRules",
      "signature": "const allRules = contributions.flatMap((contribution) => contribution.ruleGroup);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 99,
      "name": "touched",
      "signature": "const touched = [...new Set(allRules.map((rule) => rule.tool))].sort((a, b) => a.localeCompare(b));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 136,
      "name": "{ logger }",
      "signature": "const { logger } = options;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 137,
      "name": "indices",
      "signature": "const indices = buildIndices(options.data ?? loadQualityData(), logger);"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-quality-factory-ts",
  "language": "typescript",
  "layer": "infrastructure",
  "name": "quality.factory.ts",
  "path": "core/factories/quality.factory.ts",
  "ref": "anatomy:file-quality-core-factories-quality-factory-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/quality#folder-quality-core-factories",
          "json": "https://banes-lab.com/json/anatomy/quality/folder-quality-core-factories",
          "label": "core/factories",
          "markdown": "https://banes-lab.com/anatomy/quality/folder-quality-core-factories.md",
          "ref": "chapter:/anatomy/quality#folder-quality-core-factories"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/quality#file-quality-configuration-strings-quality-strings-ts",
          "json": "https://banes-lab.com/json/source/quality/configuration/strings/quality.strings.ts",
          "label": "configuration/strings/quality.strings.ts",
          "markdown": "https://banes-lab.com/source/quality/configuration/strings/quality.strings.ts.md",
          "ref": "anatomy:file-quality-configuration-strings-quality-strings-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/quality#file-quality-core-predicates-concern-predicate-ts",
          "json": "https://banes-lab.com/json/source/quality/core/predicates/concern.predicate.ts",
          "label": "core/predicates/concern.predicate.ts",
          "markdown": "https://banes-lab.com/source/quality/core/predicates/concern.predicate.ts.md",
          "ref": "anatomy:file-quality-core-predicates-concern-predicate-ts"
        }
      ],
      "relation": "uses"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/quality#folder-quality-configuration-strings",
          "json": "https://banes-lab.com/json/anatomy/quality/folder-quality-configuration-strings",
          "label": "configuration/strings",
          "markdown": "https://banes-lab.com/anatomy/quality/folder-quality-configuration-strings.md",
          "ref": "chapter:/anatomy/quality#folder-quality-configuration-strings"
        },
        {
          "href": "https://banes-lab.com/anatomy/quality#folder-quality-core-factories",
          "json": "https://banes-lab.com/json/anatomy/quality/folder-quality-core-factories",
          "label": "core/factories",
          "markdown": "https://banes-lab.com/anatomy/quality/folder-quality-core-factories.md",
          "ref": "chapter:/anatomy/quality#folder-quality-core-factories"
        },
        {
          "href": "https://banes-lab.com/anatomy/quality#folder-quality-core-predicates",
          "json": "https://banes-lab.com/json/anatomy/quality/folder-quality-core-predicates",
          "label": "core/predicates",
          "markdown": "https://banes-lab.com/anatomy/quality/folder-quality-core-predicates.md",
          "ref": "chapter:/anatomy/quality#folder-quality-core-predicates"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "factory",
    "subject": "quality",
    "variant": null
  },
  "stats": {
    "bytes": 6591,
    "callable": 10,
    "definitions": 24,
    "edges": 12,
    "exported": 3,
    "files": 1,
    "findings": {},
    "flows": {
      "leaf": 5,
      "relay": 1,
      "entry": 4,
      "isolated": 14
    },
    "lines": {
      "blank": 11,
      "code": 143,
      "total": 154
    }
  },
  "summary": "143 lines of code and 24 definitions.",
  "text": "https://banes-lab.com/source/quality/core/factories/quality.factory.ts.txt",
  "tree": "quality",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-tool-factory-ts",
      "json": "https://banes-lab.com/json/source/quality/core/factories/tool.factory.ts",
      "label": "core/factories/tool.factory.ts",
      "markdown": "https://banes-lab.com/source/quality/core/factories/tool.factory.ts.md",
      "ref": "anatomy:file-quality-core-factories-tool-factory-ts"
    },
    "previous": {
      "href": "https://banes-lab.com/anatomy/quality#file-quality-core-factories-finding-factory-ts",
      "json": "https://banes-lab.com/json/source/quality/core/factories/finding.factory.ts",
      "label": "core/factories/finding.factory.ts",
      "markdown": "https://banes-lab.com/source/quality/core/factories/finding.factory.ts.md",
      "ref": "anatomy:file-quality-core-factories-finding-factory-ts"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/quality/core/factories",
    "label": "core/factories",
    "markdown": "https://banes-lab.com/api/source/quality/core/factories.md",
    "ref": "api:source/quality/core/factories"
  }
}
