namespace ts { // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values. // If changing the text in this section, be sure to test `configurePrerelease` too. export const versionMajorMinor = "4.6"; // The following is baselined as a literal template type without intervention /** The version of the TypeScript compiler release */ // eslint-disable-next-line @typescript-eslint/no-inferrable-types export const version: string = `${versionMajorMinor}.0-dev`; /** * Type of objects whose values are all of the same type. * The `in` and `for-in` operators can *not* be safely used, * since `Object.prototype` may be modified by outside code. */ export interface MapLike { [index: string]: T; } export interface SortedReadonlyArray extends ReadonlyArray { " __sortedArrayBrand": any; } export interface SortedArray extends Array { " __sortedArrayBrand": any; } /** Common read methods for ES6 Map/Set. */ export interface ReadonlyCollection { readonly size: number; has(key: K): boolean; keys(): Iterator; } /** Common write methods for ES6 Map/Set. */ export interface Collection extends ReadonlyCollection { delete(key: K): boolean; clear(): void; } /** ES6 Map interface, only read methods included. */ export interface ReadonlyESMap extends ReadonlyCollection { get(key: K): V | undefined; values(): Iterator; entries(): Iterator<[K, V]>; forEach(action: (value: V, key: K) => void): void; } /** * ES6 Map interface, only read methods included. */ export interface ReadonlyMap extends ReadonlyESMap { } /** ES6 Map interface. */ export interface ESMap extends ReadonlyESMap, Collection { set(key: K, value: V): this; } /** * ES6 Map interface. */ export interface Map extends ESMap { } /* @internal */ export interface MapConstructor { // eslint-disable-next-line @typescript-eslint/prefer-function-type new (iterable?: readonly (readonly [K, V])[] | ReadonlyESMap): ESMap; } /** ES6 Set interface, only read methods included. */ export interface ReadonlySet extends ReadonlyCollection { has(value: T): boolean; values(): Iterator; entries(): Iterator<[T, T]>; forEach(action: (value: T, key: T) => void): void; } /** ES6 Set interface. */ export interface Set extends ReadonlySet, Collection { add(value: T): this; delete(value: T): boolean; } /* @internal */ export interface SetConstructor { // eslint-disable-next-line @typescript-eslint/prefer-function-type new (iterable?: readonly T[] | ReadonlySet): Set; } /** ES6 Iterator type. */ export interface Iterator { next(): { value: T, done?: false } | { value: void, done: true }; } /** Array that is only intended to be pushed to, never read. */ export interface Push { push(...values: T[]): void; /* @internal*/ readonly length: number; } /* @internal */ export type EqualityComparer = (a: T, b: T) => boolean; /* @internal */ export type Comparer = (a: T, b: T) => Comparison; /* @internal */ export const enum Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 } /* @internal */ namespace NativeCollections { declare const Map: MapConstructor | undefined; declare const Set: SetConstructor | undefined; /** * Returns the native Map implementation if it is available and compatible (i.e. supports iteration). */ export function tryGetNativeMap(): MapConstructor | undefined { // Internet Explorer's Map doesn't support iteration, so don't use it. // eslint-disable-next-line no-in-operator return typeof Map !== "undefined" && "entries" in Map.prototype && new Map([[0, 0]]).size === 1 ? Map : undefined; } /** * Returns the native Set implementation if it is available and compatible (i.e. supports iteration). */ export function tryGetNativeSet(): SetConstructor | undefined { // Internet Explorer's Set doesn't support iteration, so don't use it. // eslint-disable-next-line no-in-operator return typeof Set !== "undefined" && "entries" in Set.prototype && new Set([0]).size === 1 ? Set : undefined; } } /* @internal */ export const Map = getCollectionImplementation("Map", "tryGetNativeMap", "createMapShim"); /* @internal */ export const Set = getCollectionImplementation("Set", "tryGetNativeSet", "createSetShim"); /* @internal */ type GetIteratorCallback = | ReadonlyESMap | undefined>(iterable: I) => Iterator< I extends ReadonlyESMap ? [K, V] : I extends ReadonlySet ? T : I extends readonly (infer T)[] ? T : I extends undefined ? undefined : never>; /* @internal */ function getCollectionImplementation< K1 extends MatchingKeys any>, K2 extends MatchingKeys ReturnType<(typeof NativeCollections)[K1]>> >(name: string, nativeFactory: K1, shimFactory: K2): NonNullable> { // NOTE: ts.ShimCollections will be defined for typescriptServices.js but not for tsc.js, so we must test for it. const constructor = NativeCollections[nativeFactory]() ?? ShimCollections?.[shimFactory](getIterator); if (constructor) return constructor as NonNullable>; throw new Error(`TypeScript requires an environment that provides a compatible native ${name} implementation.`); } }