# core/selectors/failure.selector.ts

> 16 lines of code and 4 definitions.

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

Listed in [core/selectors](https://banes-lab.com/api/source/quality/core/selectors.md), after [core/selectors/exclusions.selector.ts](https://banes-lab.com/source/quality/core/selectors/exclusions.selector.ts.md) and before [core/selectors/record.selector.ts](https://banes-lab.com/source/quality/core/selectors/record.selector.ts.md).

## Definitions

- `tailLines` (lexical_declaration, line 6, exported)
- `errnoCode` (lexical_declaration, line 14, exported)
- `exitDetail` (lexical_declaration, line 10, exported)
- `spawnDetail` (lexical_declaration, line 18, exported)

## Contained in

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

## Used by

- [core/adapters/tool.clippy.adapter.ts](https://banes-lab.com/source/quality/core/adapters/tool.clippy.adapter.ts.md)
- [core/adapters/tool.golangci-lint.adapter.ts](https://banes-lab.com/source/quality/core/adapters/tool.golangci-lint.adapter.ts.md)
- [core/adapters/tool.oxlint.adapter.ts](https://banes-lab.com/source/quality/core/adapters/tool.oxlint.adapter.ts.md)
- [core/adapters/tool.rubocop.adapter.ts](https://banes-lab.com/source/quality/core/adapters/tool.rubocop.adapter.ts.md)
- [core/adapters/tool.ruff.adapter.ts](https://banes-lab.com/source/quality/core/adapters/tool.ruff.adapter.ts.md)
- [core/adapters/tool.sqlfluff.adapter.ts](https://banes-lab.com/source/quality/core/adapters/tool.sqlfluff.adapter.ts.md)
- [core/predicates/failure.predicate.ts](https://banes-lab.com/source/quality/core/predicates/failure.predicate.ts.md)

## Linked from

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

## Source

```typescript
import { NO_ERROR_DETAIL } from "#configuration/strings/tool.strings";
import { STDERR_TAIL } from "#configuration/constants/tool.constants";
import type { ToolExit } from "#types/tool.types";
import { isRecord } from "#core/selectors/record.selector";

export const tailLines = function tailLines(text: string, fallback: string): string {
    return text.trim().split("\n").slice(-STDERR_TAIL).join(" ") || fallback;
};

export const exitDetail = function exitDetail(exit: ToolExit): string {
    return tailLines(exit.stderr.trim() || exit.stdout.trim(), NO_ERROR_DETAIL);
};

export const errnoCode = function errnoCode(error: Error): string {
    return isRecord(error) && typeof error["code"] === "string" ? error["code"] : "";
};

export const spawnDetail = function spawnDetail(error: Error): string {
    return `${errnoCode(error)} ${error.message}`.trim();
};
```
