diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 9738920df7527..1c3a4c1661835 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -13,11 +13,31 @@ import { } from "./_namespaces/ts"; /** @internal */ -export const emptyArray: never[] = [] as never[]; +export const emptyArray: never[] = Object.freeze([]) as never[]; /** @internal */ -export const emptyMap: ReadonlyMap = new Map(); +export const emptyMap: ReadonlyMap = createReadonlyMap(); /** @internal */ -export const emptySet: ReadonlySet = new Set(); +export const emptySet: ReadonlySet = createReadonlySet(); + +function createReadonlyMap(): ReadonlyMap { + const map: ReadonlyMap = new Map(); + Object.defineProperties(map, { + clear: { value: notImplemented }, + delete: { value: notImplemented }, + set: { value: notImplemented }, + }); + return Object.freeze(map); +} + +function createReadonlySet(): ReadonlySet { + const set: ReadonlySet = new Set(); + Object.defineProperties(set, { + add: { value: notImplemented }, + clear: { value: notImplemented }, + delete: { value: notImplemented }, + }); + return Object.freeze(set); +} /** @internal */ export function length(array: readonly any[] | undefined): number { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index f9ec2c9b48639..13584ef81c198 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -568,7 +568,7 @@ import { } from "./_namespaces/ts"; /** @internal */ -export const resolvingEmptyArray: never[] = []; +export const resolvingEmptyArray: never[] = Object.freeze([]) as never[]; /** @internal */ export const externalHelpersModuleNameText = "tslib"; diff --git a/src/server/utilitiesPublic.ts b/src/server/utilitiesPublic.ts index ac8e0f3c131c3..b90091e8f2292 100644 --- a/src/server/utilitiesPublic.ts +++ b/src/server/utilitiesPublic.ts @@ -19,7 +19,7 @@ export enum LogLevel { verbose, } -export const emptyArray: SortedReadonlyArray = createSortedArray(); +export const emptyArray: SortedReadonlyArray = Object.freeze(createSortedArray()); export interface Logger { close(): void;