{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "refuseDuplicateGivers",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        },
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "refuseMissing",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        },
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "wavesFrom",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "runPhase",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 84,
      "name": "wavesOf",
      "signature": "export const wavesOf = function wavesOf(steps: readonly SiteStep[], phase: SitePhase, mode: SiteMode): Waves {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/loaders/folder.loader.ts",
          "name": "importFolder",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-loaders-folder-loader-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/loaders/folder.loader.ts",
            "label": "core/loaders/folder.loader.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/loaders/folder.loader.ts.md",
            "ref": "anatomy:file-build-scripts-core-loaders-folder-loader-ts"
          }
        },
        {
          "file": "core/registries/step.registry.ts",
          "name": "registeredSteps",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-registries-step-registry-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/registries/step.registry.ts",
            "label": "core/registries/step.registry.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/registries/step.registry.ts.md",
            "ref": "anatomy:file-build-scripts-core-registries-step-registry-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/plugins/site.plugin.ts",
          "name": "configResolved",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-plugins-site-plugin-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/plugins/site.plugin.ts",
            "label": "core/plugins/site.plugin.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/plugins/site.plugin.ts.md",
            "ref": "anatomy:file-build-scripts-core-plugins-site-plugin-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 33,
      "name": "discoverSteps",
      "signature": "export const discoverSteps = async function discoverSteps(): Promise<readonly SiteStep[]> {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/site.strings.ts",
          "name": "stepLine",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
            "label": "configuration/strings/site.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
          }
        },
        {
          "file": "core/plugins/site.plugin.ts",
          "name": "write",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-plugins-site-plugin-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/plugins/site.plugin.ts",
            "label": "core/plugins/site.plugin.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/plugins/site.plugin.ts.md",
            "ref": "anatomy:file-build-scripts-core-plugins-site-plugin-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "runWaves",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 137,
      "name": "runWave",
      "signature": "const runWave = async function runWave("
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "runWaves",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        },
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "wavesOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/plugins/site.plugin.ts",
          "name": "phase",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-plugins-site-plugin-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/plugins/site.plugin.ts",
            "label": "core/plugins/site.plugin.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/plugins/site.plugin.ts.md",
            "ref": "anatomy:file-build-scripts-core-plugins-site-plugin-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 162,
      "name": "runPhase",
      "signature": "export const runPhase = async function runPhase("
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/site.strings.ts",
          "name": "duplicateGiver",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
            "label": "configuration/strings/site.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "wavesOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 38,
      "name": "refuseDuplicateGivers",
      "signature": "const refuseDuplicateGivers = function refuseDuplicateGivers(steps: readonly SiteStep[]): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/site.strings.ts",
          "name": "missingNeed",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
            "label": "configuration/strings/site.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "wavesOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 55,
      "name": "refuseMissing",
      "signature": "const refuseMissing = function refuseMissing(steps: readonly SiteStep[], known: ReadonlySet<string>): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/site.strings.ts",
          "name": "stuckSteps",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
            "label": "configuration/strings/site.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "wavesOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 65,
      "name": "wavesFrom",
      "signature": "const wavesFrom = function wavesFrom(pending: readonly SiteStep[], available: ReadonlySet<string>): Waves {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/site.strings.ts",
          "name": "undeclaredGive",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
            "label": "configuration/strings/site.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "finish",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 93,
      "name": "refuseUndeclared",
      "signature": "const refuseUndeclared = function refuseUndeclared(step: SiteStep, outcome: SiteOutcome): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "configuration/strings/site.strings.ts",
          "name": "cachedGive",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
            "label": "configuration/strings/site.strings.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
            "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "finish",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 101,
      "name": "refuseCachedGives",
      "signature": "const refuseCachedGives = function refuseCachedGives(step: SiteStep, outcome: SiteOutcome): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "runWave",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "runPhase",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 154,
      "name": "runWaves",
      "signature": "const runWaves = async function runWaves("
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "refuseCachedGives",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        },
        {
          "file": "core/pipelines/site.pipeline.ts",
          "name": "refuseUndeclared",
          "source": {
            "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
            "json": "https://banes-lab.com/json/source/build-scripts/core/pipelines/site.pipeline.ts",
            "label": "core/pipelines/site.pipeline.ts",
            "markdown": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.md",
            "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 121,
      "name": "finish",
      "signature": "const finish = async function finish(step: SiteStep, state: SiteState, ledger: FingerprintIndex): Promise<Finished> {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 20,
      "name": "STEP_SUFFIX",
      "signature": "const STEP_SUFFIX = \".step.ts\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 21,
      "name": "MEGABYTE",
      "signature": "const MEGABYTE = 1_048_576;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 22,
      "name": "START_PHASE",
      "signature": "const START_PHASE: SitePhase = \"start\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 23,
      "name": "LEDGER_NAME",
      "signature": "const LEDGER_NAME = \"site-steps\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "type_alias_declaration",
      "line": 25,
      "name": "Waves",
      "signature": "type Waves = readonly (readonly SiteStep[])[];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "interface_declaration",
      "line": 27,
      "name": "Finished",
      "signature": "interface Finished {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 39,
      "name": "givers",
      "signature": "const givers = new Map<string, string>();"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 42,
      "name": "first",
      "signature": "const first = givers.get(key);"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 51,
      "name": "inMode",
      "signature": "const inMode = function inMode(steps: readonly SiteStep[], mode: SiteMode, phase: SitePhase): readonly SiteStep[] {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 58,
      "name": "missing",
      "signature": "const missing = step.needs.find((key) => !given.has(key));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 69,
      "name": "ready",
      "signature": "const ready = pending.filter((step) => step.needs.every((key) => available.has(key)));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 73,
      "name": "next",
      "signature": "const next = new Set([...available, ...ready.flatMap((step) => step.gives)]);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 74,
      "name": "wave",
      "signature": "const wave = ready.toSorted((left, right) => left.name.localeCompare(right.name));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 86,
      "name": "earlier",
      "signature": "const earlier = phase === START_PHASE ? [] : inMode(steps, mode, START_PHASE).flatMap((step) => step.gives);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 87,
      "name": "known",
      "signature": "const known = new Set(earlier);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 88,
      "name": "pending",
      "signature": "const pending = inMode(steps, mode, phase);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 94,
      "name": "declared",
      "signature": "const declared = new Set(step.gives);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 95,
      "name": "extra",
      "signature": "const extra = Object.keys(outcome.gives).find((key) => !declared.has(key));"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 108,
      "name": "cacheDecision",
      "signature": "export const cacheDecision = function cacheDecision("
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 116,
      "name": "key",
      "signature": "const key = step.cache.key(state);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 117,
      "name": "present",
      "signature": "const present = step.cache.outputs.every((output) => existsSync(absolutePath(output)));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 122,
      "name": "started",
      "signature": "const started = performance.now();"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 123,
      "name": "decision",
      "signature": "const decision = cacheDecision(step, state, ledger);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 125,
      "name": "skipped",
      "signature": "const skipped = { gives: {}, line: skippedLine(step.name) };"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 128,
      "name": "outcome",
      "signature": "const outcome = await step.run(state);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 142,
      "name": "ledger",
      "signature": "const ledger = createFingerprintIndex({ file: cacheFile(LEDGER_NAME) });"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 143,
      "name": "finished",
      "signature": "const finished = await Promise.all(wave.map(async (step) => finish(step, state, ledger)));"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 150,
      "name": "given",
      "signature": "const given = Object.fromEntries(finished.flatMap((done) => Object.entries(done.outcome.gives)));"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-pipelines-site-pipeline-ts",
  "language": "typescript",
  "layer": "processing",
  "name": "site.pipeline.ts",
  "path": "core/pipelines/site.pipeline.ts",
  "ref": "anatomy:file-build-scripts-core-pipelines-site-pipeline-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-pipelines",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-pipelines",
          "label": "core/pipelines",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-pipelines.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-pipelines"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-configuration-strings-site-strings-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/configuration/strings/site.strings.ts",
          "label": "configuration/strings/site.strings.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/configuration/strings/site.strings.ts.md",
          "ref": "anatomy:file-build-scripts-configuration-strings-site-strings-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-loaders-folder-loader-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/loaders/folder.loader.ts",
          "label": "core/loaders/folder.loader.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/loaders/folder.loader.ts.md",
          "ref": "anatomy:file-build-scripts-core-loaders-folder-loader-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-plugins-site-plugin-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/plugins/site.plugin.ts",
          "label": "core/plugins/site.plugin.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/plugins/site.plugin.ts.md",
          "ref": "anatomy:file-build-scripts-core-plugins-site-plugin-ts"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-registries-step-registry-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/registries/step.registry.ts",
          "label": "core/registries/step.registry.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/registries/step.registry.ts.md",
          "ref": "anatomy:file-build-scripts-core-registries-step-registry-ts"
        }
      ],
      "relation": "uses"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-plugins-site-plugin-ts",
          "json": "https://banes-lab.com/json/source/build-scripts/core/plugins/site.plugin.ts",
          "label": "core/plugins/site.plugin.ts",
          "markdown": "https://banes-lab.com/source/build-scripts/core/plugins/site.plugin.ts.md",
          "ref": "anatomy:file-build-scripts-core-plugins-site-plugin-ts"
        }
      ],
      "relation": "used-by"
    },
    {
      "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-loaders",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-loaders",
          "label": "core/loaders",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-loaders.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-loaders"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-pipelines",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-pipelines",
          "label": "core/pipelines",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-pipelines.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-pipelines"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-plugins",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-plugins",
          "label": "core/plugins",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-plugins.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-plugins"
        },
        {
          "href": "https://banes-lab.com/anatomy/build-scripts#folder-build-scripts-core-registries",
          "json": "https://banes-lab.com/json/anatomy/build-scripts/folder-build-scripts-core-registries",
          "label": "core/registries",
          "markdown": "https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-registries.md",
          "ref": "chapter:/anatomy/build-scripts#folder-build-scripts-core-registries"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "pipeline",
    "subject": "site",
    "variant": null
  },
  "stats": {
    "bytes": 6293,
    "callable": 13,
    "definitions": 39,
    "edges": 17,
    "exported": 9,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 10,
      "entry": 1,
      "isolated": 28
    },
    "lines": {
      "blank": 16,
      "code": 153,
      "total": 169
    }
  },
  "summary": "153 lines of code and 39 definitions.",
  "text": "https://banes-lab.com/source/build-scripts/core/pipelines/site.pipeline.ts.txt",
  "tree": "build-scripts",
  "siblings": {
    "next": null,
    "previous": null
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/build-scripts/core/pipelines",
    "label": "core/pipelines",
    "markdown": "https://banes-lab.com/api/source/build-scripts/core/pipelines.md",
    "ref": "api:source/build-scripts/core/pipelines"
  }
}
