# core/analyzers/credential.analyzer.ts

> 26 lines of code and 5 definitions.

Tree: Project Scripts
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/scripts#file-scripts-core-analyzers-credential-analyzer-ts
Source text: https://banes-lab.com/source/scripts/core/analyzers/credential.analyzer.ts.txt

Listed in [core/analyzers](https://banes-lab.com/api/source/scripts/core/analyzers.md), after [core/analyzers/closure.analyzer.ts](https://banes-lab.com/source/scripts/core/analyzers/closure.analyzer.ts.md) and before [core/analyzers/dependency.analyzer.ts](https://banes-lab.com/source/scripts/core/analyzers/dependency.analyzer.ts.md).

## Definitions

- `tokensOf` (lexical_declaration, line 5)
- `found` (lexical_declaration, line 6)
- `current` (lexical_declaration, line 7)
- `credentialFindings` (lexical_declaration, line 19, exported)
- `kinds` (lexical_declaration, line 25, exported)

## Contained in

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

## Source

```typescript
import { type Detector, detectedKinds } from "@ssot/secrets";
import { LINE_BREAK, TOKEN_BREAKS } from "#configuration/constants/credential.constants";
import type { CredentialFinding } from "#types/credential.types";

const tokensOf = function tokensOf(line: string): readonly string[] {
    const found: string[] = [];
    let current = "";
    for (const character of line) {
        if (TOKEN_BREAKS.has(character)) {
            found.push(current);
            current = "";
        } else {
            current += character;
        }
    }
    return [...found, current].filter((token) => token.length > 0);
};

export const credentialFindings = function credentialFindings(
    file: string,
    text: string,
    detectors: readonly Detector[],
): readonly CredentialFinding[] {
    return text.split(LINE_BREAK).flatMap((line, index) => {
        const kinds = [line, ...tokensOf(line)].flatMap((token) => detectedKinds(token, detectors));
        return kinds.slice(0, 1).map((kind) => ({ file, kind, line: index + 1 }));
    });
};
```
