Skip to content

Commit cee1695

Browse files
committed
Freeze emptyArray, make emptyMap and emptySet immutable
1 parent 9cbcf01 commit cee1695

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

src/compiler/core.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,27 @@ import {
1313
} from "./_namespaces/ts";
1414

1515
/** @internal */
16-
export const emptyArray: never[] = [] as never[];
16+
export const emptyArray: never[] = Object.freeze([]) as never[];
1717
/** @internal */
18-
export const emptyMap: ReadonlyMap<never, never> = new Map<never, never>();
18+
export const emptyMap: ReadonlyMap<never, never> = createReadonlyMap();
1919
/** @internal */
20-
export const emptySet: ReadonlySet<never> = new Set<never>();
20+
export const emptySet: ReadonlySet<never> = createReadonlySet();
21+
22+
function createReadonlyMap<K, V>(): ReadonlyMap<K, V> {
23+
const map: ReadonlyMap<K, V> & Partial<Map<K, V>> = new Map();
24+
map.clear = notImplemented;
25+
map.delete = notImplemented;
26+
map.set = notImplemented;
27+
return Object.freeze(map);
28+
}
29+
30+
function createReadonlySet<T>(): ReadonlySet<T> {
31+
const set: ReadonlySet<T> & Partial<Set<T>> = new Set();
32+
set.add = notImplemented;
33+
set.clear = notImplemented;
34+
set.delete = notImplemented;
35+
return Object.freeze(set);
36+
}
2137

2238
/** @internal */
2339
export function length(array: readonly any[] | undefined): number {

src/compiler/utilities.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ import {
564564
} from "./_namespaces/ts";
565565

566566
/** @internal */
567-
export const resolvingEmptyArray: never[] = [];
567+
export const resolvingEmptyArray: never[] = Object.freeze([]) as never[];
568568

569569
/** @internal */
570570
export const externalHelpersModuleNameText = "tslib";

src/server/utilitiesPublic.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export enum LogLevel {
1919
verbose,
2020
}
2121

22-
export const emptyArray: SortedReadonlyArray<never> = createSortedArray<never>();
22+
export const emptyArray: SortedReadonlyArray<never> = Object.freeze(createSortedArray<never>());
2323

2424
export interface Logger {
2525
close(): void;

0 commit comments

Comments
 (0)