# core/coordinators/access.coordinator.ts

> 27 lines of code and 7 definitions.

Tree: GovLab Quality
Language: typescript
Layer: application
Canonical: https://banes-lab.com/anatomy/quality#file-quality-core-coordinators-access-coordinator-ts
Source text: https://banes-lab.com/source/quality/core/coordinators/access.coordinator.ts.txt

Listed in [core/coordinators](https://banes-lab.com/api/source/quality/core/coordinators.md), before [core/coordinators/catalog.coordinator.ts](https://banes-lab.com/source/quality/core/coordinators/catalog.coordinator.ts.md).

## Definitions

- `diagnose` (lexical_declaration, line 11)
- `fixIndexAccess` (lexical_declaration, line 19, exported)
- `COMPILER` (lexical_declaration, line 9)
- `result` (lexical_declaration, line 12)
- `total` (lexical_declaration, line 20, exported)
- `original` (lexical_declaration, line 22, exported)
- `updated` (lexical_declaration, line 23, exported)

## Contained in

- [core/coordinators](https://banes-lab.com/anatomy/quality/folder-quality-core-coordinators.md)

## Uses

- [configuration/strings/tool.strings.ts](https://banes-lab.com/source/quality/configuration/strings/tool.strings.ts.md)
- [core/parsers/access.parser.ts](https://banes-lab.com/source/quality/core/parsers/access.parser.ts.md)
- [core/predicates/failure.predicate.ts](https://banes-lab.com/source/quality/core/predicates/failure.predicate.ts.md)

## Linked from

- [configuration/strings](https://banes-lab.com/anatomy/quality/folder-quality-configuration-strings.md)
- [core/coordinators](https://banes-lab.com/anatomy/quality/folder-quality-core-coordinators.md)
- [core/parsers](https://banes-lab.com/anatomy/quality/folder-quality-core-parsers.md)
- [core/predicates](https://banes-lab.com/anatomy/quality/folder-quality-core-predicates.md)

## Source

```typescript
import { UNKNOWN_SIGNAL, signalDeathMessage } from "#configuration/strings/tool.strings";
import { bracketAccess } from "#core/converters/access.converter";
import { hitsByFile } from "#core/parsers/access.parser";
import { readFileSync } from "node:fs";
import { signalKilled } from "#core/predicates/failure.predicate";
import { spawnTool } from "#core/adapters/invocation.adapter";
import { writeVerbatim } from "@govlab/canonical-write";

const COMPILER = "tsc";

const diagnose = function diagnose(projectPath: string): string {
    const result = spawnTool("npx", [COMPILER, "--noEmit", "-p", projectPath], { encoding: "utf8" });
    if (signalKilled(result.status)) {
        throw new Error(signalDeathMessage(COMPILER, result.signal ?? UNKNOWN_SIGNAL));
    }
    return `${result.stdout}${result.stderr}`;
};

export const fixIndexAccess = function fixIndexAccess(projectPath: string): number {
    let total = 0;
    for (const [file, hits] of hitsByFile(diagnose(projectPath))) {
        const original = readFileSync(file, "utf8");
        const updated = bracketAccess(original, hits);
        if (updated !== original) {
            writeVerbatim(file, updated);
            total += hits.length;
        }
    }
    return total;
};
```
