# core/selectors/syntax.selector.ts

> 17 lines of code and 5 definitions.

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

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

## Definitions

- `propKeyName` (lexical_declaration, line 15, exported)
- `isSyntaxNode` (lexical_declaration, line 3)
- `identName` (lexical_declaration, line 11, exported)
- `asNode` (lexical_declaration, line 7, exported)
- `{ key }` (lexical_declaration, line 19, exported)

## Contained in

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

## Used by

- [core/quality/eslint/no-shell-argument-injection.eslint.rule.ts](https://banes-lab.com/source/quality/core/quality/eslint/no-shell-argument-injection.eslint.rule.ts.md)

## Linked from

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

## Source

```typescript
import type { SyntaxNode } from "#types/syntax.types";

const isSyntaxNode = function isSyntaxNode(value: unknown): value is SyntaxNode {
    return value !== null && typeof value === "object" && "type" in value;
};

export const asNode = function asNode(value: unknown): SyntaxNode | null {
    return isSyntaxNode(value) ? value : null;
};

export const identName = function identName(node?: SyntaxNode): string | null {
    return node?.type === "Identifier" && typeof node.name === "string" ? node.name : null;
};

export const propKeyName = function propKeyName(prop: SyntaxNode): string | null {
    if (prop.computed === true) {
        return null;
    }
    const { key } = prop;
    return identName(key) ?? (key?.type === "Literal" && typeof key.value === "string" ? key.value : null);
};
```
