• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1namespace ts {
2    // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values.
3    // If changing the text in this section, be sure to test `configurePrerelease` too.
4    export const versionMajorMinor = "4.2";
5    // The following is baselined as a literal template type without intervention
6    /** The version of the TypeScript compiler release */
7    // eslint-disable-next-line @typescript-eslint/no-inferrable-types
8    export const version = "4.2.3" as string;
9
10    /**
11     * Type of objects whose values are all of the same type.
12     * The `in` and `for-in` operators can *not* be safely used,
13     * since `Object.prototype` may be modified by outside code.
14     */
15    export interface MapLike<T> {
16        [index: string]: T;
17    }
18
19    export interface SortedReadonlyArray<T> extends ReadonlyArray<T> {
20        " __sortedArrayBrand": any;
21    }
22
23    export interface SortedArray<T> extends Array<T> {
24        " __sortedArrayBrand": any;
25    }
26
27    /** Common read methods for ES6 Map/Set. */
28    export interface ReadonlyCollection<K> {
29        readonly size: number;
30        has(key: K): boolean;
31        keys(): Iterator<K>;
32    }
33
34    /** Common write methods for ES6 Map/Set. */
35    export interface Collection<K> extends ReadonlyCollection<K> {
36        delete(key: K): boolean;
37        clear(): void;
38    }
39
40    /** ES6 Map interface, only read methods included. */
41    export interface ReadonlyESMap<K, V> extends ReadonlyCollection<K> {
42        get(key: K): V | undefined;
43        values(): Iterator<V>;
44        entries(): Iterator<[K, V]>;
45        forEach(action: (value: V, key: K) => void): void;
46    }
47
48    /**
49     * ES6 Map interface, only read methods included.
50     */
51    export interface ReadonlyMap<T> extends ReadonlyESMap<string, T> {
52    }
53
54    /** ES6 Map interface. */
55    export interface ESMap<K, V> extends ReadonlyESMap<K, V>, Collection<K> {
56        set(key: K, value: V): this;
57    }
58
59    /**
60     * ES6 Map interface.
61     */
62    export interface Map<T> extends ESMap<string, T> {
63    }
64
65    /* @internal */
66    export interface MapConstructor {
67        // eslint-disable-next-line @typescript-eslint/prefer-function-type
68        new <K, V>(iterable?: readonly (readonly [K, V])[] | ReadonlyESMap<K, V>): ESMap<K, V>;
69    }
70
71    /** ES6 Set interface, only read methods included. */
72    export interface ReadonlySet<T> extends ReadonlyCollection<T> {
73        has(value: T): boolean;
74        values(): Iterator<T>;
75        entries(): Iterator<[T, T]>;
76        forEach(action: (value: T, key: T) => void): void;
77    }
78
79    /** ES6 Set interface. */
80    export interface Set<T> extends ReadonlySet<T>, Collection<T> {
81        add(value: T): this;
82        delete(value: T): boolean;
83    }
84
85    /* @internal */
86    export interface SetConstructor {
87        // eslint-disable-next-line @typescript-eslint/prefer-function-type
88        new <T>(iterable?: readonly T[] | ReadonlySet<T>): Set<T>;
89    }
90
91    /** ES6 Iterator type. */
92    export interface Iterator<T> {
93        next(): { value: T, done?: false } | { value: void, done: true };
94    }
95
96    /** Array that is only intended to be pushed to, never read. */
97    export interface Push<T> {
98        push(...values: T[]): void;
99        /* @internal*/ readonly length: number;
100    }
101
102    /* @internal */
103    export type EqualityComparer<T> = (a: T, b: T) => boolean;
104
105    /* @internal */
106    export type Comparer<T> = (a: T, b: T) => Comparison;
107
108    /* @internal */
109    export const enum Comparison {
110        LessThan    = -1,
111        EqualTo     = 0,
112        GreaterThan = 1
113    }
114
115    /* @internal */
116    export namespace NativeCollections {
117        declare const Map: MapConstructor | undefined;
118        declare const Set: SetConstructor | undefined;
119
120        /**
121         * Returns the native Map implementation if it is available and compatible (i.e. supports iteration).
122         */
123        export function tryGetNativeMap(): MapConstructor | undefined {
124            // Internet Explorer's Map doesn't support iteration, so don't use it.
125            // eslint-disable-next-line no-in-operator
126            return typeof Map !== "undefined" && "entries" in Map.prototype && new Map([[0, 0]]).size === 1 ? Map : undefined;
127        }
128
129        /**
130         * Returns the native Set implementation if it is available and compatible (i.e. supports iteration).
131         */
132        export function tryGetNativeSet(): SetConstructor | undefined {
133            // Internet Explorer's Set doesn't support iteration, so don't use it.
134            // eslint-disable-next-line no-in-operator
135            return typeof Set !== "undefined" && "entries" in Set.prototype && new Set([0]).size === 1 ? Set : undefined;
136        }
137    }
138}