# configuration/constants/idiom.constants.ts

> 37 lines of code and 3 definitions.

Tree: GovLab Quality
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/quality#file-quality-configuration-constants-idiom-constants-ts
Source text: https://banes-lab.com/source/quality/configuration/constants/idiom.constants.ts.txt

Listed in [configuration/constants](https://banes-lab.com/api/source/quality/configuration/constants.md), after [configuration/constants/eslint.constants.ts](https://banes-lab.com/source/quality/configuration/constants/eslint.constants.ts.md) and before [configuration/constants/invocation.constants.ts](https://banes-lab.com/source/quality/configuration/constants/invocation.constants.ts.md).

## Definitions

- `DEPRECATED_MEMBERS` (lexical_declaration, line 3, exported)
- `DEPRECATED_GLOBALS` (lexical_declaration, line 24, exported)
- `DEPRECATED_CTORS` (lexical_declaration, line 32, exported)

## Contained in

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

## Source

```typescript
import type { DeprecatedApi } from "#types/idiom.types";

export const DEPRECATED_MEMBERS: ReadonlyMap<string, DeprecatedApi> = new Map([
    [
        "substr",
        {
            reason: "String.prototype.substr is Annex B legacy (its 2nd arg is length, not end index)",
            replacement: "slice() or substring()",
        },
    ],
    [
        "hasOwnProperty",
        {
            reason: "a direct hasOwnProperty call is prototype-unsafe and shadowable by an own property",
            replacement: "Object.hasOwn(obj, key)",
        },
    ],
    ["getYear", { reason: "Date.prototype.getYear is deprecated (returns year - 1900)", replacement: "getFullYear()" }],
    ["setYear", { reason: "Date.prototype.setYear is deprecated", replacement: "setFullYear()" }],
    ["keyCode", { reason: "KeyboardEvent.keyCode is deprecated", replacement: "event.key or event.code" }],
    ["charCode", { reason: "KeyboardEvent.charCode is deprecated", replacement: "event.key" }],
]);

export const DEPRECATED_GLOBALS: ReadonlyMap<string, DeprecatedApi> = new Map([
    [
        "escape",
        { reason: "escape() is deprecated and mishandles non-ASCII code points", replacement: "encodeURIComponent()" },
    ],
    ["unescape", { reason: "unescape() is deprecated", replacement: "decodeURIComponent()" }],
]);

export const DEPRECATED_CTORS: ReadonlyMap<string, DeprecatedApi> = new Map([
    [
        "Buffer",
        {
            reason: "new Buffer() is deprecated for security reasons (uninitialized memory)",
            replacement: "Buffer.from(value) or Buffer.alloc(size)",
        },
    ],
]);
```
