Skip to content

Commit 0a8afc9

Browse files
author
Andy
authored
Merge pull request #10115 from Microsoft/export_specifiers_map
Add a helper function `getOrUpdateProperty` to prevent unprotected access to Maps.
2 parents 14f0aa0 + 204f2c1 commit 0a8afc9

File tree

6 files changed

+34
-4
lines changed

6 files changed

+34
-4
lines changed

src/compiler/core.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,12 @@ namespace ts {
323323
return keys;
324324
}
325325

326-
export function getProperty<T>(map: Map<T>, key: string): T {
327-
return hasOwnProperty.call(map, key) ? map[key] : undefined;
326+
export function getProperty<T>(map: Map<T>, key: string): T | undefined {
327+
return hasProperty(map, key) ? map[key] : undefined;
328+
}
329+
330+
export function getOrUpdateProperty<T>(map: Map<T>, key: string, makeValue: () => T): T {
331+
return hasProperty(map, key) ? map[key] : map[key] = makeValue();
328332
}
329333

330334
export function isEmpty<T>(map: Map<T>) {
@@ -941,7 +945,7 @@ namespace ts {
941945
* [^./] # matches everything up to the first . character (excluding directory seperators)
942946
* (\\.(?!min\\.js$))? # matches . characters but not if they are part of the .min.js file extension
943947
*/
944-
const singleAsteriskRegexFragmentFiles = "([^./]|(\\.(?!min\\.js$))?)*";
948+
const singleAsteriskRegexFragmentFiles = "([^./]|(\\.(?!min\\.js$))?)*";
945949
const singleAsteriskRegexFragmentOther = "[^/]*";
946950

947951
export function getRegularExpressionForWildcard(specs: string[], basePath: string, usage: "files" | "directories" | "exclude") {

src/compiler/emitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6842,7 +6842,7 @@ const _super = (function (geti, seti) {
68426842
// export { x, y }
68436843
for (const specifier of (<ExportDeclaration>node).exportClause.elements) {
68446844
const name = (specifier.propertyName || specifier.name).text;
6845-
(exportSpecifiers[name] || (exportSpecifiers[name] = [])).push(specifier);
6845+
getOrUpdateProperty(exportSpecifiers, name, () => []).push(specifier);
68466846
}
68476847
}
68486848
break;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [exportToString.ts]
2+
const toString = 0;
3+
export { toString };
4+
5+
6+
//// [exportToString.js]
7+
"use strict";
8+
var toString = 0;
9+
exports.toString = toString;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
=== tests/cases/compiler/exportToString.ts ===
2+
const toString = 0;
3+
>toString : Symbol(toString, Decl(exportToString.ts, 0, 5))
4+
5+
export { toString };
6+
>toString : Symbol(toString, Decl(exportToString.ts, 1, 8))
7+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
=== tests/cases/compiler/exportToString.ts ===
2+
const toString = 0;
3+
>toString : number
4+
>0 : number
5+
6+
export { toString };
7+
>toString : number
8+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const toString = 0;
2+
export { toString };

0 commit comments

Comments
 (0)