# core/reporters/grammar.reporter.ts

> 25 lines of code and 4 definitions.

Tree: Code Parse
Language: typescript
Layer: operations
Canonical: https://banes-lab.com/anatomy/code-parse#file-code-parse-core-reporters-grammar-reporter-ts
Source text: https://banes-lab.com/source/code-parse/core/reporters/grammar.reporter.ts.txt

Listed in [core/reporters](https://banes-lab.com/api/source/code-parse/core/reporters.md).

## Definitions

- `printNotes` (lexical_declaration, line 11)
- `reportBuild` (lexical_declaration, line 17, exported)
- `built` (lexical_declaration, line 18, exported)
- `fetchFailed` (lexical_declaration, line 22, exported)

## Contained in

- [core/reporters](https://banes-lab.com/anatomy/code-parse/folder-code-parse-core-reporters.md)

## Uses

- [configuration/strings/grammar.strings.ts](https://banes-lab.com/source/code-parse/configuration/strings/grammar.strings.ts.md)

## Used by

- [core/coordinators/grammar.coordinator.ts](https://banes-lab.com/source/code-parse/core/coordinators/grammar.coordinator.ts.md)

## Linked from

- [configuration/strings](https://banes-lab.com/anatomy/code-parse/folder-code-parse-configuration-strings.md)
- [core/coordinators](https://banes-lab.com/anatomy/code-parse/folder-code-parse-core-coordinators.md)
- [core/reporters](https://banes-lab.com/anatomy/code-parse/folder-code-parse-core-reporters.md)

## Source

```typescript
import type { BuildKind, BuildResult } from "#types/grammar.types";
import {
    SKIPPED_PREFIX,
    WASM_UNBUILT_PREFIX,
    builtSummary,
    fetchFailedNote,
    noteLine,
} from "#configuration/strings/grammar.strings";
import process from "node:process";

const printNotes = function printNotes(results: readonly BuildResult[], kind: BuildKind, prefix: string): void {
    for (const entry of results.filter((result) => result.kind === kind)) {
        process.stdout.write(noteLine(prefix, entry.note));
    }
};

export const reportBuild = function reportBuild(results: readonly BuildResult[]): boolean {
    const built = results.filter((result) => result.kind === "built").map((result) => result.lang);
    process.stdout.write(builtSummary(built));
    printNotes(results, "skipped", SKIPPED_PREFIX);
    printNotes(results, "wasm-failed", WASM_UNBUILT_PREFIX);
    const fetchFailed = results.filter((result) => result.kind === "fetch-failed");
    for (const result of fetchFailed) {
        process.stderr.write(fetchFailedNote(result.note));
    }
    return fetchFailed.length === 0;
};
```
